|
Advice Beginners BIOS Guide CPUs Links Mainboards Memory Network Storage Video/Sound Cards Contact Forum SiteMap Sponsors WebNews Home |
. | . |
Prices: Mainboards ABIT ASUS Chaintech Shuttle Soyo Tyan CPU Intel P4 2.4C-800 P4 2.6C-800 P4 2.8C-800 P4 3.0-800 P4 3.2-800 AMD AthlonXP XP 1700+ XP 2000+ XP 2400+ XP 2500+ XP 2700+ XP 3000+ XP 3200+ Athlon64 Athlon64 3200+ Athlon64 FX-51 Opteron Opteron 240 Opteron 242 Opteron 244 Opteron 246 Memory Corsair Crucial Kingston Mushkin OCZ |
LOSTCIRCUITS |
|
| ASUS V8200 T5 Deluxe No Reason for Panic on the Titanic | |
| (Review by MS, November 28, 2001) |
Technographics
Shadow Buffers
Most computer graphics so far, have lacked one critical component of cinematic displays: naturally looking shadows. Shadow display require accurate mapping of every light source and object in the scene and this requires additional memory space. nVidia is using a dedicated portion of the internal buffers of the GPU to store such a shadow, or precisely, a light map. Instead of using shadows that are applied, it actually works exactly the opposite way in that light is applied and the absence of light is the shadow. This appears backwards at first, however, in reality, it makes more sense to calculate the lighting once only instead of applying it first and then subtract luminosity from the shaded areas. The real trick is though that in each light path, there is only one pixel that is really lit. However, behind each pixel that is lit, there are many more (hidden) that are in the shadows. Consequently, it is much more economic to apply the shadow texture to the lit pixel only. (I know that this sounds a bit awkward but on second thought, the logic is very obvious).

Block diagram of the Ti500 GPU with the designated shadow buffer
Here is how it works on a more technical level (Quoted from the nVidia technical brief)
To create a shadow map, the GeForce3 GPU renders the scene from the point of view of the light, as if the viewer were located at the same position and looking in the same direction as the light. As the GeForce3 renders the scene, it stores the depth information, or Z-value, for each pixel in the shadow buffer. The hardware has a special algorithm to bias this Z-value to avoid undesirable artifacts from precision errors. All of the objects in the scene are rendered, but only the smallest biased Z-value for each pixel is kept to ensure that the shadow buffer represents only the objects that are closest to the light. Once a shadow map is created and stored in the shadow buffer, it is ready to be used.
When the GeForce3 Ti GPU renders the scene, it performs the following steps:
To make a long story short, the shadow buffering technique can be used to create hard shadows, soft shadows, self shadows (part of an object shadows another part of the same object).

Example of how shadows can be cast on different objects, including the one casting the shadow (self-shadow). Picture courtesy of nVidia
Looking back, I can't help but notice that the idea and its implementation are not as novel as the nVidia description tries to paint it, as mentioned above, ATi had a similar statement over 1 year ago with the introduction of the Radeon:
Shadow mapping is a much easier and more elegant method that can be implemented using priority buffers. Using a light source as a viewpoint, a scene is rendered to a priority buffer so that the closest shadow casting object has the highest priority, the next closest has the second-highest priority, and so on. Background objects that do not cast shadows have the lowest priority. A shadow texture is then generated by rendering silhouettes of each shadow casting object, in the order defined by the priority buffer. Finally, the shadow texture is projected on to the scene from the light source, and blended with light maps and existing base textures to produce the final image. (More details on ATi's description of the Charisma engine).
Next Page: => Technographics2: 3D Textures =>
If you enjoyed reading this article and found it useful, please consider making a small donation to LostCircuits.