Features Overview: nFinite FX Technology Continued
Another of the nFinite FX technology would involve the NVIDIA’s programmable Pixel Shader, a grown-up variety of the GeForce 2’s NSR (NVIDIA Shader Rasterizer). After the Vertex Shader has done its job of manipulation and generation of the required vertex information, the triangle setup computes the necessary parameters required for the rasterization of the triangles, and then the remaining job is passed onto the GeForce 3’s Pixel Shader. The responsibilities of the Pixel Shader would be to derive, from the vertex information, pixels for display onscreen. It combines the colour, lighting and texture data to figure how a pixel should look like.
“Pixel Shaders create ambiance with materials and surfaces that mimic reality. A virtually infinite number of material effects replace the artificial, computerized look with high-impact organic surfaces. Characters now have facial hair and blemishes, golf balls have dimples, a red chair gains a subtle leather look, and wood exhibits texture and grain. By altering the lighting and surface effects, artists are able to manipulate colors, textures, or shapes and generate complex, realistic scenes.” – NVIDIA GeForce 3 Product Overview .PDF
The Pixel Shader comes with a long list of features. But narrowing down, it has, on one hand, almost the same brute force processing capabilities of the GeForce 2’s NSR, but adds programmability on the other. Because of the nature of operation of the Pixel Shader, the GeForce 3 is much more memory bandwidth efficient than the NSR. Let me elaborate.
The GeForce2 texture stage pipeline supports two texture-blend operations per pass.
The GeForce 3 has 4 Pixel Shader units. Each Pixel Shader unit can fetch two texels per clock and it allows four textures per pass - the latter being the important difference. So based on the 200MHz clock frequency, which the GeForce 3 defaults to, the following is clear depending on how many textures per pixel is applied: 1,600 MTexels/s for 2 or 4 textures per pixel, 1,200 MTexels/s for 3 textures per pixel, 800 MTexels/s for 1 texture per pixel. You will obtain the same texel fill rate numbers as the GeForce 2 GTS.
The NVIDIA nfiniteFX texture pipeline supports up to eight texture-blend operations, dependent texture reads, and programmable Pixel Shaders.
The benefits of allowing four textures per pass come when you calculate the memory bandwidth requirements saved. For operations requiring two rendering passes, the GeForce 3 only needs to read/write colour value from/to the back buffer and the z-value from/to the z-buffer ONCE and hence the GeForce 3 is exceedingly efficient when three or four textures are applied per pixel. In fact, to achieve the same maximum fill rate, the GeForce 2 requires in theory, 1,600 MB/s in additional memory bandwidth to match the GeForce 3.
What about programmability? The native assembly language for the NVIDIA nfiniteFX programmable Pixel Shaders is as defined in the Microsoft DirectX 8 API. Developers can program Pixel Shaders to create personalized effects or shading algorithms to realize a number of important effects like environmental mapped bump mapping (EMBM), shadow mapping, isotropic BRDF-based lighting, and also per-pixel reflection.
Note: There are a host of features and effects not entirely covered or illustrated in this writeup, you may wish to download NVIDIA's Technical Brief on the GeForce 3: Programmable Pixel Shaders (.PDF) here.