Houdini learning
Jump to navigation
Jump to search
Contents
- 1 Houdini learning
- 1.1 Center Pivot
- 1.2 Delete by Connectivity attribute
- 1.3 Increase Volume Density
- 1.4 Substract any VDB by another VDB
- 1.5 Get bound & centroid
- 1.6 UVs
- 1.7 Attribwrangle - if...
- 1.8 Attribfrommap - Use UDIMs images
- 1.9 Attribwrangle - Udim number on primitives attributes
- 1.10 Place at World center, scale et re-transform for export
- 1.11 Misc Attr Wrangle expressions
- 1.12 Delete small pieces
- 1.13 Attribute Wrangle - Copy attribute from second input
- 1.14 Bounding-box - Position Reference color
Houdini learning
Center Pivot
// In Pivot Translate in a Transform node centroid(0,0) centroid(0,1) centroid(0,2)
Delete by Connectivity attribute
// In a Delete node, in Group (by example) @class=7777
Increase Volume Density
// In a volumewrangle @density *= 10;
Substract any VDB by another VDB
// In a volumewrangle if (volumesample(1,"surface",@P)<0)@density=0; //inverse: if (volumesample(1,"surface",@P)>0)@density=0;
Get bound & centroid
// In a null object
bbox(opinputpath('.',0),D_XSIZE)
bbox(opinputpath('.',0),D_YSIZE)
bbox(opinputpath('.',0),D_ZSIZE)
centroid(opinputpath('.',0),D_X)
centroid(opinputpath('.',0),D_Y)
centroid(opinputpath('.',0),D_Z)
UVs
// In this order : uvautoseam - uvflatten - uvlayout In uvflatten : Seams = seams
Attribwrangle - if...
// Kill emission on a smoke source after frame 300 if (@Frame>300) @density = 0;
Attribfrommap - Use UDIMs images
// Replace 1001 by <UDIM> and check UDIM Filename Expansion
Attribwrangle - Udim number on primitives attributes
// In a wrangle set on Primitives vector uv = primuv(0, "uv", @primnum, set(0.5, 0.5, 0)); i@udim = 1001 + int(uv.x) + int(uv.y)*10;
Place at World center, scale et re-transform for export
// In a transform translates
-centroid(0,0) -centroid(0,1) -centroid(0,2)
// In a transform Uniform scale
(bbox("/obj/neigeSol/timeshift1/", D_ZSIZE))/(bbox("/obj/neigeSol/transform_centerWorld/", D_ZSIZE))
// At end, in a transform Uniform scale
1/((bbox("/obj/neigeSol/timeshift1/", D_ZSIZE))/(bbox("/obj/neigeSol/transform_centerWorld/", D_ZSIZE)))
Misc Attr Wrangle expressions
// Delete by color
if (@Cd.x<chf("seuilColor"))removepoint(0,@ptnum);
// Set random pscale
@pscale = fit01(pow(rand(@ptnum), ch("power")), ch("pscale_min"), ch("pscale_max"));
// Udim attr for each Udim
vector uv = primuv(0, "uv", @primnum, set(0.5, 0.5, 0));
i@udim = 1001 + int(uv.x) + int(uv.y)*10;
// Next, with a Delete SOP: Group: @udim=$F - Pattern mode !*
// Set pscale Min/Max
@pscale = fit01(pow(rand(@ptnum), ch("power")), ch("pscale_min"), ch("pscale_max"));
// Remove small parts - In a Foreach connected piece loop
@size = (getbbox_size(0).x+getbbox_size(0).y+getbbox_size(0).z);
if(@size < chf("taille"))
removepoint(geoself(), @ptnum);
// Set @variant integer for Copytopoints (change objects number)
i@variant =floor(rand(@id)*3);
//// Get position difference between two objects, and match animation
// On Rest pose object:
v@fixe = 0;
@fixe.x = getbbox_center(0).x;
@fixe.y = getbbox_center(0).y;
@fixe.z = getbbox_center(0).z;
// On animated object:
v@anim = 0;
@anim.x = getbbox_center(0).x;
@anim.y = getbbox_center(0).y;
@anim.z = getbbox_center(0).z;
// After two previous AttrWrangles:
v@anim_offset = point(0, 'fixe', 1) - point(1, 'anim', 1);
// To match animation:
@P = point(0, "P", @ptnum) + point(1, 'anim_offset', 1);
//// Blend shape through a mask attribute - Posted by Cudarsjanis on Odforce
// Geo with mask attribute in first input, blend shape in second
v@P=lerp(v@P, point(1,'P',@ptnum), f@mask*ch('blend'));
//// Set a fixed normal attribute
v@z = set(0,1,0);
//// Place at world center
v@P -= getbbox_center(0);
Delete small pieces
// As seen on Sidefx forum, posted by paulboiii
// First create a measure SOP, set to per piece
// Then, in an attribwrangle set on primitives
float threshold = chf("Size_Threshold");
if ( f@area < threshold ) removeprim(0,@primnum,1);
Attribute Wrangle - Copy attribute from second input
// With same number of points on both inputs - From Bonsak on Sidefx.com // Copy P from second input @P = v@opinput1_P;
Bounding-box - Position Reference color
// As seen on https://houdinihelp.ru/ref/expression_cookbook.html // In an attribwrangle set on primitives @Cd.r = relbbox(0,@P).x; @Cd.g = relbbox(0,@P).y; @Cd.b = relbbox(0,@P).z;