Shadows with current hardware are IMPOSSIBLE!!!

Be serious: with the current hardware, shadows are impossible, i think.

  1. Shadow volumes are tedious to make, very fill-rate limited, slow due to camera inside volume test or capping, bad self shadowing…

  2. Shadow maps are slow, due to the high resolution that is need for good quality appearing ( almos 2048 x 2048 ), and have problems with z biasing. Only high-end graphic cards supports SGI shadow extensions.

  3. Raytracing is too slow.

Come on, graphic card manufacturers ( nvidia, ati, etc… ) give a REAL solution for this!!! We WANT soft shadows, autoprojection, caustics, attenuation and blur over it…

Haha! Since this is a suggestion forum, go ahead and suggest a new method for us.
Soft shadows must be the hardest, requiring a lot of horsepower.

I have a general purpose volume shadowing technic if any hardware vendors are interested. It could cut FPS down in half or even more so its not so fabulous.


If you want easy shadowing, I suggest you not look to scan conversion. Especially an immediate-mode scan converter like most of the current cards avaliable today. Shadowing in scan conversion is never going to be as simple as flipping a switch (at the low level of OpenGL). Scan conversion was never designed to handle shadows; it typically uses a local-illumination model. Raytracing and radiosity both use a global-illumination model, where shadowing is automatic.

Raytracing does not use global illumination, you can combine ray tracing with e.g. radiosity but ray tracing works just fine with local illumination. Path tracing uses global illumination. And while physically correct lighting is a global problem, you can fake it pretty well with depth shadow maps, if I remember correctly PRMan uses those and it looks pretty good.

Raytracing does global specular illumination. It isn’t fully global (caustics and a few other things cause problems), but you get quite a bit by tracing reflection rays.

I’d like to know how John Carmack makes shadows in Doom3 engine…

Yes, my mistake. Of course reflection and refraction are light transport and raytracing handles those. And shadows (which is a global problem), but then shadow volumes using the stencil buffer is global illumination as well, which seems a little strange. My point was that ray tracing doesn’t compute light transport for a number of visually significant surfaces like, diffuse-diffuse, and specular-diffuse (caustics).

I believe that Doom 3 uses shadow volumes.


Hey, look at Coda Advanced Forum. There’s a “Sorting Polygons for Blending”, and it’s hot!!!

noones suggested why shadows aint done by the card/drivers/api.

say youre looking at the ground and a plane flys overhead (u cant see the plane) but u can see the shadow on the ground. the only way for the card to know that there was a plane overhead was if u told it that there was one there. its easy with a single plane but most scenes aint like this u can have a thousand planes,trees blah blah. do u want to send them to the card everyframe because someof them might be casting a shadow on the visable piece of ground. obviously not the framerate will crawl.

Originally posted by zed:
noones suggested why shadows aint done by the card/drivers/api.

Because OpenGL is a low-level API, and it makes no sense to put that kind of functionality in it?

Sounds like you want a scene graph or pre-written game engine.

  • Matt

mcraighead, read the rest of the post, that’s what zed was saying…

Somebody knows if shadows are possible using a new per pixel lighting algorithm?

Shadows are possible now and have been for several years. It’s just a matter of cost (and wanting to bother writing the code to activate them).

Originally posted by santyhammer:
Somebody knows if shadows are possible using a new per pixel lighting algorithm?

Backwards raytrace it for each light with scene capture hardware. This isn’t new and it isn’t fast and its not going to happen.

Somebody know what is the “shadow buffer” of the Geforce 3 Titanium?

Same thing as in the original GeForce 3, the ability to store depth in textures and do a kind of second depth test to get depth buffered shadow maps. There are presentations on this at nvidias developer site. Basically, you render the scene from the view of the light and store the depth for each pixel. You then render the scene normally, and check each pixel to see if it’s depth value is larger than the one you stored previously, if it is, it means something else is between this point and the light, so you shadow it.

OpenGL uses SGIX_shadow extension for Geforce 3… but Direct3D not!!! This demonstrate OGL is still superior to D3D!!!

Originally posted by santyhammer:
OpenGL uses SGIX_shadow extension for Geforce 3… but Direct3D not!!! This demonstrate OGL is still superior to D3D!!!

D3D 8.1 has the texdepth pixel shader instruction, but that’s only avail on 1.4 PS, and currently only on the Radeon 8500…

(note, I’m not saying D3D is better, but it’s getting there…)