Ригерам
Риг - это этап, на котором персонажи и объекты получают возможность начать двигаться и ожить в анимации. От того, насколько хорошо сделана работа на этом этапе зависит то, как быстро и качественно смогут работать с моделью аниматоры
Требования к ПО
Windows 10
Autodesk Maya 2023.3
Материалы для начала работы
- Ассет: модель персонажа/объекта
- Описание ассета
- ТЗ от ассет менеджера
Материалы для сдачи
РЕГЛАМЕНТ ПО РИГГИНГУ НА ПРОИЗВОДСТВЕ
_________________________________________________
Для оптимизации рабочего процесса и минимизации проблем с риггами был составлен общий регламент по риггингу на производстве для ознакомления с некоторыми правилами при сетапе того или иного персонажа или пропса.
_________________________________________________
1. РЕКОМЕНДУЕМЫЕ НАСТРОЙКИ
Перед началом работы рекомендую выполнить несколько итераций в настройках чтобы работать максимально комфортно и ловить как можно меньше багов.
Нужно включить отображение unitConversion Nodes, ранее эти ноды отображались, однако в последних версиях они скрываются от пользователя, а сам коннект от ноды к ноде приобретает фиолетовый цвет. Однако это нода, значение которой можно менять, потому лучше будет иметь визуальное понимание, где эта нода есть, а где нет
На проекте используется фреймрейт 25 фпс, лучше это выставить сразу
Необходимо отключить теги. Вероятно, это нововведение может быть полезно, но не все новое априори лучше - с наличием тегов, нет возможности работать с точками на которые влияет деформер, с тегами не создаются необходимые groupId и groupParts, которые хранят в себе информацию о геометрии. Что касается скриптинга использование тегов тоже вызывают вопросы - потому целесообразно это отключить и включить наличие твиков
в настройках анимации следует включить Parallel и отключить GPU Override и Include controllers in evaluation graph. Так как не все видеокарты были протестированы на GPU Override, его наличие может снизить производительность рига и некорректно деформировать модель
_________________________________________________
2. СПИСОК НЕОБХОДИМЫХ ИНСТРУМЕНТОВ И ПЛАГИНОВ
-
Bifrost 2.5.1.0
-
rigBuilder
Для работы с риггами применяется Bifrost, версии 2.5.1.0. Если же в Maya не установлен данный плагин, риг построенный на бифросте будет запускаться с багами или вовсе не запустится.
rigBuilder - специальный инструмент - конструктор, позволяющий собирать темплейты для любых скриптов не тратя время на создание интерфейса. Темплейты для сборки риг ассета будут написаны именно в этом инструменте, который в свою очередь хранит всю информацию в собственных файлах с собственным расширением.
Скачать данный инструмент можно в свободном доступе на гитхабе, однако устанавливать его не нужно, все уже имеется на сервере. Ниже будет вложение, группу modules в архиве следует перенести в documents/kit/maya.
Запуск осуществляется с помощью python кода.
import rigBuilder
rigBuilder.mainWindow.show()
modules (2).zip
_________________________________________________
3. НЕЙМИНГ В ПРОИЗВОДСТВЕ
Нейминг, как задача, достаточно простая, однако не менее важная в производстве. Простой и понятный нейминг облегчит работу как риггерам, так и аниматорам. Можно будет проще разобраться как устроена та или иная система и не запутаться, так же писать различные скрипты и инструменты для работы с риггом и анимацией ( к примеру, сделать пресет анимации ходьбы и передавать на однотипных персонажей, так как имена будут повторяться ).
Проще говоря, хороший нейминг = простота и экономия времени.
Исходя из собственного анализа, был подобран наилучший вариант записи:
side_name_(addDescription)_(n)_type
-
side - сторона объекта, соответственно L (лево), R (право), M (центр):
-
name - имя объекта;
-
(addDescription) - дополнительный элемент записи. К примеру иногда требуется указать положение объекта, т.е. upper (сверху) или lower (снизу). Такое часто применяется в создании лицевого сетапа. Кроме того дополнительное описание применяется в случаях, если необходимы пояснения к различным математическим нодам;
-
(n) - цифра или число итераций объекта;
-
type - тип объекта, здесь имеется ввиду тип ноды или логика трансформы, т.е. под типом понимается, как пример multiplyDivide, а под логикой offset или null (когда нужно выделить оффсет группу).
Тип объекта нельзя сокращать, это обязательное правило, так как никто из нас к сожалению не умеет читать мысли другого, потому будет крайне трудно понять, что имел ввиду человек под своими сокращениями.
Возможно, местами такая запись не совсем короткая, однако подобная форма записи достаточно легко читается и понимается, а так же часто используется в других студиях, а так же школах, таких как CGTarian.
В качестве примеров снизу будут вариации подобного нейминга:
-
L_eye_upper_1_control;
-
R_arm_3_joint;
-
M_jaw_2_plusMinusAverage.
-
L_brows_U_delta_1_floatConstant;
-
M_hair_correctiveShape_multDoubleLinear.
_________________________________________________
4. ОСОБЕННОСТИ ИЕРАРХИИ ОБЪЕКТОВ
Поскольку производство заточено под USD, есть небольшой ряд правил для создания иерархии объектов в сцене.
Группа с геометрией ( от отдела моделлеров ) и группа с риггом персонажа ( от отдела сетапа ) должны лежать отдельно друг от друга, и в то же время находится в общем группе-родителе. Таким образом, при определенных настройках сетапа, будет возможность перемещать группу с моделью и риггом не затрагивая контролы, как это необходимо для USD.
Что касается группы с геометрией, внутри неё должны храниться ТОЛЬКО необходимые меши от отдела моделлеров.
Совершать какие-либо манипуляции внутри группы geo нельзя, ничего лишнего в этой группе помимо геометрии лежать не должно.
Иерархия групп внутри группы с риггом должна иметь следующий вид:
|
|
Группы components, skeleton, others, geometry - в анимационном ассете скрыты и имеют референс формат, т.е. выделить их аниматор не сможет и тем самым сломать риг будет проблематично.
Кроме того, для комфортной работы, main_control должен иметь в себе кастомный атрибут объединяющий все атрибуты скалирования (scaleX, scaleY, scaleZ). Сам main_control должен быть связан с группой scale, а именно иметь parentConstraint и прямой коннект по скейлу;
world_control должен иметь залоченые и скрытые атрибуты скейла - он нужен только для вращения и перемещения в сцене.
МАНУАЛ: ЛИЦЕВОЙ РИГ ПЕРСОНАЖА (WIP)
МАНУАЛ: ЛИЦЕВОЙ РИГ ПЕРСОНАЖА
_______________________________________________________________________________
Здесь представлен подробный гайд по настройке лицевого рига персонажа. Настраивать лицевой сетап персонажа рекомендуется по порядку в соответствии с пунктами ниже. Как результат, на выходе будет получен лицевой риг, так же будет произведено подключения этого лица к существующему боди_ригу в rig_dev ассете и рассказаны особенности сборки персонажа для получения финального анимационного ассета.
_______________________________________________________________________________
1. ИМПОРТ ЛИЦЕВОГО ПРЕСЕТА
Прежде чем начать работу необходимо открыть последний файл из моделлинга, и произвести небольшой клинап. Для этого в окне ригБилдера (РБ) необходимо открыть модуль cleanup, там выделить подмодуль cleaning_hash и кликнуть RUN. Далее, удаляем все, кроме:
- группа for_rig
- группа blendshapes
- геометрические меши в группе geo, которые относятся к лицу (глаза, брови, ресницы, челюсти, язык, волосы, очки и т.п.)
Если нужно освежить память, как вызвать необходимый модуль в РБ, то можно обратить внимание на статью ниже, на графу: создание риг_дев ассета, пункт 2.
https://bookstack.yarko.com/books/rigging-AtN/page/manual-rigging-biped-personaza
Теперь когда сцена максимально очищена от разного мусора и лишних геометрий, нужно импортировать пресет лицевого рига, где уже будут созданы все необходимые контролы, а так же созданы все нужные связи между ними. Импортировать этот пресет можно через РБ, открыв модуль import_face_temp.
Каждое лицо уникально, потому недостаточно просто импортнуть пресет, его нужно подогнать - для этого первая кнопка import helpers модуля import_face_temp импортирует в сцену хелперы. С помощью этих хелперов можно расставить ориентиры, где будут созданы контролы.
Чтобы избежать ошибок при позинге хелперов, полезным будет открыть 1 из существующих лицевых ригов (на момент написания статьи, готовы лица на персонажей doc и vinilion) и посмотреть в каких местах расставлены контролы.
Хелперы следует расставлять аккуратно, в правильные и логичные места на лице. На некоторых хелперах будут скрыты атрибуты вращения - это не ошибка, а умышленное действие, поскольку поворот хелпера будет учитываться при конвертации в контролы. Пример подгонки хелперов, изображен на изображении ниже.
Следующим этапом будет конвертация хелперов в контролы, для этого нужно просто нажать вторую кнопку face adapt в модуле import_face_temp. После этого, работа над подгонкой лицевого сетапа будет почти завершена. Оставшиеся 10-20 процентов будут подгоняться за счет работы с тюнерами, которые будут находиться в группах локальных ригов внутри face_others.
Как работать с тюнерами будет описано ниже, в отдельных блоках посвященных локальным ригам.
Шейпы контролов, к сожалению, придется настраивать вручную, так как хелперы конвертируют только оффсет трансформы
Поскольку данная система лицевого рига имеет локальную основу, каждая часть лица будет выполняться на отдельной геометрии, т.е. вся работа лицевого сетапа выполняется локально - такой подход позволяет удобно работать с ригом, а так же минимизирует время на дебаггинг в случае, если риг нуждается в правках.
Начинать работу будем с локального рига рта - поскольку бленды на уголки рта моделлеры делают на основе лицевого рига. То есть, когда риг рта будет закончен, эта версия рига отправляется в отдел моделлинга, где создают дополнительные корректы под заданные лимиты уголков рта. В это время работа над лицевым риггом не прекращается, а просто выполняются другие элементы лицевого рига (риг век, бровей, доработка рига рта и т.п.). После того, как бленды будут закончены и одобрены - их нужно подключить уже в лицевом сетапе.
Тем самым, все бленды будут готовы. Ниже будут ссылки на статьи по блендшейпам, для того, чтобы можно было самостоятельно проверить все ли бленды присутствуют на геометрии.
https://bookstack.yarko.com/books/modelirovanie/page/blendseipy-licevye-dlia-glavnyx-personazei
https://bookstack.yarko.com/books/modelirovanie/page/blendseipy-licevye-dlia-vtorostepennyx-personazei
_______________________________________________________________________________
2. РИГ РТА
Первое с чего начинаем работу, это с локального рига рта. Выполнять лицевой сетап нужно именно с этого потому, что бленды, которые отдает отдел моделлирования не полные, то есть, бленды, корректирующие уголок рта они выполняют только основываясь на уже лицевом сетапе. Таким образом, нет необходимости "целиться" в положения блендов, а так же не тормозит производственный процесс, так как лицевой риг в работу можно брать не имея бленды.
На старте, нужно сделать 3 копии головы head, что для нас готовят моделлеры, и переименовать их в blends_mouth_geo, lips_minor_geo, mouth_geo, где mouth_geo будет нашей финальной геометрией рта, lips_minor_geo будет нужен для минорных изменений и blends_mouth_geo - под основную настройку открытия рта и деформаций уголков - начинать как раз будем с этой геометрии. Все геометрии перенесем в группу mouth_others, в face_others.
Для позинга внутренних элементов локальных ригов нужно двигать тюнеры. Тюнеры можно назвать внутренними хелперами, с помощью которых можно донастроить лицевой сетап каждой локальной части лица. Тюнеры двигают непосредственно элементы рига, что находятся внутри others групп. Так же внутри имеются группы с констрейнами - все они нужны ТОЛЬКО для позинга - в работе они не нужны - отсюда, после того как тюнеры будут в правильных местах, группу _constraint_tuners_others нужно удалять.
_tuners_group - группы с тюнерами;
_constraint_tuners_others - группа с констрейнами, после позинга должна быть удалена
--------------------------------------------------------------------------------------------------------------------------------------
Внутри 3 тюнера:
1) jaw_main_tuner обычно уже находится в корректном месте - его можно не двигать, однако должен он располагаться в середине между верхней и нижней губой;
2) jaw_pivot_tuner нужно ставить в точку открытия челюсти;
3) tongue_pivot_tuner нужно тоже ставить в точку открытия челюсти.
В силу стилизации, важное замечание:
jaw_main_tuner не всегда нужно ставить в анатомически верное положение
После того, как все тюнеры были расставлены и группа с констрейнами были удалены, необходимо создать пару кривых на верхнюю губу - M_jaw_up_curve, и на нижнюю губу - M_jaw_low_curve. Сделать подобное можно с помощью модуля mouthRig_temp в РБ.
Принцип работы следующий:
1) в окне name пишем название кривой, то есть если мы настраиваем верхнюю губу, то M_jaw_up, если нижнюю, то M_jaw_low;
2) далее на персонаже выделяем соответствующий эйджЛуп от левого уголка рта, до правого. Важно понимать, что эйджлупы нужно брать на рту, которые пересекаются;
3) далее жмем кнопку RUN.
В конечном итоге будут созданы все необходимые кривые и размещены в правильных местах в иерархии групп.
Важно обращать внимание на нейминг, на момент написания статьи все локаторы имеют одинаковый префикс - потому его нужно править вручную, руководствуясь тем, что левые локаторы и кости внутри имеют префикс L, правые R, а центральный - оставить M.
Так же нужно уделять внимание на начало кривых, т.е. направление кривых должны быть одинаковые
Когда кривые настроили, нужно обратить внимание на трансформу face_head_transform. В атрибутах у этой трансформы есть много каналов, каждый из которых уже связан с элементами лицевого рига. Все эти каналы разбиты на группы для удобства. Благодаря этим атрибутам можно не копаться в риге, а сразу настраивать все, что необходимо.
Следующим этапом будет создания скина, как на кривых, так и на геометрии. Наш основной вектор, это при открытие рта попасть в положение блендшейпа открытого рта, который отдают моделлеры. Конечно, точь в точь попасть в положения блендов не получится, однако нужно стремиться к тому, чтобы кривые при открытие рта были почти по форме блендшейпа открытого рта.
Здесь представлены 3 скинКластера на кривые и на геометрию соответственно, а в окне outJoints представлены кости, на которые нужно выполнять этот скинКластер.
А именно:
1) jaw_low_psd_skinCluster - это скин на кривую M_jaw_low_curve;
2) jaw_up_pds_skinCluster - это скин на кривую M_jaw_up_curve;
3) mouth_skinCluster - это скин на геометрию blends_mouth_geo.
Добиться этого могут помочь атрибуты на face_head_transform. Регулировать их нужно когда рот уже открыт на максимум (вкл. limits на контроле M_jaw_control и опускаем рот максимально по оси Y).
CornerX - отвечает за движение уголка рта по оси X при максимально открытом положении рта;
CornerY - отвечает за движение уголка рта по оси Y при максимально открытом положении рта;
CornerZ - отвечает за движение уголка рта по оси Z при максимально открытом положении рта;
jaw_open_ty - отвечает за движение челюсти по оси Y при максимально открытом положении рта;
jaw_open_tz - отвечает за движение челюсти по оси Z при максимально открытом положении рта;
jaw_open_rx - отвечает за поворот челюсти по оси X при максимально открытом положении рта;
jaw_upper_open_tz - отвечает за движение верхней части челюсти по оси Z при движении челюсти вверх;
jaw_upper_open_rx - отвечает за поворот верхней части челюсти по оси X при движении челюсти вверх;
corner_angle - отвечает за угол наклона уголка рта - этот атрибут автоматически настраивается исходя из угла наклона хелпера (см. пункт 1 - этого мануала). Однако его можно регулировать и потом, если при работе появляется необходимость поменять этот параметр.
Как результат (см. картинки ниже), на выходе мы получим максимально приближенный к блендшейпу открытого рта результат основанный только на скиннинге, где выделенные кривые и наш blends_mouth_geo максимально приближены к блендшейпу, что выделен черной сеткой.
При покраске blends_mouth_geo важное замечание, уделять больше вниманию уголку рта, поскольку задача покрасить рот настолько хорошо, насколько это возможно ДАЖЕ С ЭКСТРЕМАЛЬНЫМИ положениями рта (для этого нужно на L(R)_corner_control выключить атрибут limits.
Добиться нужного результата за счет использования только скинКластера не получится, потому нужны корректирующие бленды. Здесь работа делится на 2 части - 1 часть выполняется отделом риггинга, 2 - отделом моделлинга.
Количество блендов на уголки рта лимитировано и они выполняются как на кривых, так и на геометрии, а именно:
-
corner_U
-
corner_D
-
corner_I
-
corner_O
-
corner_UO
-
corner_OD
-
corner_ID
-
corner_IU
-
jaw_open__corner_U
-
jaw_open__corner_D
-
jaw_open__corner_I
-
jaw_open__corner_O
-
jaw_open__corner_UO
-
jaw_open__corner_OD
-
jaw_open__corner_ID
-
jaw_open_corner_IU
Где, U - означает вверх, D - вниз, I - в центр, O - наружу. Префикс jaw_open означает, что рот персонажа открыт в положение открытого рта, которое задается блендшейпом открытого рта.
Так же применяется как на кривых, так и на геометрии корректирующий шейп jaw_open, который был взят для ориентира когда настраивали скин кривых.
Бленды, которые так же будут присутствовать в лицевом сетапе рта, но применяются только на геометрии:
-
jaw_U
-
roll_up_in
-
roll_up_out
-
roll_bot_in
-
roll_bot_out
-
mouth_rotate_L
-
mouth_rotate_U
-
mouth_rotate_D
-
mouth_rotate_R
Исходя из описания блендов выше, необходимо создать блендшейпы на кривых M_jaw_low_curve - jaw_low_psd_blendShape и M_jaw_up_curve - jaw_up_psd_blendShape, и создать на них соответствующие таргеты уголков рта. На геометрии тоже нужен блендшейп - mouth_blendShape, на который следует продублировать таргеты, что есть на кривых, а так же добавить таргеты, которые должны быть, но только на геометрии (см. выше).
Корректы на кривых следует выполнять таким образом, чтобы кривые по ходу движения уголка рта двигались по черепу персонажа - это придаст более реалистичный вид деформациям
Поскольку большую часть корректов, что отдают моделлеры, на начало работы с лицевым ригом уже готовы - их следует подключить к таргетам mouth_blendShape.
Бленды на roll_up и roll_bot отдаются нераздельно, т.е. на нижнюю и верхние части нужно делить уже в риге. Выполняется это с помощью покраски блендшейпа или любым другим известным способом.
Бленд mouth_rotate_R получается путем миррора mouth_rotate_L
Итоговым результатом будет открытие рта и максимально хорошая покраска скина. Далее этот файл передается в отдел моделлинга или руководителю риг отдела, чтобы тот передал это в отдел моделлинга - для дополнительных корректов на уголках рта. Когда бленды будут готовы, их следует подключить/заменить на соответствующие таргеты в блендшейпе mouth_blendShape.

Результат с блендами уголков рта и открытой челюстью
Далее, нужно создать блендшейп с геометрии blends_mouth_geo на геометрию lips_minor_geo, тем самым передадим деформации открытого рта на другой меш лица. Создадим скинКластер для настройки минорных изменений рига рта.
Сами миноры нужны для создания дополнительных форм лица, когда обычные контролы не позволяют передать ту или иную мимику.
Здесь представлен скинКластер на lips_minor_geo, а в окне outJoints представлены кости, на которые нужно выполнять этот скинКластер.
А именно:
lips_minor_skinCluster - это скин на геометрию lips_minor_geo
Красить миноры рекомендую уже в позе, поскольку мимика персонажа должна позволять расширять рот настолько широко, насколько это возможно.
Чтобы миноры следовали за геометрией, нужно настроить uvPin на null группы миноров. uvPin следует цеплять к mouth_geo (эта геометрия будет изменяться, потому миноры будут спокойно следовать за геометрией без возникновения циклов). Однако выходящую матрицу из uvPin я рекомендую декомпозировать через ноду decomposeMatrix и передавать только каналы транслейта, поскольку ротейт в данном случае не нужен.
Однако при движении миноров теперь, будут возникать двойные трансформации, для нивелирования такой проблемы, достаточно создать multiplyDivide ноду, в input1 которой будут входить атрибуты транслейта минора, а в input2 находиться минусовые значения (-1, -1, -1). Выход multiplyDivide ноды следует подключить на группу трансформу между минором и его null группой.
1) L_lips_low_3_minor_control_null - оффсет группа минора
2) L_lips_low_3_minor_control_transform - трансформа минора
3) L_lips_lower_3_minor_control - сам минор
Теперь назначим блендшейп от lips_minor_geo к геометрии mouth_geo. Это будет финальная геометрия рта, соответственно назвать этот блендшейп нужно как minors_final_blendShape. Создадим последние управляющие элементы рига к рту с помощью скинКластера к mouth_geo и назовем его как mouth_final_skinCluster.
Здесь представлен скинКластер на mouth_geo, а в окне outJoints представлены кости, на которые нужно выполнять этот скинКластер.
А именно:
mouth_final_skinCluster - это скин на геометрию mouth_geo
Требования к покраске будут таким же, как и к минорам. Нужно стараться добиваться таких деформаций, чтобы регулируя контролы, можно было добиться максимальной экспрессии.
Иногда полезно будет использовать деформер deltaMush, который позволит выровнять местами сетку. Однако следует помнить, что больше 10 smoothing iteration ставить нельзя, поскольку на больших значениях deltaMush с удовольствием скушает не мало fps
На данном моменте лицевой сетап рта считается законченным и геометрию mouth_geo можно подключать через блендшейп к геометрии head_final_geo и переходить к другим локальным ригам.
_______________________________________________________________________________
3. РИГ ВЕК И ГЛАЗ
Для создания локального рига век нужно будет использовать 3 геометрии: eyes_geo - геометрия, на которой будут деформации внутренней границы века; eyes_outer_geo - геометрия, на которой будут деформации внешней границы века; eyes_final_geo - финальная геометрия, на которой будет финальный скейл век и подключенные eyes_outer_geo и eyes_geo, через блендшейп.
Геометрию eyes_geo обычным дубликатом не получить, потому начинать работу нужно с геометрией блендшейпа закрытого глаза closed_eyes.
Выделим геометрию closed_eyes и подвинем тюнеры век в группе lids_tuners_group/internal_tuners_group по границе линии смыкания век. Тюнеры подгонят необходимые элементы для риггинга век в нужные места, после их подгонки нужно удалить группу lids_constraint_tuners_others.
Тюнеры век не стоит ставить куда попало, нужно руководствоваться простой логикой:
1) L_lids_corner_out_tuner и L_lids_corner_in_tuner ставятся в положения L_lids_minor_outer_control и L_lids_minor_inner_control соответственно;
2) тюнеры верхние и нижние должны двигаться в "синергии", то есть не нужно брать желтые тюнеры и двигать 1 влево, другой вправо - такой подход просто не позволит вам сомкнуть веко корректно при дальнейшем сетапе;
3) располагать тюнеры следует логично, где центральные желтые тюнеры должны находить в середине, крайний левый и крайний правый на равноудаленное расстояние от центра и голубые тюнеры на середине между corner тюнерами и low(up)_1_tuner и low(up)_3_tuner соответственно.
Для наиболее простого понимания, картинка ниже визуально описывает правила расстановки тюнеров век.
Следующей задачей будет создание геометрической плашки L(R)_eyelids_plane_geo, на которой будут находиться косточки, от которых в свою очередь будет идти скин. Сами косточки цепляются через uvPin - такой подход не снизит производительность и сильно облегчит скин. Как альтернатива плашке может являться кривая, однако красить её не совсем комфортно.
Получить плашку можно выделив полигоны по линии смыкания век, и удалить все не нужное, кроме этой плашки.
Небольшой помощью при работе будет если последний полигон при выделении фейсЛупа убрать из этого выделения, тем самым будет четкое понимание где находится край века.
После получения плашки, нужно прискинить её к следующим косточкам, которые находятся в группах face_others/eyelids_others/lids_others.
Эти косточки можно найти в группе, что описаны выше. Следует понимать, что эти косточки нужны лишь для левой плашки, для правой будут ровно те же самые косточки, но уже с префиксом R, вместо L.
Прежде чем перейдем к настройке открытия века, нужно выполнить еще 1 действие - создать косточки, от которых будет идти базовый скин на открытие/закрытие века. Количество этих джоинтов будет эквивалентно количеству лупов на плашке, а их создание происходит вручную. Сами косточки нужно расставить по крайним положениям эйджЛупов.
Сами косточки нужно приврапить к плашке. Выполняется подобное через uvPin, поскольку это наиболее быстрый способ с точки зрения производительности ригга. Однако, стандартный uvPin передает все трансформы на джоинты, что создает ненужные ротейты на костях. В нашем случае ничего, кроме транслейтов не нужно, потому нужно декомпозировать исходящую матрицу из uvPin ноды в транслейты и передать на джоинты. Вручную такое выполняется с помощью decomposeNode, однако для экономии времени можно воспользоваться модулем uvPin_2 в RB.
1) geo - это имя плашки;
2) new_name - это имя, которое будет у uvPin ноды;
3) joints - лист джоинтов.
Принцип работы достаточно тривиален, сначала нужно вставить в графу geo плашку или геометрию, на которой будет создан uvPin. В графу new_name нужно написать имя будущей uvPin ноды. В окно joints нужно вставить джоинты, которые будут приврапены к geo, сделать это можно выделив все нужные косточки в сцене и нажав правой кнопкой мыши по окну joints выбрать get selected from maya.
Теперь жмем RUN и все приврапится как нужно.
В процессе открывания глаза, вероятен такой исход событий, когда джоинты или прыгают в нуль координат или врапятся к другому вертексу на плашке. В таком случае, я рекомендую приоткрыть глаз, удалить uvPin ноду и вручную перетащить в нужные места "улетевшие" джоинты. После снова применить модуль uvPin_2 в RB.
Когда все подготовительные элементы сделаны, можно начинать настройку открытия глаз. Первым делом корректно раскрасим скин на плашке L(R)_eyelids_plane_geo, результатом которого будет являться - корректные деформации при перемещении миноров века и вращении основных контролов век L_lids_upper_control и L_lids_lower_control.


На первой картинке ротейт основного контрола века L_lids_upper_control, в то время как на второй были смещены 3 минора внутренней границы века.
Исходя из картинок можно понять, что верхнее и нижние полигоны на плашке века имеют одинаковые веса - тем самым при смыкании геометрического глаза не будут возникать дырки и заломы. Кроме того, особое внимание при покраске следует обратить на плавность изгибов века.
Теперь можно открыть веко с помощью атрибутов на face_head_transform. Поскольку мы открываем глаза из положения закрытого века - результатом будет максимальное приближение к открытому глазу, то есть нужно настроить атрибуты таким образом, чтобы плашка L(R)_eyelids_plane_geo при открытии века была приближена к открытому веку настолько, насколько это возможно. Управлять открытием глаза можно с помощью атрибута blink на контроле L(R)_eye_lids_control.
Процесс настройки выполняется в соответствии с порядком атрибутов начиная с upper_remap и заканчивая min tZ.
upper remap - угол на который поднимется верхнее веко;
lower remap - угол на который опустится нижнее веко;
corners remap - угол по которому будет двигаться угловые контролы (обычно дефолтное значение около -40 хватает);
lower info - максимальный угол нижнего века (атрибут заблокирован, он нужен только как информация);
upper info - максимальный угол верхнего века (атрибут заблокирован, он нужен только как информация);
upper value - максимальный угол верхнего века;
lower value - минимальный угол верхнего века;
upper angle joints - угол поворота верхних косточек при открытие/закрытие глаза;
lower angle joints - угол поворота нижних косточек при открытие/закрытие глаза;
max tX - максимальное положение по транслейту Х верхнего века;
max tY - максимальное положение по транслейту Y верхнего века;
max tZ - максимальное положение по транслейту Z верхнего века;
min tX - минимальное положение по транслейту Х нижнего века;
min tY - минимальное положение по транслейту Y нижнего века;
min tZ - минимальное положение по транслейту Z нижнего века.
При изменении атрибутов upper и lower remap можно регулировать угол на который будут опускаться и подниматься веки - таким образом, изменение этих атрибутов подгонит верхнюю и нижнюю границы плашки под открытый глаз на геометрии.
- картинка где плашка при blink 1 и открытый глаз
Для наиболее точной работы рига век, значение атрибутов upper remap и lower remap стоит сохранять равными друг другу. Конечно, система позволяет использовать разные значение этих атрибутов, но работать с настройкой век будет проще и комфортнее, имея равные значения в upper и lower remap.
МАНУАЛ: РИГГИНГ БИПЕД ПЕРСОНАЖА
_______________________________________________________________________________
Здесь представлен подробный гайд по настройке бипедального персонажа. Настраивать сетап персонажа рекомендуется по порядку в соответствии с пунктами ниже. Как результат, на выходе будут получены 3 файла - темплейт персонажа, риг_дев ассет и анимационный ассет для аниматоров.
Прежде чем приступить к работе, нужно ознакомиться с регламентом по риггингу на производстве, потому прежде чем приступить непосредственно к сетапу - следует почитать статью ниже по ссылке на bookstack:
Регламент по риггингу на производстве
_______________________________________________________________________________
СОЗДАНИЕ РИГ_ДЕВ АССЕТА
1) Первым делом необходимо открыть сам моделлерский ассет для работы. Для этого в приложении ftrack нужно в окне задач (My Tasks) открыть свою задачу, перейти в моделинг и открыть ассет (open).
Делаем именно в такой последовательности, потому что изначально ссылка на задачу будет на риг, а поскольку рига еще нет - открываться будет пустая сцена
2) Перед началом работы, следует создать базовую иерархию групп и базовые контролы. Для экономии времени был написан модуль startup_project внутри RigBuilder'а (РБ). Этот модуль создает все необходимое, а так же чистит сцену от различных ненужных метаданных, которые могут прийти от отдела моделлинга.
В окне РБ жмем TAB, в появившемся окошке пишем startup_project и двойным кликом по нему перемещаем его в левое окно РБ. Далее все, что нужно сделать это нажать кнопку RUN.
Важно чтобы группы root и geo присутствовали в сцене, в противном случае модуль не сработает
3) Теперь приступим к настройке скелета с помощью модуля skeletonTool в РБ. Принцип его поиска и запуска идентичен startup_project (см. пункт 2).
Вручную создавать ничего не нужно, уже имеется утвержденное необходимое количество джоинтов для бипедальных персонажей.
Данный модуль импортирует уже готовый скелет, и создает необходимые элементы управления для его настройки, при этом скрывая каналы, которые не нужны при постановке скелета.
- Path указывает путь, откуда будет браться информация (его менять не нужно);
- Import skeleton - непосредственно импортирует скелет;
- Create skeleton Rig - нажатие этой кнопки создает риг на основе локаторов, который нужен только для правильной расстановки костей по персонажу;
- delete and cleanup - данная кнопка удаляет созданный риг, корректно ориентирует джоинты и приводит скелет в порядок.
Важно следить за каналом атрибута translateZ на коленях и локтях - они должны оставаться в нуле.
Этот модуль можно использовать и в процессе работы.
Типовая ситуация, когда кости пальцев неправильно сориентированы и при сгибе в кулак они проникают друг в друга. Для того, чтобы быстро это дело поправить, можно вновь нажать на create skeleton rig, далее поправить кости и удалить риг, нажав на delete and cleanup.
Для обновления весов skinCluster'а можно воспользоваться модулем skinTool внутри РБ
Выделяем геометрию на которой есть skinCluster и жмем на кнопку getting skinCluster.
В окне outJoints сразу отобразятся все джоинты, которые приконнекчены к выбранному skinCluster'у.
Далее жмем кнопку RUN дважды (первый раз модуль вернет рест позу персонажа, а вторым кликом обновит сам skinCluster)
4) Теперь выполняем самый обычный скин, выделяя необходимые джоинты и геометрию.
Важный момент, при назначении скина, не нужно учитывать косточки:
-L(R)_arm_4_joint;
-L(R)_leg_5_joint;
-M_head_2_joint;
-L(R)_thumb_4_joint;
-L(R)_index_4_joint;
-L(R)_mid_4_joint;
-L(R)_ring_4_joint;
-L(R)_pinky_4_joint
Это скорее направляющие джоинты или джоинты, которые играют свою роль в сборке темплейта.
В настройках skinCluster'а важно поставить галку в attribute editor'е на support non-rigid transformtations поскольку без неё элементы стретча будут работать не совсем корректно
При настройке качественных деформаций, может помочь пара вещей, такие как deltamush и модуль joints_inBetween в РБ.
Что касается deltamush, следует знать, что значение smoothing iterations больше 10 ставить нельзя, поскольку тогда дельта начнет сильно влиять на производительность рига.
Найти deltamush можно на стандартной панели Maya - deform/deltamush
Что же до модуля joints_inBetween, доступ к нему можно получить в РБ, по принципу что и startup_project (см. пункт 2).
Данный модуль создает к выбранным костям (базовым) дополнительные 4 джоинта, которые смещаются в зависимости от угла наклона базового джоинта.
На правую сторону джоинты создаются автоматически - отдельно их настраивать не нужно.
- array_of_joints - это поле массива, где будут отображаться базовые джоинты, к которым необходимы инбитвины

ПРИНЦИП РАБОТЫ:
1) выделяем необходимую нам базовую кость;
2) в окне массива array_of_joints жмем правой кнопкой мыши и выбираем get selected from maya;
3) жмём RUN.
Создадутся 4 джоинта, где у каждого будут свои атрибуты для настройки, где posMin(Max) будут отвечать за то, насколько далеко будет выходить инбитвин, а slideMin(Max) непосредственно за слайдинг этого джоинта вдоль оси базовой кости.
AngleMin и AngleMax определяют какой угол будет максимальным и минимальным для выдвижения инбитвина.

5) Когда скин тела закончен, необходимо так же заскинить и одежду. Принцип работы с риггом одежды на производстве заключается в следующем, создается прокси геометрия, к которой будет идти скин и затем, через proximityWrap, деформации будут передаваться на оригинальную геометрию одежды в группе geo.
Перед началом, создадим группу low_geo_group и переместим его в группу geometry в non_scale. В эту группу мы будем складировать наши прокси геометрии. Создание прокси геометрии одежды происходит вручную, т.е. берем одежду из группы geo, делаем её дубликат, переименовываем, задавая префикс low и удаляем не нужные элементы (карманы, петли и т.д.) и лишние эйджи для комфортного скиннинга.
Не рекомендуется использовать deltamush при покраске прокси геометрии одежды, поскольку deltamush лучше себя показывает уже на оригинальной геометрии после применения proximityWrap'а
ProximityWrap - это стандартный майский деформер, в каком то плане переписанный wrap с возможностью красить, и со скоростью cvWrap (который можно найти на github в свободном доступе). Он очень удобен в работе, и избавляет от большой монотонной работы, если красить оригинальную одежду тем же skinCluster'ом. Однако его назначение совсем не юзерФрендли, потому в РБ есть модуль proxyTransfer, позволяющий быстро настроить его работу.
ПРИНЦИП РАБОТЫ:
1) выделяем оригинальные геометрии на которые будут идти деформации и выделяем их;
2) далее в окне массива sources жмем правой кнопкой мыши и выбираем get selected from maya;
3) в target добавляем нашу прокси геометрию от которой будут идти деформации, сделать это можно выделив объект в сцене и нажать на кнопку <;
4) жмем RUN
ProximityWrap будет создан на всех объектах, что были указаны в sources, и применятся сразу необходимые настройки этого проксиВрапа
Настройки wrapMode у proximityWrap будут находиться режиме surface, однако бывают исключения и иногда лучше отрабатывает offset. Потому если финальные деформации не устраивают, можно попробовать поменять режим wrapMode
В завершение покраски одежды, рекомендуется использовать deltamush на оригинальной геометрии, однако нужно помнить, что значение smoothing iterations больше 10 ставить нельзя.
6) Теперь осталось создать переключалку для одежды, поскольку работа с прокси геометрией увеличивает производительность сцены. На контроле main_control нужно создать атрибут quality с типом enum и с именами low и high соответственно, и настроить переключение между геометриями из группы geo и proxy_geo_group, которая была создана заранее и имеет в себе все прокси геометрии.
Создание такой переключалки будет полезно не только для одежды, но и для переключения мелких отдельных элементов, например пуговиц, колец и т.д.
Так же зачастую лицевой риг тоже имеет в себе прокси, потому элементы лицевого рига так же настраиваются под переключение атрибута quality.
7) Если у персонажа есть очки, шляпа или что либо еще из предметов, необходимо их засетапить - здесь особых условий нет, стараться делать максимально просто и функционально, соблюдая при этом правила нейминга из регламента в самом начале данного мануала.
Помимо этого, необходимо настроить систему слежения глаз за контролами. Подробный сетап слежения глаза с автовеками и т.п. настраивается уже в лицевом риге, здесь будет достаточен aimConstraint с upVector'ами. Единственное усложнение будет то, что нужно создать атрибут follow на контролах глаз, который будет отвечать за условие - движется ли контрол глаз за головой или нет.
8) Теперь когда персонаж почти полностью готов, необходимо добавить элементы твист системы на ноги и руки для сохранения объема при вращениях, а так же бенд контролы. Все это работает вместе, и с помощью пары модулей в РБ.
Итак, в РБ находим модуль biped_noRotate и сразу жмем RUN. Будут созданы дополнительные джоинты в группе components. Они понадобятся для бендов.
Далее, в РБ находим модуль biped_stretchRig, и так же, сразу жмем RUN. Будут созданы все необходимые контролы и добавятся джоинты для твист системы, и все они будут находиться тоже в группе components.
Все эти элементы будут подгружены референсом - удалять и мерджить эти референсы не нужно
Все твист джоинты необходимо добавить в скин тела и одежды и поправить раскраску скина.
9) Последним этапом настройки риг_дев ассета будет создание контрол_хелперов. В своей сути, это кривые с не нулевыми трансформами, которые в момент запуска темплейта персонажа будут конвертироваться в контролы, забирая шейпы и приводя к 0 все трансформы, а скейл к 1.
Создавать кривые вручную не нужно, все есть в РБ. Ищем модуль helpers_import и жмем RUN. Модуль создаст все необходимые нам кривые и постарается их расставить в нужные места.
- Path указывает путь, откуда будет браться информация (его менять не нужно);
- name - префикс-имя контрол_хелперов (менять тоже не нужно);
- helpers_parent - группа, где будут лежать контрол_хелперы.
Важно понимать, что все персонажи разные, и некоторые контрол_хелперы придется двигать вручную, чтобы они были видимы и легко выделялись. Особенно важные моменты, когда их нужно будет двигать будут приведены ниже.
-
Контрол_хелпер ключицы L(R)_shoulder_helper должен находиться в месте джоинта L(R)_shoulder_joint, это важно, поскольку темплейт берет ориентацию именно с этого контрол_хелпера.
Только этот хелпер нужно двигать за компоненты, все остальные можно спокойно перемещать за трансформы; -
L(R)_arm_elbow_helper и L(R)_leg_ik_polevector_control_helper уже правильно настроены, однако они находятся в местах джоинтов коленей и локтей соответственно, потому нужно выделить это хелперы и отодвинуть их на адекватное расстояние от тела при ориентации object (в axis Orientation: object);
-
L(R)_leg_fk_2_control_helper и L(R)_fk_2_arm_control_helper следует сместить немного ниже контролов бендов, чтобы и тех и других можно было легко выделять;
-
L(R)_leg_outLand_helper и L(R)_leg_inLand_helper следует выставить по краям ботинка, а L(R)_leg_heelLand_helper и L(R)_leg_footLand_helper выставить у пятки и носка ботинка
На данном этапе риг_дев ассет считается законченным. Его следует сохранить и прибегать к нему в случае, если нужно выполнить правки.
Риг_дев ассет нужен только для риггера, в анимацию и куда-либо еще он не идет. Все правки по ригу выполняются здесь - в анимационном ничего править нельзя в связи с работой клинапа.
10) Для того. чтобы у других риггеров был доступ к риг_дев ассету, его необходимо запаблишить. Поскольку ftrack паблишит только анимационный ассет, паблишь риг_дев'а и темплейта происходит через модуль publisher_tool в РБ. В выборе типа type нужно указать dev.
- name - здесь нужно написать имя персонажа;
- type - здесь нужно указывать то, что собираемся паблишить, т.е. это или dev или анимационный ассет anim;
- path_to_server - путь, где все будет сохраняться (менять этот пункт не нужно);
- template - если стоит галка, значит темплейт будет автоматически запаблишен при нажатии кнопки RUN, в противном случае, темплейт нужно будет паблишить индивидуально и нажимать кнопку manually add template;
- path_to_template - здесь нужно указать путь к файлу темплейта
_______________________________________________________________________________
СОЗДАНИЕ ТЕМПЛЕЙТА ПЕРСОНАЖА
_______________________________________________________________________________
Темплейт представляет собой сборку различных модулей для сетапа целого персонажа, т.е. внутри него будут находится элементы контрол рига для любой части тела персонажа. Кроме того внутри так же находятся модули pre_script, cleanup и post_script.
Такой темплейт будет для каждого персонажа свой, т.е. его основа будет идентичной, а вот pre_script, cleanup и post_script могут отличаться от персонажа к персонажу. Таким образом, основной контрол_риг будет один и тот же у всех бипедальных персонажей, тем самым система рига будет являться - унифицированной.
Для того, чтобы создать темплейт, необходимо найти модуль char_temp (версию следует брать последней, на момент написания мануала последняя версия это v003) в РБ. Самое главное не забыть переименовать char_temp в имя персонажа, над которым сейчас ведется работа, т.е. вместо char_temp_v003 будет name_v001.
- pre_script - удаляет и мерджит референсы бендов, что мы создавали ранее в риг_деве. Соответственно, если имена референсов как-либо менялись, следует выделить все референсы в сцене, кликнуть правой кнопкой мыши на окно import_refNodes и выбрать get selected from maya;

- cleanup - это модуль, содержащий в себе подмодули, которые чистят сцену во время сборки контрол рига. Модуль удаляет весь ненужный хэш, а так же скрывает и блокирует все, что может как то сломать риг.
Самым важным элементом клинапа является окно geo_toFix, которое позволяет настраивать геометрию таким образом, чтобы и модель и риг вместе перемещались корректно - это же в свою очередь является одной из необходимостей при работе с USD.
Добавлять в окно geo_toFix нужно лишь ту геометрию, которая находится в группе geo, а так же имеет skinCluster - все остальные геометрии добавлять сюда не нужно. Принцип добавления схож с pre_script'ом;

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

Таким образом, когда мы внесли нужную геометрию в окно geo_toFix в cleanup'е и по необходимости внесли правки в pre_ и post_scripts - следует выделить имя темплейта и нажать кнопку RUN, для сборки самого рига.
Больше ничего править в темплейте не нужно, все уже настроено так, как надо
В темплейт char_temp_v003 был добавлен модуль controlSet_maker. Править его не нужно, он лишь создает необходимые контрол сеты для работы в анимации.
Когда в окне вывода информации РБ загрузка достигнет 100% сборка рига будет завершена и мы получим анимационный ассет.
_______________________________________________________________________________
АНИМАЦИОННЫЙ АССЕТ И ПАБЛИШ
_______________________________________________________________________________
Теперь когда темплейт собран, и получен анимационный ассет, работа может быть завершена, однако необходимо произвести небольшие тесты для того, чтобы проверить работу рига.
Следует сдвинуть группу root, main_control и world_control и убедиться, что все перемещается корректно и не разлетается. Кроме того, необходимо проверить работу атрибута scaleFactor в main_control.
Так же нужно пошевелить ногами, руками и головой персонажа, и скрутить туловище персонажа. Если возникает какая то неточность в деформациях, следует вносить коррективы в риг_дев ассете и вновь собирать темплейт.
После всех проверок можно паблишить анимационный ассет персонажа в ftrack.
-
Вверху, на главной панели в maya жмем yarko;
-
в выпадающем контекстном меню выбираем app;
-
в открывшемся приложении ftrack проверяем правильность пути, т.е. в случае с риггингом, путь должен идти в Rigging;
-
далее необходимо нажать на ярлык опции (3 полоски);
-
в выпадающем контекстном меню выбираем set as current task, тем самым задав ftrack'у задачу, над которой в данный момент ведется работа. Если этого окошка нет, значит ftrack уже определил над какой задачей ведется работа и этот пункт можно пропустить;
-
жмем publish;
-
в открывшемся окне будет выбор, нажать на close или proceed - нажимать следует proceed, поскольку большинство ошибок, которое выдаст валидация это не актуальная информация, которую можно игнорировать.
Рекомендую помимо паблиша в ftrack, так же паблишить анимационный ассет через publisher_tool в РБ, для того чтобы в папке персонажа помимо риг_дев и темплейт файлов, хранился и анимационный файл. Для этого нужно в type выбрать anim и убрать галочку с чекбокса template (работа с publisher_tool описана в пункте 10)
Нет комментариев