Інверсійна кінематика
Щоб освоїти інверсну кінематику (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. Переміщайте цільовий об'ет вниз до тих пір, поки значення кута повороту не досягне мінімуму
Обмеження на поворот можна задати не тільки для елементів інверсної кінематики, але і для будь-якого іншого елементу сцени.
|