rdInst Tutorial 21 – The differences between ISMs and HISMs

The main disadvantage of using Instanced Static meshes (ISMs) on non-nanite is that their LODs are all tied together producing many problems, so it was common before the introduction of Nanite to use Hierarchical Instanced Static Meshes (HISMs) instead.

Nanite removes the issues with LODs for ISMs.

Now we have the option to choose between the two. As far as rendering performance goes, they’re about the same – if you look at the HISM wrapper code disassembly you’ll see it’s very tight with virtually no overhead.

So – which do you choose for your project?

HISMs do have a slight advantage (up until 5.3) – when you remove an instance from an HISMC, instead of shifting all instances above it in the list and messing up any record you may have of them – it just removes the last instance and puts it in the same position in the list. When you’re maintaining these indexes for things like swapping out instances for BP actors for interaction or physics, it can be slightly faster just due to the fact you don’t need to update all your index references. In UE 5.3 the ISM also has an option to swap the instances when removed.

So what about culling? What are the differences there?

Firstly, if you’re unfamiliar with the various culling types, a good reference is the Epic documentation:

https://docs.unrealengine.com/5.1/en-US/visibility-and-occlusion-culling-in-unreal-engine/

Here’s a good document describing Nanites GPU culling, Triangle Cluster culling and Occlusion culling:

https://advances.realtimerendering.com/s2021/Karis_Nanite_SIGGRAPH_Advances_2021_final.pdf


It turns out, the culling produces similar results between ISM and HISM, to see the results of timing tests comparing them you can visit this link:

So if you’re on 4.27 or using LODs – HISMs are a good way to go. For Nanite, ISMs are better.