HXA7241 (logo)

four cornell box variants


a global illumination renderer


short description

An experimental physically-based renderer simulating global illumination, with progressive refinement, frame-coherent/noise-avoiding sampling, and generalised BRDFs. Complete open-source available for download under GPL license, totalling 30000 lines of well organised C++.

  • monte-carlo ray tracing basis
  • illumination by direct lighting and directly visualised photon mapping
  • generalised BRDF light interaction
  • high dynamic range CIE XYZ light representation
  • motion blur, depth of field, and glossy scattering capabilities
  • quasi-random stochastic generators
  • progressive refinement rendering
  • persistable and deterministic sampling state
  • triangle mesh models
  • model hierarchical instancing
  • image texturing with material and bump mapping

longer description

Perceptuum is an open-source standalone general purpose physically-based renderer simulating global illumination with monte-carlo ray tracing.

It is a Win32 application, with a minimal windowing interface. The scene and options are defined by XML files, and the image output is as tonemapped PNG (plain or sRGB) files, or ward-realpixels PNG files.

The code is 30000 lines of C++, divided into java-style packages, divided into classes, each in two files (h,cpp). It is intended to be ISO C++, but it has been developed with only one compiler, and not tested with anything else.

Illumination is a combination of direct lighting, and directly visualised photon mapping. Lightsources are selected with importance sampling by wattage. Light interaction is by semi-generalised BRDF, currently using the ward model and normalised phong. Light representation is high dynamic range CIE XYZ.

The rendering process is by progressive refinement, gradually accumulating frames. Each frame covers all sampling dimensions based on the frame number so it is persistable and deterministic, and the frame coherence eliminates pixel noise in exchange for much less prominent strobe artifacts. The time dimension is included, enabling motion blur. Most of the stochastic generators are quasi-random sequences, to reduce variance.

Models are triangle meshs, in a hierarchical instancing tree, each base object mesh being a single non-self-intersecting closed surface. Texturing is by images, with each object having a material pointer and its triangles having coords at the corners. The materials map a simple generalized range of qualitative reflection model parameters.

Current development status is that basic overall implementation is done. Important features yet to do include acceleration and tuning, sky illumination, and standard model file format translation. Other features to do include translucent volumes, texturing enhancements, wavelength sampling and polarisation enhancements. Full automation is a somewhat distant goal.

more documentation


thumbnail of thumbnails page
images page


perceptuum2 icon
7zip icon perceptuum21src.7z zipped source code (412k)
7zip icon p2changes.7z latest source code changes (better Octree mainly) (167k)
7zip icon perceptuum21exe.7z zipped executable (337k)
txt icon perceptuum2.readme.txt readme text file(25k)
txt icon LICENSE.txt license text file (18k)