Open Source RenderMan Renderer for Generating Photorealistic Images



Download    Documentation    Tutorials

Introduction

Pixie is a cross platform (Windows/Unix/Linux/Mac OS X), open source RenderMan Compliant Renderer. It was created by Okan Arikan, who is currently a assistant professor in UT Austin. The latest version is 2.2.1. Pixie uses the same API interface and shading language as the RenderMan. It supports both traditional scan line rendering and ray tracing. In addition, photon mapping has been added in one of its recent updates to achieve global illumination. External models can be brought into Pixie using LiquidMaya, which is a open source Maya exporter for RenderMan compliant renderers.


Features

Here are some of its most important features:

  • Multi-threading: Pixie will take advantage of the power of multi-processors in the system to accelerate shading computations for those shading-heavy scenes.
  • Different Rendering Modes: It supports ray tracing, scan line rendering(also called "stochastic", fast but not accurate), z-buffer(simplified version of stochastic. no motion blur, depth of field, or transparency effect.), and photon mapping.
  • Occlusion Culling
  • Baking to Textures: It a technique to cache the result from one execution and reuse it.
  • Network Parallel Rendering: Pixie can utilize a bounch of computers to work on a single frame.
  • DSO Shading: When writing shaders, users can call C/C++ function embedded in DLL files.
  • Transparent Shadow Map: This feature allows semi-transparent objects to cast correct shadow.
  • Miscellaneous: Supprot point-based GI/ambient occlusion and color bleeding.

Example Scenes

I tried several example scenes from the tutorials on its web site. The modifed RIB files and shader files are also provided here. Some of their examples on the web site don't work unless you do some changes based on Pixie's latest specifications. In order to run those examples on you own, you might need to know the following commands:

  • rndr -t:2 "Your RIB file": Execute RIB file. -t:2 means Pixie will use two threads for rendering.

  • sdrc "Your shader(.sl) file": Compile the shader file into .sdr file. All shaders must be converted into .sdr for run-time access.

[Displacement Mapping] displacement.rar < 1 min
Explicitly distort the geometry based on a sin function.


[Dispersion] dispersion.rar < 1 min
Use photon mapping with two rendering passes to create dispersion effect.


[Global Illumination] gi.rar  about 15 mins
Combining photon mapping with irradiance cacheing to achieve global illumination. I changed the maximum error allowed in irradiance cache to 0 to prevent artifacts near the boundary of the walls. That's the most important factor to slow down the image generation.


My Own Scene

I created two scenes with different effects. By using LiquidMaya, external models can be brought into Pixie renderer quite easily. LiquidMaya is an open source Maya plug-in which has been used several times in commercial film production, such as the Lord of the Rings - The fellowship of the Ring and the Superman Returns. It provides a GUI-based interface for users to quickly manage their scene rendering and shader creation. Due to its fully integration with Maya, many of Maya's resources can be utilized in creating photorealistic scene. For example, users can interactively tweak the shading parameters in their shaders to get exactly the way they want. However, I found a lot of difficulties so I pretty much only used it as a model exporter. First you have to install LiquidMaya plugin. Second, you create your own scene. Finally go to <Liquid>=><Render>, it will automatically create the corresponding RenderMan command for you. All the remaining things you have to do is to copy and paste them into your RIB file. Here are two scenes I created:

[Ambient Occlusion] ambient_occlusion.rar  1 min
I created the whole scene in Maya. The original bunny model can be found here and the wine glass is built with NURB surfaces. This scene demonstrates the ambient occlusion effect. It's a kind of global illumination due to the self-shadowing between different parts of an object. The occlusion is computed using the built-in function occlusion() in the RenderMan shading language.


[Global Illumination] bunny_gi.rar  about 10 mins
Pixie supports multi-pass rendering, which is a technique quite commonly used in photon mapping, radiosity, and global illumination. I tried to create my own "cornell box" and combined them together to get a final image. However, it's not successful - I lost the lighting of the scene when compositing. Maybe there are some problems in my shader code I didn't figure out. So I just use the global illumination example scene and bring my model and fractal shader into it. Basically, this scene is generated in three passes:
  • 1st Pass: The light shoots photons (300,000) into the scene and generates a global photon map. We can use a program called "show" to display the photon map (left figure below).
  • 2nd Pass: Indirect lighting computation happens in this step. This works by sampling a hemisphere at various points in the scene to evalute the incoming light. For each place to calculate irradiance, we use 500 photons to estimate the irradiance. Those samples are costly to evaluate. Therefore, a speed up technique called irradiance cache is used. Through this method, final lighting between samples will be obtained by interpolation. Those irradiance information, similar to the photon map, will be preserve in files for later use.
  • 3rd Pass: In the last step, we dump out the irradiance from the last pass and combine them with surface/displacement shader to produce the final image. We use 0 for the maximum error of cache quality-density ratio, which means it never interpolates. The error along the boundary will be minimize but the rendering time becomes much longer. The final image is the right figure below. You can clearly see that color bleeding is everywhere.


Subjective Evaluations

[Pros]
  • It's RenderMan compatible, which is good - You will quickly get used to it if you have already known the RenderMan shading language. Furthermore, it's fairly easy to port your RenderMan shaders onto Pixie.
  • It's open source and still a "live project." Many developers are constantly maintaining and implementing new features.
  • LiquidMaya plug-in makes users' life much easier. This powerful tool not only provides a fast way to import/export external models, but it also provides a user-friendly integration between Maya and Pixie.
  • It has a quite complete set of online support: Web page, tutorial, documentations, Wiki, and forum.

[Cons]
  • The tutorial and example provided online is not enough. In addition, some of its documentations don't explain in great detail (Some even are not completed). You might have a hard time woring on this renderer if you don't have any experience in RenderMan.
  • Same problem as the above for LiquidMaya plugin. Currently the latest version of LiquidMaya is 1.8b, which is only compatible to Maya 7. If you want to use LiquidMaya for Maya 8.0 or higher, you have to re-compile it - which is fairly complicated. Even it's said to be working on Maya 7, I still encountered a lot of problems. That's why I just used it purely as a model exporter.


Last Revised: Oct 03, 2007