Shading Section

(The bread and butter of RenderMan)

What's on this page?


Shader Development & the RMR

September 20, 2003
In addition to great shader examples that have turned up, over the years some excellent shader libraries been put together (Advanced RenderMan, BMRT, and RManNotes). Depending on the need in our desire to make use of these libraries, we find the need to extend them. Then what do we do when we want to share our shaders and these changes with others?

The typical method of just cutting and pasting snippits into our shaders or just making changes directly into these libraries doesn't seem to be the way to go. First many times it doesn't seem to give proper credit for the original auther of these libraries. Secondly, it muddles exactly what contribution you are actually making to these libraries.

This section will hopefully illustrate my proposal on how to rectify this problem. Also, as time permits, I will start conforming many of the shaders in the RMR to comform to this. The first place will be with my own shader section, TLShaders (which hasn't happened yet). -- Tal To make it easier to share functions and macros based on other's shader libraries, I am creating a new directory: shaders. This will contain the origianl shader libraries and derivative functions/macros based on them.

The plan is simple if you have derivative work off of these libraries observe the following:

  1. Keep your work and the derivative libriaries in their own directories

    Say for example shaders/arman shaders/mywork

    Then you would just to refer to these libraries in your shaders or own shader libraries: #include < arman/noises.h >

  2. If you have your own shader libraries that are to make use of these libraries:
    Again just use something like: #include < arman/noises.h >

  3. If you want to change the body of these libraries
    Create your own directory (ie. TLShaders)
    Create your own include file based on the file you want to change (arman/noises.h --> TLShaders/TLnoises.h)
    Copy only the particular function/functions that you intend to customize (Giving proper credit of what these is based off of, of course)
    Rename the function to use your initials fBm --> TL_fBm
    Add your customization

To sum up the guidelines are to leave the origianl shader library directories alone; Do your own work in your own area; and keep any derivative work in their own area. Don't be lazy and copy entire files over if you aren't intending to customize each and every function. Only copy over the actual piece, piece of code that is going to have your features. Use Makefiles to keep track of where to find the include files for you.

I will put together more concrete examples when I have a chance.

As always, feel free to submit your own libraries or derivative works!

Shader Dev distribution -- shader libraries to begin your derivative work from. Currently only the Advanced RenderMan shaders directory and rmannotes.h are here -- Tal 11/23/03


Some thoughts on shaders by the author of WavesWorld (Mr. Wave himself, Michael B. Johnson).

Steve May in his RManNotes has some excellent background information such as: RManNotes: Shader Basics, RManNotes: Regular Patterns, and RManNotes: Stochastic Patterns.


Shaders Grouped by Type

All of the RMR shaders grouped by shader type instead of by author.


Example Shaders from BMRT

BMRT Shaders-- Shaders from BMRT


Shaders From WavesWorld

The following are some of the shaders that can be found in Michael B. Johnson's WavesWorld (under Source/Shaders)

The following shader can be found under (Source/Shaders/WWShaders):


WWCinderBlock.sl

Shaders/WWShaders/WWCinderBlock.jpg WWCinderBlock.sl Sample RIB prman shader


Shaders from Texturing and Modeling: A Procedural Approach

K. Musgrave-- texture demos for example procedural shaders from Chapter 8.

Darwyn Peachey -- example shaders.


Shaders From The RenderMan Companion

RCShaders


Shaders from SIGGRAPH Course Notes

SIGGRAPH '91

SIGGRAPH 2000

SIGGRAPH 2001


Miscellaneous Shaders

Andrew Klishin Shaders
Dan Weeks Shaders
Emil Mikulic Shaders
Fredrik Gustafsson Shaders
Frank Summers Shaders
Graeme Nattress Shaders
Ivan DeWolf Shaders
Jim Bumgardner Shaders
Jonathan Merritt Shaders
Larry Gritz Shaders
Mark Beckwith Shaders -- (And animation)
Mike King Shaders
Peter Quint Shaders
Michael Rivero Shaders
Rudy Cortes Shaders
Steve Weintz Shaders -- (And animation)
Stephen H. Westin Shaders
Tal Lancaster Shaders
Xavier Matia Bernasconi Shaders


Any comments or suggestions? Send them to: rib AT renderman DOT org


RenderMan is a registered trademark of Pixar. The RenderMan Repository is maintained by Pixar's RenderMan Products Group