How the Looking Glass Works
This document explains how the Looking Glass creates the visual illusion of physically present holograms. The underlying mechanics of this illusion aren't too complicated, and understanding how they work is helpful for creating more convincing 3D experiences.
Interacting with this Document
This document can be read on its own, but if you'd like to be more interactive with it and see how these things look in person in your Looking Glass, download and run it here: windows / mac. While this demo was built using the HoloPlay Unity SDK, the principles covered here apply to all Looking Glass content. The instructions for the interactive demo is:
- Left and Right arrow keys cycle through scenes
- Space bar toggles the number ribbon in the first scene
- Up / Down arrow modifies the text depth in the second scene
- Space bar toggles the Depth of Field blur in the last scene
The Multi-View Display
In order to produce holograms, Looking Glass provides 45 discrete views of a 3d scene and presents these views over a view cone roughly 50° wide. This arrangement of views tricks the visual perception system into seeing 3d objects in two major ways:
- by changing the user's aspect on the scene as they move their head around it (parallax)
- by presenting different perspectives to each eye (stereo vision)
The diagram below illustrates the way in which the Looking Glass directs the 45 different images. In the diagram, you'll see:
- Top Center is bird's eye view of the Looking Glass display.
- Inside the Looking Glass is also a top-down view of the 3d model that it is programmed to display -- a stick with a ring and two spheres attached to it.
- Top Right is the 2d image that's being displayed per each view perspective. The corresponding view perspective is indicated by the dark black lines attached to the Looking Glass.
- Top Left is an image that shows all 45 views simultaneously -- what we call a quilt. Also in this diagram, an animated red box to identify which subsection of the quilt is being displayed for each given view angle.
Here's a close up of the quilt image shown in the above diagram:
The bottom left of the quilt is the left-most angle of the scene, and the top right is the right-most angle. Developers are welcome to tinker with this to manually produce their own quilts, but in general, Looking Glass software is responsible for converting various existing 3d environments (Unity, three.js, etc...) into quilt images. For more technical information check out the quilt spec in the C API.
Example Quilt on Display
When the above quilt is displayed on a real Looking Glass, this is the result:
Here, the incrementing numbers illustrate how the eye sees a different perspectives as the viewer moves from side to side. This is what creates the illusion of 3d.
Note: If you are following along in person, there's a suggestion to close one eye to avoid eye strain. This suggestion is only for this specific quilt and for people who are looking at this effect in person. The reason is that when you look at the display with two eyes, the yellow numbers behave in a perceptually confusing way. Closing one eye removes this confusion.
The Zero-Parallax Plane
Inside Looking Glass' render volume, different depths have different optical properties. The depth where things looks sharpest is at the Zero-Parallax Plane. The animated diagram below illustrates the Zero-Parallax Plane, as identified by a red line in the middle of the display.
Objects that reside on the zero parallax plane don't move as the viewer moves their head around. For example, the sphere in the middle lies on this plane, meaning it shows up in the same pixel-space position for all 45 views.
Objects that are nearer or further than the plane, however, undergo parallax. As your head moves to the right, for example, the foreground sphere moves left and the red ring in the background moves right.
Parallax and Blur
Let's take a look at how parallax affects image quality.
When you look at the Looking Glass, each eye actually sees many views, not just one view. In the following screenshot, you can see that this camera's perspective captures views 37-41 in varying intensities:
The upside to this layering of views is that as your head moves around, you don't discretely hop from one view to the next, but instead, cross-fade amongst many. This makes the visual experience more fluid and natural.
The downside is that it introduces blur. You can see this in the above image by comparing how sharp the different portions of the model look.
- The sphere in the middle looks sharp. This is because it exhibits zero parallax, so it's pixel representation across many views remains consistent.
- The foreground sphere and the red ring in the background look blurry. This is because they exhibit some parallax, meaning they show up in different pixel locations based on perspective. Therefore, they appear blurry in this shot because the camera is actually seeing an amalgam of perspectives 37-41.
Interactive example of Parallax and Blur
Another way to look at how parallax affects blur is to take a look at this demo, where the text bounces in and out across the zero-parallax plane:
If you are interacting with the demo, you can press the up and down arrow keys to manually move the text.
The best way to account for this parallax-induced blurring is to put important content on the zero-parallax plane. Text will look sharpest here, and 3d models begin to look very crisp and sharp when on of very near the plane.
Depth of Field Blurring
Because the blur is a result of many discrete images being mixed into one, the blurring, especially for objects with a lot of parallax, reveals the discrete views which can be sometimes jarring. This noise can be reduced by applying a depth of field blur, which is available on some of the SDKs we publish.