Best Practices for Procedural World Generation with World Partition

Hi everyone,

I’m developing a game with a procedurally generated world and require some advice on optimization.

Current Approach:

  • I spawn the world chunk-by-chunk in predefined locations using ChunkSpawner actor.
  • All spawned actors have an owner on the level (the ChunkSpawner actor) and are managed via World Partition.
  • I handle part of the spawning logic in C++/Blueprints, and for some systems, I use the PCG framework.

Problem:
Spawning a new chunk causes a significant FPS drop due to the high number of actors and meshes being instantiated at once. I tried mitigating this by:

  • Limiting actor spawns per frame (staggered spawning).
    However, this doesn’t fully solve the issue since each chunk contains a large number of objects.

Desired Solution:
Ideally, I’d like to pre-generate the entire world upfront (e.g., during a loading screen) and then rely on World Partition to load/unload chunks dynamically during gameplay. Unfortunately, I haven’t found any tutorials or guides on implementing this approach.

The only alternative I’ve seen suggested is spawning nearby chunks while showing a loading screen, but this isn’t ideal for me because:

  • With World Partition, only a few chunks are loaded at a time, meaning FPS drops would recur frequently as new chunks load.

Question:

Are there best practices or recommended methods for pre-generating a full procedural world before gameplay while still using World Partition?

Any advice or examples would be greatly appreciated! Thanks in advance.

1 Like

Update:

As of UE 5.6 Prevew Epic has added “Fast Geometry Streaming” which is an implementation described in the CD Projekt Red presentation video linked in my original post. You could use a system like this but figure out a way to feed your procedurally generated proxies at runtime instead of it loading them from disc. I’m sure they’ve provided interfaces or overrides to do things like just like this.

https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/c/2022-fast-geometry-streaming-plugin-experimental-?&utm_medium=social&utm_source=share

Original:

This might dive deeper than you intended, but have you watched CD Projekt Red’s talk on working with Epic to extend Unreal Engine for streaming static world elements?

They tackle Streaming Stutter by bypassing Actors and Components for most open-world geometry. Instead, they use lightweight POCO structs (called TurboEntities) that solely manage corresponding RenderProxy and PhysicsProxy structs. These run on worker threads via their Entity Jobs system, allowing 95% of the environment to stream off the main game thread.

For procedural generation, you could adapt this by generating TurboEntities on demand instead of streaming them from disk.

Watch the CD Projekt Red streaming talk here

1 Like