Я только что опубликовал это на форумах художников Blender, прежде чем понял, что, вероятно, получу лучший отклик от более ориентированной на разработку игры аудитории, поэтому извиняюсь за перекрестную публикацию! Это по правильным причинам :)
Я программист, пытающийся оживить ходячего персонажа для игрового проекта, используя Ogre. Я сделал очень простой цикл ходьбы в Blender и экспортировал его в Ogre, и он играет просто отлично. Хорошо, я имею в виду, что это работает, но есть ужасное скольжение ног. Это потому, что я просто анимировал прогулку на месте (в начале координат) в Blender, и, конечно, я не знаю, какой "скорости ходьбы" это соответствует, поэтому, когда я перемещаю персонажа в игре, движение не ' t обязательно совпадать с движением ног в анимации.
Итак, мой вопрос: каков нормальный подход для такого рода вещей? На работе мы используем Maya, и аниматоры либо анимируют специальный узел 'moveTrans', который представляет «позицию» персонажа (или заставляют экспортера сгенерировать его для него из движения корневого узла), тогда игра может прочитать это знать, как быстро анимация перемещает персонажа. Таким образом, в файле Maya персонаж будет идти вперед на один цикл, и этот дополнительный узел будет следовать за ними за ногами. Я не видел ничего подобного в открытых источниках, и, конечно же, в сценарии Ogre Exporter этого нет. Что вы, ребята, обычно делаете для этого?
Ответы:
Есть два способа сделать это: корневое движение или «в коде».
С корневым движением у вас есть в основном именно то, что вы предлагаете с узлом «moveTrans». Вы используете движение этого объекта, чтобы определить, как быстро воспроизвести циклы ходьбы. Вы могли бы сделать обратный поиск, чтобы выяснить, что если вы хотите быть в позиции X, в каком кадре вы должны быть. Но реальное преимущество корневого движения состоит в том, что для получения действительно реалистичной анимации вам необходимо учитывать тот факт, что движение не является истинным линейным путем. Реальные люди движутся с переменной скоростью с течением времени, или, может быть, они немного шаркают влево и вправо, или как угодно.
Mixamo сделал хороший пример с управлением движением root с помощью Unity. Вот видео об этом здесь: http://vimeo.com/12052874
Теперь корневое движение имеет свои недостатки. Это может быть сложно с такими вещами, как попытка заставить анимацию «ходьбы» работать на лестнице (в идеале у вас должна быть отдельная анимация подъема по лестнице / лестнице и все движения для этого также выполняются в анимации). Я также не совсем уверен, как IK действительно играет в это, если вообще.
Теперь делать это «в коде» намного проще с точки зрения программирования. Что я предлагаю сделать, так это сначала убедиться, что все ваши юниты согласованы. Например, 1 единица в Maya, а ваша игра - 1 метр. Затем вы заставляете своих художников анимировать ходьбу персонажа (вместе с движением вперед). Используйте это, чтобы выяснить скорость анимации, и экспортируйте анимацию без скорости движения. Используйте это, чтобы выяснить, как быстро воспроизводить анимацию. Таким образом, если анимация ходьбы на скорости 1x составляет 5 м / с, и вы хотите, чтобы проигрыватель работал на скорости 7 м / с, вы просто воспроизводите со скоростью 7/5 = 1,4x. Если ваша модель масштабируется вверх или вниз, умножьте скорость воспроизведения анимации на величину, обратную масштабу. Чувак половинного роста должен будет идти в два раза быстрее, чтобы двигаться с той же скоростью, что и парень в 1х масштабе.
источник