Загальний спосіб анімації "руху" для анімаційних циклів прогулянок


13

Я щойно опублікував це на форумах художників Blender, перш ніж усвідомити, що, мабуть, отримаю кращу відповідь від більшої аудиторії, орієнтованої на розвиток ігор, тому вибачте за перехресне повідомлення! Це з правильних причин :)

Я програміст, який намагається анімувати персонажа, що йде за ігровим проектом, використовуючи Ogre. Я зробив дуже простий цикл прогулянок в Блендері і експортував його в Огре, і він грає просто чудово. Я чудово маю на увазі, що це працює, але є жахливе ковзання стопи. Це тому, що я просто анімував ходьбу на місці (біля походження) в Блендері, і, звичайно, я не знаю, що "швидкість ходьби", що відповідає, тому коли я рухаю персонажа в грі, рух не має " t обов'язково співпадають з рухом ніг в анімації.

Отже, моє запитання: який нормальний підхід до подібної речі? У роботі ми використовуємо Майю, і аніматори або анімують спеціальний вузол 'moveTrans', який представляє "позицію" персонажа (або змушує експортер генерувати його для них з руху кореневого вузла), тоді гра може прочитати це щоб знати, як швидко анімація рухає персонажа. Отже, у файлі Майя персонаж буде рухатися вперед протягом одного циклу, і цей додатковий вузол буде слідувати разом з ними своїми ногами. Я не бачив нічого подібного у відкритих джерелах, і це, безумовно, не передбачено в сценарії експортера Ogre. Що ти зазвичай робиш для цього?


1
Ось дискусія з фантастичними поясненнями концепції: blog.wolfire.com/2011/08/…
Бен

Відповіді:


10

Існує два способи зробити це: рух рут або "в коді".

З рутовим рухом у вас є саме те, що ви пропонуєте з вузлом "moveTrans". Ви використовуєте рух цього об'єкта, щоб визначити, як швидко відтворювати цикли ходи. Можливо, ви зможете зробити зворотний пошук сортів, щоб зрозуміти, що якщо ви хочете бути в положенні X, на якому кадрі вам потрібно бути. Але справжня перевага кореневого руху полягає в тому, що для отримання дійсно реалістичної анімації потрібно враховувати той факт, що рух не є справжнім лінійним шляхом. Справжні люди рухаються зі змінною швидкістю з часом, а може, вони трохи переміщуються вліво та вправо, чи що завгодно.

Mixamo зробив хороший приклад з контролем руху коренів за допомогою Unity. Тут є відео про це: http://vimeo.com/12052874

Тепер рух кореня має свої недоліки. Це може заплутатися з такими речами, як намагання змусити анімацію "прогулятися" працювати по сходах (в ідеалі ви маєте окрему анімацію зі сходів / сходів, а також зробите весь рух для цього в анімації). Я також не дуже впевнений, як IK насправді грає в це, якщо взагалі.

Зараз зробити це "в коді" набагато простіше з боку програми. Що я пропоную зробити, це спочатку переконатися, що всі ваші підрозділи є послідовними. Наприклад, 1 одиниця в Майї, а ваша гра - 1 метр. Потім ви змусите своїх художників анімувати ходьбу персонажа (у комплекті з рухом вперед). Використовуйте це, щоб визначити швидкість анімації та експортувати анімацію без швидкості вперед. Використовуйте це, щоб визначити, наскільки швидко відтворювати анімацію. Отже, якщо анімація ходьби зі швидкістю 1x становить 5 м / с, і ви хочете, щоб плеєр працював зі швидкістю 7 м / с, ви просто відтворюєтеся зі швидкістю 7/5 = 1,4x. Якщо ваша модель масштабується вгору або вниз, помножте частоту відтворення анімації на обернену шкалу. Чувак на половину висоти повинен буде ходити вдвічі швидше, щоб рухати ту саму швидкість, що і хлопець 1x масштабу.


Я не бачив комп’ютера Root Motion від Mixamo, і не чув, як він це називав, тому дякую за посилання та пояснення! Так що в основному це, як я думав, або анімувати це явно, або автоматично генерувати, або під час збирання, або під час виконання. Я думаю, що мені доведеться зашифрувати це в сценарії експортера. Одне, в чому я зараз мега плутаний, - це рух, який змінюється протягом одного циклу - як, на землі, ви б керували цим ігровим процесом? "Рух у 5 м / с" тепер означає щось інше ... І зміни напрямку будуть кошмаром для ШІ! Можливо, найкраще використовувати рух за віком?
Бен Хімерс

Вибігали персонажі; Я зачекаю трохи, перш ніж позначити це як прийняте, щоб отримати ще кілька думок. Дякую за вашу відповідь!
Бен Хімерс

Для руху root ви не керуєте швидкістю програвача безпосередньо. Ви дійсно маєте контроль над відтворенням швидкості анімації, і тоді ви дозволяєте анімації безпосередньо контролювати значення z вперед. Я наводив приклад 5 м / с для традиційного способу вирішення ковзання стопи, який полягає у тому, щоб спробувати співставити швидкість відтворення із швидкістю руху та припускаючи постійну швидкість.
Тетрад

Як геймплейний програміст, це звучить як повний кошмар :) Покладання аніматорів на контроль над чимось важливим, як швидкість руху чого-небудь оживленого? Ні, дякую! Я набагато вважаю за краще витягувати інформацію, щоб я міг її інвертувати та встановлювати швидкість відтворення анімації залежно від швидкості руху, а не навпаки. Ось чому нелінійний рух плутає з мене пекло, і, можливо, це хороший привід зробити це навпаки.
Бен Хімерс

Гах, прокляття біржі стека за те, що ввійшов в коментар про спробу запустити новий рядок ... Я вже збирався сказати, навіть якщо ти дозволиш анімації керувати рухом, це все ще буде проблемою, наприклад, символів AI. Що робити, якщо вони намагаються дістати крапку, але їх анімаційна руха рухається з боку в бік (скажімо, це анімація з п’яними хитами)? Як вони можуть знати, в якому напрямку стикатися?
Бен Хімерс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.