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
| prefixo | escopo | o que representa |
|---|---|---|
@ | Point | um valor por ponto |
prim@ | Primitive | um valor por face/primitiva |
vtx@ | Vertex | um valor por vértice (aresta-ponto) |
detail@ | Detail | um ú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); // roxolendo 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.