A Brief OpenGL Shading Tutorial

Perlin noise is one of the primary tools responsible for the success of procedural shading in production rendering. It breaks the crisp computer generated look by adding apparent randomness that is controllable and repeatable. Both Perlin’s original noise algorithm and his later improved noise were designed to run efficiently on a CPU. These algorithms do not map as well to the design and resource limits of the typical GPU. We propose two modifications to Perlin’s improved noise that make it much more suitable for GPU implementation, allowing faster direct computation. The modified noise can be totally evaluated on the GPU without resorting to texture accesses or “baked” into a texture with consistent appearance between textured and computed noise. However, it is most useful for 3D and 4D noise, which cannot easily be stored in reasonably-sized textures. We present one implementation of our modified noise using computation or direct texturing for 1D and 2D noise, and a procedural combination of 2D textures for the 3D noise.

[1]  Li-Yi Wei,et al.  Tile-based texture mapping on graphics hardware , 2004, SIGGRAPH '04.

[2]  R. R. Coveyou Serial Correlation in the Generation of Pseudo-Random Numbers , 1960, JACM.

[3]  David S. Ebert,et al.  Texturing and Modeling: A Procedural Approach , 1994 .

[4]  Pascal Junod,et al.  Cryptographic Secure Pseudo-Random Bits Generation : The Blum-Blum-Shub Generator , 1999 .

[5]  David S. Ebert,et al.  Texturing and modeling - a procedural approach, Third Edition , 2002, Morgan Kaufmann series in computer graphics and geometric modeling.

[6]  Manuel Blum,et al.  A Simple Unpredictable Pseudo-Random Number Generator , 1986, SIAM J. Comput..

[7]  John D. Owens,et al.  Mio: fast multipass partitioning via priority-based instruction scheduling , 2004, Graphics Hardware.

[8]  Steve D. Upstill,et al.  The renderman companion - a programmer's guide to realistic computer graphics , 1990 .

[9]  Taku Komura,et al.  Topology matching for fully automatic similarity estimation of 3D shapes , 2001, SIGGRAPH.

[10]  Ken Perlin,et al.  Improving noise , 2002, SIGGRAPH.

[11]  Mark Segal,et al.  The OpenGL Graphics System: A Specification , 2004 .

[12]  Ken Perlin,et al.  An image synthesizer , 1988 .

[13]  Steven Worley,et al.  A cellular texture basis function , 1996, SIGGRAPH.

[14]  Donald E. Knuth,et al.  The art of computer programming. Vol.2: Seminumerical algorithms , 1981 .

[15]  R. Caflisch,et al.  Quasi-Monte Carlo integration , 1995 .

[16]  David Thomas,et al.  The Art in Computer Programming , 2001 .

[17]  Pat Hanrahan,et al.  Efficient partitioning of fragment shaders for multiple-output hardware , 2004, Graphics Hardware.

[18]  J. van Wijk,et al.  Spot noise texture synthesis for data visualization , 1991, SIGGRAPH.

[19]  Donald Ervin Knuth,et al.  The Art of Computer Programming, Volume II: Seminumerical Algorithms , 1970 .

[20]  Randi J. Rost OpenGL shading language , 2004 .

[21]  Anselmo Lastra,et al.  Real-time programmable shading , 1995, I3D '95.

[22]  John C. Hart Perlin noise pixel shaders , 2001, HWWS '01.

[23]  J. P. Lewis,et al.  Algorithms for solid noise synthesis , 1989, SIGGRAPH.