Closed PavelBlend closed 2 weeks ago
На 1a6317f6 и Blender 3.1.2 - не восроизводится:
https://github.com/user-attachments/assets/c9a5e50e-d6f8-4111-9aca-9dbf30be2a17
@igelbox у меня в 3.1 шейпы всё таки смещаются, но не так сильно:
https://github.com/user-attachments/assets/7b873445-aebb-48ed-855f-54ab4fc8d84c
Эт короч какая-то хрень в Блендере. Он же не полностью поддерживает матричные преобразования пространства, а только Translation/Rotation/Scale. Вот он, похоже, и пытается как-то их вытащить из полной матрицы, что мы ему отдаём:
Отдаём такую => будет криво:
Matrix(((2.165436541190502e-08, -0.06199997290968895, -2.514601078473788e-07, 0.1739184558391571),
(-3.578126097636414e-07, -9.336877582200032e-08, 0.1592000424861908, -0.04987097159028053),
(-0.0692005306482315, 1.8275335023076877e-08, -5.005479692954395e-07, 0.06411412358283997),
(0.0, 0.0, 0.0, 1.0)))
А если её "почистить" => будет норм:
Matrix(((0.0, -0.06199997290968895, 0.0, 0.1739184558391571),
(0.0, 0.0, 0.1592000424861908, -0.04987097159028053),
(-0.0692005306482315, 0.0, 0.0, 0.06411412358283997),
(0.0, 0.0, 0.0, 1.0)))
НО, мне бы не хотелось тут говнокод) с eps=1e-6 писать.. попробую сделать разложение в Translation/Rotation/Scale и пересборку матрицы сам, вдруг поможет.
Ух, не, пересборка - не помогает, хз почему. Зато нашёл вариант без очистки матриц, но сложный, но, похоже, самый правильный: Раз уж ошибка накапливается при вычислении общей матрицы (т.е. при перемножении всех матриц parent-объектов, то можно исхитриться и создавать helper-не внутри системы координат арматуры, а внутри системы координат кости, для которой он создаётся. Для этого можно:
Custom Object
= единичный куб (его даже на сцену можно не добавлять) и Wireframe
matrix_basis
вычисленный из def bone_matrix(bone):
, но (естественно) уже без учёта pose_bone.matrix
Код не писал, попробовал только в консольке побаловаться - выглядит норм:
Краткое описание проблемы:
После нажатия
Edit Shape
, в сцену добавляется объект шейпа, который имеет не правильные трансформации. Шейп повёрнут не правильно.Как воспроизвести ошибку:
*.ogf
файл: stalker_bandit_1.zip (это файл из ТЧ)bip01_l_foot
(левая ступня). Для других костей этого бага нет.Edit Shape
Ожидаемое поведение:
Трансформации шейпа должны совпадать с теми трансформациями, которые были изначально.
Версии ПО:
Дополнительная полезная информация:
https://github.com/user-attachments/assets/fcc595e1-1a45-4d76-8881-34cc9aebbd3d