Week 1 – Intro to Houdini
What was covered in the lecture:
Houdini:
Node based approach
Whether you are setting up a shot or building a game level, Houdini lets you create tools that can be reused many times during a project’s life cycle. Instead of simply reacting to issues and problems, you will be able to plan ahead and visualize and refine your pipeline.
Houdini Interface:
Setting up the environment:
Create new windows –
Assign numbers like so:
Final View:
– Tab to search something to insert into the scene
– space+G -> frame the object
– P scale = particle scale
– N – change the normals
– P – position
– v – velocity
Under the nodes section:
Blue – renders this node
Red – Lock – Everything is backed to the locked node
Yellow – Bypass – Hide this node
The Workshop Activity:
Create a cheeseboard with cheese on it:
Create a cube and change it’s dimensions
Hit tab on the node area, add UV unwrap node and link it to the box node
Go to UV perspective to check if it was unwrapped well
Create a UV quickshade node and link it to UV unwrap node. a new window will appear above. under texture map choose a UV map to assign to the object.
Assign a null node at the end. Make sure the bottom’s node Display is on (blue)
To place the object in line with the ground copy the size parameter and paste it in the center parameter like that:
Copy the 0.2 parameter and paste relative reference in the box below. add /-2
Go back by clicking on the back arrow and the change the name of the box
Create one more box and jump forward. Change the dimensions of the box and link a color node to it.
Create holes in the cheese:
Create a scatter node and link it to the node above. Change the force total count to 25.
To assign spheres to the scatter create a sphere and “copy to points” nodes. Change the sphere uniform scale to .011 . Link the “copy to points” node like so:
To create holes inside our cheese, create a boolean node and link the node like so:
To randomize the size of the holes:
Create “attribute randomize” node and place it in between the “scatter” node and “copytopoints” node. Change the attribute name to pscale. Change the global scale to 1, and change the min and max value.
Final Scene:
Puzzle 1:
Link “open_curve” and “circle” nodes to “sweep_one_curve_along_the_other”
Link “convert_to_polygons” to “sweep_one_curve_along_the_other” to convert the shape into a polygon. Link “flip_normals” (reverse) to “convert_to_polygons” to flip the faces of the shape.
Link “select_every_other_point” to “circle” node to select all the points of the shape. Link “scale_down_a_bit(Transform)” to “select_every_other_point” to create the star shape.
Link “resample_curve” to “open_curve” node to make the shape more smooth.
To close the shape, select “sweep_one_curve_along_the_other” and change the “End Cap Type” settings.
None:
Single Polygon:
Grid: (Then adjust the other settings below it)
Final Scene:
Puzzle 6:
Week 2 – Intro to Houdini
What was covered in the lecture:
Mini Lessons:
Points and normals. env light
The Workshop Activity:
Domino:
Go inside Dominoes and create a curve node. Change the primitive type to Bezier curve. Draw curves. Make sure “Show Handle” is turned on. Make sure you’re on a draw mode. To finish the curve press ESC .To edit the curve make sure “Show Handle” and that edit mode is turned on.
Add a box to the scene and adjust its size according to the screenshot. Link a match size node to the box node to place the box on the floor. Change “Justify Y” to Min.
Add a “copy to points” node and link it like so:
Create “Resample” node between “curve” node and “copy to points” node to fix the spacing:
To change the spacing between each domino: go to the box node and copy the Y parameter. Go to resample node and paste “relative reference” in the length parameter. Multiply it by 0.9.
Distance Attribute – the distance between each attribute
Tangent Attribute – the tangent of the curve between each attribute – has 3 parameters.
To rotate the dominos in the right direction:
Turn on the Tangent attribute. Go to resample node info. Turn on TangentU.
Make sure Visualizes is on, right click and choose the pen.
Change “Type” to “Marker” and “Style” to “Vector”.
Under resample node, change Tangent Attribute parameter to v.
Add a transform node between matchsize and copytopoints nodes. Change Y rotation to 90.
Animation:
Add RBD bullet solver node (created by Disney). Add a ground.
Add delete attribute node. Point attribute = “v”. Link it like so:
Now we have a stable situation. Create one more box. place it like so. Go to frame 10. Alt+Center to create a keyframe. Create two keyframes so the box will move.
Connect the nodes like so (Collision Geometry). Also, click in the middle to bake it.
Change the collision type to “Deforming”
And that’s it!!
Week 3 – Ocean
What was covered in the lecture:
Creating ocean water and adding floating ducks on top.
Rendering animations.
The Workshop Activity:
Ducks On Water:
Create a grid and turn it into water and make
In the ocean object paste relative:
add “ocean spectrum” and “ocean evaluate” nodes into the ocean object and link them like so:
adjust the ocean movement in “ocean spectrum” node:
Fetch – how far we are from shore.
Direction – direction of the waves
Chop – how sharp the waves are
Swell –
Speed –
Go to duck object and add “time shift” and “scatter” node to “object merge” like so:
Go to frame one and under time shift delete channels and then put one.
Add “Point deform” Node and link it like so:
Now the points will move exactly the same as the ocean.
Add “copy to points” node and link it like so:
To change the amount of ducks go to scatter node and change the force total count parameter.
To make the ducks rotate on the same angle of the ocean movement:
Add a normal node and link it like so and change “add normals to” points.
Then add a transform node like so and change the Rotate attributes like so:
Rotate them in different directions:
Add Attribute randomize node and link it like so. Then change the Attribute Name parameter to “up”. Change the Min value parameters so they’ll be able to rotate down as well.
Add Attribute blur node to smoothen the waves.
Render Activity: Lego end render file:
Go to stage and add “Sop Import” node
Copy “floor_out” null node to Sop Path.
Create Material Library, camera and dome light nodes.
To create a camera from viewport click on no cam and choose New Camera.
Go inside Material Library. Create Karma material node. Go inside it and change the colour of the top node like so:
Go up until Material Library. Turn on “assign to Geometry” and on “Geometry Path” choose “All Geometry Primitives”.
Go back inside Karma Material node. Create Material Image node (mt i).
Link it to “mtlxstandard_surface” base. Then choose base colour. Then choose the file you want to assign.
Go to Lego_Toy node. Go inside and copy the null node (bottom node). On the stage window create a new “SOP Import” and paste in the SOP path.
Then create a merge node and link it below “material library” node. Link our new SOP import node to it. This way we use the same light and camera to render both SOPs.
The Weekly Activity:
Houdini Contexts:
OBJ – Object
SOP – Surface
SHOP – Shader
CHOP – Channel
DOP – Dynamics
POP – Particles
ROP – Render
VOP – Vex
IMG – Compositing
MAT – Material
This week I followed a tutorial of creating a Sandmonster.
Link to the tutorial
Final Render and Nodes:
Important things that I’ve learned:
– Adding a operator body and animation from Mixamo (7:21).
– Using File Cache node (26:26)
$OS – the name of the cache node
.$F – set a variable for every frame (to save a file for every frame)
.bgeo.sc – (what type of file it is) Houdini native file name
Once saving to disk it will use the files we created and not render it every time we run the stimulation
Turn on the option to choose between different versions of nodes –
File->asset manager->configuration->asset definition toolbar.
Environment Light setup –
Under environment map we can choose the HDRI file we want to use.
Under Shadow tab we can choose which objects will cast shadows. * means everything. ^ means to exclude.
Under Attribute Wrangle we did some coding so we could have a colour bar and scale parameter. (Pt.2 4:40)
@ = to show that’s an attribute (that we want to modify)
Cd = colour diffuse
chramp = channel ramp
“name” – name for the ramp
@noise = takes the noise attribute from the previous node.
pscale = particles scale
ch = to create a new channel bar
Create Materials – Mat->Principled shader.
Worked with Popnet node and edited the popobject node. We also added popwind node.
Created Geometry node to save the final version of each element before rendering. inside it we created an object merge node.
Under Out, we created a mantra node to render our sequence. We could choose to render a specific frame or the entire sequence.
we named the output like so: $HIP/render/$OS.$F4.exr
OS = current file name
$F4 = frame number
Week 4 –
What was covered in the lecture:
Vellum:
system of solver and simulations.
cloth and fluid work inside this system.
Vellum Cloth:
Create a grid and change its dimensions to .5
Create a sphere within the grid and change its dimensions and position so it will be underneath the grid.
Then create a vellum cloth node and link everything like so. Also, adjust the bend stiffness parameter:
Then add a Vellum Solver node and Vellum post process node.
vellum cloth gives the setting for the cloth.
vellum solver does all the calculation and physics.
vellum post process polish our stimulation.
Add a Remesh node to create more randomised faces for the grid:
Before the grid was looking like that –
Change the grid rows and columns to 2.
Then change the element sizing:
Under vellumpostprocess1 node we can add thickness to the cloth:
Under vellumsolver1 the substeps parameter is responsible for the stretch of the cloth.
To make some of the points still:
Create a group node underneath the remesh node.
Change its name to pinned and Change its type to points. Untick off base group. Base group – allows us choose specific points.
Tick keep bounding region (create a bounding box which allows us to choose points). Click on Initialize Input Bounds. Bring on the “Show Handle” tool on the left side. Then adjust it like so:
Under vellumcloth1 node. under Pin to animation, change Pin Points to “pinned” (the name of our group node).
Final:
Under group node – Include by edges will select all the edges.
Create one more group node. Change the name of it to floppy. Choose half of the grid.
Add an attribute create node. Change its name to floppy. Change the value to 1.
To visualize our selection click on i and turn floppy on.
Under Vellum Cloth node, under Bend, change “no scaling” to “scale by attribute”. Write floppy in Stiffness Attribute.
We can also do the same thing with attribute noise node and ramp.
To rotate our Pinned points:
Add a transform node under our group pinned node. Change Rotate Y to $FF (Frame Float)
Go to Vellumcloth node. Under Pin to Animation tick Match Animation.
Put some tears into it:
When we want to tear something in vellum we need to put it before the vellum node.
Add edge fracture node under remesh. To visualise the tears create another branch and add “exploded view” node. Another way to visualise it is to under edgefracture1 node turn on primitive piece and then visualize it under i.
Under Vellum Stich Tick Breaking change the breaking threshold:
Then:
We can make a Trampoline by changing the pinned settings and change it to Include by edge. Put edge node below group1 node.
Final:
Week 5 –
The Workshop Activity:
Noodles Simulation:
Make a plate and render it in Karma
Open the HIPNC file type.
Inside plate, create revolve node (same thing like maya) and link it to the curve. Change the divisions to 100.
To fix the UV enable “Ensure Unique Seam Vertices”.
Add resample node between the curve and the revolve nodes to smoothen the curve to get more details.
Add Remesh node to uniform the grid. Add UV project to fix the UV (under initialize click initialize).
Add fuse node between the Revolve and Remesh nodes to fix dots distancing.
Add UV Quickshade node and attach a plate shader. add a null and render it.
Go to stage and paste the null node into the sop path. Double click on the node and change the persp to Karma CPU.
In Stage add dome light and link it to stage. Under the texture slot choose London hall image.
Add a grid on the obj and size it 2×2.
Add one more sop in the stage mode and paste the grid one. Add a merge node in the stage mode and link both sops into it and then to the dome light.
Create a material library node and link in underneath the tablecloth SOP.
Inside Create Karma Material Builder node. Change it’s name to table cloth.
Inside create material image node and link it to base colour. Link an image to that node.
To fix the table cloth UV go to the grid. add UV project. click initialize. add Null node and relink it to our table cloth SOP.
Go to material library. Enable to Assign to Geometry and choose “All Geometry Primitives”
Under OBJ in the plate node, create Attribute Create node. Change its type to String. Name to name (its a magic word), String to Plate_top and Class to Primitives.
Create a group node to create two different groups. Change its name to Bottom_group. Enable Normals. Change the direction 0, -1, 0. Change the spread angle. Disable Base group. What we just did? We chose all the points that point towards the bottom of the scene.
Then create one more Attribute Create node after the group.
Go to stage mode and create mat library for the plate. inside create two karma material builder nodes. change their name to top and bottom. Change the top colour to blue and the bottom one for red.
Under Material library click auto-fill materials. From the geometry spreadsheet drag the plate_top to plate top and same with the second one.
Go inside plate top shader, create MTLX shader and assign it to the base colour. choose an image.
To adjust the colour we can add colour correction node like so and adjust the parameters.
Change the bottom colour in the regular way.
Go to noodles object. Create circle polygon. Change its uniform scale to .2. ZX plane.
Create a transform node and move it up .3
Underneath create normal node and change “Add normals to” Points.
Then create a Scatter node. Change the Force Total Count parameter to 20. Add Copy to points node and link the scatter and the line.
Then add transform node under the line node and rotate it by 90.
Now we will crash the noodles into the plate using Vellum.
Add under “Copy to points” Vellum hair and vellum solver in this order. Inside the vellum solver enable ground position
Create object merge node. go to the plate object. copy the plate render and paste that into the object section of the object merge.
Now the noodles are too stiff. We will go to the vellum hair and adjust the parameters. I reduced the Bend stiffness parameter. (5 6)
To add thickness go to Vellum hair node and unnder geometry enable “Visualize Thickness” and change the parameter to .7
Change the scatter force total count to 100.
Create Sweep node. Change the Surface Shape to Round Tube. Change Columns parameter to 12. Increase the radius to increase the thickness. Under End Cap choose Grid.
Add subdivide node below the sweep node the make the noodles smoother.
Final Scene:
Week 6 –
The Workshop Activity:
character animation
Bring in “fbxcharacterimport” node and choose FBX file.
Bring in “bonedeform” node and now the character is animated.
Add time shift node (node that lets you manipulate time)
Delete the channel in the frame section. Set a key at frame one(alt+click)
Go to frame 31 and create one more keyframe.
Then go to the animation editor and change the function to linear. Now the animation will play at the same phase as the original one.
To make the animation window pop up press alt+shift+c.
Change the end time of the animation to frame 62. (to make the animation slower)
Copy the keys of the original curve. go to frame 63 and paste it. (to repeat the animation)
Create transform node. We created this node so he will keep walking from the same location.
Go to frame 62, and create a key on the transfer parameters.
Go to frame 63 and
Create one more timeshift node, link it like so, delete the channel of the frame the put in 62 instead.
Now, on frame 63, mark the pink flag on the second time shift.
Move the character (transform node) back to the same location as the wireframe. Then set a keyframe. (alt+click the window of the parameter we changed)
Then delete the second timeshift as we don’t need it anymore
Next thing is to add a gun to the scene. Insert a tube and change its parameters:
Add a group node and link it like so. Then under base group click on the select icon and double click the first hand. Then click shift and double click the other hand. At the end hit Enter.
Now add a blast node. Under select group, choose hands and enable “delete non selected”
Now, add time shift node, delete the channel and set it to 1.
Then, add merge node and transform node and link them like so. Next, turn the pink flag on the timeshift and the blue on transform.
Now use different viewports to adjust the location of the tube:
To make the tube move with our character add “point to deform” node (and delete the merge node, we do not need it). Link everything like so and mark the following flags:
Add merge node like so:
Now to render it out in Karma:
First think we need to do is to add blast node like so:
Then under group choose solider_body1 that under FBX material name. We used this blast node to understand what part we want to isolate.
Then add “attribute delete” node and link it like so. Enable “Delete Non Selected”, enable “primitive Attributes” only and inside select “fbx_material_name”. Enable Update Local Variabls. Then add null node and change its name to “solider_render”
Now, go to stage mode and create “sopimport” node and copy our null in SOP Path.
Then create a material library node and link it to Sop import. Inside it create a karmamaterial node and rename it to head. Inside this node add karma material builder node and link it to the base colour. Under the filename choose our head shader (diffuse map).
Now go to stage to the top folder and select the material library. Enable “Assign to geometry”. Hit “auto fill materials” and drag the geometry path of the solider_head6.
Go back to our geometry tree. To change the attribute name, add rename attribute node like so. Under primitives, change fbx_material_name to name.
Now we will be able to see our head shader.
Repeat the same process with the body now:
Under stage under Material Library create one more material image node and rename it to body. Inside it create mtlximage node and link it tot the base colour. Under Filename select the shader we want to use.
Go back to the Material Library node and hit autofill again. Drag the body from the bottom into Geometry path.
To adjust the shininess of the shaders, go inside the material and adjust it:
Go back to the top folder of the stage and add Dome Light node. Link it like so. Under texture choose HDR file.
To add the stick(gun) to our render, create one more sop import. Copy the tube render into the sop path. Then add merge node in the stage and link everything like so. (Attached the final node tree of the geometry as well)
Final Result:
Week 7 – Rigid Body
The Workshop Activity:
Distraction. Smashing glass and bricks
Bring in a testgeometry_crag1. Inside create unpack node and choose to transfer the following attributes: shop_materialpath name v.
Go back to the top and create a grid. Change the grid position and dimensions so the character will stand on it the entire sequence.
Under testgeometry_crag1 add a box and change its dimensions so it will match glass.
Add matchsize node right below it. Change Justify Y to Min. Bring in Transform node and move the glass shape we created to where the character interacts with it.
Bring rbdmaterialfracture node and link it to transform. Change the material type to glass and curved glass to flat plane.
Add “add” node. Hit + to create one point and move the point where the monster interact with the glass.
Under rbdmaterialfracture1 settings disable “scatter point” and enable “input points”
We can adjust the details if we want
Bring in rbdbulletsolver1 and link it to rbdmaterialfracturel. Change The Collision Type from “Animated” to “Deforming” and Ground Collision from “None” to “Ground Plane”
Then link everything like so:
To change how breakable the glass is, under rbdmaterialfracture1 change the “Radial Strength” to 50 and “Concentric Strength” to 200 while keeping the same ratio (1:4).
Add Blast node and link it like so. The reason we are doing it is to select (or delete the rest) the head of the monster only so the simulation will run faster. Change the blast node name to delete. Enable “Delete Non Selected” and select the head.
Add a group node and link it like so. Change the name to “activepoints”. Change group type to points. Enable “Keep in Bounding Regions”.
Hit “Initialize to input Bounds” to change its dimensions so it will be the same as the glass. Adjust the box so only the bottom points will be selected.
Bring in attribute create node and link it like so:
Change the name to active, class to points and type to integer. Group to “activepoints” (same name as the group we created) (23).
To visualize the process hit I and active. This is our script so far (and its not working like we want so we will make more adjustments):
Now delete the third string 26
Under rbdmaterialfracture1 enable scatter points and change it to 5 (and now it should work fine)
What we have got so far:
Wood:
Repeat the same steps we did for the glass: Create a box, adjust its dimensions, add matchsize node. Change Justify Y to Min. Bring in Transform node and move it to where we want the monster to interacts with it.
Create a copy node to duplicate the wood. Change the total number to 3 and translate x to .2
Bring in rbdmaterialfracturel node and change it to Wood
We need to pack both the wood and the glass material fracture, merge them, unpack them and link them to our rbdbulletsolver (so it will apply for both of them).
Now it should look like this:
Make the guy explode on frame 247:
Create a timeshift node to freeze the frame we want to, and link it like so.
Delete channels, write 247 and copy the parameter.
Add rbdbulletsolver node. Paste Relative References to Set Frame tab (should be 247)
Under collision tab add ground plane.
To choose when the collision of the actor starts, add in a Switch node and link like so. Change Select Input to $F > 247 and change the order of it so rbdbulletsolver2 will be above unpack1.
Frame 244 and frame 252:
Add Trail node to calculate the velocity of the movement, so the velocity and the momentum will keep up once it collides. Change the Trail settings to Compute Velocity.
Add merge node to visualise everything. Finally, disable blast to enable the entire body.
Final Script and Video:
Pool Balls:
Bring in a sphere and change its dimensions like so:
Then add “copy and transform” node. Translate x to .05 and create 5 copies.
Add one more copy node and this time Translate Y to .05
It should look like that:
Add a transform node like so to move the original ball aside.
To actually create this ball create a merge node and link it like so:
Add a matchsize node (to put the spheres on the ground) and change Justify Y to Min.
Then, add Pack and Attribute Randomize nodes so we will be able to change the colour of the spheres.
Now we need to add Unpack node to be able to transfer Cd (magic word for colour diff) attribute (and more att in the future)
Now to make the simulation add RBD bullet solver node. As usual, under collision change ground collision -> ground type to Ground Plane.
To create a movement for our seperated sphere we will need to add in a “Attribute Create” node and add velocity (v). Change the name to v which is a magic word in houdini for velocity. Change Type to Vector and X value to 4.
We need to add density as well. Hit + to create one more attribute. change its name to density (also a magic word in houdini). Change the type to float and change the x value to 15.
Then in the unpack node we created before we need to add v and density.
We need to create a density attribute to the group of balls as well so we will repeat the same process as before but this time change the value to 1.
Under rbdbulletsolver1 node under Properties tab, enable Override and write density at the beginning of the sentence.
Final Script and video:
Think about ideas for next week:
Rock slide, fire spreading. can involve gas or water or things breaking up. 30 sec max. Try to create small scene (something that will fit in the room).
Assignment: Create a Houdini animation showing a Natural Disaster
My Idea:
I will create an animation of a 3x3m floor. The floor will freeze, with smoke appearing during the freezing. After that, the floor will break apart and collapse.
Steps:
1. Freezing Effect: The floor will freeze and look like ice. I don’t know how to do this yet, so I will learn how to create ice in Houdini.
2. Smoke Effect: While the floor freezes, smoke will appear to make it look more dramatic. Volumes
3. Breaking Effect: The frozen floor will break and fall apart. I will use either particles or rigid body simulations for this.
Week 8 – Camera movement
The Workshop Activity:
Drone Disaster Exercise:
We will add lorry and create a smoke that will follow it and cast a shadow.
This bitmap is attached to the camera. so if we will scroll in or out we wont see the video anymore.
Bring in a File node so we could bring in the lorry.
We will draw a line that will be the path of the lorry
Add a curve node and change the primitive type to Bezier. Click on show handle and paint the curve. Hit enter to end the curve 2
Add Resample and Carve (chopping out the path) nodes beneath it. Under Resample, turn on curveu attribute so we will be able to visualize it.
Leave resample on .1 resample makes the curve smoother. To see our curveu, click to I and enable it. Control click on curveu to adjust the visualisation settings
Add Blast node. Change the “Group Type” to Points and enable “delete non selected”. Change the group parameter to 0 (which is the first point in the curve).
To add velocity to the curve we need to add a Trail node, and change to “Compute velocity”. Unlink it from the tree. Then add a “copy to points” node and link so:
Under “Carve” node, set a key (0) on the first frame (0). On the last frame to 1.
Open the animation graph and change the function (curve type) to “Linear”.
Link back the trail node so it will use the velocity for the direction.
Set keys on the Carve node so it will match the pace of the lorry and camera. Select the entire curve and change to spline. On the last keyframe change to 0.999999 so the lorry won’t disappear.
Add attribute delete node under file to tidy the FBX file we imported up. Delete Non Selected -> N uv and shopmaterialpath.
12 Create a new geo node. Inside add Object Merge node. Under Object 1 parameter paste the curve from the previous tree (the first node)
Add sweep node. Change the Surface Shape to Ribbon and change the width to 10.
Add material node like so. Then go to mat window and drag the shadow into the material tab
Switch to Render view. Edit the colour of the shadow. Disable Colour Correction and sample the colour of the ground.
Now we want to select the bottom part of the tires. To do so, add a “group expression” node and adjust the settings. Change the name to smoke_emit. Under “VEXpression” choose “X coordinate less than 0”
Change the “x” to “y” and set a small number instead of 0 (let’s say .1).
With X vs with Y
Under “copy to points” add a “Null” node,rename to “Car_render”. Add “Blast” node.
Under Blast, change “Group” tab to “smoke_emit” (the group that we have created one step before) and enable “Delete Non Selected”. Now add “Null” node and name it “Smoker_emitter”.
CMD+click “Sprase Billowy Smoke” under the Pyro shelf. The reason we hit CMD isso we won’t need to choose location for it.
It will create two different nodes on the top Geo. This is how “billowy_smoke” tree look now. Detach “smoke_base” and bring in “object_merge” node and link it instead.
Insdie “object_merge” node, link our “smoke_emitter” from the previous tree.
Go back to our camera and space+g to view our object.
Add “polyfill” node and link it like so. Now we have emitter points.
Select everything like so:
Week 9 – Rigid Body
The Workshop Activity:
Modular Building:
Drop in a Geo node and call it Tower. Inside create a null node and rename to “control_object”. Bring in a grid. Change the size to 7×5.
We need to take into consideration the following:
Unit width (float)
Unit Depth (float)
Storey Height (float)
Column Width (float)
Floor Thickness (float)
Number of storeys (integer)
Layout Type (integer)
Right click on “Null” node and go to edit parameter interface.
Drag a Float/Integer. Change the name, label and type of each one of according to the list above. Hit apply every time you add a new float or integer.
Under Null – Change the parameters accordingly:
Go back to the grid and change the parameters so it will match the parameters of the null. First change the grid rows to 5 and the columns to 7. Now go to the Null object, Copy Parameter of “unit_width”. Paste relative reference on the x size. Multiply by cols minus one. Do the same thing with the Y parameter. Instead of “unit_width” change to “unit_depth” and instead of “cols” change to “rows”.
Bring in a blast node. Link to the floor and change to Primitive. Hit the mouse logo to select the faces. Hit enter once you want to complete the operation.Create one more blast and create a different shape.
Bring in a Switch node and link both blasts. Under Null copy parameter of the layout type. Paste Relative Reference on the switch node under “select input” parameter. Now we can change the layout type between the two shapes that we created.
Create a box. Rename to column. Copy the column width of the null. Paste relative reference on X and X of the box. Y is the storey height.
Bring in Copy to points and link it like so:
Add transform node. Rotate x to 90.
Bring in matchsize node and justify y to min to put them on the floor.
Bring in a Null node.
Now to create the wall:
Bring in a group node and link it after the switch node. Rename the group to “outside_edges”. Change the group type to “Edges”. Enable “include by edge”. Enable “unshared edges” to choose the outer edges.
Bring in a dissolve node. Set the group to “outside_edges”. Set the operation to “Dissolve Non Selected”. Disable “remove Inline Points”
Create a second group. Change the name to “long_edge”. Change the group type to “Edges”. Enable “Include by Edges”. Enable Min and Max edge length. Copy the parameter of the unit_width of the null and paste relative reference on both of them. (if its not working so add +1 and -1 on each of them)
Bring in “curvefromedges” node and under group select “long_edges”. Bring in Resample node and enable “Resample Polygon Edge”. Disable “maximum segment length” and enable “maximum segment”. Set the segment parameter to 2. 16 17
Bring in a “grouprange” node. Change the Range Filter – select 1 of 2.
Bring in “for each connected piece” node. Relink “group range” in the middle.
Now bring in a sphere node (for visualisation) and copy to points node. Change the settings of “Target Points” to “mid_points”
Now we need to build long walls. Bring in a box and rename to “longwall” (don’t link it yet). X is unit width minus column width. Z is wall thickness. Y is story height minus floor thickness.Bring in matchsize node. As usual, set justify Y to min.
Bring in Colour node and Transform node. Under Y, paste relative reference of floor thickness.
Tidey up by selecting the nodes and hitting L. Create a network box and change the colour. Name it “Long Wall”
Short walls.
Copy and paste the network box and rename to short box.
Edit “Curvefromedges” node. Add ! at the beginning (so it will select everything that is not longedges). Add transform node under matchsize node and change the y rotation parameter to 90.Change the box object name from long wall to short wall. On X change from width to depth.
Result:
For the floor part: From switch node create a poly extrude node. Copy to floor thickness parameter from our null object to Distance, enable “Output Back”, enable side group.
Bring in boolean node to create place for the poles. Then bring in peak node and link everything like so. Under peak, Group = extrudeSide and change distance parameters to the wall thickness divided by two.
Bring in a merge node. Link the boolean, columns and the walls merge into it.
Bring in “copy and transform” node and link to the final merge node. The “Total Number” is the number of storeys parameter and Translate Y is storey height parameter.
Final Result:
Week 10 – Flamethrower
The Workshop Activity:
Flamethrower:
When importing FBX file from Mixamo: The first string is the geometry, The second string is the Rig. The third string is the animation.
Bring in a rigpose node. Animate the X rotation: 1st ketframe: -10, 100 keyframe to 10 and 200 to -10 again. 2 1
Add a group node and rename to “muzzlepoint” and link like so:
Merge “man_rwender” and “copytopoints1”. Then create a null underneath.
Create a new Geo node and rename to “fire”. Inside bring in object merge node and link our emitter object from the fighter geometry.
Now we need to create a velocity attribute. So bring in a normal node. Change it to points instead of vertices.
Bring in a point wrangle node. Type in: v@v=@N;
Bring in POPNetwork node. Bring in a reverse node and link like so to change the direction of the normals.
Bring in one more object merge node. This time bring the Collider (null) from Geo Wall and rename to wall.
Inside Pop network on “source_first_input” change the birth to 2. Under Attributes change the inherit velocity to 22.
Add gravity node, merge node and static object node and link everything like so: Change the gravity to y to -4.
Under static object: SOP Path is the wall null (/obj/fire/wall). Under Collisions change to “Use Surface Collisions” to make it actually hit the wall. Under Physical change the bounce parameter to 0.
Bring in an Att noise node. Change the type to vector. Change the element size to .02 Enable Animation. Change the att name from Cd to SpeedNoise.
On pointwrangle1. change the line like so: v@v=@N*@SpeedNoise;
Link a blast node under the popnet. Change the Group to: stream_source_first_input and enable Delete Non Selected.
Add att delete node. Enable Delete Non Selected. Under Point att write v age 3 4
This is where the smoke will be and how much we will get from it:
Bring in attribremap1 node. Original Name = age, New Name = density. Hit compute range. Change the ramp like so:
Duplicate this node and instead of density write temperature. Same with flame.
Bring in volumerasterizeattributes1. Type in the following attributes under General->Attributes: density flame temperature v. Change the Particle Scale to .01 and Voxel Size to 0.01. It will change the size of the smoke.
Bring in a Pyrosolver node. Change the voxel size to the same number of the voxel number on volumerasterizeattributes1. Under Sourcing, Change source 3 to flame.
Final Script and Video:
Week 11 – Rain
The Workshop Activity:
Particle system of Rain:
We will create 2 particles system and water.
Open Rain project. Inside Rain geo, change the grid height to 3.5.
Bring in a POPNET node and adjust the source first input settings (attributes)
Set it to “set initial velocity”.
Under source_first_input:
To adjust the direction and the speed of it we will change the velocity and variance.
– if we want to have the rain go from specific area we can add att paint node, paint on the grid. Then on source_first_input node, under source tab type in mask on “Emission Attribute”.
Under Birth tab, change the settings like so to adjust the behaviour of the rain: 2
Under Stream, change to “Rain_stream”
Under the popnet, bring in Att Delete node, enable Delete none selected and write in “v id age”.
We need to add a collider inside the popnet so the points will have a floor to bounce on.
So add a merge and a ground plane like so:
Also, on the ground plane, we can take off the grid by disable proxy geometry.
On this ground plane we can determine how bouncy it is.
To add wind, inside POPNET bring in a popwind node and link it under source_first_input node. Change the air resistance to .5 and change the age (life expectancy) to 1.55. Also add gravity like so:
Now, we need to know when the rain hits the floor. So inside POPNET bring in popcollisiondetect1 node and link it like so.
Under Behaviour, enable group name and write “hit”. Now whenever the rain hit the floor it will turn red.
Bring in a popstream and merge nodes and link them like so.
Then Enable Select Group and select hit.
Under popsolver -> collision behaviour, change the response to die.
Under the popstream node add popreplicate node. Change the life expectancy to “1/$FPS” . Add popcolour under the popreplicate node for debugging purposes. Under stream type onehit
Now, after the att delete, bring in two blast nodes
Delete non selected on both of them. Select on the first blast “stream onehit” and as for the second blast “stream rain stream”.
Link a popnet under “onehit” blast.
Inside the popnet -> source first input, adjust the following and add gravity node.
Add merge node and null node and link everything like so.
Link a null out of the rain stream and name it rain_for_splashes
Go to the water geo, add att create node. name both of then rainhit.
Bring in attribtransfer and link both of them. Change the settings of it like so:
Then bring in point Wrangle node and type in “@P.y += @rainhit * .1;”
Bring in a ripplesolver node and link it like so. Enable Use Input As Animated Displacement. Adjust the Conservation and wave speed parameters to get a more subtle look.
Final Rain:
Week 12 – Dolphins
The Workshop Activity:
Dolphins:
Bring in a path deform, go to frame 1 and make a key on curveu (0). On frame 240 set the curveu key to one.
Change the animation curve to linear .
Link resample node under the line. On att name change it from Cd to P. Change the Fractal settings to none to make the line smoother. Under noise value, amplitude, click xyz logo and change the x value to 0.
Bring in a sphere, vdbfromPolygons, scatter and copytopoints nodes.
Change the sphere uniform scale to 10. change the y axis to 0.1 and z axis to 0.4.
Under VDBfromPolygons turn off distance VDB and turn on VDBFog.
Under Scatter change the Force Total Count to 20. Link everything like so:
To make some of the dolphins location a bit more random:
Bring in group. Rename to outliers. Disable Base Group and enable Keep by Random Chance. Global seed = 1 and Percent = 20.
Then bring in Pointjitter node. Change the Scale to 10 and Y axis scale to 0.
After the attribute noise, bring in PointWrangle node. Type in:
float frequency = ch(“frequency”);
float amplitude = ch(“amplitude”);
@P.y += sin(@P.x * frequency) * amplitude;
Right click on this node -> parameters and channels -> edit.
Select the frequency and change the range from 1 to 5.
Now, we dont want them to swim the entire time.
So we will set up another att noise. Link it under the first noise. rename it to noise swim.
Visualise the swin attribute on this node.
Att name = swim. Float. Range Values – Zero Centered. Element size – 5.41.
Bring in an att remap to clamp the values of the swim between 0 to 1. Link it under noise swim node.
Change the Original Name and New Name to “swim”.
Go back to point wrangle node and multiply by swim:
float frequency = ch(“frequency”);
float amplitude = ch(“amplitude”);
@P.y += sin(@P.x * frequency) * amplitude * @swim;
Draw another curve: Drop down a curve node. Set it to nurbes. Paint it like so.
link it to path deform. Bring in transform node and rotate the Y axis to 90.
Final Script. Rename the null to dolphins_out
Outside, on the Null Object, Change the path inside the brackets to dolphin null.
Make a high poly model a low one:
Assessment Title: Create a Houdini Animation that Shows a Natural Disaster
For this assignment, I decided to create a lightning storm. My animation will show lightning striking the ground and an object, with rain falling in the scene.
I’ll include two versions of the final video: one before making adjustments in Nuke and one after. I’ll also add some screenshots from my Houdini project to show the steps I took to create the animation.
Original Simulation:
After Nuke Comp:
Flipbook:
Screenshots:
Overview –
Rain and Water:
Source and target objects for the Lightning:
Lightning:
Sparks:
Scorch:
Get Lightning:
The part of the render marked in red includes an object merge of the simulations. I did this to keep the project more organized.
For the Mantra Render, I set it to only render objects that start with “render_”. I increased the sampling for 12/12.
I also used a 4K camera to ensure high-quality visuals in the final output.