Атрибуты и синтаксис @: поля структур
core Прочитать значение стандартного атрибута и создать собственный именованный атрибут нужного типа
Атрибут — это типизированное поле, привязанное к элементу геометрии (point/primitive/vertex/detail), примерно как поле структуры в C, только оно может добавляться и удаляться динамически, сразу для всего массива элементов. Атрибуты «текут» вниз по сети нод: любая нода ниже может их прочитать, изменить или использовать для управления своей операцией. У Houdini есть набор атрибутов «по конвенции», которые ноды понимают автоматически, и есть возможность создавать свои.
Стандартный набор:
@P— vector3, позиция точки (обязателен)@N— vector3, нормаль (может жить на точках, вершинах, примитивах)@Cd— vector3, цвет (0..1 на канал)@pscale— float, масштаб точки (его читает, например, Copy to Points при инстансинге)@ptnum— int, встроенный read-only индекс точки в массиве — это не хранимый атрибут, а аналог индексаiв циклеfor (i = 0; i < N; i++)
Свои атрибуты создаются либо нодой Attribute Create (имя, класс, тип, значение через параметры), либо в VEX (обычно в Attribute Wrangle) через префикс типа перед @:
i@id = @ptnum; // int
f@weight = 0.5; // float
v@dir = {1, 0, 0}; // vector3
s@tag = "hero"; // string
Тип атрибута фиксируется этим префиксом при первой записи — так же, как объявление типа переменной в C.
Разобранный пример
Задача: сделать градиент цвета по индексу точки — от красного к синему.
Рассуждение: нужна нормализованная величина 0..1 из @ptnum, для чего нужен общий счётчик точек — встроенная переменная @numpt. Дальше просто линейная интерполяция каналов цвета.
float t = float(@ptnum) / (@numpt - 1);
f@weight = t;
@Cd = set(t, 0, 1 - t);
Здесь f@weight — новый именованный атрибут (пригодится другим нодам ниже по цепочке), а @Cd — стандартный атрибут, который сразу подхватывается вьюпортом и рендером без дополнительных нод.
Попробуй сейчас
Создай Grid SOP → Attribute Wrangle. В коде создай f@dist = length(@P);, затем раскрась @Cd = set(f@dist, f@dist, f@dist);. Открой Geometry Spreadsheet, найди колонку dist на вкладке Points и проверь, что значение растёт от центра к краям грида.
Ожидаемый результат: в спредшите виден новый столбец dist типа float, а во вьюпорте — градиент серого от центра к краям.
Получилось, если…
Ты можешь, глядя на столбец в Geometry Spreadsheet, назвать его тип (int/float/vector/string) по префиксу, которым он был создан в VEX, и написать одну строку кода, создающую новый атрибут нужного типа.
Вывод
Атрибут = типизированное поле на элементе геометрии; префикс в VEX (i@, f@, v@, s@) задаёт тип. @P/@N/@Cd/@pscale — зарезервированные по конвенции имена, всё остальное — твои собственные каналы данных для управления нодами дальше по цепочке.
AI-generated · source-grounded review
🛡 Fact-checked: 4 risky claims verified · 1 removed · confidence: high · figures: 1
A second opinion has not checked this lesson.
On your own course these buttons answer instantly, quizzes track what you've mastered, and lessons adapt to your gaps. Write my course