Tips for Making Computer Generated Virtual Reality Apps for Everyone

After taking a grand tour of the Virtual Reality ecosystem, testing out state-of-the-art and very expensive prototypes, attending dozens of conference and festivals, countless meetups and watching hundreds of hours of tutorials, tips and opinion videos, I am back at the beginning – coding and building an app for GoogleVR in Unity for Cardboard devices.

The reason for this is that, as GPUs get more powerful, audiences and systems more sophisticated, products more polished and elaborate, CPUs faster, denser, peripherals more elaborate, it is easy to forget that the vast majority of users will not have space or money to outlay for these heavy duty VR experiences. Most, will likely have their first VR access on a Cardboard spec device.

It is important to remember, when developing any sort of VR app, to build it on a minimum spec machine; this will ensure that anyone with a VR rig can run it. Thinking that you need the top of the line GFX card and 64GBs of RAM to really get your open world parkour RPG VR experience going, is a newbie mistake.

And this bring me back to why I am now building an app on the now wonderfully more robust and evolved GoogleVR SDK in Unity – that ubiquitous platform that has, itself, iterated into VR development quite wonderfully.

Sometimes it takes just one video or tip from a friend to trigger a chain reaction of understanding and productivity, and I want to share a couple of those with you in this living document, as I make this app at the start of 2018. So let’s go – finding maximum performance and optimization + bang for the buck functionality and good looks for (almost) minimum spec GoogleVR Cardboard experiences.

In no particular order (I will expand these as time allows):

0. Go to

1. Linear vs Gamma

2. Forward vs Deferred

3. Realtime vs Baked & Lightprobes!

4. Sharper, readable text (Text Mesh Pro)
This is an essential asset for getting crisp text in VR, or any game with text, for that matter. Just download it and use it. Period.

5. Materials and shaders

6. UI for VR – diegetic vs non-diegetic interfaces
Your canvas objects should be set to World space. This is the only option for VR and especially for Cardboard where the only input is via tap/single click

7. Pixel Lights and Important vs Non Important – good article at Unity College: Pixel & Vertex Lights in Unity3D

8. A Polite Exit
Unity and GoogleVR don’t have a tidy way to exit an app, and it isn’t good practice to use an exit or quit button in an Android app (which is what your Google carboard app will be, and especially so for iOS. So my friend Shachar “Vice” Weis, gave me this bit of code to add to a game object and drop into the scene. This will get you a clean exit when you click the ‘X’ button that Unity produces – the equivalent of hiting the Escape button on a keyboard, and not being forced to press the Home button on your phone to force an ugly exit.

Plop this into a new component on a Game Object ->new C# script->
void Update() {
if (Input.GetKeyDown(KeyCode.Escape)) {
// Android close icon or back button tapped.


Leave a Reply