The entity swapper
One place in the world that is a different thing on different frames. The spawner scatters many actors over a volume; this is the single-slot form of the same idea: one transform, a pool of actor classes, and a rule for which of them is standing there right now.
- Pool
- Any actor classes, spawned once and kept
- Labels
- Only the visible variant carries the tag
- Draw
- Seeded random, or cycled in order
- Motion
- Optional flight path, metres per frame
Why a class needs more than one shape
Two tank variants under one tank label teach a detector that the class covers both shapes. A man and a woman under one person label do the same for people. A dataset whose every tank is the same mesh has taught the model that mesh, not the class, and the failure only shows up later, on the first vehicle the model has never seen.
The swapper is how that variety is authored without duplicating the scene. Place one, list the variant classes, and each captured frame shows one of them in that spot. Across a run, the same slot contributes every shape in its pool to the same class.

Swapping is hiding, not respawning
Every variant is spawned once, at the start, and kept. A swap hides one actor and shows another. That sounds like an implementation detail and is actually the whole point: destroying and respawning would reset whatever the variant was doing, so an animation, a cloth simulation or a particle trail would restart from zero on every swap. Hiding keeps them running.
It also makes the swap free. Nothing is loaded, constructed or garbage collected between frames, so a swapper in the scene does not change how long a frame takes to capture.
Only the visible variant is labelled
Targets are found by tag, so masks, boxes, occlusion measurement and the visibility gate all work on the swapper without knowing it exists. The swapper keeps that true by moving the label tag to whichever variant is visible and stripping it from the rest. A hidden variant with a label would be a labelled object with no pixels, which is the definition of a wrong label.


The controls
| Setting | What it does |
|---|---|
| Variants | The pool. One instance of each is spawned and kept; one is visible. |
| Label mode | Custom: every variant answers to one label. Source: each answers to its own class name, which is how one swapper produces two classes. None: scene decoration that renders and occludes but is never labelled. |
| Hold frames | How many frames one choice is kept for. One draws again every frame. |
| Cycle in order | Draws the pool in listed order instead of at random. A short capture drawing freely can miss a variant entirely; cycling guarantees every variant appears the same number of times. |
| Seed | Mixed into every draw, so two swappers side by side do not show the same variant on the same frame. |
| Motion path | A flight path to travel along, or none to stay put. The slot moves and its variants are attached, so whatever is visible travels with it, staying upright and turning to face the way it is going. |
| Metres per frame | Travel per captured frame rather than per second, because a still-image capture has no clock. A speed in metres per second would make the dataset depend on how fast the machine is. |
It is an ordinary actor
Attach it to a spline follower and the entity follows the spline. Parent it to anything and it inherits the transform. Drive it from a Blueprint or a Sequencer track and it behaves like the actor it is. Nothing in it reimplements motion, and nothing else in the capture has to know it exists: the frames above come from an ordinary capture of a level that happens to contain one, with the LiDAR sensor mounted on the moving slot itself.