Andrew Walker

technical artist

Volumetric Level Editing Tools in Unity

Overview

This project combines various tools made with Houdini Engine for Unity to generate environments from simple inputs.


Root Erosion

To create a landscape from a 3D blockout, first we gather the inputs and create a proxy mesh by making a volume from the inputs and meshing the result.
Additionally, the blockout is blended with a bedrock surface to create a smooth transition into the ocean.
For this project, I wanted the landscape to be composed of stone through which giant roots have grown.

The root erosion is done by embedding tetrahedra in the proxy mesh and iteratively growing roots using a shortest path algorithm. Each pass removes mass from the proxy, which is then used to generate a stylised mesh for the stone. Root growth is weighted to the surface of the proxy mesh so we don’t waste geometry by creating unnecessary internal structure.


Biomass

To create a smooth, playable surface where we can spawn vegetation, I added a mossy layer which is generated by spawning particles and meshing the result.


Scattering

I created a data-driven system for scattering, which uses Scriptable Objects to store meta-data such as mesh, spawn chance, scale range, orientation and surface blending.
This data is pushed into Houdini via a helper script, which greatly reduces parameter fiddling in HDAs and allows easy reuse of biomes across different tools and scenes.

Biome data is composed in layers, allowing priority to be given for placement (e.g. trees before shrubs). Rendering is driven by indirect instancing for maximum performance.
This project uses The Vegetation Engine plugin for animation & custom shaders to achieve the stylised aesthetic. The grass uses extra instance data such as the surface normal and AO to blend into the environment in any lighting condition.