Общий способ анимации «движения» для анимации цикла ходьбы


13

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

Я программист, пытающийся оживить ходячего персонажа для игрового проекта, используя Ogre. Я сделал очень простой цикл ходьбы в Blender и экспортировал его в Ogre, и он играет просто отлично. Хорошо, я имею в виду, что это работает, но есть ужасное скольжение ног. Это потому, что я просто анимировал прогулку на месте (в начале координат) в Blender, и, конечно, я не знаю, какой "скорости ходьбы" это соответствует, поэтому, когда я перемещаю персонажа в игре, движение не ' t обязательно совпадать с движением ног в анимации.

Итак, мой вопрос: каков нормальный подход для такого рода вещей? На работе мы используем Maya, и аниматоры либо анимируют специальный узел 'moveTrans', который представляет «позицию» персонажа (или заставляют экспортера сгенерировать его для него из движения корневого узла), тогда игра может прочитать это знать, как быстро анимация перемещает персонажа. Таким образом, в файле Maya персонаж будет идти вперед на один цикл, и этот дополнительный узел будет следовать за ними за ногами. Я не видел ничего подобного в открытых источниках, и, конечно же, в сценарии Ogre Exporter этого нет. Что вы, ребята, обычно делаете для этого?


1
Вот обсуждение с некоторыми фантастическими объяснениями концепции: blog.wolfire.com/2011/08/…
Бен Хаймерс

Ответы:


10

Есть два способа сделать это: корневое движение или «в коде».

С корневым движением у вас есть в основном именно то, что вы предлагаете с узлом «moveTrans». Вы используете движение этого объекта, чтобы определить, как быстро воспроизвести циклы ходьбы. Вы могли бы сделать обратный поиск, чтобы выяснить, что если вы хотите быть в позиции X, в каком кадре вы должны быть. Но реальное преимущество корневого движения состоит в том, что для получения действительно реалистичной анимации вам необходимо учитывать тот факт, что движение не является истинным линейным путем. Реальные люди движутся с переменной скоростью с течением времени, или, может быть, они немного шаркают влево и вправо, или как угодно.

Mixamo сделал хороший пример с управлением движением root с помощью Unity. Вот видео об этом здесь: http://vimeo.com/12052874

Теперь корневое движение имеет свои недостатки. Это может быть сложно с такими вещами, как попытка заставить анимацию «ходьбы» работать на лестнице (в идеале у вас должна быть отдельная анимация подъема по лестнице / лестнице и все движения для этого также выполняются в анимации). Я также не совсем уверен, как IK действительно играет в это, если вообще.

Теперь делать это «в коде» намного проще с точки зрения программирования. Что я предлагаю сделать, так это сначала убедиться, что все ваши юниты согласованы. Например, 1 единица в Maya, а ваша игра - 1 метр. Затем вы заставляете своих художников анимировать ходьбу персонажа (вместе с движением вперед). Используйте это, чтобы выяснить скорость анимации, и экспортируйте анимацию без скорости движения. Используйте это, чтобы выяснить, как быстро воспроизводить анимацию. Таким образом, если анимация ходьбы на скорости 1x составляет 5 м / с, и вы хотите, чтобы проигрыватель работал на скорости 7 м / с, вы просто воспроизводите со скоростью 7/5 = 1,4x. Если ваша модель масштабируется вверх или вниз, умножьте скорость воспроизведения анимации на величину, обратную масштабу. Чувак половинного роста должен будет идти в два раза быстрее, чтобы двигаться с той же скоростью, что и парень в 1х масштабе.


Я не видел Root Motion Computer от Mixamo, и я не слышал, чтобы он называл это так, спасибо за ссылку и объяснение! Таким образом, в основном это, как я думал, либо анимировать его явно, либо автоматически сгенерировать, и либо во время сборки, либо во время выполнения. Я думаю, мне придется самому кодировать это в скрипте экспортера. Одна вещь, о которой я сейчас мега смущен, - это движение, которое меняется в течение одного цикла - как, черт возьми, вы вытесняете это из игрового процесса? «Движение со скоростью 5 м / с» теперь означает что-то другое ... И изменение направления станет кошмаром для ИИ! Возможно, лучше всего использовать движения старения?
Бен Хаймерс

Кончились персонажи; Я подожду немного, прежде чем отметить это как принятое, чтобы получить больше мнений. Спасибо за Ваш ответ!
Бен Хаймерс

Для корневого движения вы не контролируете скорость игрока напрямую. На самом деле, вы контролируете только скорость воспроизведения анимации, а затем позволяете анимации напрямую контролировать прямое значение z. Пример 5 м / с, который я привел, был для традиционного способа решения скольжения ноги, который состоит в том, чтобы просто сопоставить скорость воспроизведения с тем, как быстро вы двигаетесь и предполагаете постоянную скорость.
Тетрад

Как программист геймплея, это звучит как полный кошмар :) Предоставить аниматорам контроль над чем-то таким же важным, как скорость движения чего-нибудь анимированного? Спасибо, не надо! Я предпочитаю извлекать информацию, чтобы я мог инвертировать ее и установить скорость воспроизведения анимации на основе скорости движения, а не наоборот. Вот почему нелинейное движение приводит меня в замешательство, и, возможно, это хорошая причина, чтобы сделать это наоборот.
Бен Хаймерс

Черт возьми, прокляни Stack Exchange за ввод комментария о попытке начать новую строку ... Я собирался сказать, что даже если вы позволите анимации управлять движением, это все равно будет проблемой, например, для AI-персонажей. Что если они пытаются добраться до точки, но их анимация движения изгибается из стороны в сторону (скажем, это анимация пьяного шатания)? Как они могут знать, в каком направлении стоит столкнуться?
Бен Хаймерс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.