Down by the river
I wanted to demonstrate a wide range of techniques in one scene, as well as try out some new stuff, so I decided to generate a realistic river simulation and make it snowy as a bit more of a challenge.
The main techniques in this project are;
Procedural generation of terrain.
Realistic large scale fluid simulation.
Instancing of geometry such as trees, grasses and plants.
Snow generation (a new one for me).
Efficient Redshift rendering.
Procedural Terrain
I was able to create a procedurally generated terrain for my river using VDB’s. The driving force for this is a curve that defines the main river shape. If you change the shape of the curve, the entire system right down to the render stage will update. This allows me to update the river shape without having to move any of the other geometry around such as the rocks and plants. Just a re-cache and it’s done!
Rocks are scattered from a single master rock model. They are predominantly on the river bank, but a few are on the river bed to give the water flow a more interesting shape. The one in the background was manually placed. I used the terrain to cut away the parts of the rocks that were below ground level to make the scene more efficient. In the end I used proxy geometry that was instanced for the terrain and rocks but with the polygon models I am able to generate a WetMap.
Large Scale Fluid Simulation
The fluid simulation uses the efficient VDB terrain and rocks as a collider. If you were to use a different seed for the terrain geometry the river would adjust accordingly. Even at a very high resolution the simulation only took around 2 hours to complete 250 frames. I also ran a whitewater simulation driven by the fluid which added some extra detail to the more turbulent areas of the fluid.
Foliage Instancing
For the trees, grass and plants, I used point instancing to scatter them across the surface of the terrain. The trees and grass are scattered procedurally whilst the smaller plants are placed manually. I sourced the foliage from the internet to speed up the production process.
Snow
For the snow, I examined the surface polygon normals of the rocks and terrain and deleted every surface that wasn’t a) facing up (at a defined angle) and b) above a certain point in the river. From there I extruded those points and converted the generated shape into a volume which was remeshed to create a realistic looking sheet of snow that conformed to the geometry below it. A bit of displacement in the shader and a touch of SSS left me with some crunchy looking snow.
Efficient Rendering
When it came to my first test render I was looking at about 20 minutes a frame with all the geometry. So I made use of Redshift proxies and instancing to reduce the memory load and speed up the render times. Once I had that set up I was able to apply the same system to the rocks. Bringing the render times down to about 3-5 minutes a frame at 2560x1080.
Final Touches
The image below is the render straight out of Redshift. I used some of the FX tools to get a nice bloom and lens flare without spending more time in comp.
After a little colour grading in Premiere I had my final image.
I exported a quick flip-book from Houdini to show a quick side-by-side of the preview and final render
As always, a tidy scene file, is a happy scene file!