Snow Globe: Part One, Cheap DIY Spherical Projection

Earth in Snow Globe

Since reading Snow Crash, I’ve been drawn to the idea of having my own personal Earth.  Because I’m stuck in reality and the virtual version of it is always 5 years away, I’m building a physical artifact that approximates the idea: an interactive spherical display.  This is of course something that exists and can likely be found at your local science center.  The ones they use are typically 30-100″ in diameter and cost enough that they don’t have prices publicly listed.  Snow Globe is my 8″ diameter version that costs around $200 to build if you didn’t buy a Microvision SHOWWX for $600 when they launched like I did.

Lens mount

The basic design here is to shoot a picoprojector through a 180° fisheye lens into a frosted glass globe.  The projector is a SHOWWX since I already have one, but it likely works better than any of the non-laser alternatives since you avoid having to deal with keeping the surface of the sphere focused.  Microvision also publishes some useful specs, and if you ask nicely, they’ll email you a .STL model of their projector.  The lens is an Opteka fisheye designed to be attached to handheld camcorders.  It is by far the cheapest 180° lens I could find with a large enough opening to project through.  The globe, as in my last dome based project is for use on lighting fixtures.  This time I bought one from the local hardware store for $6 instead of taking the one in my bathroom.

I’ve had a lot of fun recently copying keys and people, but my objective in building a 3D printer was to make it easier to do projects like this one.  Designing a model in OpenSCAD, printing it, tweaking it, and repeating as necessary is much simpler than any other fabrication technique I’m capable of.  In this case, I printed a mount that attaches the lens to the correct spot in front of the projector at a 12.15° angle to center the projected image.  I also printed brackets to attach the globe to the lens/projector mount.  The whole thing is sitting on a GorillaPod until I get around to building something more permanent.

Snow Globe

Actually calibrating a projector with slight pincushion through a $25 lens into a bathroom fixture attached together with some guesswork and a 3D printer is well beyond my linear algebra skill, so I simplified the calibration procedure down to four terms.  We need to find the radius in pixels of the circle being projected and the x and y position of the center of that circle for starters.  The more difficult part, which tested my extremely rusty memory of trigonometry is figuring out how to map the hemisphere coming out of the fisheye lens to the spherical display surface.  For that, we have a single number for the distance from the center of the sphere to the lens, in terms of a ratio of the projected radius.  The math is all available in the code, but the calibration script I wrote is pretty simple to use.  It uses pygame to project longitude lines and latitude color sections as in the image above.  You use the arrow keys to line up the longitude lines correctly to arrive at the x and y position, plus and minus keys to adjust the radius size until it fits the full visible area of the sphere, and 9 and 0 to adjust the lens offset until the latitudes look properly aligned.  What you end up with is close enough to correct to look good, though as you can see in the images, the projector doesn’t quite fit the lens or fill the sphere.  The script saves the calibration information in a pickle file for use elsewhere.

Projected sphere

Going back to the initial goal, I wrote a script to turn equirectangular projected maps of the Earth into roughly azimuthal equidistant projected images calibrated for a Snow Globe like the one above.  There are plenty of maps of the former projection available freely, like Natural Earth and Blue Marble. Written in python, the script is quite slow, but it serves as a proof of concept.  The script, along with the calibration script and the models for the 3D printed mounts are all available on github.  I’ve finally fully accepted git and no longer see a point in attaching the files to these posts themselves.  I put a Part One in the title to warn you that this blog is going to be all Snow Globe all the time for the foreseeable future.  Up next is writing a faster interface to interactively display to it in real time, and if I think of a good way to do it, touch input is coming after that.

Download from github:
git://github.com/nrpatel/SnowGlobe.git

Related Posts

80 Responses to “Snow Globe: Part One, Cheap DIY Spherical Projection”


  • Awesome, I love it.

    Whats the best pico projector on the market, I would love a super bright one of these!

    • Probably the SHOWWX+. It currently costs twice as much as the SHOWWX that I have, but it is 50% brighter.

    • For $50 the SHOWWX+ you could get Optoma Pico PK301 Projector at 50 lumens it is 35 lumens brighter than the SHOWWX+ it has digital input hdmi check out http://goo.gl/ynkSI

      • I posted this at Thingiverse, but it is relevant here too. Using a conventional projector may be more difficult:

        As far as I’m aware, the SHOWWX is the only consumer laser projector available, so you would have to go for a LCD or DLP projector. This introduces the problem of keeping the entire sphere in focus. Laser projectors are in focus at any distance, but you would need to focal plane of a normal projector to align to the surface of the sphere. This means you couldn’t use a fisheye lens to spread the light, but instead something like a silvered hemisphere centered in the globe.

  • I think this is absolutely brilliant and I can’t wait to see how it goes for you. I may borrow your idea for an idea I had for constellations.

  • Woow ! Super results !!!

    Your python code could be some 20 times faster if you used numpy methods for computing the maths. You can avoid using loops, for example, to multiply each element of an array by ‘pi’, just do my_array * numpy.pi (as long as type(my_array) is )

    I can’t wait to see more of it ! (something like http://www.geophysique.be/2011/02/19/matplotlib-basemap-tutorial-08-shooting-great-circles/) !!!

  • … type(my_array) is ‘numpy.ndarray’…

  • This is awesome. What are the chances of hooking up some method of touch sensing?

  • Thats pretty awesome. We have one of the 72 in. omniglobes from arcscience, and the end cost for that was nearly $250,000.

  • If you could incorporate realtime cloud maps or satellite weather, that would multiply the awesome factor by 15x at least.

    Cool project all around though, good job.

  • What would be the resolution on this display?
    could u reproduce “http://research.microsoft.com/en-us/um/people/benko/projects/sphere/”?

    • Pretty low. It’s a 848×480 projector, and I’m getting about 650-750×480 of it onto the globe.

      • that’s still realty impressive, im thinking of starting this project using ur diagram and the one from the microsoft site, to see what i can get.

  • The projector you mention advertises that it can project up to 100 inches. Do you think this type of setup would work with an 8 foot sphere? I’m trying to launch a weather balloon with a spherical projection.
    best
    steve

    • At 100 inches, it is extremely dim even in pitch black. 8 inch diameter is usable, 12 would probably be the limit even with the SHOWWX+. 8′ would need a much more powerful projector.

  • First of all thanks a lot for sharing this – I’ve been wanting to build a dynamic globe for a friend of mine for ages but given a lack of crafting skills and knowledge about optics I never even started doing proper research, so it’s great that you’re sharing all the stuff you’ve already found out!

    My ShowWX arrived last week, and since I’m trying to build a portable ‘standalone’ version I’ve also ordered this: http://www.4dsystems.com.au/prod.php?id=149
    The chip can still handle the ShowWX’s 848×480 and with the onboard SD reader I should be able to cycle through different maps stored on the SD card as well as do some simple manipulations (e.g. rotation). Truely dynamic maps will be difficult, although you can do some simple painting with the chip and it is in principle capable of displaying videos too.

    I’m a bit lost regarding the lens though since the one you used is somewhat difficult to get here and I have absolutely no clue about optics, but would this be an appropriate substitute?
    http://opteka.com/43x.aspx
    Does the magnification make any difference regarding the projection?

    P.S. here’s another 20 lumen laser projector I came across (somewhat pricier, but for those who need the extra brightness): http://www.aaxatech.com/products/l1_laser_pico_projector.htm

    • Nice. I’ve been considering powering mine off of a Beagleboard to make it standalone, but the VGA out board for those is pretty bad. With the HDMI ShowWX, it would work nicely though.

      For a lens, you’re mostly just looking for something that does a 180 degree fisheye. Something that follows the first projection formula on this page: http://wiki.panotools.org/Fisheye_Projection

      The lens you linked to looks like it should, and it looks like a much better lens too!

      • Not so good news regarding the lens unfortunately. With the built-in macro lens on I get a good picture but it’s merely wide angle and not proper fisheye, with the macro lens removed I can fill the whole globe, but the projection becomes extremely blurry (unless I move the projector at least 10-15cm away from the lens, which isn’t really an option). Am I missing something really obvious? I’ll try to get started on the uVGA stuff next week.

      • A certain amount of blurryness can be expected. If you are filling the entire 8″ globe in width and height of the projected image, you’ll be at a minimum of around 20 pixels per inch on the surface. If you make it fill only the width, and leave empty areas on the globe, your minimum is around 40 pixels per inch. Can you take a picture of what you’re seeing?

  • the projector is $105.00 shipped at woot.com (today 9/19/2011 only )

  • OK… I have the ShowWX on order, I’ve snarfed the SnowGlobe code from GitHub, and I’m evaluating fisheye lenses. I have a Makerbot Cupcake for a 3D printer at the moment, though I’m building a Mendel. It looks like the mounting bracket needs the bed size of a Mendel. It also looks like your horizontal bolt holes are a cylinder, not the classic RepRap teardrop. Any problems with filaments collapsing into your bolt holes?

    • The teardrop isn’t really necessary anymore, for that sized hole at least. You may get a strand that falls into the hole, but nothing that effects functionality.

  • Next topic – software… so far, here’s what I loaded on my Ubuntu box…

    sudo apt-get install libsdl-dev
    sudo apt-get install cmake
    sudo apt-get install libsdl-image1.2-dev
    sudo apt-get install libvlc-dev
    sudo apt-get install libsdl-net1.2-dev
    sudo apt-get install libsdl-gfx1.2-dev
    sudo apt-get install libsdl-ttf2.0-dev
    sudo apt-get install libsdl-mixer1.2-dev
    sudo apt-get install vlc-nox (needed or you get an error about libraries)

    Because I didn’t see “libsdl-gfx2.0-dev” in the ordinary repositories, I grabbed v1.2. That version appears not to support thickLineColor() so I commented that one line out and at least got ‘sosg’ to compile.

    I grabbed the air_traffic_2048.mp4 from sos.noaa.gov but it wouldn’t play on vlc (“no suitable decoder module for fourdd ‘mp4v’”) but I was able to re-render the file through ffmpeg, and that seems to run. I’m still working out how to make osgsnowglobe – I have no experience with cmake).

    • The version of libsdl-gfx needed is newer than the one in Ubuntu 11.04.

      You may need to install ubuntu-restricted-extras for codecs.

      Osgsnowglobe isn’t finished, or really started for that matter.

      • I figured that I’d have to build libsdl-gfx from source. I’ll check ubuntu-restricted-extras. Thanks for that tip. Good to know that osgsnowglobe isn’t a viable thing to build. I got stuck building osgearth 2.1 (31 Aug 2011) from sources on my machine and I can’t connect to the recommended repository for the pre-built osgearth binaries so I’ll just shelve that effort for now.

        It will take me a while to construct the ring and mount (we have Cupcakes galore near me, but no Mendels yet), so perhaps real-time stuff will emerge about the time I have a working display.

        Thanks again for everything. This is an awesome project. I’m looking forward to completing it.

        -ethan

      • OK… got libsdl-gfx2.0 built and installed (and ‘predict’ installed and running locally) and I’m looking at an sosg window with live satellite data and historical tracks. Very cool.

        Now it’s all hardware!

      • Got the projector, got the globe, got the lens. Unfortunately, when I ordered the VGA dock, I was quoted a 4-6 week delivery time. :-(

        If I’m lucky, it’s supposed to arrive before the end of October.

        Looks like with the woot! deal on the SHOWWX, I’m going to bring the build cost in just over $180 not including whatever I do about a mount (I’m currently contemplating recycling an Ikea lamp base that was on the freebie pile at our Hackerspace).

  • Sorry, had an internet outage for a couple of days. My globe is actually 11″, so I might head back to the store to get a smaller one too. I don’t think it’s just the resolution though, here’s the ShowWX default screen projected against a flat wall through the Opteka .43x, with the macro lens attached (left) and removed (right):
    http://sukzessiv.net/~kevin/lens.png
    The lens wasn’t properly centred on the second one but you get the idea. Projection was from really close up too.

    Here’s what the actual globe looks like:
    http://sukzessiv.net/~kevin/globe.png
    I changed the colors of the calibration script to black and white because I couldn’t properly make out the boundaries in the original red-pink blur. It’s not just the camera failing to get the globe into focus, it does really look like that.

    • That does look rather blurry. What are your calibration parameters? Radius, most importantly. You can figure out what your expected pixels per inch should be. It is possible though that the lens is just not very good in its fisheye configuration.

      • Good question, I haven’t actually found really satisfying calibration settings. Whenever the upper half is properly aligned and proportioned, the lowest 45° (which should at least show up as a white rim in my case) are nowhere to be seen, which means there’s a lot of guesswork involved. Doing the +/- stuff first and only then changing the offset isn’t really doing it either.

        The parameters used for the two pictures above were 334 radius and 181 offset, does that make any sense? I think Africa is extending way too far down on the picture which probably means that the lower hemisphere isn’t properly proportioned at all. I also had another setting with 486 and 486 that looked reasonable.

        I found some good reviews for the lens, and the non-macro mode is actually the normal one. So no idea, if focus shouldn’t be a problem is it maybe something with the magnification that makes it require a minimum distance from projector to lens? It might generally be better to go for a Bloggie plug-and-play type lens rather than one for cameras with proper objectives.

        Best!

  • Hey – awesome project!!
    why the 14.5 angle?

    • I’m glad you brought it up. The SHOWWX projects at an angle relative to its base such that the bottom of the projected image is on the same plane as whatever the projector is sitting on. So, the mount needs to be angled upwards at half the angular screen height.

      The screen height is 24.3 degrees, which means the angle should actually be 12.15 degrees. Both the post and the mount are incorrect at the moment.

      Edit: Committed a fixed model to github.

  • Nice! Too bad the USPTO granted someone a patent on this approach (7352340).

    • Do you think ArcScience and PufferSphere are working around this patent somehow or licensing the technology from Global Imagination?

  • I still only have a CupCake for 3D printing, but I just got a MendelMax owner to print me the full-sized globe mount. I grabbed the OpenSCAD file off of GitHub and figured out that the grooves for the lens mount (in the opteka() module) do *not* match the profile of the Opteka fisheye lens I have. I measured my lens base and tweaked opteka() and with a little bit of filing to remove a few blobs, now have an assembled globe/projector stand.

    With that, I seemed to have run into another situation… it looks to me as if the projector mount was designed to center the image when the ShowWX is mounted bare, not in its VGA dock. I can get a good image by sliding the lens down the mount groove away from center, but the edges of the projected image are cloudy (from misalignment) if I try to center the lens. I think I also had to remove the rubber feet from the VGA dock or the image was _really_ misaligned with the lens.

    Has anyone else _made_ the printed mount? Did anyone else have to tweak the STL to get satisfactory results? I’m just starting to play with calibration and such, but as built, the axis of the projected globe image is nearly an inch off the top of the center point of the glass globe.

    It all looks really cool so far, but I’ve generated some interest with friends who design and build exhibits for the local science museum and I’d like to make this as professional-looking as possible.

    • I took the VGA dock apart to remove the bottom plate of it. The printed part fits in the area where the bottom plate normally is.

      • That makes perfect sense. I was thinking of doing something like that. Good to know it will work well. Thanks!

    • I tried out a fisheye lens designed for phones, but the entrance pupil was too small for my projectors.

      You’ll also run into the issue of focusing the image on the surface of the sphere. The distance from the projector to the surface of the sphere varies from a few centimeters to the diameter of the sphere. Using a laser projector lets you avoid the issue.

  • Hi,
    good project.
    I would like to replicate orb kitt (http://play.kendincos.com/171368/Wlptxtxdhnrdhptlp-kitt-3-0-voice-orb-animation-with-dashconsole.html)
    The diameter of the sphere is approximately 10 cm (4″).
    With that lens and the projector, the image takes up at least half a sphere?
    (sorry for my english)
    thanks to all

  • This is awesome. Wish someone sold them commercially. Also wish there was a version conforming to a cube. Keep up the great work.

  • Hello! I really appreciate the sharing of your project.

    I’m a design student and I was wondering if a projection would work on a drop-shaped glass sphere.

    The projection might be distorted, but do you think the optic of the shape would make it work?

    I’d really appreciate your point of view!

    • Sure, you should have no issue beyond distortion when using a laser projector. If you use a conventional projector, the different depths will be out of focus.

  • Wow! Amazing project!

    I only stumbled upon this today, so I might be two and a half years late to the party when I ask this, but what factors need to be taken into account when purchasing a Fisheye Lens for this project?

    I would like to replicate this project myself, but the Opteka Fisheye Lens you used is “currently discontinued”. Other than the importance of ensuring that the lens has a large enough opening (e.g. >30mm) and is 180 degrees, are there any other factors that need to be taken into account?

    Is there a specific magnification (e.g. 0.2x), type of fisheye lens (circular or full-frame), and mapping function (Stereographic, Equidistant, Equisolid angle, or Orthographic) required?

  • Hey nrp!

    Thanks for sharing your project, it’s much appreciated. I am working on an interactive sphere and I’ve purchased a 180 degree fisheye lens to mount on my projector. However, it’s not a pico projector as the lumens is way too low as I plan to make a rather large sphere. I am having trouble with the focus, everything seems to be very blurry. Could you share any insight as to how to fix this problem?

    TIA!

  • I wanted to thank you for this good read!! I absolutely loved every little bit of it.
    I have you saved as a favorite to look at new things you post…

  • This is really interesting, You are a very skilled blogger.
    I’ve joined your rss feed and look forward to seeking
    more of your magnificent post. Also, I’ve shared your website in my social networks!

  • Wow! At last I got a webpage from where I know how to truly take helpful data concerning my study and knowledge.

  • Thank you for another great post. The place else may anybody get that kind of information in such
    a perfect way of writing? I’ve a presentation next
    week, and I am at the search for such info.

  • Magnificent beat ! I wish to apprentice at the same time as you amend
    your site, how could i subscribe for a weblog website?
    The account helped me a acceptable deal. I have been tiny bit acquainted
    of this your broadcast offered vibrant clear idea

  • Attractive part of content. I simply stumbled upon your website and in accession capital to say that I acquire actually enjoyed account your weblog posts.

    Anyway I will be subscribing for your augment or even I
    achievement you access constantly quickly.

  • I think the admin of this website is truly working
    hard in support of his web site, for the reason that here every material
    is quality based material.

  • Very good article! We are linking to this great post on our
    site. Keep up the great writing.

  • I’m not sure where you are getting your info, but great topic.
    I needs to spend some time learning much more or understanding more.
    Thanks for magnificent information I was looking
    for this info for my mission.

  • We stumbled over here different web address and thought I should check things out.

    I like what I see so now i’m following you. Look forward to looking over your web page again.

  • Hello my loved one! I wish to say that this post is amazing, great written and include approximately all vital infos.
    I would like to peer more posts like this .

  • Good post. I will be going through some of these issues as well..

  • It is in reality a nice and helpful piece of information. I’m satisfied that you just shared this useful information with us.
    Please stay us informed like this. Thank you for sharing.

  • I do not know if it’s just me or if perhaps everyone
    else encountering issues with your site. It seems like some
    of the text on your posts are running off the screen. Can someone else please provide feedback and let me know if this is happening
    to them too? This may be a problem with my browser because I’ve had this happen previously.
    Many thanks

  • Hello! Quick question that’s entirely off topic.
    Do you know how to make your site mobile friendly?

    My weblog looks weird when viewing from my apple iphone.
    I’m trying to find a theme or plugin that might be able to resolve this
    issue. If you have any recommendations, please share.
    Many thanks!

  • Definitely consider that which you said. Your favourite reason appeared to be at the internet the simplest factor to take note of.
    I say to you, I definitely get irked while folks think about worries that
    they just don’t recognise about. You controlled to hit the nail upon the highest
    and outlined out the whole thing with no need side-effects , other folks can take a signal.

    Will likely be again to get more. Thanks

  • You actually make it appear really easy along with your presentation but I in finding
    this topic to be really something which I feel I’d by no means understand.

    It sort of feels too complex and very vast for me. I’m looking ahead
    for your next put up, I will try to get the hang of it!

  • hello there and thank you for your information – I’ve certainly picked up anything new from right here.

    I did however expertise some technical points using this web
    site, since I experienced to reload the site a lot of times
    previous to I could get it to load correctly. I had been wondering
    if your hosting is OK? Not that I’m complaining, but slow loading instances times will very
    frequently affect your placement in google and can damage
    your high-quality score if ads and marketing with Adwords.

    Well I am adding this RSS to my e-mail and can look out for
    much more of your respective exciting content.
    Ensure that you update this again soon.

  • Hey I know this is off topic but I was wondering if you knew of any widgets I could add to my
    blog that automatically tweet my newest twitter updates.

    I’ve been looking for a plug-in like this for quite some time and was hoping maybe you would have some experience with something like
    this. Please let me know if you run into anything. I truly enjoy reading your blog and I look forward
    to your new updates.

  • I’d like to thank you for the efforts you’ve put in penning this blog.
    I really hope to view the same high-grade blog posts by you
    in the future as well. In fact, your creative writing abilities has motivated me
    to get my very own site now ;)

  • I couldn’t refrain from commenting. Very well written!

  • It’s in reality a great and helpful piece off info.
    I am glad that you shared this useful information with us.
    Please keep us up too date like this. Thanks for sharing.

  • Hey exceptional blog! Does running a blog such as this take a lot of work?
    I’ve virtually no knowledge of programming however I
    had been hoping to start my own blog soon. Anyhow,
    should you have any suggestions or tips for new blog
    owners please share. I understand this is off subject however I simply had to ask.
    Kudos!

  • Today, while I was at work, my sister stole my iphone and tested to see if it can survive a thirty
    foot drop, just so she can be a youtube sensation. My apple ipad is
    now broken and she has 83 views. I know this is completely off topic but I had to share it with someone!

  • I was recommended this website by my cousin. I am no longer certain whether this submit is written by way of him as nobody
    else understand such unique about my problem. You’re amazing!
    Thanks!

  • It’s nearly impossible to find well-informed people for this topic,
    however, you sound like you know what you’re talking about!
    Thanks

  • Great blog here! Also your site a lot up fast!
    What web host are you the usage of? Can I get your affiliate link to
    your host? I wish my website loaded up as quickly as yours
    lol

Leave a Reply