TDLR: Use Unity 2019 with OpenGL for the best performance. It depends.
As 2020.3.23f1 LTS is released recently, I decided to test its performance against 2019.4.16f1 LTS, specifically on Oculus Quest 2. According to a few threads online (this, this and this), it’s known that Unity 2019 provides better performance on Oculus Quest over Unity 2020 generally. I wonder if the release of 2020.3 LTS fixes the performance degradation issue.
Here’s how the tests are set up: The scene are the same, using a demo scene from Synty Polygon Samurai asset. The URP and other graphics settings are the same too. I’ve also forced the CPU and GPU power level to 4 for all the tests to provide an equal playing field (I found that Oculus Quest 2, by default, runs around GPU level 2-3 on builds from Unity 2019, and GPU level 4 on builds from Unity 2020).
The CPU usage seems to be a bit lower on OpenXR builds, but it fluctuates a lot, and is generally low on all the builds. I couldn’t get a clear difference between them.
Editor Version | URP version | XR Plugin Provider | Graphics API | Frame time | GPU usage |
2019.4.16f1 LTS | 7.3.1 | Oculus | OpenGLES3 | 11.94ms | 62% |
2019.4.16f1 LTS | 7.3.1 | Oculus | Vulkan | 12.07ms | 66% |
2020.3.23f1 LTS | 10.7.0 | Oculus | OpenGLES3 | 13.86ms | 77% |
2020.3.23f1 LTS | 10.7.0 | Oculus | Vulkan | 13.72ms | 78% |
2020.3.23f1 LTS | 10.7.0 | OpenXR | OpenGLES3 | 12.37ms | 69% |
2020.3.23f1 LTS | 10.7.0 | OpenXR | Vulkan | 12.68ms | 70% |
As seen, 2019.4 (URL 7.3.1) with OpenGL performed the best. In terms of GPU usage, 2020.3 with OpenXR plugin is about 10% higher than it, while 2020.3 with Oculus plugin is about 20% higher. Interestingly, the graphics API doesn’t seems to affect the performance on 2020.3 builds, but it does make a difference on 2019.4.
Of course, graphics performance doesn’t mean everything. 2020.3 provides support for OpenXR, as well as ASW (Asynchronous Spacewrap), which the latter can easily overcome the performance degradation, albeit with the chance of visual artifact occurring depending on the game.
Another thing to keep in mind is that the tests are done on a demo scene from Synty, so it doesn’t represent a real game performance. Different games might perform better on 2020.3, who knows. I’ll probably start my new VR game project in Unity 2019, and upgrade it to 2020 at some point for the OpenXR and ASW support (with backup), hopefully Unity has fixed the issue by then.
Update 21/11/21:
So I’ve just tested both editor version with another demo scene, now it’s from Synty Polygon Sci-Fi Space pack. This scene has much more tris and vertices, and the world scale is significantly larger (things are very far apart). It produced a very different result.
The OpenXR build from 2020.3 not only performed a lot more better than the Oculus builds (on both 2020.3 and 2019.4) on GPU usage, the advantages it had in CPU usage I saw on previous tests became much more apparent now. As seen below, it’s better in frame time metric for almost 30%, and uses 10% less GPU. The difference in CPU usage is even more significant, note that the 2019.4 builds are on power level 4 while the 2020.3 one is on level 2.
Editor version | URP version | XR Plugin Provider | Graphics API | Frame time | GPU usage (lvl 3) | CPU level / usage |
2019.4 | 7.3.1 | Oculus | OpenGLES3 | 23.18ms | 88% | level 4, 71% |
2020.3 | 10.7.0 | OpenXR | OpenGLES3 | 16.78ms | 78% | level 2, 37% |
2020.3 | 10.7.0 | Oculus | OpenGLES3 | 22.45ms | 89% | level 4, 55% |
2019.4 Oculus OpenGL 2020.3 OpenXR OpenGL 2020.3 Oculus OpenGL
So in the end, the performance of 2019.4 and 2020.3 builds on Oculus Quest really depends on the game. It’s best to try out both and pick the best performed one.