Website powered by

Houdini Waterfall

This is my latest project in Houdini, inspired by the waterfall scenes in Pixar's "Brave." I began by analyzing the elements present in the scene and the composition of the shot.

I handled the compositing in Nuke and the color grading in DaVinci Resolve.

Starting with the environment, I used Heightfield in Houdini. I optimized it to minimize polygons and then automatically generated UVs using a loop with an automatic UV unwrapping technique I discovered on Adrien Lambert's YouTube channel. The textures were created in Substance Painter, using Megascans rock textures for Nordic rocks, which served as inspiration for the waterfall.

To optimize simulation time, I created a node to quickly manage simulation quality. I added a checkbox to choose lower-quality simulations for iterative purposes, providing control over simulation iterations with lower predefined quality.

For simulations, I divided them into two parts due to the large environment. This allowed for more precise control over each simulation without the need to re-simulate everything.

I started with the river, which would serve as the emitter for the second simulation. As the river wasn't visibly prominent, I used a relatively basic FLIP simulation.

For the waterfall simulation, I utilized part of the river simulation where it reached the waterfall. Defining a mesh, I created emission points for the second simulation while ensuring velocity transfers for consistent water flow.

This simulation is more complex, incorporating an airfield to generate air movements in the water simulation, creating breaks on the sides similar to real waterfalls.

The whitewater was generated based on various attributes such as vorticity and velocity. I created a density map to drive alphas and emission point density. Using this density map, I also established a life attribute to control the duration of points in the simulation. To avoid clustering emission points at the beginning, I moved them along the velocity in reverse. This step was applied to both simulations. Note that for the second simulation, WW points wouldn't be considered water and wouldn't have water mesh, as the reference cascades showed minimal visible water in the falling part.

The WW simulation includes multiple microsolvers, specifically for the river. The first keeps points at the water surface initially, preventing them from spawning beneath the surface field and applying different velocities based on whether points are at the surface or in the water after spawning.

For the waterfall part, microsolvers remain the same, but to maintain the overall effect of the airfield during the water simulation, I used advection from its velocity field.

Moving to rendering, I started by meshing the waterfall and river water separately. Using a VDB combine, I blended the two, considering their different fields and simulation qualities. To avoid visible seams, I adjusted the pscale of the waterfall particles to align with the river's water surface using the surface field.

To prepare the mesh for rendering with Karma, I performed several cleaning steps. First, I removed anything inside or colliding with the environment mesh. Then, using a cross product, I deleted portions with normals pointing downwards. An attribute connectivity operation removed small disconnected mesh parts, resulting in a clean and flat mesh. The waterfall posed a bit more challenges due to its different water surface type; hence, I blended the shading of the two together.

For shading, I utilized Solaris in Houdini, importing all elements. The water mesh was created using a basic liquid adjusted slightly, while the WW was rendered as a volume with the basic WW shader. Lighting was kept simple with the addition of an HDRI.

Breakdown

Project Inspiration and references

Project Inspiration and references

Environment Creation - Utilized Heightfield

Environment Creation - Automated UVs using a technique from Adrien Lambert's YouTube channel

Simulation Optimization - 
Node created for quick simulation quality management.
Checkbox for choosing lower-quality simulations for iterative purposes.

Simulation Optimization -
Node created for quick simulation quality management.
Checkbox for choosing lower-quality simulations for iterative purposes.

Simulation Process -
Divided simulations into two parts for efficiency.
Basic FLIP simulation for the river.

Simulation Process -
Waterfall simulation derived from the river simulation, incorporating an airfield for breakdown.

Whitewater Generation -
WW generated based on vorticity and velocity.
Density map used to drive alphas and emission point density.
Life attribute introduced for efficient control over point duration.

Solaris Network

Solaris Network

Solaris Network

Solaris Network

Solaris Network

Solaris Network