Creating immersive and interactive VR experiences introduces a new set of physiological, ergonomic, and technical challenges. How do you move comfortably in VR? How do you get the most performance out of mobile hardware?
Daydream Elements is a collection of Unity tech demos that showcase principles and best practices for developing high-quality VR experiences. The core mechanics in each demo are built to be easily configurable and reusable for your own applications.
Elements currently covers the following VR principles:
Elements is available both as an Android app on the Play Store and as an open source project on GitHub.
When crafting VR applications, it is often important to let the player to move around their virtual environment. Techniques for enabling navigating a VR environment are referred to as locomotion. There are a variety of different ways to achieve effective locomotion, each with their own set of tradeoffs.
Teleportation is locomotion technique for apps using first-person perspective that allows the user to near-instaneously move to a target location. This technique reduces the simulator sickness that many users feel when the virtual camera moves.
Tunneling is a technique used with first-person locomotion (such as walking) where, during movement, the camera is cropped and a high-constract stable grid is displayed in the user's peripheral vision. This is analogous to a user watching first-person locomotion on a television set.
Chase Camera is a technique used with third- person locomotion, where the user is controlling a character. Standard third-person camera implementations are problematic in VR and contribute to simular sickness. Chase Camera offers predictable motion - camera rotation only occurs under user direction, and small character movements don't move the camera at all.
Menus and virtual controls
The Daydream controller only exposes two buttons to developers: the clickable touchpad, and the app button. For many developers, two discrete controls does not provide a rich enough set of commands for the games and applications that they would like to create. One solution is to present the user with virtual controls for the app’s command scheme.
Click Menu provides the user with a radial menu of commands emanating from the cursor when the menu is invoked. Because users must click directly on options, this menu design trades the speed of a more gestural approach with the control of discrete clicks and scales well with complex command hierarchies.
Swipe Menu leverages the Daydream controller touchpad to allow the user to quickly select between a small set of commands. This menu trades efficiency for accuracy and does not scale well to large number of commands.
Rendering and lighting
Performance is critical to VR apps but can be especially challenging on mobile GPUs. Many commonly available mobile shaders and per-pixel lighting solutions provide high quality results but perform poorly on mobile VR systems due to extremely high resolutions, rendering multiple views, distortion and general mobile performance issues.
The Rendering & Lighting demo uses Daydream Renderer to showcase rendering effects that are typically difficult to achieve on mobile hardware. This scene demonstrates Daydream Renderer features like per-pixel lighting, tangent-space normal maps, dynamic shadows, realtime specular highlights, and reflections.
- Daydream Rendering and Lighting Demo included as part of Elements as a demonstration of the Daydream Renderer's capabilities.
- Daydream Elements contains project settings that will override your own
project settings if you choose to import them.
- ProjectSettings/TagManager.asset includes tags and layers used by the Elements Demo scenes and Main scene. If you exclude this asset, the Elements features will still work correctly when you use them in your own scenes. However, the demo scenes will not all function properly. You can also manually merge the Elements layers and tags with your own layers.
- ProjectSettings/EditorBuildSettings.asset includes the Elements Demo scenes and Main scene in the build settings. If you exclude this asset, then you will not be able to enter a demo from the App Menu when running the Main scene.