Draw calls
A request from the CPU to the GPU to draw something; their number, driven by objects and materials, often limits performance before triangles do.
A draw call is a request from the CPU to the GPU to draw something. Meta's developer documentation puts it plainly: "each object rendered requires the app to send information about how to draw the object" to the GPU through the graphics driver (Meta Horizon Developers: WebXR Performance Optimization Workflow).
The cost of that request is mostly paid by the CPU and is "largely independent of the complexity of the object being rendered" (Meta Horizon Developers: WebXR Performance Optimization Workflow). So a scene of many small objects can be slow even when its triangle count is low.
#Draw calls as a performance limit
Meta gives an example: submitting 1,000 individual triangles as separate draw calls "would likely cause your app to run at less than 72 frames per second because of CPU cost" on Quest, while the GPU "can easily render several orders of magnitude more triangles" (Meta Horizon Developers: WebXR Performance Optimization Workflow). On platforms like this, the draw call count is often the first budget you hit. See polygon and triangle budgets.
Published targets give a sense of scale:
| Platform | Recommended draw calls per frame | Source |
|---|---|---|
| Meta Quest 2 | under 100 | (Meta Horizon Developers) |
| Meta Quest 3 | under 200 | (Meta Horizon Developers) |
| PC VR (Rift, PC SDK guidance) | 500–1,000 maximum | (Meta Horizon Developers) |
#Materials and draw calls
The CPU cost of a draw also grows with render state changes, such as switching shaders and textures (Meta Horizon Developers: WebXR Performance Optimization Workflow). Objects can be batched into a single call when they share a material (Meta Horizon Developers: WebXR Performance Optimization Workflow). As a result, every different material is something that cannot be batched with its neighbours, and a mesh with several material slots cannot be drawn as one batch either.
This is why environment workflows favour trim sheets, texture atlases, tileable materials and material instances: they let many meshes share one material.
#Ways to reduce draw calls
- Merging. Combine small meshes that are always seen together into larger chunks, and remove meshes you do not need (Meta Horizon Developers: WebXR Performance Optimization Workflow).
- Instancing. Draw many copies of the same mesh and material in one call. Meta recommends instanced rendering to cut draw calls, combined with frustum culling of the instances (Meta Horizon Developers: WebXR Performance Optimization Workflow). In Unreal, Instanced Static Mesh (ISM) components serve this role; HLOD's Instancing layer type replaces meshes with ISM components (Unreal Engine Documentation: World Partition - Hierarchical Level of Detail).
- HLOD. Replace distant groups of objects with one proxy mesh and material, which Epic uses "to reduce the number of draw calls per frame" (Unreal Engine Documentation: World Partition - Hierarchical Level of Detail). Simplygon's HLOD builder produces a "single mesh, single UV and single material" approximation per cell (Simplygon Documentation: Hierarchical Level-Of-Detail). See level of detail.
- Fewer materials per mesh. Especially on lower LODs.
#Draw calls with Nanite
Unreal's Nanite runs in its own rendering pass that "bypasses traditional draw calls" (Unreal Engine Documentation: Nanite Virtualized Geometry). At the UE5 reveal, Epic promised no more "draw count budgets" (Unreal Engine blog: A first look at Unreal Engine 5). Brian Karis reports Nanite handling "a million instances easily" (SIGGRAPH 2021: Nanite: A Deep Dive).
The costs move elsewhere. Instance data still takes memory: 457 MB for the transforms of 10 million instances (SIGGRAPH 2021: Nanite: A Deep Dive). Nanite meshes are limited to Opaque and Masked materials (Unreal Engine Documentation: Nanite Virtualized Geometry), and masked materials in Nanite "incur a significant cost during base pass shading" (Unreal Engine tech blog: Bringing Nanite to Fortnite Battle Royale in…). Material count and complexity still matter for shading even when draw calls do not.
#Common mistakes
- Optimising triangles when draw calls are the problem. Profile first; see performance and profiling.
- One material per prop by default. Ask whether the prop could use the kit's trim sheet.
- Separate materials for tiny details. A screw with its own material costs a draw call wherever the prop appears.
- Merging across rooms. It breaks culling, as noted above.
#Related terms
polygon and triangle budgets, level of detail, overdraw, trim sheets, texture atlases, master materials and instances, modular kits, performance and profiling, virtualised geometry.
#Further reading and watching
References
- · WebXR Performance Optimization Workflow · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
- · Device Optimization Comparison · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
- · Performance Guidelines (PC SDK) · Meta Horizon Developers, 2026 · docs · accessed 2026-10-20
- · World Partition - Hierarchical Level of Detail · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
- · Hierarchical Level-Of-Detail (Simplygon 10.4) · Simplygon Documentation, 2026 · docs · accessed 2026-10-20
- · Nanite Virtualized Geometry · Unreal Engine Documentation, 2026 · docs · accessed 2026-10-20
- · A first look at Unreal Engine 5 · Unreal Engine blog, 2020 · article · accessed 2026-10-20
- · Nanite: A Deep Dive · SIGGRAPH 2021, Advances in Real-Time Rendering in Games, 2021 · talk · accessed 2026-10-20
- · Bringing Nanite to Fortnite Battle Royale in Chapter 4 · Unreal Engine tech blog · article · accessed 2026-10-20
Pages that link here
- How to use this handbook Guide
- Real-time vs. offline rendering Topic
- Export checklist Guide
- Field of view Key term
- Modular kits Topic
- Kitbashing Topic
- Polygon and triangle budgets Topic
- Level of detail (LOD) Topic
- Impostors and billboards Key term
- Hierarchical LOD (HLOD) Key term
- Instancing Key term
- Texture formats, compression and mipmaps Topic
- Ways to texture an environment Overview
- Trim sheets Topic
- Texture atlases Topic
- Decals Topic
- Mesh decals Topic
- Geodecals Key term
- Vertex painting and blending Topic
- Material layers and Substrate Topic
- Terrain and landscapes Topic
- Virtualised geometry (Nanite) Topic
- Level design and environment art Overview
- Set dressing and art passes Topic
- Performance and profiling Topic
- Frame budgets Key term
- The technical artist Topic
- Overdraw Key term
- Exercise: a modular room Exercise
- Essential talks and videos Reference
Last updated 2026-10-22