This is a CPU-only, unidirectional path tracing engine written in Go. It has lots of features and a simple API.
- Supports OBJ and STL
- Supports textures, bump maps and normal maps
- Supports raymarching of signed distance fields
- Supports volume rendering from image slices
- Supports various material properties
- Supports configurable depth of field
- Supports iterative rendering
- Uses k-d trees to accelerate ray intersection tests
- Uses all CPU cores in parallel
- 100% pure Go with no dependencies besides the standard library
go get -u github.com/fogleman/pt/pt
The are lots of examples to learn from! To try them, just run, e.g.
cd go/src/github.com/fogleman/pt
go run examples/gopher.go
You can optionally utilize Intel's Embree ray tracing kernels to accelerate triangle mesh intersections. First, install embree on your system: http://embree.github.io/ Then get the go-embree
wrapper and checkout the embree
branch of pt
.
git checkout embree
go get -u github.com/fogleman/go-embree
Here are some resources that I have found useful.
- WebGL Path Tracing - Evan Wallace
- Global Illumination in a Nutshell
- Simple Path Tracing - Iñigo Quilez
- Realistic Raytracing - Zack Waters
- Reflections and Refractions in Ray Tracing - Bram de Greve
- Better Sampling - Rory Driscoll
- Ray Tracing for Global Illumination - Nelson Max at UC Davis
- Physically Based Rendering - Matt Pharr, Greg Humphreys