A physically based renderer with unidirectional path tracing.

It started as an implementation of the Ray Tracing in One Weekend series and slowly became faster, more capable, and more flexible, although it still has a long way to go, as noted in the limitations section.

Features

  • Surface shading model based on the OpenPBR Surface model V1.1
    • Trowbridge-Reitz BSDFs, PDFs, and sampling functions adapted from Physically Based Rendering
    • LTC Sheen from Zeltner, Burley, and Chiang, adapted from ltc-sheen
    • Random walk subsurface scattering
  • USD scene loading
    • Meshes, lights, cameras, materials
  • Multiple importance sampling
  • CPU multi-threading

Repository

Renders

Scenes

OpenPBR Shader Playground

Main Camera Close-up Mat and Jar
Plane Top Scissors
  • V1.0 of OpenPBR Shader Playground Asset
  • Minor changes to the scene:
    • Transmission masks that are included in the asset but not referenced in the USD scene were used
    • Some transparent objects’ thin-walled attribute were overridden
    • A glass of orange juice was not rendered, as it is also not found in reference images in the OpenPBR Spec

Open Chess Set

White front White back
Black White pawn
  • Chess Set from the MaterialX repository
  • Parameters in the Autodesk Standard Surface shading model were mapped to OpenPBR Surface shading model parameters
  • Geometries in glTF were converted to USD by guc
  • Background is from Poly Haven

Materials

Metals

Silver bunny Silver bunny Gold dragon Gold dragon

Transmission

Glass dragon Glass dragon Glass Queen Glass queen
Gummy bunny Gummy bunny Honey dragon Honey dragon

Subsurface

Silver bunny Marble bunny Chocolate bunny Chocolate bunny

Coat

Porcelain bunny Porcelain bunny Jade dragon Jade dragon

They also have subsurface scattering.

Fuzz

Velvet cloth Velvet cloth Velvet bunny Velvet bunny

Emission

Glow stick bunny Glow stick bunny with a clear plastic coat

Other

Glass cloth Glass cloth
Mason jar A jar Jar of honey A jar of honey
Jar made of honey A jar of honey Jar made of honey containing glass A honey jar of glass

Model and material credits

The bunny and dragon are from The Stanford 3D Scanning Repository. They were converted to USD by Blender. The bunny’s vertex-varying normals were generated by Blender.

The mason jar and mason jar liquid are from the OpenPBR Shader Playground asset. Their face subdivision was done by Blender.

The cloth is from glTF Sample Assets.

The queen chess piece is from the Open Chess Set.

Marble, honey, chocolate, glass, gold, and silver are from physicallybased.info. Velvet is from Poly Haven. Jade, porcelain, and glow stick were made by me.

Notable limitations

  • Materials:
    • No volumetric model for transmission
    • Crude thin film approximation
    • Incomplete support for OpenPBR parameters
    • Inaccurate layering of materials
  • Geometries
    • No subdivision
    • Only triangles, quads, and spheres
    • No instancing
  • Lighting:
    • No HDR
    • No spectral distributions
  • USD:
    • Incomplete support, most notably for node graph-parsing and texture preprocessing
    • No animation
  • Asset loading
    • Cannot load some standard image formats, like OpenEXR and TIFF.
    • Large memory usage: all assets are loaded into memory at startup
  • Textures
    • No mipmaps
    • No interpolation
  • Speed:
    • Slow, with most of the CPU time spent on BVH traversal
    • Suboptimal sampling leading to long convergence times