# Ригерам

<p class="callout info">Риг - это этап, на котором персонажи и объекты получают возможность начать двигаться и ожить в анимации. От того, насколько хорошо сделана работа на этом этапе зависит то, как быстро и качественно смогут работать с моделью аниматоры</p>

## Требования к ПО

**Windows 10**  
**Autodesk Maya 2023.3**

## Материалы для начала работы

- Ассет: модель персонажа/объекта
- Описание ассета
- ТЗ от ассет менеджера

### Материалы для сдачи

## <span style="color: rgb(230, 126, 35);">**РЕГЛАМЕНТ ПО РИГГИНГУ НА ПРОИЗВОДСТВЕ**</span>

## <span style="color: rgb(230, 126, 35);">**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**</span>


#### <span style="color: rgb(255, 255, 255);">Для оптимизации рабочего процесса и минимизации проблем с риггами был составлен общий регламент по риггингу на производстве для ознакомления с некоторыми правилами при сетапе того или иного персонажа или пропса.</span>

## <span style="color: rgb(230, 126, 35);">**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**</span>

## <span style="color: rgb(230, 126, 35);">**1. РЕКОМЕНДУЕМЫЕ НАСТРОЙКИ** </span>

##### Перед началом работы рекомендую выполнить несколько итераций в настройках чтобы работать максимально комфортно и ловить как можно меньше багов.

##### Нужно включить отображение <span style="color: rgb(230, 126, 35);">**unitConversion Nodes**</span>, ранее эти ноды отображались, однако в последних версиях они скрываются от пользователя, а сам коннект от ноды к ноде приобретает <span style="color: rgb(132, 63, 161);">фиолетовый цвет</span>. Однако это нода, значение которой можно менять, потому лучше будет иметь <span style="text-decoration: underline;">визуальное понимание</span>, где эта нода есть, а где нет

##### На проекте используется <span style="color: rgb(230, 126, 35);">фреймрейт 25 фпс</span>, лучше это выставить сразу

##### <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">**Необходимо отключить теги**</span></span>. Вероятно, это нововведение может быть полезно, но не все новое априори лучше - с наличием тегов, нет возможности работать с точками на которые влияет деформер, с тегами не создаются необходимые <span style="color: rgb(230, 126, 35);">groupId </span>и <span style="color: rgb(230, 126, 35);">groupParts</span>, которые хранят в себе информацию о геометрии. Что касается скриптинга использование тегов тоже вызывают вопросы - потому целесообразно это отключить и <span style="text-decoration: underline;">**<span style="color: rgb(230, 126, 35); text-decoration: underline;">включить наличие твиков</span>**</span>

#####  в настройках анимации следует включить **<span style="color: rgb(230, 126, 35);">Parallel</span>** и <span style="text-decoration: underline;">отключить </span>**<span style="color: rgb(230, 126, 35);">GPU Override</span>** и **<span style="color: rgb(230, 126, 35);">Include controllers in evaluation graph</span>**. Так как не все видеокарты были протестированы на GPU Override, его наличие может снизить производительность рига и некорректно деформировать модель

[![bookStack_info_pic8.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/scaled-1680-/H5DA5gcpEZG1U4dg-bookstack-info-pic8.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-05/H5DA5gcpEZG1U4dg-bookstack-info-pic8.png)

[![bookStack_info_pic9.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/scaled-1680-/b8zLCp2uGQFDSWnY-bookstack-info-pic9.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-05/b8zLCp2uGQFDSWnY-bookstack-info-pic9.png)

[![bookStack_info_pic3.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/scaled-1680-/edRln288pYY9G2fF-bookstack-info-pic3.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-05/edRln288pYY9G2fF-bookstack-info-pic3.png)

[![bookStack_info_pic2.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/scaled-1680-/ESGkQCdHULS7cx1K-bookstack-info-pic2.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-05/ESGkQCdHULS7cx1K-bookstack-info-pic2.png)

## <span style="color: rgb(230, 126, 35);">**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**</span>

## <span style="color: rgb(230, 126, 35);">**2. СПИСОК НЕОБХОДИМЫХ ИНСТРУМЕНТОВ И ПЛАГИНОВ**</span>

- #### <span style="color: rgb(230, 126, 35);"> **<span style="color: rgb(45, 194, 107);">Bifrost 2.5.1.0</span>**</span>
- #### <span style="color: rgb(230, 126, 35);"> **<span style="color: rgb(45, 194, 107);">rigBuilder</span>**</span>

##### <span style="color: rgb(255, 255, 255);">Для работы с риггами применяется <span style="text-decoration: underline; color: rgb(230, 126, 35);">**Bifrost**</span>, версии <span style="color: rgb(230, 126, 35);">**2.5.1.0**</span>. Если же в Maya не установлен данный плагин, риг построенный на бифросте будет запускаться с багами или вовсе не запустится.</span>

##### <span style="color: rgb(255, 255, 255);"><span style="color: #e67e23;"><span style="color: rgb(255, 255, 255);"><span style="text-decoration: underline; color: rgb(230, 126, 35);">**rigBuilder** </span>- специальный <span style="text-decoration: underline;">инструмент - конструктор,</span> позволяющий собирать темплейты для любых скриптов не тратя время на создание интерфейса. Темплейты для сборки риг ассета будут написаны именно в этом инструменте, который в свою очередь хранит всю информацию в собственных файлах с собственным расширением. </span>  
<span style="color: rgb(255, 255, 255);">Скачать данный инструмент можно в свободном доступе на <span style="text-decoration: underline;">гитхабе, однако устанавливать его не нужно, все уже имеется на сервере.</span> Ниже будет вложение, группу modules в архиве следует перенести в <span style="color: rgb(230, 126, 35);">**documents/kit/maya.** </span></span></span></span>

##### <span style="color: rgb(255, 255, 255);"><span style="color: #e67e23;"><span style="color: rgb(255, 255, 255);"><span style="color: rgb(230, 126, 35);"> **Запуск осуществляется с помощью python** </span></span></span></span>**кода**<span style="color: rgb(255, 255, 255);"><span style="color: #e67e23;"><span style="color: rgb(255, 255, 255);"><span style="color: rgb(230, 126, 35);">**.** </span></span></span></span>

<p class="callout info">**import rigBuilder**  
**rigBuilder.mainWindow.show()**</p>

### [ modules (2).zip](https://bookstack.yarko.com/attachments/71)

## <span style="color: rgb(230, 126, 35);">**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**</span>

## <span style="color: rgb(230, 126, 35);"> **3. НЕЙМИНГ В ПРОИЗВОДСТВЕ**</span>

Нейминг, как задача, достаточно простая, однако не менее важная в производстве. Простой и понятный нейминг облегчит работу как риггерам, так и аниматорам. Можно будет проще разобраться как устроена та или иная система и не запутаться, так же писать различные скрипты и инструменты для работы с риггом и анимацией ( к примеру, сделать пресет анимации ходьбы и передавать на однотипных персонажей, так как имена будут повторяться ).

#### Проще говоря, хороший нейминг = простота и экономия времени.

#### <span style="text-decoration: underline;">Исходя из собственного анализа, был подобран наилучший вариант записи:</span>

#### side\_name\_(addDescription)\_(n)\_type

- ##### <span style="color: rgb(230, 126, 35);">side </span>- сторона объекта, соответственно L (лево), R (право), M (центр):
- ##### <span style="color: rgb(230, 126, 35);">name </span>- имя объекта;
- ##### <span style="color: rgb(230, 126, 35);">(addDescription)</span> - дополнительный элемент записи. К примеру иногда требуется указать положение объекта, т.е. <span style="text-decoration: underline;">upper</span> (сверху) или <span style="text-decoration: underline;">lower</span> (снизу). Такое часто применяется в создании лицевого сетапа. Кроме того дополнительное описание применяется в случаях, если необходимы пояснения к различным математическим нодам;
- ##### <span style="color: rgb(230, 126, 35);">(n)</span> - цифра или число итераций объекта;
- ##### <span style="color: rgb(230, 126, 35);">type </span>- тип объекта, здесь имеется ввиду тип ноды или логика трансформы, т.е. под типом понимается, как пример <span style="text-decoration: underline;">multiplyDivide</span>, а под логикой <span style="text-decoration: underline;">offset </span>или <span style="text-decoration: underline;">null </span>(когда нужно выделить оффсет группу).

#### <span style="text-decoration: underline;">Тип объекта нельзя сокращать</span>, это обязательное правило, так как никто из нас к сожалению не умеет читать мысли другого, потому будет крайне трудно понять, что имел ввиду человек под своими сокращениями.

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

##### <span style="text-decoration: underline;">В качестве примеров снизу будут вариации подобного нейминга:</span>

1. <p class="callout info">L\_eye\_upper\_1\_control;</p>
2. <p class="callout info">R\_arm\_3\_joint;</p>
3. <p class="callout info">M\_jaw\_2\_plusMinusAverage.</p>
4. <p class="callout info">L\_brows\_U\_delta\_1\_floatConstant;</p>
5. <p class="callout info">M\_hair\_correctiveShape\_multDoubleLinear.</p>

## <span style="color: rgb(230, 126, 35);">**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**</span>

## <span style="color: rgb(230, 126, 35);">**4. ОСОБЕННОСТИ ИЕРАРХИИ ОБЪЕКТОВ**</span>

Поскольку производство заточено под USD, есть небольшой ряд правил для создания иерархии объектов в сцене.

Группа с геометрией ( от отдела моделлеров ) и группа с риггом персонажа ( от отдела сетапа ) должны лежать <span style="text-decoration: underline;">отдельно друг от друга, и в то же время находится в общем группе-родителе</span>. Таким образом, при определенных настройках сетапа, будет возможность перемещать группу с моделью и риггом не затрагивая контролы, как это необходимо для USD.

Что касается группы с геометрией, внутри неё должны храниться <span style="text-decoration: underline;">**ТОЛЬКО** </span>необходимые меши от <span style="text-decoration: underline;">**отдела моделлеров**</span>.

#### Совершать какие-либо манипуляции внутри группы **geo** <span style="text-decoration: underline;">нельзя</span>, ничего лишнего в этой группе помимо геометрии лежать не должно.

##### <span style="text-decoration: underline;">Иерархия групп внутри группы с риггом должна иметь следующий вид:</span>

<table border="1" class="align-center" id="bkmrk-%C2%A0-scale---%D0%B3%D1%80%D1%83%D0%BF%D0%BF%D0%B0-%D0%B4%D0%BB%D1%8F" style="border-collapse: collapse; width: 100%; height: 352.578px; border-width: 1px; border-style: hidden;"><colgroup><col style="width: 50.6173%;"></col><col style="width: 49.3827%;"></col></colgroup><tbody><tr style="height: 323.281px;"><td style="border-width: 1px; height: 323.281px;">[![bookStack_info_pic.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/zvcXfzeTCOi2Bq81-bookstack-info-pic.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-01/g0U6DDHFFqpkq6uV-hierarchy-pattern.png)

</td><td class="align-left" style="border-width: 1px; height: 323.281px;">- ##### <span style="color: rgb(230, 126, 35);">scale </span>- группа для элементов сцены, которые должны перемещаться, вращаться и скалироваться от <span style="text-decoration: underline;">main\_control</span>. Внутри группы находятся группы <span style="color: rgb(45, 194, 107);">controls </span>(контролы рига), <span style="color: rgb(45, 194, 107);">skeleton </span>(сам скелет) и <span style="color: rgb(45, 194, 107);">components </span>(группа, для хранения элементов сетапа, которые должны скалироваться);
- ##### <span style="color: rgb(230, 126, 35);">non\_scale </span>- группа для элементов сцены, которые не должны скалироваться и зачастую все объекты внутри скрыты. Группа <span style="color: rgb(45, 194, 107);">geometry </span>хранит в себе всю ново созданную геометрию в процессе сетапа, это могут быть прокси геометрии или локальные меши. <span style="color: rgb(45, 194, 107);">others </span>содержит в себе составляющие сетапа, которые не должны перемещаться и скалироваться, а группа <span style="color: rgb(45, 194, 107);">extra </span>хранит в себе элементы, которые нельзя выделить, но их видимость в сцене необходима, к примеру, кривые к контролам коленей и локтей обычно складируются здесь;
- ##### <span style="color: rgb(230, 126, 35);">world\_control\_null</span> - оффсет группа побочного <span style="text-decoration: underline;">world\_control</span>, который является дополнительным контролом для <span style="text-decoration: underline;">main\_control </span>и служит для доп. перемещения в сцене;
- ##### <span style="color: rgb(230, 126, 35);">main\_control\_null</span> - оффсет группа основного <span style="text-decoration: underline;">main\_control</span>, который отвечает за все трансформы.

</td></tr></tbody></table>

#### Группы <span style="text-decoration: underline; color: rgb(230, 126, 35);">components</span>, <span style="text-decoration: underline; color: rgb(230, 126, 35);">skeleton</span>, <span style="text-decoration: underline; color: rgb(230, 126, 35);">others</span>, <span style="text-decoration: underline; color: rgb(230, 126, 35);">geometry </span>- в анимационном ассете скрыты и имеют референс формат, т.е. выделить их аниматор не сможет и тем самым сломать риг будет проблематично. 

##### Кроме того, для комфортной работы, <span style="color: rgb(230, 126, 35);">main\_control </span>должен иметь в себе <span style="text-decoration: underline;">кастомный атрибут</span> объединяющий все атрибуты скалирования (<span style="color: rgb(45, 194, 107);">scaleX</span>, <span style="color: rgb(45, 194, 107);">scaleY</span>, <span style="color: rgb(45, 194, 107);">scaleZ</span>). Сам <span style="color: rgb(230, 126, 35);">main\_control </span>должен быть связан с <span style="color: rgb(230, 126, 35);">группой</span> <span style="color: rgb(230, 126, 35);">scale</span>, а именно иметь <span style="color: rgb(241, 196, 15);">parentConstraint </span>и **<span style="text-decoration: underline;">прямой коннект</span>** по скейлу;  
<span style="color: rgb(230, 126, 35);">world\_control </span>должен иметь залоченые и скрытые атрибуты скейла - <span style="text-decoration: underline;">он нужен только для вращения и перемещения в сцене</span>.


# МАНУАЛ: ЛИЦЕВОЙ РИГ ПЕРСОНАЖА (WIP)

<div id="bkmrk--11">  
</div>## **МАНУАЛ: ЛИЦЕВОЙ РИГ ПЕРСОНАЖА** 

##### **\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**   
  
**Здесь представлен подробный гайд по настройке лицевого рига персонажа. Настраивать лицевой сетап персонажа рекомендуется по порядку в соответствии с пунктами ниже. Как результат, на выходе будет получен лицевой риг, так же будет произведено подключения этого лица к существующему боди\_ригу в rig\_dev ассете и рассказаны особенности сборки персонажа для получения финального анимационного ассета.** 

##### **\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

## **1. ИМПОРТ ЛИЦЕВОГО ПРЕСЕТА**

**Прежде чем начать работу необходимо открыть последний файл из моделлинга, и произвести небольшой клинап. Для этого в окне ригБилдера (РБ) необходимо открыть модуль cleanup, там выделить подмодуль cleaning\_hash и кликнуть RUN. Далее, удаляем все, кроме:**

- **группа for\_rig**
- **группа blendshapes**
- **геометрические меши в группе geo, которые относятся к лицу (глаза, брови, ресницы, челюсти, язык, волосы, очки и т.п.)**

<p class="callout info">**[![Screenshot_13.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/QqBZJXHDWxrP1vdY-screenshot-13.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/QqBZJXHDWxrP1vdY-screenshot-13.png)** </p>

<p class="callout success align-center">**Если нужно освежить память, как вызвать необходимый модуль в РБ, то можно обратить внимание на статью ниже, на графу: создание риг\_дев ассета, пункт 2.  
  
[https://bookstack.yarko.com/books/rigging-AtN/page/manual-rigging-biped-personaza](https://bookstack.yarko.com/books/rigging-AtN/page/manual-rigging-biped-personaza)** </p>

 **Теперь когда сцена максимально очищена от разного мусора и лишних геометрий, нужно импортировать пресет лицевого рига, где уже будут созданы все необходимые контролы, а так же созданы все нужные связи между ними. Импортировать этот пресет можно через РБ, открыв модуль import\_face\_temp.**

<p class="callout info">**[![Screenshot_2.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/jfoRpckrbIRUJ5hH-screenshot-2.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/jfoRpckrbIRUJ5hH-screenshot-2.png)** </p>

**Каждое лицо уникально, потому недостаточно просто импортнуть пресет, его нужно подогнать - для этого первая кнопка import helpers модуля import\_face\_temp импортирует в сцену хелперы. С помощью этих хелперов можно расставить ориентиры, где будут созданы контролы.**

<p class="callout info">[![face_helpers.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/oTTNoc0FFoVMPp4X-face-helpers.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/oTTNoc0FFoVMPp4X-face-helpers.png)</p>

<p class="callout success">**Чтобы избежать ошибок при позинге хелперов, полезным будет открыть 1 из существующих лицевых ригов (на момент написания статьи, готовы лица на персонажей doc и vinilion) и посмотреть в каких местах расставлены контролы.**</p>

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

<p class="callout info">**[![face_helpers_pose.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/8RZ9mXb3WeQ9HjjA-face-helpers-pose.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/8RZ9mXb3WeQ9HjjA-face-helpers-pose.png)**</p>

**Следующим этапом будет конвертация хелперов в контролы, для этого нужно просто нажать вторую кнопку face adapt в модуле import\_face\_temp. После этого, работа над подгонкой лицевого сетапа будет почти завершена. Оставшиеся 10-20 процентов будут подгоняться за счет работы с тюнерами, которые будут находиться в группах локальных ригов внутри face\_others.**

<p class="callout info">***Как работать с тюнерами будет описано ниже, в отдельных блоках посвященных локальным ригам.***</p>

<p class="callout info align-center">**[![Screenshot_1.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/NkMgxbvBAE4efr95-screenshot-1.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/NkMgxbvBAE4efr95-screenshot-1.png)  
Подогнанный лицевой сетап**</p>

<p class="callout warning align-center">**Шейпы контролов, к сожалению, придется настраивать вручную, так как хелперы конвертируют только оффсет трансформы**</p>

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

**Начинать работу будем с локального рига рта - поскольку бленды на уголки рта моделлеры делают на основе лицевого рига. То есть, когда риг рта будет закончен, эта версия рига отправляется в отдел моделлинга, где создают дополнительные корректы под заданные лимиты уголков рта. В это время работа над лицевым риггом не прекращается, а просто выполняются другие элементы лицевого рига *(риг век, бровей, доработка рига рта и т.п.)*. После того, как бленды будут закончены и одобрены - их нужно подключить уже в лицевом сетапе.**

**Тем самым, все бленды будут готовы. Ниже будут ссылки на статьи по блендшейпам, для того, чтобы можно было самостоятельно проверить все ли бленды присутствуют на геометрии.**

<p class="callout success">**[https://bookstack.yarko.com/books/modelirovanie/page/blendseipy-licevye-dlia-glavnyx-personazei](https://bookstack.yarko.com/books/modelirovanie/page/blendseipy-licevye-dlia-glavnyx-personazei)  
[https://bookstack.yarko.com/books/modelirovanie/page/blendseipy-licevye-dlia-vtorostepennyx-personazei](https://bookstack.yarko.com/books/modelirovanie/page/blendseipy-licevye-dlia-vtorostepennyx-personazei)**</p>

##### **\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

## **2. РИГ РТА**

**Первое с чего начинаем работу, это с локального рига рта. Выполнять лицевой сетап нужно именно с этого потому, что бленды, которые отдает отдел моделлирования не полные, то есть, бленды, корректирующие уголок рта они выполняют только основываясь на уже лицевом сетапе. Таким образом, нет необходимости "целиться" в положения блендов, а так же не тормозит производственный процесс, так как лицевой риг в работу можно брать не имея бленды.**

<p class="callout info">**[![Screenshot_1.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/BeIjd6OXdJiCmaT0-screenshot-1.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/BeIjd6OXdJiCmaT0-screenshot-1.png)**</p>

**На старте, нужно сделать 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 нужно удалять.**

<p class="callout info">**[![Screenshot_2.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/sZSBHoQ1TRHtX94B-screenshot-2.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/sZSBHoQ1TRHtX94B-screenshot-2.png)  
  
\_tuners\_group - группы с тюнерами;  
\_constraint\_tuners\_others - группа с констрейнами, после позинга должна быть удалена  
--------------------------------------------------------------------------------------------------------------------------------------  
Внутри 3 тюнера:  
  
1) jaw\_main\_tuner обычно уже находится в корректном месте - его можно не двигать, однако должен он располагаться в середине между верхней и нижней губой;  
2) jaw\_pivot\_tuner нужно ставить в точку открытия челюсти;  
3) tongue\_pivot\_tuner нужно тоже ставить в точку открытия челюсти.  
  
[![Screenshot_3.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/rdwJgo7hQBZvsAIs-screenshot-3.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/rdwJgo7hQBZvsAIs-screenshot-3.png)** </p>

##### **В силу стилизации, важное замечание:  
jaw\_main\_tuner не всегда нужно ставить в анатомически верное положение**

**После того, как все тюнеры были расставлены и группа с констрейнами были удалены, необходимо создать пару кривых на верхнюю губу - M\_jaw\_up\_curve, и на нижнюю губу - M\_jaw\_low\_curve. Сделать подобное можно с помощью модуля mouthRig\_temp в РБ.**

<p class="callout info align-left">**[![Screenshot_4.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/0AW1c7oEXylDPStL-screenshot-4.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/0AW1c7oEXylDPStL-screenshot-4.png)  
  
Принцип работы следующий:  
1) в окне name пишем название кривой, то есть если мы настраиваем верхнюю губу, то M\_jaw\_up, если нижнюю, то M\_jaw\_low;  
2) далее на персонаже выделяем соответствующий эйджЛуп от левого уголка рта, до правого. Важно понимать, что эйджлупы нужно брать на рту, которые пересекаются;  
3) далее жмем кнопку RUN.  
  
В конечном итоге будут созданы все необходимые кривые и размещены в правильных местах в иерархии групп.  
  
[![Screenshot_5.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/RKAbvzGGuxXKsyAd-screenshot-5.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/RKAbvzGGuxXKsyAd-screenshot-5.png)  
  
[![Screenshot_6.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/nr6s0ogPsWeAh7a0-screenshot-6.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/nr6s0ogPsWeAh7a0-screenshot-6.png)** </p>

<p class="callout warning">**Важно обращать внимание на нейминг, на момент написания статьи все локаторы имеют одинаковый префикс - потому его нужно править вручную, руководствуясь тем, что левые локаторы и кости внутри имеют префикс L, правые R, а центральный - оставить M.**</p>

<p class="callout warning">**Так же нужно уделять внимание на начало кривых, т.е. направление кривых должны быть одинаковые  
  
[![Screenshot_7.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/ESrvs1Y7eieFT3gb-screenshot-7.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/ESrvs1Y7eieFT3gb-screenshot-7.png)** </p>

**Когда кривые настроили, нужно обратить внимание на трансформу face\_head\_transform. В атрибутах у этой трансформы есть много каналов, каждый из которых уже связан с элементами лицевого рига. Все эти каналы разбиты на группы для удобства. Благодаря этим атрибутам можно не копаться в риге, а сразу настраивать все, что необходимо.**

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

<p class="callout info align-center">**[![Безымянный.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/XTUhFSvcYuej8wWl-bezymiannyi.png)  
  ](https://bookstack.yarko.com/uploads/images/gallery/2024-09/XTUhFSvcYuej8wWl-bezymiannyi.png)  
Здесь представлены 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.**</p>

**Добиться этого могут помочь атрибуты на face\_head\_transform. Регулировать их нужно когда рот уже открыт на максимум (вкл. limits на контроле M\_jaw\_control и опускаем рот максимально по оси Y).**

<p class="callout info">**[![Screenshot_8.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/VFi5fFw5Rf8jkzvP-screenshot-8.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/VFi5fFw5Rf8jkzvP-screenshot-8.png)  
  
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 - этого мануала). Однако его можно регулировать и потом, если при работе появляется необходимость поменять этот параметр.** </p>

<p class="callout info align-center">**Как результат (см. картинки ниже), на выходе мы получим максимально приближенный к блендшейпу открытого рта результат основанный только на скиннинге, где выделенные кривые и наш blends\_mouth\_geo максимально приближены к блендшейпу, что выделен черной сеткой.**</p>

<p class="callout info">**[![Screenshot_9.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/3Gw6LIidWhjcYCUF-screenshot-9.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/3Gw6LIidWhjcYCUF-screenshot-9.png)[![Screenshot_10.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/YHkos4uVnWd8zIyV-screenshot-10.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/YHkos4uVnWd8zIyV-screenshot-10.png)**</p>

##### **При покраске blends\_mouth\_geo важное замечание, уделять больше вниманию уголку рта, поскольку задача покрасить рот настолько хорошо, насколько это возможно ДАЖЕ С ЭКСТРЕМАЛЬНЫМИ положениями рта (для этого нужно на L(R)\_corner\_control выключить атрибут limits.**

**Добиться нужного результата за счет использования только скинКластера не получится, потому нужны корректирующие бленды. Здесь работа делится на 2 части - 1 часть выполняется отделом риггинга, 2 - отделом моделлинга.**

**Количество блендов на уголки рта лимитировано и они выполняются как на кривых, так и на геометрии, а именно:**

- <p class="callout success">**corner\_U**</p>
- <p class="callout success">**corner\_D**</p>
- <p class="callout success">**corner\_I**</p>
- <p class="callout success">**corner\_O**</p>
- <p class="callout success">**corner\_UO**</p>
- <p class="callout success">**corner\_OD**</p>
- <p class="callout success">**corner\_ID**</p>
- <p class="callout success">**corner\_IU**</p>
- <p class="callout success">**jaw\_open\_\_corner\_U**</p>
- <p class="callout success">**jaw\_open\_\_corner\_D**</p>
- <p class="callout success">**jaw\_open\_\_corner\_I**</p>
- <p class="callout success">**jaw\_open\_\_corner\_O**</p>
- <p class="callout success">**jaw\_open\_\_corner\_UO**</p>
- <p class="callout success">**jaw\_open\_\_corner\_OD**</p>
- <p class="callout success">**jaw\_open\_\_corner\_ID**</p>
- <p class="callout success">**jaw\_open\_corner\_IU**</p>

**Где, U - означает вверх, D - вниз, I - в центр, O - наружу. Префикс jaw\_open означает, что рот персонажа открыт в положение открытого рта, которое задается блендшейпом открытого рта.  
  
Так же применяется как на кривых, так и на геометрии корректирующий шейп jaw\_open, который был взят для ориентира когда настраивали скин кривых.**  
**Бленды, которые так же будут присутствовать в лицевом сетапе рта, но применяются только на геометрии:**

- <p class="callout success">**jaw\_U**</p>
- <p class="callout success">**roll\_up\_in**</p>
- <p class="callout success">**roll\_up\_out**</p>
- <p class="callout success">**roll\_bot\_in**</p>
- <p class="callout success">**roll\_bot\_out**</p>
- <p class="callout success">**mouth\_rotate\_L**</p>
- <p class="callout success">**mouth\_rotate\_U**</p>
- <p class="callout success">**mouth\_rotate\_D** </p>
- <p class="callout success">**mouth\_rotate\_R**</p>

**Исходя из описания блендов выше, необходимо создать блендшейпы на кривых M\_jaw\_low\_curve - jaw\_low\_psd\_blendShape и M\_jaw\_up\_curve - jaw\_up\_psd\_blendShape, и создать на них соответствующие таргеты уголков рта. На геометрии тоже нужен блендшейп - mouth\_blendShape, на который следует продублировать таргеты, что есть на кривых, а так же добавить таргеты, которые должны быть, но только на геометрии (см. выше).**

#####  **Корректы на кривых следует выполнять таким образом, чтобы кривые по ходу движения уголка рта двигались по черепу персонажа - это придаст более реалистичный вид деформациям**

 **Поскольку большую часть корректов, что отдают моделлеры, на начало работы с лицевым ригом уже готовы - их следует подключить к таргетам mouth\_blendShape.**

<p class="callout warning">**Бленды на roll\_up и roll\_bot отдаются нераздельно, т.е. на нижнюю и верхние части нужно делить уже в риге. Выполняется это с помощью покраски блендшейпа или любым другим известным способом.**</p>

<p class="callout warning">**Бленд mouth\_rotate\_R получается путем миррора mouth\_rotate\_L**</p>

**Итоговым результатом будет открытие рта и максимально хорошая покраска скина. Далее этот файл передается в отдел моделлинга или руководителю риг отдела, чтобы тот передал это в отдел моделлинга - для дополнительных корректов на уголках рта. Когда бленды будут готовы, их следует подключить/заменить на соответствующие таргеты в блендшейпе mouth\_blendShape.**

##### **[![Screenshot_11.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/Kr4eijSUNIqPvRl1-screenshot-11.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/Kr4eijSUNIqPvRl1-screenshot-11.png)  
  
Результат с блендами уголков рта и открытой челюстью**

**Далее, нужно создать блендшейп с геометрии blends\_mouth\_geo на геометрию lips\_minor\_geo, тем самым передадим деформации открытого рта на другой меш лица. Создадим скинКластер для настройки минорных изменений рига рта.  
Сами миноры нужны для создания дополнительных форм лица, когда обычные контролы не позволяют передать ту или иную мимику.**

<p class="callout info">**[![Screenshot_12.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/nUwcuVOUTO67FO9a-screenshot-12.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/nUwcuVOUTO67FO9a-screenshot-12.png)[  ](https://bookstack.yarko.com/uploads/images/gallery/2024-09/XTUhFSvcYuej8wWl-bezymiannyi.png)  
Здесь представлен скинКластер на lips\_minor\_geo, а в окне outJoints представлены кости, на которые нужно выполнять этот скинКластер.  
  
А именно:  
lips\_minor\_skinCluster - это скин на геометрию lips\_minor\_geo**</p>

<p class="callout warning align-center">**Красить миноры рекомендую уже в позе, поскольку мимика персонажа должна позволять расширять рот настолько широко, насколько это возможно.**   
[![Screenshot_13.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/4pIKW9q1UDXR4ojy-screenshot-13.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/4pIKW9q1UDXR4ojy-screenshot-13.png)  
</p>

**Чтобы миноры следовали за геометрией, нужно настроить uvPin на null группы миноров. uvPin следует цеплять к mouth\_geo *(эта геометрия будет изменяться, потому миноры будут спокойно следовать за геометрией без возникновения циклов)*. Однако выходящую матрицу из uvPin я рекомендую декомпозировать через ноду decomposeMatrix и передавать только каналы транслейта, поскольку ротейт в данном случае не нужен.**

<p class="callout info">**[![Screenshot_14.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/QK2eggG8hRPx6KXy-screenshot-14.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/QK2eggG8hRPx6KXy-screenshot-14.png)**</p>

**Однако при движении миноров теперь, будут возникать двойные трансформации, для нивелирования такой проблемы, достаточно создать multiplyDivide ноду, в input1 которой будут входить атрибуты транслейта минора, а в input2 находиться минусовые значения (-1, -1, -1). Выход multiplyDivide ноды следует подключить на группу трансформу между минором и его null группой.**

<p class="callout info align-center">**[![Screenshot_15.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/8DmFNXFBFMyWY6iO-screenshot-15.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/8DmFNXFBFMyWY6iO-screenshot-15.png)  
  
1) L\_lips\_low\_3\_minor\_control\_null - оффсет группа минора  
2) L\_lips\_low\_3\_minor\_control\_transform - трансформа минора  
3) L\_lips\_lower\_3\_minor\_control - сам минор**</p>

<p class="callout info">**[![Screenshot_16.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/FbycCB6MKiDwg0Ut-screenshot-16.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/FbycCB6MKiDwg0Ut-screenshot-16.png)**</p>

**Теперь назначим блендшейп от lips\_minor\_geo к геометрии mouth\_geo. Это будет финальная геометрия рта, соответственно назвать этот блендшейп нужно как minors\_final\_blendShape. Создадим последние управляющие элементы рига к рту с помощью скинКластера к mouth\_geo и назовем его как mouth\_final\_skinCluster.**

<p class="callout info">**[![Screenshot_17.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/TnHawBQiPS8RXl9h-screenshot-17.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/TnHawBQiPS8RXl9h-screenshot-17.png)[  ](https://bookstack.yarko.com/uploads/images/gallery/2024-09/XTUhFSvcYuej8wWl-bezymiannyi.png)  
Здесь представлен скинКластер на mouth\_geo, а в окне outJoints представлены кости, на которые нужно выполнять этот скинКластер.  
  
А именно:  
mouth\_final\_skinCluster - это скин на геометрию mouth\_geo**</p>

**Требования к покраске будут таким же, как и к минорам. Нужно стараться добиваться таких деформаций, чтобы регулируя контролы, можно было добиться максимальной экспрессии.**

<p class="callout info">[![Screenshot_18.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/eMMaUWhI9NAY6XlD-screenshot-18.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/eMMaUWhI9NAY6XlD-screenshot-18.png)</p>

<p class="callout success">**Иногда полезно будет использовать деформер deltaMush, который позволит выровнять местами сетку. Однако следует помнить, что больше 10 smoothing iteration ставить нельзя, поскольку на больших значениях deltaMush с удовольствием скушает не мало fps**</p>

#####  **На данном моменте лицевой сетап рта считается законченным и геометрию mouth\_geo можно подключать через блендшейп к геометрии head\_final\_geo и переходить к другим локальным ригам.**

**[![Screenshot_19.png](https://bookstack.yarko.com/uploads/images/gallery/2024-09/scaled-1680-/kMgWkIW7pYSh6sck-screenshot-19.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-09/kMgWkIW7pYSh6sck-screenshot-19.png)**

##### **\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

## **3. РИГ ВЕК И ГЛАЗ**

**Для создания локального рига век нужно будет использовать 3 геометрии: eyes\_geo - геометрия, на которой будут деформации внутренней границы века; eyes\_outer\_geo - геометрия, на которой будут деформации внешней границы века; eyes\_final\_geo - финальная геометрия, на которой будет финальный скейл век и подключенные eyes\_outer\_geo и eyes\_geo, через блендшейп.**

<p class="callout info">**[![maya_w5bysu5bVS.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/I2qkljY76kPdxjUc-maya-w5bysu5bvs.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/I2qkljY76kPdxjUc-maya-w5bysu5bvs.png)**</p>

**Геометрию eyes\_geo обычным дубликатом не получить, потому начинать работу нужно с геометрией блендшейпа закрытого глаза closed\_eyes.**

**Выделим геометрию closed\_eyes и подвинем тюнеры век в группе lids\_tuners\_group/internal\_tuners\_group по границе линии смыкания век. Тюнеры подгонят необходимые элементы для риггинга век в нужные места, после их подгонки нужно удалить группу lids\_constraint\_tuners\_others.**

<p class="callout info">[![maya_nrS37eAE9z.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/Rv0oSdvMB7iqwS8q-maya-nrs37eae9z.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/Rv0oSdvMB7iqwS8q-maya-nrs37eae9z.png)</p>

<p class="callout success">**Тюнеры век не стоит ставить куда попало, нужно руководствоваться простой логикой:**  
  
**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 соответственно.**  
  
**Для наиболее простого понимания, картинка ниже визуально описывает правила расстановки тюнеров век.  
  
[![maya_oytp0Ng5ro.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/JWMLlll3FvM2ZxwT-maya-oytp0ng5ro.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/JWMLlll3FvM2ZxwT-maya-oytp0ng5ro.png)** </p>

**Следующей задачей будет создание геометрической плашки L(R)\_eyelids\_plane\_geo, на которой будут находиться косточки, от которых в свою очередь будет идти скин. Сами косточки цепляются через uvPin - такой подход не снизит производительность и сильно облегчит скин. Как альтернатива плашке может являться кривая, однако красить её не совсем комфортно.**

**Получить плашку можно выделив полигоны по линии смыкания век, и удалить все не нужное, кроме этой плашки.**

<p class="callout success align-center">**Небольшой помощью при работе будет если последний полигон при выделении фейсЛупа убрать из этого выделения, тем самым будет четкое понимание где находится край века.  
  
[![maya_B9vTMwBoJb.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/YhzxJbDcqeVfrlK2-maya-b9vtmwbojb.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/YhzxJbDcqeVfrlK2-maya-b9vtmwbojb.png)** </p>

**После получения плашки, нужно прискинить её к следующим косточкам, которые находятся в группах face\_others/eyelids\_others/lids\_others.**

<p class="callout info">**[![maya_ogvBgLPg9e.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/ZTW9Fj2QAAGXeDpk-maya-ogvbglpg9e.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/ZTW9Fj2QAAGXeDpk-maya-ogvbglpg9e.png)   
  
Эти косточки можно найти в группе, что описаны выше. Следует понимать, что эти косточки нужны лишь для левой плашки, для правой будут ровно те же самые косточки, но уже с префиксом R, вместо L.**</p>

**Прежде чем перейдем к настройке открытия века, нужно выполнить еще 1 действие - создать косточки, от которых будет идти базовый скин на открытие/закрытие века. Количество этих джоинтов будет эквивалентно количеству лупов на плашке, а их создание происходит вручную. Сами косточки нужно расставить по крайним положениям эйджЛупов.**

<p class="callout info">**[![maya_YT08H37lO9.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/qwfZ9Vy9WbUuooGO-maya-yt08h37lo9.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/qwfZ9Vy9WbUuooGO-maya-yt08h37lo9.png)**</p>

**Сами косточки нужно приврапить к плашке. Выполняется подобное через uvPin, поскольку это наиболее быстрый способ с точки зрения производительности ригга. Однако, стандартный uvPin передает все трансформы на джоинты, что создает ненужные ротейты на костях. В нашем случае ничего, кроме транслейтов не нужно, потому нужно декомпозировать исходящую матрицу из uvPin ноды в транслейты и передать на джоинты. Вручную такое выполняется с помощью decomposeNode, однако для экономии времени можно воспользоваться модулем uvPin\_2 в RB.**

<p class="callout info">**[![maya_RMLU5X7RbR.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/xgkzUORZnKpvy7ip-maya-rmlu5x7rbr.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/xgkzUORZnKpvy7ip-maya-rmlu5x7rbr.png)  
  
1) geo - это имя плашки;  
2) new\_name - это имя, которое будет у uvPin ноды;  
3) joints - лист джоинтов.  
  
Принцип работы достаточно тривиален, сначала нужно вставить в графу geo плашку или геометрию, на которой будет создан uvPin. В графу new\_name нужно написать имя будущей uvPin ноды. В окно joints нужно вставить джоинты, которые будут приврапены к geo, сделать это можно выделив все нужные косточки в сцене и нажав правой кнопкой мыши по окну joints выбрать get selected from maya.   
Теперь жмем RUN и все приврапится как нужно.**</p>

##### **В процессе открывания глаза, вероятен такой исход событий, когда джоинты или прыгают в нуль координат или врапятся к другому вертексу на плашке. В таком случае, я рекомендую приоткрыть глаз, удалить uvPin ноду и вручную перетащить в нужные места "улетевшие" джоинты. После снова применить модуль uvPin\_2 в RB.**

**Когда все подготовительные элементы сделаны, можно начинать настройку открытия глаз. Первым делом корректно раскрасим скин на плашке L(R)\_eyelids\_plane\_geo, результатом которого будет являться - корректные деформации при перемещении миноров века и вращении основных контролов век L\_lids\_upper\_control и L\_lids\_lower\_control.**

##### **[![maya_wQOqroo8Ku.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/cuJY36DeX6aZCZNz-maya-wqoqroo8ku.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/cuJY36DeX6aZCZNz-maya-wqoqroo8ku.png)  
[![maya_vEP4QTv8as.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/3dCewMGOR8vgYTG2-maya-vep4qtv8as.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/3dCewMGOR8vgYTG2-maya-vep4qtv8as.png)  
  
На первой картинке ротейт основного контрола века L\_lids\_upper\_control, в то время как на второй были смещены 3 минора внутренней границы века.  
  
Исходя из картинок можно понять, что верхнее и нижние полигоны на плашке века имеют одинаковые веса - тем самым при смыкании геометрического глаза не будут возникать дырки и заломы. Кроме того, особое внимание при покраске следует обратить на плавность изгибов века.**

**Теперь можно открыть веко с помощью атрибутов на face\_head\_transform. Поскольку мы открываем глаза из положения закрытого века - результатом будет максимальное приближение к открытому глазу, то есть нужно настроить атрибуты таким образом, чтобы плашка L(R)\_eyelids\_plane\_geo при открытии века была приближена к открытому веку настолько, насколько это возможно. Управлять открытием глаза можно с помощью атрибута blink на контроле L(R)\_eye\_lids\_control.**

<p class="callout info align-left">**[![maya_UYhbfEGmPm.png](https://bookstack.yarko.com/uploads/images/gallery/2024-10/scaled-1680-/YcJ9s5TweG7gFeML-maya-uyhbfegmpm.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-10/YcJ9s5TweG7gFeML-maya-uyhbfegmpm.png)  
Процесс настройки выполняется в соответствии с порядком атрибутов начиная с 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 нижнего века.**</p>

**При изменении атрибутов upper и lower remap можно регулировать угол на который будут опускаться и подниматься веки - таким образом, изменение этих атрибутов подгонит верхнюю и нижнюю границы плашки под открытый глаз на геометрии.**

<p class="callout info">**- картинка где плашка при blink 1 и открытый глаз**</p>

<p class="callout success">**Для наиболее точной работы рига век, значение атрибутов upper remap и lower remap стоит сохранять равными друг другу. Конечно, система позволяет использовать разные значение этих атрибутов, но работать с настройкой век будет проще и комфортнее, имея равные значения в upper и lower remap.**</p>

## **<span style="color: rgb(230, 126, 35);">МАНУАЛ: РИГГИНГ БИПЕД ПЕРСОНАЖА  
  
</span>**

##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**  
  
**Здесь представлен подробный гайд по настройке бипедального персонажа. Настраивать сетап персонажа рекомендуется по порядку в соответствии с пунктами ниже. Как результат, на выходе будут получены 3 файла - <span style="color: rgb(230, 126, 35);">темплейт персонажа</span>, <span style="color: rgb(230, 126, 35);">риг\_дев ассет</span> и <span style="color: rgb(230, 126, 35);">анимационный ассет</span> для аниматоров.** 

#####   
Прежде чем приступить к работе, нужно ознакомиться с регламентом по риггингу на производстве, потому прежде чем приступить непосредственно к сетапу - следует почитать статью ниже по ссылке на <span style="color: rgb(230, 126, 35);">bookstack</span>:  
  
**<span style="color: rgb(45, 194, 107);">[Регламент по риггингу на производстве](https://bookstack.yarko.com/books/rigging-AtN/page/reglament-po-riggingu-na-proizvodstve)</span>**  


#####   


##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_</span>**

## **<span style="color: rgb(230, 126, 35);">СОЗДАНИЕ РИГ\_ДЕВ АССЕТА</span>**

**1) Первым делом необходимо открыть сам <span style="color: rgb(230, 126, 35);">моделлерский ассет</span> для работы. Для этого в приложении <span style="text-decoration: underline;">ftrack </span>нужно в окне задач (<span style="color: rgb(230, 126, 35);">My Tasks</span>) открыть свою задачу, перейти в <span style="color: rgb(230, 126, 35);">моделинг</span> и открыть ассет (<span style="color: rgb(230, 126, 35);">open</span>).**

<p class="callout info">[![point1.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/EtbKTN0SaCHvA4N3-point1.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/EtbKTN0SaCHvA4N3-point1.png)</p>

<p class="callout info">[![point2.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/5jM6GHsjFgBiJPqN-point2.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/5jM6GHsjFgBiJPqN-point2.png)</p>

<p class="callout warning">**Делаем именно в такой последовательности, потому что изначально ссылка на задачу будет на риг, а поскольку рига еще нет - <span style="text-decoration: underline;">открываться будет пустая сцена</span>**</p>

 **2) Перед началом работы, следует создать базовую иерархию групп и базовые контролы. Для экономии времени был написан модуль <span style="color: rgb(230, 126, 35);">startup\_project </span>внутри <span style="color: rgb(230, 126, 35);">RigBuilder'а (РБ)</span>. Этот модуль создает все необходимое, а так же чистит сцену от различных ненужных метаданных, которые могут прийти от отдела моделлинга.**  
**В окне <span style="color: rgb(230, 126, 35);">РБ</span> жмем <span style="color: rgb(45, 194, 107);">TAB</span>, в появившемся окошке пишем <span style="color: rgb(230, 126, 35);">startup\_project </span>и <span style="text-decoration: underline; color: rgb(45, 194, 107);">двойным кликом по нему</span> перемещаем его в левое окно <span style="color: rgb(230, 126, 35);">РБ</span>. Далее все, что нужно сделать это нажать кнопку <span style="color: rgb(45, 194, 107);">RUN</span>.**

<p class="callout info">[![point3.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/IFsEXt7S55Mjw01v-point3.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/IFsEXt7S55Mjw01v-point3.png)</p>

<p class="callout warning">**Важно чтобы группы <span style="text-decoration: underline;">root</span> и <span style="text-decoration: underline;">geo</span> присутствовали в сцене, в противном случае модуль не сработает**</p>

 **3) Теперь приступим к настройке скелета с помощью модуля <span style="color: rgb(230, 126, 35);">skeletonTool </span>в <span style="color: rgb(230, 126, 35);">РБ</span>. Принцип его поиска и запуска идентичен <span style="color: rgb(230, 126, 35);">startup\_project </span><span style="text-decoration: underline;"><span style="color: rgb(241, 196, 15); text-decoration: underline;">(см. пункт 2)</span></span>.**

<p class="callout warning">**Вручную создавать ничего <span style="text-decoration: underline;">не нужно</span>, уже имеется утвержденное необходимое количество джоинтов для бипедальных персонажей.**</p>

<p class="callout info">[![point4.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/Elu1QtVJDRcSl2z8-point4.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/Elu1QtVJDRcSl2z8-point4.png)</p>

##### Данный модуль импортирует **<span style="color: rgb(230, 126, 35);">уже готовый скелет</span>**, и создает необходимые элементы управления для его настройки, при этом скрывая каналы, которые не нужны при постановке скелета.  
  
- **<span style="color: rgb(230, 126, 35);">Path </span>**указывает путь, откуда будет браться информация **<span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45);">(его менять не нужно)</span></span>**;  
- **<span style="color: rgb(230, 126, 35);">Import skeleton</span>** - непосредственно импортирует скелет;  
- **<span style="color: rgb(230, 126, 35);">Create skeleton Rig</span>** - нажатие этой кнопки создает риг на основе локаторов, который нужен только для правильной расстановки костей по персонажу;  
- **<span style="color: rgb(230, 126, 35);">delete and cleanup</span>** - данная кнопка удаляет созданный риг, корректно ориентирует джоинты и приводит скелет в порядок.

<p class="callout danger align-center"><span style="text-decoration: underline;">**Важно следить за каналом атрибута <span style="color: rgb(230, 126, 35); text-decoration: underline;">translateZ </span>на коленях и локтях - они должны оставаться в нуле.**</span></p>

<p class="callout info">**[![point5.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/otd8nPOeQeiZSWSk-point5.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/otd8nPOeQeiZSWSk-point5.png)**</p>

<p class="callout success align-center">**Этот модуль можно использовать и в <span style="text-decoration: underline; color: rgb(241, 196, 15);">процессе работы</span>.  
  
<span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">Типовая ситуация</span></span>, когда кости пальцев неправильно сориентированы и при сгибе в кулак они проникают друг в друга. Для того, чтобы быстро это дело поправить, можно вновь нажать на <span style="color: rgb(230, 126, 35);">create skeleton rig</span>, далее поправить кости и удалить риг, нажав на <span style="color: rgb(230, 126, 35);">delete and cleanup</span>.   
  
<span style="text-decoration: underline;">Для обновления весов <span style="color: rgb(230, 126, 35); text-decoration: underline;">skinCluster'а </span>можно воспользоваться модулем <span style="color: rgb(230, 126, 35); text-decoration: underline;">skinTool </span>внутри <span style="color: rgb(230, 126, 35); text-decoration: underline;">РБ  
  
[![point28.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/WciCbBrYDGuLfOq5-point28.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/WciCbBrYDGuLfOq5-point28.png)  
</span></span>**  
Выделяем геометрию на которой есть **<span style="color: rgb(230, 126, 35);">skinCluster</span>** и жмем на кнопку **<span style="color: rgb(230, 126, 35);">getting skinCluster</span>**.  
В окне **<span style="color: rgb(230, 126, 35);">outJoints</span>** сразу отобразятся все джоинты, которые <span style="text-decoration: underline;">приконнекчены</span> к выбранному **<span style="color: rgb(230, 126, 35);">skinCluster'у</span>**.  
Далее жмем кнопку **<span style="color: rgb(45, 194, 107);">RUN </span><span style="text-decoration: underline;"><span style="color: rgb(45, 194, 107); text-decoration: underline;">дважды </span></span>**(первый раз модуль вернет **<span style="color: rgb(230, 126, 35);">рест позу</span>** персонажа, а вторым кликом **<span style="color: rgb(230, 126, 35);">обновит сам skinCluster</span>**)</p>

**4) Теперь выполняем самый обычный <span style="color: rgb(230, 126, 35);">скин</span>, выделяя необходимые джоинты и геометрию.**

<p class="callout warning">**<span style="text-decoration: underline; color: rgb(224, 62, 45);">Важный момент</span>, при назначении скина, не нужно учитывать косточки:**  
**-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   
<span style="color: rgb(45, 194, 107);">Это скорее направляющие джоинты или джоинты, которые играют свою роль в сборке темплейта.</span>**</p>

<p class="callout info align-center">**В настройках <span style="color: rgb(230, 126, 35);">skinCluster'а</span> <span style="text-decoration: underline;">важно </span>поставить галку в <span style="color: rgb(230, 126, 35);">attribute editor'е</span> на <span style="color: rgb(230, 126, 35);">support non-rigid transformtations</span> поскольку без неё элементы стретча будут работать не совсем корректно**</p>

**При настройке качественных деформаций, может помочь пара вещей, такие как <span style="color: rgb(230, 126, 35);">deltamush </span>и модуль <span style="color: rgb(230, 126, 35);">joints\_inBetween </span>в <span style="color: rgb(230, 126, 35);">РБ</span>.**

<p class="callout info align-center">**Что касается <span style="color: rgb(230, 126, 35);">deltamush</span>, следует знать, что значение <span style="color: rgb(230, 126, 35);">smoothing iterations</span> <span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">больше 10 ставить нельзя</span></span>, поскольку тогда <span style="color: rgb(230, 126, 35);">дельта </span>начнет сильно влиять на производительность рига.   
  
Найти <span style="color: rgb(230, 126, 35);">deltamush </span>можно на стандартной панели <span style="color: rgb(230, 126, 35);">Maya</span> - <span style="color: rgb(230, 126, 35);">deform/deltamush</span>**</p>

<p class="callout info">**Что же до модуля <span style="color: rgb(230, 126, 35);">joints\_inBetween</span>, доступ к нему можно получить в <span style="color: rgb(230, 126, 35);">РБ</span>, по принципу что и <span style="color: rgb(230, 126, 35);">startup\_project </span><span style="color: rgb(241, 196, 15);">(см. пункт 2)</span>.  
[![point6.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/6qy3ZVegY3kTdKhk-point6.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/6qy3ZVegY3kTdKhk-point6.png)** </p>

##### Данный модуль создает к выбранным костям <span style="color: rgb(241, 196, 15);">(базовым)</span> дополнительные 4 джоинта, которые смещаются в зависимости от угла наклона <span style="color: rgb(241, 196, 15);">базового </span>джоинта. **<span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">На правую сторону джоинты создаются автоматически - отдельно их настраивать не нужно. </span></span>**   
**- <span style="color: rgb(230, 126, 35);">array\_of\_joints </span>**- это поле массива, где будут отображаться <span style="color: rgb(241, 196, 15);">базовые </span>джоинты, к которым необходимы **<span style="color: rgb(230, 126, 35);">инбитвины</span><span style="color: rgb(230, 126, 35);">  
  
[![point7.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/kDQ77sVm4DjB5wWC-point7.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/kDQ77sVm4DjB5wWC-point7.png)  
</span>**

##### <span style="color: rgb(230, 126, 35);">**ПРИНЦИП РАБОТЫ:**  
</span>  
1) выделяем необходимую нам <span style="color: rgb(241, 196, 15);">базовую </span>кость;  
2) в окне массива <span style="color: rgb(230, 126, 35);">**<span style="text-decoration: underline;">array\_of\_joints </span>**</span>жмем **<span style="color: rgb(230, 126, 35);">правой кнопкой мыши</span>** и выбираем **<span style="color: rgb(230, 126, 35);">get selected from maya</span>**;  
3) жмём **<span style="color: rgb(45, 194, 107);">RUN</span>**.  
  
Создадутся <span style="color: rgb(230, 126, 35);">4 джоинта</span>, где у каждого будут <span style="color: rgb(230, 126, 35);">свои атрибуты </span>для настройки, где **<span style="color: rgb(230, 126, 35);">posMin(Max)</span>** будут отвечать за то, насколько далеко будет выходить **<span style="color: rgb(230, 126, 35);">инбитвин</span>**, а **<span style="color: rgb(230, 126, 35);">slideMin(Max)</span>** непосредственно за <span style="color: rgb(230, 126, 35);">слайдинг </span>этого джоинта вдоль оси <span style="color: rgb(241, 196, 15);">базовой </span>кости.   
**<span style="color: rgb(230, 126, 35);">AngleMin </span>**и **<span style="color: rgb(230, 126, 35);">AngleMax </span>**определяют какой угол будет <span style="color: rgb(230, 126, 35);">максимальным </span>и <span style="color: rgb(230, 126, 35);">минимальным </span>для выдвижения **<span style="color: rgb(230, 126, 35);">инбитвина</span>**.  
  
[![point8.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/QUyOJfwxrTHRrB4P-point8.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/QUyOJfwxrTHRrB4P-point8.png)  


**5) Когда скин тела закончен, необходимо так же заскинить и одежду. Принцип работы с риггом одежды на производстве заключается в следующем, создается <span style="color: rgb(230, 126, 35);">прокси геометрия</span>, к которой будет идти скин и затем, через <span style="color: rgb(230, 126, 35);">proximityWrap</span>,<span style="color: rgb(230, 126, 35);"> </span>деформации будут передаваться на оригинальную геометрию одежды в группе <span style="color: rgb(230, 126, 35);">geo</span>.**

**Перед началом, создадим группу <span style="color: rgb(230, 126, 35);">low\_geo\_group </span>и переместим его в группу <span style="color: rgb(230, 126, 35);">geometry </span>в <span style="color: rgb(230, 126, 35);">non\_scale</span>. В эту группу мы будем складировать наши <span style="color: rgb(230, 126, 35);">прокси геометрии</span>. Создание прокси геометрии одежды происходит <span style="text-decoration: underline;">вручную</span>, т.е. берем одежду из группы <span style="color: rgb(230, 126, 35);">geo</span>, делаем её <span style="color: rgb(230, 126, 35);">дубликат, </span>переименовываем, задавая префикс<span style="color: rgb(230, 126, 35);"> low </span>и удаляем не нужные элементы <span style="color: rgb(241, 196, 15);">*(карманы, петли и т.д.)*</span> и *<span style="color: rgb(241, 196, 15);">лишние эйджи</span>* для комфортного скиннинга.**

<p class="callout info">[![point9.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/QkldL3DUNzDCvjJ5-point9.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/QkldL3DUNzDCvjJ5-point9.png)</p>

<p class="callout warning">**Не рекомендуется использовать deltamush при покраске прокси геометрии одежды, поскольку deltamush лучше себя показывает уже на оригинальной геометрии после применения <span style="text-decoration: underline;">proximityWrap'а</span>**</p>

**<span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">ProximityWrap </span></span>- это стандартный майский деформер, в каком то плане переписанный <span style="color: rgb(230, 126, 35);">wrap </span>с возможностью красить, и со скоростью <span style="color: rgb(230, 126, 35);">cvWrap</span><span style="color: rgb(241, 196, 15);"> *(который можно найти на <span style="text-decoration: underline;">github </span>в свободном доступе)*</span>. Он очень удобен в работе, и избавляет от большой монотонной работы, если красить оригинальную одежду тем же <span style="color: rgb(230, 126, 35);">skinCluster'ом</span>. Однако его назначение совсем не <span style="color: rgb(186, 55, 42);">юзерФрендли</span>, потому в <span style="color: rgb(230, 126, 35);">РБ </span>есть модуль <span style="color: rgb(230, 126, 35);">proxyTransfer</span>, позволяющий быстро настроить его работу.**

<p class="callout info">[![point10.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/tpN0v6rR6QbVjuw6-point10.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/tpN0v6rR6QbVjuw6-point10.png)</p>

##### <span style="color: rgb(230, 126, 35);">**ПРИНЦИП РАБОТЫ:**  
</span>  
1) выделяем **<span style="color: rgb(230, 126, 35);">оригинальные геометрии</span>** на которые будут идти деформации и выделяем их;  
2) далее в окне массива **<span style="color: rgb(230, 126, 35);">sources </span>**жмем правой кнопкой мыши и выбираем **<span style="color: rgb(230, 126, 35);">get selected from maya</span>**;  
3) в **<span style="color: rgb(230, 126, 35);">target </span>**добавляем нашу прокси геометрию от которой будут идти деформации, сделать это можно выделив объект в сцене и нажать на кнопку **<span style="color: rgb(230, 126, 35);">&lt;</span>**;  
4) жмем **<span style="color: rgb(45, 194, 107);">RUN</span>**  
  
**<span style="color: rgb(230, 126, 35);">ProximityWrap </span>**будет создан на всех объектах, что были указаны в **<span style="color: rgb(230, 126, 35);">sources</span>**, и применятся сразу необходимые настройки этого **<span style="color: rgb(230, 126, 35);">проксиВрапа</span>**

<p class="callout warning">**Настройки <span style="text-decoration: underline;">wrapMode</span> у proximityWrap будут находиться режиме <span style="text-decoration: underline;">surface</span>, однако бывают исключения и иногда лучше отрабатывает <span style="text-decoration: underline;">offset</span>. Потому если финальные деформации не устраивают, можно попробовать поменять режим wrapMode**</p>

**В завершение покраски одежды, рекомендуется использовать <span style="color: rgb(230, 126, 35);">deltamush </span>на оригинальной геометрии, однако нужно помнить, что значение <span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">smoothing iterations больше 10 ставить нельзя</span></span>.**

**6) Теперь осталось создать <span style="color: rgb(230, 126, 35);">переключалку для одежды</span>, поскольку работа с <span style="text-decoration: underline;">прокси геометрией увеличивает производительность сцены</span>. На контроле <span style="color: rgb(230, 126, 35);">main\_control </span>нужно создать атрибут <span style="color: rgb(230, 126, 35);">quality </span>с типом <span style="color: rgb(230, 126, 35);">enum </span>и с именами <span style="color: rgb(230, 126, 35);">low </span>и <span style="color: rgb(230, 126, 35);">high </span>соответственно, и настроить переключение между геометриями из группы <span style="color: rgb(230, 126, 35);">geo </span>и <span style="color: rgb(230, 126, 35);">proxy\_geo\_group</span>, которая была создана заранее и имеет в себе все прокси геометрии.**

<p class="callout success align-center">**Создание такой <span style="color: rgb(230, 126, 35);">переключалки </span>будет полезно не только для одежды, но и для переключения мелких отдельных элементов, например <span style="color: rgb(230, 126, 35);">пуговиц, колец и т.д</span>.   
Так же зачастую лицевой риг тоже имеет в себе прокси, потому элементы лицевого рига так же настраиваются под переключение атрибута <span style="text-decoration: underline; color: rgb(230, 126, 35);">quality</span>.**</p>

**7) Если у персонажа есть <span style="color: rgb(230, 126, 35);"><span style="text-decoration: underline;">очки, шляпа или что либо еще из предметов</span></span>, необходимо их засетапить - здесь особых условий нет, <span style="color: rgb(230, 126, 35);">стараться делать максимально просто и функционально</span>, соблюдая при этом правила <span style="text-decoration: underline; color: rgb(230, 126, 35);">нейминга </span>из <span style="color: rgb(230, 126, 35);">регламента</span> в самом начале данного <span style="color: rgb(230, 126, 35);">мануала</span>.**  
**Помимо этого, необходимо настроить систему слежения глаз за <span style="color: rgb(230, 126, 35);">контролами</span>. Подробный сетап слежения глаза с автовеками и т.п. настраивается <span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">уже в лицевом риге</span></span>, здесь будет достаточен <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">aimConstraint </span></span>с <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">upVector'ами</span></span>. Единственное усложнение будет то, что нужно создать атрибут <span style="color: rgb(230, 126, 35);">follow </span>на <span style="color: rgb(230, 126, 35);">контролах </span>глаз, который будет отвечать за условие - движется ли <span style="color: rgb(230, 126, 35);">контрол </span>глаз за головой или нет.**

**8) Теперь когда персонаж почти полностью готов, необходимо добавить элементы <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">твист системы</span></span> на ноги и руки для сохранения объема при вращениях, а так же <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">бенд контролы</span></span>. Все это работает вместе, и с помощью пары модулей в <span style="color: rgb(230, 126, 35);">РБ</span>.**

**Итак, в <span style="color: rgb(230, 126, 35);">РБ </span>находим модуль <span style="color: rgb(230, 126, 35);">biped\_noRotate </span>и сразу жмем <span style="color: rgb(45, 194, 107);">RUN</span>. Будут созданы дополнительные <span style="color: rgb(230, 126, 35);">джоинты </span>в группе <span style="color: rgb(230, 126, 35);">components</span>. Они понадобятся для <span style="color: rgb(230, 126, 35);">бендов</span>.**

<p class="callout info">[![point11.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/adMXxTcs1Lt2mJ3R-point11.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/adMXxTcs1Lt2mJ3R-point11.png)</p>

**Далее, в <span style="color: rgb(230, 126, 35);">РБ </span>находим модуль <span style="color: rgb(230, 126, 35);">biped\_stretchRig</span>, и так же, сразу жмем <span style="color: rgb(45, 194, 107);">RUN</span>. Будут созданы все необходимые <span style="color: rgb(230, 126, 35);">контролы </span>и добавятся <span style="color: rgb(230, 126, 35);">джоинты </span>для<span style="color: rgb(230, 126, 35);"> твист системы</span>, и все они будут находиться тоже в группе <span style="color: rgb(230, 126, 35);">components</span>.**

<p class="callout info">[![point12.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/1hoPzOFa9jJ3ZQyZ-point12.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/1hoPzOFa9jJ3ZQyZ-point12.png)</p>

<p class="callout info">[![point13.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/1MT3zFzRVNeQ2FZ6-point13.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/1MT3zFzRVNeQ2FZ6-point13.png)</p>

<p class="callout danger align-center">**Все эти элементы будут подгружены референсом -<span style="text-decoration: underline;"> удалять и мерджить эти референсы не нужно</span>**</p>

**Все <span style="color: rgb(230, 126, 35);">твист джоинты</span> необходимо добавить в <span style="color: rgb(230, 126, 35);">скин тела и одежды</span> и поправить раскраску скина.**

**9) Последним этапом настройки <span style="color: rgb(230, 126, 35);">риг\_дев ассета</span> будет создание <span style="color: rgb(230, 126, 35);">контрол\_хелперов</span>. В своей сути, это кривые с <span style="text-decoration: underline;">не нулевыми трансформами</span>, которые в момент запуска <span style="color: rgb(230, 126, 35);">темплейта </span>персонажа будут конвертироваться в <span style="color: rgb(230, 126, 35);">контролы</span>, забирая <span style="color: rgb(230, 126, 35);">шейпы </span>и <span style="color: rgb(230, 126, 35);">приводя к 0 все трансформы, а скейл к 1</span>.**

**<span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">Создавать кривые вручную не нужно,</span></span> все есть в <span style="color: rgb(230, 126, 35);">РБ</span>. Ищем модуль <span style="color: rgb(230, 126, 35);">helpers\_import</span> и жмем <span style="color: rgb(45, 194, 107);">RUN</span>. Модуль создаст все необходимые нам кривые и постарается их расставить в нужные места.**

<p class="callout info">[![point14.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/fSNpnxL6R8JPsjAn-point14.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/fSNpnxL6R8JPsjAn-point14.png)</p>

#####   
- **<span style="color: rgb(230, 126, 35);">Path </span>**указывает путь, откуда будет браться информация **<span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45);">(его менять не нужно)</span></span>**;  
- **<span style="color: rgb(230, 126, 35);">name </span>**- префикс-имя контрол\_хелперов **<span style="text-decoration: underline; color: rgb(224, 62, 45);">(менять тоже не нужно)</span>**;  
- <span style="color: rgb(230, 126, 35);">**helpers\_parent** </span>- группа, где будут лежать контрол\_хелперы.  
  


<p class="callout warning align-center">**Важно понимать, что все <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">персонажи разные</span></span>, и некоторые <span style="color: rgb(230, 126, 35);">контрол\_хелперы </span>придется двигать <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">вручную</span></span>, чтобы они были видимы и легко выделялись. Особенно важные моменты, когда их нужно будет двигать будут приведены ниже.**</p>

- <p class="callout info">**<span style="color: rgb(230, 126, 35);">Контрол\_хелпер </span>ключицы <span style="color: rgb(230, 126, 35);">L(R)\_shoulder\_helper</span> должен находиться в месте джоинта <span style="color: rgb(230, 126, 35);">L(R)\_shoulder\_joint</span>, это важно, поскольку <span style="color: rgb(230, 126, 35);">темплейт </span>берет ориентацию именно с этого <span style="color: rgb(230, 126, 35);">контрол\_хелпера</span>.   
    <span style="color: rgb(224, 62, 45);">Только этот хелпер нужно двигать за компоненты, все остальные можно спокойно перемещать за трансформы</span>;  
    [![point17.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/dXZd8a8lXAH5LQmZ-point17.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/dXZd8a8lXAH5LQmZ-point17.png)** </p>
- <p class="callout info">**<span style="color: rgb(230, 126, 35);">L(R)\_arm\_elbow\_helper</span> и <span style="color: rgb(230, 126, 35);">L(R)\_leg\_ik\_polevector\_control\_helper</span> уже правильно настроены, однако они находятся в местах джоинтов коленей и локтей соответственно, потому нужно выделить это <span style="color: rgb(230, 126, 35);">хелперы </span>и отодвинуть их на адекватное расстояние от тела <span style="color: rgb(230, 126, 35);">при ориентации object (в axis Orientation: object)</span>;  
    [![point15.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/7ZEvCNqkcUPgkFQ8-point15.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/7ZEvCNqkcUPgkFQ8-point15.png)** </p>
- <p class="callout info">**<span style="color: rgb(230, 126, 35);">L(R)\_leg\_fk\_2\_control\_helper</span> и <span style="color: rgb(230, 126, 35);">L(R)\_fk\_2\_arm\_control\_helper</span> следует сместить немного ниже <span style="color: rgb(230, 126, 35);">контролов бендов</span>, чтобы и тех и других можно было легко выделять;  
    [![point16.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/ObJ2d9XBBaIhREbH-point16.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/ObJ2d9XBBaIhREbH-point16.png)** </p>
- <p class="callout info">**<span style="color: rgb(230, 126, 35);">L(R)\_leg\_outLand\_helper</span> и <span style="color: rgb(230, 126, 35);">L(R)\_leg\_inLand\_helper</span> следует выставить по краям ботинка, а <span style="color: rgb(230, 126, 35);">L(R)\_leg\_heelLand\_helper</span> и <span style="color: rgb(230, 126, 35);">L(R)\_leg\_footLand\_helper</span> выставить у пятки и носка ботинка  
    [![point18.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/jpMV85MrGRgB9d3O-point18.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/jpMV85MrGRgB9d3O-point18.png)** </p>

**На данном этапе <span style="color: rgb(230, 126, 35);">риг\_дев ассет</span> считается <span style="text-decoration: underline;"><span style="color: rgb(45, 194, 107); text-decoration: underline;">законченным</span></span>. Его следует сохранить и прибегать к нему в случае, если нужно выполнить правки.**

<p class="callout warning align-center">**Риг\_дев ассет нужен только для риггера, <span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">в анимацию и куда-либо еще он не идет</span></span>. Все правки по ригу выполняются здесь - <span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">в анимационном ничего править нельзя в связи с работой клинапа</span></span>.**</p>

**10) Для того. чтобы у других риггеров был доступ к <span style="color: rgb(230, 126, 35);">риг\_дев ассету</span>, его необходимо запаблишить. Поскольку <span style="color: rgb(230, 126, 35);">ftrack </span>паблишит только <span style="color: rgb(230, 126, 35);">анимационный ассет</span>, паблишь <span style="color: rgb(230, 126, 35);">риг\_дев'а</span> и <span style="color: rgb(230, 126, 35);">темплейта </span>происходит через модуль <span style="color: rgb(230, 126, 35);">publisher\_tool </span>в <span style="color: rgb(230, 126, 35);">РБ</span>. В выборе типа <span style="color: rgb(230, 126, 35);">type </span>нужно указать <span style="color: rgb(230, 126, 35);">dev</span>.**

<p class="callout info">[![point19.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/TAFUlV1CqkbGVfEh-point19.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/TAFUlV1CqkbGVfEh-point19.png)</p>

##### - <span style="color: rgb(230, 126, 35);">**name** </span>-**<span style="color: rgb(230, 126, 35);"> </span>**здесь нужно написать имя персонажа;  
- <span style="color: rgb(230, 126, 35);">**type**</span> - здесь нужно указывать то, что собираемся паблишить, т.е. это или **<span style="color: rgb(230, 126, 35);">dev </span>**или анимационный ассет <span style="color: rgb(230, 126, 35);">**anim**</span>;  
- <span style="color: rgb(230, 126, 35);">**path\_to\_server** </span>- путь, где все будет сохраняться <span style="text-decoration: underline;">**<span style="color: rgb(224, 62, 45); text-decoration: underline;">(менять этот пункт не нужно)</span>**</span>;  
- **<span style="color: rgb(230, 126, 35);">template </span>**- если стоит галка, значит <span style="color: rgb(230, 126, 35);">темплейт </span>будет <span style="text-decoration: underline;">автоматически</span> запаблишен при нажатии кнопки <span style="color: rgb(45, 194, 107);">RUN</span>, в противном случае, темплейт нужно будет паблишить <span style="text-decoration: underline;">индивидуально </span>и нажимать кнопку **<span style="color: rgb(230, 126, 35);">manually add template</span>**;  
- **<span style="color: rgb(230, 126, 35);">path\_to\_template</span>** - здесь нужно указать путь к файлу <span style="color: rgb(230, 126, 35);">темплейта</span>  
  



##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**  


## **<span style="color: rgb(230, 126, 35);">СОЗДАНИЕ ТЕМПЛЕЙТА ПЕРСОНАЖА</span>**

##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**

**<span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">Темплейт </span></span>представляет собой сборку различных модулей для сетапа целого персонажа, т.е. внутри него будут находится элементы <span style="color: rgb(230, 126, 35);">контрол рига</span> для любой части тела персонажа. Кроме того внутри так же находятся модули <span style="color: rgb(230, 126, 35);">pre\_script</span>, <span style="color: rgb(230, 126, 35);">cleanup </span>и <span style="color: rgb(230, 126, 35);">post\_script</span>.   
Такой <span style="color: rgb(230, 126, 35);">темплейт </span>будет для каждого персонажа свой, т.е. его основа будет идентичной, а вот <span style="color: rgb(230, 126, 35);">pre\_script</span>,<span style="color: rgb(230, 126, 35);"> </span><span style="color: rgb(230, 126, 35);">cleanup </span>и <span style="color: rgb(230, 126, 35);">post\_script </span>могут отличаться от персонажа к персонажу. Таким образом, основной <span style="color: rgb(230, 126, 35);">контрол\_риг </span>будет один и тот же у всех бипедальных персонажей, тем самым система рига будет являться - <span style="color: rgb(230, 126, 35);">унифицированной</span>.**

**Для того, чтобы создать <span style="color: rgb(230, 126, 35);">темплейт</span>, необходимо найти модуль <span style="color: rgb(230, 126, 35);">char\_temp </span><span style="text-decoration: underline;"><span style="color: rgb(241, 196, 15); text-decoration: underline;">(версию следует брать последней, на момент написания мануала последняя версия это v003)</span></span> в <span style="color: rgb(230, 126, 35);">РБ</span>. Самое главное не забыть переименовать <span style="color: rgb(230, 126, 35);">char\_temp </span>в имя персонажа, над которым сейчас ведется работа, т.е. вместо <span style="color: rgb(230, 126, 35);">char\_temp\_v003 </span>будет <span style="color: rgb(230, 126, 35);">name\_v001</span>.**

<p class="callout info">**[![point20.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/S9tG82So23ESxzv7-point20.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/S9tG82So23ESxzv7-point20.png)**</p>

##### - **<span style="color: rgb(230, 126, 35);">pre\_script</span>** - удаляет и мерджит <span style="color: rgb(230, 126, 35);">референсы бендов</span>, что мы создавали ранее в **<span style="color: rgb(230, 126, 35);">риг\_деве</span>**. Соответственно, если имена референсов как-либо менялись, следует выделить <span style="color: rgb(230, 126, 35);">все референсы</span> в сцене, кликнуть **<span style="color: rgb(230, 126, 35);">правой кнопкой мыши</span>** на окно **<span style="color: rgb(230, 126, 35);">import\_refNodes</span>** и выбрать **<span style="color: rgb(230, 126, 35);">get selected from maya</span>**;  
  
[![point21.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/zaomp0bmVR8xKDO4-point21.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/zaomp0bmVR8xKDO4-point21.png)  
  
- **<span style="color: rgb(230, 126, 35);">cleanup </span>**- это модуль, содержащий в себе <span style="color: rgb(230, 126, 35);">подмодули</span>, которые <span style="color: rgb(230, 126, 35);">чистят сцену</span> во время сборки <span style="color: rgb(230, 126, 35);">контрол рига</span>. Модуль удаляет весь ненужный хэш, а так же скрывает и блокирует все, что может как то сломать риг.  
  
**<span style="text-decoration: underline; color: rgb(230, 126, 35);">Самым важным</span>** элементом <span style="color: rgb(230, 126, 35);">клинапа </span>является окно **<span style="color: rgb(230, 126, 35);">geo\_toFix</span>**, которое позволяет настраивать геометрию таким образом, чтобы <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35);">и модель и риг</span> <span style="color: rgb(230, 126, 35);">вместе перемещались корректно</span></span> - это же в свою очередь является <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">одной из необходимостей при работе с **USD**</span></span>.   
Добавлять в окно **<span style="color: rgb(230, 126, 35);">geo\_toFix </span>**нужно <span style="text-decoration: underline;">лишь ту геометрию</span>, которая находится в группе **<span style="color: rgb(230, 126, 35);">geo</span>**, а так же имеет **<span style="color: rgb(230, 126, 35);">skinCluster </span>**- <span style="text-decoration: underline;"><span style="color: rgb(224, 62, 45); text-decoration: underline;">все остальные геометрии добавлять сюда не нужно</span></span>. Принцип добавления схож с <span style="color: rgb(230, 126, 35);">pre\_script'ом</span>;  
  
[![point22.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/UDnCns1MWtJqODgn-point22.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/UDnCns1MWtJqODgn-point22.png)  
  
- **<span style="color: rgb(230, 126, 35);">post\_script </span>**- модуль, который можно дополнять. Бывают случаи, когда необходимо что то прописать в коде, и чтобы не совершать никаких лишних манипуляций с **<span style="color: rgb(230, 126, 35);">анимационным ассетом</span>**, в такие моменты код прописывается уже сюда.  
  
[![point23.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/hPNHZdsJadUoGLPd-point23.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/hPNHZdsJadUoGLPd-point23.png)

**Таким образом, когда мы внесли нужную геометрию в окно <span style="color: rgb(230, 126, 35);">geo\_toFix </span>в <span style="color: rgb(230, 126, 35);">cleanup'е </span>и по необходимости внесли правки в <span style="color: rgb(230, 126, 35);">pre\_ </span>и <span style="color: rgb(230, 126, 35);">post\_scripts </span>- <span style="color: #2dc26b;">следует выделить имя темплейта и нажать кнопку RUN, для сборки самого рига.</span>**

<p class="callout warning align-center"><span style="text-decoration: underline;">**Больше ничего править в темплейте не нужно, все уже настроено так, как надо**</span></p>

<p class="callout warning align-center"><span style="text-decoration: underline;">**В темплейт char\_temp\_v003 был добавлен модуль controlSet\_maker. Править его не нужно, он лишь создает необходимые контрол сеты для работы в анимации.**</span></p>

<p class="callout info">[![point24.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/agjHQRhOZOzHFhyF-point24.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/agjHQRhOZOzHFhyF-point24.png)</p>

**Когда в <span style="color: rgb(230, 126, 35);">окне вывода информации РБ</span> загрузка достигнет <span style="color: rgb(230, 126, 35);">100% </span>сборка рига будет <span style="text-decoration: underline;"><span style="color: rgb(45, 194, 107); text-decoration: underline;">завершена </span></span>и мы получим <span style="color: rgb(230, 126, 35);">анимационный ассет</span>.**

<p class="callout info">**[![point25.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/L4ZVTzHDyNdABZnG-point25.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/L4ZVTzHDyNdABZnG-point25.png)**</p>


##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**  


## **<span style="color: rgb(230, 126, 35);">АНИМАЦИОННЫЙ АССЕТ И ПАБЛИШ</span>**

##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**

<p class="callout info">[![point26.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/jr3MPo1WmrnKYAl6-point26.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/jr3MPo1WmrnKYAl6-point26.png)</p>

**Теперь когда <span style="color: rgb(230, 126, 35);">темплейт </span>собран, и получен <span style="color: rgb(230, 126, 35);">анимационный ассет</span>, работа может быть завершена, однако необходимо <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">произвести небольшие тесты</span></span> для того, чтобы проверить работу рига.**

<p class="callout warning align-center">**Следует сдвинуть группу <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">root</span></span>, <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">main\_control </span></span>и <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">world\_control </span></span>и убедиться, что все перемещается корректно и не разлетается. Кроме того, необходимо проверить работу атрибута <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">scaleFactor </span></span>в <span style="text-decoration: underline;"><span style="color: rgb(230, 126, 35); text-decoration: underline;">main\_control</span></span>.**   
  
**Так же нужно пошевелить ногами, руками и головой персонажа, и скрутить туловище персонажа. Если возникает какая то неточность в деформациях, следует вносить коррективы в <span style="text-decoration: underline; color: rgb(230, 126, 35);">риг\_дев ассете</span> и вновь собирать <span style="text-decoration: underline; color: rgb(230, 126, 35);">темплейт</span>.**</p>

  
**После всех проверок можно паблишить <span style="color: rgb(230, 126, 35);">анимационный ассет</span> персонажа в <span style="color: rgb(230, 126, 35);">ftrack</span>.**

<p class="callout info">[![point27.png](https://bookstack.yarko.com/uploads/images/gallery/2024-07/scaled-1680-/xyVY5ClTXZsmbJee-point27.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-07/xyVY5ClTXZsmbJee-point27.png)</p>

1. <p class="callout info">Вверху, на главной панели в **<span style="color: rgb(230, 126, 35);">maya </span>**жмем **<span style="color: rgb(230, 126, 35);">yarko</span>**;</p>
2. <p class="callout info">в выпадающем контекстном меню выбираем **<span style="color: rgb(230, 126, 35);">app</span>**;</p>
3. <p class="callout info">в открывшемся приложении **<span style="color: rgb(230, 126, 35);">ftrack </span>**проверяем <span style="text-decoration: underline;">правильность пути</span>, т.е. в случае с <span style="color: rgb(230, 126, 35);">риггингом</span>, путь должен идти в **<span style="color: rgb(230, 126, 35);">Rigging</span>**;</p>
4. <p class="callout info">далее необходимо нажать на **<span style="color: rgb(230, 126, 35);">ярлык опции (3 полоски)</span>**;</p>
5. <p class="callout info">в выпадающем контекстном меню выбираем **<span style="color: rgb(230, 126, 35);">set as current task</span>**, тем самым задав **<span style="color: rgb(230, 126, 35);">ftrack'у </span>**задачу, над которой в данный момент ведется работа. Если этого окошка нет, значит **<span style="color: rgb(230, 126, 35);">ftrack </span>**уже определил над какой задачей ведется работа и этот пункт <span style="text-decoration: underline;"><span style="color: rgb(241, 196, 15); text-decoration: underline;">можно пропустить</span></span>;</p>
6. <p class="callout info">жмем **<span style="color: rgb(45, 194, 107);">publish</span>**;</p>
7. <p class="callout info">в открывшемся окне будет выбор, нажать на **<span style="color: rgb(224, 62, 45);">close </span>**или **<span style="color: rgb(45, 194, 107);">proceed </span>**- нажимать следует **<span style="color: rgb(45, 194, 107);">proceed</span>**, поскольку большинство ошибок, которое выдаст <span style="color: rgb(230, 126, 35);">валидация </span>это <span style="text-decoration: underline; color: rgb(224, 62, 45);">не актуальная информация</span>, которую можно игнорировать.</p>

<p class="callout success align-center">Рекомендую помимо паблиша в **<span style="color: rgb(230, 126, 35);">ftrack</span>**, так же паблишить **<span style="color: rgb(230, 126, 35);">анимационный ассет</span>** через **<span style="color: rgb(230, 126, 35);">publisher\_tool </span>**в **<span style="color: rgb(230, 126, 35);">РБ</span>**, для того чтобы в папке персонажа помимо **<span style="color: rgb(230, 126, 35);">риг\_дев </span>**и **<span style="color: rgb(230, 126, 35);">темплейт </span>**файлов, хранился и **<span style="color: rgb(230, 126, 35);">анимационный файл</span>**. Для этого нужно в **<span style="color: rgb(230, 126, 35);">type </span>**выбрать **<span style="color: rgb(230, 126, 35);">anim </span>**и <span style="text-decoration: underline;">убрать галочку с чекбокса</span> **<span style="color: rgb(230, 126, 35);">template </span>**(работа с <span style="color: rgb(230, 126, 35);">publisher\_tool </span>описана в **<span style="color: rgb(241, 196, 15);">пункте 10</span>**)</p>

##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**  


## **<span style="color: rgb(230, 126, 35);">В результате, на выходе получаются 3 файла: темплейт, риг\_дев и анимационный ассет.   
После паблиша рекомендуется так же оповестить об окончании работы над задачей лида отдела</span>**

##### **<span style="color: rgb(230, 126, 35);">\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
</span>**