Skip to Content

Bac​​​​​​​​​k

Procedural Rock Generator


Framework: Unreal Engine, Editor Utility Widgets, Geometry Script, C++


Overview

Originally started as an R&D initiative to explore Unreal’s early Geometry Scripting capabilities, this project evolved into a fully integrated, production-ready procedural generation tool. The system allows environment artists and level designers to input a primitive base mesh and apply a non-destructive "Recipe" of procedural operations to generate high-quality, game-ready natural assets (like rocks and cliffs) in minutes instead of hours


Production Impact

  • Massive Time Reduction: Reduced average rock creation time from ~30+ minutes (traditional ZBrush sculpting) to under 6 minutes per asset

  • Scale: Successfully utilized by the environment team to generate thousands of unique, Nanite-ready assets for a shipped game


User Experience

A major goal of this tool was to ensure it felt like a native, built-in Unreal Engine feature 

  • Native Look & Feel: Built entirely with Editor Utility Widgets, featuring a responsive interface with instant viewport feedback for every parameter tweak

  • Drag-and-Drop Workflow: Artists can intuitively reorder procedural operations within their recipe via a custom drag-and-drop UI

  • Safe Execution & Error Handling: Implemented robust guardrails to prevent engine crashes. For example, if an artist accidentally attempts to apply a dynamic recipe to an incompatible Static Mesh, the tool intercepts the command, safely blocks execution, and provides a clear popup notification with the exact solution

  • Interruptible Processing: Integrated progress bars with keyboard shortcuts to allow artists to safely interrupt heavy geometric calculations

Core Architecture & "Rock Recipe" Data Assets

The backbone of the tool is a data-driven recipe system designed for easy iteration and source-control safety

  • Polymorphic Operations: The core logic utilizes a custom TArray<TObjectPtr<UObject>> structure. A base EntryData class acts as the foundation, with specific procedural operations (like displacement, tessellation, or smoothing) inheriting from it. This allows for a clean, extensible codebase where new operations can be added without breaking existing recipes


  • Standalone Recipe Assets: Recipes are saved as standard .uasset files. This ensures that different maps or biomes can maintain their own unique generation rules, and version control conflicts are minimized since team members aren't fighting over a single master database


same base mesh with different recipes

same base mesh with different recipes


Custom Triplanar Height Map Interpolation

While the tool heavily leverages Epic's built-in Geometry Script framework for tasks like final UV generation and map baking, I developed custom nodes to solve specific aesthetic issues.



A primary challenge was applying procedural displacement via height maps onto spherical or complex base meshes, which traditionally results in harsh, visible seams. To solve this, I engineered a custom Geometry Script function node utilizing a modified triplanar projection concept. This node mathematically interpolates and fades the height maps across complex angles, resulting in seamless, natural-looking surfaces regardless of the base mesh's topology