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
- 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
- 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
Silver bunny
|
Gold dragon
|
Transmission
Glass dragon
|
Glass queen
|
Gummy bunny
|
Honey dragon
|
Subsurface
Marble bunny
|
Chocolate bunny
|
Coat
Porcelain bunny
|
Jade dragon
|
They also have subsurface scattering.
Fuzz
Velvet cloth
|
Velvet bunny
|
Emission
|
Glow stick bunny with a clear plastic coat
|
|
Other
|
Glass cloth
|
|
A jar
|
A jar of honey
|
A jar of honey
|
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