Stories
Slash Boxes
Comments

News for nerds, stuff that matters

GPU Gems 3

Posted by samzenpus on Wed Oct 17, 2007 01:47 PM
from the read-all-about-it dept.
Martin Ecker writes "Weighing in at fifty pages short of a thousand, NVIDIA has recently released the third installment of its GPU Gems series, aptly titled "GPU Gems 3" published by Addison-Wesley Publishing. Just like the two previous books before it, GPU Gems 3 is a collection of articles by numerous authors from the game development industry, the offline rendering industry, academia, and of course NVIDIA. The 41 chapters of the book grouped into six parts discuss a wide range of topics, all dealing with recent advancements in using graphics processing units (GPUs, for short) to either render highly realistic images in real-time or do high-performance, parallel computation, an area that is called GPGPU (short for General Purpose computation on GPUs). In this latest installment of the series, the focus of a lot of the chapters is on using new hardware features of Direct3D 10-level hardware, such as NVIDIA's GeForce 8 series, to either get more realistic looking results or higher performance." Read on for the rest of Martin's review.
GPU Gems 3
author Huber Nguyen (Editor)
pages 942
publisher Addison-Wesley Publishing
rating 9/10
reviewer Martin Ecker
ISBN 0-321-51526-9
summary in-depth discussions of bleeding-edge techniques, tips, and tricks in real-time graphics and GPGPU.
The book is aimed at the intermediate and advanced graphics programmer that has a solid background in computer graphics algorithms. The reader is also expected to be familiar with commonly used real-time shading languages, in particular HLSL, which is used in most of the chapters. Familiarity with graphics APIs, such as Direct3D and OpenGL, is also required to get the most out of this book.

The first part of the book is about geometry with the first chapter diving right into generating complex procedural terrains on the GPU. This interesting chapter explains the techniques behind a recent NVIDIA demo that shows very nice, 3-dimensional, procedurally generated terrain using layering of multiple octaves of 3-dimensional noise. An interesting contribution of this chapter is how the authors texture the terrain avoiding the typical, ugly texture stretching that previous techniques exhibit. This is followed by a chapter on rendering a large amount of animated characters using new Direct3D 10 features, in particular the powerful geometry instancing that is now available. The author suggests doing palette skinning by storing bone matrices in animation textures instead of the traditional way where they are stored in shader constant registers. The next chapter is in a similar vein, but uses blend shapes aka morph targets instead of skinning to animate characters. In particular, the main focus is again on how to use Direct3D 10 features to accelerate blend shapes on the GPU. Other chapters in this part of the book are on rendering and animating trees, visualizing metaballs (also useful for rendering fluids), and adaptive mesh refinement in a vertex shader.

Part two of the book deals with light and shadows. For me personally, this is one of the most exciting parts of the book with very practical techniques that we are going to see applied fairly soon in video games. The first chapter is on summed-area variance shadow maps, an extension to the popular variance shadow maps algorithm that provides nice soft shadows without aliasing artifacts. The next chapter is on GPU-based relighting, which is mostly useful for fast previewing in offline rendering. Then we move on to a nice chapter on parallel-split shadow maps, which are a way of doing dynamic, large-scale environment shadows by splitting the view frustum into different parts and having a separate shadow map for each of them. Other chapters in this part of the book are on improved shadow volumes, high-quality ambient occlusion, which is an improvement of a technique previously presented in GPU Gems 2, and volumetric light scattering.

The third part of the book is on rendering techniques and it starts with a very interesting chapter on rendering realistic skin in real-time. This chapter with its more than fifty pages is one of the longest in the book, but it definitely deserves the space. I have never seen such realistic looking skin rendered in real-time before. The result is really astonishing and the authors go into detail of all the various techniques and tricks employed to achieve it. Simply put, they take a diffuse map and apply multiple Gaussian blurs of varying kernel sizes to it. These blurred images are then linearly combined using certain weights to get an approximation to a so-called diffusion profile, which is used to visualize subsurface scattering. Of course, the devil is in the details and the technique is a bit more complicated than what I've described here. Some other chapters in this part of the book are on capturing animated facial textures and storing them efficiently using principal component analysis (PCA) as used in recent EA Sports games, animating and shading vegetation in the upcoming game Crysis, and a way of doing relief mapping without the artifacts of previous methods.

Part four starts out with a chapter on true imposters, i.e. billboards generated by raytracing through a volumetric object on the GPU. It's fairly interesting but I doubt that we'll see it in video games anytime soon because the costs of this technique seem fairly high. Another chapter is on rendering large particle systems to lower resolution, off-screen buffers and then recombining them with the framebuffer as a post process. This technique allows for rendering very fill-rate intensive particle systems with good performance. Other chapters include an appeal to make sure you do your lighting calculations in linear space and be careful when and where gamma correction needs to be applied, followed by some chapters on post processing effects, in particular motion blur and depth of field, and a chapter co-authored by Jim Blinn himself on rendering vector fonts in high quality via pixel shaders.

With part five dealing with physics simulation on the GPU we enter GPGPU territory. While a lot of the techniques in this and the following part of the book are highly interesting and innovative, I doubt we'll be seeing them applied a lot in video games in the next year or two, simply because they use up a lot of GPU processing power and GPU memory that us game developers would rather spend on doing fancy graphics. The first chapter is on doing rigid body simulation on the GPU. The author uses spherical particles to represent rigid bodies, which greatly simplifies the collision detection even between the most complex shapes. The subsequent chapter is on simulating and rendering volumetric fluids entirely on the GPU. The authors apply fluid simulation to create realistic smoke, fire, and water effects. The presented technique is based on running a fluid simulator on a voxelized 3D volume stored in 3D textures. Also solid objects that interact with the fluid are voxelized on the fly on the GPU. To render the fluid a ray-marching algorithm is used. The remaining chapters of this part of the book discuss N-body simulation, broad-phase collision detection and convex collision detection with Lemke's algorithm for the linear complementarity problem. Many chapters of this part of the book use NVIDIA's new language for doing GPGPU called CUDA and the reader is expected to be familiar with it. CUDA is both a runtime system and a language based on C that eliminates the need to have in-depth knowledge of a graphics API in order to implement GPGPU algorithms.

The final part of the book is on GPU computing with chapters that show how to apply the incredible parallel computing power of modern GPUs to classic computation problems that are not directly related to either computer graphics or physics. One chapter demonstrates how to search for virus signatures on the GPU, effectively turning your graphics card into an antivirus scanner. Another chapter shows how to do AES encryption and decryption on the GPU, which is now possible thanks to the new generation of GPUs supporting integer operations in addition to floating-point operations. Other chapters deal with generating random numbers, computing the Gaussian, and using the geometry shader introduced with Direct3D 10 to implement computer vision algorithms on the GPU that previously were not possible with vertex and pixel shaders only, such as histogram building and corner detection.

One of the features that distinguishes the GPU Gems series from other graphics books was kept for GPU Gems 3: the high quality and large number of images and diagrams. All figures in the book are in color, and there are plenty of them. The book also comes with a DVD that has the sample source code to most of the techniques discussed in the book. A lot of these programs require Direct3D 10 hardware (and as consequence Windows Vista) to run. However, for most of these, demo videos are also made available so you can see how a technique looks like without having the latest hardware or operating system. Furthermore, the book's website offers a visual table of content and three sample chapters to download in PDF format.

As with the previous two GPU Gems books, most of the chapters in this book are fairly advanced and ahead of their time. A lot of the presented techniques are not yet practical for video games on current generation GPUs, simply because they use up all the computation power and/or memory that they have to offer. However, a lot of techniques from the previous two books are now commonly used and we can expect the same to be the case for many of the techniques discussed in this book. As such, it is required reading for any serious professional working in the real-time computer graphics industry.

Martin has been involved in real-time graphics programming for more than 10 years and works as a professional game developer for High Moon Studios in sunny California.

You can purchase GPU Gems 3 from amazon.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
This discussion has been archived. No new comments can be posted.
Display Options Threshold:
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
  • Oh Man... (Score:4, Funny)

    I was hoping it was a new version of Gems Desktop. I havent Upgraded my Amstrad PC 512 C in a while.
    • Re:Oh Man... by StikyPad (Score:2) Wednesday October 17, @11:16PM
    • 2 replies beneath your current threshold.
  • disappointed (Score:2)

    by User 956 (568564) on Wednesday October 17, @01:56PM (#21014383)
    (http://www.atomjax.com/)
    Weighing in at fifty pages short of a thousand, NVIDIA has recently released the third installment of its GPU Gems series

    It's a book? I was hoping for a GPU that's optimized for playing Bejeweled.
  • OpenGL please (Score:3, Insightful)

    by 2ms (232331) on Wednesday October 17, @02:10PM (#21014535)
    Dammit I hate to see all this DirectX10 emphasis. It's games only. I am a scientist and CAD user. Right now there is no laptop let alone "consumer" card in the world that can handle even the kind of CAD work a lot of people have to do. OpenGL was created for science. DirectX was a copy of a subset of it applicable only to games. And now all the graphics cards are focusing on the DirectX and neglecting OpenGL. Arg! This copy of OpenGL is short-circuiting advancement in the very thing 3D graphics were originally, you could say, invented for -- the thing they actually are useful for beyond plain entertainment. These cards cost hundreds of dollars but they can't handle an assembly with 100 parts in a CAD model simply because they barely have any OpenGL hardware in them. A car, airplane, etc has millions of parts.
    • Re:OpenGL please (Score:4, Insightful)

      by Xonstantine (947614) on Wednesday October 17, @02:24PM (#21014751)

      And now all the graphics cards are focusing on the DirectX and neglecting OpenGL
      Because that's where the money is. NVidia isn't a philantropic support organization (and, it goes with out saying, neither is Microsoft).

      These cards cost hundreds of dollars but they can't handle an assembly with 100 parts in a CAD model simply because they barely have any OpenGL hardware in them.
      Because there's very little money there.
      [ Parent ]
    • Re:OpenGL please by imasu (Score:1) Wednesday October 17, @02:39PM
    • Re:OpenGL please by Kjella (Score:2) Wednesday October 17, @02:44PM
    • Re:OpenGL please (Score:5, Informative)

      by n dot l (1099033) on Wednesday October 17, @02:48PM (#21015099)

      Dammit I hate to see all this DirectX10 emphasis. It's games only.
      The book is written for game developers, and none of the topics are exclusive to DX10 - NVIDIA has already released OpenGL extensions that offer the same functionality under OpenGL. The fact that the samples use DX10 is irrelevant because the API isn't the point. Anyone with a working knowledge of both DX and GL can translate code from one to the other fairly easily.

      Right now there is no laptop let alone "consumer" card in the world that can handle even the kind of CAD work a lot of people have to do.

      These cards cost hundreds of dollars but they can't handle an assembly with 100 parts in a CAD model simply because they barely have any OpenGL hardware in them. A car, airplane, etc has millions of parts.
      That's like comparing a pickup truck to a freight train. Consumer cards aren't designed to do CAD, they're designed to do games because (surprise!) they're sold to gamers. Workstation cards are made to do CAD. If you want to play the latest games, you get a 8800GTX. If you want to do CAD, or ultra high-poly modeling, or movie-quality animation, you get a Quadro FX. Or a FireGL if you prefer AMD/ATI.

      And now all the graphics cards are focusing on the DirectX and neglecting OpenGL.
      Graphics cards don't focus on either. Graphics cards focus on accelerating the sort of math that's common to all 3D rendering - transforming vertices, rasterizing triangles, and shading fragments (which are roughly analogous to pixels, for those of you that don't speak GL). Graphics drivers focus on DX or GL, and even in the consumer space you'd be stretching if you said that OpenGL is being neglected (see all the OpenGL extensions [opengl.org] that start with NV_ or ATI_ for proof).
      [ Parent ]
      • Re:OpenGL please by 2ms (Score:2) Wednesday October 17, @08:40PM
        • Re:OpenGL please (Score:4, Informative)

          by n dot l (1099033) on Wednesday October 17, @10:21PM (#21020509)

          Well I'm pleased to hear that NV and ATI are still working on OpenGL as much as they are DirectX if that's really the case.
          It certainly is. NVIDIA had OpenGL equivalents to the new DX10 features out in the very first release of its DX10 driver. So did ATI (though their first DX10 card came much later than NV's so they had more time to begin with). I don't think either will ever be ignored - and that's a good thing. Competition between the two APIs has yielded a lot of good innovation that's now been adopted into both.

          Are you really telling me that the only difference between a $1500 Quadro and gamer card is the drivers though? The bad-ass gamer card in my friend's computer chokes and can barely run at even the most basic animation of an of maybe 30 parts in CAD.
          No. There's much more to it than that, of course. It all comes down to usage. If you profile a video game and a CAD program you'll see that they stress completely different parts of the card. Workstation cards will have more silicon dedicated to things like the memory controller (CAD sends a lot more data across the bus each frame than a game does), whereas consumer cards put most of their power behind the shader processor (games use long and complex shaders to implement animation, lighting, shadowing, etc - CAD typically just shades everything with simple Phong lighting). There's a lot of other differences as well, though I'd rather not write a 10 page essay on the topic right now :)
          [ Parent ]
      • Re:OpenGL please by trigeek (Score:2) Wednesday October 17, @10:08PM
    • Re:OpenGL please (Score:5, Informative)

      by s_p_oneil (795792) on Wednesday October 17, @03:05PM (#21015415)
      (http://sponeil.net/)
      Actually, neither nVidia nor the editor chose DirectX.

      Each chapter is contributed by a different author, and each author decides which API to use. I wrote one of the chapters of GPU Gems 2 (see http://sponeil.net/ [sponeil.net]), and my chapter /demo used OpenGL. When I asked the guys at nVidia if they had a preference, they didn't care. They didn't even care whether I used nVidia's Cg or the standard GLSL. (I started with GLSL but switched to Cg because the GLSL compiler didn't optimize it well enough.)
      [ Parent ]
    • Re:OpenGL please (Score:4, Insightful)

      by everphilski (877346) on Wednesday October 17, @03:48PM (#21016045)
      (Last Journal: Tuesday June 06 2006, @01:50PM)
      I am a scientist and CAD user.

      Me too. I do CFD and 6DOF modeling and simulation. Guess what I wrote my last piece of CFD visualization software in? C# and DirectX 9.0c.
      I use OpenGL as well, for some things, but unless you can enlighten me what technical reason is there that you cannot use DirectX for scientific visualization? I can't think of one off of the top of my head. (For one, it's object-oriented...) In fact one of the reasons I like DirectX for CFD is the mesh class. If you are visualizing a flow, you are often looking at a mesh of an object, or cut through the flow. The mesh class in DirectX fully encapsulates the creation of a mesh, vertices, etc. With OpenGL you'd have to manage your own struct of data. Which is fine, but one more thing you have to debug.

      And now all the graphics cards are focusing on the DirectX and neglecting OpenGL. Arg!
      No, ARB... the OpenGL Architecture Review Board. Design by committee is slow. When was the last time you heard someone say deisgn by comittee was a good thing? :) The spec hasn't been updated meaningfully in ages (though the 3.0 spec is due soon ... I think ... dates keep getting pushed back). So there is nothing for the manufacturers to update!
      These cards cost hundreds of dollars but they can't handle an assembly with 100 parts in a CAD model simply because they barely have any OpenGL hardware in them.
      Sorry, they utilize the same hardware. OpenGL are DirectX are both API's to the same hardware on any given video card. Not being able to load 100 parts sounds like a problem ... you sure you aren't using a software renderer?
      [ Parent ]
    • Re:OpenGL please by AndOne (Score:1) Wednesday October 17, @03:51PM
    • Re:OpenGL please by pandaman9000 (Score:2) Wednesday October 17, @05:04PM
    • Re:OpenGL please by pandaman9000 (Score:1) Wednesday October 17, @05:18PM
    • Re:OpenGL please by Bobby Mahoney (Score:1) Wednesday October 17, @06:49PM
    • Re:OpenGL please by mdwh2 (Score:1) Wednesday October 17, @07:17PM
    • Re:OpenGL please by 2ms (Score:2) Wednesday October 17, @08:33PM
    • Re:OpenGL please by Mendy (Score:2) Friday October 19, @04:00AM
    • Re:OpenGL please by dasir (Score:1) Tuesday October 23, @01:43AM
    • Re:OpenGL please by Anonymous Coward (Score:1) Wednesday October 17, @03:19PM
    • Re:OpenGL please by Glock27 (Score:2) Thursday October 18, @08:01AM
    • 2 replies beneath your current threshold.
  • Open Source Gems? (Score:5, Interesting)

    by tji (74570) on Wednesday October 17, @02:18PM (#21014663)
    Are any OSS projects using these capabilities?

    As a non-gamer, I'm primarily interested in video acceleration.. XvMC is fairly limited, and I have seen talk of doing GPU acceleration, like GLSL, on the following OSS projects:

    MythTV
    MPlayer + ffmpeg
    VLC
    XBMC Linux

    Anyone know what the "state of the art" is for GPU accelerated video in open source?
  • by Chlorus (1146335) on Wednesday October 17, @03:12PM (#21015519)
    This is a bit off-topic, but does anyone know what happened exactly with OpenGL 3.0? I thought it was supposed to have released in September, but I've been unable to dig up any information as for the delay.
  • I saw a bunch of nvidia's nice desk-side gpus in a glassed-in projection room run by sgi at an industrial vr show. Being able to throw two or more at the data flow lets them drive a 4K image (of a sportscar), though even then it looked underpowered.

    But those little boxes (I guess this is the NVIDIA Quadro Plex series) go for over $20K each. At the current rate of progress, (when) will that drop in price and size to something that can fit inside a desktop or laptop, presumably with a giant asic one day? It will be sheer envy to buy this gorgeous book and have to deal with Vista, and still be underpowered. So I'd rather dream about a linux machine instead. What investment in linux/nvidia qudroplex will allow the book's high end procedures to work today?
  • The word is "unstable", and there are lots of people who aren't programmers, but can serve to support programmers by, I don't know, making documentation and collating information into something like, say, a book?
    [ Parent ]
    • 1 reply beneath your current threshold.
  • 4 replies beneath your current threshold.