Monday, March 9, 2009

How to build a WireMap

The Wiremap is a project that builds digital 3d objects in real 3d space. To create digital 3d objects in real 3d space, a projector is placed in front of a custom designed projection surface made up of an array of vertical wires.



If you'd like to learn more about the project in general, you can do so at the Wiremap website.

This instructable will show you how to build your own Wiremap from scratch.

Before we begin - let's just make sure that your computer system will run the programs that I've built. For windows users, download the following:
http://wiremap.phedhex.com/instructable/wiremap_instructable_windows.zip

For mac & linux, download the following:
http://wiremap.phedhex.com/instructable/wiremap_instructable_nonwin.zip
Then, go to http://www.processing.org and download the program. Processing will allow you to run the programs in the zip.

Windows - open calib_64 -> application.windows -> calib_64.exe. If you see a bunch of multicolored lines going across your whole screen, you're good.

Other OS - open calib_64.pde with processing. If you see a bunch of multicolored lines going across your whole screen, you're good.

Press escape to exit the program.
wiremap_256.jpg
loading...
500x259 : FI6RWZDFQMXFEK2 (0)
i

step 1Understanding the Main Concept

Before we dive in, let's take a look at the anatomy of a Wiremap. The diagram below is a bird's eye view of a projector throwing it's light.

In regular situations, the projector hits a surface at a given distance. Pretend there is a screen at the line labeled "mapline" that the projector is hitting. Now, take that screen and cut it up into a bunch of vertical strips. By moving some strips closer towards the projector, the projector effectively projects in 3d space.

The projector is fed by a computer that has the depths of all the vertical strips memorized. Through this, we can build digital 3d objects in real space.

The Process

Learn about your projector.
Figure out how many wires you want in your wiremap.
Trace out the layout of your projection on some foam core.
Mark where you want your wires to go on that foam core.
Drop thread through those spots
Calibrate
And run your program
basic-plan.gif
loading...
286x400 : FEED53QFQMXFCTW (0)
i

step 2What you'll need

Check out what you'll need in the images below.

Quick note -

I'd actually suggest getting a few things after you do steps 3 and 4. These things are the nuts and bolts - simply because right now you won't know how many you'll need.

Other things not listed:

  • 1" thick piece of plywood, about a foot by a foot.
  • A screw or nail
  • Some glue for paper
  • A roll of masking tape
  • A set of thick sewing needles
  • A needle scribe (not required, but nice for those who want to save their thumbs)
1a.jpg
loading...
out:{ top: 0.632, left: 0.492, width: 0.306, height: 0.35733333333333334, text:"4 wood dowels, 3/4 inch in diameter and 4 feet long" }
i
1a.jpg1b.jpg1c.jpgscribe.jpg

step 3Getting to know your projector

In order to design your layout, you'll need to know a few things about your projector. Download and Print out this XL sheet and record your results there:
http://wiremap.phedhex.com/instructable/worksheet.xls

Native Aspect Ratio:
Image 1: (width / height)

Throw ratio of the tightest zoom:
Image 1: (width / depth)

Throw ratio of the widest zoom:
Image 2: (width / depth)

Closest focus:
Image 3: Distance from projector to image.

Native resolution:
(not pictured): check your projector's documentation.

As an example, for my particular project, I have these stats:

throw @ tightest zoom: 27" : 72"
throw @ widest zoom: 36" : 72", or 1:2
native aspect: 4:3
Closest focus: 45"
Native res: 1024 x 768
2a.jpg
loading...
420x560 : FGLHM8HFQMXFCH3 (4)
i
2a.jpg2b.jpg2c.jpg

step 4How Many Wires?

The number of wires you choose to have in your wiremap will effect you in two ways. With less wires, you'll have an easier time constructing and calibrating your project. With more wires, you'll have to be more precise during construction and calibration, but the end result will have a higher resolution.

If you're looking to learn about the project, 64 wires should be fine. You'll get a good idea as to how things work, and you'll still get a pretty cool effect with a few of the programs. If you're looking for something more challenging, try 96 or so wires. And if you're into intricate work and are willing to spend a bit of time on this project, try 128.

In any case, once you figure out what you want, write down the following on your xl sheet:

64 wires
Available to projectors w/ a horizontal res of 1024, 1152, 1280, or 1920
Mapline Length: 32"
Map Unit: 1/2"
Depth Unit: 1/2"
Depth Levels: 40

80 wires
Available to projectors w/ a horizontal res of 800, 1280, or 1920
Mapline Length: 35"
Map Unit: 7 / 16"
Depth Unit: 7 / 16"
Depth Levels: 45

96 wires
Available to projectors w/ a horizontal res of 1152, or 1920
Mapline Length: 30"
Map Unit: 5 / 16"
Depth Unit: 5 / 16"
Depth Levels: 64

100 wires
Available only if your projector's horizontal res is 800
Mapline Length: 31.25"
Map Unit: 5 / 16"
Depth Unit: 5 / 16"
Depth Levels: 64

128 wires
Available to projectors w/ a horizontal res of 1024, 1152, 1280, or 1920
Mapline Length: 32"
Map Unit: 1/4"
Depth Unit: 1/4"
Depth Levels: 80

How many nuts and bolts do you need? Just take your number of wires and double it!

In case you were wondering what these values are: The mapline length is the width of your projection at a given distance. Remember how I explained this in the beginning with the vertical strips? The number of wires is the number of vertical strips, and the map unit is the distance between each vertical strip.

Determining the Depth

Here are the two guidelines for figuring out how close your wire field is to your projector.

1 - Throw Ratios Notice in the image below: you've got a depthline and a mapline. The length of these lines are the same measurements you used to determine your minimum and maximum throw ratios. The ratio for your plan must fall within your projector's throw ratio.

2 - Closest zoom The center of your wire field must be further than your closest zoom measurement.

So, given that your mapline is a fixed width, find a depth that works for both your throw ratio and your focal distance.

Example please!

So, for my construction, I went with 128. My mapline length is 32".

My widest ratio is 1:2. With a fixed mapline of 32", the depth for this throw ratio would be:

depth = x
1:2 = 32": x corresponding ratios
1 * x = 32" * 2 cross mutiply
x = 64"

My tightest ratio is 27:72.

depth = z
27 : 72 = 32" : z corresponding ratios
27 * z = 32" * 72 cross multiply
z = (72 * 32") / 27 divide
z = 85.333

To fit my projector's throw ratio, my depth must be between 64" and 85"

Closest zoom

My projector's closest zoom distance is 45". The center of the wire field must be greater than 45" away from my projector. Because the wire field is 20" deep (as is everybody's), the center of the wire field is 10" shorter than the depth. So, as long as my map line is greater than 55" out (45" + 10"), then I'll be okay.

For my case, I can just disregard this because my throw ratios are more limiting than that anyhow.

I ended up settling on a 68" depth from my projector to the mapline. This gives me a 4 inch margin of error (I'd always give myself at least a 2" margin of error, just for good measure).

basic-plan.gif
loading...
286x400 : FEED53QFQMXFCTW (0)
i

step 5Determining the Depth

The first step to plotting out your wiremap is to figure out your project's depth. Your Wiremap's depth is the distance from the projector to your mapline. Here are the two guidelines for figuring this out.

1 - Throw Ratios: In the image below there are two angles of projection - the wide zoom and the tight zoom. Because the your mapline length is fixed, the length of the projection is determined by your projector's throw ratios.

2 - Closest Focus: The center of your wire field must be further than your closest focus measurement. Or, in other words, your depthline must be longer than closest focus + 10"

Then, if you have any choice in the matter - a smaller depth tends to make calibration easier.

Example please!

So, for my construction, I went with 128. My mapline length is 32".

My widest ratio is 1:2. With a fixed mapline of 32", the depth for this throw ratio would be:

depth = x
1:2 = 32": x corresponding ratios
1 * x = 32" * 2 cross mutiply
x = 64"

My tightest ratio is 27:72.

depth = z
27 : 72 = 32" : z corresponding ratios
27 * z = 32" * 72 cross multiply
z = (72 * 32") / 27 divide
z = 85.333

To fit my projector's throw ratio, my depth must be between 64" and 85"

Closest zoom

My projector's closest focus distance is 45". The center of the wire field must be greater than 45" away from my projector. Because the wire field is 20" deep (as is everybody's), the center of the wire field is 10" shorter than the depth. So, as long as my map line is greater than 55" out (45" + 10"), then I'll be okay.

For my case, I can just disregard this because my throw ratios are more limiting than that anyhow.

I ended up settling on a 68" depth from my projector to the mapline. This gives me a 4 inch margin of error (I'd always give myself at least a 2" margin of error, just for good measure).
throw_focus_distances.gif
loading...
out:{ top: 0.013592233009708738, left: 0.014492753623188406, width: 0.9758454106280193, height: 0.7262135922330097, text:"This is an example of where mine land. Yours may land in different places.\n" }
i

step 6Plotting Your Faceplate: Layout

(image 1)
The first step is to draw a line down the center of your foam core. This is your depth line. Next, draw a line along a long edge, 2 inches away from the edge (use another piece of foam core as a straight edge). This is your mapline.

(image 2)
Where the mapline and the depth line is is the center of your mapline. Draw tick marks around the center of your mapline, coming out in either direction. Each tick mark is a "map unit" length away from the next. Half the tick marks on one side of the depth line, half on the other. Note - the depthline is half way between two mapline ticks.

Once you get your tick marks down, the distance between your left-most tick mark and your right-most tick mark should be equal to your mapline length minus one map unit length.

(image 3)
Starting from your left-most tick mark and your right-most tick mark, draw two lines parallel to the depth line. These are your depth level guides.

Along both depth level guide, draw tick marks. Each tick mark is a "depth unit" length away from the next, with the mapline being 0. Draw as many ticks as you have depth levels.

(image 4)
Once you have both depth level guides ticked out, connect them. That is, draw a series of lines parallel to your mapline. Once again, use another piece of foam core as a straight edge.

(image 5)
The last step in plotting your layout is marking everything:

Mark the mapline tick marks from 0 to wires - 1 (for me, I numbered from 0 to 127). 0 is on the left side looking towards the projector.

Mark the depth levels from 0 to however many depth levels you have. The mapline is depth level 0, and the next parallel line is level 1, and so on...

Great! Now you're ready to plot some points.
board_plot1.gif
loading...
400x300 : FYAAVKZFQR1O6EH (2)
i
board_plot1.gifboard_plot2.gifboard_plot3.gifboard_plot4.gifboard_plot5.gif

step 7Ray Tracing

In this step, we'll make a straight edge between the projector's focal point and the mapline.

Glue two pieces of foam core together. When gluing them together, try to stay within an inch or two the outside edges (so that when you pierce holes into your foam core, you won't have to struggle through the glue).. Then tape this to the third piece of foam core. Then - tape it all to the floor:

core . . . . . .===============
. . . . . . . . . . . . . . .taped to
core . . . . . .===============
. . . . . . . . . . . . . . .glued to
core . . . . . .===============
. . . . . . . . . . . . . . .taped to
floor _._._._._._._._._._._._._._._._._

Now, measure out where your projector should roughly go (centered on the depth line and as far from the mapline as your depth is). Tape a piece of plywood at that spot.

Draw the depth line onto your plywood. A good way to get the straight edge here is to tape a piece of string to the center of the mapline and pull it taught. When it matches the depthline on the foam core, mark up your plywood and draw it out.

Then, measure from your mapline to draw the intersect - where your projector sits.

Take some thread and tie it off on a hex nut. Drill a screw (or nail a hammer) through the hex nut into the intersection on the plywood.

Now you have a straight edge long enough to follow your path of light!
wire_plot3.jpg
loading...
500x375 : FMCEECVFQR1WR7A (2)
i
wire_plot3.jpgwire_plot1.jpgwire_plot2.jpg

step 8Mark Your Wires

In the files you downloaded at the beginning of this instructable, go to the "data" directory. Open and print the data file that ends with the wire number you chose.

The files have the following format:

map[0] = 43;
map[1] = 15;

This means that tick 0 on the mapline has a depth of 43, and tick 1 on the mapline has a depth of 15.

Take the string that's tied to the hex nut and pull it tight to tick 0 on the mapline. Then, with a pencil, mark out where the string intersects depth level 43. Move the string to tick mark 1, and mark where the string intersects depth level 15.

You might also want to circle each of these tick marks, just so that they're more visible to you.

Once you're done with this step, you can untape the foam core from the ground (but keep them taped together). Use some clamps to clamp all three together, clamping one on each edge.

Now, use a needle scribe (or just your needles) to puncture holes into your foam core. Drop a hole anywhere there is a tick mark, and try to drop the holes as straight as possible.
tick_marks.jpg
loading...
500x375 : FU72HQUFQR1WXB9 (0)
i

step 9Building Boom Bases

Glue your 2x4 together in pairs.

Drill into your 2x4 - try to drill as straight as possible.

Put wood glue in the holes, and drop some dowels in.

Use a level and some chairs and brooms or whatever you can to keep the dowels straight as they dry. It's not super important, but the straighter the better.
structure1.jpg
loading...
500x375 : FDS7Y9MFQR1WR9B (0)
i
structure1.jpgstructure2.jpgstructure4.jpg

step 10Prepare your thread

First, we have to find out how long each thread should be. Take the image height at the mapline, and add 8" to it.

The image height of the projection at the mapline is determined by your mapline length and the projector's aspect ratio.

Mapline length / image height = projector aspect ratio.

So, in my case:

32" / image height = 4 / 3
32" * 3 = image height * 4 (cross multiply)
(32" * 3 ) / 4 = image height (divide)
image height = 24"

Once you've found your image height, add 8" to figure out your thread length.

Now, cut as many wires as you need at that length.

  • tip - find a plank of wood that is half the length of your thread length & wrap your spool around it a bunch of times. This way you can wrap a bunch of times and cut only once!

Then, pull one end of every thread through a hex nut, and bolt it in place.
make_thread1.jpg
loading...
500x375 : FJQAKACFQR1O32Z (0)
i
make_thread1.jpgmake_thread2.jpg

step 11Setup

(image 1)

Take your four boom bases and place them so that they are just outside the footprint of your foam core. Clamp a C clamp at the same height on each boom. You also want most of the c clamp facing inward for the foam core to rest on it.

(image 2)

Rest your foam core on the C clamps. You'll want to orient this the correct way - the mapline on the opposite side of the projector. Also, the faceplate with the tick marks on it should be facing the floor.

(image 3)

Now, use your needle to thread all your threads through all three plates.

When you're finished threading, we need to separate the bottom plate out. Unclamp and untape the plates from one another. Use those four clamps to clamp further down on the dowels to support the bottom plate. This should be about 4 inches above where all your wires end.

Bring all three pieces of foam core down to the bottom C clamps.

Bring the top two pieces of foam core back up to the top.

Rethread any string that came out of the bottom plate.

(image 4)

Tie off the bottom ends of the threads with more nuts and bolts (to weigh it down).

Now, measure everything! Use your level to make sure the plates are level. You'll also want your strings to go straight up and down. One good way to see if your strings go straight up and down is to tie a nut to some extra string and to let it hang next to a thread in your wiremap (image 5). Compare those lines; they should be at the same angle. If they're not, move your plates around until they are.
setup1.jpg
loading...
420x560 : FQSD055FQR1O54J (0)
i
setup1.jpgsetup2.jpgsetup3.jpgsetup5.jpgsetup6.jpg

step 12Calibration

Now all that hard work starts to pay off.

Find out where your projector should go by measuring it out form your construction.

When you find this spot, take your camcorder or digital camera and put it in that spot (image 1 & 2). If you're precisely where you need to be, you'll see all your wires equidistant from one another. Anywhere else, and they'll overlap. Find that hot spot, and put your projector there.

Fire up your projector and set your computer to match it's native resolution. Get to those files you downloaded and run the calib program with your wire count attached to the end of it.

Once you get that running, you should see a series of vertical strips of light. This program has your wire positions memorized, and it shines a color of light depending on how distant each wire is. The wires that are closest are red, the ones that are furthest are blue, and the ones in between are green.

The first thing you'll want to do is to drop a piece of paper about half way through your strings (maybe even a tad bit closer) to focus your image on it (image 3).

Once you're focused, your wires will probably look something like image 4 below - with each wire having bands of light and darkness. This is because your projector is out of tilt. Fix this by tilting your projector right and left.

Then, you'll probably that one side is out of tilt while the other side is lining up. This is due to the projector being out of tilt in the forward and backward dimension. This is called a keystone distortion, and it can be fixed by tilting your projector up and down. If your image is too fat on the bottom, you need to tilt your projector upwards. If it's too fat on top, tilt it downwards. Use your shims (image 5).

Now, fix the zoom on your projector. You'll want the left side of the image to just be hitting the left-most string, and the right side to be hitting the right-most string.

Try to find that hot spot - & you'll know when you hit it. Keep an eye out for when all the strings closest to you turn red. If you're having trouble, temporarily block the light coming from your projector and pull out your camcorder and try recentering the projector. Play with zoom and projector location. Keep playing with your zoom and location, and you'll find it soon. (image 6)

**tip - the projector's focal point is usually 2 - 3 inches behind the lens.
**tip - also remember that you can make micro adjustments to the foam core - this is very useful especially in the end of the calibration process.

Once you get partially calibrated, it's just lots of small fudging from there. Go up to the wire field and push on a thread in both directions to see which way the light needs to go (images 7 and 8). Take notes, and make a quick diagram:

If the strings need to be pushed this way to resolve:
_ _ _ _ _ _ _ _ _ _
\. .-->. . . . . . . .<--. . /
.\. . . . . . . . . . . . . . . /
. \. . . . . . . . . . . . . . /
. .\_ _ _ _ _ _ _ _/

... then the light needs to go this way:

_ _ _ _ _ _ _ _ _ _
\. .<--. . . . . . . .-->. . /
.\. . . . . . . . . . . . . . . /
. \. . . . . . . . . . . . . . /
. .\_ _ _ _ _ _ _ _/

If the light needs to get wider in the back but is perfect in the front, this means you need to move your projector forward and widen the focus.

Keep making these micro adjustments. This is a very time consuming process, but it's well worth is and pretty much the final step.

And lastly, I've found from experience that I'll get to this point and realize that everything is perfectly aligned except for one or two threads in the middle. This is because their holes are just off center. If you find any of these, just cut those strings, remove them, and move on.

When you're all done, it should look like image 9, below..
calib1.jpg
loading...
500x375 : F6IJC2NFQR1O5BH (0)
i
calib1.jpgcalib2.jpgcalib8.jpgcalib3.jpgcalib9.jpgcalib4.jpg
calib5.jpgcalib6.jpgcalib7.jpg

step 13Run the program

Now that you're all calibrated - you're set to run your program. Find the sine-surface program that corresponds to your wire count, and run it!

In the program:

Move the mouse to move the ball around.
Click the left mouse to bounce the ball up and down.
Click the right mouse button to toggle the color of the fluid from black to blue.
Press space bar to the beat of some music to have the water oscilate to that rhythm.
Press 'B' if you want to delete the ball altogether.
And press escape to exit.

Also, all the code is open source and the project itself is under the creative commons. Play with the code, and let me know about any developments you make, I'd love to learn about them.
program_preview.gif

No comments:

Post a Comment