Kajo⌘ is a small raytracer that renders images using multiple importance sampling. This is a variant of the Monte Carlo integration technique in which we compute samples from an integral using several techniques and combine them to get a better estimate of the actual value. In a raytracer this can help to reduce computation time and alleviate noise in the final image without introducing bias.
Kajo currently only supports planes, spheres and spherical lights. There are two rendering backends:
- C++ multithreaded CPU renderer
- OpenGL (GLSL version 1.20) renderer
Kajo is licensed under the MIT open source license.
⌘ "kajo" means a glimmer of light in Finnish.
Traditional Monte Carlo
Multiple importance sampling #1
Multiple importance sampling #2
Phong lighting
Caustics
No explicit lighting
Explicit lighting
- Install dependencies, e.g., on Ubuntu/Debian:
apt-get install cmake libsdl1.2-dev libsdl-ttf2.0-dev libglew-dev
- Check out a copy of the source code:
git clone https://github.com/skyostil/kajo.git
- Prepare the build files with cmake:
mkdir kajo/build; cd kajo/build; cmake ..
-
Compile:
make
In the build directory:
renderer/renderer ../data/spheres.json
Using the OpenGL renderer:
renderer/renderer -r gl ../data/spheres.json
Reading material:
- Eric Veach, Ph.D. dissertation, Stanford University, December 1997
- Mathematical Models and Monte Carlo Algorithms for Physically Based Rendering. Eric Lafortune, February 1996
- CS 294-13, Advanced Computer Graphics, Profs. Ravi Ramamoorthi and James O'Brien
- Bidirectional Path Tracing, Mikkel Adamsen, July 2009
- Compact Metallic Reflectance Models, László Neumann, Attila Neumann, László Szirmay-Kalos, 1999
- Monte Carlo Ray Tracing, Siggraph 2003 Course 44, Henrik Wann Jensen
- Global Illumination Compendium, Philip Dutré
- The Direct Lighting Computation in Global Illumination Methods, Changyaw Wang
- CS 563 Advanced Topics in Computer Graphics Sampling Techniques, Wadii Bellamine
- An Introduction to BRDF-Based Lighting, Chris Wynn
Libraries used:
- GLM OpenGL mathematics library
- LodePNG PNG image codec
- simplejson JSON parser