Environmental FX

Week 1

Introduction to Houdini

We looked at the various tool inside the software’s as well as some of the more commonly used nodes. After the introduction we got to test the software out by creating some procedural models.

We created this procedural model and learned a few simple codes to connect transform parameters to each other. This helped us move the object to sit on the grid and also make the tubes on the lego sit on top of the box.


Week 2

RBD basics

  • This week we covered some basic RBD nodes and setup.

We used RBD configure and RBD bullet solver in order to create a domino brick simulation.The box on the left side is the domino brick. On the right side we drew the path of the bricks using curves. The resample node created more points to our curves. Then the copy to points pasted the dominos onto the points on the curves. Then we used RBD configure to set up for the RBD simulation. The sphere on the right side was used as the collision object in order for the dominos to start falling.

We also did the domino bricks on an elevated surface going from the top to the bottom. We learned a new node, ray which puts the curve onto the surface. Also, we went through more about collision geo and putting in multiple. In addition, we learned what convex and concave geometry is.

Lastly we went through the glue constraint. How to set it up and how it works. We also created a brick wall proceduraly for this.


 

Week 3

Ducks floating on the ocean

  • This week we created simple oceans as well as learned useful nodes such as copy to points.
  • We then started working with vellum simulation and learned some basics of that.

The node graph for the ocean

To set up the ocean we used a grid and an ocean spectrum. The ocean spectrum gives the ocean animation such as wind and waves, sort of like a source set up. Then we plug those into an ocean evaluate which merges and deforms the geometry with the ocean spectrum. Then we gave it a color and used a null to give it an output.

The node graph for the ducks

Next we created the ducks. On the left side is the duck geometry with a slight change in scale in the transform node. On the right side is where we adjusted and created the points. We used the ocean as a source geometry for the points. Then we deformed the points in order for them to follow the animation of the ocean. Then we adjusted direction and color. More specifics is in the notes in the node graph.

The result in the viewport

The nodes in the object network

We added a camera and an environmental light to the scene.

A rendered image from the sequence.

 

Noodles in a bowl

Node graph for the bowl and sauce transferWe started with creating the base of the bowl. We drew a curve and used revolve to make it into a geometry. Then we used convert to up the sections of the bowl. After we created the noodles (as shown below), we jumped back into this node graph to create the transfer of sauce onto the bowl. We used attribute create to create an attribute called sauce. Then in attribute transfer we tweaked the distance threshold until we got a transfer that looked nice. We were going to go through how to freeze the transfer after it has been transferred but we did not have time for that.

Node graph for the noodles

To create the noodles we started with a line, then created a volume with points and copied the lines onto the points. Then we plugged that into a vellum constraint that we set to hair. In the constraint we make the adjustments of how the noodles are going to interact, the stiffness, blend etc. Then we plugged it into the solver which simulates it. We used the bowl as a collision object for the noodles.

The result of transferring the sauce onto the bowl from the noodles

The bowl and the noodles


Week 4

    • This week we looked at nodes such as attribute transfer, extrude, bevel and trace. We also finished the noodles project from earlier. 

Attribute transfer

The node setup for attribute transfer

We subdivide the pighead to create more geometry for the attribute transfer. Then the attribute delete just deletes all the stuff you don’t need from the pig head. Points from volume creates points inside the pighead, We create an attribute called pig which is going to be the value that will be transferred. We add that to the grid as well. Then we use the attribute transfer to adjust the transfer.

The attribute transfer from pig to grid

Solver makes the transferred values stay put, and also added an attribute blur so it fades out. The wrangle adds the height with a function.

We add the attribute transfer into the solver. The solver freezes the transfer on the previous frame, which makes the transfer stay put after being transferred on the grid. We also added an attribute blur that makes the transfer fade out gradually. In the wrangle we created a function to give the attribute height.

@P.y = @P.y=(@pig/5);

Adding a height value to the attribute transfer and freezing it and blurring it.

 

Finishing the noodles from last week

Node graph for creating the meatballs

You use copy to points to add multiple spheres. Then the vellum constraints tells the vellum solver what the balls are supposed to act like. Shapematch makes it more dense sort of like a rubber ball.

The meatballs

The setup for the vellum simulation for the noodles and meatballs

We merge the vellum constraints then plug that into the solver.

Noodles and meatballs simulated together

Node setup for the attribute transfer to create sauce

We used the same method as the pighead above to create the sauce, except from the attribute blur. We added a color to the sauce as well.

The finished product

 

PolyExtrude

We did an exercise were we extruded some parts of a grid.

Extrude exercise

We created a group where we selected the parts we wanted to extrude. Then we randomized the zscale and twistscale which made all of the extruded towers different instead of identical. We gave them a color and randomized that too, and extruded the middle of the top downwards as well. At last we subdivided to smooth them out.

Nodegraph for extrude exercise

Simple example of volume extrude

We did this quickly just to show how the extrude volume node works. It lets us extrude a surface geometry into a volume.

Volume extrude example

 

PolyBevel

We did an exercise on Polybevel to learn how that works.

Setup for the polybevel exercise

We started by noising up a sphere then using poly bevel to smooth the edges. Then selecting the faces that the bevel created and making that into a group. Giving the edges and the inner parts different colors and extruding the faces inward.

Result of the exercise

 

Attribute from map

We started working on this section of the lesson but we ran into some issues and also out of time so we weren’t able to finish the entire thing.

We took a black and white picture and used the trace node to create geometry based on the photo and then extruded it.


 

Week 6

    • This week we worked on volumes and smoke simulation, as well as finishing the trace lesson from previous weeks.

Creating a 3D model from a picture

We started doing this in week 4 where we tried tracing a logo from a picture. There were some issues last time, so we revisited it today.

We start by importing the picture from file. Then we match the size to the scene. Then the trace node traces the outlines of the logo. We then used resample to fix the wireframe from the trace node. We then used hole to remove the parts that are supposed to be holes in the logo, because the trace node was giving us geometry there. Then reverse node flipped the surfaces around since they were facing the wrong way. The we extruded it out, and grouped the edges that we wanted to bevel and beveled them.

After the trace node

After removing the holes

Finished 3D logo

 

Smoke simulation

The first step was to create the furnace geometry. We used a curve to create the base shape, resample to smooth the curve, then revolve to create the geometry based on the curve. Converted it into polygon, then used two tubes with boolean to create the columns on the bottom. The VDB sets it up to be able to be used as a collider later in the project.

The curve for the furnace

The furnace after revolve

The tubes used for boolean

Finished furnace

We used a shelf tool called billowy smoke to create the smoke.

We added a static object which is a collision object. This was the VDB version of the furnace we created earlier. Other than that the smoke is very much standard automatic settings from the shelf tools.

We then moved onto creating the rotating propellers. We started by creating a line, for the supporting bars we then used polywire and copied that to make one on each side of the cloth. For the cloth I used carve to make the line start further out so there is a gap between the origin and the cloth. The resample created more points on the lines and revolve was used to create the cloth. The group range nodes selected the edge points where the cloth is to be attached to the supporting bars.

The copy node is used to copy the shaft around so there are four. Then using transform nodes to animate a rotation.

I then set this up to become a collidor for the smoke simulation by converting it into a VDB.

The split node seperates the cloth so we can simulate by using vellum simulations.

This is the complete nodegraph for creating the rotating shaft.

Added another static object that were the rotating shaft as collidors for the smoke.

 


 

Week 7

  • This week we looked at creating a path and making something follow that path, as well as basics on heightfields.

Find Path

We started off the lesson by learning how to create this terrain. Heightfield gave us a base with a large scale. Then the noise created a terrain look. The distort gave more detail to the terrain. Then the erode created a map of the levels with attributes attached to them such as water. Mask by feature allowed us to make a mask based on angles. Then the convert node converts it from a 2D heightfield to a polygon.

We then added the water and the mask attribute to create a work attribute. The work attribute represents the areas that the path can’t go through. The VEX and the VOP does the same thing, it’s just visualized differently.

We then remesh it to make the geometry more organic. Then we pick a start point and end point with groups. Find shortest path will create the path between them, and we add the work attribute into “point cost attribute” in the parameter. Then we resample and convert it to nurbs curve to smooth it out. The sweep is just for better visualization of the path.

 

Car and ground destruction

Used attribute paint to create a mask for where the ground destruction shall be. Then cut it out and grouped it.

The uv texture is then transfered onto the patch based on position. After that we created fracture with material fracture and used RBD solver to destroy it.

The node graph for the ground destruction

 

Drew a curve and used sweep to create a wide grid.

Used attribute paint to mask where the path should avoid.

Find shortest path creates the shortest bath from the start point to the end point.

Then used carve to animate the line in order to create a point that moves along the path.

The car is then copied onto the point.

 


 

Week 8

  • This week we worked on creating ripples. We also looked at how to use foliage in Houdini and Karma.

Droplets and shakes

Started by creating a grid with noise. Then using extrude volume to create a group based on depth that will be the water.

The scatter is used to create a point that scatters around in the scene. Creating an attribute based on this called splash.

 

Inside the dopnet we create the ripples with a source and solver.

The whole node graph for creating the ripple simulation.

 

Foliage

Points where foliage shall be scattered onto.

All the foliage on top of each other.

Each foliage is given an index attribute.

The foliage imported with individual id’s.

The solver allows for each foliage to stay in scene when scattered onto the floor.

The index each foliage is given is then connected to each frame. Then the solver and timeshift makes it so they are all scattered at the same frame but at different points in the copy to points. The points they are scattered onto corrolates to the index the point and foliage is given.

 

Setup in karma with materials

Foliage with material

Ground with material

Material for foliage

Ground material

Final look in Karma


 

Week 9

  • This week we looked at small and big ocean setups, and basics in particle simulation.

Small Oceans

How to setup an ocean without shelf tool

Where to find the ocean in shelf tools.

This is the basic setup for an ocean with white foam from shelf tool

 

Ocean with white foam

Setup in karma for ocean

Ocean in karma render

 

Large Oceans

Large ocean in Karma

Ocean with white foam in large scale

 

Particle sims

Basic setup for a particle simulation with a collision object.

Basic setup where we give the sphere a vector in the wrangle. Then the particle simulation is created. We then clean up the attributes and give the particles pscale attributes and colors.

 

 


 

Week 10

  • This week we did a pyro simulation.

Creating a flamethrower

Adding noice to vscale attribute and remapping the values from 0-1 on a ramp.

Creating velocity and adding noice to it by multiplying it by the vscale.

Turning this into a particle simulation.

Deleting the collision geometry and cleaning up attributes.

Creating attributes for the pyro simulation.

Creating a channel ramp to controll the age of the burn attribute.

Volume rasterize to turn the attributes into volumes.

Set up the pyro simulation.

Create material with pyro bake volume.

Set up scene in Karma.


 

Week 11

  • This week we looked at flip simulations.

Blood droplets on skull

 

Importing the skull and matching the size of it to the scene.

Scattered points inside a tube and copying sphere onto those points.

Then the spheres where animated to move through the box and boolean for intersection. So they appear only when they move through the box.

Plug this into a flip simulation set up. We only tweaked a few settings such as viscosity and fluid tension, but left mostly as is.

Turned the skull into a VDB in order for it to work as a collision object.

The particle fluid surface made the fluid particles coherent and looking like consistent fluid.


 

Assessment

Pre – Production

Idea:

  • The idea is to create the atomic breath that godzilla can spew out.

Referances:

 

Production

I found a godzilla model on sketchfab under CC Attribution-NonCommercial-ShareAlike.

  • The first step was to import the model.

The model came as a GLTF file so I had to import it as a gltf scene in Houdini. That created this big scene file.

I looked through the gltf scene and found the only parts that I would need. From there the model with animation layed within node “Object_7”.

The setup for the model was automatic, so I only added a null in order for me to be able to retrieve the model in another geometry node.

 

  • Next step is to ready the model for use.

Firstly, I used transform to straighten the model and rotate the way I would like.

Next I used the tommy test geometry to adjust the scale of the godzilla model.

 

  • Setting up the source for the simulation.

Firstly I seperated the head from the model. Then I needed to create a point that tracked the movement of the head. I achievied this with the extract centroid node, and then I used transform to move the point to the center of the mouth instead. The vector operator (VOP) node I used to give the point a normal that follows the movement of the mouth.

I then created a sphere which I noised up with animation, and then scattered point on the surface. Then applied noise onto the color and used the darker values to delete those in the blast node. I then used a VOP to set a velocity of 2. Noised up that velocity then used transform to make it point in the right direction. We also created the brun and temperature attribute that we need for the pyro simulation here. This is to ensure that the noise we apply to the attributes follow the simulation instead of just be applied on top of the simulation.

Copy to points copies the noised source we created onto the tracked point we created. Then we create a particle simulation based on this. In the simulation we mainly adjust the velocity scale and life expectancy to create a good result.

 

  • Setting up the pyro simulation.

Burn and Temperature

Velocity

On the left side I rasterized the burn and temperature attributes, and on the right side I rasterized the velocity attribute. I seperated these in order to noise up the velocity seperatly, but I generally find rasterizing the attributes seperatly good practice when working with pyro simulation.

Pyro Simulation

After pyro bake volume

In the pyro simulation I adjusted the parameters until I got a result I liked. When you create a good noised up source, then the simulation part becomes much easier. It is rather important to have a good source when working with pyro, it is one of the most important steps. Mainly I adjusted the density and temperature fields, as well as added noice through distrubance and turbulance to break it up and avoid mushroom shaped flames as much as possible without loosing the shape of the simulation. Then in the pyro bake volume is where I made it actually look nice with colors.

The entire node graph for the atomic breath FX

Node graph in the object network.

I chose to render in mantra despite karma being what we worked on in this class. This is because I am most familiar with mantra, and prefer using that rendering software.

 

Render

 

Final

For the final look I added some slight glow and vignette in Nuke.

 

Breakdown

 


 

SHOWREEL