Pepper's Cone: An Inexpensive Do-It-Yourself 3D Display
This repo contains the Unity project to display 3D objects given calibrated distortion map. More information see our paper and video.
How to DIY Your Own Pepper's Cone
- Build a cone following the instructions below.
- Get a tablet with gyroscope. Here we use 12.9'' iPad Pro.
- Distortion calibration. The distortion map in the repo is calibrated when placing the 45-degree cone you just built on a 12.9'' iPad Pro. While this distortion map "roughly" works for other setup, for best accuracy, please follow our paper to do the distortion calibration. (Skip this if you use my calibrated scenario.)
- If you want to try the binocular version of Pepper's Cone, please prepare a pair of red-cyan anaglyph glasses like this or this.
- Download Unity. Build and run the demo scenes in Unity following the Demo section.
The assembly process is also shown in the video.
Build a Cone
Here I'll show you how to build the cone itself. If you just want to run the demo app, jump to the Demo section.
- Download the template of a 45-degree cone. More cone templates are available here.
- Buy clear 0.01-inch polycarbonate sheets or even thinner. Feel free to use other transparent thin plastic sheets. PETG and many other materials also work.
- Cut the plastic sheet using the template. Cut through all red curves and cut half-way through for the blue ones. You can
- print out the template as a poster since it's much larger than A4 paper, and cut your plastic sheet manually.
- Or let a laser cutter cut it according to the template. Nowadays there are many makerspaces in the neighbourhood like UW's Makerspace and Metrix Create Space where laser cutters are available and cheap to use. Note that although using a laser cutter is more convenient and accurate, some laser cutter doesn't support cutting sheets of certain plastic material. Be careful!
- Tape the openning of the cone at the bottom and put a nickel for statblization during rotation. Alternatively, you can put a sucker pad in the opening.
Demo
In the paper we described two Pepper's Cone setups:
- a glass-free setup where distortion is only calibrated towards the center of the two eyes, see
Assets/Scenes/MonoPeppersConeMini.unity
, - and a binocular setup where you need to wear you need to wear red-cyan anaglyph
glasses, see
Assets/Scenes/StereoPeppersConeMini.unity
. With this one you can see true stereo depth.
Build and run the corresponding scene on the tablet, place the cone and the nickel at the center of the rings, and enjoy your 3D "hologram" at home :)
The scenes here are the minimal setup required to show 3D objects in Pepepr's Cone. To add
your own 3D models, add your models as child gameobjects of ModelController
like those cylinders there.
You can also add sound to boost realism.
UI Description
There are two main scenes in MonoPeppersConeMini
and StereoPeppersConeMini
:
- calibration scene,
- and model scene.
Press CalibOrModel
to switch between the calibration and the model scene.
At the model scene, press Next Model
to switch
between different 3D models.
Calibration Scene
- Concentric rings. You should put the cone at the center.
- Cylinder. Pepper's Cone works the best when you place your head at the calibrated position while it still works when your head is roughly centered. You can use the cyclinder in the scene to calibrate your head position. The cylinder will be reflected by the cone surface and then by the tablet screen again. Close one eye to see the reflection of the cylinder on the tablet screen. When the reflection you see with either eye is symmetric about the original displayed cylinder image, your head is centered and at the calibrated position.
- reset. When the rotation estimation is off or towards undesired
orientation, press
reset
.
Notes about GoogleVR SDK
I use GoogleVR SDK 1.10 to get low-drift low-latency rotation estimation. I can't use the latest 1.110.0 version because for now they don't open API to enable only rotation estimation without stereo rendering. Please let me know if you find that new GoogleVR SDK supports that.
Currently, all GoogleVR related files are in Assets/GoogleVR
and
Assets/Plugins
. Only these folders, the gameobject RotationManager
and the script
Assets/Scripts/RotationManager.cs
need to be changed for upgrading GVR.
Citation
@inproceedings{luo2017pepper,
title={Pepper's Cone: An Inexpensive Do-It-Yourself 3D Display},
author={Luo, Xuan and Lawrence, Jason and Seitz, Steven M},
booktitle={Proceedings of the 30th Annual ACM Symposium on User Interface Software and Technology},
pages={623--633},
year={2017},
organization={ACM}
}
Contact
If you have any questions, please email Xuan Luo at xuanluo@cs.washington.edu.