Skip to main content

Attribute Wrangle

Tip

O Attribute Wrangle é onde você escreve VEX no Houdini. É o nó mais poderoso e mais usado no contexto SOP: você vai usá-lo em praticamente todo projeto.

o que é o Attribute Wrangle

O Attribute Wrangle (Tab > Attribute Wrangle) aceita geometria como entrada e roda VEX em cada elemento dessa geometria. O código que você escreve no campo VEXpression é executado em paralelo em todos os pontos (ou primitivas, ou vértices, ou o detail).

Parâmetros principais:

  • Run Over, em qual nível roda: Points, Primitives, Vertices, Detail, Numbers
  • VEXpression, onde você escreve o código

run over, escolhendo o nível

run overquando usar
Pointsmodificar posição, cor, escala de pontos
Primitivesmodificar grupos, propriedades por face
Detailcalcular um valor global para o objeto
Numbersroda N vezes sem geometria (gera pontos)

Para a maioria dos casos de motion design: Points.

primeiro wrangle

usando parâmetros do nó

Em vez de hardcodar valores, cria parâmetros com ch():

// ch() cria um slider float:
float altura = ch("altura");
@P.y += altura;
// chv() cria um vector:
vector offset = chv("offset");
@P += offset;
// chi() cria um slider int:
int repeticoes = chi("repeticoes");

Info

No painel do nó, o botão + aparece ao lado do parâmetro recém criado. Clica para adicionar à interface e pronto: slider no nó.

múltiplas entradas

O Attribute Wrangle tem 4 entradas (input 0, 1, 2, 3). Você acessa geometria de entradas diferentes:

// Lê posição do ponto correspondente na entrada 1:
vector refPos = point(1, "P", @ptnum);
float dist = length(@P - refPos);
@Cd = set(dist / 5, 0, 0);

Isso permite comparar ou misturar dados de duas geometrias diferentes no mesmo nó.

wrangle como gerador (Run Over: Detail)

Para criar pontos do zero sem geometria de entrada:

// Cria 100 pontos em spiral:
int N = 100;
for (int i = 0; i < N; i++) {
float t = float(i) / N;
vector pos = set(cos(t * 6.28 * 5) * t * 3,
t * 5,
sin(t * 6.28 * 5) * t * 3);
int pt = addpoint(geoself(), pos);
setpointattrib(geoself(), "Cd", pt, set(t, 0, 1-t));
}

Conecta um Add SOP depois para criar primitivas (linhas) se necessário.