Googles DDM System: Example of how the ddm system maintains angular size of UI to maintain readability at any distance

Roger Miller teaches a fantastic course on “Unity: Building VR User Interfaces” through LinkedIn Learning. As a student at Emily Carr University we have free access, and I would highly recommend to for Designers who want to build UI for VR. I had already completed an intro to Unity course, which I think he also recommends. Miller provides scripts with the course, so you don’t need to code anything. The scripts are also amazing for developing your own UI in other projects, as I’ve continued to use them in my work. Google’s research from their work on Daydream is still one of the best guidelines we have, but Miller puts it into action. You can see the original Google talk here.

This is an overview of what the course will teach you to build. It’s visually simple, but explains how to build the foundation of your UI and Dialog system.


Oculus SDK

  • I set up Unity with Oculus’ SDK Integration. This allows Unity to communicate with the Oculus hardware including, cameras for left, right and centre eye. Transform metadata for both controllers.
  • This also comes with the models for the controllers, and tracking for gaze points from cameras and controllers.


  • I set up a ray caster coming from the controller to interact with the environment and UI.


VR Console

  • I needed to build an-in app console since you can’t see the Unity Console while in VR
  • This is dialogue tracked to the center camera, so it will track with the user.
  • To test reading distances the console shows it’s distance from the user on the top right
    • Text less then 0.5 meters is unreadable and feels intrusive.

Button Micro-Interactions

  • The buttons give user feedback with a hover state. The color changes on hover state.
  • There is also a haptic feedback in the controller on hover, and a stronger one on button down.



  • I set up the reticle to track a marker on each surface the raycasters’ gaze touches. See video for example.
  • Using Googles DDM framework, the reticle maintains it’s angular size by scaling as the raycaster gaze moves away.


Visual Settings Pallet

  • I built a canvas that track on top of the left controller like a painters pallet.
  • Interactive controls of Unitys’ rendering settings to test readability and performance issues.
  • Antialiasing is critical to rendering crisp text for reading. Render scale greatly improves crispness as well, but huge performance hit.


Modal Dialog

  • I built a head tracking overlay to focus user on dialog. Transitions in and out (see video)
  • Turns off all physics and raycasters on all interactable objects.
  • Dialog launches from clicking on object


Teleport System

  • Reticle shows teleport indicator
  • Pushing up on the thumbstick activates the teleport, moving user to location.