← Back to Blog optimization

Instanced Static Meshes in Unreal Engine 5: ISM vs HISM vs ISMC

By BitSoul Team7/11/2026Updated 8/2/20264 min read50 views
Instanced Static Meshes in Unreal Engine 5: ISM vs HISM vs ISMC

Placing 500 identical barrels, rocks, or fence posts in an Unreal Engine 5 scene shouldn't cost you 500 draw calls — but it will if you use a plain Static Mesh Actor for each one. Instanced Static Meshes (ISM) collapse hundreds of identical mesh instances into a single draw call, and picking the right variant is what separates a smooth 60 fps environment from a stuttering mess.

How Instanced Static Meshes reduce draw calls in Unreal Engine 5

Each draw call has a fixed CPU overhead: state setup, validation, driver handshake. On PC that overhead is a few microseconds; on mobile or console it climbs fast. When your open-world level has 2,000 grass clumps or 300 street lamps, the CPU never gets a breath between calls.

ISM solves this at the render thread level. You register a single Static Mesh resource, define a list of per-instance transforms (position, rotation, scale), and UE5 renders the whole batch in one draw call. GPU memory goes up slightly — one transform matrix per instance — but that tradeoff is almost always worth it.

How Instanced Static Meshes reduce draw calls in Unreal Engine 5 — illustrated

When ISM doesn't help: instancing only batches draw calls for *identical* meshes sharing the same material. If you mix 10 lamp variants with 5 different materials, you still have 50 unique draw calls. The solution is texture atlasing or material parameter collections — batch the geometry first, then address material variety.

ISM vs HISM vs ISMC: choose the right component

UE5 ships three instancing components. Each builds on the last.

| Component | Full Name | Key Feature | Best For |
|---|---|---|---|
| `ISMComponent` | Instanced Static Mesh | Single draw call batch | Runtime-placed repeated props (crates, pillars, pickups) |
| `HISMComponent` | Hierarchical Instanced Static Mesh | Per-instance cull + LOD switching | Foliage, large outdoor environments, 1000+ instances |
| Foliage Tool (ISMC) | ISM with painter UI | Density brush + density controls | Artist-painted scatter layers |

Use HISM for anything that needs per-instance visibility culling or automatic LOD transitions. For 10–50 props placed at runtime — ammo crates, dungeon pillars, pickups — plain ISM is simpler and has slightly lower overhead. The Foliage Tool wraps HISM with paint-based density controls; use it when artists need to hand-paint distribution across terrain.

Blueprint and C++ setup for Instanced Static Meshes in UE5

Blueprint approach

  1. Add an Instanced Static Mesh Component to your Actor blueprint.
  2. Set the Static Mesh asset reference in the Details panel.
  3. On `BeginPlay`, loop and call `Add Instance` with a per-placement `FTransform`.

For runtime-generated scatter (e.g. procedural dungeon rooms), store your target locations in an array and iterate:

```
for each Location in SpawnLocations:
ISMComponent → AddInstance(MakeTransform(Location, Rotation, Scale))
```

C++ approach

```cpp
// Actor header
UPROPERTY(VisibleAnywhere)
TObjectPtr<UInstancedStaticMeshComponent> ISMComp;

// BeginPlay — use AddInstances (plural) for batch insertion
TArray<FTransform> Transforms;
for (int32 i = 0; i < Count; i++)
{
Transforms.Add(FTransform(FRotator::ZeroRotator, SpawnLocations[i], FVector::OneVector));
}
ISMComp->AddInstances(Transforms, /*bShouldReturnIndices=*/false);
```

Prefer `AddInstances` (plural) over calling `AddInstance` in a loop — the batch version rebuilds render data once, not once per element. On 1,000 instances the difference is significant. You can source free, optimized GLB props from the BitSoul marketplace, import them via UE5's GLB importer, and feed the Static Mesh reference directly into your ISM component.

C++ approach — illustrated

Profiling and per-instance performance budgets

Open `stat RHI` and `stat SceneRendering` to measure ISM impact. Key lines to watch:

ISM performance checklist:

For outdoor environments, HISM + Nanite is the strongest combination: Nanite virtualizes the triangle budget, HISM handles per-instance culling, and draw call count stays flat regardless of how many objects are on screen. Browse BitSoul's marketplace for GLB environment props — crates, barrels, structural pieces — already optimized for UE5's instancing pipeline.

---

*This post is part of the Ultimate Guide to Free 3D Game Assets — BitSoul's complete reference for formats, texturing, rigging, optimization, and engine integration.*

Tags: optimization unreal game-assets workflow tutorials

Skip the modelling — download it instead

A free BitSoul account gets you 2 game-ready models every month plus 25 AI Engine credits to generate one of your own, no card required. Clean topology, PBR textures, and GLB downloads that drop straight into Unreal, Unity, Godot or Blender — plus OBJ and 3D-printable STL export.

Create a free account → Browse 846 models