||New Reviews| |Software Methodologies| |Popular Science| |AI/Machine Learning| |Programming| |Java| |Linux/Open Source| |XML| |Software Tools| |Other| |Web| |Tutorials| |All By Date| |All By Title| |Resources| |About||
Keywords: Graphics programming, C, C++, Cg, HLSL
Title: GPU Gems: Programming Techniques, Tips, and Tricks for Real-time GraphicsEditor: Randima Fernando
Publisher: Addison Wesley
Media: Book and CD
Verdict: Good range of topics, but could have done with more depth of material
'GPU Gems', edited by Randima Fernando, is a collection of white papers describing techniques and practical applications useful in today's programmable graphical processing units. The full color hardcover text is 816 pages and includes a CD-ROM that includes working demos and source for most of the articles presented in the book.
The text is divided into six major sections: natural effects, lighting and shadows, materials, image progressing, performance and practicalities, and beyond triangles. Each section has anywhere between 5 to 9 chapters (for an overall total of 42 chapters). The chapters are separate white papers related to the overall section's major topic. For example, the natural effects section contains chapters on water caustics, Perlin noise, creating realistic fire, and diffraction just to name a few.
Generally, each chapter has an introduction, a background with some mathematics, an implementation (occasionally with some partial source code), a conclusion, and key references. While a different author writes each chapter, the overall feel of the book is consistent and smooth. The chapters read very similar to a SIGGRAPH paper without as much math or specific detail.
Take for example, the chapter on stereograms - a process by which a 2D image encodes stereo information that when viewed correctly reveals a 3D scene. The chapter has brief background section that includes several helpful color examples. The author discusses how to create such an image using the fragment program capabilities of a GPU using the z-buffer as a depth map and provides a demo program on the CD. Many of the articles follow the same format - enough of a topic to provide understanding, but not enough depth to be comprehensive or fully instructional.
The topics presented are very up-to-date. Many of the samples provided on the CD require the latest video hardware (GeForce4 or better) and drivers to run. 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.
The majority of the contributors are from the Nvidia Corporation which causes the book to bias toward their hardware and developer tools. In fact, one of the chapters features 'FX Composer', Nvidia's shader tool. The source code is a mixture of different shader languages from Microsoft's HLSL to Nvidia's Cg - with various authors using whatever was comfortable or convenient. Although the majority of the material presented is applicable to other hardware, it is critical to have a broad understanding of various shader languages if porting to specific hardware is important.
The wide range of subjects quite interesting - and it was refreshed that the topics actually seemed "ahead of the curve" in terms of hardware requirements. However the book could have been split into two volumes to cover the existing material in 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.