Part III: High-Quality Rendering

Every author of an interactive application is faced with a scale that must be balanced: deliver high-quality images, but deliver them at interactive speeds. While Moore’s Law and the cleverness of GPU architects provide graphics programmers more raw horsepower with each generation of devices, fresh new techniques are also invented to get the most from the chips we have available today.

“High quality” is a slippery term, and one whose definition can change abruptly from year to year, with last year’s innovative techniques being considered mundane by the next generation. What sorts of images could we achieve with the GPU’s power if we were not constrained by real-time considerations? Horsepower never goes out of style—today’s slow algorithm will eventually become tomorrow’s fast one. Even in today’s real-time applications, new GPUs are already capable of delivering image quality that would have been inaccessible only a year or two ago.

In Chapter 20, “Fast Third-Order Texture Filtering,” authors Christian Sigg of ETH Zurich and Markus Hadwiger of VRVis Research Center attack one of the fundamental challenges for all GPU-accelerated imaging: image filtering. They offer an efficient GPU-centric solution to complex filtering by leveraging the linear filtering already provided by GPUs. Their method delivers valid derivatives as well, with applications beyond simple 2D filtering into volume rendering and reconstruction of implicit surfaces.

Dan Wexler and Eric Enderton of NVIDIA, two of the authors of NVIDIA’s GPU-accelerated final-film renderer Gelato, also confront both 2D image filtering and 3D imaging. In Chapter 21, “High-Quality Antialiased Rasterization,” they describe their method for filtering large, tiled images. Their method, as used in Gelato, is well suited to highly complex rendering that is performed in a large number of tiled pieces—and at resolutions that may be far higher than the rendering capacity of a single GPU pass.

In Chapter 22, “Fast Prefiltered Lines,” Eric Chan and Frédo Durand of the Massachusetts Institute of Technology present an accelerated method for improving the quality of an ubiquitous graphics entity that many users don’t think about: simple lines. Chan and Durand draw lines using a CPU-prefiltered convolution that permits smooth line drawing from lookup table textures in the GPU, performed at interactive speeds. High-quality line drawing has application for game, CAD, and medical imaging, not just for 2D drawing but also for rendering such infamously problematic narrow 3D objects as telephone and power lines.

Hair-thin primitives come to the fore again with Chapter 23, “Hair Animation and Rendering in the Nalu Demo,” by Hubert Nguyen and William Donnelly of NVIDIA. They describe the breakthrough methods they employed for the animation and GPU rendering of “Nalu,” a real-time demo whose innovative use of lighting and shadow techniques challenges the look of some of the best non-real-time character rendering from films and TV.

Rendering 3D images isn’t the only application of GPUs in motion-picture production. In Chapter 24, “Using Lookup Tables to Accelerate Color Transformations,” Jeremy Selan of Sony Pictures Imageworks describes how complex color manipulations of 2D images—sourced from 3D renderings or live-action plates—can be performed in real time by GPUs for the purposes of compositing and real-time preview on a variety of output media.

In a similar vein, Pete Warden of Apple Computer describes in Chapter 25, “GPU Image Processing in Apple’s Motion,” a program that faced many of the same challenges and provided powerful real-time solutions on the desktops of professional and amateur video users. Warden’s experience with GPUs in a heterogeneous, media-rich environment may help lead the way to a graphics-intensive rethinking of the computer usage experience as a whole.

Simon Green of NVIDIA revisits and expands upon a topic from GPU Gems, revealing his methods in Chapter 26, “Implementing Improved Perlin Noise.” This GPU-friendly algorithm has application in both 2D and 3D imaging and delivers higher quality than the simple texture noise currently in vogue among game programmers.

Justin Novosad of discreet takes yet another view of image filtering in Chapter 27, “Advanced High-Quality Filtering.” He lays out a broad overview of the general problems of image reconstruction, and then he adds innovative ideas about image deblurring and even how to reduce live-action motion blur.

Finally, Climax Entertainment’s Iain Cantlay brings high-quality issues to enlightened game programmers in Chapter 28, “Mipmap-Level Measurement,” providing ideas and tools to help programmers manage the complex balances between image quality, memory consumption, and rendering speed—not just for individual still images but also how they play out dynamically in an active, in-game environment.

Today’s audiences—whether they are game players, movie watchers, or computer users—demand ever more rich, high-quality imagery, a trend that has been accelerating since at least the mid-1800s. It’s in the interests of every GPU programmer to stay aware of these soon-to-be-standard methods for ensuring the best experiences in all media for today and tomorrow.

Kevin Bjorke, NVIDIA