Персонажный пайплайн для малой команды
В этот раз будет что то полезное.
Ниже я опишу полноценный продакшн пайплайн создания человечков ААА качества малой командой.
Начнем?
Весь пайплайн завязан на генераторах персонажей и работе с ними. Мы будем использовать Reallusion Character Creator 3. Как пользоваться софтом нас не интересует это головная боль персонажников мы ждем своей очереди. Если вы вдруг решите генерировать персонажа для себя вперед читать документацию. Дальше больше про пайплайн производства:
Весь пайплайн завязан на генераторах персонажей и работе с ними. Мы будем использовать Reallusion Character Creator 3. Как пользоваться софтом нас не интересует это головная боль персонажников мы ждем своей очереди. Если вы вдруг решите генерировать персонажа для себя вперед читать документацию. Дальше больше про пайплайн производства:
Tier 1 персонажи - это все ИМЕННЫЕ персонажи. Персонажи первого плана на которых важен Likeness
и ВАУ эффект для игрока. Эти же персонажи являются "родителями" для всех остальных. Мы просто понижаем детализацию реюзая все что сделали в этом тире.
и ВАУ эффект для игрока. Эти же персонажи являются "родителями" для всех остальных. Мы просто понижаем детализацию реюзая все что сделали в этом тире.
Tier 2 персонажи - это не именные второстепенные персонажи. На которых есть лицевая анимация и они готовы для сложных движений телом.
Tier 3 персонажи - это не именные второстепенные персонажи без сложной лицевой анимации. То есть исполняющие только моргания и простые лицевые эмоции. Эти персонажи должны быт готовы для сложных движений телом.
Tier 4 персонажи - это не именные второстепенные персонажи без сложной лицевой анимации. То есть исполняющие только моргания и простые лицевые эмоции. Эти персонажи должны быть МАКСИМАЛЬНО оптимизированные
для этого уровня качества.
Tier 5 персонажи - это не именные персонажи максимально оптимизированные для количественного размножения.
Что нужно от аниматора?
Если речь идет о "человеках" то имхо проще Tier завязать на бадитайпах. Обговорите с Арт менеджером, лидом по персонажке и ГД че хотите в конечном счете. В итоге вы получете, что то в стиле 3 типов персонажей:
для этого уровня качества.
Tier 5 персонажи - это не именные персонажи максимально оптимизированные для количественного размножения.
Что нужно от аниматора?
Если речь идет о "человеках" то имхо проще Tier завязать на бадитайпах. Обговорите с Арт менеджером, лидом по персонажке и ГД че хотите в конечном счете. В итоге вы получете, что то в стиле 3 типов персонажей:
1 высокий
2 низкий
3 обычный
У всех в рамках своего ранга может быть например 3 конфигурации
1.1 - высокий толстый 1.2 высокий обычный 1.3 высокий худой
Тут у нас встает сразу две проблемы первая шаринг анимации и шаринг лицевой анимации. Первая решается просто, мы шарим от обычного типа скелета на все остальные анимации по средствам ретаргета. Второе требует подготовки.
Для того чтобы было легко масштабировать производство голов персонажей, а
так же лицевой анимации командой был выбран инструмент Kinetic Motive.
Этот инструмент представляет собой автоматизированную систему создания FACS-based blendshape рига и анимации. Анимационная часть предоставлена по средствам интерфейса управления генерируемого самим инструментом в процессе создания рига. Инструментом поддерживает как "ручной" режим анимации, так и позволяет использовать Motion Capture. Список поддерживаемых систем лицевого мокапа можно найти на сайте вендора. Мы остановили свой выбор на способе снятия лицевого Motion Capture по
средствам iPhone и Face Cap т.к это самое простое и доступное решение на рынке. Используя комбинацию Motion Capture и ручной
артистичной доработки мы получаем конечный продукт - лицевую анимацию персонажей. Из минусов. Требует единой топологии, вертекс айди и специфических манипуляций при работе в UE4 пайплайне. Все это расскажу ниже.
2 низкий
3 обычный
У всех в рамках своего ранга может быть например 3 конфигурации
1.1 - высокий толстый 1.2 высокий обычный 1.3 высокий худой
Тут у нас встает сразу две проблемы первая шаринг анимации и шаринг лицевой анимации. Первая решается просто, мы шарим от обычного типа скелета на все остальные анимации по средствам ретаргета. Второе требует подготовки.
Для того чтобы было легко масштабировать производство голов персонажей, а
так же лицевой анимации командой был выбран инструмент Kinetic Motive.
Этот инструмент представляет собой автоматизированную систему создания FACS-based blendshape рига и анимации. Анимационная часть предоставлена по средствам интерфейса управления генерируемого самим инструментом в процессе создания рига. Инструментом поддерживает как "ручной" режим анимации, так и позволяет использовать Motion Capture. Список поддерживаемых систем лицевого мокапа можно найти на сайте вендора. Мы остановили свой выбор на способе снятия лицевого Motion Capture по
средствам iPhone и Face Cap т.к это самое простое и доступное решение на рынке. Используя комбинацию Motion Capture и ручной
артистичной доработки мы получаем конечный продукт - лицевую анимацию персонажей. Из минусов. Требует единой топологии, вертекс айди и специфических манипуляций при работе в UE4 пайплайне. Все это расскажу ниже.
При работе с этой штукой важно понимать что мы замыкаемся на MAYAи без доп танцев с бубном не сможем ничерта сделать после экспорта в движок, то есть просрав сорсы - вы оказываетесь в заложниках. Озаботьтесь системой контроля версий для вашего же блага.
(Верхний абзац уже не актуальн так как я нашел решение, но оставлю его для целостности повествования)
Алсо все это блендшейпы. Они хранят позиции от 1 до 0 и поэтому при наличии одинаковых слотов легко трансформируются с 1 персонажа на дугого и если они седалны хорошо анимация сохраняется тоже хорошо. Ну и бленды хранятся в GPU и они безумно шустрые в UE4. Из минусов крайне ебано специфичный пайплайн работы с ними схожий с разминированием бомбы.
(Верхний абзац уже не актуальн так как я нашел решение, но оставлю его для целостности повествования)
Алсо все это блендшейпы. Они хранят позиции от 1 до 0 и поэтому при наличии одинаковых слотов легко трансформируются с 1 персонажа на дугого и если они седалны хорошо анимация сохраняется тоже хорошо. Ну и бленды хранятся в GPU и они безумно шустрые в UE4. Из минусов крайне ебано специфичный пайплайн работы с ними схожий с разминированием бомбы.
После можно отправлять лепить бейзмеши своих крутанов:
Описывать их проблемы я не буду ибо это блог не про персонажников и их подводные камни, нас интересует только то чтобы они использовали GAME пресет CC3 и экспортнули .fbx в позе UE4.
Первый этап ПОСЛЕ выдачи результата CC3:
Первый этап ПОСЛЕ выдачи результата CC3:
Нам необходимо подготовить меш для работы с Kinetic Motive. На этом этапе мы должны избавиться от всего лишнего в персонаже. Лишнее это - скин, кости, блендшейпы, трансформы. Самый простой способ это просто сдублировать геометрию и удалить все лишнее. Следите за неймингом. Базовые части тела персонажа должны быть неизменны, на них ссылаются остальные скрипты в пайплайне.
CC_Game_Body
CC_Base_Teeth
CC_Game_Tongue
CC_Base_Eye
После мы должны перевернуть персонажа из Z up в Y up. Потому что KM НЕ ПОНИМАЕТ КАК РАБОТАТЬ В Z-up. Считайте эти костыли платой за отсутствие в команде 100500 блендшейп артистов.
Далее мы фризим историю меша и применяем KM. После группируем геометрию персонажа в отдельную группу под названием GEO, в этом случае нейминг также важен на эту группу ссылаются некоторые скрипты. После выделям в аутлайнере группу GEO, меняем мир на Z-up и переворачиваем сначала персонажа потом контроллеры KM. На этом этапе можно поставить контроллеры на место возле лица персонажа. На всякий случай рекомендую отчистить сцену от неизвестных нод.
Таким образом мы получаем чистую геометрию с блендшейпами. Сохраняем результат где-нибудь в рабочей папке с названием 001_ИМЯПЕРСОНАЖА_START.ma
Генерация рига
Так как у нас есть скин из CC3 и мы используем UE4 иерархию мы спокойно можем провернуть Манекен свап по средствам ARTv2. К слову этот трюк можно провернуть на любого персонажа из стора, таким образом получить фаршированного персонажа из Парагона себе в демо рил :)
Качаем ARTv2,
читаем инструкцию как устанавливать и пользоваться на сайте Джереми.
Качаем пресет который я любезно собрал для СС3 персонажей, загружаем в
сцену. Крайне рекомендую, где нить сохранить этот болванчик 000_DUMMY_START ибо он долго билдится:
читаем инструкцию как устанавливать и пользоваться на сайте Джереми.
Качаем пресет который я любезно собрал для СС3 персонажей, загружаем в
сцену. Крайне рекомендую, где нить сохранить этот болванчик 000_DUMMY_START ибо он долго билдится:
СС3_Standart.template246.02 Kb
Далее подгружаем в сцену САМЫЙ ПЕРВЫЙ .fbx ФАЙЛ КОТОРЫЙ НАМ ПРИШЕЛ ИЗ CC3. Применяем по очереди два скрипта. Сначала SNAP, потом SELECT. ЕСЛИ ПРОИСХОДЯТ ПЕРЕКРУТЫ ТО ЭТО ОЗНАЧАЕТ ЧТО НЕ БЫЛИ СОБЛЮДЕНЫ РЕКВАРЕМЕНТЫ ПО ЭКСПОРТУ ИЗ СС3. Убедитесь что при экспорте вы ставите не Y а Z как верх мира:
py
maniq_v2_snap.py3.85 Kb
py
maniq_v2_select.py2.85 Kb
Далее применением селект и отправляем результат в виде позы в Studio Library. Больше нам эта сцена не нужна. Закрываем ее без сохранения. Далее открываем 000_DUMMY_START, применяем позу из SL и
проходим все этапы создания контрл рига в этой позе. После чего ARTv2
сохранит риг в папке свое проекта. Наша задача просто назвать его
по-человечески. Далее открываем риг файл, загружаем в эту сцену 001_ИМЯПЕРСОНАЖА_START.ma, убиваем скин на DUMMY и удаляем его меш и материалы. Потом прискиниваем к скелету нашего персонажа. Далее
нужно восстановить скининг. Забираем его из начального файла который
вышел из cc3, сохраняем в json и трансфером переносим по vertex id. Для
этого я рекомендую использовать ngSkinTools v2,
к нему было бы неплохо прикрутить батч импорт и экспорт, у инструмента
есть api, но для этого нужен человек имеющей более глубокие знания
python чем на текущий момент есть у меня. Далее мы можем навести красоту
с контроллерами, поменять превью персонажа и подготовить селектор, а
так же УДАЛИТЬ ЛИШНЮЮ ГЕОМЕТРИЮ НА ПЕРСОНАЖЕ. ПОСЛЕ УДАЛЕНИЯ ЧИСТИМ НЕ ДЕФОРМАЦИОННУЮ ИСТОРИЮ.
Можно преступать к следующему этапу. Селектор, который подготовил я
можно скачать ниже. Перед удалением геометрии рекомендую на всякий
сохранить где-нибудь версию ДО удаления геометрии 002_ИМЯПЕРСОНАЖА_BEFORECUT.ma
проходим все этапы создания контрл рига в этой позе. После чего ARTv2
сохранит риг в папке свое проекта. Наша задача просто назвать его
по-человечески. Далее открываем риг файл, загружаем в эту сцену 001_ИМЯПЕРСОНАЖА_START.ma, убиваем скин на DUMMY и удаляем его меш и материалы. Потом прискиниваем к скелету нашего персонажа. Далее
нужно восстановить скининг. Забираем его из начального файла который
вышел из cc3, сохраняем в json и трансфером переносим по vertex id. Для
этого я рекомендую использовать ngSkinTools v2,
к нему было бы неплохо прикрутить батч импорт и экспорт, у инструмента
есть api, но для этого нужен человек имеющей более глубокие знания
python чем на текущий момент есть у меня. Далее мы можем навести красоту
с контроллерами, поменять превью персонажа и подготовить селектор, а
так же УДАЛИТЬ ЛИШНЮЮ ГЕОМЕТРИЮ НА ПЕРСОНАЖЕ. ПОСЛЕ УДАЛЕНИЯ ЧИСТИМ НЕ ДЕФОРМАЦИОННУЮ ИСТОРИЮ.
Можно преступать к следующему этапу. Селектор, который подготовил я
можно скачать ниже. Перед удалением геометрии рекомендую на всякий
сохранить где-нибудь версию ДО удаления геометрии 002_ИМЯПЕРСОНАЖА_BEFORECUT.ma
Так как мы используем KM возникает тысяча и одна проблема в оптимизации материалов. Ниже инструкция как сделать так чтобы все работало. Что нужно:
Отдельный материал для обоих глаз.
Достаточно переназначить материал на меше.
Зубы, челюсть, язык - на одном материале.
Трансфер UV с заранее подготовленной модели. Рот в проекте на всех персонажах должен быть одинаковый.
Достаточно переназначить материал на меше.
Зубы, челюсть, язык - на одном материале.
Трансфер UV с заранее подготовленной модели. Рот в проекте на всех персонажах должен быть одинаковый.
Объединить кожанные части персонажа в зависимости от видимой поверхности
Решать в каждом случае отдельно:
Если видно только голову+руки - можно объединить и перепечь.
Если видно голые и руки и ноги - по отдельности.
Решать в каждом случае отдельно:
Если видно только голову+руки - можно объединить и перепечь.
Если видно голые и руки и ноги - по отдельности.
Отдельные материал на каждый элемент одежды
По-умолчанию уже так.
По-умолчанию уже так.
Для оптимизации текстур и прочего мы будем использовать InstaLOD in Maya. Инструкции как ставить есть в сети.
Загружаем Риг файл из ARTv2. Берем нужные нам меши. Дублируем. Удаляем все что есть кроме этих мешей. Для этого понадобиться заанлочить все ноды в сцене. Скрипт ниже, удаляем блендшейпы в outliner и Shape editor. Так же нужно удалить неизвестные ноды и почистить гипершейд от лишнего. На выходе мы должны получить просто набор мешей без рига.
py
unlock_all_nodes.py105 Byte
Запускаем инсталод в MAYA.
Удаляем на меше CC_Game_Body UV set "Channel1"
Меняем шейдер материалов на Stingray PBS для того, чтобы была возможность использовать AO, metallic и roughness текстуры. Если у вас нет этого шейдера нужно активировать арнольд в плагин менеджере.
И назначаем все необходимые исходные текстуры, полученные из Character Creator:
Для корректного отображения roughness, normal и AO текстур меняем цветовое пространство на "scene-linear Rec 709/sRGB", предварительно выставив галку "Ignore Color Space File Rules":
Идем в Bake Output ставим Default Width и Height 4096
Меняем Output Folder на .fbm папку ARTv2 проекта
На выходе получаем просто статик меш без истории в мировых координатах
Сохраняем эту сцену где-нибудь 003_ИМЯПЕРСОНАЖА_BEFOREMERGE.ma
- Выделяем CC_Game_Body переходим в InstaLOD в Material Merge ставим UV imortence - Highest, а Texture importence на Hight и нажимаем Merge
- В результате получится мешики с текстурами и 1 материалом. Удаляем в сцене все кроме мешей с префиксом _INSTALOD, чистим Unused Nodes в гипершейде.
Сохраняем эту сцену где-нибудь 004_ИМЯПЕРСОНАЖА_MATMERGE.ma
- Открываем риг файл ARTv2
- Призываем скрипт pvCopyUV.py
py
pvCopyUV.py5.83 Kb
- Sample Space должен быть выставлен на Component
- Импортим 004_ИМЯПЕРСОНАЖА_MATMERGE.ma
- Выделяем импорченную геометрию, затем геометрию донор, нажимаем Run в окне скрипта Copy UV. Таким образом мы подменили UV на оптимизированные не меняя риг.
- Импортируем эталонные зубы с языком и повторяем действия по копированию UV с них на зубы и язык персонажа. Назначаем на зубы и язык один материал.
- Перепроверяем UV
- Проделываем на остальной оптимизированной геометрии то же самое
- Удаляем заимпорченную геометрию и в гипершейде применяем Delete Unused Nodes.
- Назначаем на глаза персонажа единый материал.
- Осталось переназначить материалы на Ресницы. Дублируем материал тушы_merged в гипершейде и назначаем его на Ресницы персонажа. В оригинальном материале убиваем Transperency по средствам Brake Connection.
- Далее проверяем байндпозы и правим нули в скинкластертейблах.
Выделяем root и его иерархиюВыделяем все меши Select Skin > Edit Influences > Add Influences в настройках ставим что мы добавляем 0 веса, таким образом мы ресетаем скинкластер
- Далее включаем отображение DAG в аутлайнере и ищем Bindpose:
- Далее включаем отображение DAG в аутлайнере и ищем Bindpose:
- Удаляем их
- Выделяем root и его иерерхию
- В скрипт эдиторе в MEL вбиваем dagPose -bp -s;
Важность байндпоз для движка я расскажу как нить в другой раз
Сохраняем прогресс в файл рига ARTv2
Вы великолепны! У вас на руках оптимизированный персонаж с морфами готовый для экспорта в движок. Экспорт стандартный выделяем иерархию костей, геометрию и по средствам геим экспортера экспортим.
Таким образом мы получаем понятный и прозрачный пайплайн в котором "внезапно" ничего не поломается, остальное зависит исключительно от исполнения каждым участником :)
upd. Весь геморрой с блендшейпами обходится путём запекания атрибутов блендшейпов в рут персонажа, тем не менее я нашел более производительный способ решить вопрос с лицевой анимацией, о нём как нить в другой раз поговорим. Пока я написал скрипткоторый позволит переносить все каналы блендшейпов на рут и запекать туда же, в UE это воспримится как просто набор ключей которые будут драйвить блендшейпы, тем самым мы отвязываемся от необходимости жёстко связывать пайлайн на MAYA:
Вы великолепны! У вас на руках оптимизированный персонаж с морфами готовый для экспорта в движок. Экспорт стандартный выделяем иерархию костей, геометрию и по средствам геим экспортера экспортим.
Таким образом мы получаем понятный и прозрачный пайплайн в котором "внезапно" ничего не поломается, остальное зависит исключительно от исполнения каждым участником :)
upd. Весь геморрой с блендшейпами обходится путём запекания атрибутов блендшейпов в рут персонажа, тем не менее я нашел более производительный способ решить вопрос с лицевой анимацией, о нём как нить в другой раз поговорим. Пока я написал скрипткоторый позволит переносить все каналы блендшейпов на рут и запекать туда же, в UE это воспримится как просто набор ключей которые будут драйвить блендшейпы, тем самым мы отвязываемся от необходимости жёстко связывать пайлайн на MAYA:
py
blShapeTargets_to_joint.py691 Byte