OpenGL. Shading Language. Third Edition

Similar documents
Programming Guide. Aaftab Munshi Dan Ginsburg Dave Shreiner. TT r^addison-wesley

OpenGL SUPERBIBLE. Fifth Edition. Comprehensive Tutorial and Reference. Richard S. Wright, Jr. Nicholas Haemel Graham Sellers Benjamin Lipchak

Graphics Shaders. Theory and Practice. Second Edition. Mike Bailey. Steve Cunningham. CRC Press. Taylor&FnincIs Croup tootutor London New York

Shaders. Slide credit to Prof. Zwicker

Introduction to the OpenGL Shading Language

Programming shaders & GPUs Christian Miller CS Fall 2011

Technical Game Development II. Reference: Rost, OpenGL Shading Language, 2nd Ed., AW, 2006 The Orange Book Also take CS 4731 Computer Graphics

CHAPTER 1 Graphics Systems and Models 3

COMP371 COMPUTER GRAPHICS

Technical Game Development II. Reference: Rost, OpenGL Shading Language, 2nd Ed., AW, 2006 The Orange Book Also take CS 4731 Computer Graphics

GPU Shader Library. Mali. User Guide. Version: 1.0. Copyright 2009 ARM. All rights reserved. ARM DUI 0510A (ID101409)

SQL Queries. for. Mere Mortals. Third Edition. A Hands-On Guide to Data Manipulation in SQL. John L. Viescas Michael J. Hernandez

The Unified Modeling Language User Guide

Copyright Khronos Group 2012 Page 1. Teaching GL. Dave Shreiner Director, Graphics and GPU Computing, ARM 1 December 2012

Technical Game Development II. Reference: Rost, OpenGL Shading Language, 2nd Ed., AW, 2006 The Orange Book IMGD 4000 (D 10) 1

PYTHON. p ykos vtawynivis. Second eciitiovl. CO Ve, WESLEY J. CHUN

Lecture 09: Shaders (Part 1)

Interactive Computer Graphics A TOP-DOWN APPROACH WITH SHADER-BASED OPENGL

Lecture 2. Shaders, GLSL and GPGPU

Introduction to Computer Graphics

CS 354R: Computer Game Technology

Introduction to Shaders.

Framework Design Guidelines

Shader Programs. Lecture 30 Subsections 2.8.2, Robb T. Koether. Hampden-Sydney College. Wed, Nov 16, 2011

CS475/CS675 - Computer Graphics. OpenGL Drawing

ECLIPSE RICH CLIENT PLATFORM

Quality Code. Software Testing Principles, Practices, and Patterns. Stephen Vance. AAddison-Wesley

Real - Time Rendering. Graphics pipeline. Michal Červeňanský Juraj Starinský

\ Smart Client 0" Deploymentwith v^ ClickOnce

Programming in Python 3

GLOBAL EDITION. Interactive Computer Graphics. A Top-Down Approach with WebGL SEVENTH EDITION. Edward Angel Dave Shreiner

Shading Languages. Ari Silvennoinen Apri 12, 2004

Engineering Real- Time Applications with Wild Magic

I think this assignment should have 8 objectives but we should still mark it out of 10. The Mean TA.

Fit for Developing Software

CSE 167: Lecture #8: GLSL. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

Programmable Graphics Hardware

CS451Real-time Rendering Pipeline

12.2 Programmable Graphics Hardware

Refactoring HTML. Improving the Design of Existing Web Applications. Elliotte Rusty Harold. TT rvaddison-wesley

X. GPU Programming. Jacobs University Visualization and Computer Graphics Lab : Advanced Graphics - Chapter X 1

Programming. In Ada JOHN BARNES TT ADDISON-WESLEY

Programming with OpenGL Part 3: Shaders. Ed Angel Professor of Emeritus of Computer Science University of New Mexico

GLSL: Creating GLSL Programs - Overview

Introduction to 3D Graphics

We assume that you are familiar with the following:

Advanced Graphics. The Shader knows. Alex Benton, University of Cambridge Supported in part by Google UK, Ltd

Application Programming

Graphics Hardware. Instructor Stephen J. Guy

Lecture 5 Vertex and Fragment Shaders-1. CITS3003 Graphics & Animation

MariaDB Crash Course. A Addison-Wesley. Ben Forta. Upper Saddle River, NJ Boston. Indianapolis. Singapore Mexico City. Cape Town Sydney.

Programming with OpenGL Shaders I. Adapted From: Ed Angel Professor of Emeritus of Computer Science University of New Mexico

Cloud Computing and SOA Convergence in Your Enterprise

Shaders CSCI 4239/5239 Advanced Computer Graphics Spring 2014

CMSC427 Advanced shading getting global illumination by local methods. Credit: slides Prof. Zwicker

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

Programming. Principles and Practice Using C++ Bjarne Stroustrup. / Addison-Wesley. Second Edition

OpenGL Programmable Shaders

Grafica Computazionale: Lezione 30. Grafica Computazionale. Hiding complexity... ;) Introduction to OpenGL. lezione30 Introduction to OpenGL

Computer Animation. Algorithms and Techniques. z< MORGAN KAUFMANN PUBLISHERS. Rick Parent Ohio State University AN IMPRINT OF ELSEVIER SCIENCE

World Wide Web PROGRAMMING THE PEARSON EIGHTH EDITION. University of Colorado at Colorado Springs

Chapter 7 - Light, Materials, Appearance

Rasterization Overview

Shaders CSCI 4229/5229 Computer Graphics Fall 2017

Programmable Graphics Hardware

Programmable Shading. University of Texas at Austin CS354 - Computer Graphics

Supplement to Lecture 22

Computer Graphics: Programming, Problem Solving, and Visual Communication

CMPS160 Shader-based OpenGL Programming. All slides originally from Prabath Gunawardane, et al. unless noted otherwise

The Graphics Pipeline

CS230 : Computer Graphics Lecture 4. Tamar Shinar Computer Science & Engineering UC Riverside

OpenGL SC. March Sean Harmer Managing Director UK

Programmable Graphics Hardware

CSE 167: Introduction to Computer Graphics Lecture #7: GLSL. Jürgen P. Schulze, Ph.D. University of California, San Diego Spring Quarter 2016

OpenGL Status - November 2013 G-Truc Creation

Shaders (some slides taken from David M. course)

Digital System Design with SystemVerilog

Programming Wireless Devices with the Java 2 Platform, Micro Edition

TSBK03 Screen-Space Ambient Occlusion

PROFESSIONAL. WebGL Programming DEVELOPING 3D GRAPHICS FOR THE WEB. Andreas Anyuru WILEY. John Wiley & Sons, Ltd.

DEFERRED RENDERING STEFAN MÜLLER ARISONA, ETH ZURICH SMA/

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

1.2.3 The Graphics Hardware Pipeline

We will use WebGL 1.0. WebGL 2.0 is now being supported by most browsers but requires a better GPU so may not run on older computers or on most cell

C P S C 314 S H A D E R S, O P E N G L, & J S RENDERING PIPELINE. Mikhail Bessmeltsev

Programming with OpenGL Shaders I. Adapted From: Ed Angel Professor of Emeritus of Computer Science University of New Mexico

Screen Space Ambient Occlusion TSBK03: Advanced Game Programming

Deferred Rendering Due: Wednesday November 15 at 10pm

Programming Graphics Hardware

Pipeline Operations. CS 4620 Lecture 14

3D Programming. 3D Programming Concepts. Outline. 3D Concepts. 3D Concepts -- Coordinate Systems. 3D Concepts Displaying 3D Models

Hardware Shading: State-of-the-Art and Future Challenges

Texture Mapping. CS 537 Interactive Computer Graphics Prof. David E. Breen Department of Computer Science

Xcode 6 Start to Finish

CSE 167: Introduction to Computer Graphics Lecture #6: Lights. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2014

Systems:;-'./'--'.; r. Ramez Elmasri Department of Computer Science and Engineering The University of Texas at Arlington

Building scalable 3D applications. Ville Miettinen Hybrid Graphics

CS 4620 Program 3: Pipeline

Mobile Application Programing: Android. OpenGL Operation

Developer's HTML5. Cookbook. AAddison-Wesley. Chuck Hudson. Tom Leadbetter. Upper Saddle River, NJ Boston Indianapolis San Francisco

Transcription:

OpenGL Shading Language Third Edition

OpenGL* Shading Language Third Edition Randi J. Rost Bill Licea-Kane With contributions by Dan Ginsburg, John M. Kessenich, Barthold Lichtenbelt, Hugh Malan, and Mike Weiblen r\addison-wesley T Upper Saddle River, NJ Boston Indianapolis San Francisco New York Toronto Montreal London Munich Paris Madrid Capetown Sydney Tokyo Singapore Mexico City

Contents Foreword to the Second Edition Foreword to the First Edition Preface About the Authors About the Contributors Acknowledgments xxi xxv xxix xxxv xxxvii xxxix Chapter 1. Review of OpenGL Basics 1 1.1 OpenGL History 1 1.2 OpenGL Evolution 4 1.3 Execution Model 5 1.4 The Framebuffer 6 1.5 State 9 1.6 Processing Pipeline 9 1.7 Drawing Geometry 11 1.7.1 Geometry Specification 11 1.7.2 Per-Vertex Operations 13 1.7.3 Primitive Assembly 15 1.7.4 Primitive Processing 15 1.7.5 Rasterization 16 1.7.6 Fragment Processing 17 1.7.7 Per-Fragment Operations 18 1.7.8 Framebuffer Operations 18 1.8 Drawing Images 19 1.8.1 Pixel Unpacking 20 IX

Contents 1.8.2 Pixel Transfer 20 1.8.3 Rasterization and Back-End Processing 21 1.8.4 Read Control 22 1.9 Coordinate Transforms 22 1.10 Texturing 27 1.11 Summary 33 1.12 Further Information 33 Chapter 2. Basics 35 2.1 Introduction to the OpenGL Shading Language 35 2.2 Why Write Shaders? 37 2.3 OpenGL Programmable Processors 38 2.3.1 Vertex Processor 40 2.3.2 Fragment Processor 43 2.4 Language Overview 47 2.4.1 Language Design Considerations 47 2.4.2 C Basis 50 2.4.3 Additions to C 50 2.4.4 Additions from C++ 52 2.4.5 C Features Not Supported 53 2.4.6 Other Differences 53 2.5 System Overview 54 2.5.1 Driver Model 54 2.5.2 OpenGL Shading Language Compiler/Linker 56 2.5.3 OpenGL Shading Language API 57 2.6 Key Benefits 59 2.7 Summary 61 2.8 Further Information 63 Chapter 3. Language Definition 65 3.1 Example Shader Pair 65 3.2 Data Types 67 3.2.1 Scalars 68 3.2.2 Vectors 69 3.2.3 Matrices 70 3.2.4 Samplers 71 3.2.5 Structures 73 3.2.6 Arrays 74 3.2.7 Void 75

Contents xi 3.2.8 Declarations and Scope 75 3.2.9 Type Matching and Promotion 76 3.3 Initializers and Constructors 76 3.4 Type Conversions 78 3.5 Qualifiers and Interface to a Shader 79 3.5.1 Uniform Qualifiers 80 3.5.2 Uniform Blocks 81 3.5.3 In Qualifiers (Vertex Shader) 82 3.5.4 Out Qualifiers (Vertex Shader) 82 3.5.5 In Qualifiers (Fragment Shader) 83 3.5.6 Out Qualifiers (Fragment Shader) 83 3.5.7 Constant Qualifiers 83 3.5.8 Absent Qualifier 84 3.6 Flow Control 84 3.6.1 Functions 85 3.6.2 Calling Conventions 86 3.6.3 Built-in Functions 87 3.7 Operations 88 3.7.1 Indexing 89 3.7.2 Swizzling 90 3.7.3 Component-wise Operation 90 3.8 Preprocessor 93 3.9 Preprocessor Expressions 96 3.10 Error Handling 97 3.11 Summary 98 3.12 Further Information 98 Chapter 4. The OpenGL Programmable Pipeline 101 4.1 The Vertex Processor 102 4.1.1 Vertex Attributes 103 4.1.2 Special Input Variables 104 4.1.3 Uniform Variables 104 4.1.4 User-Defined Out Variables 104 4.1.5 Special Output Variables 105 4.2 The Fragment Processor 106 4.2.1 User-Defined In Variables 107 4.2.2 Special Input Variables 107 4.2.3 Uniform Variables 108 4.2.4 User-Defined Out Variables 108 4.2.5 Special Output Variables 109

xii Contents 4.3 Built-in Uniform Variables 110 4.4 Built-in Constants 110 4.5 Interaction with OpenGL Fixed Functionality Ill 4.5.1 Point Size Mode Ill 4.5.2 Clipping 112 4.5.3 Position Invariance 113 4.5.4 Texturing 113 4.6 Summary 115 4.7 Further Information 115 Chapter 5. Built-in Functions 117 5.1 Angle and Trigonometry Functions 118 5.2 Exponential Functions 121 5.3 Common Functions 122 5.4 Geometric Functions 134 5.5 Matrix Functions 136 5.6 Vector Relational Functions 138 5.7 Texture Access Functions 140 5.8 Fragment Processing Functions 176 5.9 Noise Functions 177 5.10 Summary 178 5.11 Further Information 178 Chapter 6. Simple Shading Example 181 6.1 Brick Shader Overview 182 6.2 Vertex Shader 183 6.3 Fragment Shader 189 6.4 Observations 196 6.5 Summary 197 6.6 Further Information 197 Chapter 7. OpenGL Shading Language API 199 7.1 Obtaining Version Information 200 7.2 Creating Shader Objects 203 7.3 Compiling Shader Objects 204 7.4 Linking and Using Shaders 205 7.5 Cleaning Up 210 7.6 Query Functions 211 7.7 Specifying Vertex Attributes 217

Contents xiii 7.8 Specifying Uniform Variables 226 7.8.1 Default Uniform Block 227 7.8.2 Named Uniform Blocks 234 7.9 Samplers 238 7.10 Multiple Render Targets 239 7.11 Development Aids 240 7.12 Implementation-Dependent API Values 241 7.13 Application Code for Brick Shaders 242 7.14 Summary 247 7.15 Further Information 248 Chapter 8. Shader Development 251 8.1 General Principles 251 8.1.1 Understand the Problem 252 8.1.2 Add Complexity Progressively 252 8.1.3 Test and Iterate 253 8.1.4 Strive for Simplicity 253 8.1.5 Exploit Modularity 253 8.2 Performance Considerations 254 8.2.1 Consider Computational Frequency 254 8.2.2 Analyze Your Algorithm 255 8.2.3 Use the Built-in Functions 255 8.2.4 Use Vectors 255 8.2.5 Use Textures to Encode Complex Functions 256 8.2.6 Review the Information Logs 256 8.3 Shader Debugging 256 8.3.1 Use the Vertex Shader Output 256 8.3.2 Use the Fragment Shader Output 257 8.3.3 Use Simple Geometry 258 8.4 Shader Development Tools 258 8.4.1 RenderMonkey 258 8.4.2 Apple GLSLEditorSample 261 8.4.3 Graphic Remedy gdebugger 261 8.4.4 OpenGL Shading Language Compiler Front End... 261 8.5 Scene Graphs 263 8.6 Summary 266 8.7 Further Information 266

xiv Contents Chapter 9. Emulating OpenGL Fixed Functionality 269 9.1 Transformation 270 9.2 Light Sources 273 9.2.1 Directional Lights 273 9.2.2 Point Lights 274 9.2.3 Spotlights 276 9.3 Material Properties and Lighting 277 9.4 Two-Sided Lighting 279 9.5 No Lighting 280 9.6 Fog 281 9.7 Texture Coordinate Generation 283 9.8 User Clipping 286 9.9 Texture Application 286 9.10 Matrices 288 9.10.1 Identity Matrix 288 9.10.2 Scale 288 9.10.3 Translate 289 9.10.4 Rotate 289 9.10.5 Ortho 290 9.10.6 Frustum 290 9.11 Operating on the Current Matrices 291 9.11.1 A Simple Matrix Transformation Example 293 9.12 Summary 294 9.13 Further Information 294 Chapter 10. Stored Texture Shaders 297 10.1 Access to Texture Maps from a Shader 298 10.2 Simple Texturing Example 300 10.2.1 Application Setup 301 10.2.2 Vertex Shader 302 10.2.3 Fragment Shader 303 10.3 Multitexturing Example 303 10.3.1 Application Setup 305 10.3.2 Vertex Shader 306 10.3.3 Fragment Shader 307 10.4 Cube Mapping Example 309 10.4.1 Application Setup 310 10.4.2 Vertex Shader 310 10.4.3 Fragment Shader 311

Contents XV 10.5 Another Environment Mapping Example 312 10.5.1 Vertex Shader 313 10.5.2 Fragment Shader 314 10.6 Glyph Bombing 316 10.6.1 Application Setup 317 10.6.2 Vertex Shader 321 10.6.3 Fragment Shader 322 10.7 Summary 326 10.8 Further Information 326 Chapter 11. Procedural Texture Shaders 329 11.1 Regular Patterns 331 11.1.1 Stripes Vertex Shader 333 11.1.2 Stripes Fragment Shader 334 11.2 Toy Ball 336 11.2.1 Application Setup 337 11.2.2 Vertex Shader 338 11.2.3 Fragment Shader 339 11.3 Lattice 344 11.4 Bump Mapping 345 11.4.1 Application Setup 348 11.4.2 Vertex Shader 350 11.4.3 Fragment Shader 351 11.4.4 Normal Maps 353 11.5 Summary 354 11.6 Further Information 354 Chapter 12. Lighting 357 12.1 Hemisphere Lighting 357 12.2 Image-Based Lighting 361 12.3 Lighting with Spherical Harmonics 365 12.4 The Uberlight Shader 369 12.4.1 Uberlight Controls 369 12.4.2 Vertex Shader 372 12.4.3 Fragment Shader 373 12.5 Summary 376 12.6 Further Information 376

xvi Contents Chapter 13. Shadows 379 13.1 Ambient Occlusion 380 13.2 Shadow Maps 385 13.2.1 Application Setup 387 13.2.2 Vertex Shader 388 13.2.3 Fragment Shader 389 13.3 Deferred Shading for Volume Shadows 392 13.3.1 Shaders for First Pass 395 13.3.2 Shaders for Second Pass 396 13.4 Summary 400 13.5 Further Information 400 Chapter 14. Surface Characteristics 403 14.1 Refraction 404 14.2 Diffraction 410 14.3 BRDF Models 415 14.4 Polynomial Texture Mapping with BRDF Data 422 14.4.1 Application Setup 425 14.4.2 Vertex Shader 426 14.4.3 Fragment Shader 429 14.5 Summary 431 14.6 Further Information 432 Chapter 15. Noise 435 15.1 Noise Defined 436 15.1.1 2D Noise 442 15.1.2 Higher Dimensions of Noise 443 15.1.3 Using Noise in OpenGL Shaders 443 15.2 Noise Textures 444 15.3 Trade-offs 447 15.4 A Simple Noise Shader 448 15.4.1 Application Setup 448 15.4.2 Vertex Shader 448 15.4.3 Fragment Shader 449 15.5 Turbulence 451 15.5.1 Sun Surface Shader 451 15.5.2 Marble 452 15.6 Granite 453

Contents xvii 15.7 Wood 454 15.7.1 Application Setup 454 15.7.2 Fragment Shader 455 15.8 Summary 457 15.9 Further Information 458 Chapter 16. Animation 461 16.1 On/Off 462 16.2 Threshold 463 16.3 Translation 463 16.4 Morphing 464 16.4.1 Sphere Morph Vertex Shader 466 16.5 Other Blending Effects 467 16.6 Vertex Noise 468 16.7 Particle Systems 469 16.7.1 Application Setup 470 16.7.2 Confetti Cannon Vertex Shader 473 16.7.3 Further Enhancements 476 16.8 Wobble 476 16.9 Animating Once per Frame 480 16.9.1 Application Setup 481 16.9.2 Updating Matrices Once per Frame 482 16.10 Summary 483 16.11 Further Information 484 Chapter 17. Antialiasing Procedural Textures 487 17.1 Sources of Aliasing 487 17.2 Avoiding Aliasing 489 17.3 Increasing Resolution 490 17.4 Antialiased Stripe Example 491 17.4.1 Generating Stripes 491 17.4.2 Analytic Prefiltering 493 17.4.3 Adaptive Analytic Prefiltering 494 17.4.4 Analytic Integration 498 17.4.5 Antialiased Brick Fragment Shader 501 17.5 Frequency Clamping 502 17.5.1 Antialiased Checkerboard Fragment Shader 502 17.6 Summary 504 17.7 Further Information 504

xviii Contents Chapter 18. Non-photorealistic Shaders 507 18.1 Hatching Example 508 18.1.1 Application Setup 508 18.1.2 Vertex Shader 509 18.1.3 Generating Hatching Strokes 510 18.1.4 Obtaining Uniform Line Density 511 18.1.5 Simulating Lighting 513 18.1.6 Adding Character 513 18.1.7 Hatching Fragment Shader 515 18.2 Technical Illustration Example 516 18.2.1 Application Setup 520 18.2.2 Vertex Shader 520 18.2.3 Fragment Shader 521 18.3 Mandelbrot Example 521 18.3.1 About the Mandelbrot Set 522 18.3.2 Vertex Shader 525 18.3.3 Fragment Shader 526 18.3.4 Julia Sets 529 18.4 Summary 529 18.5 Further Information 530 Chapter 19. Shaders for Imaging 533 19.1 Geometric Image Transforms 534 19.2 Mathematical Mappings 534 19.3 Lookup Table Operations 535 19.4 Color Space Conversions 536 19.5 Image Interpolation and Extrapolation 537 19.5.1 Brightness 537 19.5.2 Contrast 538 19.5.3 Saturation 538 19.5.4 Sharpness 539 19.6 Blend Modes 540 19.6.1 Normal 541 19.6.2 Average 541 19.6.3 Dissolve 542 19.6.4 Behind 542 19.6.5 Clear 542 19.6.6 Darken 542 19.6.7 Lighten 543

Contents xix 19.6.8 Multiply 543 19.6.9 Screen 543 19.6.10 Color Burn 543 19.6.11 Color Dodge 544 19.6.12 Overlay 544 19.6.13 Soft Light 544 19.6.14 Hard Light 545 19.6.15 Add 545 19.6.16 Subtract 545 19.6.17 Difference 545 19.6.18 Inverse Difference 546 19.6.19 Exclusion 546 19.6.20 Opacity 546 19.7 Convolution 546 19.7.1 Smoothing 549 19.7.2 Edge Detection 552 19.7.3 Sharpening 553 19.8 Summary 555 19.9 Further Information 555 Chapter 20. Language Comparison 559 20.1 Chronology of Shading Languages 559 20.2 RenderMan 560 20.3 OpenGL Shader (ISL) 563 20.4 HLSL 565 20.5 Cg 568 20.6 Summary 570 20.7 Further Information 570 Appendix A. Language Grammar 573 Appendix B. API Function Reference 589 Implementation-Dependent API Values for GLSL 590 Other Queriable Values for GLSL 591 glattachshader 592 glbindattriblocation 594 glcompileshader 597 glcreateprogram 599 glcreateshader 601 gldeleteprogram 603

XX Contents gldeleteshader 605 gldetachshader 607 gldrawbuffers 609 glenablevertexattribarray 612 glgetactiveattrib 614 glgetactiveuniform 617 glgetattachedshaders 621 glgetattriblocation 623 glgetprogram 625 glgetprogramlnfolog 628 glgetshader 630 glgetshaderlnfolog 632 glgetshadersource 634 glgetuniform 636 glgetuniformlocation 638 glgetvertexattrib 640 glgetvertexattribpointer 643 gllsprogram 645 gllsshader 647 gllinkprogram 648 glshadersource 652 gluniform 654 gluseprogram 661 glvalidateprogram 665 glvertexattrib 667 glvertexattribpointer 673 OpenGL 1.5 to OpenGL 2.0 GLSL Migration Guide 676 Afterword 681 Glossary 685 Further Reading 705 Index 721