Pixar's 2nd RenderMan Art Challenge 2017

Christmas Village

I participated in the 2nd RenderMan rendering contest which ended November 30, 2017. It was a compositing challenge. We needed to use RenderMan through Maya to render the provided model, the Rolling Teapot (a teapot tank with a girl at the helm). The model needed to be rendered separately from any scene, and the resulting rendering needed to be composited over a backplate image. I did not do as well as I wanted in the contest, but I had a lot of fun learning new software and techniques. This page shows my work and describes my process as well as some challenges that I encountered. After all of my efforts, I have come to the conclusion that compositing is hard.

You can view the winners and the honorable mentions at Pixar's contest results announcement. The contest forum requires membership, but I recommend signing up in order to see all of the work-in-progress images and discussions. The forum page for my entry can be found here.

Final Image

This is the final version of my image, which I finished a couple days after the contest deadline. My original submission is shown next. If I could make one improvement now, it would be to have more specular lighting on the teapot so it is a lot more sparkly and stands out better from the background. Also, for compositing, I would like to add grain to the rendered teapot to match the grain of the backplate image.

Download the high resolution image.

Submitted Image

This is the image that I submitted to the contest. There are a couple serious problems. The first is noise since it needed more time to render. Second, there was a colorspace error in the RenderMan settings that I used for the environment lights. RenderMan uses a different default colorspace selection for images applied to their rect lights than they use for the same image used as the camera backplate. The enviornment light color ended up being too light. You can see this in the teapot handle. The brown color of the boar's head being refracted through the glass handle is much lighter compared to the backplate. The image seen through the glass comes from the environment lights, while the image seen directly by the camera is part of the backplate.

Download the high resolution image.

Steps for creating the final image.

  • Create the backplate image.
  • Add textures to the teapot tank and girl.
    • Use Substance Painter for creating texture maps on the model.
    • Use Photoshop to clean up the texture maps from Substance Painter.
    • Use the texture maps with Maya shader networks to create final material.
    • Also use some existing RenderMan materials.
  • Create a Maya camera that replicates the camera from the backplate image.
  • Add the backplate image to the Maya camera.
  • Add lights to the Maya scene, trying to replicate lighting effects from the backplate.
  • Create holdout geometry to approximate backplate geometry to catch shadows and reflections.
    • Add materials to the holdout geometry to approximate the backplate materials.
  • Render the model and holdout geometry with RenderMan for Maya.
  • Composite the rendered image over the backplate.
    • Use a layer mask in Photoshop to blend the holdout rendering onto the backplate.
  • Use Lightroom for color grading to produce the final composite.

Creating the Backplate

It took a long time to come up with a backplate idea. At first I wanted to render my own backplate scene, but then I realized that was taking too much time since I needed to model and texture an entire room. I finally decided to use an actual photograph. I used two photographs, one of a Christmas village display at a local store, and another photograph of Christmas trees to replace the ceiling and far background. I also modified the two display labels. I used Photoshop to splice the two photographs, and then used Lightroom for color grading.

Photograph of the Christmas village display.

Download the high resolution image.

Photograph of Christmas trees.

Download the high resolution image.

Backplate after splicing.

Download the high resolution image.

Final backplate. The back label was removed in Photoshop, and the front label was modified to show the contest information.

Download the high resolution image.


The main task in post processing was in whittling down the extent of the holdout geometry. In the raw image you can clearly see the edges of the holdout geometry, especially at the bottom of the image following along the edges of the candy. If I simply erased the extra area of the holdout rendering, you could still see an abrupt edge between the holdout and the backplate. I opted to blend the holdout rendering over the backplate using a grayscale mask, and I used a slow gradient at the edge so it blends softly. I did not have a lot of holdout geometry because I ran out of time. To do a good job for catching shadows and reflections I would practically need to model the entire scene, especially if I wanted to add new lights (the holdout geometry would be used to catch the added lighting effects).

Raw rendering output from RenderMan.

Download the high resolution image.

Isolated rendering of the holdout geometry.

Download the high resolution image.

Isolated rendering of the rolling teapot model.

Download the high resolution image.

Early Style Tests

This is a rendering test of the girl. Her eye texture was later changed. I especially like the stars in her hair. I created two material masks, so the material would either be glass, star material, or red metalic material. I made extensive use of material networks in Maya.

I was trying to have a Christmas ornament feel.

Download the high resolution image.

Early idea. Since the rules allowed scaling, I thought about making the tank look like a toy. Rendered with Modo.

Early idea. I wanted to have a fully loaded Christmas tree. For fun I also wanted to have a dog attacking one of the Christmas ornaments. I gave up on this idea because it would have taken too much time to model everything. This image is a mockup composite that I created in Photoshop.

Download the high resolution image.

Here I created billboards inside Modo to better frame my mockup and explore different camera settings.

Download the high resolution image.

Early rendering test. I used my raytracer to render this. Since the model contains so many separate meshes, I was finally motivated to update my OBJ loader so I could assign different materials (and other properties) to individual sub-meshes that are contained in a single OBJ file.

Download the high resolution image.


I spent a lot of time learning software. Some software I had used before but I needed to learn new techniques. I also used a pen tablet, which was a lot of fun and made texture painting much faster and enjoyable.

Software and hardware used:

  • Maya
  • RenderMan for Maya
  • Substance Painter
  • Modo
  • Photoshop
  • Lightroom
  • Huion Inspiroy H640P pen tablet

The model that was provided had several shortcomings. First, it was mostly comprised of non-closed surfaces which was a problem since I like to use volumetric materials. I manually created back faces in order to turn surfaces into volumes. I used Modo extensively for this. The model was comprised of many subdivision surfaces, and in some cases polygons were in their separate mesh which caused errors when smoothing the surface. I just had to move those polygons back into the proper surface mesh. A more general problem was UV mapping. I would have prefered that each item have it's own separate UV map which maximizes the use of texture resolution.

Glass material requires many ray bounces.

I had decided from the start that I wanted to make heavy use of physically-based glass material. Since the model has many surfaces, it is important for the raytracer to have many allowed bounces. I found it needs around 100 bounces. The pathtracer integrator in RenderMan allowed me to specify as many bounces as I wanted, 200. Unfortunately, the pathtracer is not the best integrator for creating caustics. I wanted to use the bidirectional VCM or UPBP integrator but they both limit the maximum number of bounces to 20. I show a test image below of the tank hatch which demonstrates that limiting the bounces will cause a dark band. Because of this I had little choice but to use the pathtracer.

Ray depth problem in VCM.

This is an early RenderMan rendering test. The main issue that is noticible here is the darkening on the edges of the tank wheel belt at the bottom of the image. I have maximum bounces set to 200. Another problem is the pixelation in the environment image.

Early test render.

Test render with my own raytracer. I rendered the same scene, but I used my personal raytracing program. I have a special multi-hit ray traversal routine that can handle overlapping, embedded, and concurrent geometry. I would guess this is why my raytracer does not create the dark spots on the belt.

Comparison with my raytracer.

Download the high resolution image.


There are two cases where we need to assign priority values to overlapping geometry. The first case is when we have concurrent polygons. This leads to the problem called z-fighting, where the renderer randomly choses which surface to actually render at any given hit point, and can result in a noisy pattern of the two surface shadings. The second case involves overlapping volumes. There are many overlapping volumes in the model. If priority is not used carefully then the renderer will not know which volume it should render, or if it has already left a volume. If a renderer thinks it is still in a volume when it is not, then the color will be darker. In the case it thinks it is not in a volume when it actually is, then the color will be lighter. I did a careful testing of priority in RenderMan, and it shows an error. I believe this is a serious bug in RenderMan.

Priority problem in RenderMan