Создаем Locomotion систему в UDK

Locomotion системаПродолжая работать над постановкой стоп персонажа в UDK через инверсную кинематику (IK), мы плавно переходим к созданию так называемой Locomotion-системы для UDK. Вечно меня тянет в те области, в которых я вообще не разбираюсь! ;)

В чем же заключаются недостатки обычной IK-системы для постановки стоп?

Во-первых, она работает пост-фактум. Т.е. корректировка стопы осуществляется уже после того, как в анимации стопа поставлена на землю. А учитывая неровность поверхности — поставлена изначально неправильно. Стопа проваливается в землю и только после получения сигнала из анимации корректируется IK-контроллером. Смотрится это, честно говоря, не айс!

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

А в чем же заключается отличие Locomotion-системы от постановки стоп при помощи IK-контроллеров?


( Читать дальше )
  • +1
  • 05 ноября 2012, 14:20
  • dimanjy
  • 1

Применение Skeletal Controller в UDK или как повернуть кость?

В задаче постановки стоп в UDK при инверсной кинематике IK персонажа в UDK я использовал скелетный контроллер (Skeletal Controller) SkelControlSinbleBone. Именно он позволяет доворачивать стопу так, чтобы она совпадала с неровной поверхностью земли после того, как уже отработала система инверсной кинематики IK в Unreal Engine.

Поворот кости через SkelControlSinbleBone в UDK

Но проблема в том, что сама модель (или поверхность — Mesh) стопы персонажа привязана к системе координат конкретной кости, которая, как правило, совершенно не совпадает с полученной нами системой координат, а зависит от 3D-редактора, в котором разрабатывалась модель персонажа. И уж точно 3D-моделлер не захочет как-то по-особенному выворачивать кость и терпеть потом из-за этого жуткие неудобства с анимацией персонажа только из-за того, что программист не удосужился учесть этот момент в скриптах на UnrealScript.

В моем случае я — и моделлер, и программист, но мне все-равно не хочется изгаляться в Blender'е. Поэтому мне необходимо теперь как-то переложить полученные нами вектора на систему координат скелетного контроллера SkelControlSingleBone, чтобы передать полученное вращение правильно.


( Читать дальше )

Инверсная кинематика IK в UDK: Постановка стоп персонажа на поверхности

Создавая современную игру, нельзя упускать из виду такой важный момент, как соответствие положения ног персонажа поверхности, на которой он находится. Если персонаж стоит на лестнице, то одна нога должна стоять на одной ступеньке, а вторая — на другой. Аналогично при ходьбе по наклонной поверхности стопы должны находиться на разном уровне. Более того, поверхность стопы должна точно соответствовать нормали поверхности, на которой она находится.

Инверсная кинематика IK в UDKВ UDK есть встроенная поддержка постановки стоп, но она, почему-то, мало у кого работает, судя по множеству вопросов на официальном форуме Epic Games. У меня также не получилось заставить ее работать, да и в документации по скелетным контроллерам написано, что она годится только для стоящей на месте модели, а для ходьбы и бега все-равно придется шаманить.

Поэтому многие берутся за создание собственной системы IK для постановки стоп в UDK. Я тоже решил более глубоко разобраться в этом вопросе, потому как это точно пригодится в будущем для разработки более сложных систем с лазаньем по лестницам и стенам, хватанием за карнизы и прочего паркура.



( Итак, приступим... )

Скелетная анимация в Away3D 4.0



Проблема всех активно развивающихся open-source движков в нехватке документации и примеров, так как разработчики обычно оставляют эти второстепенные для них вещи на потом. Во всех более-менее серьезных вопросах, отличных от «Hello, World!», приходится разбираться самому с нуля, копаясь в коде движка и просеивая по крупицам редкие сообщения на англоязычных форумах.

Сейчас я пытаюсь разобраться с теми классами, которые предоставляет нам Away3D 4.0 для скелетной анимации. Это:
  • SkeletonAnimator
  • SmoothSkeletonAnimator
  • BlendingSkeletonAnimator

Класс SkeletonAnimator позволяет загружать именованные анимационные последовательности, а потом воспроизводить их при помощи вызова метода .play('имя анимации').

Класс SmoothSkeletonAnimator делает практически тоже самое, что и SkeletonAnimator, только переходы между анимациями делает плавно, согласно заданному дополнительному параметру crossFadeTime.

Наибольший интерес представляет последний класс из списка — BlendingSkeletonAnimator.

( Читать дальше )