SMARTSHADER

Really, the only difference between DirectX 8.0 and DirectX 8.1 when it comes to programmable vertex and pixel shaders is that the pixel shader version has been upgraded. DirectX 8.0, the specification that NVIDIA designed their nfiniteFX engine around, calls for support of pixel shader version 1.1. DirectX 8.1 brings the pixel shader version up to version 1.4, offering a few new benefits. The table below summarizes the differences between pixel shader 1.1 and 1.4.

Pixel Shader v1.1 vs Pixel Shader v1.4
Pixel Shader v1.1
Pixel Shader v1.4
Maximum Texture Inputs 4 6
Maximum Program Length 12 instructions (up to 4 texture sampling, 8 color blending) 22 instructions (up to 6 texture sampling, 8 texture addressing, 8 color blending)
Instruction Set 13 address operations
8 color operations
12 address / color operations
Texture Addressing Modes 40 Virtually unlimited

As you can see, pixel shader 1.4 offers a larger variety of possible combinations demonstrated by the larger number of texture addressing modes. This is possible because pixel shader 1.4 uses more basic instructions but allows for a greater number of combinations of these instructions.

The new pixel shader specification brings the capabilities of the programmable pixel shader to new levels. Examples of effects only possible with DirectX 8.1 and pixel shader 1.4 are summarized below.

Pixel Shader 1.4 Effects
Effect Description Example
True Phong Shading Performs a complex mathematical calculation on pixels to accurately light and shade pixels according to the properties of the material and the light shining on it Realistic rendering of materials
Anisotropic Lighting Uses bidirectional reflectance distribution functions (BRDFs) to determine how light bounces off a surface as a function of the viewing angle More lifelike lighting of hair
Advanced Bump Mapping Allows for the use of horizon mapping to create bump maps that cast shadows; Also allows the combination of multiple bump maps Rippling water created by both wind and an object falling in the water
Procedural Textures Uses mathematical calculations to create detailed textures without requiring any memory storage since the objects are created on the graphics chip Creation of a marble column without the use of any textures

Another advantage of pixel shader 1.4 is that Microsoft has reworked the language in which the shaders are written. There are two parts to a pixel shader: an address shader and a color shader. The address shader performs up to eight mathematical operations on textures or addresses. The color shader also consists of up to eight instructions that blend and modify color values. In DirectX 8.0, the language used to program these aspects of the pixel shader were different, making for a large learning curve. DirectX 8.1 simplifies things by combining the language used to program these components of the pixel shader, making it easier to write both the address shader programs and the color shader programs.


Update: 7/18/01

NVIDIA has quite a bit to say regarding ATI's DirectX 8.1 and pixel shader 1.4 claims. Although NVIDIA can not comment on what is in DirectX 8.1 and what the new version of the pixel shader (as a result of an NDA with Microsoft), they can respond to ATI's claims that only the SMARTSHADER engine can perform the functions listed in the above table.

NVIDIA supports the above "pixel shader v1.4 effects," as demonstrated by existing GeForce3 demos. Phong shading is done in the nfiniteFX engine on the GeForce3 and has been since the release of the card. Although ATI claims that only they can perform "true" phong shading calculations, NVIDIA states that there is no standard phong shading formula. Regardless, the Zoltar GeForce3 demo uses NVIDIA's phong shading effects, done in hardware.

The anisotropic lighting effect for realistic hair is used in NVIDIA's fur demo in combination with the fur rendering capability of the vertex shader. Claims that only the SMARTSHADER engine support this feature are incorrect, according to NVIDIA.

Advanced bump mapping techniques are also available with NVIDIA's nfiniteFX engine. The engine can clearly create shadows for bump maps and also supports the blending of multiple bump maps. The GeForce3's ability to perform these functions are demonstrated in the Zoltar demo.

Finally, NVIDIA also has the ability to use procedural textures for the creation of an object. Although no demo or screen shot was available in time for this update, NVIDIA should be supplying us with proof soon.

As this story unfolds, we will provide you with more information as we come across it.


Update: 7/19/01

Since yesterday, NVIDIA has cleared a few things up with Microsoft and has been able to provide us with a bit more information regarding the DirectX 8.1 capabilities of the GeForce3.

It seems that there are two versions of a new pixel shader implemented in DirectX 8.1: pixel shader 1.2/1.3 and pixel shader 1.4. ATI's SMARTSHADER supports pixel shader 1.4, but NVIDIA's nfiniteFX engine supports pixel shader 1.2/1.3, also implemented in DirectX 8.1. Until we get more information regarding the differences between pixel shader 1.2/1.3 and 1.4, we won't say too much about this issue, but since NVIDIA's GeForce3 does support pixel shader 1.3 it therefore is DirectX 8.1 compliant.

Shader Basics Conclusion

Log in

Don't have an account? Sign up now