3D моделирование в LightWave 8



Инверсионная кинематика

Чтобы освоить инверсную кинематику (Inverse Kinematics- IK), необходимо разобраться, что представляет собой прямая кинематика (Forward Kinematics - FK). В действительности все не так сложно. Прямая кинематика - это то, чем вы занимались до сих пор, перемещая объекты и создавая опорные кадры.
По сути, инверсная кинематика - это один из вариантов нацеливания. По принципу инверсной кинематики создается анимация целевого объекта, в которой конец связанной цепочки (посредством связи типа «родитель-ребенок») всегда нацелен на него. Помните, ранее в этой главе была рассмотрена камера, направленная на нулевой объект? При перемещении объекта камера поворачивалась вслед за ним. Подобным образом действует и инверсная кинематика. Только вместо одного элемента на объект нацелена целая цепь связанных элементов. Настоящая инверсная кинематика начинается в тот момент, когда конец такой связки уже не может оставаться направленным на целевой объект, и остальные элементы цепочки начинают изменять свое положение, чтобы нацеливание вновь стало возможным.
Легче всего проиллюстрировать IK на каком-либо несложном примере. Возьмите карандаш и поднесите его к лицу. Теперь представьте, что карандаш - это целевой объект. Восстановите последовательность выполненных действий. Так, вы совершали движения рукой, чтобы поднести карандаш к лицу, при этом работали кисть, запястье и локоть. Все кости руки действовали подобно элементам, связанным в одну цепочку. Это и есть инверсная кинематика.

Создание цепочки инверсной кинематики

1. Из выпадающего меню View (Вид), расположенного в верхнем левом углу окна проекции, выберите пункт Right (ZY).
2. Чтобы получить доступ к новым инструментам, щелкните по кнопке Items.
3. Из выпадающего меню Add, расположенного на панели инструментов, вы берите пункты Object -> Add Null (Объект -> Добавить нулевой объект). В появившемся диалоговом окне введите его имя - IK-Chain.
4. Чтобы добавить в нулевой объект кость, из выпадающего меню Add (Добавить) выберите пункты Bones -> Add Bone (Кости ->Добавить кость) или нажмите клавишу = (Равно).
5. В появившемся диалоговом окне введите имя созданной кости (например, Upper-Arm) и нажмите клавишу Enter.
6. Чтобы добавить еще одну кость, нажмите клавишу = (Равно). Присвойте ей имя Lower-Arm.
7. Снова нажмите клавишу = (Равно). Эту кость назовите Hand. В результате должна получиться цепочка костей, изображенная на рис. 10.56.

Рис. 10.56. На рисунке изображена простая цепочка связанных элементов
8. Выполните шаг 3, но назовите объект Arm-Goal.
9. На панели инструментов щелкните по кнопке Move (Переместить) или нажмите клавишу Т. Переместите объект Arm-Goal в точку с координатой 4 т, расположенную на оси Z. Он будет находиться в конце цепочки (рис. 10.57).
10. Выделите объект Hand, щелкнув по нему в окне проекции (рис. 10.58).

Рис. 10.57. Создайте целевой объект и поместите его в конце цепочки

Рис. 10.58. Целевой объект завершает цепочку
11. Щелкните по кнопке Motion Options (Настройки движения) на панели управления или нажмите клавишу М. Откроется окно Motion Options.
12. Из выпадающего меню Goal Object (Целевой объект) выберите пункт Arm-Goal (рис. 10.59); Активируются все настройки движения инверсной кинематической цепочки, Layout нарисует синюю штриховую линию между объектом Arm-Goal и конечной точкой объекта Hand, а также сплошную синюю линию между объектами IK-Chain и Arm-Goal (рис. 10.60). Сплошная линия показывает, к какой цепочке относится целевой объект, а штриховая - направление от конца цепочки к целевому объекту.

Рис. 10.59. Объект Arm-Goal станет целевым для последнего элемента цепочки

Рис. 10.60. В Layout отображаются виртуальные индикаторы, по которым легко определить, к какой цепочке относится тот или иной целевой объект
13. В окне Motion Options (Настройки движения) отметьте галочкой опцию Full-Time IK (Постоянно просчитывать IK) - рис. 10.61.

Рис. 10.61. Активируйте опцию Full-Time IK, чтобы Layout постоянно расчитывал и обновлял IK-цепочку
14. Перейдите на вкладку Controllers and Limits (Контроллеры и ограничения) - рис. 10.62.
15. Из выпадающего меню Pitch Controller (Контроллер наклона) выберите пункт Inverse Kinematics (Инверсная кинематика) - рис. 10.63.

Рис. 10.62. Чтобы получить доступ к настройкам вращения, перейдите на вкладку Controllers and Limits

Рис. 10.63. Опция Inverse Kinematics позволяет контролировать поворот объектов
16. В окне проекции щелкните по объекту Lower-Arm. Окно Motion Options (Настройки движения) автоматически обновится, отразив настройки для данного объекта (рис. 10.64).

Рис. 10.64. Чтобы произвести настройку движения следующего элемента, щелкните по нему в окне проекции, оставив при этом Motion Options открытым
17. Выполните шаг 15 для объекта Lower-Arm.
18. В окне проекции щелкните по объекту Upper-Arm.
19. Выполните шаг 15 для объекта Upper-Arm, затем закройте окно Motion Options.
20. В окне проекции, щелкните по нулевому объекту Arm-Goal.
21. Щелкнув по зеленому маркеру, перемещайте объект Arm-Goal вверх-вниз по оси Y. Цепочка костей поворачивается таким образом, чтобы объект Hand всегда был направлен на целевой объект (рис. 10.65).

Рис. 10.65. При перемещении на целевой объект всегда указывает конец IK-цепочки
22. Переместите объект Arm-Goal в точку с координатой 500 mm, расположенную на оси Y.
23. Щелкните по синему маркеру и переместите Arm-Goal в точку с координатой 600 mm по оси Z. Чем ближе объект Arm-Goal находится к объекту IK-Chain, тем больше приходится поворачиваться объектам Upper-Arm и Lower-Arm, чтобы объект Hand по-прежнему указывал на целевой объект (рис. 10.66).

Рис. 10.66. Если целевой объект будет двигаться таким образом, что объект в конце цепочки не сможет отслеживать его перемещения, то остальные элементы изменят свое положение
24. Из выпадающего меню File выберите пункты Save -> Save Scene (Сохранить -> Сохранить сцену) или нажмите клавишу S. Откроется диалоговое окно Save Scene.
25. Назовите сцену IK-Rig.lws и щелкните по кнопке ОК или нажмите клавишу Enter, чтобы сохранить ее в указанном файле. Не удаляйте файл, он пригодится для следующих упражнений.

Чем больше IK-цепочек включено в сцену, тем больше вычислений необходимо осуществлять. При включенной опции Full-Time IK Layout будет постоянно рассчитывать и обновлять IK-цепочки сцены, даже если они не задействованы в настоящий момент. Если вы заметите, что производительность системы снизилась, то отключите опцию Full-Tlme IK, чтобы Layout рассчитывал только ту инверсную кинематическую цепь, над которой вы работаете. Однако при этом можно вовремя не заметить возникновение нежелательных эффектов. Если это произойдет, следует немедленно активировать указанную опцию.

Удержание целевого объекта в зоне досягаемости

Вы познакомились с принципом действия IK-цепочек, теперь следует приступить к изучению их настроек. В этом разделе затронуты лишь основные опции инверсной кинематики, поскольку рассмотрение более глубоких вопросов и сложных методов применения IK выходят за рамки данной книги.
При работе с несколькими 1К-цепочками можно очень легко запутаться во множестве целевых объектов, разбросанных по всему экрану. Синяя штриховая линия, несомненно, является хорошим индикатором связи цепочки с целевым объектом, однако даже по ней иногда нельзя определить, какой цепочке принадлежит объект.
Очистить рабочую область позволяет опция Keep Goal Within Reach (Удерживать объект в пределах досягаемости), расположенная в окне Motion Options (Настройки движения). Эта команда свяжет целевой объект с характерной точкой конечного объекта IK-цепочки и будет удерживать его там. Некоторые художники предпочитают использовать именно такой метод. При этом целевой объект превращается в что-то вроде анимационного маркера.

Использование опции Keep Goal Within Reach

1. Загрузите сцену IK-Rig.lws, созданную в предыдущем примере. 2. В окне проекции выделите кость Hand. 3. Перейдите на вкладку Items, затем на панели инструментов щелкните по кнопке Motion Options (Настройки движения) или нажмите клавишу М. Откроется окно Motion Options. 4. Отметьте галочкой опцию Keep Goal Within Reach и закройте окно Motion Options. Объект Arm-Goal будет связан с характерной точкой объекта Hand (рис. 10.67). 5. В окне проекции щелкните по объекту Arm-Goal. 6. Переместите объект в любое место окна проекции.

Рис. 10.67. Эта опция превратит целевой объект в анимационный маркер

Не имеет значения, куда вы переместите мышь, объект Arm-Goal останется в характерной точке объекта Hand (рис. 10.68). Таким образом, работа с применением опции Keep Handle Within Reach более похожа на создание анимации IK-цепочки при помощи анимационного маркера.

Рис. 10.68. Целевой объект связан с характерной точкой кости Hand

Опция Match Goal Orientation

Вспомните пример инверсной кинематики, приведенный в начале главы. Вы берете в руки карандаш и подносите к лицу, чтобы хорошенько его рассмотреть. Но чтобы изучить карандаш, вы сначала развернули его. В Layout конечный элемент IK-цепочки может точно так же повторять угловое положение целевого объекта, для этого следует воспользоваться опцией Match Goal Orientation (Соответствие углового положения). Это очень полезная функция, она незаменима в таких случаях, как, например, анимация кисти персонажа, поднимающего какой-нибудь предмет, или оживление головы змеи, следящей за своей жертвой. Можно очень долго перечислять возможности ее применения, кроме того, эта функция позволяет сэкономить массу времени, поскольку значительно облегчает создание самой сложной анимации.

Применение опции Match Goal Orientation

1. Загрузите сцену IK-Rig.lws в Layout.
2. В окне проекции щелкните по кости Hand.
3. Перейдите на вкладку Items (Элементы), затем на панели инструментов щелкните по кнопке Motion Options (Настройки движения) или нажмите клавишу М. Откроется окно Motion Options.
4. Отметьте галочкой опцию Match Goal Orientation (Соответствие углового положения) - рис. 10.69.

Рис. 10.69. Опция Match Orientation синхронизирует поворот конечного элемента IK-цепочки с поворотом целевого объекта
5. В окне проекции щелкните по объекту Arm-Goal.
6. Чтобы переместить объект Arm-Goal вниз по оси Y, щелкните по зеленому маркеру. Обратите внимание, что Hand не изменяет своей угловой ориентации при перемещении целевого объекта (рис. 10.70).

Рис. 10.70. При перемещении целевого объекта кость Hand сохраняет свое угловое положение, вместо того, чтобы указывать на целевой объект
7. На панели инструментов щелкните по кнопке Rotate (Вращать) или нажмите клавишу Y.
8. Щелкните по зеленому маркеру и поверните объект Arm-Goal относительно оси Pitch. Теперь объект Hand отслеживает угловое положение целевого объекта (рис. 10.71).

Рис. 10.71. При повороте целевого объекта поворачивается и конечный элемент цепочки

Ограничения поворотов

Вы, вероятно, заметили, что чем ближе целевой объект к оси Y, тем сильнее изгибается рука, однако это выглядит не очень реалистично (если вы, конечно, не йог). В действительности суставы могут обеспечить лишь некоторый ограниченный угол поворота, при превышении которого рука ломается. Layout позволяет определить ограничения для каждой оси объекта, управляемого с помощью IK.

Определение ограничений поворота

1. Загрузите сцену IK-Rig.lws в Layout.
2. В окне проекции щелкните по объекту Lower-Arm.
3. Перейдите на вкладку Items, затем на панели инструментов щелкните по кнопке Rotate (Вращать) или нажмите клавишу Y.
4. Щелкните по кнопке Motion Options (Настройки движения) или нажмите клавишу М. Откроется окно Motion Option.
5. Перейдите на вкладку Controllers and Limits (Контроллеры и ограничения), затем отметьте галочкой опцию Pitch Limits (Ограничения по оси Pitch), чтобы определить ограничение на поворот относительно оси Pitch (рис. 10.72).

Рис. 10.72. Активируйте опцию Pitch Limits
6. В поле Min (Минимум) введите -150, в поле Мах (Максимум) укажите 4, что соответствует минимальному и максимальному углу поворота относительно оси Pitch. Зеленая окружность, обозначающая поворот (рис. 10.73), отражает введенные вами ограничения угла, а незатененная область - разрешенный поворот.

Рис. 10.73. Вы можете определить максимальный и минимальный углы поворота, введя нужные значения в соответствующих полях
7. Если в окне проекции вы щелкните по объекту Upper-Arm, то окно Motion Options автоматически обновится.
8. Выполните шаг 5 для объекта Upper-Arm.
9. В поле Min введите -90, а в поле Мах укажите 100. Как только вы определили граничные значения угла поворота, в окне проекции Layout снова нарисует затененную окружность, соответствующую введенным ограничениям (рис. 10.74).

Рис. 10.74. Layout затеняет маркеры поворота, указывая ограничения угла

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

10. В окне проекции щелкните по объекту Arm-Goal.
11. Щелкните по кнопке Move (Переместить), расположенной на панели инструментов, или нажмите клавишу Enter.
12. Перемещайте объект Arm- Goal по экрану. Попробуйте повернуть его на 180 градусов относительно объекта IK-Chain. Вы обнаружите, что не можете заставить объекты цепочки поворачиваться на углы, превышающие ограничение (рис. 10.75-10.76).

Рис. 10.75. Перемещайте целевой объект до тех пор, пока значение угла поворота не достигнет максимального

Рис. 10.76. Перемещайте целевой объет вниз до тех пор, пока значение угла поворота не достигнет минимума

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


Книжный магазин