# CFX  cимуляция одежды, волос, твёрдых и мягких тел

# 1.Роль и функционал отдела CFX

###  

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

Отдел CFX — это команда, которая отвечает за всё, что связано с движущейся динамикой персонажей и их окружения. Если коротко, зона ответственности отдела — это одежда, волосы, ремни, сумки и всё то, что должно правдоподобно двигаться, колыхаться или деформироваться вместе с персонажем.

Отдел CFX работает на стыке нескольких направлений: анимации, технического пайплайна и VFX. Главная задача — сделать так, чтобы персонажи выглядели живо и органично в кадре.

В зону ответственности отдела CFX на проекте входит:  
— Симуляция одежды (от плащей и юбок до шарфов и мелких аксессуаров)  
— Симуляция волос   
— Симуляция мягких тел (жир, кожа, мускулатура)  
— Симуляция твёрдых тел (например, тяжелые элементы костюмов или броня)

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

# 1.1 Зоны ответственности

###  

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

Отдел CFX отвечает за все задачи, связанные с динамическими элементами на персонажах и их окружении. Работа строится по следующим направлениям:

### Симуляция одежды

Сюда входит работа с плащами, юбками, рубашками, шарфами и любыми другими тканевыми элементами костюмов. Симуляция проводится с учётом одобренной анимации и особенностей материала.

### Симуляция волос

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

### Симуляция мягких тел

Работа с мягкими тканями тела персонажей — кожа, мышцы, жир, отдельные части лица или тела, которые требуют дополнительной деформации через симуляцию.

### Симуляция твёрдых тел

Сюда относятся жёсткие части костюмов — броня, ремни, сумки, оружие и другие элементы, которые должны иметь физическое поведение и быть синхронизированы с движением персонажа.

### Финальный кеш и передача данных

Ответственность отдела — подготовка симуляции к публикации и передаче в рендеринг. Это включает экспорт кешей, проверку соответствия стандартам пайплайна и публикацию в Ftrack.

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

# CFX Программное обеспечение

### Используемое программное обеспечение

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

**• Maya 2023.3**

**• Houdini 20.0.751**

**• Ziva 2.1.0**

**• Qualoth**

**• Python/MEL**

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

### Maya 2023.3

Основной инструмент для работы отдела. Через Maya собираются рабочие сцены, настраивается симуляция одежды, волос и других динамических элементов.  
Используются стандартные инструменты Maya (nCloth, nHair) и дополнительные плагины. Для ускорения процессов применяются кастомные Python и MEL скрипты.

### Houdini 20.0.751

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

### Ziva Dynamics 2.1.0

Система симуляции мягких тканей и мускулатуры персонажей. Используется для работы с кожей, мышцами и другими деформируемыми элементами персонажей.

### Qualoth

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

# CFX Программное обеспечение

### Используемое программное обеспечение

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

**• Maya 2023.3**

**• Houdini 20.0.751**

**• Ziva 2.1.0**

**• Qualoth**

**• Python/MEL**

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

### Maya 2023.3

Основной инструмент для работы отдела. Через Maya собираются рабочие сцены, настраивается симуляция одежды, волос и других динамических элементов.  
Используются стандартные инструменты Maya (nCloth, nHair) и дополнительные плагины. Для ускорения процессов применяются кастомные Python и MEL скрипты.

### Houdini 20.0.751

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

### Ziva Dynamics 2.1.0

Система симуляции мягких тканей и мускулатуры персонажей. Используется для работы с кожей, мышцами и другими деформируемыми элементами персонажей.

### Qualoth

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

# CFX Пайплайн работы отдела

### **Получение и сборка динамических сцен**

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

- ##### Отдел CFX получает от анимационного департамента утверждённые сцены в формате USD.
- ##### Анимация должна быть финальной и без технических ошибок (пересечений, скачков и т.д.).
- ##### Далее через DSA(Dynamic Scene Assembling) или вручную сцена собирается и готовится под симуляцию.

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### **Настройка сцены симуляции** \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

##### На этом этапе добавляются нужные компоненты: 

- ##### Определение состояния персонажа в шоте (dirty, bag, dinocostume)
- ##### Подготовка персонажа к симуляции

1. - Создание преролла
2. - Мердж преролла с существующим кешем анимации
3. - Подключение референса динамического рига в сцену
4. - Подключение динамического рига к кешу персонажа

- ##### Определение характера сцены (Полет, погоня, ветренная погода)

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### Симуляция и принятие работы

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

- ##### В первую очередь выполняются тестовые симуляции для проверки корректности работы и фикса возможных проблем.
- ##### После утверждения теста запускается финальный просчёт динамики с кешированием результата в <span style="text-decoration: underline;">Alembic </span>или <span style="text-decoration: underline;">USD</span>. На задаче-версии ставится статус <span style="text-decoration: underline;">pending review</span>
- ##### После публикации playblast, cache, scene в <span style="text-decoration: underline;">Ftrack</span>, лид отдела отсматривает работу согласно чек листу и если нет комментариев проставляет статус <span style="text-decoration: underline;">Complete</span>
- ##### Далее отдел Check получает материалы и отсматривает на наличие технических баг

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

# CFX Взаимодействие с другими отделами

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

##### Работа отдела CFX тесно связана с несколькими ключевыми департаментами. Для стабильного пайплайна важно соблюдение общих стандартов и своевременная коммуникация.

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

Перечень отделов с высокой вероятностью взаимодействий

- Анимационный отдел
- Риг отдел
- Моделинг отдел
- Чекинг отдел
- VFX отдел по необходимости

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### Анимационный отдел

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

### Риг отдел

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

### Моделинг отдел

- Предоставление геометрии в соответствии с техническими требованиями (топология, плотность сетки, UV-развёртки).
- Согласование особенностей костюмов, которые влияют на физику (например, элементы, требующие скомбинированной или сепарейтнутой геометрии).

### Чекинг отдел 

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

### VFX (по необходимости)

- Согласование моментов, где симуляция CFX может пересекаться с эффектами.
- Передача динамических данных для дальнейшего использования в VFX

# CFX Технические требования и ограничения

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### Требования к геометрии

- Модели, предназначенные для симуляции, должны иметь равномерную топологию и оптимальное количество полигонов (не перегруженные, но достаточные для физики и деформаций).
- Не допускаются non-manifold геометрия, открытые края (если это не запланировано) и прочие технические ошибки.
- Для одежды — наличие правильно развернутых UV, даже если в симуляции они напрямую не используются.

### Требования к анимации

- Анимация должна быть финальной и утверждённой. После передачи в CFX изменения не допускаются без согласования.
- Отсутствие пересечений между телом персонажа и одеждой.
- Отсутствие экстремальных заломов или перекрутов тела, без согласования с отделом CFX
- Отсутствие глубоких пересечений геометрии тела и других элементов сами в себя
- Скорость движений персонажа должна быть в рамках реалистичных ограничений (без резких скачков и экстремально быстрых деформаций).

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

# CFX Работа с сценой симуляции-динамики

# \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_  
Пошаговый урок: Подготовка сцены и симуляция CFX  
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Шаг 1. Открываем задачу через Ftrack

Открываем Ftrack и переходим в нужный шот.

Нажимаем кнопку **Open** — сцена откроется в Maya.

[![Untitled-1.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/uEHpoRg5gZiM7acc-untitled-1.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/uEHpoRg5gZiM7acc-untitled-1.png)

## Шаг 2. Проверяем сборку сцены

1. Переключаемся на камеру шота (shot camera).
2. Проверяем наличие и корректность (они у нас должны быть в кеше) всех персонажей и окружения.

Если один или несколько персонажей отсутствуют, используем скрипт:

```
from inhouse.usd.assets.asset_factory import AssetFactory
from inhouse.usd.changes import UsdChanges
from pxr import Usd
from pxr import Sdf, Usd
from inhouse.usd.tools.maya_utils import getSceneStage
from inhouse.ftrack.publishing import publish_asset
import time
from pxr import Ar

def iter_root_prims(stage, rigged = True):
    for prim in stage.TraverseAll():
           vset = prim.GetVariantSet('representation')
           if not vset.IsValid():
               continue
           if rigged:
               vname = vset.GetVariantSelection()
               if vname != 'rig':
                   continue
           yield prim


af = AssetFactory()

context = af._app.context
asset = context.asset
alink = af.getAssetLink(asset)
lo_link = alink.link('Layout Layer')
changes = UsdChanges(asset)
changes.load()

project_path = Ar.GetResolver().Resolve(lo_link) 
changes.checkIn(lo_link)
changes.apply(update=False)

local_path = changes.path(lo_link)

lo_stage = Usd.Stage.Open(local_path)

layer = lo_stage.GetEditTarget()

for rp in iter_root_prims(lo_stage, rigged=False):
    prim_path = str(rp.GetPath())
    prim_spec = layer.GetPrimSpecForScenePath(prim_path)
    if prim_spec is None:
        continue
    prim_spec.variantSelections.clear()
    if len(prim_spec.variantSets)>0:
        variants = prim_spec.variantSets[0].variants
        if 'rig' in variants:
            prim_spec.variantSets[0].RemoveVariant(variants['rig'])
            lo_stage.RemovePrim(prim_path+'/rig')
            print(prim_spec.GetAsText())
print(lo_stage.GetRootLayer().ExportToString())
lo_stage.Save()
product = alink.getProductByLink('Layout Layer')
print(product['name'])
asst_name = product['name']
version_id = publish_asset( asset['id'], asset_name=asst_name,
                                asset_type='bsc',
                                components=[
                                   dict(name='usd', path=local_path)
                                ],
                                version_id=None
                               )

changes.checkOut(lo_link)
changes.apply(update=False)
counter = 0
while Ar.GetResolver().Resolve(lo_link) == project_path:
    time.sleep(3)
    counter+=1
    if counter>10:
        break
scene_stage = getSceneStage()
scene_stage.Reload()

```

## Шаг 3. Подготовка сцены к симуляции

1. Открываем инструмент **DSA (Dynamic Scene Assembling)**. 
    - Находится в верхнем меню Maya, раздел **Animation**.

![Untitled-2.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/LsLu5V0cHGW98Ufo-untitled-2.png)

[![Untitled-3.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/zMxrPIQvwElZM8O7-untitled-3.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/zMxrPIQvwElZM8O7-untitled-3.png)

## Шаг 4. Выбор персонажа и динамического рига

1. В интерфейсе DSA выбираем нужного персонажа для симуляции.
2. Определяем состояние персонажа (Dinocostume, bag, Dirty)
3. Подбираем динамический риг, соответствующий этому состоянию.

*[![Untitled-5.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/RmuREy7fuK1JsmUT-untitled-5.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/RmuREy7fuK1JsmUT-untitled-5.png)*

## Шаг 5. Создаем преролл

1. Нажимаем кнопку **preroll** в интерфейсе DSA.[![Untitled-6.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Hg1oxWA9j29X6lwx-untitled-6.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Hg1oxWA9j29X6lwx-untitled-6.png)
2. Проверяем корректность преролла: анимация должна иметь плавный заход, без резких движений в начале.
3. Если нужно, редактируем параметры преролла (добавляем или убираем кадры, меняем ключи анимации).
4. Если всё корректно, нажимаем **Cache**.  
    [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/iA1lG6sfOCCZJ5B7-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/iA1lG6sfOCCZJ5B7-image.png)

---

## Шаг 6. Подгрузка динамического рига и подключение

1. Нажимаем кнопку **Reference** — нужный динамический риг подгрузится в сцену.[![Untitled-7.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Z4Ooa6Sia56kCtLX-untitled-7.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Z4Ooa6Sia56kCtLX-untitled-7.png)
2. Проверяем, чтобы риг подгрузился корректно.
3. Нажимаем кнопку **Connect** для привязки рига к сцене и анимации.

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/lN3VaY8yDzKz77xV-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/lN3VaY8yDzKz77xV-image.png)

---

## Шаг 7. Тестовый просчет симуляции

1. Настраиваем базовые параметры симуляции (по необходимости).
2. Запускаем тестовый (lowres) просчет, чтобы проверить поведение симуляции в целом.
3. Смотрим на результат — оцениваем работу динамики перед финальным просчетом.

## Шаг 8. Выбор просчитываемой шейпы

1. Выбираем в outliner требуемые шейпы одежды[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/AEz9td9ZsqtkZFmg-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/AEz9td9ZsqtkZFmg-image.png)
2. Включаем отображение в display layers [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/adHtvOmkQ2G2K9vT-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/adHtvOmkQ2G2K9vT-image.png)

1. Нажимаем на Create nCache [![Untitled-8.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Gdgrto8rSJ5YqHQr-untitled-8.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Gdgrto8rSJ5YqHQr-untitled-8.png)
2. После просчета снимаем плейбласт, смотрим на результат симуляции[![Untitled-9.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Q2dMYdrC6nGz7zkw-untitled-9.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Q2dMYdrC6nGz7zkw-untitled-9.png)
3. После просчета всех динамических элементов, включаем группу output в display layer, все остальные отключаем [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/2jfkKlvynDQb34Ys-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/2jfkKlvynDQb34Ys-image.png)
4. Снимаем плейбласт с финальной аутпутной группой [![Untitled-9.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Q2dMYdrC6nGz7zkw-untitled-9.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Q2dMYdrC6nGz7zkw-untitled-9.png)
5. Если все хорошо, паблишим вариант
6. [![Untitled-10.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/dsDQdfoRLR0B87nf-untitled-10.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/dsDQdfoRLR0B87nf-untitled-10.png)
7. 
8. В Ftrack ставим статус pending review, и ждем фитбека по задаче
9. После паблиша проверяем кеш в usdview
10. [![Untitled-12.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/bwFgtJDhnnRkw6t6-untitled-12.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/bwFgtJDhnnRkw6t6-untitled-12.png)
11. [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/hihW1Po9xZvUpaHO-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/hihW1Po9xZvUpaHO-image.png)

# CFX Настройки nCloth

### ЗНАЧЕНИЕ НАСТРОЕК CLOTH

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Настройки nCloth (Maya)

### **Stretch Resistance**

**Что это:** сопротивление растяжению ткани. Чем выше значение, тем меньше ткань тянется.  
**По-человечески:** отвечает за то, насколько легко ткань «тянется» при движении персонажа. Если сделать слишком низким — ткань будет как резинка.

[![stretchResistance.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/c8XQphbUxpaE8G8n-stretchresistance.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/c8XQphbUxpaE8G8n-stretchresistance.gif)

### **Compression Resistance**

**Что это:** сопротивление сжатию ткани. Чем выше, тем сильнее ткань сопротивляется тому, чтобы стать «мятой».  
**По-человечески:** защищает от того, чтобы ткань не слипалась или не «скукоживалась» слишком легко.[![compressionResistance.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/F3fW8CBmYrlQ7YV2-compressionresistance.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/F3fW8CBmYrlQ7YV2-compressionresistance.gif)

### **Bend Resistance**

**Что это:** сопротивление сгибанию ткани. Большие значения сделают ткань жестче при попытках согнуть.  
**По-человечески:** регулирует мягкость ткани — как легко она ложится складками.

[![bendResistance.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/mUYbUPEvRicf1Tkl-bendresistance.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/mUYbUPEvRicf1Tkl-bendresistance.gif)

### **Shear Resistance**

**Что это:** сопротивление сдвигу слоёв ткани друг относительно друга (как врезание ткани под углом).  
**По-человечески:** влияет на стабильность формы ткани при сложных деформациях, например при скручивании.[![shearResistance.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/5h30RVsAFAHhE7kO-shearresistance.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/5h30RVsAFAHhE7kO-shearresistance.gif)

### **Input Mesh Attract**

**Что это:** сила, с которой симуляция пытается тянуть nCloth к исходной (анимированной) геометрии.  
**По-человечески:** «липкость» к ригу — чем выше значение, тем ближе ткань будет пытаться оставаться к анимации без сильного отрыва.

[![inputMeshAttract.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/ZAgcZmyGsMmROSY4-inputmeshattract.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/ZAgcZmyGsMmROSY4-inputmeshattract.gif)

### **Damp**

**Что это:** глобальное затухание движений ткани (демпфирование).  
**По-человечески:** уменьшает «дребезг» ткани и помогает быстрее остановить колебания.

[![damp.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/y3qxpPM0MZlQ0o7X-damp.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/y3qxpPM0MZlQ0o7X-damp.gif)

### **Lift**

**Что это:** параметр, определяющий подъём ткани при обтекании воздухом.  
**По-человечески:** ткань как бы парусит — влияет на то, насколько легко она будет «надуваться» и подниматься в воздух.

[![lift.gif](https://bookstack.yarko.com/uploads/images/gallery/2025-03/17PegdTor7U1jV6v-lift.gif)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/17PegdTor7U1jV6v-lift.gif)

### **Drag**

**Что это:** сопротивление ткани воздуху (аналог аэродинамического сопротивления).  
**По-человечески:** отвечает за то, как быстро ткань будет останавливаться в воздухе. Большое значение — будет тормозить даже при лёгких движениях.

---

## Настройки nucleus

### **Substeps**

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

### **Max Collision Iterations**

**Что это:** сколько раз ядро будет пересчитывать коллизии на одном кадре.  
**По-человечески:** влияет на качество расчёта столкновений. Больше итераций — меньше шансов, что ткань «провалится» сквозь объект.

### **Gravity**

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

### **Space Scale**

**Что это:** масштаб симуляции. Должен совпадать с реальными размерами сцены.  
**По-человечески:** если сцена в сантиметрах — оставляем значение по умолчанию (1.0), если в метрах — ставим меньше, например 0.01.

### **Time Scale**

**Что это:** общая скорость симуляции.  
**По-человечески:** можно замедлить или ускорить поведение ткани — влияет на динамику всей симуляции.

### **Wind Speed**

**Что это:** глобальная сила ветра.  
**По-человечески:** добавляет постоянный ветер во всей сцене.

### **Air Density**

**Что это:** плотность воздуха, влияет на drag и lift.  
**По-человечески:** чем выше значение, тем сильнее воздух будет влиять на ткань.

# Динамика на волосы и одежду

### **Основные этапы работы динамики**

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">1.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Выгонка <span lang="EN-US" style="mso-ansi-language: EN-US;">USD</span> кешей персонажей с Т-позой и камеры из анимационной сцены <span lang="EN-US" style="mso-ansi-language: EN-US;">c</span> межкадрами

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">2.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Загрузка кешей в сцену с динамическим билдом персонажа

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">3.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Просчет динамики одежды и волос. Отдельно считается каждая группа в том порядке что и в аутлайнере (кэши на шейпы в одной группе записываются вместе)

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/scaled-1680-/QPFDJXJMpRGhjTnS-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-05/QPFDJXJMpRGhjTnS-image.png)

<span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">4.<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Необходима выгрузка кеша в отдельный от анимации слой, для понимания того на какой стадии возникают проблемы (на анимации или на динамике)

**Необходимые функции для работы отдела динамики**

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

Кнопки:

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Create</span> <span lang="EN-US" style="mso-ansi-language: EN-US;">cache</span> (создающая папку под кеш динамического просчета)

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span><span lang="EN-US" style="mso-ansi-language: EN-US;">Delete</span> <span lang="EN-US" style="mso-ansi-language: EN-US;">cache</span> (удаляющая этот кеш)

<span style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Кнопка экспорта <span lang="EN-US" style="mso-ansi-language: EN-US;">USD</span> (выгружающая кеш из папки <span lang="EN-US" style="mso-ansi-language: EN-US;">OUTPUT</span>\_<span lang="EN-US" style="mso-ansi-language: EN-US;">GRP</span> в слой выше анимационного)

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2024-05/scaled-1680-/fFuRZmLEPZ5AgmaH-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2024-05/fFuRZmLEPZ5AgmaH-image.png)

<span lang="EN-US" style="font-family: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol; mso-ansi-language: EN-US;"><span style="mso-list: Ignore;">·<span style="font: 7.0pt 'Times New Roman';"> </span></span></span>Кнопки<span style="mso-ansi-language: EN-US;"> </span>деформеров<span lang="EN-US" style="mso-ansi-language: EN-US;"> (blandshape, cluster, rivet, delta mush, texture deformer)</span>

Соблюдение нейминга при экспорте кеша (***E01\_SQ010\_SH010\_Cloth\_Phil\_Cache***)

Нейминг деформеров (с чего кидается на что кидается (***pants\_PRX\_blandshape\_pants\_geo***)

Необходима возможность паблиша и загрузки в сцену с кешом билдов персонажей

# Время на симуляцию сцен CFX

#### Приблизительная статистика времени, необходимом на симуляцию сцен разной сложности.

##### **light** : до 50 кадров, 1 персонаж в сцене (статика, простая походка, мелкие движения) - 30 мин - 1час + клинап, при необходимости

##### **medium** : до 100 кадров, от 1-2 персов в сцене, более сложные движение (садится, разворачивается, быстрая походка, взаимодействие с другими персами и предметами) - 2 ч - 5 часа + клинап

##### **hard** : от 50 кадров и более, от 1 перса и более (быстрый бег, полет, падения, драки, прыжки, наличие ветра в сцене), сетап и симуляция дополнительных предметов под конкретный шот - от 3 часов до 2х дней + доп клинап

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

# CFX Пошаговые инструкции

# Инструкция 1.

### Использование mute на nucleus

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### **1. Выделяем два параллельных эйджа**

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

📸 **Скриншот:**  
[![Снимок экрана 2025-03-27 144208.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/ojPZrbXN2NLdYGCP-snimok-ekrana-2025-03-27-144208.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/ojPZrbXN2NLdYGCP-snimok-ekrana-2025-03-27-144208.png)

### **2. Используем следующий скрипт для rivet** 

```
// Copyright (C) 2000-2001 Michael Bazhutkin - Copyright (C) 2000 studio Klassika
// www.geocites.com/bazhutkin
// bazhutkin@mail.ru
//
//  Rivet (button) 1.0
//  Script File
//  MODIFY THIS AT YOUR OWN RISK
//
//  Creation Date:  April 13, 2001
//
//
//  Description:
//	Use "Rivet" to constrain locator to polygon or NURBS surfaces
//	Select two edges on polygon object
//	or select one point on NURBS surface and call rivet
//	Parent your rivets and buttons to this locator
 
global proc string rivet ( )
{
 
string $nameObject;
string $namePOSI;
 
string $parts[];
string $list[] = `filterExpand -sm 32`;
int $size = size($list);
if ($size > 0)
{
	if ($size != 2)
	{	error("No two edges selected");
		return "";
	}
 
	tokenize($list[0],".",$parts);
	$nameObject = $parts[0];
	tokenize($list[0],"[]",$parts);
	float $e1 = $parts[1];
	tokenize($list[1],"[]",$parts);
	float $e2 = $parts[1];
 
	string $nameCFME1 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge1"`;
		setAttr ".ihi" 1;
		setAttr ".ei[0]"  $e1;
	string $nameCFME2 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge2"`;
		setAttr ".ihi" 1;
		setAttr ".ei[0]"  $e2;
	string $nameLoft = `createNode loft -n "rivetLoft1"`;
		setAttr -s 2 ".ic";
		setAttr ".u" yes;
		setAttr ".rsn" yes;
 
	$namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`;
		setAttr ".turnOnPercentage" 1;
		setAttr ".parameterU" 0.5;
		setAttr ".parameterV" 0.5;
 
	connectAttr -f ($nameLoft + ".os") ($namePOSI + ".is");
	connectAttr ($nameCFME1 + ".oc") ($nameLoft + ".ic[0]");
	connectAttr ($nameCFME2 + ".oc") ($nameLoft + ".ic[1]");
	connectAttr ($nameObject + ".w") ($nameCFME1 + ".im");
	connectAttr ($nameObject + ".w") ($nameCFME2 + ".im");
}
else
{	$list = `filterExpand -sm 41`;
	$size = size($list);
 
	if ($size > 0)
	{
		if ($size != 1)
		{	error("No one point selected");
			return "";
		}
		tokenize($list[0],".",$parts);
		$nameObject = $parts[0];
		tokenize($list[0],"[]",$parts);
		float $u = $parts[1];
		float $v = $parts[2];
		$namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`;
				setAttr ".turnOnPercentage" 0;
				setAttr ".parameterU" $u;
				setAttr ".parameterV" $v;
		connectAttr -f ($nameObject + ".ws") ($namePOSI + ".is");
	}
	else
	{	error("No edges or point selected");
		return "";
	}
}
 
string $nameLocator = `createNode transform -n "rivet1"`;
createNode locator -n ($nameLocator + "Shape") -p $nameLocator;
 
string $nameAC = `createNode aimConstraint -p $nameLocator -n ($nameLocator + "_rivetAimConstraint1")`;
	setAttr ".tg[0].tw" 1;
	setAttr ".a" -type "double3" 0 1 0;
	setAttr ".u" -type "double3" 0 0 1;
	setAttr -k off ".v";
	setAttr -k off ".tx";
	setAttr -k off ".ty";
	setAttr -k off ".tz";
	setAttr -k off ".rx";
	setAttr -k off ".ry";
	setAttr -k off ".rz";
	setAttr -k off ".sx";
	setAttr -k off ".sy";
	setAttr -k off ".sz";
 
connectAttr ($namePOSI + ".position") ($nameLocator + ".translate");
connectAttr ($namePOSI + ".n") ($nameAC + ".tg[0].tt");
connectAttr ($namePOSI + ".tv") ($nameAC + ".wu");
connectAttr ($nameAC + ".crx") ($nameLocator + ".rx");
connectAttr ($nameAC + ".cry") ($nameLocator + ".ry");
connectAttr ($nameAC + ".crz") ($nameLocator + ".rz");
 
select -r $nameLocator;
return ($nameLocator);
 
}
 
rivet;
```

📸 **Скриншот:**

**[![Untitled-1.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/ZGsZ91KKdxGa8zED-untitled-1.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/ZGsZ91KKdxGa8zED-untitled-1.png)**

### **3. Переименовываем rivet в `Translater`**

Чтобы в будущем использовать его как драйвер трансформа, нужно дать понятное имя:  
`rivet1` → `Translater` (или `rivet_translate_ctrl`, `rivet_driver`, и т.п.)

📸 **Скриншот:**  
[![Untitled-2.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/7HoGXPAT9nbbLHWA-untitled-2.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/7HoGXPAT9nbbLHWA-untitled-2.png)

### **4. Выделяем Translater\_rivet и объект**

##### Cначала выбираем rivet ,к которому должен привязаться объект.

##### А потом геометрию или объект который мы хотим перемещать.

📸 **Скриншот:**  
[![Untitled-3.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/ReeI1eK2jmhtZBBE-untitled-3.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/ReeI1eK2jmhtZBBE-untitled-3.png)

### **5. Выбираем Constraint → Parent**

Rigging меню → `Constraint` → `Parent` Constraint

🔹 Открываем окно опций:  
`Rigging` &gt; `Constraint` &gt; `Parent` (с коробочкой справа от названия)

📸 **Скриншот:**  
[![Untitled-4.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/1S0rQJh0pG4pIkAf-untitled-4.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/1S0rQJh0pG4pIkAf-untitled-4.png)

#### **Очень важно!**  
Снимаем `✓ Maintain Offset`, чтобы объект точно следовал движению `Translater`, а не сохранял своё смещённое положение.

##### Жмём **apply**

### **6. Запускаем симуляцию**

Всё готово! Теперь `Translater` (rivet) двигается вместе с поверхностью, а привязанный объект точно следует за ним — можно запускать симуляцию.

# Инструкция 2.

### **Использование деформеров**

#### \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### **CLUSTER** [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/XnP2t86vvUKBG7aE-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/XnP2t86vvUKBG7aE-image.png)

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_**

##### Cluster — это деформер, который позволяет управлять выбранными вертексами и объектами (или CV) объекта через трансформ-ноду, как будто это контроллер.  
Очень удобно, если нужно:

- Убрать не нужный элемент из под камеры
- Анимировать выбранные точки для усиления эффекта симуляции
- Редактирования офсета геометрии друг с другом

### **1. Выделяем нужные точки на geo**

В режиме `Vertex` (F9 или ПКМ → Vertex), выдели одну или несколько вершин на геометрии, за которые ты хочешь тянуть или крепить объект.

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/wPYSabbem36MJyeT-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/wPYSabbem36MJyeT-image.png)

### **2. Создаём Cluster**

**[![Untitled-4.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Q5a14dleMZR63uJm-untitled-4.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Q5a14dleMZR63uJm-untitled-4.png)**

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/FVIpgBhFAkwzF3Oq-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/FVIpgBhFAkwzF3Oq-image.png)

### **3.Теперь можно активировать pivot cluster, нажав W и сдвинуть точки** 

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/PJY9QoIpSAC2Lbrt-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/PJY9QoIpSAC2Lbrt-image.png)

### **4.Ставим ключ на деформер**

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

**Поэтому мы идем в -30 кадр и выключаем наш cluster и ставим ключ**

**Правая кнопка мыши key selected**

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/YxQ2gqoDhjutlCvZ-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/YxQ2gqoDhjutlCvZ-image.png)

[![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/1kgHjIW8HB4w1mEG-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/1kgHjIW8HB4w1mEG-image.png)

Далее в -10 кадре включаем cluster в 1

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## **DELTA MUSH [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/mtlaDKN2cK3qyHMm-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/mtlaDKN2cK3qyHMm-image.png)**

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

Delta Mush — это деформер, который **плавно разглаживает деформации**, сохраняя при этом **форму оригинального меша**.  
Он отлично помогает, когда:

- меш после симуляции/скиннинга/блендшейпов выглядит угловато или дёргано;
- нужно **сгладить "жёсткий" результат** симуляции;
- нужно **"починить" артефакты** после неловкого blendShape или skinCluster.

### **1. Выдели геометрию, к которой хочешь применить сглаживание**

Это может быть:

- симулируемая ткань;
- результат blendShape;
- скининг с плохими весами;
- или даже просто анимированная гео.

### **2. Назначь на геометрию DeltaMush**

**[![Untitled-5.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Uqrm55QN5WZLRkdc-untitled-5.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Uqrm55QN5WZLRkdc-untitled-5.png)**

##### **2.1 Настроим параметры:**

<table data-end="1619" data-start="1278" id="bkmrk-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80-%D0%A7%D1%82%D0%BE-%D0%B4%D0%B5%D0%BB%D0%B0%D0%B5%D1%82-"><thead data-end="1303" data-start="1278"><tr data-end="1303" data-start="1278"><th data-end="1289" data-start="1278">Параметр</th><th data-end="1303" data-start="1289">Что делает</th></tr></thead><tbody data-end="1619" data-start="1330"><tr data-end="1411" data-start="1330"><td>**Smoothing Iterations**</td><td>Кол-во сглаживающих проходов (рекомендуется 10–30)</td></tr><tr data-end="1481" data-start="1412"><td>**Smoothing Step**</td><td>Насколько сильно сглаживать (0.5–1.0 — норм)</td></tr><tr data-end="1560" data-start="1482"><td>**Pin Border Vertices**</td><td>Закрепить граничные точки, чтобы они не сползали</td></tr><tr data-end="1619" data-start="1561"><td>**Envelope**</td><td>Масштаб влияния (как у всех деформеров)</td></tr></tbody></table>

### **3.Красим вес DeltaMush**

- Наводим на геометрию на которой назначен деформер
- Через правую кнопку выбираем paint -&gt;DeltaMush
- Выкрашиваем сначала вес в 0 по всей геометрии
- Красим нужную нам часть геометрии в 1 [![Untitled-6.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/Y53TCjLvHYlJlmfl-untitled-6.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/Y53TCjLvHYlJlmfl-untitled-6.png)

\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

### **BLANDSHAPE** [![image.png](https://bookstack.yarko.com/uploads/images/gallery/2025-03/scaled-1680-/X2becsmOIZUiSGGO-image.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-03/X2becsmOIZUiSGGO-image.png)

**\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_Blandshape** — это **деформер в Maya**, который позволяет **плавно смешивать форму одного меша в другой**.  
Работает на основе **индексов вершин**, то есть:  
**«вот исходный меш, вот целевая форма — двигай вертексы от A к B»**.

## Шаг 1: Подготовка объектов

1. Выбери объект, который этот объект станет источником Blend Shape (Source Object).
2. Выбери объект на который назначаешь blandshape. Этот будет служить целью деформации (Target Object).[![1.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/SxsqfPMUBUMjvrJM-1.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/SxsqfPMUBUMjvrJM-1.png)

## Шаг 2: Создание Blend Shape

1. В меню выберите:
    
    
    - **Deform → Blend Shape ☐** (с опциями).
2. В открывшемся окне настроек Blend Shape:
    
    
    - Убедитесь, что отмечены опции **"World"** и **"Check Topology"**.
    - Нажмите кнопку **Create**.[![2.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/2cPpItYPmutMw3el-2.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/2cPpItYPmutMw3el-2.png)

## Шаг 3: Проверка созданного Blend Shape

1. Выделите **Target Object**.
2. Откройте панель атрибутов (Attribute Editor).
3. Найдите вкладку **blendShape**, убедитесь, что Blend Shape создан и отображается корректно.[![3.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/Drvk2K3lgyhPaw5d-3.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/Drvk2K3lgyhPaw5d-3.png)

## Шаг 4: Подготовка к покраске весов (Weight Painting)

1. Кликните правой кнопкой мыши на **Target Object**.
2. В контекстном меню выберите пункт:
    
    
    - **Paint → BlendShape → (название созданного blendShape) → baseWeights[![4.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/Z9jjbUMbn3kGkYkW-4.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/Z9jjbUMbn3kGkYkW-4.png)**

## Шаг 5: Покраска весов

1. Используя кисть, окрасьте необходимые области модели, регулируя степень влияния BlendShape на выбранные участки.[![5.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/Q6psDXUsJUEHV48N-5.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/Q6psDXUsJUEHV48N-5.png)

# Инструкция 3

## Создание и покраска BLANDSHAPE  
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_

## Шаг 1: Подготовка объектов

1. Выбери объект, который этот объект станет источником Blend Shape (Source Object).
2. Выбери объект на который назначаешь blandshape. Этот будет служить целью деформации (Target Object).[![1.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/SxsqfPMUBUMjvrJM-1.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/SxsqfPMUBUMjvrJM-1.png)

## Шаг 2: Создание Blend Shape

1. В меню выберите:
    
    
    - **Deform → Blend Shape ☐** (с опциями).
2. В открывшемся окне настроек Blend Shape:
    
    
    - Убедитесь, что отмечены опции **"World"** и **"Check Topology"**.
    - Нажмите кнопку **Create**.[![2.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/2cPpItYPmutMw3el-2.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/2cPpItYPmutMw3el-2.png)

## Шаг 3: Проверка созданного Blend Shape

1. Выделите **Target Object**.
2. Откройте панель атрибутов (Attribute Editor).
3. Найдите вкладку **blendShape**, убедитесь, что Blend Shape создан и отображается корректно.[![3.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/Drvk2K3lgyhPaw5d-3.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/Drvk2K3lgyhPaw5d-3.png)

## Шаг 4: Подготовка к покраске весов (Weight Painting)

1. Кликните правой кнопкой мыши на **Target Object**.
2. В контекстном меню выберите пункт:
    
    
    - **Paint → BlendShape → (название созданного blendShape) → baseWeights[![4.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/Z9jjbUMbn3kGkYkW-4.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/Z9jjbUMbn3kGkYkW-4.png)**

## Шаг 5: Покраска весов

1. Используя кисть, окрасьте необходимые области модели, регулируя степень влияния BlendShape на выбранные участки.[![5.png](https://bookstack.yarko.com/uploads/images/gallery/2025-04/scaled-1680-/Q6psDXUsJUEHV48N-5.png)](https://bookstack.yarko.com/uploads/images/gallery/2025-04/Q6psDXUsJUEHV48N-5.png)