Ultra Shadow and Shadow volume rendering acceleration

I wonder whether this is based on hierarchical Z buffer (in this case it could save a tremendous amout of fillrate) or a per-pixel comparison (in that case it would only save the stencil write bandwidth)
 
This is basically the same as scissor tests, but with depth. So you can make a nice little bounding box around the objects (or light) in shadow, which can help save a LOT on fill rate.

Also doom3 does a bunch of other stuff to reduce fill rate from stencil shadows. Beamtrees are used to reduce overdraw of shadows that are in shadow themselves. (aka svbsp or shadowvlume bsp).
 
I have to admit that my memory of the "Dusk2Dawn" event is slightly hazy, but isn't this UltraShadow thing simply some sort of support for this (aggressive stencil scissoring based on object / camera / light volume bounds) in hardware?
 
[maven said:
]I have to admit that my memory of the "Dusk2Dawn" event is slightly hazy, but isn't this UltraShadow thing simply some sort of support for this (aggressive stencil scissoring based on object / camera / light volume bounds) in hardware?

You got it right :)
 
Having not read up on the actual technique yet, I have a couple of questions about it:

1. Can it only be used on CPU-calculated shadow volumes? Or can it also be used on shadow volumes done entirely in the vertex shader?

2. What percentage of the rendering time can shadowing actually take when objects are using rather complex lighting and shading?
 
Chalnoth said:
1. Can it only be used on CPU-calculated shadow volumes? Or can it also be used on shadow volumes done entirely in the vertex shader?
It can be used with shadow volumes done in the vertex shader, however if you don't do some calculations on the CPU, you can only use light attenuation bounds and not be more restrictive.
 
Basically it lets you define a screen aligned bounding box, so that you dont have to update parts of the stencil buffer that arent inside that box. This optimisation is already done with scissor rectangles, but has now been extended to depth. This is NOT a clipping technique. The API is actually very simple.

eg.
glDepthBoundsNV( GLclampd zmin, GLclampd zmax );
glEnable( GL_DEPTH_BOUNDS_TEST_NV );
glDisable( GL_DEPTH_BOUNDS_TEST_NV );

Depths in window space
same [0,1] range as glDepthRange()
 
Back
Top