I just got the basic idea of shadow volume.
But it seems to be a time consuming operation to calculate it. How to generate an object's silouette fast?
There should be some tutorial. I saw the shadow volume sample, but it didn't help a lot. I know that I should check triangles' normals to determine object edges. But how to make a closed silouette of it? What is the common technique to eliminate shadows on the backside of shadow receiver? I'm dummy and I'm just getting started. Please, help.
Posted on 2003-12-10 03:02:21 by Vaxon
Theres a cheap way called "shadow mapping" also known as "dark mapping", and here is a tutorial :) have fun
Posted on 2003-12-10 03:49:34 by Homer
Do you use this method in your game programming?
Posted on 2003-12-10 06:08:40 by Vaxon
See http://developer.nvidia.com for many papers on efficient and robust stencil shadows.
This will be a popular method for the coming games. Doom3 employs them, and Doom3 will probably set the trend.
There are still some problems with shadow maps. It has more aliasing problems, and not everything is solved in a robust way yet. They will probably be solved in the generation of games after Doom3. But for now, stencil shadows seem to give better quality on simpler hardware.

You don't actually need to detect a silhouette by the way. You could just extrude backfacing polygons (regarding the light source), and stitch the edges of polygons together with quads. Then the silhouette is implicit, as well as the capping (required only for the zfail method). This is a popular method for vshader-implementation.

PS: if you want to do silhouette detection anyway (sometimes it can speed things up), you should check out the hierarchical method in this paper:

The silhouette detection algorithm they present there, is the fastest known algorithm so far.
Posted on 2003-12-10 06:18:33 by Bruce-li
There's a CHEESY WAY :) Check out the 8.1 docs at msdn for a function which creates a matrix you can use to flatten geometry to a plane lmao
Posted on 2003-12-19 10:49:16 by Homer
Yes, it is a cheesy way but for casting shadows on flat objects only. I want to cast shadows on complex geometry. I try to cope with shadow volumes. Got quite good shadows but wanna speed it up a little more
Posted on 2003-12-22 07:12:39 by Vaxon
You COULD consider complex geometry in terms of its planar surfaces, which you SHOULD, if you want to write a decent physics engine... it boils down to casting the geometry on each and every surface. Sounds kinda expensive :) It would however be very accurate, and you could probably make it cheaper somehow.. I wonder if you could use occlusion theory here, if we imagined that the we move the camera view to the object which is casting a shadow, and that the camera view was in the same vector as the light being cast, we should be able to "step back" and decide what geometry "we" are occluding (given that we are the object casting a shadow), and then determine cheesily which surfaces are fully and which are partially occluded... hmmz ...
Posted on 2003-12-22 07:25:57 by Homer
That's too expensive. The shadow volume does almost the same thing with less computations. The main problem is to extract the silhouette of a shadow caster (looking at it from the light's position). The method that Bruce-li suggests is the fastest, but i can't understand a couple of clue points of it: how to choose edges for anchored cones' building and arrange them in a search tree. The algorithm I use is slower, but still gives not bad results (160 fps on GeForce 4 MX 460 and Celeron 4000MHz for 2 object of approx. 2600 triangles both). I haven't played with shadow mapping yet. It should be faster with mapping but shadow volumes are more precise.
Posted on 2003-12-22 15:05:39 by Vaxon