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?
]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?
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.