A path tracer that started life as a Golang implementation of Peter Shirley's Raytracing books. It has since grown in scope and gained more features that were not part of the original version.
- Go 1.26 or later
- For optimal BVH4 performance, build with
GOEXPERIMENT=simdto enable SIMD intrinsics
- Have fun.
- Learn about advanced computer graphics topics and put them to practice.
- Create a well-written and robust renderer that is usable with real world scene workloads.
- Integrate with DCC tools.
- Support professional VFX flows.
- Write the most performant path tracer possible.
- Build a GPU-based path tracer.
- Support for PBR materials.
- Distributed Rendering.
- Spectral Sampler to accurately simulate dispersion.
- Nested dielectrics.
- Physically correct light sources library.
- Firefly rejection.
- BVH traversal performance improvements.
- ACEScg workflow support.
- MaterialX support.
- OpenSubdiv support.
- OpenUSD support.
- Implement a Hydra render delegate.
- Adaptive sampling.
- Implement Bidirectional path tracing.
- Materials library.
- Water material.
- Sky simulation with day and night support.
- Scene conversion tool by implementing Go bindings for Open Asset Import Library.
- Implement Metropolis light transport.
- Multi-threaded rendering engine.
- Compact scene format using Protocol Buffers.
- Automatic worker node discovery via Zeroconf, with Avahi integration on Linux and FreeBSD hosts.
- Network distributed system using gRPC and Protocol Buffers.
- Spectral rendering with support for dispersion and Beer-Lambert Law in dielectric materials.
- Full ACEScg workflow support.
- SoA BVH4 with Go 1.26 SIMD intrinsics (AVX2 on AMD64, optimized pure Go on ARM64) based on "An Efficient and Robust Ray–Box Intersection Algorithm" by Amy Williams, Steve Barrus, R. Keith Morley, and Peter Shirley and "Shallow Bounding Volume Hierarchies for Fast SIMD Ray Tracing of Incoherent Rays" by H. Dammertz, J. Hanika, and A. Keller.
- Phyisically correct light sources using SPDs from Michael Royer and the CIE Standard Illuminant F-Series.
- Rendering into a float64 image buffer.
- Direct, indirect and image-based lighting.
- Primitives: Spheres, boxes, rectangles and triangles.
- Wavefront OBJ import.
- Built-in materials: Glass, metal, Lambert, Perlin noise.
- Support for PBR flows with albedo, metalness, roughness, normal and displacement textures.
- Textures: PNG (LDR) and various HDR fromats (OpenEXR, HDR, PFM).
- Resulting images can saved in any format supported by OpenImageIO.
- Normal mapping.
- Displacement mapping through sub-texel mesh tessellation.
The Stanford dragon
A demonstration of the effect of displacement mapping on a surface using Bricks078 from ambientCG.com, licensed under CC0 1.0 Universal.
A Cornell box showcasing various PBR materials from Free PBR.
A demonstration of the dispersion phenomenon calculated by the spectral sampler.



