The GeForce3 nfinite FX Engine. The Infinite Effects GPU. Fully Programmable GPU. What exactly do these terms mean? Quite simply they allow developers to write specialized programs to manipulate vertex and pixel data through the use of an instruction set which can dynamically reconfiguration graphics data.
The number of special effects, which will take 3D graphics to the next step of realism, are infinite as the developer can make a vertex program do whatever they want. We saw the results of vertex shaders first hand at NVIDIA when we ran through a demo of AquaNox. This undersea game title uses up to 160 vertex shaders. some of which are customized for a specific object.
Programmable vertex shaders are a new feature in the DirectX 8 and OpenGL application develpment interfaces and represent a significant step forward in the evolution of real-time 3D graphics. As the existing transform and lighting unit on the GeForce is a fixed functioned processor, developers had no control when it came to manipulating vertex data as it passed through the graphics pipeline. In certain cases they even bypassed the fixed pipeline of the GeForce knowing the CPU would handle their custom graphics engines.
Fixed Transform and Lighting
With the GeForce3, a game developer has the ability to create an infinite number of vertex programs and has complete control over vertex processing with 17 assembly language instructions at their disposal. The vertex processor has the ability to process four instructions simultaneously and takes an un-transformed, unlit vertex and creates a transformed vertex. Vertex processing does not create or delete vertices, but it changes their properties. The major benefits of vertex processing on the GeForce3 include:
- Complete control of the transformation and lighting pipeline
- Custom vertex lighting
- Custom skinning and blending
- Custom texgen
- Custom texture matrix operations
- Insert vertex operation of your choice
The legacy transform and lighting processor remains an integral component of the GeForce3 graphics processing unit and is used when vertex processing is not required and also to support legacy applications. If an OpenGL developer decides to make use of the GL_VERTEX_PROGRAM_NV extension, the Detonator driver will issue instructions to engage the GeForce3 vertex processor.
Programmable Transform and Lighting
With the GeForce 3, developers can create an unlimited amount of customized graphics effects. For example, the following screen shot illustrates a morphing and blending vertex shader.
In order to demonstrate and educate developers on the special effects that can be obtained using vertex and pixel shaders, NVIDIA has provided the NV Effects Brower which can be downloaded here. The browser not only demonstrates a special effect, but includes source code as well.
Vertex Shader Effects
|Unlimted Light Sources
|Relection & Refraction
||Matrix Palette Skinning
The above images demonstrate some of the vertex shader effects which were done using 128 or fewer vertex processor instructions.
Also new to DirectX 8 are pixel shaders which provide dynamic shading on a per pixel basis. Pixel shaders are similar to vertex shaders in that they are based on programmable instructions that execute at the pixel level and are effective when used to create bumpmapped and lighting effects. Per pixel shading includes a variety of dynamic shading techniques which include:
- Bump Mapping
- Per Pixel Directional Lights
- Per Pixel Spot Lights
- Per Pixel Point Lights
Pixel shaders modify the color, transparency, and blending information of a pixel before it's rendered. The most basic pixel shaders set a predefined color or do a texture lookup. More advanced shaders can be used to create realistic lighting and shadows, along with reflections and bumps.
The above screen shot is an illustration of per pixel lighting with bumpmapping. Subtle effects such as the cracks on the floor, the ridges on the end of the pipe against the wall, and the bumped surface of the outer ring of the lock device can be seen.
Another exciting feature of DirectX 8 and GeForce3 is support for high-order surfaces. Unlike the vertex based approach to rendering object, high-order surfaces are created by defining curves based on specified control points. High-order surfaces are especially effective for curved surfaces and objects such as columns, waves, and characters.
Complex Object Using High-Order Surfaces
A curve or surface defined with a set of control point is called a spline which allow developers to use a few control points to create fairly complex, smooth curved surfaces.
Image courtesy of MadOnion
Joining splines together allows the formation of complex curved surfaces that are difficult to create with triangles. The DirectX API supports two types of curved surfaces: polynomial surfaces and Npatches.
Next Page: Lightspeed Memory Architecture