top of page

SOP Guide for Houdini

  • Writer: Sammy Lyu
    Sammy Lyu
  • Jul 31
  • 4 min read

Updated: Oct 7

Useful tips for SOP nodes


As of writing, my Houdini version is 20.5.614





Preserving Quads with PolyReduce SOP


When reducing polygons, the remesh SOP will turn your polygons into triangles, but if you would like to "preserve quads", use PolyReduce instead. Alternatively, you could also use Quad Remesh.



Using Assemble SOP for "packing" only You can also use the Assemble SOP to pack a geometry instead of the obvious "pack" SOP. When using the assemble SOP to pack, the name attributes get promoted to the points, something the pack SOP does not do.



Adaptive edge length in Remesh SOP


In the remesh SOP, sometimes the output geometry can have their edges rounded or cut. Turning on the "adaptive" setting under edge length can help the remesh SOP understand that you would like to "preserve" the edges.



Convert geometry to VDB to increase polygon count


When a geometry does not have enough faces to work with, you can increase the number of polygons by converting the geometry to VDB, then re-converting it back to polygons to have the polygon count increase exponentially. You might have to get the right amount of VDBs using VDB reshape for this trick to work. Alternatively, Quad Remesh SOP is also a good tool.



Creating a procedural tool using "For each" loops


For-each loop
For-each loop

You can use the "For each" loop tool to procedurally create different iterations of a geometry.


In this particular case, we use "For each named primitive"


The goal was to create a fractured geometry with a few missing pieces. Each iteration would create a version with different pieces missing.

Attribute promote "area" value
Attribute promote "area" value


The for-each loop will select one initial fracture piece from the total amount of pieces in the geometry.


Then, we promote the values or attributes that we want to alternate with each version. In this case, it was the "area" attribute which is under the "detail" class.


We promote it with the "sum" method



VEX Code for randomisation
VEX Code for randomisation

Then, with a little bit of VEX coding, we are able to create a new "scale" channel that manipulates the detail attribute of "area".


This channel's value dictates how many primitives are randomly removed from the fractured geometry.






Creating a "rayhitgroup" from the RAY SOP


The RAY sop allows us to shoot points onto any geometry in the direction the normals of the points are facing.


To isolate those points that do hit a target or a geometry, be sure to utilise the default "rayhitgroup" that is generated from the SOP, which isolates the points that do make contact with a primitive or geometry.



Using BOUNDING OBJECT for GROUPs


When utilising the "keep in bounding regions" function of the GROUP SOP, instead of just a simple box or sphere, you can also select a "BOUNDING OBJECT" which will creating a bounding box in the shape of your selected geometry or primitive.


This is a powerful tool to use with the CURVE SOP as you can create a geometry to use as a bounding box in any shape or form you want.



Attribute paint for point scattering


Using attribute paint on a geometry, you can color specific areas and scatter points on those areas. This is a powerful way to create points in a certain section of a geometry, to create elements such as impact or fracture points. IMPORTANT: To scatter points on a painted area, be sure to change density attribute to "MASK"



Using DELTA MUSH to smooth surfaces


Instead of using the SMOOTH SOP to smooth the edges and surface of a geometry, try using the DELTA MUSH SOP, which generally has a little more control over the smoothing operation.



Utilising attribute delete to clean up attributes after a simulation


It is good practice after a simulation to do an ATTRIBUTE DELETE to make sure that things like the active attribute or velocity do not affect the latter stages of the simulation.

This is especially true for geometry to be used as COLLISION OBJECTS or geometry coming out of a DOPNET simulation.



Using GROUP BY RANGE to reduce point clusters randomly


You can use GROUP BY RANGE to delete a percentage of your POINTS randomly without needing to manually use blast or bounding boxes. Simply create a group, specify that group in the GROUP BY RANGE sop, select GROUP TYPE, and under RANGE FILTER, select the RANGE of values you would like to randomly select within that group.



Using the SECOND INPUT on the GROUP sop


The SECOND INPUT of the GROUP SOP can also be linked to something like a bounding box to directly link the grouping by utilising the “Keep in bounding regions” option.


This is a faster way to directly link one node to another rather than linking by names and attributes.



Using VEX to match trail length to trail increment


In the trail SOP, you can use the following VEXpression to make sure the trail length is always RELATIVE to the trail increment:


1/ch("inc") - this always ensure that the trail length is always 1 divided by the increment val.


This makes the trail look more mathematically correct and eliminates guess work.



Using ALEMBIC ARCHIVE for cameras


When it comes to cameras, there are factors liek focal length, f stop and shutter speed. If these values are animated, you should use an alembic archive. But if you would like to keep these values customisable, you can use the alembic xform parenting technique (below).



Using ALEMBIC XFORM to transfer TRANSFORM data to objects


The alembic xform node can load up an alembic file's transform data and apply it to something else. This is how its done:


  • The FRAME attribute is set to match the timeline frame (@FRAME)

  • Then the geometry object or camera is parented below

  • The object below the alembic xform should now have the transform data from the alembic file automatically applied!


THIS TECHNIQUE ONLY WORKS ON THE /OBJ LEVEL

ree



















 
 
bottom of page