High dynamic range image-based lighting
Here's another example where the GeForce FX struggled.
The FX just couldn't handle this lighting technique, at least as this program implemented it. The NV40 has no such problems.
In fact, I should mention in relation to high-dynamic-range lighting that the NV40 includes provisions to improve performance and image fidelity for HDR lighting techniques over what ATI's current GPUs support. John Carmack noted one of the key limitations of first-gen DirectX 9 hardware, including R300, in his .plan file entry from January 2003:
The future is in floating point framebuffers. One of the most noticeable thing this will get you without fundamental algorithm changes is the ability to use a correct display gamma ramp without destroying the dark color precision. Unfortunately, using a floating point framebuffer on the current generation of cards is pretty difficult, because no blending operations are supported, and the primary thing we need to do is add light contributions together in the framebuffer. The workaround is to copy the part of the framebuffer you are going to reference to a texture, and have your fragment program explicitly add that texture, instead of having the separate blend unit do it. This is intrusive enough that I probably won't hack up the current codebase, instead playing around on a forked version.So in order to handle light properly, the cards had to use a pixel shader program, causing a fair amount of overhead. The NV40, on the other hand, can do full 16-bit floating-point blends in the framebuffer, making HDR lighting much more practical. Not only that, but NV40 uniquely supports 16-bit floating-point precision for texture filtering, including trilinear and anisotropic filtering up to 16X. I'd hoped to see something really eye-popping, like Devebec's Fiat Lux running in real time using this technique, but no such luck yet. Perhaps someone will cook up a demo soon.
| Friday night topic: The trouble with Best Buy | 146 |