RenderMan Procedurals
It has been out there since 1988, but, shame on me, i did not really look into the RenderMan Interface Specification (RISpec) until this year. And it looks like i missed something.
There is a common misunderstanding that ‘RenderMan’ is the proprietary image generation software by Pixar, but that is not correct. RenderMan is rather an open standard and interface from a scene creation application (i.e., but not exclusively, a 3d modeler) towards an image generation engine.
The RenderMan standard is based on a surprisingly simple ASCII scene description, very similar to markup languages like EPS or HTML. That description can either be routed directly into a so-called ‘RenderMan-compilant’ renderer in order to create an image, or can be ’spooled’ (think EPS and print) into a as standardized RIB file. The file can either be edited in a text editor, sent to the renderer, instanced in another RIB and much more.
Here is a simple example of a RIB which will render a red cone:
Display "RIB" "framebuffer" "rgb" Projection "perspective" "fov" 45 Format 640 360 1 Translate 0 0 5 Rotate -110 1 0 0 Rotate 70 0 0 1 WorldBegin LightSource "distantlight" 2 "intensity" [1.5] "from" [-6 6 0]"to" [0 0 0] surface "plastic" Color 1 0 0 Cone 1.5 0.75 360 WorldEnd
You guessed it: open your text pad and change the last 0 into a 1 on the Color tag, and the cone goes purple. Or you go search and replace ‘plastic’ with ‘metal’, and change all shaders in a scene. It is not too hard to imagine more advanced use cases.
Pixar’s own commercial rendering software called Photorealistic RenderMan is one of the many ’RenderMan-compilant’ renderers, and it counts as the most advanced reference implementation. But there are as well others of those compilant renderers. Some are even open source, like Pixie, which is a great way to study, play and learn without having to invest.
On a short side-note: there are basically two major players on the market for high-end renderers, that is RenderMan and mental ray. Having worked with both, in my personal experience it is not an either-or. Where mental ray excels in physical simulation of lighting, reflections and other ray things, it comes a little short when aiming on features needed for moving things and creative optimizations. With RenderMan it is just the other way around, so the two complement each other better than one might think.
Coding or exporting a conventional scene like the above RIB example is much like the common way of creating a rendering in any rendering engine. But that is not all by far, and this is just where the fun part starts. For example there are RiProcedurals, which allow for injecting other RIB files into the current stream, or even create geometry on the fly by running simple (or complex) Python code at rendertime, or even combine the two.
Take the image on top of the page – none of what you see in the image is actually in the 3d scene. It shows a scene with several thousand boxes as stand-in proxies, and every time a proxy is hit, a Python script creates a few spheres based on a (here) very simple rule. Quite fascinating and very powerful. With a few self-made tools the parameters can be easily handled from within Maya, and those countless nurbs spheres render in 720p with shadows and depth of field in less than a minute.
This is just a simple technology test to tune the tools, and the output already looks quite nice. For my personal likes, having the combination of infinite free procedural scene creation in Python coupled with highest quality output available with RenderMan at my disposal seems to be an incredibly valuable tool on the workbench.
Hopefully more to come.
About this entry
You’re currently reading “RenderMan Procedurals,” an entry on electric GOBO
- Published:
- 08.10.09 / 12am


