PDA

View Full Version : Ray tracing in Lightwave -- some issues



Captain Obvious
10-03-2008, 04:23 AM
I've been building an "exposed edges" shader using the node system, but I got this strange issue. Basically, I was trying to use ambient occlusion that's offset from the surface by the surface normal, and then flipped, so it's firing back on itself. Conceptually, it worked fine, but it tends to show the wireframe of the mesh in some situations. I couldn't figure out a way to avoid it, so I set out to build my own shader (not compiled or anything; it's all done with the RayCast node and some math nodes). Basically, what it does is this:

For every spot, it will create N rays, each one starting along the periferi of a circle that's placed as a tangent plane to the surface normal. These rays fire along the inverted surface normal, so they all fire "backwards." I got it working just fine, but then I noticed a problem, most likely the cause of my issues with the occlusion nodes:

Any ray fired in Lightwave will pass through the polygon that spawned it! I then did a simple test:

For each spot, fire a ray from (w.Pos + surface normal), heading in the direction of (surface normal * -1.0). When this was applied to a 1 m cube, each spot should return a value of 1.0. Each ray is offset from the surface by 1 meter (since the surface normal has an amplitude of 1 meter), and is fired back towards the surface. The ray length SHOULD then be 1 meter, but instead, the length is 2 meters! If the cube is scaled down to 0.5 meters, it returns 1.5 meters. Ie, the length returned is the surface normal amplitude PLUS the thickness of the object.

If I clone the object and make the original unseen by rays and the clone unseen by camera, I get the expected results.

I have no doubt that this is the cause of the wireframe showing through with my ambient occlusion shaders, as well.

So, NewTek and shader developers, is there a way of telling the ray tracer NOT to behave like this? Many of my shaders depend upon any ray being able to intersect with any polygon, including the one that spawned it.

Lightwolf
10-03-2008, 07:37 AM
So, NewTek and shader developers, is there a way of telling the ray tracer NOT to behave like this?
Now doesn't that whole idea sound familiar? ;)

Erm, yes, there are flags in the SDK to be used with the new raytracing functions. Have a look at the 9.5 or 9.5.1 SDK - the chapter about the Raytracing functions.

Cheers,
Mike

Captain Obvious
10-03-2008, 07:59 AM
We're stuck with 9.3.1 at the moment, unfortunately. Are the flags new for 9.5?

Lightwolf
10-03-2008, 08:02 AM
We're stuck with 9.3.1 at the moment, unfortunately. Are the flags new for 9.5?
Yes. Apparently a lot has been revamped to speed up raytracing in general.

Cheers,
Mike