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 as an open source project on GitHub.
Locomotion
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 a locomotion technique for apps using first-person perspective that allows the user to near-instantaneously 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-contrast 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 simulator sickness. Chase Camera offers predictable motion - camera rotation only occurs under user direction, and small character movements don't move the camera at all.
Object Interaction
While walking around in VR is incredibly important, the next most important thing for users is being able to interact with their surrounding environment. This gives users a feeling of agency, and in many cases will play an integral role in your gameplay or puzzle design. We have provided two Elements to highlight best practices in Object Interaction.
- Object Manipulation paradigms play a critical part in making VR feel immersive. In this demo, we show how you can simulate weights on objects to make them feel lighter or heavier, and how to tune hinges and sliders so they behave in ways that feel natural for common interactions like opening doors and closing drawers.
- Arm Models approximate the physical location of the Daydream controller in VR so that we can achieve 6DoF-style controller interactions with only a 3DoF controller. This demo includes three custom-tuned arm models for simulating swinging, throwing, and shooting, and a playground that lets you change different model parameters to see how they affect the interaction experience.
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, real-time specular highlights, and reflections.
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.
Constellation Menu demonstrates a gesture-based interaction model that helps users navigate deep information hierarchies in a simple, responsive way. Examples use cases include item inventories, file directories, and other apps with large feature or data sets.