Update: Allegorithmic, Pixar's Renderman, and SideFX tweeted and re-tweeted my pumpkin here and here.

In the spirit of Halloween, I worked on a jack-o'-lantern for this month's art project. The goal was to make a fully procedural pumpkin model with accompanying textures. I used Houdini and Substance Designer and rendered with Renderman.

I put together the model quite quickly but immediately got sidetracked with the look development aspect of it when I discovered the joys of Renderman RIS. The non-commercial license is free for personal use and it generates great results right out of the box. I spent most of my time experimenting with different integrators and dialing in the sub-surface scattering parameters.

Setup

One downside of using Renderman instead of Mantra for rendering in Houdini is that Renderman expects a custom texture format which isn't currently supported in the Houdini viewport, which makes previewing more cumbersome than using Mantra's native shaders. The texture files are generated using Pixar's txmake program, which ships with the Renderman binaries. Substance Designer doesn't export directly to TEX format so I ended up writing a simple Python script to convert all PNGs to TEXs:

#!/usr/bin/env python

import os
import datetime

if __name__ == "__main__":
    files = os.listdir(".")
    files = filter(lambda x:r'.png' in x, files)

    command = ""
    OPTIONS = "-mode periodic -verbose"

    for file in files:
        (base, ext) = os.path.splitext(file)
        new_file = base + ".tex"

        if os.path.exists(new_file):
            t1 = datetime.datetime.fromtimestamp(os.stat(file).st_mtime)
            t2 = datetime.datetime.fromtimestamp(os.stat(new_file).st_mtime)

            if t2 > t1:
                print "%s is newer than %s. Skipping..." % (new_file, file)
                continue

        command += "txmake %s %s %s;" % (OPTIONS, file, new_file)

    print "-----"
    print command
    os.system(command)

Procedural Modeling

The base of the pumpkin was a pretty simple rounded shape which was rotated an arbitrary number of times.

The base of the pumpkin was a pretty simple rounded shape which was rotated an arbitrary number of times.

The stem was a noisy circle skinned into a surface then wire deformed with a couple of nested bend deformers.

The stem was a noisy circle skinned into a surface then wire deformed with a couple of nested bend deformers.

PumpkinFaceBooleans.mov.gif

The pumpkin face is just an arbitrary curve which gets poly-extruded and boolean'd out of the pumpkin geometry. I originally had plans to make many different faces but never got around to that.

Puke Simulation

The puke was a simple viscous FLIP simulation sourced from the carved-out geometry from the pumpkin's mouth. Once I was happy with the sim, I cached out a high-resolution mesh of it for rendering.

The pumpkin seeds were placed by randomly scattering them throughout a VDB generated from the puke keyframe.

PumpkinPuke.mov.gif

Rendering

I started the project using Mantra as my renderer but switched over to Renderman RIS to explore their various sub-surface scattering models. I was really impressed with the results that I got right out of the box, so I ended up sticking with it for this project. I still love Mantra, but RIS is great and I had a lot of fun using it for this project.

Timelapse

Timelapse.gif