Skip to content
PRODUCT GITHUB  ↗

Advanced Topics

Once you are comfortable building meshes with the core component API and the mesh types, the extension modules open up three larger workflows: generating geometry from reusable, thread-safe providers; streaming mesh cells in and out around the player; and mutating geometry entirely on the GPU with compute shaders.

Each of these lives in its own runtime module so you only compile what you use. The pages below walk through the real, shipped APIs and ground every example in an actor from the RealtimeMeshExamples module so you can open the source and run it.


  • Custom Providers — Write a mesh generator against FRealtimeMeshGenerator (module RealtimeMeshExt). A generator is stateless and thread-safe, so one instance can drive many meshes concurrently on worker threads. You feed it a per-mesh descriptor and it produces whichever aspects (structure, geometry, bounds, collision, Nanite) are dirty. Covers the TRealtimeMeshProvider<TConfig> convenience base, registering a provider so designers can pick it in the editor, and consuming one from URealtimeMeshConstructed.

  • Spatial Streaming — Load and unload mesh cells around the player with the RealtimeMeshSpatial module. A tickable world subsystem tracks streaming sources (the player is added automatically) and drives a quadtree/LOD state machine that fires four lifecycle delegates — load, activate, deactivate, unload — per cell. Ideal for procedural terrain and other worlds too large to keep resident at once.

  • Compute Providers — Drive a section’s geometry from a GPU compute shader (module RealtimeMeshCompute). Create a compute-writable section group, implement IRealtimeMeshComputeProvider::BuildComputePasses, and register it to run every frame, on demand, or on an interval. Covers motion-vector output for TSR/TAA-clean deformation and GPU indirect draws. This path is C++ only.

  • Mesh Replication — Auto-replicate managed mesh geometry server-to-clients when the optional UnrealNet plugin is installed (module RealtimeMeshNetSync). Meshes stream coarsest-LOD-first so clients render immediately and refine progressively; late joiners catch up automatically. Zero-config beyond enabling the plugins and replicating the actor.


These topics assume you already know how to:

  • Create a mesh with InitializeRealtimeMesh<T>() on a URealtimeMeshComponent — see Component Core.
  • Build streams with the stream builders (TRealtimeMeshBuilderLocal) — see Key Concepts.
  • Work with section groups and sections — see Component Core.

The provider and spatial-streaming pages both build on URealtimeMeshConstructed, so read the Constructed mesh type first if you have not already.