Why are polygon count limits still important in ImmersiveSpace with foveated rendering?

I have a question about rendering performance guidelines for visionOS ImmersiveSpace.

Since visionOS uses foveated rendering, why are polygon count and scene complexity still treated as strict performance constraints for immersive content?

My understanding is that foveated rendering reduces rendering cost outside the user’s central field of view. If so, should polygon count mainly matter near the gaze/foveal region, while objects in the peripheral area are much cheaper to render?

Specifically:

  1. Does foveated rendering reduce only pixel shading cost, or does it also significantly reduce geometry processing cost?

  2. Are polygons outside the foveal region still submitted, culled, transformed, and rasterized in a way that affects CPU/GPU performance?

  3. For large immersive environments, should developers still optimize total scene polygon count, or focus mainly on what appears near the user’s gaze?

  4. Are there recommended guidelines for LOD, culling, and polygon budgets in visionOS immersive spaces, even when foveated rendering is enabled?

I’d like to better understand how foveated rendering affects geometry budgets, and how developers should think about scene complexity for immersive visionOS apps.

Any guidance would be appreciated.

Answered by Vision Pro Engineer in 892455022

While foveated rendering does help to reduce rendering costs it doesn't dramatically change the nature of the GPU.

Foveation largely affects things like the pixel shading rates. So it can make things faster in the shading costs, you still have to pay the cost of loading the geometry and textures into memory.

Developers should ideally not depend upon foveation when creating the scene, because it is a runtime system optimization and you cannot control where the user might look. Instead use traditional techniques to draw a users attention to a specific location so you can allocate your polygon and texture budgets in the areas that matter most for your content.

You should consider the budget of your whole scene. While meshes outside your users view can be culled, the user may still turn around bringing them into view.

I do not believe we have explicit recommended guidelines but I do recommend viewing this session on targeting Vision Pro content https://developer.apple.com/videos/play/wwdc2024/10186/

Accepted Answer

While foveated rendering does help to reduce rendering costs it doesn't dramatically change the nature of the GPU.

Foveation largely affects things like the pixel shading rates. So it can make things faster in the shading costs, you still have to pay the cost of loading the geometry and textures into memory.

Developers should ideally not depend upon foveation when creating the scene, because it is a runtime system optimization and you cannot control where the user might look. Instead use traditional techniques to draw a users attention to a specific location so you can allocate your polygon and texture budgets in the areas that matter most for your content.

You should consider the budget of your whole scene. While meshes outside your users view can be culled, the user may still turn around bringing them into view.

I do not believe we have explicit recommended guidelines but I do recommend viewing this session on targeting Vision Pro content https://developer.apple.com/videos/play/wwdc2024/10186/

@Sakuya_Izayoi

  1. Foveated rendering does not significantly reduce geometry costs, it is useful for the per-pixel/fragment costs only. The Vision Pro has a very high resolution screen, so this is a significant optimization.

  2. Entities that are not visible to the person wearing the device are not rendered by the system. Yes, this improves performance, and is a process similar to camera frustum culling.

  3. You should optimize for polygon count across your entire scene. Here's an article with more information: Optimize your 3D assets for spatial computing.

  4. New in visionOS 27, you can use LevelOfDetailComponent to optimize for distance to camera or size on screen. See the session Explore advances in RealityKit to learn more.

The system applies optimizations like foveated rendering and off-screen entity culling for you in order to improve the performance of your app on the device. However, as a developer, you don't typically interact with foveated rendering or entity culling directly other than understanding that they are happening "under the hood".

For you as a developer, you can use apps like Instruments to identify performance issues. See the session Profile, fix, and verify: Improve app responsiveness with Instruments to learn more. Instruments is great at identifying areas of code that could be improved. For rendering specifically, you can use RealityKit Trace. See the session Meet RealityKit Trace to learn more. It is very important to measure your app throughout development to identify regressions and optimizations unique to your app.

Thank you for your question!

Why are polygon count limits still important in ImmersiveSpace with foveated rendering?
 
 
Q