Hyper Terra

by gabrieldunne in Circuits > Art

21756 Views, 309 Favorites, 0 Comments

Hyper Terra

P1040099.jpg
P1040144.jpg
P1040090.jpg
P1040117.jpg

"Hyper Terra" is a projection-mapped sculpture with an integrated projector, computer, and power supply. The sculpture is a mountain with simulated solar and lunar lighting that can be set up with any lat/long on Earth and a point in time. The graphics software has controls for time advancement towards the past or future, the long/lat on Earth, solar/lunar positioning, light color, and more. The result is both a sculpture and a dynamic visual timepiece.

Artist and Author: Gabriel Labov Dunne (www)

Title: "Hyper Terra"

Instructable Link: https://www.instructables.com/id/Hyper-Terra/

Flickr Gallery: https://www.flickr.com/photos/quilime

Description: An abstract landscape is illuminated by light and shadow generated by sun and moon positions from any time and place on Earth. Graphics are projection-mapped onto the landscape by an embedded projector and computer, powered by an integrated power supply.

Medium: MDF, Birch Plywood, Aluminum, LCD Projector, Embedded Computer, Power Supply, Custom graphics software written in C++

Tooling: CNC, Water Jet, Laser Cutter, Wood Shop, Metal Shop

Design Software Used: McNeel Rhino/Grasshopper, Autodesk Inventor/HSM, Autodesk Maya

Concept

P1040054.jpg
P1040055.jpg
P1040059.jpg
P1040057.jpg
P1040061.jpg
Screen Shot 2014-09-17 at 11.27.16 PM.png

To execute this concept, I began sketching ideas for dioramas and miniature scenes. I also had to include an embedded computer and projector to somewhere to augment the time and place of a scene. I started out with boxy-like diorama constructions and varied all the way to craggily peaks and towers.

In my research I was also interested in traditional Chinese model landscapes call 山水 盆景, or “Penjing”, which represent small landscape models and/or living sculptures. Sometimes these sculptures include practical effects such as real water, plants, smoke, and lighting. One thing I especially appreciated about these small landscapes is that you could view it from all angles. I felt this was extremely important, so I ditched any ideas that involved putting the project in a box.

Goals

  • The projection should work decently when there is bright ambient light.
  • The object should be viewable from all angles.
  • The projection computer should have a fast start-up time, allowing the sculpture to be turn on and off quickly seamlessly.
  • Software settings should be easily set an controlled from a tablet or phone, or other seamless interface.

Software Ideas

  • Color gradient of the sky.
  • Cloud layer and atmosphere, such as fog
  • Color temperature (Kelvin) throughout the day.
  • Colors and texture themes that could represent seasonal foliage, rain, and snow.
  • A body of water so I can play with the aesthetics of specular reflections of the sun and the moon.
  • Calendar events and cycles.Movement of the Earth the sun, the moon, and the stars, based on actual astrological positions, using and ephemeris table or pull from the internet.
  • Night-time motifs. It would be cool to include tiny roads with car headlights, traversing through the mountains, or other urban lighting effects.

Because the software is ephemeral, and the sculpture is physical, it's easy to have many visual ideas before committing to them as I can upgrade the software at any time.

Landscape Design

Capture3.PNG
delunay-mountain.PNG

For my landscape, I created an object with Rhino/Grashopper. Vertices define the shape, and then I used the Delunay node in Grasshopper to generate the mesh.

I designed the form keeping in mind the amount of labor it would be to hand map each vertex later, which is basically projection mapping ground-zero. If other helpful mapping techniques aren't available (see OpenCV, Structured Light), one can always place vertices by hand. I created a shape with less than 100 points, so even if each vert took a minute (unlikely), at most it would take less than 2 hours. I planned to have the projector locked to the form, so I only have to do this mapping once.

I used this same landscape model my entire residency, it was interesting to see it evolve. I never had the chance or inspiration to design a new object, as this one just worked. They software works with any object, and the base is modular, so I can make new designs in the future and they can fit right in to the system.

3D Printing Test Models

Screen Shot 2015-01-13 at 11.29.01 AM.png
Screen Shot 2015-01-13 at 11.28.58 AM.png
Screen Shot 2015-01-13 at 11.29.32 AM.png

I 3D printed some mini models with a trusty MakerBot Duo for projection tests.

A really interesting thing happened with some old ABS plastic filament that had been sun-bleached and discolored, resulting in some landscape striations that resembled real stoned and sediment layers.

Raspberry Pi Projection-Mapping Setup

IMG_8433.jpg
IMG_8470.jpg
IMG_8446.jpg
IMG_8455.jpg
IMG_8456.jpg
IMG_8463.jpg

I zip-tied a raspberry pi to a pico projector, and mounted the whole rig on a tripod. I created a simple mesh-mapping projection software with OpenFrameworks, and then projected upon the 3D printed objects.

A cool thing about the equipment setup is that I could power the RPi from the USB port on the projector, leaving me with only one power plug.

I also really liked how the semi-transparent PLA played with the light. It sometimes felt like the objects were illuminated from within.

This step about using the Raspberry Pi as a mini-mapping became its own Instructable: Mini Projection Mapped Sculpture.

Software Screencap:

Mapping Result:

In this software, I simply had a virtual lights revolving around an object in sinusoidal patterns. There was no positioning based on the sun or the moon at this point.

As far as the projection quality, while I love the form factor of the little DLP pico projectors, I much prefer using LCD technology because it gives a much better image when documenting on video. I'm still searching for a bright, LCD-based pico projector with a small form factor. Due to crossover conversations I had with some other awesome AiR's at Pier 9, I see the potential mangling a consumer LCD projector to reduce the form factor, or potentially fabricate my own, all the way down to the lenses.

For an extreme example of how crazy DLP banding can get, to the point where it can be utterly psychedelic, check this out:

Create Toolpaths for CNC MIlling

Capturestock.PNG
Capture8-18-2014df2.PNG
Capture8-18-20144.PNG
mountain-mitres.PNG
mountain-contour3.PNG
Capturesdfff.PNG

I had grown to like this little landscape and wanted it to be a little bit larger than the 3D printed tests, so I prepared the sculpture for milling.

I used Autodesk Inventor HSM to generate my tool paths for the 5-Axis DMS router at Pier9. As a material, MDF is great for testing, and ultimately I used it for my final piece as well.

Stock Prep and Layup

P1030340.jpg
P1030342.jpg
P1030343.jpg
Screen Shot 2015-01-13 at 11.12.33 PM.png

I cut everything to the material bounds with the table saw, and then created Layer-cakes of MDF panels and wood glue to both sides so just a little bit seeps out the sides, clamp, and set to dry.

Roughing Passes

P1030428.JPG

The roughing passes took about 20 to 30 minutes.

Ridiculous amounts of dust.

The mountain is revealed.

Clean Up Between Passes

P1030431.JPG
Screen Shot 2015-01-13 at 11.13.00 PM.png

It took a few tries to get my feeds and speeds right with the MDF layups. I was looking for the right combination of speed and chip size. Huge thanks to Dan, Pier 9 CNC Master Chief.

Sometimes, opening the doors of the DMS reveals a ridiculous pile of chips, resembling a fuzzed-out MD5 dust mountain. This is before we had the fancy dust-collection integrated into the DMS.

Cleaning up the chips and dust was felt like uncovering an archeological relic.

Since these photos were taken, I have definitely improved my CNC technique and I now pause the pass to clean up so I can see the tool head operating. These photos were among the first I took when learning the ins and outs of the DMS.

Finishing Passes

P1030462.JPG
P1030456.JPG
P1030467.JPG

Finishing passes were done with a 1/2" round bit and averaged 30 to 40 minutes.

Milling Strategies

P1030479.JPG
IMG_20140813_185558.jpg
IMG_20140827_161059.jpg
P1030372.JPG

Overall, I milled a pretty wide array of scales and forms, the largest being 18" dia by 6" height out of MDF, to baby 4" diameter wax versions on an OtherMill.

I also had some interesting fails along the way. This is what happens to MDF with too fast of a tool feed rate.

Separately-Milled Mountain Peaks

15162721536_fd639d2fbb_b.jpg
P1030315.JPG
P1030327.JPG
P1030323.JPG
P1030366.JPG
P1030339.JPG

I had to work out a few tooling strategies in order to get the sharpest edges possible with the milling process. Some methods involved milling the mountain peaks separately so I could use shorter, finer bits in the finishing passes.

After milling, I had to clean them from the stock before attaching them to the mountain base with wood glue.

I first used the band saw to separate them from the rest of the stock, and then with a combination of temporary band-saw jigs and the belt-sander, were made to fit seamlessly.

Sanding, Prepping for Finish

P1030374.JPG
P1030376.JPG

Going through all the grits of sandpaper to get the finish silky smooth, and used a tack cloth to remove fine dust.

Finishing

P1030381.JPG
P1030377.JPG
P1030404.JPG
P1030400.JPG
P1030424.JPG
P1030472.JPG

I used a matte aerosol primer and sealer and went layer by layer in the paint booth.

Sand, prime, sand, prime, sand, prime. Going for that "Impossibly smooth" feel.

It was a challenge to hand-sand the sculpture and retain those crisp, sharp edges. In the end, they got a little rounded.

Due to the softness of MDF, occasionally there would be toolpath artifacts that i wouldn't realize until the finish stage. I used Golden Semi-Gloss Modeling Paste (and my Clipper Card, the perfect applicator) to fill in the cracks inbetween sanding.

When the finish began to resemble the polygons in the graphics software, I knew I was getting somewhere.

Landscape Series

P1030608.jpg
P1030606.jpg

Because I used the same mesh throughout all the fabrication, I could compare differences in machining processes.

Software Ephemeris With Python and the PyEphem Lib

pasted-image-10.png

I needed a Fundamental Ephemeris for this piece to track the Sun and the Moon so I don't need to be connected to the internet. A fellow AiR, Robb Godshaw, recommended I check out PyEphem, a Python library that is based on XEphem, an astronomical software ephemeris.

With ephemScript.py, we can query the Sun and Moon positions which return altitude and azimuth which are then called and converted to spherical coordinates from C++ to place the lights in the scene.

def getSunAzimuth(time)
def getSunAltitude(time)
def getMoonAzimuth(time)
def getMoonAltitude(time)

Graphics Software in C++

14972519720_96154ba3dd_b.jpg

The graphics software at minimum needs the following features:

  • Mesh (OBJ) Importing
  • Dynamic Lighting Model with Shadows
  • Manual Per-Vertex positions
  • Camera (Eye) positioning
  • Object positioning
  • Ability to Save/Load Camera position, obj position, and obj vertex settings
  • Include Python library to utilize PyEphem for sun/moon tracking.
  • Hook light positions into Sun and Moon positions queried from the ephem script.
  • Include OSC Library for the ability to interface with a control surface.

These are the bare features needed for this project to work. Every other cool software goal I had in my concept can be added later. I coded a solution that supports all these features on my linux fork of Cinder that compiles on the TK1.

The entire source code is hosted on my GitHub: https://github.com/quilime/hyperterra/

For the light renderer, I ended up utilizing a deferred rendering library that supports multiple lights, screen space ambient occlusion, and shadows.

Embedded Computer

P1040066.jpg
P1040067.jpg

For my embedded computer I used the Nvidia Jetson TK1. This tiny 5"x5" computer supports full OpenGL 4.4, OpenCV, comes with Ubuntu Desktop pre-installed, and has an external power supply. I wrote a TK1 Setup Guide as I set up the computer, which includes the methods for auto-booting the software and setting the hardware clock.

For my TK1 case, I laser-cut Phillip Burgess's clean and simple SneezeGuard design on Thingaverse.

It is connected via HDMI to Epson PowerLite 1761W 3LCD projector (unpictured here, but seen in later steps).

Connecting Graphics to a Controller

P1030610.jpg

I used Liine Lemur running on my iPod touch to control the graphics software wirelessly w/OSC. TouchOSC is another app that works for this purpose.

Base Design

COMPONENTS.PNG
Screen Shot 2015-01-14 at 1.20.27 PM.png
Screen Shot 2015-01-14 at 1.21.40 PM.png

Back into Rhino to design the base. I came up with a design that allowed the piece to be viewed from all angles by using four metal structural bars to hold a "crown" which contains the projector and the computer.

For this design process I should have used a parametric modeling program like Inventor or SolidWorks. What started as a "simple" design became more complex than I anticipated, and by then I felt I was already so far deep into my design in Rhino that I just went with it. Had I used a parametric program for this step, I could have adjusted material thicknesses and scale without having to manually modify the object, which is something that happened a lot.

I've included the final object as a Rhino5 .3dm format for you to explore.

Downloads

Frame Prototyping: Plinth

IMG_0165.jpg
IMG_0158.jpg
IMG_0161.jpg
P1030520.jpg
P1030551.jpg

I went through a few iterations to create a structure for the projector and computer. I started with a basic cubic plinth and right-angled steel to get scale and projector-throw correct. This allowed me projector throw right with my model of projector.

I used the Projector Central Projection Calculator for the model of projector to give me the throw distance and image size.

Conceptually I originally had a bunch of wild ideas to make some craggily peaks and strange formations, but projection-alignment was the priority at this point.

Cutting Vertical Panels

IMG_0183.jpg
IMG_0189.jpg
IMG_0195.jpg
IMG_0196.jpg

My design was that only 4 of the base panels had mitre angles, and the other 4 were right-angle cuts. So, I laser-etched a template to cut on the table saw.

Why didn't I just cut the panels on the laser cutter? Had I done that, I would have had a charred edge which I would have to sand so I could get a good glue connection, which has the potential to get entire shape out of alignment. It's really tricky to make a glue joint on a burnt edge.

Also, in roughly the same amount of time, I can create some table saw jigs and do it with good enough precision.

Attaching Vertical Panels to Base

IMG_0198.jpg
IMG_0212.jpg
IMG_0259.jpg
IMG_0253.jpg

I brad-nailed a lip for each panel and clamped them so they rested precisely on the base while the glue set.

Adding Adjustable Feed

IMG_0205.jpg
IMG_0201.jpg
IMG_0204.jpg

Adding threaded inserts in the base to allow me to use adjustable leveling-feet.

Waterjetting Mitre Panels

Screen Shot 2015-01-15 at 2.49.03 PM.png
IMG_0232.jpg
IMG_0238.jpg
IMG_0247.jpg
IMG_0249.jpg

With Pier9's WaterJet, I was able to CNC cut the remaining 4 mitred panels from plywood with the A-Jet 5-Axis waterjet head. I could have made a table saw jig for this as well, but the prospect of cutting mitres on the water jet was too tempting to pass up, and they turned out so clean! I mean, when you have access to a water jet...

Cutting material on the water jet invariably gets it wet, but my parts were fine after washing the garnet off and letting them dry. Pre-finishing the wood with polyurethane or wax is a good technique to keep the garnet from staining the wood, which it definitely does. I didn't care too much about this as I planned to finish it with paint.

I imported my shapes to Omax Intellicam/Make/Layout following fellow AiR qDot's great Instructable on making 5-axis cuts on the waterjet.

Attaching Mitred Panels

IMG_0268.jpg
IMG_0269.jpg
IMG_0270.jpg
IMG_0282.jpg
IMG_0283.jpg
IMG_0289.jpg

I created a series of wedges that I brad nailed/glued onto the mitred panels, and then slipped them into the vertical uprights that were already attached to the base. Gravity and clamps held the panels in securely while the glue set overnight.

Fabricating the Structural Bars

IMG_0307.jpg
IMG_0306.jpg
IMG_0324.jpg
IMG_0330.jpg
IMG_0395.jpg

Back to the WaterJet to cut the support bars out of 1/4" thick aluminum stock, and filing off the tabs. I also drilled and tapped threads into two of the bars, which will be used later for connecting power.

Creating Structural Bar Inserts

IMG_0333.jpg
IMG_0334.jpg
IMG_0337.jpg

I then bradding/gluing in block supports made from 3/4" ply on the table saw so the bars could slide in and be held into place by gravity.

Adding Mitred Trim

IMG_0345.jpg
IMG_0342.jpg
IMG_0341.jpg
Screen Shot 2015-01-15 at 9.31.14 PM.png
IMG_0361.jpg

I measured the angles in CAD and then made some trim on the mitre saw out of 3/4" ply so it was flush to the base, and the bars.

Getting the fit right by "feel":

Bars and Trim

IMG_0365.jpg
IMG_0364.jpg
IMG_0359.jpg

When the trim finished drying I was able to test the fit of the bars.

Crown Design

Screen Shot 2015-01-15 at 5.06.26 PM.png

The design for the crown is made from plywood, and rests on top of the aluminum bars, and is held into place with gravity and wooden guides. It holds the projector, the power inverter, and the computer. The light from the projector reflects downwards by bouncing off a first-surface mirror, through a hole in an acrylic mask.

I designed base panels of the crown in Rhino, and I designed the mirror assembly on the fly.

Fabricating Crown Panels

IMG_0368.jpg

Based on my previous success with cutting the base panels on the WaterJet, I used the same technique for the crown panels.

Warning to headphones users: Loud and abrasive audio.

Assembling the Crown

IMG_0376.jpg
IMG_0377.jpg
IMG_0381.jpg
IMG_0382.jpg
IMG_0388.jpg
IMG_0386.jpg

Because the panels were not 90 degrees, I had to do a special dado-slot for the base of the grown. I built a table saw jig and made an angled dado in each panel to fit the base.

Then I made a glue-up jig and brad-nailed and clamped the entire assembly together while the glue set. In order to test fit, I clamped it too the upright bars so I could get a feel for the shape.

Mirror Assembly

IMG_0429.jpg
IMG_0426.jpg
IMG_0425.jpg
IMG_0428.jpg

I designed a mirror assembly so I could have the projector sitting flat with the image shining downwards.

I created a mirror assembly with a first surface mirror that allows me to adjust the position of the mirror when aligning the projection.

I dado'd slots into some plywood. I could have used a router table for this, but I personally feel much safer, and therefore more precise doing dado's on the table saw (it has a Saw Stop), rather than the router table.

I used long bolts and wing nuts to attach the assembly to the crown, which gives the ability to adjust the reflection angle.

Projector Mask

IMG_0435.jpg
IMG_0438.jpg
P1030963.jpg
P1030966.jpg
P1030985.jpg

In order to create a mask, I plugged the projector into a ceiling outlet and set it inside the crown assembly, and got the mirror calibrated. When I turned it on, and set up the mirror assembly, I taped a piece of paper underneath to trace out the mask with pencil.

Once I had the trace, I created the shape in Adobe Illustrator and laser-cut the mask out of 1/8" white acrylic.

I used a series of neodymium magnets so there would be no visible fasteners, and as a bonus I can remove the mask easily if I ever need to access the projector from the underside.

Also during this step, I created supports for the sculpture in the base. After a little trimming of the edges, I made it fit flush in the square recess.

Powering the Electronics

circuit.PNG
IMG_0405.jpg
IMG_0461.jpg
IMG_0404.jpg

The entire thing needs to be powered from one plug, and all the electronics were on top of the sculpture in the crown. These things need powered:

The inspiration for routing power through the metal bars was from a suggestion by a fellow AiR, Paolo Salvagione. He suggested I explore converting the signal to 12v DC and run them up the metal support rails. I had to tap threads the threads in the top and bottom of two of the bars so I could use molex connectors to wire them to the power supply in the base, and connect them to an inverter in the crown.

For the power chain I used:

  • Generic 12v DC 60a 720w Power Supply (found on eBay)
  • 750w A/C Inverter w/2 outlets (found on Amazon)
  • 12-gauge insulated cable
  • Molex connectors

At first I was actually wary of pursuing this method because I couldn't help but to think that someone would get shocked when touching both the bars at the same time. It wasn't until I physically tested it and touched both bars at the same time that I confirmed for my brain that you won't get shocked, and the entire thing works flawlessly. The human body is an insulator and can't complete the circuit better than the metal bars can. Also, if you were to somehow short the circuit, the fuse on the power supply or the inverter would blow before shocking you.

Installing the Electronics

P1030978.jpg
P1030960.jpg
P1030980.jpg
P1030990.jpg

I built an interior shelf for the power supply, and crammed all the other stuff into the crown before trimming up the wires.

I connected the leads of the A/C Inverter to the two bars that I marked positive and negative, which are diagonal opposite from each other.

Then, down in the base, I attached leads from the pos/neg bars to the pos/neg leads on the power supply.

Priming

P1040005.jpg
P1040009.jpg
P1040022.jpg
P1040019.jpg
P1040025.jpg

I refinished and primed everything white with the exception of the metal parts.

Projection Mapping Graphics Alignment

IMG_0486.jpg
IMG_0470.jpg
IMG_0468.jpg
IMG_0482.jpg
IMG_0472.jpg

After getting everything installed and powered up for the first time (really exciting!). It's time to align the projection graphics.

As I was getting the software working, I had a keyboard and mouse plugged in and haphazardly hanging from a powered USB hub. I use a mouse to tweak the vertices as I haven't yet figured out an good way to precisely drag vertices around with a touch screen interface. Fortunately this is a one-time step because the projector and the object are locked down.


Manual Vertex-Mapping Time Lapse

I had to do a few changes to the code as I was getting it set up. It was so cool to see the linux terminal cascading the compiler output over the mountains surface, followed by crisp, high-framerate OpenGL graphics.

A walkthrough of the setup at the Pier's Studio9.

Having an LCD projector really makes for a huge quality difference when filming, even when shooting with my iPod camera. No banding.

Finishing the Bars and Final Assembly

P1040079.jpg
P1040078.jpg
P1040083.jpg
P1040080.jpg

I sanded and polished the aluminum bars and softened their edges.

I figured out that I could also use the bars as a lever to remove the sculpture and get access to the base like this:

Projection Graphics Controls and Settings

IMG_3068.jpg

As I mentioned in previous steps, I used the Lemur app by Liine for my iPod touch for the graphics controller. I've attached my control scheme.

There are a lot of fun graphic modes to play with. Here's a demo of some of the settings.

Downloads

Complete!

P1040143.jpg
P1040093.jpg
P1040140.jpg
P1040137.jpg

I've hit all the base milestones I originally set out to do, and it definitely feels "done". But, is it ever really done.... ?

Some things I'm still working on:

  • Apply some sort of finish to the primed white surface, as any time I handle it I'm getting it dirty.
  • Create a cap for the crown to cover the unsightly electronics. I'll probably add an acyclic cap with vents.
  • Some software tweaks, of course (endless!)

Special thanks to all the other AiR's and everyone at Pier9 for being so incredibly supportive and inspiring during the making of this project. I had the freedom to let my design to evolve as I worked on it, and it was so great to get such valuable input and feedback along the way to support my own process of learning by making.

If you have any feedback or questions, I'll try to respond in the comments.

(Video coming soon!)

Thanks for looking!