Sei sulla pagina 1di 5

NVIDIA nfiniteFX Engine:

Programmable Pixel Shaders

The NVIDIA nfiniteFX Engine:


The NVIDIA nfiniteFXTM engine gives developers the ability to program a virtually infinite number of special
effects and custom looks. Instead of every developer choosing from the same hard-coded palette of effects
and ending up with the same generic look and feel, developers can specify personalized combinations of
graphics operations and create an their own custom effects. Games and other graphics-intensive
applications are differentiated and offer more exciting and stylized visual effects. Two patented architectural
advancements enable the nfiniteFX engines programmability and its multitude of effects: Vertex Shaders
and Pixel Shaders. This paper covers the engines programmable Pixel Shaders.

Realism for Lighting and Materials: Programmable Pixel Shaders


The final output of any 3D graphics
hardware consists of pixels. Depending on
resolution, in excess of 2 million pixels
may need to be rendered, lit, shaded, and
colored. Pixel Shaders create lighting and
other custom shading effects at the pixel
level. This is an unprecedented level of
hardware control for consumers.

Pixel Shader Basics


Todays 3D graphics hardware lets
developers create virtual worlds. Ideally,
users can freely interact with and navigate
through these worlds at high frame rates.

Last year's NVIDIA GeForce2 series performed fixed function, per-pixel lighting.
(Image shown is from Giants by Planet Moon.)

As 3D graphics hardware has evolved over the


years, new features have been continuously added
resulting in steady improvements to image quality.
In the early days of 3D accelerators, the best
technologies consisted of bilinear filtering of
relatively low-resolution texture maps. These lowresolution texture maps were mapped onto
relatively large polygons, resulting in blurry textures
and relatively poor image quality.
In 1999, the NVIDIA GeForce2 series introduced
a new technology: the NVIDIA Shading Rasterizer
(NSR). The NSR gave developers the ability to add
per-pixel lighting effects including sophisticated
When first introduced, the image quality in Tomb Raider II was
considered excellent, but wouldn't pass muster today.
techniques such as dot3 bump mapping. Today, the latest
NVIDIA technology gives developers full control of the pixel
shading process through the use of programmable Pixel Shaders. Part of the NVIDIA nfiniteFX engine,
programmable Pixel Shaders provide unprecedented control for determining light, shade, and color of each
individual pixel.

NVIDIA Corporation

|1

Architectural Details
The NVIDIA GeForce2 GTS performed dot3 and other per-pixel effects through its fixed-function pixel
pipelines. Textures could be combined, using either single pass or multi-pass techniques, to create
effects. There was no loopback, so effects that
needed dependent texture reads, such as true,
reflective bump mapping were simply not
possible.

The GeForce2 texture stage pipeline. Note that the GeForce2 GTS supported only
two texture-blend operations per pass.

While programmers were somewhat limited by


the NSRs fixed-function pipeline, it was
possible to create superb per-pixel effects,
including dot3 bump mapping so realistic
looking that it seemed to have a huge amount
of additional geometric detail.

NVIDIA nfiniteFX Programmable Pixel Shaders


The NVIDIA nfiniteFX engine adds a high degree of flexibility for several reasons:
-Its programmable, allowing developers to create their own custom pixel-shading effects.
-There are more texture operations and texture address registers available.
-Dependent texture reads are now possible, giving programmers even greater flexibility.

The NVIDIA nfiniteFX texture pipeline supports up to eight texture-blend operations, dependent
texture reads, and programmable Pixel Shaders.

NVIDIA Corporation

|2

Note that the NVIDIA nfiniteFX architecture doesnt preclude the use of Microsoft DirectX 7 texture
operations. However, if the developer uses the more sophisticated Pixel Shader application programming
interface (API) in Microsoft DirectX 8, more complex operations are possible.
Unlike Vertex Shaders, however, there is no feasible way of emulating this using software. Using Pixel
Shaders on graphics hardware that doesn't support them forces the entire graphics pipeline to run in
software and causing performance to fall by 100x! The NVIDIA nfiniteFX Pixel Shader architecture has
unbelievably fast floating-point performance, and is capable of generating the per-pixel effects with superb
performance.
The figure on the left shows one of the more
sophisticated techniques possible. The object is an
animated, bumpy, reflective surface something
impossible to achieve in real time with previous 3D
hardware.

A shiny, bumpy surface "breathing" in real time

The Joy of Four Textures


Because of its abilities to handle four textures in a
single pass, the NVIDIA nfiniteFX engine achieves
excellent performance and enables previously
impossible pixel-level effects on consumer-level
platforms. Applying multiple textures in one pass
almost always yields better performance than
performing multiple passes. Multiple passes translate
into multiple geometry transformations and multiple zbuffer calculations, slowing the overall rendering
process.

Making Bump Mapping Work


Bump mapping creates the illusion of additional geometry, such as the crinkles in the warping NVIDIA logo
or the deep wrinkles in the earlier Giants shot.
Dot3 bump mapping requires the application of multiple layers of textures. The key textures are derived
from the height map and the normal map. These help
define the visible surface geometry. The height map is a
simple gray scale, where the shades of gray represent the
relative height or
indentation. The normal
map is an RGB color map
that defines the effect from
light shining on the
surface. Note that
The height map is on the left; the normal map is on the right.
normal in this instance
refers to a mathematical
normal, which defines a vector direction. The Pixel Shader architecture of
the NVIDIA nfiniteFX engine is capable of applying the required textures in
a single pass.
The final, bump-mapped surface.

NVIDIA Corporation

|3

Pixel Shader Programmability


When people think of programs, they almost always think of high-level languages such as C++ or BASIC.
However, Pixel Shader programs are much lower-level programs assembly language programs. The
native assembly language for the NVIDIA nfiniteFX programmable Pixel Shaders is the one defined in the
Microsoft DirectX 8 API.
Developers can program Pixel Shaders to create
personalized effects or shading algorithms. For example,
Pixel Shaders could be programmed to provide a low-tech
cartoon look or myriad of other stylized looks.
The possible range of effects is limited only by each
developers imagination. The nfiniteFX engine, coupled
with DirectX 8 or the OpenGL drivers, give the
programmer an unprecedented level of control with
unbelievable performance.
A simple cartoon effect created with programmable
shaders.

Conclusion
The NVIDIA nfiniteFX Pixel Shader architecture represents incredible breakthrough in 3D graphics
hardware. Incorporating blazing-fast floating-point performance, total control at the pixel level, and
programmable shaders, NVIDIAs nfiniteFX engine brings advanced image quality to the PC desktop.

NVIDIA Corporation

|4

Potrebbero piacerti anche