My team is struggling with performance on standalone VR headsets. We’re seeing significant frame drops in complex scenes, which is causing motion sickness for our testers. Beyond the basic "reduce poly count," what are some advanced Rendering or draw call optimization techniques specifically for mobile-chipset VR hardware like the Snapdragon XR2?
3 answers
On mobile VR, the CPU is usually the bottleneck due to Draw Calls. You must use Static and Dynamic Batching, but more importantly, look into GPU Instancing for repetitive objects. Another "must-have" is Fixed Foveated Rendering (FFR), which reduces the resolution at the periphery of the lens where the user isn't looking. This can give you a 15-20% performance boost immediately. Also, check your shaders. Avoid expensive transparency and standard lit shaders; use highly optimized Mobile/VertexLit shaders instead. Finally, ensure you are using the Multiview or Single Pass Instanced rendering setting to cut your draw calls in half by rendering both eyes in a single pass.
Are you using the Profiler to see if your spikes are caused by garbage collection or by the GPU's fragment shading?
Don't forget Texture Atlasing. Combining 50 textures into one reduces your draw calls significantly and is a lifesaver for mobile-based VR.
Sarah is right. We used atlasing for our last project and saw a huge jump in performance. It's a boring task but highly effective.
David brings up a vital point. Alice, if your profiler shows high "GC.Alloc," your 90 FPS dream will die every time the collector runs. In VR, you should avoid Instantiate during gameplay and use Object Pooling for everything from bullets to UI elements. Also, check your physics timestep; if it’s too high, the CPU will choke trying to calculate collisions. Keep the physics at a fixed rate that matches your target refresh rate for the smoothest possible movement.