Движение. Почему В Данных Mocap Не Используются Простые Координаты Точек?

  • Автор темы Ibrahimov_mahir
  • Обновлено
  • 20, Oct 2024
  • #1

Возможно, вам это покажется глупым, но я действительно не знаю, как это работает в области 3D-анимации и захвата движения, но в данный момент мне нужно работать с файлами ASF/AMC, и мне это немного сложно понять ( то, что английский не является родным, не поможет).

Итак, вопрос в том, почему основные типы файлов захвата движения не используют простые координаты суставов для скелета?

Редактировать: я особенно думаю о формате Acclaim ASF/AMC, главным образом потому, что мне нужно использовать его с реализацией алгоритма, который использует позиции совместных вершин и дельты от начальной позиции для части движения. Посмотрев на то, как представлены данные, для меня имеет больше смысла представлять скелеты как суставные вершины, а движение как дельты между исходным скелетом и новым перемещенным скелетом.

#движение #захват

Ibrahimov_mahir


Рег
08 Nov, 2019

Тем
71

Постов
224

Баллов
579
  • 26, Oct 2024
  • #2

Сами по себе координаты суставов не дают достаточно информации о вращении.

Например, вытяните руку в сторону. Обратите внимание, что у вас все еще есть одна степень свободы, чтобы повернуть руку, не затрагивая положения локтя или запястья. Таким образом, если бы у вас был формат захвата движения, в котором хранились только эти координаты, вы не смогли бы различить эти позы.

 

Mrinferno


Рег
09 Dec, 2004

Тем
86

Постов
192

Баллов
652
  • 26, Oct 2024
  • #3

Я не знаком с различными форматами файлов захвата движения и с тем, что именно они содержат, но я проделал некоторую работу над анимацией скелетов форм жизни, поэтому вот мое мнение по этому поводу.

Когда вы рисуете что-то, используя скелет для анимации, вы начинаете с «корневой» кости, которая, очевидно, будет иметь положение, как показано на этом рисунке. пример файла walk.asf:

 
 
 root 

Следующий root -> hips -> hips1 -> chest section defines all the bones:

chest

Затем существует иерархия костей, начинающаяся с этой корневой кости:

begin root hips hips hips1 hips2 hips3 hips1 chest chest chest1 chest2 chest3 chest1 neck # ... hips2 leftupleg # ... hips3 rightupleg end

(кстати, именно такую ​​информацию я просил в своих комментариях, и вам следовало бы задать более четкий вопрос.)

Каждая «дочерняя» кость соединена с конечной точкой своего родителя и определяет свою собственную ориентацию относительно этого родителя. Эта картинка помогает (взято из Документ Autodesk Motionbuilder)

Чтобы расположить любую кость, вам нужно подняться вверх по иерархии костей до корневой кости и объединить все их матрицы преобразования вместе. Например, чтобы расположить кость :bonedata begin id 1 name hips direction 0.000000 1.000000 0.000000 length 0.000000 axis 0.00000 0.00000 0.00000 XYZ dof rx ry rz limits (-180.0 180.0) (-180.0 180.0) (-180.0 180.0) end # other bone definitions follow , the following sequence is used: bonedata . Каждая из этих костей имеет собственную трансформацию (вращение, растяжение) на основе данных захвата движения, которая влияет на положение ее дочерних элементов. :root axis XYZ order TX TY TZ RZ RY RX position 0.0 0.0 0.0 orientation 0.0 0.0 0.0 bone is a special case that has no parents and represents the position and orientation of the whole model.

Данные захвата движения не могут содержать только положения костей, поскольку вращение по оси кости не может быть выражено иначе. Наконец, имеет смысл иметь данные захвата движения с точки зрения вращения и растяжения, потому что эти значения легче интерполировать, чем положение, и именно они в любом случае используются для рендеринга скелета.

 

Ynu758skestSoky


Рег
28 Jun, 2006

Тем
70

Постов
183

Баллов
553
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно