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.

Oculus Android VR Media Overview

Author all media, such as panoramas and movies, at the highest-possible resolution and quality so they can be resampled to different resolutions in the future.

This topic entails many caveats and tradeoffs.

Panoramic Stills

Use 4096x2048 equirectangular projection panoramas for both games and 360 photos. 1024x1024 cubemaps are for games, and 1536x1536 cubemaps are for viewing in 360 Photos with the overlay code.

Panoramic Videos

The Qualcomm H.264 video decoder’s spec was designed with the ability to decode 4k video at 30 FPS, but it has significant headroom above that. The pixel rate can be flexibly divided between resolution and frame rate, so you can, for example, play a 3840x1920 video at 30 FPS or a 1920x1920 video at 60 FPS.

Note that although Android has a resolution limit of 4096x4096, it’s recommended that you stay below that. For stereoscopic resolution, the resolution would be 2560x2560 at 30 FPC or 1920x1920 at 60 FPS. More recent phones can go above these resolutions.

For monoscopic videos, the GALAXY S7, S8, and Oculus Go decoders allow for 4096x2048 at 60 FPS with 10-bit color (HEVC), 4096x2048 at 60 FPS with 8-bit color (H.264), and 4096x2048 at 30 FPS with 8-bit color (VP9).

For stereoscopic videos, the GALAXY S7, S8, and Oculus Go decoders allow for 2560x2560 at 60 FPS and 3840x3840 at 30 FPS.

Oculus 360 Video is implemented using equirectangular mapping to render panoramic videos. Top-bottom, bottom-top, left-right, and right-left stereoscopic video support is implemented using the following naming convention for videos:

“_TB.mp4”Top / bottom stereoscopic panoramic video
“_BT.mp4”Bottom / top stereoscopic panoramic video
“_LR.mp4”Left / right stereoscopic panoramic video
“_RL.mp4”Right / left stereoscopic panoramic video
DefaultNon stereoscopic video if width does not match height, otherwise loaded as top / bottom stereoscopic video

Movies on Screens

Comfortable viewing size for a screen is usually less than 70 degrees of horizontal field of view, which allows the full screen to be viewed without turning your head significantly. For video playing on a surface in a virtual world using the recommended 1024x1024 eye buffers, anything over 720x480 DVD resolution is wasted, and if you don’t explicitly build mipmaps for it, it will alias and look worse than a lower resolution video.

With the TimeWarp overlay plane code running in Oculus Cinema on the 1440 devices, 1280x720 HD resolution is a decent choice. The precise optimum depends on seating position and may be a bit lower, but everyone understands 720P, so it is probably best to stick with that. Use more bit rate than a typical web stream at that resolution, as the pixels will be magnified so much. The optimal bit rate is content dependent, and many videos can get by with less, but 5 Mb/s should give good quality.

1080P movies play, but the additional resolution is wasted and power consumption is needlessly increased.

3D movies should be encoded “full side by side” with a 1:1 pixel aspect ratio. Content mastered at 1920x1080 compressed side-by-side 3D should be resampled to 1920x540 resolution full side-by-side resolution.

Movie Metadata

When loading a movie from the sdcard, Oculus Cinema looks for a sidecar file with metadata. The sidecar file is simply a UTF8 text file with the same filename as the movie, but with the extension .txt. It contains the title, format (2D/3D), and category.

"title":        "Introducing Henry",
"format":        "2D",
"category":    "trailers",
"theater":     ""

Title is the name of the movie. Oculus Cinema will use this value instead of the filename to display the movie title.

Format describes how the film is formatted. If left blank, it will default to 2D (unless the movie has ‘3D’ in its pathname). Format may be one of the following values:

2DFull screen 2D movie
3D3DLR3D movie with left and right images formatted side-by-side
3DLRF3D movie with left and right images formatted side-by-side full screen (for movies that render too small in 3DLR)
3DTB3D movie with left and right images formatted top-and-bottom
3DTBF3D movie with left and right images formatted top-and-bottom full screen (for movies that render too small in 3DTB)

Category can be one of the following values:

BlankMovie accessible from “My Videos” tab in Oculus Cinema
TrailersMovie accessible from “Trailers” tab in Oculus Cinema
MultiscreenMovie accessible from “Multiscreen” tab in Oculus Cinema

Oculus 360 Photos and Videos Metadata

The retail version of 360 Photos stores all its media attribution information in a meta file that is packaged into the apk. This allows the categories to be dynamically created and/or altered without the need to modify the media contents directly. For the SDK 360 Photos, the meta file is generated automatically using the contents found in Oculus/360Photos.

The metadata has the following structure in a meta.json file which is read in from the assets folder:

          "name" : "Category1"
          "name" : "Category2"
    "title":     "Media title",
    "author":    "Media author",
    "url":       "relative/path/to/media"
    "tags" : [
{ "category" : "Category2" }
    "title":     "Media title 2",
    "author":    "Media author 2",
    "url":       "relative/path/to/media2"
    "tags" : [
{ "category" : "Category" },
    { "category" : "Category2" }

For both the retail and SDK versions of 360 Videos, the meta data structure is not used and instead the categories are generated based on what’s read in from the media found in Oculus/360Videos.

Media Locations

The SDK comes with three applications for viewing stills and movies. The Oculus Cinema application can play both regular 2D movies and 3D movies. The Oculus 360 Photos application can display 360 degree panoramic stills and the Oculus 360 Videos application can display 360 degree panoramic videos. These applications have the ability to automatically search for media in specific folders on the device. Oculus 360 Photos uses metadata which contains the organization of the photos it loads in addition to allowing the data to be dynamically tagged and saved out to its persistent cache. This is how the “Favorite” feature works, allowing the user to mark photos as favorites without any change to the media storage itself. The following table indicates where to place additional media for these applications.

2D MoviesMovies\DCIM\Oculus\Movies\My VideosOculus Cinema
3D MoviesMovies\3DDCIM\3DOculus\Movies\My Videos\3DOculus Cinema
360 degree panoramic stillsOculus\360Photos(In the app - assets\meta.json)Oculus 360 Photos
360 degree panoramic videosOculus\360VideosOculus 360 Videos
Movie Theater .ovrsceneOculus\Cinema\TheatersOculus Cinema