применить неиерархические преобразования к иерархическому скелету?

Я использую Blender3D, но ответ может не быть API-эксклюзивным.

У меня есть несколько матриц, которые мне нужно присвоить PoseBones. Результирующая поза выглядит хорошо, когда нет иерархии костей (родительские права), и портится, когда она есть. enter image description here

Я загрузил архив с образцом смешанных моделей, импортером текстовой анимации и тестовым файлом анимации: http://www.2shared.com/file/5qUjmnIs/sample_files.html
Импортируйте анимацию, выбрав Armature и запустив импортер на & quot; sba & quot; файл. Сделайте это для обеих арматур.

Вот как я назначаю позы в реальном (сложном) импортере:

matrix_bases = ... # matrix from file
animation_matrix = matrix_basis * pose.bones['mybone'].matrix.copy()
pose.bones[bonename].matrix = animation_matrix

Если я перехожу в режим редактирования, выбираю все кости и нажимаю Alt + P, чтобы отменить родительские функции, Поза снова выглядит хорошо.

В документации API говорится, что PoseBone.matrix находится в «объектном пространстве», но из этих тестов мне кажется, что они относятся к родительским костям.

Final 4x4 matrix after constraints and drivers are applied (object space)

Я пытался сделать что-то вроде этого:

matrix_basis = ... # matrix from file
animation_matrix = matrix_basis * (pose.bones['mybone'].matrix.copy()  * pose.bones[bonename].bone.parent.matrix_local.copy().inverted())
pose.bones[bonename].matrix = animation_matrix

Но это выглядит хуже. Экспериментировал с порядком операций, не везет со всеми.

Для записи, в старом API 2.4 это работало как прелесть:

matrix_basis = ... # matrix from file
animation_matrix = armature.bones['mybone'].matrix['ARMATURESPACE'].copy() * matrix_basis
pose.bones[bonename].poseMatrix = animation_matrix

pose.update()

Ссылка на Blender API ref:

http://www.blender.org/documentation/blender_python_api_2_63_17/bpy.types.BlendData.html#bpy.types.BlendData

http://www.blender.org/documentation/blender_python_api_2_63_17/bpy.types.PoseBone.html#bpy.types.PoseBone

Ответы на вопрос(1)

Ваш ответ на вопрос