|
|
No the problem is not too diverging normal vectors. I think that I got
what's the problem.
I'll try to "draw" the situation in ascii:
/ \ Z
2/ \3 |
\ / -X --|-- X
\a b/ |
\ / -Z
\/
1
* <-light
We have two faces here, a and b. The normal vector at point 1 is pointing
at the -Z direction and the normal vector at point 2 is pointing at the
-X direction. The normal vector at point 3 is pointing at the X direction.
When rendering face b, the normal vector changes from X to -Z and
everithing is ok (every point is illuminated; the normal vector points
at the light in each point).
Now, when rendering face a, the point 1 is illuminated (because the
normal vector is pointing at the light) but the point 2 is not (the
normal vector is pointing to the other direction). This would mean that
the line of the shadow is somewhere between point 1 and point 2.
But there's one problem: The face b is blocking the light. The face b
actually casts a shadow over face a. The result is that face a is completely
shadowed.
If my theory is correct, applying a "no_shadow" to the object (or more
precisely to face b) will eliminate the problem.
This problem is sometimes very annoying. It causes sharp shadows in
smooth meshes. The only solution I can think of is making the mesh
shadowless (but then it will not cast shadows to the rest of the scene)...
--
main(i,_){for(_?--i,main(i+2,"FhhQHFIJD|FQTITFN]zRFHhhTBFHhhTBFysdB"[i]
):5;i&&_>1;printf("%s",_-70?_&1?"[]":" ":(_=0,"\n")),_/=2);} /*- Warp -*/
Post a reply to this message
|
|