3D mapping onto threads (wiremap)


little intro:
I’m building a big(ger) version of Albert Hwang’s Wiremap design (http://wiremap.phedhex.com/) in short: it’s a couple of hundred threads under tension, arranged in a way that there is one POV-plane from where no thread covers another (thus all threads are visible from that POV).

In order to put content onto the whole thing, i planned on using vvvv. but since i’m new to vvvv, i’d like to ask some pointers. i have lots of experience in coding and learn rather quick, so i hope this problem (described below) will not stress my caffeine intake too much, considering the deadline :)

i read into the shader effects turorials, so i’m kinda familiar with the terminology in that field.

i thought about working on 2 different ways of input:

  • calculating the graph of mathematical functions (e.g. 2D over time, etc) and calculate which of the points of the graph hit a string (positions of strings hardcoded?) and desiplays it or not.

  • take a any mesh as input and calculate the “visibel parts”, i.e. finding out whether there is a wire for that part to project on.

in general i (think i) need some way to inspect the input, e.g. a 3d mesh in order to find out what parts of the input can be mapped onto a string and finally output a projection that’s split up into 1px rows, each row projecting the image designated for the thread that it will hit. (note: rows not columns because in our setup we tilt the projector 90deg so the strings will run horizontally from the projectors pov)

can this be done as a EX9 Effect; vertex-/pixelshader?
do these sound like reasonable efforts or am i totally off?

thanks in advance for any help, pointers, tips… (:


Why hello there!

I got a google alert for my name, so found this thread. Excited to hear you’re planning on making uber big ones. FYI, the Wiremap project has since been moved over to / renamed the Lumarca project, and we’re still sussing out the new identity / web properties etc…

In any case, here are some thoughts:

  1. I don’t have much vvvv experience, but Elliot Woods did his development on the project with vvvv. He might have some old code still sittin around. But yes, he was using shaders.

2)Probably won’t be able to do 1px columns: you need dark pixels in between so that light doesn’t bleed over when the image is out of focus.

  1. Horizontal strings sound exciting but daunting. One of the nice thing about vertical string is that it will maintain straightness. Straightness is really important when you’re dealing with pixel perfect precision. That being said, if you can engineer a way to make the strings go uber straight, more power to ya!

Would be more than happy to answer questions. Hit me up via email: hwang dot al at gmailcom

Also, I would love photos / video! The new website will have a gallery of all the people who have taken it upon themselves to try it out.

hello mujo,

writing a shader would not solve much of the problem. i think you should first get familiar with the graphics pipeline: ex9.dataflow

one way would be to get your mesh into vvvv, have a camera looking at it in the same way the projector is projecting on it using the projector node, and then use projective texture mapping on your mesh… but there are other ways too.

Is that flo? or a friend of flo maybe?
i heard about the project over email and have been in touch already
really hope you get some good results!
really sceptical about the sideways wires, although can see how it’d be good for the projector

many challenges seem simple (e.g. 1px wide bands of colour) but really aren’t. so make sure to prototype a lot first!

of for rendering…

i had 2 shader routes running in vvvv

  1. lookup xyz (either with lookup map+math or with xyz lookup map) for each output pixel and then perform calculation on that xyz position
    this let’s you create procedurally defined graphics (e.g. spheres, metaballs, fluids). but you have to ‘do all the hard work yourself’ with the math
    you can get some starter pointers at https://github.com/elliotwoods/HanRiver-VVVV/blob/master/Common/Shaders/effects/SimpleTests.fx
    which is similar code running on a recent installation (still un-released)

  2. mesh rendering.
    this was super complex to get working well but creates realtime rendering of meshes (i got 100fps on a GeForce 8800 with 2 projectors with the mesh of a car).
    here’s a super-super-super-simplified version (for 1 projector)

a) create a camera in VVVV which is the same field of view and lens shift of your projector (use the Projector node probably). This doesn’t need to be exact at all.
b) render your mesh from that camera
c) use a pixel shader to
i) check what the depth of the current wire is at this output pixel (using lookup texture map)
ii) check what the depth of the current pixel being rendered is
iii) dim this pixel where the depths don’t match (e.g. have an ‘active range’ around the wire where surfaces are assigned to the wire)


Hi, followed this and similar threads about lumarca style, was then realized the horizontal line installation ? how it worked ?

@Elliot, i saw some videos on youtube about your “lumarca” installation, do you have any starting point or patch that can be ported into new pipeline ?

I thouhgt to just place manually n cylinders on 3d stage and make them match real wires, can be tricky but at least doesnt need to move physical wire.
How have you done setup ? I mean position of wire into real space are precalculated or what ?