
В уроке 2 мы разложили по папкам файлы проекта, теперь раскладываем по веткам саму сцену. Строим дерево, в которое отделы потом сложат весь шот.

Дерево сцены одно на весь проект. Каждый объект лежит в своей ветке, и у каждой ветки есть хозяин.
1. Скелет, kind и purpose
Если у одного кораллы лежат в /World/Corals, а у другого в /Geometry, правка по одному пути не найдет их на другом. Поэтому ветки решаем заранее.
Дерево примов сцены называется сценграф, его показывает Scene Graph Tree. Пустое дерево веток, общее для всех сцен проекта, называется скелет (scaffold).

Справа на схеме хозяин ветки, то есть кто в нее пишет.
1. Наверху /World и шесть веток для ассетов.
2. Камеры и свет лежат в cameras и lights.
3. Второй корень /Render для настроек рендера, его наполним в уроке 8.
4. Ассет кладут внутрь своей ветки, коралл лежит в /World/env/corals.
В скелет поставили пять кораллов, kind виден по значку у строки.
1. Три звезды значат group, «здесь лежат объекты».
2. Синяя звезда значит component, это сам коралл.
3. У geo и mtl kind нет.
Group на всех ветках над ассетом до самого /World называют цепочкой моделей. Пока она целая, USD считает ассет моделью, цельным объектом.
У coral_mushroom в geo два меша, render в 25 629 точек и proxy в 1 148. Вьюпорт рисует легкий proxy, а Karma рендерит render.
Кому нужен прим, говорит его purpose. Прим с render нужен только рендеру, с proxy вьюпорту.
2. Сетап по нодам
Скелет собирает сцена $JOB/pipeline/activities/scaffold/<имя>/scaffold_v001.hip, вся сеть в /stage.
1. Primitive делает /World.
2. Вторая Primitive делает ветки для ассетов.
3. Третья делает cameras, lights и /Render.
4. Scene Doctor проверяет kind.
5. USD ROP пишет файл скелета.
Primitive создает примы по путям.
1. В Primitive Paths можно сразу несколько путей через пробел.
2. Primitive Kind ставим Group, по умолчанию там None.
3. В третьей ноде Primitive Kind оставляем None, а Primitive Type меняем на Scope.
Что это за прим, говорит его тип. Xform двигается вместе со всем, что внутри, а Scope это папка, ее не подвинуть.
Scene Doctor проверяет сцену перед записью. В пустом скелете ей ловить нечего, такую же поставим в сцену ассета в уроке 4.
1. У Kind ставим галку и Error.
2. Меню рядом оставляем Alert Only. С Fix Silently нода молча чинит kind, и поломки не видно.
3. Child Gprims включаем так же, она ловит лишний прим внутри меша.
С error сломанная сцена до файла не дойдет.
USD ROP пишет скелет.
1. В Output File пишем $JOB/pipeline/templates/scaffold/v001/scaffold_v001.usda.
2. В Layer Metadata › Default Primitive пишем /World.
3. Save ROP’s Time Information to Output выключаем, кадры задает шот.
Default Primitive пишет в файл defaultPrim, главный прим файла. Его берет ссылка без пути прима, это урок 6.
3. Проверяем
Рвем цепочку в сцене учебного проекта corals_check_v002.hip. Configure Primitive правит готовый прим.
1. В Primitives пишем /World/env/corals.
2. У Kind ставим галку и выбираем None.
3. Ставим флаг отображения на Scene Doctor. Рядом загорается красный значок, и нода пишет по ошибке на каждый коралл.
Одна ветка без group, и ассет уже не модель.
4. Практическое задание
Задача. Собрать скелет своего проекта и записать его в $JOB/pipeline/templates/scaffold/v001/. Ветки урока взять все, свои можно добавить. Составить таблицу хозяев веток.
Что сдать. Рабочую сцену, scaffold_v001.usda и таблицу.
Засчитано, если
1. Скелет открывается в новой сцене одной SubLayer, defaultPrim указывает на World.
2. У /World и шести веток для ассетов kind group.
3. У cameras, lights и /Render тип Scope, /Render лежит рядом с /World.
4. Перед USD ROP стоит Scene Doctor, Kind и Child Gprims на Error и Alert Only.
5. У каждой ветки есть хозяин в таблице.
Скелет готов, у каждой ветки есть хозяин. Дальше делаем первый ассет, коралл, и он ляжет в свою ветку.



