Атрибуты как основа: типы, классы, перенос и Attribute Wrangle
В прошлой статье про геометрию в SOP мы разобрали, что в Houdini существуют points, vertices, primitives и detail, а также что группы помогают выбирать части геометрии процедурно. Теперь сделаем следующий шаг: разберём атрибуты как главный «носитель смысла» в Houdini.
Почти любая процедурная система в Houdini строится так:
Вы создаёте или импортируете геометрию.
Вы добавляете атрибуты (маски, направления, идентификаторы, параметры поведения).
Другие ноды читают эти атрибуты и на их основе делают моделинг, рассеивание, деформации, подготовку под симуляции и рендер.Официальная база по теме:
Attributes (модель данных Houdini)
Attribute Wrangle SOP
Attribute Transfer SOP
Attribute Promote SOP
VEX (общее описание и справочник)!Схема классов атрибутов и типичных данных на каждом классе
Что такое атрибут и зачем он нужен
Атрибут — это именованное поле данных, которое хранится на одном из классов геометрии (point, vertex, primitive или detail) и может быть прочитано/изменено другими нодами.
Важная практическая мысль: Houdini не «помнит ваши действия», он каждый раз пересчитывает результат сети (cooking), а атрибуты — это то, что путешествует по проводам между нодами и делает сеть управляемой. Это напрямую продолжает идею процедурного мышления и non-destructive workflow из предыдущей статьи.
Примеры того, что часто хранится в атрибутах:
маски (где воздействовать сильнее/слабее)
идентификаторы (чтобы различать элементы)
параметры инстансинга (размер, ориентация, выбор варианта)
скорости и направления (для динамики, motion blur, направленных эффектов)
данные шейдинга (цвет, UV, material path)Классы атрибутов: point, vertex, primitive, detail
Класс атрибута отвечает на вопрос: к чему именно привязано значение? Это критично, потому что одинаковое имя атрибута на разных классах может вести себя по-разному.
| Класс | Где хранится | Краткий смысл | Типичные атрибуты |
|---|---|---|---|
| Point | на точках | значение общее для всех примитивов, использующих точку | P, N, Cd, v, pscale |
| Vertex | на вершинах (углах полигонов) | значение может отличаться на разных полигонах, даже если точка общая | uv, иногда N |
| Primitive | на полигонах/кривых/прочих примитивах | значение общее для целого примитива | name, shop_materialpath |
| Detail | одно значение на всю геометрию | глобальная настройка/служебная метка | iteration, seed, строки с путями |
Практические правила, которые экономят часы:
Если вам нужны разрывы UV и разные UV на соседних полигонах, uv почти всегда должен быть vertex-атрибутом.
Если вам нужно «имя куска» после фрактура, name почти всегда удобнее хранить как primitive-атрибут.
Если вы хотите управлять эффектом «по точкам» (например, рассеивание или маска деформации), используйте point-атрибут.
Если значение одно на весь объект (например, общий seed), используйте detail-атрибут.Типы атрибутов: что именно хранится внутри
У атрибута есть тип данных. В Houdini чаще всего встречаются:
| Тип | Что хранит | Пример |
|---|---|---|
| Integer | целое число | i@class, i@id |
| Float | число с дробью | f@mask, f@pscale |
| Vector3 | 3 float-компоненты | v@N, v@v, v@Cd |
| Vector2 | 2 float-компоненты | v@uv (часто как 2 или 3 компоненты в зависимости от пайплайна) |
| String | строка | s@name, s@path |
Где смотреть атрибуты в сцене:
Откройте Geometry Spreadsheet.
Переключайте вкладки классов (Points, Vertices, Primitives, Detail).
Сравнивайте, на каком классе реально появился атрибут.Создание и редактирование атрибутов в SOP
Есть два подхода, и обычно вы комбинируете их.
Нодовый подход
Вы используете специализированные SOP-ноды для предсказуемых операций.
Примеры типичных нод (не исчерпывающий список):
Attribute Create для создания простых атрибутов константой
Attribute Noise для масок и процедурных вариаций
Normal для генерации N
UV Texture и похожие ноды для UVПлюс нодового подхода: легче читать новичку и проще поддерживать стандарты в команде.
«Кодовый» подход через Attribute Wrangle
Вы пишете короткие выражения на VEX, когда:
Нужно вычисление, которое неудобно собирать готовыми нодами.
Нужно быстро прототипировать логику.
Нужна точная работа с типами, условиями, циклами, строками.Wrangle остаётся частью процедурной сети: это не «разрушающий скрипт», а такой же узел с параметрами и входами.
Перенос атрибутов между классами: Attribute Promote
Частая ситуация: атрибут существует, но на неправильном классе для следующей операции.
Пример: вы получили uv как point-атрибут, а вам нужен vertex-атрибут для корректных разрывов.
Для этого используют Attribute Promote:
Attribute Promote SOPЧто важно понимать: при переносе между классами Houdini должен решить, как агрегировать значения.
Типичные режимы (смысловые, названия в UI могут отличаться по контексту):
При переносе point → primitive обычно возникает вопрос: что делать, если у полигона несколько точек с разными значениями.
При переносе primitive → point обычно возникает вопрос: что делать, если точка принадлежит нескольким полигонам с разными значениями.Поэтому у Promote всегда есть метод:
усреднить
взять минимум/максимум
взять первое значение
и другие вариантыПрактическая привычка: после Promote сразу проверяйте результат в Geometry Spreadsheet, иначе можно «тихо» получить неверные данные.
Перенос атрибутов между разными геометриями: Attribute Transfer
Когда у вас есть два разных потока геометрии, часто нужно перенести атрибуты с одного на другой.
Классический пример:
На высокополигональной модели вы создаёте красивую маску mask (например, шумом или рисованием).
На лоуполи модели вы хотите иметь эту же маску, чтобы управлять деформацией или материалом.Для пространственного переноса по расстоянию используется:
Attribute Transfer SOPКлючевая идея: перенос строится не «по истории», а по геометрическому соответствию.
Параметры, о которых обычно думают в первую очередь:
Какие атрибуты переносить.
На каком расстоянии влияние начинает и заканчивает действовать.
Нужна ли плавная зона смешивания (falloff).Практический нюанс: Attribute Transfer хорош, когда формы находятся близко и перенос «по расстоянию» логичен. Если вам нужно строгое соответствие «точка к точке» или «по ID», обычно выбирают другие методы (например, построение стабильной топологии, явные соответствия, специализированные деформеры), но это уже отдельная тема.
!Иллюстрация пространственного переноса атрибутов по расстоянию
Attribute Wrangle: самая полезная «точка входа» в VEX
Attribute Wrangle — SOP-нода, которая выполняет VEX-код над элементами геометрии.
Attribute Wrangle SOPГлавное, что нужно понять на старте:
Wrangle выполняется много раз — по одному разу для каждого элемента выбранного класса.
Вы сами выбираете режим: Run Over Points / Vertices / Primitives / Detail.
Внутри кода вы читаете и пишете атрибуты.Синтаксис доступа к атрибутам: @
В VEX в Wrangle атрибуты часто читаются и пишутся через @.
Примеры:
@P — позиция точки (обычно point-атрибут)
@N — нормаль
@Cd — цветЕсли атрибут ещё не существует, его можно создать записью, но полезно указывать тип явно через префиксы:
f@mask — float
i@id — int
v@dir — vector
s@name — stringПример: создать маску по высоте
Wrangle в режиме Run Over Points:
Что происходит:
Для каждой точки читается её @P.
Берётся компонент y.
Записывается f@mask как 0 или 1.Такой атрибут потом можно использовать в других нодах как группа по выражению, как множитель силы деформации, как маску шума.
Пример: покрасить точки по маске
Здесь set(r,g,b) создаёт vector из трёх float-компонент.
Пример: случайный размер для инстансинга
Идея:
@ptnum — индекс точки.
rand() выдаёт псевдослучайное число в диапазоне 0..1.
fit01(x, a, b) переводит 0..1 в диапазон a..b.Справочник функций VEX:
VEX functionsВходы Wrangle: откуда брать вторую геометрию
У Attribute Wrangle есть несколько входов. Базовая практика:
Первый вход — геометрия, которую вы изменяете.
Второй и далее — геометрии для чтения (референсы).Это важно для процедурности: вместо того чтобы «вбивать» значения руками, вы можете считывать их с другой ветки сети.
Типовые ошибки новичков и как их избегать
Путаница point и vertex на UV.
Атрибут создан, но на неправильном классе, и следующая нода его «не видит».
Promote сделал «усреднение», и данные стали не тем, чем вы думали.
Wrangle работает не в том режиме Run Over.Мини-чеклист отладки:
Проверьте Display-флаг на нужной ноде.
Откройте Geometry Spreadsheet и убедитесь, что атрибут существует и на нужном классе.
Если используете Promote или Transfer, сравните значения до/после на нескольких элементах.Как атрибуты связывают SOP с остальными контекстами
Эта статья закрывает фундаментальную связку курса:
В SOP вы создаёте геометрию и атрибуты.
В DOP симуляции почти всегда опираются на атрибуты (скорость v, плотности, маски эмиссии, ограничения, ID).
В VOP и шейдинге атрибуты становятся входами для материалов.
В LOP/USD многие свойства сцены приходят из подготовленных данных и именований, которые вы аккуратно делаете в SOP.Если вы научитесь уверенно управлять типом, классом, переносом и вычислением атрибутов через Wrangle, Houdini перестанет быть набором «магических нод» и станет понятной системой преобразования данных.