UpPetto

This is a real course generated by UpPetto — unedited.

AI-generated. Two models wrote it, a third checked every risky claim against sources, a fourth re-checked.

Create my own course

Атрибуты и синтаксис @: поля структур

core Прочитать значение стандартного атрибута и создать собственный именованный атрибут нужного типа

Атрибут — это типизированное поле, привязанное к элементу геометрии (point/primitive/vertex/detail), примерно как поле структуры в C, только оно может добавляться и удаляться динамически, сразу для всего массива элементов. Атрибуты «текут» вниз по сети нод: любая нода ниже может их прочитать, изменить или использовать для управления своей операцией. У Houdini есть набор атрибутов «по конвенции», которые ноды понимают автоматически, и есть возможность создавать свои.

Стандартные атрибуты Houdini соответствуют полям структуры точки в C.
Стандартные атрибуты Houdini соответствуют полям структуры точки в C.

Стандартный набор:

  • @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
[verified] Стандартные атрибуты @P (позиция), @N (нормаль), @Cd (цвет 0..1), @pscale (масштаб для инстансинга), @ptnum (read-only индекс)
База знаний явно перечисляет @P, @Cd, @ptnum, @N и роль атрибутов как полей данных; @pscale — стандартный атрибут инстансинга
[verified] SVG-схема: поля struct Point (P, N, Cd, pscale) соответствуют @P/@N/@Cd/@pscale
Соответствует модели 'геометрия = массив структур, атрибуты = поля' из базы
[verified] Префиксы i@/f@/v@/s@ в VEX задают тип создаваемого атрибута
База описывает синтаксис @ и типы VEX (float, int, vector, string)
[verified] Встроенная переменная @numpt даёт общее число точек в Attribute Wrangle
Согласуется с описанием индексных/встроенных @-переменных VEX в базе
[removed] Не переносил mermaid-схему Attribute Create из версии B: её синтаксис стрелки был некорректен ('--_'), а содержание дублирует текст

A second opinion has not checked this lesson.

Key concepts: атрибуты синтаксис @ @P/@N/@Cd/@pscale типы атрибутов
Tell me more 🔒 Didn't understand — explain simply 🔒 Show examples 🔒 Sources 🔒

On your own course these buttons answer instantly, quizzes track what you've mastered, and lessons adapt to your gaps. Write my course

Check yourself

1. Что определяет тип атрибута при его создании в VEX?
2. Чем @ptnum отличается от обычного хранимого атрибута?
3. Какой стандартный атрибут на точках читает Copy to Points, чтобы управлять размером копий?
4. Какой атрибут отвечает за позицию точки и является обязательным для геометрии?
On your own course, these are marked as you answer