Developing a Custom Eye-Tracking HMD

Jan 2014


I built a custom virtual reality headset to further my understanding of VR technology. It supported 3-dof movement using an IMU and had integrated IR cameras for eye tracking.

Custom 3D-Printed VR HMD

I decided it would be fun to build a custom virtual reality headset. I based the design on the Socket HMD reference from USC’s MxR Lab. The headset uses an  imported a Chinese LCD and and IMU. The tracking tech layer interfaces with Unity.


Duct Tape Prototype

Look at all of that tape! That’s how you know it’s good.


Eye Tracking

Side-mounted IR cameras + lights capture the user’s eye movement at 120hz.


3D-Printed Enclosure

It actually looked pretty nice before all the tape.

The Process

Inspired by Palmer Luckey’s work, I decided to develop a Socket HMD implementation of my own.

With only minor tweaks, I printed the enclosure in PLA using a Replicator 2. Then, I mounted the lenses and attached the IMU and LCD. Finally, attached the ski goggle frame.

Once the hardware was in place, I read the tracking data using an Arduino and piped it into Unity.

In Unity, I recycled a lens distortion shader and wrote a simple test app. It worked!

Finally, I attached the IR cameras and lights inside the HMD and started reading frames using openFrameworks. While I got basic glint tracking working, I never got it to perfectly line up with the position in the HMD.

I had a lot of fun playing with this project and it taught me quite a bit about VR. Mostly, I gained even more respect for the folks building cutting edge VR hardware. It isn’t easy!

Keywords: Virtual Reality, Hardware, Arduino, Unity, IMU, Eye Tracking, openFrameworks, C++

Matt Sonic