Real-Time Shading

RenderMan was designed by Pixar as an interface between modeling programs and a renderer. Pixar s implementation is PhotoRealistic RenderMan renderer, which runs on a variety of UNIX platforms. Other RenderMan renderers have been written. One notable example is BMRT by Larry Gritz, which is a ray tracer instead of a scan-line renderer. It is a testament to the design of the RenderMan interface that it has not only been possible to create new RenderMan renderers, but ones that operate in a completely different way than the original REYES rendering algorithm [34, 61].
Despite all these implementations, at the time of this writing RenderMan still cannot be evaluated in real time. Nonetheless, it is still worth starting our comparisons with an off-line shading language like RenderMan s. This provides a good baseline for judging the current state of real-time shading.
The RenderMan shading language is quite high-level. It should be no surprise that it closely resembles the C programming language, as it was modeled after C. It copies C s use of {} braces for grouping statements, semicolons to end them, if and f or control constructs, and other details. RenderMan does add several new language features to make writing shaders easier. A simple RenderMan shader illustrating some of these features is shown in Figure 12.1.
surface marble(){ float sc, f = ycomp(P/2); for(sc=1; sc<=64; sc*=2) f += abs(2*noise(P*sc/2)-l)/sc; 0i=0s; Ci=0i *...