1 Уроки Maya Инверсная кинематика 2 Сб Окт 02, 2010 7:03 am
Admin
Admin
Управлять связями можно не только через Joint-параметры, но и путем назначения им приоритетов (параметр Precedence). Данный параметр управляет процессом распространения совокупного движения между связями: на связи с большим приоритетом приходится большая доля общего движения, на связи с меньшим приоритетом — меньшая. При этом абсолютное значение приоритета связи роли не играет — важно лишь превышение одного приоритета над другим. По умолчанию приоритет у всех связей одинаков и равен нулю. Это приводит к тому, что связи, находящиеся ближе к конечному эффектору, перемещаются больше, нежели удаленные от него связи. Устанавливаются приоритеты в свитке ObjectParameters (панель Hierarchy, закладка IK) — либо вручную в поле Precedence, либо автоматически с помощью кнопок Child->Parent и Parent->Child (рис. 24).
При ручном вводе приоритет задается для каждого из объектов по отдельности, а в случае автоматического ввода приоритеты чаще всего устанавливаются сразу для всей иерархической цепочки. Вариант Child->Parent обеспечивает присваивание связям приоритетов, уменьшающихся от дочернего объекта к родительскому. В итоге объекты, находящиеся ближе к конечному эффектору, передвигаются больше, нежели удаленные от него. Вариант Parent->Child приводит к противоположным результатам, так как назначает связям приоритеты, увеличивающиеся от дочернего объекта к родительскому. Чтобы убедиться в этом, откройте сохраненный ранее на диске файл с булавой, выделите все элементы сцены и клонируйте их, а затем переместите скопированную булаву вправо (рис. 25). Выделите все объекты первой булавы и установите для них приоритеты, щелкнув на кнопке Child->Parent. А затем выделите все элементы второй булавы и установите для них приоритеты, щелкнув на кнопке Parent->Child. Перетащите влево конечный эффектор (объект Hedra01) у первой булавы, а затем проведите аналогичную операцию в отношении конечного эффектора второй булавы — результат будет различным, так как у правой булавы цепь окажется жесткой (рис. 26).
Блокирование IK-сетей
В любом месте IK-сети можно блокировать вычисления по закону инверсной кинематики, что нередко используется в сложных иерархиях из нескольких IK-цепей (то есть когда требуется, чтобы инверсная кинематика работала лишь для отдельных ее фрагментов). Реализуется это путем назначения определенных объектов так называемыми терминаторами (Terminator) — после этого все связи, расположенные по иерархии выше терминатора, будут рассчитываться по законам прямой (а не инверсной) кинематики. Для примера в рабочей сцене с двумя булавами назначьте обеим булавам приоритеты Child->Parent, а после этого во второй булаве одно из звеньев в середине цепи сделайте терминатором, выделив его и включив в свитке ObjectParameters флажок Terminator (рис. 27). Перетащите конечные эффекторы в обеих булавах. В первой, где нет терминатора, по IK-закону будет рассчитана ориентация и положение всех объектов, а во второй объекты выше терминатора даже не будут перемещены (рис. 28), так как на этом участке цепи IK-вычисления были заблокированы.
Анимация объектов при обратной кинематике
Существует два метода, которые можно использовать для анимирования объектов IK-кинематики, — Interactive IK и Applied IK. Первый предполагает ручное выделение и трансформацию конечного эффектора в указанных ключевых кадрах и используется в ситуациях, когда требуется большая свобода управления движением. Это самый легкий метод, но не самый точный. Более точен метод Applied IK, при котором программа сама вычисляет IK-решение для каждого кадра. Он применяется в случаях, когда иерархическая цепочка должна имитировать движение другого объекта сцены (follow-объекта), и более гибок в использовании, поскольку можно быстро изменить анимацию IK-цепочки за счет изменения анимации follow-объекта или выбора другого объекта для следования.
К методу Interactive IK мы уже прибегали (например, при анимировании цилиндров). Попробуем теперь применить метод Applied IK в ранее сохраненной рабочей сцене с цилиндрами. Удалите ранее созданные ключи анимации. Создайте на уровне нижнего цилиндра объект типа Dummy (команда Create=>Helpers=> Dummy) — рис. 29. Обратите внимание, что фиктивный объект не должен быть выровнен по нижнему цилиндру (у данных объектов совпадают лишь значения координаты Z, но не X и Y). Выделите верхний цилиндр, откройте на закладке IK панели Hierarchy свиток Object Parameters, щелкните на кнопке Bind и свяжите данный цилиндр с объектом-пустышкой. В итоге цилиндры сложатся, а в свитке Object Parameters появится информация об установке связи иерархической цепочки с Dummy-объектом (рис. 30). Анимируйте фиктивный объект обычным образом: щелкните на кнопке Auto Key, перетащите ползунок на последний кадр, переместите объект-пустышку по оси Z так, чтобы верхний цилиндр занял свою изначальную позицию, и отключите режим автоматической генерации ключей. Теперь нужно вычислить IK-решения для каждого кадра. Для этого выделите все три цилиндра и в свитке InverseKinematics включите флажок ClearKeys (Очистить ключи) — это приведет к тому, что только что созданные при ручном перемещении фиктивного объекта ключи анимации будут удалены до начала вычислений. После этого удостоверьтесь, что для спиннеров Start и End , определяющих время начала и завершения IK-решения, установлены значения 0 и 100 соответственно, и щелкните на кнопке ApplyIK. В итоге программа вычислит IK-решение (то есть значения позиционных и вращательных ключей) для всех трех объектов. Проиграйте анимацию — движение цилиндров станет более точным, что проще всего заметить при просматривании анимации посредством медленного перетаскивания ползунка на слайдере времени. В анимации по методу Interactive IK средний цилиндр при отключенном флажке Ease начинает свое движение еще до того, как верхний цилиндр достигнет своего нижнего ограничения (что неправильно), а в анимации AppliedIK ничего подобного не происходит — цилиндры строго соблюдают последовательность перемещения.
Примеры моделирования и анимации объектов с учетом инверсной кинематики
Крутящаяся булава
Вернитесь к сохраненной рабочей сцене с булавой. В проекции Top создайте произвольный криволинейный замкнутый сплайн (рис. 31). Выделите ручку булавы, назначьте ей контроллер HDSolver (команда Animation=>IKSolvers=>HDSolver) и укажите мышью на объект Hedra01. Свяжите ручку булавы со сплайном, который в итоге станет в иерархии Root-объектом (рис. 32). Выделите сплайн и в свитке RotationalJoints (панель Hierarchy, закладка IK) запретите для него вращение относительно всех трех осей (рис. 33). Назначьте созданный сплайн в качестве траектории движения для объекта Hedra01, выделив последний, открыв в меню Animation=>Constraints (Анимация=>Ограничения) команду PathConstraint (Ограничения пути) и указав сплайн в одном из окон проекций. Понаблюдайте созданную анимацию и для лучшего ее вида отрегулируйте форму сплайна и положение булавы относительно него (рис. 34). Возможный вид сцены в некоторых кадрах в полученном ролике представлен на рис. 35.
Свисающие бусы
Попробуем воспользоваться сплайновой инверсной кинематикой для моделирования эффектно свисающих с некоторой поверхности бус. Для начала создайте примитив Hedra — он сыграет роль одной бусины (рис. 36). Затем на его основе получите массив бусинок, воспользовавшись командой Array и настроив ее параметры примерно как на рис. 37. Получится полоска бусинок, вытянутых вдоль одной прямой, — обратите внимание, что бусинки должны располагаться вплотную друг к другу (рис. 38). Свяжите все бусинки в иерархическую структуру, начав с первой бусины и закончив последней (рис. 39).
Теперь нужно придать цепочке бусинок соответствующую бусам форму. Для этого вначале создайте произвольный криволинейный замкнутый сплайн. После этого объедините бусины в сплайновую IK-цепь, выделив первую бусину, открыв из меню Animation=> IK Solvers команду SplineIK Solver и указав на последнюю бусину — создастся объект IK Chain01, о чем внешне будет свидетельствовать появление линии, проходящей через всю длину цепи (рис. 40). Инструментом Select by Name выделите созданную IK-цепь, откройте на панели Motion вкладку SplineIKSolver, щелкните на кнопке None под надписью PickShape и укажите сплайн — вместо слова None появится имя сплайна (рис. 41). Данное действие приведет к тому, что имеющаяся цепочка бусин выстроится по форме сплайна, при этом совсем не исключено, что бусин для полного заполнения сплайновой кривой может не хватить, как и произошло в нашем случае (рис. 42). Тогда откажитесь от последней операции, дополнительно сформируйте группу недостающих бусин, свяжите их вместе с созданными ранее и вновь укажите сплайн в качестве формы для IK-цепи (рис. 43). Обратите внимание, что для ускорения процесса связывания можно клонировать весь набор бусин со связями, выбрав в окне клонирования вариант Reference (Подчинение), что позволит получить второй массив бусин уже сразу со связями, и тогда останется лишь связать данные наборы между собой.
Попробуем расположить полученную нитку бус на некоторой поверхности так, чтобы они с нее свисали. Создайте соответствующую поверхность, например в виде некой шкатулки (рис. 44). Активируйте сплайн, переключитесь в режим его редактирования и начните перемещать отдельные вершины сплайна относительно оси Z, наблюдая за ниткой бус и добиваясь естественности ее положения (рис. 45). По окончании текстурируйте сцену, возможный вид которой при визуализации представлен на рис. 46.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 24. Опции регулирования приоритетов
Рис. 24. Опции регулирования приоритетов
При ручном вводе приоритет задается для каждого из объектов по отдельности, а в случае автоматического ввода приоритеты чаще всего устанавливаются сразу для всей иерархической цепочки. Вариант Child->Parent обеспечивает присваивание связям приоритетов, уменьшающихся от дочернего объекта к родительскому. В итоге объекты, находящиеся ближе к конечному эффектору, передвигаются больше, нежели удаленные от него. Вариант Parent->Child приводит к противоположным результатам, так как назначает связям приоритеты, увеличивающиеся от дочернего объекта к родительскому. Чтобы убедиться в этом, откройте сохраненный ранее на диске файл с булавой, выделите все элементы сцены и клонируйте их, а затем переместите скопированную булаву вправо (рис. 25). Выделите все объекты первой булавы и установите для них приоритеты, щелкнув на кнопке Child->Parent. А затем выделите все элементы второй булавы и установите для них приоритеты, щелкнув на кнопке Parent->Child. Перетащите влево конечный эффектор (объект Hedra01) у первой булавы, а затем проведите аналогичную операцию в отношении конечного эффектора второй булавы — результат будет различным, так как у правой булавы цепь окажется жесткой (рис. 26).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 25. Появление второй булавы
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 26. Вид сцены после одинакового перемещения конечных эффекторов при разных параметрах приоритетов
Рис. 25. Появление второй булавы
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 26. Вид сцены после одинакового перемещения конечных эффекторов при разных параметрах приоритетов
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] |
В любом месте IK-сети можно блокировать вычисления по закону инверсной кинематики, что нередко используется в сложных иерархиях из нескольких IK-цепей (то есть когда требуется, чтобы инверсная кинематика работала лишь для отдельных ее фрагментов). Реализуется это путем назначения определенных объектов так называемыми терминаторами (Terminator) — после этого все связи, расположенные по иерархии выше терминатора, будут рассчитываться по законам прямой (а не инверсной) кинематики. Для примера в рабочей сцене с двумя булавами назначьте обеим булавам приоритеты Child->Parent, а после этого во второй булаве одно из звеньев в середине цепи сделайте терминатором, выделив его и включив в свитке ObjectParameters флажок Terminator (рис. 27). Перетащите конечные эффекторы в обеих булавах. В первой, где нет терминатора, по IK-закону будет рассчитана ориентация и положение всех объектов, а во второй объекты выше терминатора даже не будут перемещены (рис. 28), так как на этом участке цепи IK-вычисления были заблокированы.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 27. Назначение элемента терминатором
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 28. Вид сцены после одинакового перемещения конечных эффекторов иерархий (без терминатора — слева и с терминатором — справа)
Рис. 27. Назначение элемента терминатором
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 28. Вид сцены после одинакового перемещения конечных эффекторов иерархий (без терминатора — слева и с терминатором — справа)
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] |
Существует два метода, которые можно использовать для анимирования объектов IK-кинематики, — Interactive IK и Applied IK. Первый предполагает ручное выделение и трансформацию конечного эффектора в указанных ключевых кадрах и используется в ситуациях, когда требуется большая свобода управления движением. Это самый легкий метод, но не самый точный. Более точен метод Applied IK, при котором программа сама вычисляет IK-решение для каждого кадра. Он применяется в случаях, когда иерархическая цепочка должна имитировать движение другого объекта сцены (follow-объекта), и более гибок в использовании, поскольку можно быстро изменить анимацию IK-цепочки за счет изменения анимации follow-объекта или выбора другого объекта для следования.
К методу Interactive IK мы уже прибегали (например, при анимировании цилиндров). Попробуем теперь применить метод Applied IK в ранее сохраненной рабочей сцене с цилиндрами. Удалите ранее созданные ключи анимации. Создайте на уровне нижнего цилиндра объект типа Dummy (команда Create=>Helpers=> Dummy) — рис. 29. Обратите внимание, что фиктивный объект не должен быть выровнен по нижнему цилиндру (у данных объектов совпадают лишь значения координаты Z, но не X и Y). Выделите верхний цилиндр, откройте на закладке IK панели Hierarchy свиток Object Parameters, щелкните на кнопке Bind и свяжите данный цилиндр с объектом-пустышкой. В итоге цилиндры сложатся, а в свитке Object Parameters появится информация об установке связи иерархической цепочки с Dummy-объектом (рис. 30). Анимируйте фиктивный объект обычным образом: щелкните на кнопке Auto Key, перетащите ползунок на последний кадр, переместите объект-пустышку по оси Z так, чтобы верхний цилиндр занял свою изначальную позицию, и отключите режим автоматической генерации ключей. Теперь нужно вычислить IK-решения для каждого кадра. Для этого выделите все три цилиндра и в свитке InverseKinematics включите флажок ClearKeys (Очистить ключи) — это приведет к тому, что только что созданные при ручном перемещении фиктивного объекта ключи анимации будут удалены до начала вычислений. После этого удостоверьтесь, что для спиннеров Start и End , определяющих время начала и завершения IK-решения, установлены значения 0 и 100 соответственно, и щелкните на кнопке ApplyIK. В итоге программа вычислит IK-решение (то есть значения позиционных и вращательных ключей) для всех трех объектов. Проиграйте анимацию — движение цилиндров станет более точным, что проще всего заметить при просматривании анимации посредством медленного перетаскивания ползунка на слайдере времени. В анимации по методу Interactive IK средний цилиндр при отключенном флажке Ease начинает свое движение еще до того, как верхний цилиндр достигнет своего нижнего ограничения (что неправильно), а в анимации AppliedIK ничего подобного не происходит — цилиндры строго соблюдают последовательность перемещения.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 29. Появление фиктивного объекта
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 30. Вид сцены после связывания иерархической цепочки с Dummy-объектом
Рис. 29. Появление фиктивного объекта
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 30. Вид сцены после связывания иерархической цепочки с Dummy-объектом
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] |
Крутящаяся булава
Вернитесь к сохраненной рабочей сцене с булавой. В проекции Top создайте произвольный криволинейный замкнутый сплайн (рис. 31). Выделите ручку булавы, назначьте ей контроллер HDSolver (команда Animation=>IKSolvers=>HDSolver) и укажите мышью на объект Hedra01. Свяжите ручку булавы со сплайном, который в итоге станет в иерархии Root-объектом (рис. 32). Выделите сплайн и в свитке RotationalJoints (панель Hierarchy, закладка IK) запретите для него вращение относительно всех трех осей (рис. 33). Назначьте созданный сплайн в качестве траектории движения для объекта Hedra01, выделив последний, открыв в меню Animation=>Constraints (Анимация=>Ограничения) команду PathConstraint (Ограничения пути) и указав сплайн в одном из окон проекций. Понаблюдайте созданную анимацию и для лучшего ее вида отрегулируйте форму сплайна и положение булавы относительно него (рис. 34). Возможный вид сцены в некоторых кадрах в полученном ролике представлен на рис. 35.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 31. Исходная сцена с булавой и сплайном
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 32. Вид иерархической цепочки
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 33. Параметры настройки свитка RotationalJoints для сплайна
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 34. Вид сцены в одном из кадров анимации
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 35. Крутящаяся булава
Рис. 31. Исходная сцена с булавой и сплайном
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 32. Вид иерархической цепочки
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 33. Параметры настройки свитка RotationalJoints для сплайна
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 34. Вид сцены в одном из кадров анимации
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 35. Крутящаяся булава
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] |
Попробуем воспользоваться сплайновой инверсной кинематикой для моделирования эффектно свисающих с некоторой поверхности бус. Для начала создайте примитив Hedra — он сыграет роль одной бусины (рис. 36). Затем на его основе получите массив бусинок, воспользовавшись командой Array и настроив ее параметры примерно как на рис. 37. Получится полоска бусинок, вытянутых вдоль одной прямой, — обратите внимание, что бусинки должны располагаться вплотную друг к другу (рис. 38). Свяжите все бусинки в иерархическую структуру, начав с первой бусины и закончив последней (рис. 39).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 36. Исходная сцена
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 37. Параметры настройки операции Array
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 38. Полоска бусинок
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 39. Вид иерархической цепочки
Рис. 36. Исходная сцена
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 37. Параметры настройки операции Array
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 38. Полоска бусинок
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 39. Вид иерархической цепочки
Теперь нужно придать цепочке бусинок соответствующую бусам форму. Для этого вначале создайте произвольный криволинейный замкнутый сплайн. После этого объедините бусины в сплайновую IK-цепь, выделив первую бусину, открыв из меню Animation=> IK Solvers команду SplineIK Solver и указав на последнюю бусину — создастся объект IK Chain01, о чем внешне будет свидетельствовать появление линии, проходящей через всю длину цепи (рис. 40). Инструментом Select by Name выделите созданную IK-цепь, откройте на панели Motion вкладку SplineIKSolver, щелкните на кнопке None под надписью PickShape и укажите сплайн — вместо слова None появится имя сплайна (рис. 41). Данное действие приведет к тому, что имеющаяся цепочка бусин выстроится по форме сплайна, при этом совсем не исключено, что бусин для полного заполнения сплайновой кривой может не хватить, как и произошло в нашем случае (рис. 42). Тогда откажитесь от последней операции, дополнительно сформируйте группу недостающих бусин, свяжите их вместе с созданными ранее и вновь укажите сплайн в качестве формы для IK-цепи (рис. 43). Обратите внимание, что для ускорения процесса связывания можно клонировать весь набор бусин со связями, выбрав в окне клонирования вариант Reference (Подчинение), что позволит получить второй массив бусин уже сразу со связями, и тогда останется лишь связать данные наборы между собой.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 40. Результат создания сплайновой IK-цепи
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 41. Вид вкладки SplineIKSolver после указания сплайна
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 42. Неудачный результат распределения бусин по сплайну
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 43. Окончательный вид распределенных по сплайну бусин
Рис. 40. Результат создания сплайновой IK-цепи
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 41. Вид вкладки SplineIKSolver после указания сплайна
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 42. Неудачный результат распределения бусин по сплайну
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 43. Окончательный вид распределенных по сплайну бусин
Попробуем расположить полученную нитку бус на некоторой поверхности так, чтобы они с нее свисали. Создайте соответствующую поверхность, например в виде некой шкатулки (рис. 44). Активируйте сплайн, переключитесь в режим его редактирования и начните перемещать отдельные вершины сплайна относительно оси Z, наблюдая за ниткой бус и добиваясь естественности ее положения (рис. 45). По окончании текстурируйте сцену, возможный вид которой при визуализации представлен на рис. 46.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 44. Появление шкатулки
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 45. Редактирование сплайна
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 46. Свисающие бусы
]Рис. 44. Появление шкатулки
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 45. Редактирование сплайна
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Рис. 46. Свисающие бусы