Item_42 - студия, разрабатывающая FPS игру Blister. Разработчики в их Dev блоге поделились качественным уроком по анимированию и риггингу рук для First Person шутера. Ссылки на предыдущие части серии уроков: Часть 1 (Риггинг), Часть 2 (IK контроллеры). В заключительной части мы научимся скиннингу меша рук и экспорту в Unity 5 и Unreal Engine 4. Прочитать оригинальную статью на английском можно здесь: item_42.com.

Скиннинг FPS рук.

На данный момент у вас на сцене есть готовый риг, который хорошо работает. Теперь пришло время присоединить меш рук к нашему ригу. Если у вас есть рука и несколько предметов одежды, надетые поверх ваших рук, то есть ещё один шаг, который я покажу вам в конце статьи.

Unity 5 уроки - создание FPS шутера

50. Нажмите CTRL+X, чтобы выключить X-ray мод.

51. Перейдите к списку модификаторов и добавьте Skin Modifier. Прокрутите вниз к вкладке Bones. Нажмите Add.

52. В новом окне выберите все кости, кроме кончиков пальцев и root кости, подтвердите выбор.

53. Проверьте ваш скин. В некоторых местах он может работать некорректно, особенно, если ваш меш и риг не прямые, так что нужно будет исправить это либо путем корректировки Envelopes, либо путем окрашивания весов.

54. Чтобы исправить первое, выберите Edit Envelopes под Parameters. Должен появиться ряд сплайнов соответствующих костей. С помощью инструмента Move отрегулируйте их размер, перетаскивая Radial сплайны. Если вам нужно изменить положение или длину, выберите вершину на желтом сплайне и используйте Move Tool. 

55. Если ваши пальцы странно двигаются, то это может быть связано с тем, что кость руки влияет на кости пальцев. Передвиньте кость запястья или используйте инструмент для распределения веса, который будет описан чуть ниже.

56. Я не советую возиться с Envelopes слишком долго, достаточно иметь приблизительное распределение веса, чтобы сетка деформировалась более-менее красиво при перемещении рига. Для более точного управления, я предпочитаю распределить вес самостоятельно при помощи Weight Tool. Выберите Edit Envelopes и отметьте "Verticles" под "Select". При включении режима самостоятельного редактирования весов, изменения envelopes отключается.

57. Прокрутите вниз к модификатору "Weight Properties" и включите Weigth Tool.

58. Нажмите F4, чтобы включить редактирование полигонов. Теперь вы можете выбрать вершины и использовать Weight Tool для создания веса. Поставьте вес пальцев = 1. Экспериментируйте с Ring, Loop, Shrink и Grow функциями. Лучше всего начать с создания малого веса = 0.1 или 0.25, плавно переходя в красный, значение которого = 1.

59. Создайте плавный градиент у кости "wrist_rotator". Сделайте самым красным в центре, плавно переходя к синему. Используйте кнопку "Blend" под Weight Tool, когда вы готовы сделать переход веса мягким. Теперь когда вы повернете эту кость, деформация при анимировании не станет так заметна, тем самым сами анимации будут более естественны.

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

61. Когда вы настроили весы для всех ваших костей, и они реагируют правильно, вы можете включить X-Ray и опять зафиксировать меш. Теперь руки почти готовы к отправке в Animator. Перед тем, как зафиксировать кости, возможно, вы захотите добавить некоторые аксессуары, вроде часов. Если вы будете использовать Link Tool, чтобы привязать часы к Wrist Rotator IK контроллеру, то они будут перемешаться с костью запястья. Вы будете прикреплять часы к мешу отдельно в Unity/ Unreal Engine 4, используя похожий метод.

62. Пришло время подготовить Max файл для аниматора. Для аниматора чтение намного проще, если кости имеют "Frozen Transform". Это означает, что если вы установите трансформацию в ноль, то кости (и меш) переместятся в исходное положение. Захватите все Point Helpers, IK контроллеры и IK Goals. Удерживая ALT+ПКМ, выберите "Freeze Transform". Подтвердите появившееся окно. Теперь протестируйте его, перемещая IK контроллер, потом нажмите ALT+ПКМ и "Transform to zero". Произойдет переход в исходное положение. Очень удобно!

63. Выберите все кости, кроме кости большого пальца, который не имеет IK Solver. Нажмите правую клавишу мыши для фиксирования. Теперь аниматор может трансформировать только IK контроллеры, IK Goals и Point Helpers, что практически не создает шансов для сильной деформации меша во время анимации.

64. Если у вас есть базовый меш рук, и вы хотите, чтобы была одежда поверх рук, повторите шаги, которые были описаны выше, для рук, после чего выберите ваш меш одежды, добавьте модификатор Skin Wrap, и под Parameters добавьте ваш Skinned mesh. Ваша одежда должна теперь практически полностью обернуть меш рук. Если вам нужно настроить его, вы можете преобразовать модификатор Skin Wrap в Skin и выполнить те же действия, описанные выше.

65. При необходимости вы можете добавить текстуру к сетке. Нажмите M, прокрутите вниз, найдите Maps, выделите Diffuse Colour и нажмите "None". Выберите "Bitmap", нажмите "OK", после чего выберите вашу собственную текстуру в окне просмотра файлов. 

66. Если текстура не отображается, настройте Viewport: Правая кнопка мыши > Materials > Shaded Materials with Maps. Нет необходимости для отображения реалистичных материалов с картами и Normal/Bump карт, потому что при работе с аниматором не нужны красивые руки, важен высокий фреймрейт.

Риг полностью готов к экспорту. Теперь нам нужно создать анимации и экспортировать в Unreal Engine/Unity.

Blueprints UE4 - Блупринты Unreal Engine 4

Экспорт рига (и оружия) в UE 4

Есть сотни способов переноса рига/оружия в UE4. Начинающие аниматоры сталкиваются с проблемой переноса анимаций двух разных объектов, которые должны взаимодействовать вместе. Большинство создают скелет сначала для рук, а потом для оружия.

Это означает, что вы должны иметь одинаковые анимации для каждого из них, или вы должны сделать оружие статическим мешем, который станет дочерним к рукам, или использовать Blueprints

Первоначально мы выбрали первый вариант, где каждое оружие имеет отдельный скелет, и мы сделали два ассета для каждой анимации. Это также означало, что мы должны были сделать огромное количество анимационных блупринтов (Blueprints), которые в основном были идентичны! Оба этих способа, на самом деле, являются большой головной болью, особенно тот, где пистолет - статический меш.

Вместо этого, представьте себе, что все ваши руки и оружия могут использовать один скелет и даже один blueprint. Это то, что мы хотели сделать для BLISTER (игра, созданная студией Item_42). Я не буду говорить о процессе создания анимаций здесь, потому что это было бы огромным и скучным уроком, и я не очень хорош в анимировании.

Unity 5 уроки - создание FPS шутера Изображение 2

Итак, есть три основных момента, которые надо иметь в виду при работе с анимациями.

1. Скелет, на самом деле, - это просто иерархический список.
2. Форма и положение костей диктуются анимациями (и "оригинальная" поза меша).
3. Меш или анимация не должны задействовать все кости скелета. Под словом "задействовать" я имею в виду, что кости рук и оружия могут быть в одном и том же скелете.

Итак, у нас есть первое оружие со скелетом, и мы хотим прикрепить его к рукам. Сначала поставьте его в то место, где находится ваша рука. Потом прикрепите корневую кость оружия (или в нашем случае Helper, к которому все остальное присоединено) к IK контроллеру правой руки. Теперь, когда иерархия настроена, стоит перенести скелет в Unreal Engine 4, перед тем, как мы начнем анимировать, чтобы убедиться, что все сделано правильно.

Если вы хотите импортировать скелет в UE4, то он должен быть со скелетным мешем, то есть мы импортируем руки вместе с каждой костью скелета, включая кости оружия. Итак, выберите меш рук и каждую кость, и экспортируйте их, используя "export selected".

Теперь у нас есть файл, содержащий меш рук и кости скелета. Импортируйте все это в Unreal Engine 4 и убедитесь, что поле "skeleton" установлено на "none", чтобы UE4 знал, что нужно сгенерировать новый скелет для импортированного. Вы должны получить два ассета (может быть ещё и ассет физики, но он нам не нужен).

Мы назвали наш файл BaseArmsAndSkeleton. Посмотрев ассет со скелетом, вы должны увидеть кости для оружия в иерархическом списке. Теперь мы можем импортировать меш скелета для оружия. В 3DS Max выберите только оружие и его кости, экспортируйте выбранное точно так же. Импортируйте в проект. Вместо "none" в поле "skeleton", выберите последний скелет. Теперь, если все в 3DS Max совпало с UE4, вы можете начать анимировать. Вам предстоит изучить анимирование самостоятельно, так как оно требует много практики. Когда вы подготовили анимации, вы можете импортировать их в игровой движок. Убедитесь, что вы не включили меши при экспорте анимаций. После импорта вы должны увидеть превью, как для оружия, так и для рук.

(Совет: Чтобы просмотреть различные меши с тем же скелетом, нажмите на маленький значок сетки рядом с "mesh", и вы сможете выбрать любой меш, который использует этот скелет. Это используется для того, чтобы проверить, что оружие и руки используют анимацию должным образом.)

После импорта анимаций для оружия, можно переходить к Blueprints. Первое, что мы должны сделать - это создать "anim blueprint" для наших мешей. Так как наши меши используют один скелет, мы можем использовать один блупринт анимаций для всех.

Нажмите правой клавишей мыши на скелет и под "Create" нажмите "anim blueprint". Здесь у нас 2 таблицы: Anim Graph и Event Graph. Последний - это такой же блупринт, только здесь используются ноды, вызываемые каждую секунду, пока он задействован в игре. Anim Graph немного отличается, и мы поговорим об этом позже.

Создайте нод для проигрывания стоячей анимации. Первоначально он не будет иметь "Sequence" и "Play Rate" инпуты, добавьте их, выбирая нод в панели деталей снизу, выделив "as input" на всех переменных, которые вы хотите вставить. "Sequence" просто начинает играть анимацию. "Kriss_idle" является дефолтной анимацией. Создайте анимацию "IsWalking", соедините с результатом. Теперь, если все прошло правильно, анимация проигрывается, начиная со стоячей, заканчивая пробежкой. Итак, мы создали anim blueprint. 

Вернитеь в браузер контента, нажмите New > blueprint и выберите "Enumeration". Откройте его, добавьте каждый тип анимаций, которые у вас есть, поставьте этот enum как "PlayMontage" input и создайте "Select" нод.

Эта серия уроков является базой для создания игровых FPS рук. Осталось ещё много моментов, которые мы не успели сделать: создание патронов, лучей, но то, что мы сделали в данных уроках, должно научить вас создавать свои собственные шутеры. Честно сказать, я (сотрудник Item_42) намеренно оставил такие важные темы: слежение оружия за точкой, стрельба из оружия, нанесение урона противнику, перезарядка и так далее, потому что есть тысячи способов создать это, и каждый способ подходит для определенных игр. Ещё раз советуем вам прочитать оригинал статьи, перевод, возможно, может содержать ошибки, которые могут повлиять на создание и анимирование FPS рук.