Mediumpt - ray & path tracer
Image formation is a very interesting matter, when investigated to a certain extent: the understanding of how light rays bounce forth and back improves, as well as how material surfaces react to light. There exist dozens of rendering programs allowing to produce decent and realistic images, however, I have recently discovered a very interesting path (ray) tracer, which does not only provide extremely realistic images, but is also astonishingly lightweight (99 lines of C++ code!). This path tracer is smallpt of Kevin Beason.
I have done some modifications to it, and have called it mediumpt:
- written in C89 in place of C++;
- compiles out-of-the-box under Windows with Visual Studio 2008 (VC9);
- multithreading added explicitly;
- periodic dumping of the rendered image in BMP/PNG/PAM format;
- exposure control before clipping and sRGB encoding;
- added plane, disc, cylinder, cone, triangle and quadrangle primitives;
- added ambient occlusion with active lighting from cubemap;
- added depth of field;
- mixed materials (specular/diffuse) and custom refractive index;
- procedural diffuse and specular surface colors;
- tentatively added mesh rendering and reading from polygon files.
Below you find some images obtained after some hours of mediumpt rendering on an Intel Core i7-3630 QM 2.4 GHz CPU, exploiting 6 concurrent threads.
Download and installation instructions
The source code can be downloaded from here (choose the archive with the highest numbered version, currently v20)
Currently, the program can be compiled only using Microsoft Visual Studio: the solution and project provided in the compressed archive are for MS Visual Studio 2008 (VC9), but it can be imported also in later versions (e.g., 2013). The program uses some external libraries for image loading and saving, namely libpng, jpeglib, and zlib, which are already provided as static objects in the archive.
As you will notice, the documentation is extremely poor, but it should not be difficult to understand how the program works and how can it be modified to render your very own scene.
The program is licensed under the MIT license, which is open and compatible with the GPL.