Is it possible to make a VR game with a cool graphics on Meta Quest 2?
We are the Theia Games team and we’ve always been enthusiasts of VR technology, and believe that it’ll radically change the way people think about gaming. The release of the Meta/Oculus Quest 2 headset made a breakthrough in the market when it attracted millions of new players, giving them the opportunity to experience the world of virtual reality.
However, despite the cool immersive effect that VR gives, after a few sessions in a headset and a couple of games completed, the novelty disappears and there is a thirst for new, high-quality content that has cool, realistic graphics.
The level of graphics is largely determined by the platform. For a good user experience, you need to render a 4K image with a frequency of at least 72 FPS. Here we run into the performance limitations of processors on headsets. Unfortunately, they are inferior even to the hardware of modern smartphones.
Having a lot of experience in graphics programming, we asked ourselves an intriguing question – is it possible to squeeze something more out of this hardware than the current products on the market do? We're talking about games that can be played autonomously on a headset, because we believe that the widespread adoption of VR depends on how easy it is for the player to play.
Engine
We chose Unreal Engine as the engine for creating our game. We quickly determined that it demonstrates good performance in some aspects on Quest 2, but in others it is completely unsuitable due to platform limitations.
We can illustrate it with a simple example, in that it's like being in a store when you have a basket of goods worth $150, but you only have $100 in your pocket. What to do in this case?
You can remove those items from the basket that seem less important to you. Is this the way out? For sure. And this is exactly the path that many VR studios and indie developers take, discarding many graphics details in order to fit into the limitations of the platform's performance, like a $100 shopper removing a number of goods from the basket.
But are there other options to deal with this limitation? Yes there are. If we continue using the analogy of the shopper, then we can produce these goods ourselves at a lower cost. Hard? Still yes. But this is the way forward.
This is the path we took. Optimization, Optimization, Optimization.
At first we were able to get excellent performance in static precomputed lighting for a very large number of polygons. In our prototype it was already evident that, in terms of detail, we are ahead of most products on the market. Just look at this cute skeleton:
However, to make a product of the next level, it was necessary to do something that no one else has.
Dynamic lighting
Dynamic lighting is something that changes the perception of graphics the most. Even without understanding the reason, our brain reads it and begins to “believe” more strongly in the reality of what is happening. Unfortunately, we were unable to get a stable FPS from UE on Quest 2 without crashes with a dynamic light source. However, this is not a problem with the engine, as it is repeated on Unity. Apparently, this is why dynamic lighting is not used in almost any standalone game on the platform.
We found a way out in the fact that we independently wrote high-performance shaders which at the same time consume a small part of the processor's power. Shaders take into account the heterogeneity of the surface, the degree of "metallicity" and many other indicators that ultimately affect the perception of the final image.
The complete absence of dynamic shadows is another characteristic feature of the graphics of games on Meta Quest headsets. How does it look in the game? Moving characters seem to be hovering above the ground. The brain notices that there is no shadow at the point of contact between the character's foot and the ground and reads this as a lack of contact. It is clear that honest raytrace shadows are practically unattainable with any high complexity of the models, but the complete absence greatly violates the realism of the picture. We’ve written shaders that allow you to make simplified shadows for the legs of the undead. It's not perfect, but it's much better than no shadows at all. Check it here:
Bloom / Glow
Bloom or Glow is the effect of glowing bright areas of an object when a lighter area appears around it. Our brains are so accustomed to this in movies and in real life that when there is no such effect, it doesn't seem to us that the object is really bright and glowing. Unfortunately, additional rendering is required to achieve this effect. And if you use reasonably complex graphics on Quest 2, this is already an absolutely prohibitive cost (remember our example with a store). However, for all the really bright objects in our game, we’ve found a way to simulate this effect fairly accurately.
Dynamic reflections are another thing that you almost never see in Quest 2 games. We were able to combine precomputed maps, simplified raytracing using normal maps, and a bit of magic to achieve a realistic reflection of a dynamic scene in water in one of our levels. We're not sure if you'll see this level of computational complexity often, even on PC VR.
Just look at the reflection of the skeletons in the swamp water. For video click here. Dynamic Refraction
In one of the levels we have a mountain river with a waterfall. In order to create realistic water, you need to somehow calculate the refraction of rays through it. This is a very complex effect in terms of CPU performance, and if someone told us a year ago that it could be used in real time on the Quest 2, we would never have believed it, but nevertheless, here it is, look at the water near the rocks:
Finally
You might say, “What kind of graphic nerds are these guys? No one will notice these little things." But the graphics and the perception of the picture as being complete and realistic consists of these details and trifles. Just watch the gameplay video (click), play our Demo (click) and feel the difference ;)
Feel free to ask any questions you have: - Email: pr@theiagames.com - Twitter - Discord