Procedural Islands

Timelapse of island generation process. Most of the meshing is done using noise displacement techniques, employing a number of tricks to improve art direction and quality relative to time and memory costs.

Timelapse of island generation process. Most of the meshing is done using noise displacement techniques, employing a number of tricks to improve art direction and quality relative to time and memory costs.

The trees and bushes use custom Houdini scripting to properly export hierarchy information and vertex data for use with unreal's pivot painter foliage shader.

The trees and bushes use custom Houdini scripting to properly export hierarchy information and vertex data for use with unreal's pivot painter foliage shader.

The vertex animation portion of the grass shader. It uses pivot information in the vertex data of the grass mesh to apply rotations per grass blade, and a number of tricks for micro-variation to make the wind motion feel natural.

The vertex animation portion of the grass shader. It uses pivot information in the vertex data of the grass mesh to apply rotations per grass blade, and a number of tricks for micro-variation to make the wind motion feel natural.

A custom Editor Utility Widget is used to import the meshes and CSV data generated by Houdini automatically from a directory.

A custom Editor Utility Widget is used to import the meshes and CSV data generated by Houdini automatically from a directory.

Each island is contained by sublevel that is loaded dynamically, and is handled by a blueprint which is responsible for containing and setting up its meshes, materials, and other data.

Each island is contained by sublevel that is loaded dynamically, and is handled by a blueprint which is responsible for containing and setting up its meshes, materials, and other data.

Example of island blueprint, this function assigns its meshes and materials.

Example of island blueprint, this function assigns its meshes and materials.

Each island has a datatable which is automatically populated with various parameters used for level layout and gameplay.

Each island has a datatable which is automatically populated with various parameters used for level layout and gameplay.

The island sublevels are setup in the main level by a layout script, which uses the information provided by the datatables.

The island sublevels are setup in the main level by a layout script, which uses the information provided by the datatables.

Island sublevels are populated in the main level at runtime, and switches between the main island BP and visual proxies for performance.

Island sublevels are populated in the main level at runtime, and switches between the main island BP and visual proxies for performance.

This artwork was made for a personal game prototype in UE5. The game revolves around finding hidden crystals using environmental cues. As such, much of the environment art is created and populated procedurally from a level design specification. The island geometry is made in a 100% procedural workflow in Houdini, and the only input is a procedural noise that defines the base island shapes and a few level design parameters. The pipeline is built around a TOP graph to efficiently and robustly coordinate the pipeline and render island variants. The trees/bushes are vertex animated with a hierarchical pivot painter technique, while the grass and flowers use a more straightforward shader using pivot data. The water is also animated using a procedurally created flow field in vertex data. The scene is runtime optimized, and runs at 120+ fps on a GTX3070--the pipeline includes LOD generation and setup in UE5 for all meshes, along with automatic level streaming setup based on the level specification. It also includes a quality switch for good performance on weaker systems.