MAURICIO PORRASOVISUALS
← Technical Work
Procedural Systems

Procedural Worlds Framework

A PCG-driven world-building layer for UE5 that lets level designers scatter, blend, and iterate biomes without touching Houdini directly.

Unreal Engine 5HoudiniPCG
01

Overview

The Procedural Worlds Framework is a biome-authoring layer built on top of Unreal Engine 5's PCG framework, backed by a library of Houdini Digital Assets. Level designers pick a biome, paint density and blend masks directly in the editor, and the framework handles scatter placement, mesh variation, collision, and LOD assignment underneath.

The goal was never to replace hand-placed set dressing — it's to remove the 90% of repetitive scatter work so artists and designers spend their time on the 10% that actually needs a human eye.

02

Challenge

The environment team was shipping biomes almost entirely by hand: dragging foliage meshes into the level, rotating and scaling them, checking collision, and repeating that process across dozens of large open-world tiles. Iteration on a single biome pass could take a level artist the better part of a week, and any change to the source assets — a new rock formation, an adjusted foliage silhouette — meant re-touching every tile that used it.

There was also a consistency problem. Because placement was manual, biome density and blending varied noticeably between tiles handled by different artists, which showed up immediately during playtests as visually "patchy" terrain transitions.

03

Design Goals

  • Keep the tool inside the Unreal Editor — no round-trips through Houdini for day-to-day iteration.
  • Density and blend authoring should feel like painting, not configuring node graphs.
  • Every biome definition needs to be data-driven so new biomes don't require engineering time.
  • Output must respect a strict per-tile triangle and draw-call budget on target consoles.
  • Designers should be able to override any procedural result by hand without breaking the system.
04

System Design

Biome definitions live as data assets that reference a Houdini-authored asset library — meshes, scatter rules, and variation curves generated offline in Houdini and exported as a versioned content pack. At runtime (and in-editor), PCG graphs consume that library along with designer-painted mask layers to resolve final placement.

Step 01Houdini Asset Library
Step 02Biome Data Asset
Step 03PCG Graph
Step 04Mask Paint Layer
Step 05Runtime Scatter

The split matters: Houdini owns what a biome can look like, PCG owns where it actually goes on this specific tile. That separation let the framework scale to new biomes without any changes to the runtime graph itself.

05

Implementation

The Houdini side exports mesh variants, LOD chains, and per-asset scatter constraints (slope tolerance, minimum spacing, cluster bias) as a structured JSON manifest alongside the meshes. A Python import step in Unreal reads that manifest and builds the PCG-compatible data assets automatically, so a new Houdini export can be re-imported without any manual reassembly.

The PCG graphs themselves handle density falloff, slope-aware culling, and collision-safe placement, with custom PCG nodes written in C++ for the clustering behavior that stock nodes couldn't express efficiently at the tile sizes we needed. Mask painting is a lightweight in-editor tool that writes directly to the texture layers PCG reads at graph execution time.

PCG graph — biome scatter network
In-editor mask painting tool
06

Results

Biome iteration time dropped from multi-day manual passes to same-session painting — a designer can repaint density on a tile and see the result regenerate in under a second. Visual consistency across tiles improved immediately since every tile now draws from the same underlying rule set rather than an individual artist's manual placement.

Because LOD and collision generation are handled procedurally, per-tile triangle counts stayed inside budget automatically, removing an entire category of late-project performance fires that had previously required manual mesh-count audits.

07

Lessons Learned

Separating "what a biome can contain" (Houdini) from "where it goes" (runtime PCG) was the single decision that made the system maintainable — early prototypes that tried to do both in one graph became unmanageable as soon as a second biome was added.

The next iteration is aimed at exposing a constrained subset of the mask painting and density controls to narrative designers, so light environmental storytelling beats don't require pulling in an environment artist for every small placement request.