Skip to main content

Atributos e Tipos em VEX

Tip

Atributo é o sistema de dados do Houdini. Tudo que você faz em VEX é essencialmente criar, ler ou modificar atributos. Entender os tipos e escopos é fundamental.

o sistema de atributos

Atributos são dados associados a elementos da geometria. Eles têm:

  • nome, identificador (ex: P, Cd, pscale)
  • tipo, float, vector, int, string…
  • escopo, em qual nível da geometria existem

escopos de atributo

prefixoescopoo que representa
@Pointum valor por ponto
prim@Primitiveum valor por face/primitiva
vtx@Vertexum valor por vértice (aresta-ponto)
detail@Detailum único valor para o objeto inteiro
// Atributo de ponto (padrão com @):
@meuatributo = 1.5;
// Atributo de primitiva:
prim@meuatributo = 1.5;
// Atributo de detail (global):
detail@meuatributo = 1.5;

declarando tipos

O Houdini infere o tipo pelo valor, mas você pode declarar explicitamente:

float @escala = 1.0;
vector @cor = {1, 0, 0};
int @id = 0;
string @nome = "objeto_A";

Sem declaração explícita, @attr = 1.0 cria float, @attr = {1,0,0} cria vector.

componentes de vector

Vetores têm componentes acessíveis com .x/.y/.z ou [0]/[1]/[2]:

@P.y += 2.0; // move 2 unidades em Y
@P.x = @P.x * 0.5; // comprime em X
@Cd.r = 1.0; // canal vermelho = 1
@Cd[2] = 0.5; // canal azul = 0.5 (mesmo que @Cd.b)

funções úteis para atributos

// Normaliza um vetor para comprimento 1:
@N = normalize(@N);
// Comprimento de um vetor:
float dist = length(@P);
// Produto escalar:
float dot = dot(@N, {0, 1, 0});
// Cross product:
vector cross = cross(@N, {1, 0, 0});
// Clamp (limita valor a um range):
@pscale = clamp(@pscale, 0.1, 2.0);
// Mistura linear entre dois valores:
@Cd = lerp({1,0,0}, {0,0,1}, 0.5); // roxo

lendo atributos de outros pontos

// Lê o atributo de outro ponto pelo índice:
vector outraPosicao = point(0, "P", 5); // geometria 0, atributo "P", ponto 5
// Lê da geometria de entrada 1 (segunda entrada do nó):
vector pos = point(1, "P", @ptnum);

geometry spreadsheet para debug

Info

Sempre que algo não funciona como esperado, abre o Geometry Spreadsheet (Alt+8): seleciona o nó Wrangle (ou o nó depois dele) e vê os valores de cada atributo em cada ponto.

É o equivalente ao console do after, mas muito mais visual.