This site has been permanently archived. The content on this site was last updated in 2019.
Daydream Elements
Stay organized with collections
Save and categorize content based on your preferences.

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.
Download 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.
All rights reserved. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2024-10-09 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-10-09 UTC."],[[["\u003cp\u003eDaydream Elements offers Unity tech demos with configurable and reusable core mechanics, highlighting best practices for VR development.\u003c/p\u003e\n"],["\u003cp\u003eIt addresses key VR principles: locomotion, object interaction, rendering & lighting, and menus & virtual controls, improving user experience.\u003c/p\u003e\n"],["\u003cp\u003eThe demos showcase solutions for common VR challenges, like motion sickness and performance limitations on mobile VR, ensuring smoother experiences.\u003c/p\u003e\n"],["\u003cp\u003eElements is open source and available on GitHub, encouraging community contribution and customization for diverse VR projects.\u003c/p\u003e\n"],["\u003cp\u003eThe provided examples and best practices help developers create immersive and interactive VR applications for Daydream platform.\u003c/p\u003e\n"]]],["Daydream Elements offers Unity tech demos showcasing best practices for VR development, addressing challenges like movement and hardware performance. Core principles covered include locomotion (teleportation, tunneling, chase camera), object interaction (manipulation, arm models), rendering/lighting (using Daydream Renderer for mobile optimization), and virtual controls (click, swipe, and constellation menus). Each demo's mechanics are configurable and reusable, providing developers with tools for building high-quality VR experiences. Daydream Elements is accessible as an open-source project on GitHub.\n"],null,["# Daydream Elements\n\nCreating immersive and interactive VR experiences introduces a new set of\nphysiological, ergonomic, and technical challenges. How do you move comfortably\nin VR? How do you get the most performance out of mobile hardware?\n\nDaydream Elements is a collection of Unity tech demos that showcase principles\nand best practices for developing high-quality VR experiences. The core\nmechanics in each demo are built to be easily configurable and reusable for your\nown applications.\n\nElements currently covers the following VR principles:\n\n- [Locomotion](#locomotion)\n- [Object interaction](#object_interaction)\n- [Rendering and lighting](#rendering_and_lighting)\n- [Menus and virtual controls](#menus_and_virtual_controls)\n\nElements is available as an open source project on GitHub.\n\n[Download on GitHub](https://github.com/googlevr/daydream-elements/releases)\n\nLocomotion\n----------\n\nWhen crafting VR applications, it is often important to let the player to move\naround their virtual environment. Techniques for enabling navigating a VR\nenvironment are referred to as **locomotion**. There are a variety of\ndifferent ways to achieve effective locomotion, each with their own set of\ntradeoffs.\n\n- [Teleportation](/vr/elements/teleportation) is a locomotion technique for\n apps using first-person perspective that allows the user to\n near-instantaneously move to a target location. This technique reduces the\n simulator sickness that many users feel when the virtual camera moves.\n\n- [Tunneling](/vr/elements/tunneling) is a technique used with first-person\n locomotion (such as walking) where, during movement, the camera is cropped\n and a high-contrast stable grid is displayed in the user's peripheral\n vision. This is analogous to a user watching first-person locomotion on a\n television set.\n\n- [Chase Camera](/vr/elements/chase-cam) is a technique used with third-\n person locomotion, where the user is controlling a character. Standard\n third-person camera implementations are problematic in VR and contribute\n to simulator sickness. Chase Camera offers predictable motion - camera\n rotation only occurs under user direction, and small character movements\n don't move the camera at all.\n\nObject Interaction\n------------------\n\nWhile walking around in VR is incredibly important, the next most important\nthing for users is being able to interact with their surrounding environment.\nThis gives users a feeling of agency, and in many cases will play an integral\nrole in your gameplay or puzzle design. We have provided two Elements to\nhighlight best practices in Object Interaction.\n\n- [Object Manipulation](/vr/elements/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.\n- [Arm Models](/vr/elements/arm-model) 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.\n\nRendering and lighting\n----------------------\n\nPerformance is critical to VR apps but can be especially challenging on mobile\nGPUs. Many commonly available mobile shaders and per-pixel lighting solutions\nprovide high quality results but perform poorly on mobile VR systems due to\nextremely high resolutions, rendering multiple views, distortion and general\nmobile performance issues.\n\nThe [Rendering \\& Lighting demo](/vr/elements/renderer-demo) uses [Daydream\nRenderer](/vr/unity/renderer) to showcase rendering effects that are typically\ndifficult to achieve on mobile hardware. This scene demonstrates Daydream\nRenderer features like per-pixel lighting, tangent-space normal maps, dynamic\nshadows, real-time specular highlights, and reflections.\n\nMenus and virtual controls\n--------------------------\n\nThe Daydream controller only exposes two buttons to developers: the clickable\ntouchpad, and the app button. For many developers, two discrete controls does\nnot provide a rich enough set of commands for the games and applications\nthat they would like to create. One solution is to present the user with\nvirtual controls for the app's command scheme.\n\n- [Click Menu](/vr/elements/click-menu) provides the user with a radial menu\n of commands emanating from the cursor when the menu is invoked. Because\n users must click directly on options, this menu design trades the speed of\n a more gestural approach with the control of discrete clicks and scales\n well with complex command hierarchies.\n\n- [Swipe Menu](/vr/elements/swipe-menu) leverages the Daydream controller\n touchpad to allow the user to quickly select between a small set of\n commands. This menu trades efficiency for accuracy and does not scale well\n to large number of commands.\n\n- [Constellation Menu](/vr/elements/constellation-menu) demonstrates a\n gesture-based interaction model that helps users navigate deep information\n hierarchies in a simple, responsive way. Examples use cases include\n item inventories, file directories, and other apps with large feature\n or data sets."]]