- Physically based renderer
- OBJ + MTL scenefiles
- Lambertian, glossy, ideal specular, and rough specular (GGX) BSDFs
- Multiple importance sampled environment maps (alias method)
- Wavefront path tracing at interactive framerates
- Optimized structure of arrays data layout
- Efficient BVH with spatial splits
- OptiX AI denoiser (on supported NVIDIA hardware)
- Supports a wide variety of systems
- Cross-platform (Windows, MacOS, Linux)
- NVIDIA, AMD and Intel GPUs and CPUs
- CPU debugging with Intel's OpenCL SDK
- Nanogui-based user interface
- Uses only modern OpenGL (3.3+)
- Drag and drop scene files and environment maps
- Custom kernel class with several convenience features
- Kernel arguments set by name (not by idx)
- Supports conservative recompilation when preprocessor definitions change
- Kernel binaries cached for massive speedup
Rename settings_default.json to settings.json. Modify to set default OpenCL device, render scale, window dimensions etc.
| Key | Action |
|---|---|
| W / A / S / D | Move camera (up/down with R/F) |
| Mouse left | Look around |
| Scroll Up / Down | Adjust movement speed |
| Space | Place area light |
| F1 | Reset camera |
| F2 | Save camera/area light state |
| F3 | Load saved state |
| F5 | Export image |
| H | Toggle light sources (environment/area/both) |
| I / K | Adjust max bounces |
| Z / X | Adjust environment map emission |
| L | Open scene selector |
| M | Switch sampling mode |
| U | Toggle UI |
| Page Up / Down | Adjust area light emission |
| 1-5 | Select scene 1-5 (if set in settings.json) |
| 7 | Switch metween micro-/megakernel |
| 8 / 9 | Change area light size |
| , / . | Change FOV |
See the build instructions.
See the LICENSE file for license rights and limitations (MIT).
