My project runs on Quest 2 at 18 FPS (GPU-bound), no matter the scene or XR Rig
Our game's Quest performance has always hovered around 36 fps while in development, which I've come to find out was due to high batch counts and complex lit material shaders on every object.
But now that I'm back to testing optimization on Android, I've noticed terrible frame rates (10-18) no matter what I disable in the scene. I've even opened up the DemoScene from XR Interaction Toolkit, and it experiences the same unknown GPU-bound issue.
Context about my project:
- Unity 6.0.59f2 running on a Windows 11 PC.
- Open XR project targeting a Quest 2 and SteamVR release.
- I have a ton of packages from the Unity Asset Store that I'm using to build the rig, environment, or mini games. I've kept them up to date, checked that they were Unity 6 compatible, and removed any unused packages.
Things I've checked:
- I've used the What If analysis from the Quest Runtime Optimizer tool to find out that the one blank scene I was testing in had a total GPU Frame Time of 0.342 ms. Maybe you can help identify anything in the Renderdoc.
- Every little setting in Project Settings to be set up the recommended way.
- The only warnings left in my Meta Project Validation are about depth and opaque textures being on, which are required for Stylized Water 3 (an asset that supports Quest) to run. Also, one more warning about Screen Space Ambient Occlusion but from checking everywhere, that feature is off or deleted.
- Memory Profiling. RAM usage in these empty test scenes is at 1.54 GB and I've sat in the scene for 20 minutes before without it crashing or getting slower like a RAM overflow would do.
- There is no spamming of logs, warnings, or errors during runtime on the quest. I checked by turning on Script Debugging and connecting the editor's console to the headset's output. All I found were some regular logs on startup.
Suspicious things I've noticed that only happen in my Quest builds (testing in-editor lacks these issues and runs above 50 fps):
- Dynamic Resolution falls to 0 for my game. But I'm curious if this is the reason for making foveated rendering glitch out so much so that the screen becomes super pixelated in vertical strips across the screen.
- Only when building will I be notified of shader errors from packages we've been setting up like GPU Instancer pro, Microsplat, and InfiniCloud. I mostly stop the errors by deleting sample packages that we didn't need or in one case commenting out a line of code with an error about fog in the universal render pipeline asset or something.
Please help, I've worked on this for four days, and I'm at the end of what I know to try.
Thanks for the quick reply. I was able to get my empty scene to run at 60 fps on my Quest again after these changes (I did them one by one and they each had a positive impact):
- Turned off 4X MSAA and disabled the anti-aliasing feature in the camera. I read on the Stylized Water 3 Discord that this was causing glitches with their asset on Quest for some people.
- Turned off Stylized Water 3 features on the URP-Performant-Renderer asset I'm running on Quest.
- Deleted the Screen-Based Ambient Occlusion setting from my other PCVR Universal Renderer Data profile.
In the default Unity XR toolkit scene, it hits 72 fps, but sometimes dips to 55 in a CPU-bound way. That might be from building the APK as a development build with script debugging enabled both in the build settings, though.