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


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.