Procedural Environment

Procedural Environment done with Houdini


2/24/20233 min read

Project Brief

This project is inspired from a digital art piece by Jeremy Schwer. It is depicting an alien biome, with trees that resemble a huge mushroom covering the ground. I attempted to recreate this scene myself, especially focusing on the variety of mushrooms’ shape & sizes, and procedurally generated rock cliffs.

Technical Guide

1. Cliff

The basic method of generating a procedural cliff is inspired by and follows instructions of gsTuts. A six-sided tube is set as the basic geometry, which is later applied with twist and point jitter to mimic the organic shape of a rock. Referencing scatter points from the network output geometry(which I set as a bezier NURBS curve- this is further explained later), rocks are gathered together and copied with the for-loop and copy to points, each varying of scale and size using the ‘fit01(detail)’ expression. The randomization is controlled by a null node named ‘seedRef’, which works as a switch to enable manipulating the seed from the subnetwork.

There is a switch node connected to a Null node, in order to be able to turn on & off the amount of polys that are shown in the viewport and render. This helped me save a lot of time during test stages.

I added the VDB node to combine the meshes into one shape, then chiseled the shape of the rock further using mountain nodes and controlling the axis of each noise node to achieve mimicking the ‘shelved’ characteristic of this particular environment.

2. Mushroom

While both the small and big variation of the mushroom-like plant shares the basic shape and functionality, they are coded to vary by size, shape of the cap, formation of the stem by each element using the for each loop and ‘fit01(detail)’ expression. They are later spread across the terrain, except the areas where water flows, using the heightfield scatter node in the SceneLayout object node.

3. Terrain

The terrain generation utilizes the heightfield feature in Houdini. After forming a heightfield volume, I modified the shape and elevation using heightfield project, noise, blur and finally, erosion to add some natural erosion of the terrain. As it would not be recognised by redshift as a volume, I later converted the terrain into polygons using the heightfield convert node.



Comparison with original image.

Source of original image is listed below in Reference.