Last Update: December 2019
CPU-Based Pathtracer
- Multi-threaded raytracing via OpenMP.
- Uses Kd-tree acceleration structure for triangle meshes, and Bounding Interval Hierarchy for mesh instances.
- Supports explicitly-sampled textured rectangle area lightsources and emissive materials.
- Texture-mapped lightsources are importance-sampled using a quadtree.
- Has depth-of-field with optional polygon aperture shape.
- Implements texture sampling with nearest-neighbour, bilinear, or bicubic interpolation.
- Has importance-sampled HDRI environment lighting.
- Supports .cube file format for colour grading look-up tables.
- Provides Lua 5.1 integration as a shader language, using the LuaJIT library for performance.
- The Lua shader interface includes standard shader language functions such as mix, step, clamp, fract, noise, sample etc.
- Has a custom-made scene description language with a transform hierarchy similar to the legacy OpenGL transform stack.
- Lua is also provided as a procedural scene modelling language.
- Supports OBJ (and MTL) and OFF mesh formats.
- Supports PPM image format for input (for use with e.g. texture mapping) and output.
- Can use SQLite database to store all traced rays, which can then be processed externally to alter certain aspects of the rendered image without re-rendering.
- Written in C++17.
Download - Includes C++ sourcecode, Windows binary, and example scenes and Lua scripts.
Screenshots
Timings shown here were measured on an Intel Xeon CPU E5-2687W v4 @ 3.00GHz, with 2 threads
hexagons.txt, 15m
test_scene.txt, 4m3s
boxtorus.txt, 13m1s
sponza.txt, 10m15s
test_scene2.txt, 7m4s
towers.txt, 12m29s