The Unity game engine, which powers most of the apps on the Oculus store, now supports the Vulkan graphics API with Oculus Quest.
Vulkan is the successor to OpenGL, the industry standard graphics API that has been in widespread use for over 2 decades. OpenGL is similar to DirectX up to version 11, but controlled by an open industry consortium and is cross platform.
Like DX12 for Windows and Metal for Apple hardware, Vulkan is a “low level” graphics API (LLAPI). These APIs give developers more direct access to the hardware than previous graphics APIs, moving many tasks from the GPU driver to the game engine.
Vulkan is designed from the ground up to properly take advantage of multi-core CPUs, which were not a relevant factor when OpenGL was created. The Oculus Quest has four main CPU cores, three of which are available to games.
NOTE: While Unity 2019.3 supports Vulkan on Quest, the current Oculus Integration for Unity does not. This is, however, simply due to a check it performs to see if Vulkan is enabled, which can be bypassed by commenting it out.
Vulkan’s lower level access to the hardware means there is less driver overhead for draw calls (instructions from the CPU to the GPU of what objects to draw). This means that more draw calls can be used each frame – or the same number of draw calls per frame will use less CPU power & energy.
This means that Vulkan could enable Quest developers using Unity to ship more detailed scenes, use larger draw distances, use leftover CPU power for physics, or just increase battery life of existing fidelity content.
Vulkan should also allow for significantly faster initial loading times. Have you noticed that some Quest games took a very long time to load the first time you launched them? That’s because OpenGL shaders are compiled on first load, whereas with Vulkan shaders can easily be precompiled.
Facebook claims that Vulkan also allows for HDR rendering on mobile, which could be useful for future headsets.
There are no specific benchmarks for a production Oculus Quest Unity app of OpenGL vs Vulkan performance yet. When Unity first added Vulkan support for regular Android games, the company claimed “up to 35% improvement” in performance.
Unity’s competitor, Unreal Engine, already added support for Vulkan on Quest back in August. While there are no public benchmark stats for Unity’s Quest Vulkan support yet either, Facebook claimed that on Epic’s Sun Temple engine sample Vulkan reduces frame times from 16ms to 13ms, a roughly 20% improvement.
To be clear, Vulkan is not a silver bullet. Optimizing a VR game to run on a smartphone processor is incredibly difficult, and most of the work still falls to each developer. But Vulkan support in Unity promises to make the rules slightly less extreme, so we’ll be keeping a close watch on the Quest content ecosystem this year to see what it enables.