Project On Complex Geometry - Issues

Hi,

Thanks loads for the tutorial on Projecting On Complex Geometry. It’s great. I attended the wonderful workshop at Node08 on this and it is great to have this on paper as it were.

My issue is, if using two or more projectors that overlap, how can we stop both projectors illuminating the space area?

if these two or more projectors are used to cover a large scene and there are small areas seen by two of more projectors, that overlap will mean more light hitting that area and it will look brighter than other surfaces only being hit by one projector.

I imagine there must be a method, using shaders, of knowing that the other projector can also see that area and masking this area out on the other projector. Some sort of priority must exist too.

Advice would be well appreciated. thanks.

for the simpler setup that you project

  • onto a flat wall or
  • any other single 2d-surface
    you can benefit from the multiscreen modules which come with vvvv.

in case of the flat wall and in case of that you even don’t need a homography node because you’re just projecting flat onto the wall it is very easy. just use the output of the multiscreen modules directly. (see help files)

in case of the (arbitrary distorted) 2d-surface, which still comes with meaningful 2d-texture-coordinates, you can use the multiscreen module before mapping the result onto the surface.
(also have a look at the grideditor module)

in case of any other more complex geometry: well yes, you are right, there is a chance to do it in a shader. i once did it for four projectors, but at the end it tended to be a bit special in the way how to get content into the system, and a bit more complicated to setup. i will try to get it more “general purpose”.

thanks gregsn

yes it is for complex geometry, I was thinking of a scene that had so many faces at so many angles that two or more projectors would be required just to hit all the faces. However, they would almost certainly also be able to project onto many of the same faces.

A more ‘general purpose’ method for doing this, without doubling up light on certain faces, would be great! Thanks.

It blows my mind as to how to do this, I know very little about programming shaders and I suspect that this will take some passes through an number of shaders, possibly only two. hmmmm… intriguing the more I think about the method and then think no that wouldn’t work either. hmmmm…

I am not sure, but it matches in my head (trying to think in rays) if I can assume that the projector simulation is very accurate, than ‘cover up’ one projector with the simulation off the other?

This is indeed is in now way screenblending and it requires extreme correct positioning off the beamer, just a silly thought.

BlackBoxCoverup.zip (18.3 kB)

thanks west, I think this doesn’t solve what I need to do though.

I’ve edited, and attached your patch setup in a typical position that shows it doesn’t solve my issue. You can see that the second projector should be able to light all the sides of the extruded text that can’t be seen by the other projector. With this method there are faces that both projectors can’t see.

I think(?) the rules are… first projector should light all the faces it can see. Second projector should only light the faces it can see and can’t be seen by the other. (???)

BlackBoxCoverup issue setup.zip (19.1 kB)

I think(?) the rules are… first projector should light all the faces it can see.
Second projector should only light the faces it can see and can’t be seen by
the other.

I saw what you mean, and indeed, but idea is still okay I think.

Openly brainstorming here, no idea how to do it, but we have this node, Intersect (3d Mesh Ray), this can tell us the FIRST position on a mesh that a ray of light, emitted by the projector, is hitting the mesh. We will create many lines, think ray tracing.

For every Mesh in the scene we repeat this process, than use only the shortest lines. If we can somehow make a module that can figure this out for every line on that side off the projector we want to use as a ‘mask’, you can create that mask.

Performance will be horrible, but you will only need to do this once (and than save that mask).

Just thinking out loud here…

I’ve tried to understand you method west but don’t fully understand it. I esp don’t see how you’d go from that to create a mask.

Here’s my thinking out loud…

Simple situation using only two projectors… both projectors cover all of the geometry we are trying to light. There are faces both projectors can see. Both projectors can also see faces that the other can’t.

If we passed each projector’s view to a shader and the orientation of both the projectors and worked out which face was best suited to be lit by which projector. Some clever maths with normals would be required here. We then decide to shade each face black or white for each view and then save this as a texture and use as a mask on both views.

Don’t know if this would work for more complex set-ups. Guess it might.