rdInst Tutorial 11.1 – Introduction to rdECS
Last Updated: 4th August 2026
Tutorial created using rdInst version 1.53
The rdECS system (Entity Component System) is the final layer to rdInst and it’s rendering system. rdECS allows you to move large amounts of Entities around your levels without impacting performance by large factors. It’s an archetypal type system where different entity types are collated into their own arrays and processed either one after another or dispersed in threads. The Component data is stored in spatial arrays and inline tables to give cache friendly access to local areas of the entity data. The archetypal system is slightly slower than a Sparse-set ECS system for generic queries and operations but many times faster for spatial/type aware queries and operations.
The system is all built into the same set of threads that handle the streaming, in-sight populating, and proxy swapping routines, allowing most work to be done in a series of short thread calls, minimizing both game thread time and number of cores used. The actual ECS movement is all handled from a single call in a single thread – this means it can all be executed without needing mutex locks to any of the navigation/height/avoidance/paths etc and all data can be stored contiguously in memory and accessed linearly. It’s not slow either – using dedicated movement classes to handle everything needed all at once along with carefully calculated time slicing, it’s possible to handle well over 1 million entities in a 2-5 milliseconds in a background thread (depending on how they’re dispersed) on medium hardware.
Currently (version 1.53) there is a Chase Movement class only. This movement class handles entities chasing the player/players, movement towards the players, avoidance, and landscape pinning. 1000 Entities takes around 20us to process in the background thread on medium hardware. Rendering can be a mixture of ISMs, Niagara meshes and/or componentless primitive meshes. ISMs can have their transforms controlled by WPO only as well, so no processing apart from feeding custom floats is needed for very fast movement.
More classes will be added including a class for more “Component” based entities and hopefully something that will allow use of existing State Trees.
There are plans for a variety of classes; wild life, vehicles, pedestrians, NPC work lives and such – these are planned to use a system that allows very large numbers of NPCs to be running at once – my game is estimated to need around 1.5 million.
Full support for VAT (Vertex Animated Textures) is build in, allowing fully animated ISMs off to the horizon and Proxy swapping is fully supported, allowing these VATs to swap to full Characters, synchronizing anim frames/speed etc when close to players or when a projectile is going to hit. These support pooled actors too.
The option to retain Proxy Actors when swapped out (in a dormant state) is there if you need the same actor references for any reason (e.g. GAS ASCs) – swapping back to the same Actor reference, ready to use with your systems.
You can also tell a Proxy to remain as a proxy once swapped in (use sparingly) rather than swap back to the VAT/ISM.
The next type of Movement classes that will be developed are aimed at open world type movement – city crowds, vehicle traversal and a full wild-life system. These will be using a different type of State system, but more will be revealed once ready to release.
The Entities are described in a DataAsset – things such as the StaticMesh/VAT, animations, Proxy Class, preferred movement types etc are set in these. Create one for each type of Entity you’re wanting.
The animations are sorted into groups which each of the Movement Classes handles. For instance, the Chase Movement class has two sets of animations, Idle and Chase – each set has four different animations inside, chosen randomly at spawn time.
Spawning the Entities is easy, just add an rdECSspawnActor to your level and resize to fit the area you’re wanting – then call the rdInst Subsystems Spawn Routines, passing in the Entity DataAsset/s and a few other parameters.