Writing a book requires a lot of time and effort. Sometimes authors refer to the finished product as "a labor of love." I have to say that for me, writing this book has been "a labor of fun."
I have been fortunate to participate in a major architectural revolution in computer graphics hardware. In the last few years, consumer graphics hardware has undergone a sea changefrom pure fixed functionality to almost complete user programmability. In many ways, this time feels like the late 1970s and early 1980s, when significant advances were being made in computer graphics at places like the University of Utah, NYU, Lucasfilm, JPL, UNC, and Cornell. The difference this time is that graphics hardware is now cheap enough and fast enough that you don't have to work at a research institute or attend an elite graduate school to play with it. You can explore the brave new world on your own personal computer.
It is relatively rare to participate in establishing even one industry standard, but I have had the good fortune to play a role in the definition of three important graphics standards. First was PEX in the late 1980s. Next was OpenGL in the early 1990s, and now, the OpenGL Shading Language in the first years of the new millennium. These efforts have been gratifying to me because they provide graphics hardware capabilities to people in an industry-standard way. Applications written to a standard are portable, and therefore the technology they are built on is accessible to a wider audience.
It's been a labor of fun because it is a lot of fun and truly remarkable to be one of the first people to implement classic rendering algorithms by using a high-level language on low-cost but high-performance graphics hardware. When our team first got the brick shader running on 3Dlabs Wildcat VP graphics hardware, it was a jaw-dropping "Wow!" moment. A similar feeling occurred when I got a shader I was developing to run successfully for the first time or saw, working for the first time, a shader written by someone else in the group. It seems to me that this feeling must be similar to that felt by the graphics pioneers 2025 years ago when they got the first successful results from their new algorithms. And it is great fun to hear from end users who experience those same sorts of jaw-dropping "Wow!" moments.
Because of the architectural revolution in consumer graphics hardware, today, people like you and me can quickly and easily write shaders that implement the rendering algorithms devised 20 years ago by the pioneers of computer graphics. To implement bump mapping, we looked up Blinn's 1978 paper, and to implement particle systems, we looked at Reeves's 1983 paper. I chuckled to myself when I saw the hand-drawn diagrams in Alvy Ray Smith's 1983 memo on digital filtering. Images that took hours to generate then take milliseconds to render today. And shader code that took weeks to develop can now be written in minutes with a high-level shading language developed specifically for this task. It is mind-boggling to think how painstaking it must have been for Mandelbrot to generate images of his famous set in the late 1970s, compared to how easy it is to do today with the OpenGL Shading Language.
And part of the reason that I've so enjoyed writing this book is that I know there are significant new discoveries to be made in the area of computer graphics. If someone like me can simply and easily implement rendering algorithms that previously could run only on software on CPUs, imagine how much more is possible with the programmable graphics hardware that is available today. The availability of low-cost programmable graphics hardware makes it possible for many more people to experiment with new rendering techniques. Algorithms of much higher complexity can be developed. And I know that some of you out there will invent some exciting new rendering techniques when using the OpenGL Shading Language. This technology is moving rapidly to handheld devices such as PDAs and cell phones. A version of the OpenGL Shading Language for embedded devices was approved as part of OpenGL ES in the summer of 2005. That means that millions of devices will soon be running applications that use GLSL to unlock the power of the underlying programmable graphics hardware.
My mission in writing this book has been to educate you and, perhaps more important, to try to open your eyes to the rendering possibilities that exist beyond the fixed functionality with which we've been shackled for so many years. In my view, there's no longer any reason to continue to use the fixed functionality of OpenGL. Everyone should be writing shaders to render things the way they want instead of the way the fixed functionality graphics hardware has allowed. I encourage you to think outside the box, explore new ways of getting pixels on the screen, and share your discoveries with others. If you want, you can send your discoveries to me at firstname.lastname@example.org and I'll make them available to others on my Web site.
Keep on pushing the pixels, and best of luck in all your rendering endeavors!