Its a circus out there



VopPOPs  VopSOPs  VolumeVops VopPOPs.htmlVopSoPs.htmlVolumeVops.html
Home VOPs SOPs DOPs COPs POPs ROPs Expressions OSTips Shops Tools Lighting Python Pclouds HOT About

Bio Showreel GalleryHoudini.htmlSops.htmlDopsMain.htmlCops.htmlBlank.htmlRops.htmlExpressions.htmlOSTips.htmlShops.htmlTools.htmlLighting.htmlPython.htmlHoudini.htmlHotOceanTookkit.htmlAbout.htmlBio.htmlShowreel.htmlGallery.htmlHoudini.htmlshapeimage_2_link_0shapeimage_2_link_1shapeimage_2_link_2shapeimage_2_link_3shapeimage_2_link_4shapeimage_2_link_5shapeimage_2_link_6shapeimage_2_link_7shapeimage_2_link_8shapeimage_2_link_9shapeimage_2_link_10shapeimage_2_link_11shapeimage_2_link_12shapeimage_2_link_13shapeimage_2_link_14shapeimage_2_link_15shapeimage_2_link_16shapeimage_2_link_17shapeimage_2_link_18

Notes :- Scene file contains 3 examples . example 3 uses pscale and a  attribute to drive the spheres growing. rse_pops_hitexplode.hip

Inside the if statement block of the above vop network

Vop network to create attribute

Notes :- Taking the  hittime attribute from pops and instead of using an expression to drive the result a vop sop network has been created to handle hundreds of points.Ultimately this method creates a new attribute based on an if statement to drive when the sphere will start animating its size which will be at a very basic level ie  if ( hittime <0 , 0 , ($F - hittime) * $FPS) which is of course all based on the hittime attribute generated in POPs .Do refer to the texport by typing “exhelp if” . 

For the new attribute to work we need to feed in a constant value as a place holder within the if statement. This can be a zero value parameter as shown in image one with the black coloured node. Inside the if block VOP , a float parameter gets created which we will at the top level of the VOP SOP use a $FPS variable. refer image 2.


  1. 1)Group points based on hittime  using the expression   point("../OUT" , $PT , "hittime" , 0 ) > 0  or you could use

point("../" + opinput(".", 0), $PT, "hitime", 0)

  1. 2)The Copy SOP directly uses the the new variable created by the VOP SOP  $OFFSETFRAME .

  2. 3)The timeshift SOP stamps directly into the copy SOP

Scale Sweep vop

Hittime from POPs

Notes :- ptnum (read-only) Point number of the point being processed.

Create a parameter vop set to integer . At the sop level this will read in the amount of points in the circle. Divide ptnum by the number of points in the circle giving a result that gives groups of point numbers . ie the incoming point number 0 to 24 ( ptnum) get a value of 0 ,  incoming point numbers 25 to 56 ( ptnum)  get a value of 1 and so. The result of the divide just changes the point numbers.

Create a parameter vop set to  integer . At the top level this will read in the number of points in the line and again we divide the result from the first divide. The integer to float will prepare the values for the ramp vop which works in the range of zero to one. Create a parameter vop set to float, name it scale and give it a value of 1. Plug the result into a divide node , plug the ramp into the divide node. This will now give us control over the global scale of our object.

Transform matrix vop ( xform1) . Used to apply our scale values. Plug P from the globals into the pos , plug the result of multiply into scale.Create an import attribute vop. This is needed to import P from the points on the line. Define P as the attribute we want to import in. Set the OP index to 1  and make sure the lines output at the SOP level is connected to the 2nd input of the vop sop. inputs are read in from the VOP SOP as 0 , 1 , 2 , 3 ,  etc etc . Plug the result of the import attribute into the pivot input on the transform matrix. This defines the point for the pivot. so when we scale we get a correct point to scale from. lastly plug the output of the transform matrix into the P of the output vop. 


Add a Constant Vop

By adding an “add constant vop”  you can offset the random number generated from a  particles ID. Using opdigits(“./”)  its looking at the add constant value of 3 in its name.

Print VOP , handy for getting a print out of numbers from the vops as you make changes it updates the values in the Houdini console.

Use the details view to view the numbers coming through from your new attributes in this case the attribute $RANDSTART.

example :- rse_vops_addconstant.hip

Switch Vop & Point in Bounding Box Vop


Create a switch VOP

Create a parameter that will control the swtching , make it an integer

Check the box “provide a menu of choices”

In the the string parameter value enter :-  0 “X”  1 “Y” 2 “Z”

Connect from the float to vector , your X , Y , Z floats that you have broken out from the “point in bounding box” VOP

You now have a control that can switch the $BBX , $BBY , $BBZ  to control the bias of the colour used in mix VOP

example :- rse_vops_SwitchPointinBBox.hip

example without the switch :- rse_vops_pointinBoundingBox.hip

Random Boolean Countdown

using a point attribute create a trigger boolean value that over a set frame range randomly switches from zero to one. This technique is perfect for use in dops as a trigger to release objects into the simulation.

Notes:- create a randstart attribute between the chosen frame range. Each point gets assigned a random number . Read in that the randstart attribute. create a new attribute called countdown > pipe in the current frame time . Then compare to the randstart value within a if statement if the value is true its 1 otherwise zero.  The new attribute created is called trigger and called in dops using the point() expression. This system only works when you have geometry attached to points.

example :- rse_vopsop_activeCountdown03.hip