big

В обычной сцене Houdini вся работа лежит в одном .hip, и править его одновременно может только один человек. В USD сцену собирают из слоев, у каждого отдела свой файл. Сегодня разберем, чья правка побеждает, и запишем свою отдельным слоем.

big
Исходный размер 3840x2020

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

1. Стопка слоев

В Solaris сцена собирается из слоев, как стопка калек. Нода SubLayer кладет файлы друг на друга по списку, каждый следующий поверх, поэтому сильнее всех последний.

Слои друг над другом называются стопкой слоев (layer stack), а подключение файла в стопку целиком называется sublayer.

big
Исходный размер 3840x2020

Коралл coral_mushroom из учебного проекта лежит в трех слоях. Слой geo пишет форму, mtl материал, xform место. Каждый пишет свое, поэтому порядок им не важен.

Атрибут хранит одно значение прима, например сдвиг. Значение атрибута в одном слое называется мнением (opinion).

Исходный размер 3840x2020

Собираем коралл в двух нодах SubLayer.
1. Файлы идут geo, mtl, xform.
2. Те же файлы в обратном порядке.

Коралл в обоих случаях один и тот же.

Слои это лишь один из способов собрать сцену. Порядок их силы называют LIVERPS, по букве на способ. В курсе нужны L, слои, и R, ссылки из урока 6.

2. Сетап по нодам

Исходный размер 3840x2020

В шоте место ассета обычно задает отдел лейаута, своим слоем поверх ассета. Такой слой пишем и мы, цифры показывают порядок нод.
1. SubLayer собирает коралл из трех слоев ассета.
2. Layer Break отрезает все, что выше. В наш файл попадет только правка.
3. Edit Properties двигает коралл.
4. USD ROP записывает слой.

Исходный размер 3840x2020

Edit Properties правит атрибуты прима.
1. Кнопка Edit Properties открывает окно. Из coral_mushroom перетаскиваем xformOp: translate в Existing Parameters и жмем Accept.
2. В Primitives путь коралла /World/env/corals/coral_mushroom, он виден в дереве.
3. Compute Extent Attribute выключаем, иначе в слой запишутся габариты коралла.
4. В xformOp: translate пишем новое место.

xformOp это сдвиг, поворот и масштаб, записанные обычными атрибутами прима. Сдвиг хранит xformOp: translate.

Исходный размер 3840x2020

USD ROP пишет свой слой.
1. В Output File пишем $HIP/layout_XXX.usda, рядом со сценой.
2. Жмем Save to Disk.

В файле только правка, одна строка со сдвигом.

def значит, что слой создает прим, так geo создает коралл. over только правит прим, созданный в другом слое.

Вопрос на подумать. Где встанет коралл, если положить свой слой в SubLayer первым?

3. Проверяем

Исходный размер 3840x2020
Исходный размер 3840x2020

Сдвиг пишут два слоя, xform и наш.
1. Свой слой последний, он сильнее xform, и коралл встает на новое место.
2. Свой слой первый, его перебивает xform, и коралл стоит на месте из ассета. Это ответ на вопрос.

Поворот и материал те же, наш слой их не пишет.

Свой слой кладем выше слоя, который он правит. В SubLayer это значит дальше по списку.

4. Практическое задание

Задача. Собрать коралл coral_mushroom из трех слоев учебного проекта в двух порядках, слои лежат в $JOB/assets/Environment/Corals/coral_mushroom/publish/usd/. Записать свой слой лейаута, который двигает коралл, и проверить его в стопке последним и первым.
Что сдать. Сцену, свой слой и два снимка вьюпорта.
Со звездочкой. Повернуть коралл тем же слоем и найти, с каким слоем ассета он спорит.

Засчитано, если
1. В обоих порядках трех слоев коралл один и тот же.
2. В своем слое только over с новым xformOp, без def.
3. Свой слой последним двигает коралл, первым не двигает.
4. Слои ассета не изменились, свой слой лежит рядом со сценой.

Частые ошибки. В своем слое нет ни одного прима, значит, Edit Properties стоит выше Layer Break.

В своем слое строка subLayers со слоями ассета, значит, перед Edit Properties нет Layer Break.

Коралл не сдвинулся, значит, свой слой стоит в списке SubLayer раньше xform.

Дальше разберем, где хранить слои и как их называть.