Nanite Performance is Not Better than Overdraw Focused LODs [TEST RESULTS]. Epic's Documentation is Dangering Optimization.

Alright back to the topic :smiley:

The resolution of the quest is 1832 x 1900 for each eye.
So 3654 x 1900 in total. BUT VR has a few rendering quirks, that lower the resolution cost.

For example Foveated rendering allows to only render at full resolution in the center of the screen and blurry in the peripheral vision.


Using round robin queries, you can have nanite culling for only one eye at a time, and it will always switch between left and right eye. With this you are saving culling costs for the second camera.

All in all our tests showed that rendering on the quest has about the same performance implication as rendering a 2k Monitor screen. So let’s go with that.

Based on the stats provided by epic, rendering nanite at 2k costs about 2.5ms. Nanite scales with screen resolution.

Using 75% upscaling, we can save ~0.7ms, so we are left with ~1.8ms of nanite rendering.
This is changing between 1-2ms based on where you are at the scene and overdraw.

For the virtual shadow maps, we do not have a dynamic day night cycle, so most Shadows can be cached.
That is also why the shadow costs are so low for us, even though we have multiple real time point lights and a directional light in the scene.
Shadow Depths is around 0.6ms and Lights is at 0.4ms, so for all VSM calculations we have ~1ms.

We also lowered the shadow resolution using
r.Shadow.Virtual.ResolutionLodBiasLocal = 0
r.Shadow.Virtual.ResolutionLodBiasDirectional = 0.
In our tests, a value of 0 is perfect in VR. Shadow glitches are barely noticable but it gives significant performance gains.

Out if interest i disabled caching using
r.Shadow.Virtual.Cache.ForceInvalidateDirectional = 1
and got the following stats:


Now the total VSM costs are at 2.2ms. But keep in mind, the whole scene shadow is rerendered every frame, which is not happening in a normal/optimized game.

For a day night cycle there are multiple options.

  • Moving the light on a lower frame rate (1/sec)
  • Having a mostly static light and moving it over a short timeframe

Also keep in mind, you can always increase and decrease these stats based on hardware.
In a “low quality” setting, users expect low resolution shadows, so even a value of
r.Shadow.Virtual.ResolutionLodBiasDirectional = 2 might be viable.
Our stats are based on the maximum quality settings of our game.

Hope that clarifies it. With these stats, nanite and VSM are absolutely production ready in my opinion.
And don’t forget the advantages you can get! Super high resolution meshes, automatic and seamless LODs, Infinite Objects in your scenes and a renderer that does not scale with complexity but screen resolution. Also exponential stronger effects on upscalers.

If you have any further questions feel free to ask. I did not include the motion and still screenshots for now, because TAA is not necessary if you use upscalers. So that discussion is unnecessary IMO :slight_smile:

3 Likes