Section 8. The rdSpawnStuff Actor

Section 8.1. Introduction

The rdSpawnStuff Actor is the culmination of most of the functionality of rdInst. It combines the fast StaticMesh Instancing with fast Actor Spawning, Actor Pooling, Distributed Transactions and the Proxy system.

It spawns Actors, Prefabs, StaticMesh Instances, AI, PCG volumes, rdPopulate volumes and probably the most powerful of all – more rdSpawnStuff Actors.

You can populate entire galaxies using this spawn system – You would have a Galaxy rdSpawn Actor which then spawns SolarSystem rdSpawnStuff Actors which then spawn planet spawners – continent spawners – all the way down to spawning Forests, vegetation, buildings and AI powered people, robots, vehicles and animals close to the player.

The system supports Large World Coordinates on UE5 and the distances between spawn points can be the full extent.

It works equally well in smaller scale worlds – perfect for spawning your AI and populating streamed areas.

The spawning works incredibly quickly if you use the StaticMeshInstance Proxy system – then instead of spawning a large amount of actors, it just adds Instances to the ISM manager – swapping in a small amount of actors that are in close proximity. This is not only a huge FPS saver, it means you only have to pool small amounts of actors so is a big memory optimization too.

There are numerous ways of spawning things:

  • The rdPopulation system
  • Lists of Actors/Instances/Prefabs etc
  • PCG Volumes
  • SubClassing and creating your own procedural placement routines using the underlying base

Section 8.2. How to use

First of all – I’ll introduce you to the “rdSpawnStuffData” class and it’s list in the rdSpawnStuffActor. Hello!

This contains the basic layout data for the spawn items (contained in the “Items” list).

You can have up to 5 of these SpawnData objects in the list – they correspond to your Scalability level. If you have just one, all Scalability levels will use it. If you have two, the first is used for “Low” Scalability and the second for “Medium” and up – and so on.

You can control the distance at which they’re spawned, the density – each level can have it’s own splatmap, and you can set the number of frames the whole spawning should span.

It also contains the baked spawn data for Baked SpawnStuff Actors.


The default rdSpawnStuffActor itself is more just a container – you can transfer actors in the level to it with the help of rdBPtools, you can also create lists of population data by dragging assets from the content browser into the Drag-In lists. Just add it like any other actor.

Mostly you’ll want to use this actor to SubClass from – It’s easy to create your own Custom Spawners by just Subclassing, then creating your spawning system in the rdSpawnEvent (and rdBakeEvent to bake the data). It handles all the instancing, proxies and pooling etc, you just concentrate on where to spawn them.

The rdSpawnStuffActor has handy structures built-in to give you all the objects and object placement data for the current scalability, and then functions to spawn straight from that data but with your own transforms – easy!

The items this creates can then be tweaked with things like spawn distance, proxy types etc. Open up the SpawnData section and go to the Object item that corresponds to the item you want to edit, then you can change any of these options:


The rdSpawnStuffActor has functions built in for you to spawn your objects – you can simply pass the object data stored in the rdSpawnActor to the rdSpawnObject function – using your own transform.

You can also use you own routines to spawn the objects – just use the rdAddSpawnedInstance, Actor or VFX afterwards, passing in the result. This stores everything needed for cleaning up afterwards and for proximity spawning.

One of the powerful features of rdSpawnStuffActor is the ability to bake the spawn data into tight data packets that can then be used both for rapid spawning (no longer needing your Blueprint spawners) and for proximity detection straight from the data – no need to have collision on for meshes to be detected – a massive speed-up!

You create an almost-duplicate of your custom spawner used in the rdSpawnEvent – but replace the spawns with “rdAddBakedObject” (or rdAddBakedInstance, Actor or VFX) – then hook it up to the rdBakeEvent. Once you call the “Rd Bake Spawn Stuff Data” (or press the button in the details panel on a level-instance of your spawner) the object data will be baked and used for spawning from then-on.


The “Has Spawned” flag can be used to see if the spawner is active or not.

The “Is Still Spawning” can be used to wait for Distributed-Transactions to finish.

The “rdBakeSpawnStuffData” and “rdClearBakedData” can be used to bake and remove baked data. The “rdClearSpawnedStuff” can remove objects from the level but retain in the lists ready to spawn again. The “rdSpawnStuff” surprisingly spawns the objects.

The “rdSnapToLandscape” positions the SpawnActor to the same as the landscape.

Section 8.3. Tutorials