Лицевые анимации игровых персонажей

Рано или поздно каждый разработчик игр сталкивается с задачей кастомизации внешности персонажа и/или лицевыми анимациями. Согласитесь, современная игра в которой игровые персонажи говорят с закрытым ртом будет выглядеть довольно странно. И зачастую это ставит в ступор, ввиду того, что информации на данную тему очень мало, а в русском сегменте чуть меньше, чем нет совсем. Хотя, правильнее сказать, информация то есть, но совсем в другом направлении, не касательно разработки игр. Давайте рассмотрим как можно реализовать лицевые анимации для игры на движке Unity.

Для подобных задач существует технология Morph (морфинг) в 3DS Max или Blend Shapes (бленд шейпы) в Maya или Blender. Эта технология подразумевает под собой изменение трехмерной модели без правки её топологии. То есть, мы только меняем положение вершин, не добавляя новые и не удаляя старые. Что позволяет нам не делать ретекстурирование, повторный риггинг и прочие вещи присущие данной модели.

Мы будем пользоваться пакетом для трехмерного моделирования Blender, так как он бесплатен, а функционал и удобство последних версий не уступают продуктам Autodesk, что как нельзя лучше подходит для инки-разработчика.

Работать с вами мы будем вот над такой моделью:
1

И, допустим, мы хотим, чтобы наш персонаж умел улыбаться.

Откроем модель в Blender, выделим ее правым кликом мыши и на панели свойств (по умолчанию справа) перейдем на вкладку редактирования данных. Нам понадобятся ключи формы (shape keys):
3

Добавляем новый ключ, кликнув на «плюс», видим, что он называется «Basis», это базовый ключ для хранения оригинальных позиций вершин, его изменения приведут к тому, что мы изменим основную «базовую» топологию модели, поэтому его мы не трогаем, а еще раз жмем на «плюс». У нас создается новый ключ, называем его, по своему усмотрению. Я назову «Smile».
2-1

Далее, перейдем в режим редактирования, нажав «Tab» на клавиатуре, либо выбрав режим на панели снизу.
2-0

Теперь, что весьма важно, если мы ходим, чтобы при изменении позиции вершин остальные сглаженно «тянулись» за измененными, мы должны включить режим пропорционального редактирования. Эта опция находится так же на нижней панели, правее включения режима редактирования.
2

Выделяем те вершины, позицию которых мы хотим изменить, и двигаем их куда нам нужно. В моем случае, я потяну уголки рта вверх, для создания улыбки.
4

Выходим из режима редактирования (на панели или повторным нажатием Tab) и видим, что наша модель вернулась к своему исходному состоянию. Но сейчас, если мы изменим значение параметра Relative, то увидим, что наш персонаж улыбается.
5

Таким же образом мы можем настроить любые другие параметры, добавляя новые ключи: открывание рта, нахмуривание бровей и так далее. Нам остается экспортировать модель в игровой движок, жмем File → Export и выбираем нужный формат. Я предпочитаю FBX, но вы можете выбрать по своему усмотрению.

Теперь при выделении модели в Unity 5, у компонента Skinned Mesh Renderer мы можем увидеть добавленный нами в Blender ключ.
6

Стоит отметить две вещи:

  1. значение параметров Blend Shapes в Unity задается не от 0 до 1, как в Blender, а в процентном соотношении (от 0 до 100);
  2. доступ к ключам из кода производится не по имени, а по индексу.

И теперь, если мы будем менять значение этого параметра от 0 до 100, то увидим улыбку персонажа.
1

В своих скриптах изменять это значение проще простого:

Таким образом, мы можем видеть, что внешне кажущийся сложным функционал, вполне реализуем и не сложен на практике.

Добавить комментарий