rdInst Speed Comparisons
Last Updated: 26th January 2022
There are a number of different areas for speed comparisions, so this document is broken into sections for each:
Timings are either FPS (frames per second) or the amount of milliseconds a particular function takes. For timing functions (either C++ or Blueprint) the rdActor rdGetFunctionCycles function:
These tests are performed on a 12th gen i7, 64MB DDR4 memory and RTX3070ti.
They are run from PIE in UE5.1 with hardware lumen lighting and shadows turned on. Virtual Shadow map is also enabled.
The Scalability is set at Epic.
For testing performance of things like this normally, it would be better to test it from different views to get a more general idea of how the instances render, but seeing as we’re concentrating more on how they are setup, only one view is used.
Here is a list of the basic timings, just click on the heading to go to more information about the particular tests.
- In-Game Performance
- Random Foliage – 30 different meshes, 2410 instances each = 72,300 instances.
(note that because of the nature of these times, all the results fluctuate by around 10FPS)- Empty Scene: 8.73ms (114.57FPS)
- Standard Static Meshes: 31.25ms (32FPS) – 22.52ms (82.57FPS)
- Foliage System: 9.35ms (106.97FPS) – 0.62ms (7.6FPS)
- rdInst Mananged: 9.31ms (107.39 FPS) – 0.58ms (7.18FPS)
- rdInst Unmanaged: 9.87ms (101.36 FPS) – 1.14ms (13.21FPS)
- Blueprint: 9.67ms (103.41 FPS) – 0.94ms (11.16FPS)
- Random Foliage – 30 different meshes, 2410 instances each = 72,300 instances.
- Editor Performance (coming soon)
- Adding Instances (Note, with managed rdInst, Setup is done once, then is just loaded like foliage)
- Random Foliage – 30 different meshes, 2410 instances each = 72,300 instances.
- Adding instances from stock HISMC Blueprint: 871.99 ms
- Adding instances from stock HISMC C++: 645.97ms
- Adding Instances from rdInst (Managed) Blueprint: 222.32ms
- Adding Instances using rdInst (Managed) C++: 91.89ms
- Adding Instances using rdInst (Unmanaged) Blueprint: 205.96ms
- Adding Instances using rdInst (Unmanaged) C++: 41.75ms
- Random Foliage – 30 different meshes, 2410 instances each = 72,300 instances.
- Spawning Actors
- Random Foliage – 30 different meshes, 100 actors of each = 3,000 actors
- Blueprint – Native Spawn system – 3729.83 ms (removing existing actors is ~2500ms)
- C++ – Native Spawn system – 1633.32 ms (removing existing actors is ~600 ms)
- Blueprint – rdInst Spawn – 1856.06 ms (removing existing actors is ~600 ms)
- C++ – rdInst Spawn – 1631.83 ms (removing existing actors is ~600 ms)
- Random Foliage – 30 different meshes, 100 actors of each = 3,000 actors
- Adding Child Components (coming soon)
- Spawning Actors from an Actor Pool
- Rotating Bullet Spread test (timing each bullet “spawn”) 1000 actors pooled (2.08ms to allocate the pool)
- Spawning from rdInst Actor Pool (BP) – <0.01 ms
- Spawning from rdInst SpawnActor (BP) – 0.55 ms
- Spawning from Native SpawnActor (BP) – 0.56 ms
- Rotating Bullet Spread test (timing each bullet “spawn”) 1000 actors pooled (2.08ms to allocate the pool)
- Adding Components from a Component Pool
- Rotating Bullet Spread test (timing each bullet “spawn”) 200 components pooled (8.96ms to allocate the pool)
- Spawning from rdInst Component Pool (BP) – 0.02ms
- Spawning from rdInst AddComponent (BP) – 0.07ms
- Spawning from Native AddComponent (BP) – 0.07ms
- Rotating Bullet Spread test (timing each bullet “spawn”) 200 components pooled (8.96ms to allocate the pool)
- Changing Per-Instance CustomData (coming soon)
- 0.34ms to change 200 instances each on 40 HISMCs
- Changing Per-Instance Transforms (coming soon)
- Converting Instances to Actors (coming soon)
- Moving Prefabs vs Streaming Levels vs Actor Pooling (coming soon)