Oculus Go Development

On 6/23/20 Oculus announced plans to sunset Oculus Go. Information about dates and alternatives can be found in the Oculus Go introduction.

Oculus Quest Development

All Oculus Quest developers MUST PASS the concept review prior to gaining publishing access to the Quest Store and additional resources. Submit a concept document for review as early in your Quest application development cycle as possible. For additional information and context, please see Submitting Your App to the Oculus Quest Store.

Unity for Oculus Development - Settings and Features to Minimize Iteration Time

As Unity developers, so much of your time is spent within the real time 3D engine that we want to ensure you’re maximizing efficiency when developing and testing your VR apps. See below for a series of recommendations when setting up your next Unity project and testing your build, along with Unity specific features to consider going forward.

Streamlining your Oculus Integration Package for Unity

There is a great deal of value within the full Oculus Integration Package for Unity, including the Oculus Avatar SDK, Platform Services, the Unity Sample Framework, utilities and more. Be sure to review the following document for a detailed breakdown of the Integration: Understand Oculus Integration Package Components.

If you are just starting out, it is recommended that you download the full integration package and utilize each of these files. On the other hand, if you have built a number of VR apps in the past and you know exactly what you’re looking to create with your next project, you may want a more streamlined set of files.

In the scenario where you are looking for the minimum number of files/folders out of the integration, feel free to extract those files that are required for your next build as this optimized set of files will save you time with each compile + iteration. For many devs, a more streamlined package would include: The core VR folder, Audiomanager, Platform, OculusProjectConfig.asset, and the Spatializer.

Each project is different, so be sure to collaborate with your team to ensure you have what you need before moving forward.

Unity is a flexible, powerful real time 3D engine for building VR games and apps, and with this flexibility comes a massive number of ways to set up your project. See below for those project settings we recommend, and be sure to review the Unity Configuration Settings documentation for more on how to get started with Unity.

  • Enable fixed foveated rendering (FFR): Can save between 10% and 20% of your GPU cost.
  • Enable single pass (multiview) rendering: Can save you ½ of your CPU render cost.
  • Set MSAA to 4x (4 samples per pixel): Enables a generally more polished look with less jagged edges, especially with rendered text.
  • 64-Bit: Your app should be 64-bit, as this is now a requirement for all Oculus apps. Check out the following blog post for more on this topic: The Memory Benefits of 64-bit + How it Works, and keep in mind that to make your app 64-bit, you will also need to enable IL2CPP which we discuss in greater detail below.
  • Recommended rendering configurations: We recommend avoiding post processing, and simply create a single pass app. Turn off HDR and generally avoid enabling multipass setups such as shadows by default.

Minimize iteration time with these Unity features

Unity offers a suite of features that will help you deploy, test, and update your build. See below for a snapshot of the more powerful features for minimizing iteration time for your VR app.

Asset Bundles

This feature helps you drastically minimize iteration time when testing your app. Unity defines Assetbundles as:

...content that is stored separately from a main game or application and loaded (or downloaded, in the case of mobile and online apps) at runtime. This helps minimize the impact on network and system resources by allowing customers to download and install only the parts they need. AssetBundles can also be used to update or add to content post-release.

We recommend placing all your scenes in an asset bundle along with a thin loader scene in your APK. This will enable you to test your code without needing to reupload all of your assets, cutting down heavily on iteration time.

See the Unity Assetbundle documentation, or the Unity: Introduction to Assetbundles video course for more information on the feature.

OVR Quick Scene Preview

OVR Quick Scene Preview uses the Unity Assetbundle System to hot reload changes to your app, reducing your deployment time and (as a result) minimizing iteration time throughout your project.

Check out the Optimize Build Iterations for Android apps documentation for a step-by-step walkthrough on how to leverage this feature.

Screengrab of OVR Quick Scene Preview within Unity menu

Expansion Files

Also leveraging Unity’s Assetbundle system, we recommend using expansion files by placing all files that don’t include your game logic within an extension file. This step will help you avoid deploying the expansion file (and your assets) each time that you want to simply test your game logic.

Keep in mind that you can also leverage multiple expansion files and see the following blog post for more on the feature: Expansion Files With Unity.

Assembly definition files

Assembly definitions tell the engine specifically what to compile, ensuring that you’re not compiling specific parts of your build with every iteration. See Unity’s definition:

You can use Assembly Definitions to organize the scripts in your Project into assemblies. When you create an Assembly Definition Asset in a folder, Unity compiles a separate managed assembly from all the scripts in that folder.

Be sure to review the Unity Assembly Definition documentation for a detailed overview on the feature, how it works, and steps to get started.

OVR Build APK and Run

This method utilizes the gradle cache when building your APK, and caches files so you avoid completely rebuilding your app with each iteration. The resulting APK will be identical to your normal Unity build, but this process can reduce build and deploy time by 10-50% when building an APK. This feature is located under the Oculus menu shown below:

Screengrab of OVR Build APK and Run within Unity menu

Shader Stripping

Displayed within the OVR Platform Tool, if Oculus Quest is selected as the Target Oculus Platform, check Skip Unneeded Shaders to remove all Tier1 and Tier3 shaders from your build. We have recorded significant decreases in iteration time with this feature, combined with those outlined above.

For more information, review the following Technical Documentation on Shader Stripping or the blog post covering Unity Iteration Time Improvements.

OVR Platform tool, option to skip unneeded shaders circled