When Epic announced Instanced Stereo Rendering I was quite impressed since it sounds awesome and I can need every bit of performance in my VR project, but now I actually profiled to see the difference, and now I’m not so impressed any more.
I see absolutely not benefit with using Instanced Stereo Rendering, actually, I see a decrease in performance.
So, what I have tested: Run the game in standalone (right click .uproject file and select launch), switch to VR with alt+enter. Then do “profilegpu”.
Screen Percentage = SP, Base Pass = BP
SP 10, BP 257% slower and the whole scene 44% slower.
SP 100, BP 19.8% slower and the whole scene 6.2% slower
The test scene is an average scene in my game, mostly the screen is filled with cheap opaque and masked materials. A small area is also translucent water, but really just a small area, not more than 5% of the screen.
There are 800,000 triangles drawn with 310 draw calls when ISR is enabled and 360 draw calls when ISR is disabled. It’s all just one actor with a few components, so the individual meshes are quite huge, they are all procedurally generated.
The “whole scene” difference is not really high since I waste a lot of performance with dynamic shadows, SSR and heavy postprocessing. The difference would be a lot more than 6.2% if I would not use half of the GPU time with Post Processing, that’s why I also did the test with a Screen Percentage of 10% since there Post Processing should be super cheap. And you see, 44% performance improvement with ISR disabled.
So maybe Instanced Stereo Rendering only improves CPU time? Well, no. It’s not really possible to see if it improves render thread time since the render thread is always capping to 11.1 ms (90 fps) in VR, so it’s impossible to really compare time between ISR enabled and disabled, but as far as I can see using stat startfile and stat stopfile the render thread is looking exactly same no matter if Instanced Stereo Rendering is enabled or disabled.
With ISR enabled, an empty material looks like this:
With ISR disabled:
So ISR makes every single material have a 3 times higher vertex shader instruction count, it makes quite some sense that it’s a lot slower on the GPU then. The 257% performance decrease in Base Pass time when only the vertex shader really matters because of the low resolution seems to confirm this.
So what is the point of Instanced Stereo rendering? Does the scene have to fit some special requirements to profit from ISR? What are these requirements? How do I make my game profit from ISR?