Its a circus out there

2009

SOPs

Home VOPs SOPs DOPs COPs POPs ROPs Expressions OSTips Shops Tools Lighting Python Pclouds HOT About

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

Notes :- Point Sop uses 2nd input for the normal information using the expression in each channel    $TX2 - $TX    $TY2 - $TY  $TZ2 - $TZ .Scene file :- rse_radial_normals.hip

Adjust normals radial or otherwise 

Group points from Camera frustum :-

Notes :-

The group SOP set to point uses the expression $MAPU >= 0 && $MAPU  <=1 && $MAPV >=0 && $MAPV <=1 && $MAPW = 0 && $MAPW <=1


&& means boolean AND  ie  (1 && 1 ) == True  or ( 0 && 1 ) == False.  Its comparing the logical combination of two expressions. another example might be (( 0 == 0) && ( 0 <= 1 ))   == True

In expressions and programming 0 is false anything else is true normally . Though there are exceptions depending on the language and how you use 0 .


if (( $PT >= 50 ) && ($F > 10 ))   evaluates to true when you are iterating to point 50 and on frame 10  if  on the other hand you wanted the the operation to return false you could use   if ! (( $PT >= 50 ) && ($F > 10 ))  which would evaluate false.


Other parts covered :-

Vops bringing a group into VOPs

The use of a shading layer in the shader VOP network


scene file :- rse_groupPointsBasedOncameraFrustum.hip

SOP level scene  view

Displaced geometry within the camera frustum

VOP SOP network that brings in a group

Points to Spiral

Notes :- Line Sop uses 1+$FF*2   to increase the amount of points over time. The point sop uses the standard sin and cosine expressions in the point position parameter to  create the spiral


$TX  value  =  sin($PT*5)*$PT*0.25   $TZ value =  cos($PT*5)*$PT*0.25 


scene file :- rse_sops_pointsTosprial.hip

Notes :- Another set up examples showing how to aim normals, theres also a point vector example .Scene file :- sop_aim_normals.hip

Eeeek

Notes :- Another set up examples showing how to aim normals, using the polyframe sop .Scene file :- sop_polyframe_aimNormal.hip


PolyFrame details :-

Entity = points, Style = first edge  Tangent Name = N

Random normal direction

Notes :-  scene shows how to randomise the direction of normals and add a noise vop so over time they move . You have to make sure you have a different seed value in each transform


fit01(rand($PT +235), -1 , 1 )   


scene file :- rse_sop_vop_randomNormaldir.hip

VOP random normal direction

VOP noise over time

Blend Attribute with Vop

Notes :-

Use a vop to blend between to values of P for the object.   


scene file :- rse_vop_blendbetweenPvalues.hip

VOP blend P

Disintegrate Text using pops


Notes :-  

Rops use a post render script to auto reload the written bgeo files . ie  opparm -c /obj/`opname("../../")`/`opname("../")`/file3 reload


Lots of custom attributes to drive the effect. Scale a copy of the geo down using a prim sop, then using a set of attributes match the generation of pops to the amount prims . The scene uses the ranom count down vop sop as shown in the vop sops section.


scene file :- sop_pop_particleonprim_03.hip

Fracture Geometry and drive with pops


Notes :-  

Using pops birth a point at the centre of each piece of fractured geometry.


1:- Using points scattered in a density volume generated from the geometry using IsoOffset to generate cell points, as you can modulate the density in the volume before scattering to get more points within particular regions of the object. Where there is higher point density, the Fracture SOP will generate more, smaller pieces.


2:- The Voronoi  fracture sop out puts the prim attribute   __origp by default this is the centre of each primitive piece.

3:- Promote the prim attribute  __origp  to a point attribute

4:- Partition the pieces to point groups using a rule  group_`point("../attribpromote_origpt", $PT, "ptorig", 0)`  using the point expression

5:- Add sop delete all geo keep points

6:- Add sop , polygons > by group > set to “ add each group seperately” group_*  .

7:-  Into pops

8:- After pops , point sop add N  ie $NY  = 1

9:- Prim sop, transforms on  > rotate to 90 for rx , second input takes N from the previous point sop inputting $NY

10:- Point sop > input 1 takes the original geo after the fracture and the second input comes from the prim sop . In the point sop the position comes from the second input ie $TX2 , $TY2 , $TZ2 . basically after pops the points are processed and rotated to match the fractured geo.

11:- Vel calculated


scene file :- rse_pops_geoprimcentre_01.hip

Point animated in a spiral

Notes :- Simple scene show the use of a spare channel to control the decreasing speed of a point moving in a spiral 


1:- spare channel animated

2:- point sop  $TX +(sin($FF*14)*chf("spare2",$FF))  $TZ +(cos($FF*14)*chf("spare2",$FF))


scene file :- sop_animatedPoint_spiral.hip

Simple instanced geometry with material override

Notes :-  

Simple geometry instancing example. Showing how a material sop can be used to override the Cd value of a shader to bring variation into the instanced copies. As long as the parameter is in the shader it can be overridden using the material sop.


scene file :- sop_instance_cd_overide.hip

Foreach Fracture

Notes :-  

Fracture individual groups that are part of lager geometry.

Uses foreach to loop through each prim group also creates new groups of fractured pieces for breaking

iso offset used to calculate a fog volume , the volume on a per lettter is manipulated with a volume mix ($BBY*2)-1 . So more points are at the top of the letter than bottom. which are used to calculate the fracture.


BBY is normalised ie 0 to 1 , multiply by 2 creates a larger value , - 1 will then give density values of -0.5 and 0.5 .


scene file :- sop_foreach_fracture_01.hip

CopySop & switching geo

Notes :-  

Simple copy sop that randomly picks objects via a switch using floor


floor(rand(stamp("../copy1","copynum",0)) * opninputs("../switch1") )


scene file :- rse_sop_copygeo_switch.hip

Profile Curve used in Extrusion

Notes :-  

Using a curve to create a profile for extruded text. Handy for bevels. 


scene file :- rse_sop_extrusionProfileCurve.hip

Build Surface from POPs

Notes :-  

Build a surface from a pop network. Select a couple of points on object. Birth particles then create lines and skin.


scene file :- rse_pop_buildsurfasceFromPops.hip

Deform points

Notes :-

Various examples of using a point sop to deform points. 


1 cos($TZ*1.6 * $FF )  + 1 sin($TZ*1.6 * $FF )  + 1


2 noise($TX,$TY+$FF*0.02,$TZ*2)


3 snoise($TX,$TY+$FF*0.02,$TZ*2)


4 turb($TX+$FF*0.02,$TY,$TZ*4, 1)


5 noise($TX+$FF*1.21 ,$TY*1.12,$TZ)*$BBY



scene file :- rse_sop_pointsop.hip

Tip :- Add a point sop radial normals > use $BBX, $BBY, $BBZ and minus 0.5 and hey presto normals all facing out

Group and partition 

Notes :-  

Group and partition using colour.  


scene file :- rse_sop_grpColPartitionOut02.hip

Delete SOP

Notes :-  

General  tips on deleting stuff .


Scatter SOP  > Delete SOP set to delete by expression. You want to delete 50% of the points

use the expression  $PT >= ($NPT * 0.5)


scene file :- NA

Notes :-  Another method in the file.


Curve > Point sop > turn on edge force = 1 > Vop Sop > import attribute > edgeforce > pipe the vector into your N vector

Foreach SOP

Notes :-  lots of scene files showing various examples



scene file :- foreachexamples.hip

Plug and Go Multiparm block

Notes :-  Take the object merge sop and shift to the top level of your tools so you can plug and merge incoming data. The trick of course is to read the value ie merge 1 , 2 ,3 etc etc


Use the expression /obj/`opinput(".",int(strreplace($CH,"objpath","")-1))`/OUT  . The strreplace strips out the letters and leave the number in the parameter. Which we can use to count the inputs. 


scene file :- sop_multiparm_readinputs.hip

Rest SOP

Notes :-  If you make a rest from an Attribute SOP. It should be a 3 float Attribute so it does not get transformed. 



scene file :- xxxx

Partition SOP

Notes :-   Tomas Slanick > You have a bunch of points and want to create 10 groups from them just use Partition SOP, change Entity to Points

and in Rule write:

grp_`$PT%10`



scene file :- xxxx

Random application of maps to the prim

Notes :-  myimage_`floor(rand($PR)*2.999)+1`.jpg   Will apply 1 of 3 random maps.



scene file :- xxxx

Time Shift  SOP

Notes :- A great sop for retiming effects


Lets say your sim starts at 1001 to time shift the sequence you need to first subtract your start frame then do the shift , then add the start frame again.


(($FF-$FSTART)/2) + $FSTART



scene file :- xxxx