2nd Edition
Graphics Shaders Theory and Practice, Second Edition
Graphics Shaders: Theory and Practice is intended for a second course in computer graphics at the undergraduate or graduate level, introducing shader programming in general, but focusing on the GLSL shading language. While teaching how to write programmable shaders, the authors also teach and reinforce the fundamentals of computer graphics. The second edition has been updated to incorporate changes in the OpenGL API (OpenGL 4.x and GLSL 4.x0) and also has a chapter on the new tessellation shaders, including many practical examples.
The book starts with a quick review of the graphics pipeline, emphasizing features that are rarely taught in introductory courses, but are immediately exposed in shader work. It then covers shader-specific theory for vertex, tessellation, geometry, and fragment shaders using the GLSL 4.x0 shading language. The text also introduces the freely available glman tool that enables you to develop, test, and tune shaders separately from the applications that will use them. The authors explore how shaders can be used to support a wide variety of applications and present examples of shaders in 3D geometry, scientific visualization, geometry morphing, algorithmic art, and more.
Features of the Second Edition:
- Written using the most recent specification releases (OpenGL 4.x and GLSL 4.x0) including code examples brought up-to-date with the current standard of the GLSL language.
- More examples and more exercises
- A chapter on tessellation shaders
- An expanded Serious Fun chapter with examples that illustrate using shaders to produce fun effects
- A discussion of how to handle the major changes occurring in the OpenGL standard, and some C++ classes to help you manage that transition
The authors thoroughly explain the concepts, use sample code to describe details of the concepts, and then challenge you to extend the examples. They provide sample source code for many of the book’s examples at www.cgeducation.org
The Fixed-Function Graphics Pipeline
The Traditional View
How the Traditional View Is Implemented
Vertex Arrays
Conclusions
OpenGL Shader Evolution
History of Shaders
OpenGL Shader History
OpenGL ES
How Can You Respond to These Changes?
Our Approach in This Book
Fundamental Shader Concepts
Shaders in the Graphics Pipeline
The GLSL Shading Language
Passing Data from Your Application into Shaders
Using glman
Using glman
GLIB Scene Creation
More on Textures and Noise
Functions in the glman Interface Window
The GLSL Shader Language
Factors that Shape Shader Languages
General GLSL Language Concepts
Language Details
Compatibility Mode
Summary
Lighting
The ADS Lighting Model
Types of Lights
Setting Up Lighting for Shading
Vertex Shaders
Vertex Shaders in the Graphics Pipeline
Replacing Fixed-Function Graphics with Vertex Shaders
Going beyond the Fixed-Function Pipeline with Vertex Shaders
Vertex Modification
Issues in Vertex Shaders
Summary
Fragment Shaders and Surface Appearance
Basic Function of a Fragment Shader
Fragment Shader Processing
Replacing Fixed-Function Processing with Fragment Shaders
What Follows a Fragment Shader?
Additional Shader Effects
Surface Textures in the Fragment Shader
Texture Coordinates
Traditional Texture Mapping
GLSL Texture Mapping
Render to Texture
Render to Texture for Multipass Rendering in glman
Noise
Fundamental Noise Concepts
Other Noise Concepts
Some Examples of Noise in Different Environments
Advanced Noise Topics
Using Noisegraph
Image Manipulation with Shaders
Basic Concepts
Single-Image Manipulation
The Image Blending Process
Blending an Image with a Constant Base Image
Blending an Image with a Version of Itself
Blending Two Different Images
Notes
Geometry Shader Concepts and Examples
What Does the Geometry Shader Do?
Normals in Geometry Shaders
Examples
Tessellation Shaders
What Are Tessellation Shaders?
Tessellation Shader Concepts
Examples
Summary
The GLSL API
Shaders in the OpenGL Programming Process
How Is a GLSL Shader Program Created?
Creating and Compiling Shader Objects
Creating, Attaching, Linking, and Activating Shader Programs
Passing Data into Shaders
Using Shaders for Scientific Visualization
Image-Based Visualization Techniques
Hyperbolic Geometry
3D Scalar Data Visualization
More on Transfer Functions
Passing in Data Values with Your Geometry
Terrain Bump-Mapping
Flow Visualization
Geometry Visualization
Serious Fun
Light Interference
Lens Effects
Bathroom Glass
Atmospheric Effects
Fun with One
Using the glman Timer Function
Disco Ball
Fog, with and without Noise
Morphing 3D Geometry
Algorithmic Art
Making Information Visible through Motion
An Explosion Shader
Appendices
References
Index
Exercises appear at the end of each chapter.
Biography
Mike Bailey is a professor of computer science at Oregon State University. Dr. Bailey is a member of ACM, SIGGRAPH, IEEE, ASME. He earned a Ph.D. in computer graphics and computer aided design from Purdue University. His areas of interest include scientific visualization, high performance computer graphics, GPU programming, solid freeform fabrication, geometric modeling, and computer aided design and analysis.
Steve Cunningham is a professor emeritus of computer science at California State University Stanislaus. A member of ACM SIGGRAPH, ACM SIGCSE, and Eurographics, he has been actively engaged in computer graphics education for many years.
"If you are one of the multitudes of OpenGL programmers wondering about how to get started with programmable shaders or what they are good for, this is the book for you. Mike and Steve have filled their new edition with such a variety of interesting examples that you'll be running to your computer to begin writing your own shaders."
—Ed Angel, Chair, Board of Directors, Santa Fe Complex, Founding Director, Art, Research, Technology and Science Laboratory (ARTS Lab), Professor Emeritus of Computer Science, University of New Mexico"Shaders are an essential tool in today’s computer graphics, from films and games to science and industry. In this excellent book, Bailey and Cunningham not only clearly explain the how and why of shaders, but they provide a wealth of cutting-edge shaders and development tools. If you want to learn about shaders, this is the place to start!"
—Andrew Glassner
Praise for the First Edition:
"Bailey and Cunningham provide a comprehensive, well-written overview of graphics shaders. … Although the book uses the OpenGL Shading Language (GLSL) for its examples, it gives enough theoretical background for readers to learn the fundamentals for any graphics language. … The book also addresses scientific visualization and the GLSL API to call GLSL functions from an OpenGL program. A final chapter offers ideas for using shaders in very entertaining ways. … Highly recommended."
—C. Tappert, CHOICE, December 2009"… a pick for any college-level, advanced computer library catering to programming professionals. … discusses different types of shaders, how to use the glman program for free, and how to blend shaders into an interactive game environment. Libraries will find it a powerful, appealing lend for intermediate programmers seeking extra spice for their projects."
—Midwest Book Review, August 2009