top of page
featured_edited.jpg

Academic Project: A RenderMan Graphics API

C++

This is a Reyes-style, micropolygon-based architecture that processes input through a RenderMan-like C interface. It contains the main parts of a fully functional RenderMan interface.
I independently accomplished it under the guidance of Prof. Pradeep Sen

The main process of the program is as follows:

  1. Read the Metafile format RIB (Renderman Interface Bytestream) or C bindings.

  2. Initialize framebuffer, viewer position, world coordinate system, etc..

  3. Start the scene description.

  4. Rasterize scene objects.

  5. End the frame.

Academic Project: A RenderMan Graphics API: Image
Academic Project: A RenderMan Graphics API: Pro Gallery
RM1.jpg

Main Rendering Pipeline Design

The overall rendering pipeline is based on the Renderman interface standard: 

  1. Describe the viewer, then the world.

  2. Start/end the scene description.

  3. Start/end the frame.

I implemented most parts of the Renderman pipeline described as follows:

Academic Project: A RenderMan Graphics API: Image
RM7.jpg

Shading system

Besides the standard light shader, this program supports separate shaders file and we can write the shaders directly in C and call them via a function pointer linked from our primitive class. We use the RiSurface() and RiDisplacement() function calls to set the geometry attribute to the shader to be used. For example: RiDisplacement (SimpleDisplacementShader); RiSurface (SimpleGreenShader);

Academic Project: A RenderMan Graphics API: Image
RM4.png

Transparency

I kept a sorted linked list at each sample in the framebuffer, where micropolygons are sorted with respect to their distance from the camera. When an opaque object is inserted into the list, it clears out the remaining items from the rest of the list, because that opaque sample effectively blocks the rest of the samples. To implement transparency, we will use RiOpacity().

Academic Project: A RenderMan Graphics API: Image
bottom of page