Visor, version 2

I actually got the new head-up display manufactured a few months ago, but haven’t had time to blog about it until now.


Here it is, modelled by my co-worker Scott. Notice the HTC Tatoo held in place with a rubber band. The information appearing on its screen is reflected back off the visor to fill your field of view at a virtual distance of about a metre.


At first glance it looks pretty good, but there are two problems. First, it’s too reflective. I requested aluminium coating on the inside surface at a thickness that would let through 20% of external light, similar to a pair of sunglasses. Unfortunately they coated both sides, so it’s only letting through about 4%. You can sort of see my couch in the background, but it’s faint, so the effect is more virtual reality than augmented reality. Still, that’s easy to fix in the next version.

More serious is the image distortion. I designed the visor using the optics I learned in high school, namely how a parabola can magnify an object and make it appear further away. Well, they lied to me. It turns out parabolic reflectors only work when viewed along the axis, and when they’re viewed off-axis, e.g. from your left and right eyes, the image gets distorted, especially at the edges.

You can see in the picture above how the “22:31” text is sloping down, and that’s viewed from a camera that was fairly close to the axis. Viewed from your eyes the slope is worse, and, more important, the distortions are different for each eye so the images don’t line up. That makes it impossible to read text.

There’s no good solution to this. I’m writing some ray-tracing software to generate a curved surface that will show a separate image to each eye, but it has drawbacks. Each eye won’t see the entire image, and I suspect it’s going to be fairly sensitive to the position of the eyes relative to the visor.

At least this time I’ve learned a new trick for evaluating a design cheaply. I save the design in STL format, load it into Blender, make it a mirrored surface, and render it with ray tracing. If the reflected checker pattern is undistorted from the two eye positions then I’ve got something that works.