
Samurai Mesh Cutting System | Free Unity Asset
August 18, 2026
How to Build a Hades‑Style Encounter Flow Generator in Unity
August 22, 2026Modern AAA games (like Hades, Diablo IV, Returnal, and Baldur’s Gate 3) use advanced procedural generation pipelines—not simple random rooms.
A real AAA‑style generation system is a multi‑stage pipeline involving rules, weights, graph structures, markers, validation, biome layers, and post‑processing passes.
This guide walks you through how to build a complete AAA‑quality procedural level generation pipeline in Unity—from abstract logic to final scene construction.
1. Overview of a AAA Procedural Pipeline
A professional procedural generation pipeline always has these phases:
- High‑Level Layout Generation (graph, flow, mission structure)
- Room/Chunk Selection (rule‑based or weighted)
- Spatial Placement (grid, graph‑to‑world conversion, collision checks)
- Connector Resolution (doors, transitions, tunnels)
- Biome/Theme Assignment
- Environment Markers (spawn points, hazards, lights, props)
- Detail/Post‑Processing Passes (lighting, decals, VFX, optimization)
This is the same structure used by many top‑tier studios.
2. Step 1 — High‑Level Layout Graph
AAA generators always begin with a graph, not geometry.
Each node = a room or chunk.
Each edge = a connection (door, hallway, tunnel).
public class LevelNode
{
public string id;
public string type; // Start, Combat, Loot, Boss, Corridor...
public List<LevelNode> neighbors = new List<LevelNode>();
}
The graph ensures structure—for example:
- Start → Combat → Combat → Elite → Loot → Boss
- Branching paths with dead ends
- Critical path + optional side rooms
3. Step 2 — Room Selection (Rule‑Based)
Each graph node chooses a prefab based on:
- Room type
- Difficulty
- Biome
- Connection count
RoomPrefab GetPrefabForNode(LevelNode node)
{
var candidates = allPrefabs
.Where(p => p.type == node.type && p.maxConnections >= node.neighbors.Count)
.ToList();
return WeightedRandom(candidates);
}
This gives designer control + randomness.
4. Step 3 — Graph‑to‑World Spatial Placement
AAA games usually use one of these:
- Grid‑based placement (Binding of Isaac)
- Chunk‑based placement (Minecraft)
- Freeform placement with collision checks (Returnal)
Unity method: place rooms one by one and ensure no overlap.
bool TryPlaceRoom(RoomPrefab prefab, Vector3 pos)
{
Bounds b = prefab.bounds;
b.center = pos;
if (Physics.CheckBox(b.center, b.extents))
return false;
Instantiate(prefab.gameObject, pos, Quaternion.identity);
return true;
}
5. Step 4 — Connector Resolution
Every room prefab should have connector markers:
Entrance_A Exit_B SidePath_1 Secret_Entrance
Your system picks which connectors to join:
- Match connector types
- Match orientation
- Generate a hallway if needed
public class RoomConnector : MonoBehaviour
{
public string id;
public Vector3 Normal => transform.forward;
}
6. Step 5 — Biome & Theme Pass
AAA pipelines split biome logic out of geometry.
A room becomes “Desert,” “Ice,” “Ruins,” etc only after placement.
This allows:
- Reuse of room prefabs
- Huge visual variety
- Efficient memory usage
void ApplyBiome(GameObject room, BiomeData biome)
{
foreach (var r in room.GetComponentsInChildren<Renderer>())
r.material = biome.GetMaterialForTag(r.tag);
}
7. Step 6 — Environment Marker System (AAA Trick)
AAA studios NEVER place objects manually in procedural levels.
They use markers.
Examples:
- EnemySpawn
- LootPoint
- CoverSpot
- LightAnchor
- DecalAnchor
- FX_Dust
- HazardPoint
Then a system resolves markers:
foreach (var marker in FindObjectsOfType<Marker>())
{
marker.Apply();
}
This ensures clean separation between world structure and content.
8. Step 7 — Post‑Processing Passes
AAA level generators run polish passes:
- Light probes placement
- NavMesh baking
- Occlusion culling regions
- Random prop scattering
- Decals & rubble
- Fog volumes
- Sound occlusion
Example: placing decals on floor edges:
void ScatterDecals(Room room)
{
foreach (var anchor in room.decalAnchors)
Instantiate(randomDecal, anchor.position, anchor.rotation, room.transform);
}
9. Step 8 — Optimization & Build‑Ready Pass
Large procedural maps require:
- Static/Batching layers
- Mesh combining
- GPU instancing
- Light baking or light probe generation
- Occlusion layers
Never skip this step if building for consoles or mobile.
10. Putting It All Together
A complete AAA pipeline runs like this:
- Generate a layout graph
- Select room prefabs using rules
- Place them in space without overlap
- Resolve and align connectors
- Apply biome/theme layers
- Spawn gameplay using markers
- Run procedural polish passes
- Run optimization passes
This system scales to roguelites, open worlds, dungeons, tactical maps, and mission‑based levels.
Conclusion
AAA procedural generation is not about randomness—it’s about rules + structure + layers.
By following this multi‑stage pipeline, you can create worlds that feel designed, intentional, and full of variety.
This approach works perfectly for Unity, Unreal, custom engines, and hybrid systems.










