big
Атрибуты и переменные

Этот раздел посвящён важнейшим инструментам процедурного моделирования в Houdini FX — атрибутам и переменным.

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

Референсы

В этом разделе мы продолжим усовершенствовать наш ассет и сосредоточимся на создании вариативности внутри его элементов.

big
Original size 2514x1795
big
Original size 3839x2500

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

Атрибуты

В Houdini большинство операций с геометрией сводятся к работе с атрибутами — данными, прикрепленными к точкам, примитивам, вершинам или объекту в целом, обозначаемыми знаком @. Например, эти данные могут описывать цвет (@Cd), положение (@P), uv координаты (@uv) или нормали (@N).



Большинство операций, выполняемых в процессе моделирования, затрагивают именно эти данные. Например, ноды-модификаторы, такие как Transform, Bend или Mountain, изменяют значение атрибута @P, который отвечает за положение геометрии в 3D-пространстве.

При работе с атрибутами важно понимать, что каждый из них принадлежит к определённому классу в зависимости от уровня геометрии, к которому он относится:

Original size 1754x1240

Кроме класса, атрибуты различаются по типу данных. Разные типы данных позволяют описывать разные свойства геометрии: например, float удобно использовать для масштабов или веса, int — для счётчиков и индексов, vector — для координат и направлений, а string — для имён или путей к файлам. Верно указанный тип атрибута помогает Houdini понимать, как обращаться с данными и какие операции можно к ним применять.

Original size 1754x955

Атрибуты, которые есть на геометрии, можно просмотреть в детализированном формате в Geometry Spreadsheet или визуализировать во viewport, нажав на название атрибута в Info.

Original size 1600x1080

Создание и изменение

Создавая новые атрибуты важно помнить, что в Houdini существуют «зарезервированные» имена, которые автоматически считываются некоторыми нодами. При создании собственных атрибутов лучше не использовать эти названия, во избежание конфликтов имен.

Среди таких атрибутов f@pscale — единый коэффициент масштабирования. Как и для другие атрибутов, значения @pscale можно быстро задать с помощью ноды Attribute Create, через короткий код в Attribute Wrangle, или с помощью нескольких нод в Attribute VOP.

0

Способы создания атрибута f@pscale

С помощью атрибутов можно внести естественную вариативность
в модель, например, варьируя размер лепестков и тычинок.

Например, выражение rand (@ptnum) сгенерирует псевдослучайное значение от 0 до 1 для каждой точки, основываясь на её уникальном номере (@ptnum). Так, каждая точка получит своё индивидуальное значение, но результат будет детерминированным — при одинаковом входе @ptnum результат работы rand () всегда будет одинаков.

0

Способы задания рандомного атрибута f@pscale

Внутри параметров также удобно обращаться к глобальным переменным (Global Variables) вроде времени ($T), номера кадра ($F) или номера точки ($PT).

Например, выражения rand (@ptnum) и rand ($PT) аналогичны, при использовании их в Attribute Create они зададут одинаковые значения атрибута f@pscale.

Original size 1600x1080

Чтение и передача

При работе с объектами, состоящими из нескольких частей, свойства различных элементов часто оказываются взаимосвязаны. Например, на референсах ниже можно заметить, что борозды и неровности на лепестках расположены неравномерно — у космеи они наиболее выражены в области, более близкой к центру бутона. Мы можем повторить этот эффект с помощью передачи атрибутов.

Используя ноду Attribute Transfer можно перенести атрибут (f@mask) с центральной части на лепестки на основе расстояния, и использовать его в качестве маски для деформации. Аналогичного результата можно добиться, используя Distance from Geometry в режиме Output Mask.

Атрибуты и параметры

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

Один лепесток можно легко деформировать с помощью ноды Bend, но если применять к каждому лепестку одну и ту же деформацию, результат будет выглядеть неестественно. Для создания индивидуальной формы для каждого элемента, используем атрибуты в связке с parameter expressions.

На основе облака точек с атрибутом f@grad (в диапазоне от 0 до 1), в ноде Attribute Adjust Float создадим атрибут f@bend.

После этого f@bend можно считать в ветке с геометрией лепестка с помощью выражения:

point(»./foreach_In», 0,«myAttribute», 0)

В этом сетапе, значение f@bend будет индивидуальным для каждой копии (в рамках указанного в Attribute Adjust Float диапазона), и, при применении в ноде-деформере bend, создаст индивидуальный угол сгиба для каждого лепестка.

Original size 1520x1026

Оптимизация

По мере усложнения сцены важно не перегружать её лишними данными, которые могут влиять на производительность. В процессе работы рекомендуется:

  • Следить за типами данных Атрибуты типа vector или string занимают больше памяти, чем float или int. Когда возможно, лучше обойтись меньшими объёмами данных.
  • Контролировать распространение атрибутов При использовании нод, таких как Merge, Boolean или Copy to Points, важно следить за тем, какие атрибуты наследуются от исходной геометрии, чтобы не перенести лишние данные.
  • Удалять ненужные атрибуты Если какой-либо атрибут больше не используется, удаляйте его с помощью Attribute Delete. Это особенно важно при подготовке финальной геометрии для экспорта или передачи на следующую стадию пайплайна.

Автоматизация

Когда ассет готов и основные параметры вариативности настроены, следующий шаг — создание нескольких моделей бутона с разной степенью раскрытия и лёгкими отличиями в форме лепестков. Менять параметры и экспортировать каждую версию вручную было бы неэффективно — вместо этого можно автоматизировать процесс с помощью контекста TOP (Task Operators).

TOPs (или PDG — Procedural Dependency Graph) позволяет управлять задачами и процессами: например, с помощью него мы можем запускать одно и тот же дерево нод несколько раз, подставляя разные значения параметров и записывая результат на диск.

post

В качестве вариативных параметров нашего ассета будут выступать:

  • Степень изгиба лепестков
  • Рисунок шума, определяющего помятости и заломы

Для начала создадим EXISTING_LINK_0_1761388221600_t4awo1×9x и переместимся внутрь. Нода Wedge, которую мы будем использовать для генерации вариантов параметров, создаёт несколько задач (workitems), каждая из которых содержит уникальные значения заданных атрибутов. Зададим следующие настройки:

  • Wedge Count: 3
  • @pdg_bend: значения от 0 до 1
  • @pdg_noiseOffset: значения от 1 до 10

После нажатия ПКМ → Generate Node, появляются три задачи (workitems), каждая со своим набором параметров. Наведя курсор на точку можно увидеть, какие значения были сгенерированы для @pdg_bend и @pdg_noiseOffset, а также номер задачи — @pdg_index.

Original size 1600x1080

Атрибуты внутри TOPs имеют свой контекст использования — они служат для управления процессами и задачами, а не геометрией

post

Созданные атрибуты теперь можно подставить в Attribute Adjust Float → Adjustment Value. При переключении активного workitem внутри TOPs значения будут автоматически подставляться в нодграф, а геометрия обновляться.

Original size 1600x1080
post

Чтобы записать результат на диск, подключим ROP Geometry Output.
В параметре SOP Path указывается путь к конечной геометрии (например, ././Out_geo), а в Output File — динамическое имя файла.

$HIP — это переменная среды (Environment Variable), которая используется для сокращенной записи директории для файла, в котором мы работаем. @pdg_index — это атрибут, который позволит сохранить каждый вариант модели с уникальным именем, соответствующим номеру workitem:

$HIP/Assets/Bud_`@pdg_index`.bgeo.sc

Generate & Cook Node

Чтобы записать модели на диск, остается нажать ПКМ на ROP Geometry OutputCook Node. Эта команда:

  1. Создаёт отдельную задачу на каждый набор параметров
  2. Просчитывает нодграф с подстановкой атрибутов из Wedge
  3. Сохраняет на диск каждый полученный вариант с уникальным именем
Original size 1600x1080

Так, с помощью TOPs мы сгенерировали и экспортировали несколько моделей, готовых для дальнейшего использования в лэйауте.

Original size 1920x1380

Задание

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

Результат Набор итоговых моделей, .hip-файл проекта

Полезные ссылки

Атрибуты и переменные
6
We use cookies to improve the operation of the website and to enhance its usability. More detailed information on the use of cookies can be fo...
Show more