GPU Gems
The book is intended for an audience already familiar with programmable GPUs and high-level shading languages and is divided into six parts that concentrate on particular domains of graphics programming. Each part contains between five andd nine chapters, with the entire book containing a total of 42 chapters. Each chapter was written by a different renowned expert(s) from a gaming company, tool developer, film studio, or the academic community. About half of the contributors are from NVIDIA's Developer Technology group. The chapters focus on effects and techniques that help developers to get the most out of current programmable graphics hardware. With approximately twenty pages per chapter, the contributors are able to describe various effects and techniques in-depth, as well as delve into the required mathematics.
All the shaders in the book are written in the high-level shading languages Cg and HLSL. The demo programs on the CD-ROM that accompanies the book use both Direct3D and OpenGL as graphics API, depending on the authors' preferences. Even though the shaders are in Cg and HLSL, it should be fairly straightforward for OpenGL programmers who might prefer to use the recently released OpenGL Shading Language to port the shaders, as the syntax is very similar.
The first part of the book deals with natural effects and contains chapters on rendering realistic water surfaces, water caustics, flames, and grass. Two chapters look behind the scenes of NVIDIA's Dawn demo, which shows a dancing fairy with realistically lit skin. There is also a chapter on Perlin noise (improved version) and its implementation on GPUs that was written by Ken Perlin himself.
The second part of the book concentrates on lighting and shadows. There are chapters from people at Pixar Animation Studios that describe some of the lighting and shadow techniques used in their computer-generated movie productions, as well as a chapter on managing visibility for per-pixel lighting. In the shadow department, the two predominant ways of rendering shadows in real-time, shadow mapping and shadow volumes, are discussed with possible optimizations and improvements. The chapter by Simon Kozlov on methods to improve perspective shadow maps presents some especially interesting new material on the topic.
The third part of the book covers materials and contains chapters on subsurface scattering, ambient occlusion, image-based lighting, spatial BRDFs, and how to use them efficiently in real-time, while part four describes various techniques for image processing (being used more frequently in computer games), mostly in the form of post-processing filters. The chapters presented in this section deal with various depth-of-field techniques, a number of filtering techniques using shaders, and the real-time glow effect seen in many of the newer games (especially in Tron 2.0). Not surprisingly, one of the authors of this chapter is John O'Rorke from Monolith Productions, a developer of the game. Contributors from Industrial Light & Magic introduce the OpenEXR file format used for storing high-dynamic-range image files (see openexr.org).
Part five, titled "Perfomance and Practicalities," is a collection of chapters that deal more with software engineering aspects of developing software that uses shaders. In particular, there are chapters on optimizing performance and detecting bottlenecks, using occlusion queries efficiently, integrating shaders into applications and content creation packages (in particular Cinema4D), and how to develop shaders using NVIDIA's FX Composer tool. There is also an interesting chapter on converting shaders written in the RenderMan shading language, a language for offline rendering, to real-time shaders. The chapter uses a fur shader from the movie "Stuart Little" to demonstrate this conversion. With the large increase of GPU processing power, more shaders from the offline rendering world will enter the realm of real-time graphics and it will be useful to re-use already existing resources, such as RenderMan shaders.
The final part of the book deals with a topic that has recently received a lot of attention by graphics researchers - a topic called General Purpose GPU or GPGPU programming, i.e. using the GPU for other things than rendering triangles. This part comprises chapters on performing computations, in particular fluid dynamics, on the GPU, chapters on volume rendering, and a nice chapter on generating stereograms on the GPU. As a side note, there is a website that deals exclusively with news in the GPGPU community at gpgpu.org.
The book contains a many images that show the presented effects in action, and also plenty of diagrams and illustrations that explain more complicated techniques in detail. Unlike Randima Fernando's previously released book, The Cg Tutorial, which I have also reviewed in the past on Slashdot, the book and all of its illustrations and images are printed entirely in color. The large number and high quality of the illustrations is probably one of the best features of this book that makes even the more advanced effects easily comprehensible.
The book comes with a CD-ROM that contains sample applications for most of the chapters in the book. Some of these applications include the full source code, whereas others, such as NVIDIA's Dawn demo (also described in some of the book's chapters), are included as executables only. It must be noted that all applications run exclusively on Windows, even though some of the samples that are available in source code form and use OpenGL could probably be built to run on other operating systems as well. Furthermore, about half of the samples require what Fernando and Kilgard in The Cg Tutorial call a fourth-generation graphics card to run, in particular, an NVIDIA GeForceFX card. Note that most samples that require a GeforceFX will not run on comparable ATI hardware. This comes as no surprise since GPU Gems is predominantly an NVIDIA book. It should be noted, however, that the techniques, effects, and shaders presented in the book's text are generally applicable to programmable GPUs and are equally useful when working with graphics hardware from vendors other than NVIDIA.
This is a great book that every programmer involved in game development and/or real-time computer graphics should have on his/her shelf. For the game programmer it is critical to stay up-to-date with the latest and greatest effects available with modern GPUs in order to remain competitive when creating the gaming experience. For the graphics developer, it is interesting to see how the immense processing power of current graphics hardware can be exploited in graphics applications. This book offers insight on both of these topics and more, and I highly recommend it.
A few notes from reader Akalgonov: Reader akalgonov contributes a few more thoughts on the book:
"The sample programs and demos require shader support, Cg, OpenGL, or the latest version of DirectX to run. On the plus side, the majority of the companion topics included pre-compiled binaries (but not the runtime dynamic link libraries) or an AVI illustrating the subject in addition to the source code. While the CD contains over 600 MB of examples from the text, it provided only 23 of the 42 topics covered in the book. Since most of the articles provide an overview and references to a topic, additional material on the CD would have been beneficial.
I found the wide range of subjects quite interesting - and was refreshed that the topics actually seemed "ahead of the curve" in terms of hardware requirements. However in order to provide more subject depth, it seemed that the text could have been split into two volumes in order to expand the existing chapters with sufficient depth. As the material is just enough to get one started, the subject treatment may disappoint some readers seeking to apply the clever and unique techniques presented in the book directly or those hoping to use the book as an opportunity to learn some of the advanced features provided in a programming graphical processing unit."
Martin Ecker has been involved in real-time graphics programming for more than 9 years and works as a games developer for arcade games, and works on the open source project XEngine. You can purchase GPU Gems -- Programming Techniques, Tips, and Tricks for Real-Time Graphics from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.
for first post!
Did i Make it??
And here I thought this was about making jewelry out of your old video card.
"Have you ever thought about just turning off the TV, sitting down with your kids, and hitting them?"
...you insensitive clod!
What It Means to be a Liberal.
... in short, you support protecting the guilty and killing the innocent.
The other day I found myself very puzzled.
I know what I believe, why I believe it, the philosophical foundations of my beliefs. I've studied everything from Karl Marx to Ludwig von Mises, from Friedrich Hayek to FDR, from Edmund Burke to Bertrand Russell, from Aristotle to Ayn Rand.
I understand modern conservative thought. I understand libertarian thought. I understand classical liberalism. What I can't begin to comprehend is modern liberalism. Maybe you can help me. As near as I can tell, to be a liberal:
You have to believe the AIDS virus is spread by a lack of funding.
IF there is a church that is valid, it has been pre-approved by the government.
You have to be against capital punishment but for abortion on demand
You have to believe that the same public school idiot who can't teach 4th graders how to read is qualified to teach those same kids about sex.
You have to believe that trial lawyers are selfless heroes and doctors are overpaid.
You have to believe that guns in the hands of law-abiding Americans are more of a threat than nuclear weapons in the hands of the Red Chinese.
You have to believe that global temperatures are less affected by cyclical, documented changes in the brilliance of the Sun, and more affected by yuppies driving SUVs.
You have to believe that gender roles are artificial but being gay is natural.
You have to believe that businesses create oppression and governments create prosperity.
You have to believe that hunters don't care about nature but pasty, fey activists who've never been outside Seattle do.
You have to believe that self-esteem is more important than actually doing something to earn it.
You have to believe there was no art before federal funding.
You have to believe the military, not corrupt politicians, start wars.
You have to believe the free market that gives us 500+ channels can't deliver the quality that PBS does.
You have to believe the NRA is bad, because they stand up for certain parts of the Constitution, while the ACLU is good, because they stand up for certain parts of the Constitution.
You have to believe that taxes are too low but ATM fees are too high.
You have to believe that Harriet Tubman, Cesar Chavez and Gloria Steinem are more important to American history than Thomas Jefferson, General Robert E. Lee or Thomas Edison.
You have to believe that standardized tests are racist, but racial quotas and set-asides aren't.
You have to believe second-hand smoke is more dangerous than HIV.
You have to believe Hillary Clinton is really a lady and Rosie O'Donnell is not really a man who is jealous of Tom Selleck.
You have to believe conservatives are racists but that black people couldn't make it without your help.
You have to believe that the only reason socialism hasn't worked anywhere it's been tried is because the right people haven't been in charge.
Looking back on my list, it seems shallow, muddled, contradictory, divorced of logic and a bit sadistic.
Well, then. If that doesn't describe the modern liberal, I don't know what does.
I'd really like to switch fields, but have always thought graphics top be a very tough field, not many people in it, very competitive, etc.
Anyone know?
And don't even get me started on the clear, crisp sounds of the SID chip!
The CB App. What's your 20?
I think it involves poo
It must involve Open Source then. Or linux.
Profitting off slashdot. You == asshat.
It would be hilarious if Kerry and his family was NOT Jewish and if he had NOT pledged his allegiance to the Zionist agenda by equating Israel's interests with American interests.