Skip to content
← Back to Blog optimization

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

By BitSoul3D4 min read171 views

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.

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

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.

ComponentFull NameKey FeatureBest For
ISMComponentInstanced Static MeshSingle draw call batchRuntime-placed repeated props (crates, pillars, pickups)
HISMComponentHierarchical Instanced Static MeshPer-instance cull + LOD switchingFoliage, large outdoor environments, 1000+ instances
Foliage Tool (ISMC)ISM with painter UIDensity brush + density controlsArtist-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

// 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.


Need drop-in assets for this workflow? Grab the 67-model Weapons Bundle on the BitSoul marketplace and drop them straight into your project.

Tags: weapons

Skip the modeling — download it instead

A free BitSoul3D account gets you 2 GLB downloads every month for personal use plus 25 one-time AI Engine credits, no card required. PBR-textured GLB downloads with a full 3D preview before you buy, for Unreal, Unity, Godot or Blender — OBJ and 3D-printable STL come with any purchase or paid plan.

Browse 1,051 models — from $4.99 → or start free (2 downloads a month)