I thought I’d post here and get some opinions on the object before
posting on the nVidia dev forums…
Well, as work on my engine progressed, for the last three years or so I
was confronted with the problem of real time shadowing (as usual). It’s
pointless to explain the evolution my shadow algos went through (my first
idea was to use something I called “vis maps”), so here’s the fact: I
eventually came to the conclusion that “shadow volumes are The Right
Thing” (as usual . Now, after some time of work, they work almost
perfectly - but with some considerable drawbacks. The most obvious is that
the so called - by me - “light volumes” (basically an inversion of SVs
better fitting into the architecture of my engine), have to be
extruded/clipped completely on the CPU. Also, curved surface SVs aren’t
really perfect for now (normal based extrusion on the GPU), and the solid
objects are still a pain in the ass - using the so called “semi-automatic
GPU extrusion” is something I strongly detest (still looking for something
better).
Now, the times are coming for shadow maps. Not only they allow various
soft shadow implementations, but they, and that’s the most important
thing, are completely geometry-independent. They can be safely and easily
implemented on top of almost every existing engine architecture without
destroying something else. In the worst case, they could be just an
optional feature.
This said, the times aren’t that far away when it will be possible to
have 10-20 moving omnidirectional lights in a complex scene in real time.
If I may quote Carmack , things are always falling down to raw power in
the end. The GeForce 7800 may not manage aforementioned 20 lights, but it
is highly imaginable that the 8800 (for example) won’t have a problem
processing so much geometry.
So, finally, I’m coming to the point . Omnidirectional lights require
rendering the world six times with a 90 degree frustum into a cubemap.
IMO, it would be much more efficiently having the card automatically
render the world into the cube map through an extension, instead of having
to set up the view 6 different times. Imagine having all visible world
objects from the light’s point of view, you’d have to perform frustum
culling on the CPU before sending the final geometry to the GPU, where
they are culled one more time, processed, assembled and then finally
rendered. Having all this work done on the card would save a lot of CPU
time, but also improve the cache coherency and copy times.
NV_render_to_cubemap should be the next thing to come
Ideas / comments?