Houdini 101

From bernie's
Jump to: navigation, search


Discord live chat with a lot of people: https://discord.gg/b8U5Hdy


Basic setup:

  • better quality: more points (smaller point separatation) or decrease grid scale
  • reseed particle in flipsolver: nice for droplets but /!\ particle IDs change

Expressions Vex & General Syntax


$NPT number of points
$CEX $CEY $CEZ centroid
$FF frame number 
$T time
$PT point
$CR $CB $CG color

$OS use node name (in groups for ex)

$CY copy number in copy node, use for placement w/o having to stamp

`$OS`_`$OBJID` give objects nynamic names 

opinputpath("sopnode",inputN) get the incoming connection (0, 1...)
op:`opinputpath("../",1)`      ---> get full path of input 2 of parent
nprims("../sort1")       ----> number of primitives
$TEMP/houdiniCache/simdata.`padzero(4,if($F>70,70,$F))`.simdata   -----> read from cache, hold at a certain frame

$OS.`substr(chs("camera"),rindex(chs("camera"), "/")+1,200)`      ------> get the name of the camera if it's a complicated name with lots of / / / 
in vex no uppercase:

Print to console with precision

printf("Point %*.*g\n", 10, 10, @value);

Expressions dump

On a switch; switches between inputs if first input is an empty vdb (fix for Maxwell's shitty VDB implementation) - the second input being an 'empty' but existing vdb



general / viewport
ctrl-b: full window
h: center
d: display options
p: show params
space-shift-h: center on object
h: center on grid/frame current selection
w: wireframe
left/right arrows =prev/next frame
ctrl-left arrow: go to first frame

node editor
u/i: up down hierachy
c: set color
ctrl-click on node blue bit: becomes purple = final output

alt on param boxes = keyframe
alt on param name = key x y z

d show points on curve

graph editor:
shift-lmb: access graph editor
up down arrows: play forward
left right: prev next frame
v-h: zoom vertically/horizontally
j: show whole timeline
k: key all
g: group keys 

* drag & drop parameters

r: reverseinputs


  • birthgroup: group of particles that were just borne, lasts 1 frame


  • can inherit params
  • 3 solvers, bullet = speed
  • 'activate' node to do bullet time
  • shelf tool always update latest created dopnet ('set always')
  • clones for active object = active creation with modulo


  • drag and drop nodes to get path names

Color Schemes

  • Red: out geo
  • Purple: VOP_name
  • Yellow: creation/merge
  • Blue: POP DOP
  • Light Green: Pre split


  • Volume from inside as well as surface:
  • add a 'volume from points' > ' stamp points ' before volume object

  • with volume dops: use curl noise --> 4d with vector4 to do a time noise
  • displace noise: use shader, dig into 'fireball' shader


pillar_?   (group)
vector vexcode
`interpreted text`


  • get motion blur on objects : geometry velocity motion blur
  • plug stuff in a premade mantra surface (displace along normal, diffuse etc...)


  • right click anim channels to add motion effects
  • expressions: $I = ptnum, for curves
  • object merge to grab channels
  • multiply: order is important
  • lookup: timeshift
  • at Geo level, to get chop value: chop("../CHOPNET/out/ty0") or chopf
  • recording mouse keyboard: keyboard - mouse -> record, hit scroll lock to disable shortcuts



proba: ':'


point replicate : multiply points

attribute promote : transfer from point <> primitives

Render Stuff and Cache Geo and Alembic

  • wedge: change node values an filenames with $WEDGENUM
  • fetch: renders specific ROPs, can be daisy-chained with a merge and (node to node)
  • multiple shapes in maya with alembic: in Houdini, need a primitive with strings called 'name', the names will be shape names, in the alembic exporter, make sur to choose Partition Mode: Use Combination Of Transform/Shape Node and choose previously created 'name' as Attribute (also Ogawa format - ?)


  • put RBD solver before Wire solver in merge otherwise = bug



Howto's / Tricks

  • Wedges and HQUEUE:


  • stop stepping: disable integer in frame options, add timeblend
  • using 'rest' to get more interesting fractures
  • restpos: can be used in SHOPS to get object space


  • instances: instancepoint() w/ full point instancing --> packed disk primitives = refs = light
  • instances materials: "declare materials>declare all shops" to export shaders to instances (add using paramet interface window)
  • triangulate a whole object cleanly using foreach primitive


  • On crashes: load with 'Manual' and hit escape so nodes aren't read (if file is corrupt for ever)
  • Blend between slowed down continuous mesh:


  • RBD Point Object from sequence from odforce:
    • add int attr on points (call it 'shape')
    • write RBDs to disk
    • in RBD point object override point value geometry path: /path/to/geo.*.bgeo
    • 'allow editing of contents' in RBD point object, dive inside fin 'sopgeo2', add a stamp OBJID, $OBJID, disable 'Use External SOP'
    • dive inside sopgeo, add a read file, and replace * from RBD point object to proper file path: `strreplace(chs("../../geopath"), "*", point("/obj/gridscatter/OUT", stamp("..", "OBJID", -1), "shape", 0))`

  • Parenting: at object level or using 'Rivet' for deforming geo
  • Group according to mesh connectivity: use 'Island 1' 'Island 2' etc...
  • If you get 'unable to initialize UV rendering module with camera' when baking textures, add a new cam to your scene (cam1)
  • If you are using maxwell and alembic (abc) files to render particles (realflow plug-in) you NEED a vector v and int id attributes otherwise it won't render
  • To get pre-infinity and post-infinity cycle or linear keyframes Animation Editor, pick channels and Alt-E (channel properties):


  • Fluid simulation: collision reversed ? Use a vdb with a static solver, and reverse the vdb with a volume wrangle @surface *= -1
  • Why is my motion blur not working ? You need 'v' and to check 'geometry velocity blur' on your object
  • I still have a hard time with vex code rotations/matrices even with matt estela's wiki so VOP quicktip to rotate normals around an edge:


Specific Forum/Blog/Wiki articles