(Houdini, Vex)

Small reminder code snippets

Houdini Snippets

A list with some small Houdini Wrangle Snippets.

VEX Move point

Houdini, Vex |

Move point along a given vector

Move point along normal

Create a line, then add a point wrangle with the following code and create the spare parameters.

Move Point along Normal

if (@ptnum == 0) {
    v@N = normalize(point(0, "P", 1) - @P);
}
if (@ptnum == 1) {
    v@N = normalize(point(0, "P", 0) - @P);
}
@P += @N * chf("distance");

VEX Blend UVs

Houdini, Vex |

Blend/lerp attributes

How to Blend Attributes / UVs in Houdini

Use this code in a Point Wrangle. Create UVs and a UV Edit Node. Assign original UVs to first input and the edited UVs as second input. Set Run Over to Vertices, if you have vertex uvs. ... read more

Blend UVs

// Set run over to type with the attribute
@uv = lerp(@uv,v@opinput1_uv,chf("blend"));

VEX Move Primitive

Houdini, Vex |

Move primitive along a given vector

Move Primitive along Normal

Create a Box or Sphere and set Primitive Type to Polygon Mesh. Create a facet Node with "Unique Points" checked to create separated Prims. Create a Primitive Wrangle with this snippet and create the Spare Parameter.

Move Primitive

vector offset = prim_normal(0, @primnum, {0,0,0}) * chv("scale");
int points[] = primpoints(0,@primnum);

foreach(int point_no; points) {
    vector point_pos = point(0, "P", point_no);
    point_pos += offset;
    setpointattrib(0, "P", point_no, point_pos);
}

VEX Spherize a Box

Houdini, Vex |

Build a quads only sphere

Spherize a Box

Create a box and set Primitive Type to Polygon Mesh. Set Axis Divisions to maybe 10. Create a Point Wrangle with this snippet and create the Spare Parameter.

Spherize a Box

vector min, max;
getbbox(0, min, max);
vector center = (min+max)/2;
@P = chf("radius") * normalize(@P - center) + center;

VEX Rotate around Edge

Houdini, Vex |

Rotate Primitive Points around an Edge

Rotate around Edge

Create a Box or Sphere and set Primitive Type to Polygon Mesh. Create a facet Node with "Unique Points" checked to create separated Prims. Create a Point Wrangle with this snippet and create the Spare Parameter.

Rotate around Edge

float angle = radians(chf("angle"));
matrix3 rotm = ident();
int points[] = primpoints(0, @primnum);
vector p0 = point( 0, "P", points[2] );
vector p1 = point( 0, "P", points[1] );
vector axis = normalize( p0 - p1 );

rotate(rotm, angle, axis);

@P -= p0;
@P *= rotm;
@P += p0;

VEX Create Primitive

Houdini, Vex |

Simpe Snippet Code to create a primitive

Create Primitive Circle

Create a Attribute Wrangle (Run Over: Detail) with this snippet and create the Spare Parameter. Maybe change the "close_poly" and "add_end" parameters to Type "Toggle" manually.

Create Circle

// define pi or use $PI
float pi = 3.14159265358979323846;
// prepare parameters
int close = chi("close_poly");
int add_end = chi("add_end") && !chi("close_poly")? 1 : 0;
float count = chi("point_count") + add_end;
float mul = (count - add_end) / pi / 2; // * 4
// create empty arrayfor points
int pts[];
// create points and add them to point array
for (int i = 0; i < count; i++) {
    float x = sin(i/mul);
    float z = cos(i/mul);
    int pt = addpoint(0, set(x,0,z));
    push(pts,pt);
}
// create open or closed primitve
if (close) {
    addprim(0,"poly",pts);
} else {
    addprim(0,"polyline",pts);
}

VEX Create Vertex UVs

Houdini, Vex |

Create a simple Primitive with Vertex UVs

Create Vertex UVs

Create an Attribute Wrangle (Run Over: Detail) with this snippet and create the Spare Parameters.

Create Vertex UVs

// create parameters
float _x = chf("width");
float _z = chf("height");
// create point positions
vector _pos[] = array({0,0,0},set(_x,0,0),set(_x,0,_z),set(0,0,_z));
// create empty point array
int _pts[];
// loop over point positions and create the points
foreach (vector _pt_pos; _pos) {
    push(_pts,addpoint(0, _pt_pos));
}
// create primitive and add the points
int _prim = addprim(0,"poly",_pts);
// maybe create initial uv value if needed
// addvertexattrib(0,"uv",{0,0,0});
// loop over points and set new uv values
foreach (int _pt; _pts) {
    float _u = _pos[_pt][0];
    float _v = _pos[_pt][2];
    setvertexattrib(0, "uv", _prim, _pt, set(_u,_v,0), "set");
}