Refactoring the Mesh Drawing Pipeline
summary
UE4 4.22 replaces the old static draw-list with Mesh Draw Commands and a Mesh Pass Processor, caching full RHI state so the GPU can own more work. Dynamic instancing via D3D11 draw‑instanced indirect cuts draw calls typically ~2x (engine case) and up to ~10x in a duplicated scene; PS4 depth goes 2.0ms→0.3ms and base 3.2ms→0.4ms (larger scene: depth 15.7→1.2ms, base 27.8→2.4ms). It requires PrimitiveID indirection and breaks some legacy paths (mobile merging delayed, single global planar reflection, custom material expressions must use new accessors).
AI-written summary · about
chapters (24)
- 0:00Intro
- 2:03Motivation pt2
- 3:08How do we get there?
- 5:05Journey of a Draw
- 5:42FMeshBatch
- 8:32Sins of the Static Mesh Draw List
- 11:04Old Mesh Drawing Pipeline
- 14:24Example: Depth Pass
- 17:21Shader Bindings
- 17:46New Mesh Drawing Pipeline
- 20:19Submit Mesh DrawCommands
- 21:40Caching FMeshDrawCommands
- 23:17Uniform Buffers
- 24:35Cache Invalidation
- 26:21Vertex Factories
- 27:23Caching Code paths
- 28:41High level frame with caching
- 36:17GPU Scene Primitive data buffer
- 37:27Primitiveld
- 37:52Merging Effectiveness
- 42:17GPUPerfTest x3 + no distance culling
- 44:26Casualties
- 45:56Caveats
- 46:17Testimonials
related talks
41mDrawing Heaps of Objects on Console, Fast, as an Indie
24mOptimizing and Building UI for AAA Games
38mUE Mobile Rendering Update: Recent Enhancements for Modern Mobile Devices
21mOptimising your mobile game using scriptable render pipelines
47mA Thousand Cuts Down to 5
46mNew Unity Features Seen Through the Profiler
37mMake your art look good
58mUE4 Performance and Profiling
