MiniLight 1.5.2 ====================================================================== Copyright (c) 2006-2008, Harrison Ainsworth / HXA7241. http://wwww.hxa7241.org/minilight/ 2008-02-17 Contents -------- * Description * Usage * Acknowledgements * Appendix * License Description ----------- MiniLight is a minimal global illumination renderer. It is primarily an exercise in simplicity. Someone asked me how to develop a renderer in three months. It seemed not nearly enough time. But then I began to think how small such a program could be, whilst still being a complete physically based simulation with a clear, well-formed design... It is a command-line application. It reads a simple text model file and writes a PPM image file. Supported platforms include Windows, Mac, and Linux. Full source code is provided under the (new) BSD license. There are various translations, all of nine or ten classes/modules. The design follows one for a full-scale renderer, and an architecture description document is included. The features are: * Monte-carlo path-tracing transport * Emitter sampling * Progressive refinement * RGB light * Diffuse materials * Triangle modelling primitives * Octree spatial index * Pin-hole 'lens' * Ward linear tone-mapping See the translation-specific readmes for installation and build information. Usage ----- When running it, just supply a model file name, eg.: minilight modelFilePathName The model file format is: #MiniLight iterations imagewidth imageheight viewposition viewdirection viewangle skyemission groundreflection trivertex0 trivertex1 trivertex2 reflectivity emitivity trivertex0 trivertex1 trivertex2 reflectivity emitivity ... -- where iterations and image values are ints, viewangle is a float, and all other values are three parenthised floats. The file must end with a newline. For example: #MiniLight 100 200 150 (0 0.75 -2) (0 0 1) 45 (3626 5572 5802) (0.1 0.09 0.07) (0 0 0) (0 1 0) (1 1 0) (0.7 0.7 0.7) (0 0 0) This description is available using help: minilight {-?|--help} To interrupt a render, press ctrl-c (or press the 'stop' button). * World axes are: X positive rightwards, Y positive upwards, Z positive forwards. * Triangle front face has clock-wise vertexes. * Triangles are reflective (therefore visible) on both faces, but emissive on the front face only. * errors in a model file may or may not be reported, and then not clearly Acknowledgements ---------------- ### Favourite rendering books ### * 'Principles Of Digital Image Synthesis' Andrew Glassner; Morgan Kaufmann, 1995. 1-55860-276-3 * 'Realistic Image Synthesis Using Photon Mapping' Henrik Wann Jensen; AK Peters, 2001. 1-56881-147-0 * 'Global Illumination Compendium' Philip Dutre; http://www.cs.kuleuven.ac.be/~phil/GI/ ### Reused code/algorithms/equations ### * 'Fast, Minimum Storage Ray-Triangle Intersection' Moller, Trumbore; Journal of Graphics Tools, v2 n1 p21, 1997. http://www.acm.org/jgt/papers/MollerTrumbore97/ * 'A Contrast Based Scalefactor For Luminance Display' Greg Ward/Larson; Graphics Gems 4, AP, 1994. 0123361559 * Random number generator (simple and fast but good) Glenn Rhoads; http://web.archive.org/web/20050213041650/http:// paul.rutgers.edu/~rhoads/Code/code.html * 'The Solid Angle of a Plane Triangle' Oosterom, Strackee; IEEE Transactions on Biomedical Engineering, Vol. BME-30, No. 2, 1983. ### Image file format ### * PPM image format http://netpbm.sourceforge.net/doc/ppm.html * RGBE image format http://radsite.lbl.gov/radiance/refer/filefmts.pdf 'Real Pixels' Greg Ward/Larson; Graphics Gems 2, AP, 1991. 0120644819 ### tools ### * jEdit 4.3 editor http://www.jedit.org/ Appendix -------- ### Models ### Here are the emitter values for the cornell box models: * morning * sky: 8000 K, 5000 cd/m^2 (4532 4712 5756) * noon * sun: 5400 K, 1*10^9 cd/m^2 (1177902548 993796380 828301072) * sky: 10000 K, 10000 cd/m^2 (8068 9060 12872) * evening * sun: 2000 K, 5*10^5 cd/m^2 (1182965 313131 3904) * sky: 5000 K, 125 cd/m^2 (156 125 94) * lamp: equal-energy white, 1000 cd/m^2 * night * sky: 8000 K, 0.1 cd/m^2 (0.0906 0.0942 0.1151) * lamp: equal-energy white, 1000 cd/m^2 The sun has a diameter of 1.392 x 10^9 m, and distance of 149.6 x 10^9 m. (It is just a square though.) ### HDRI output ### Code for outputting images as Ward's RGBE/Radiance format is included in the C++ translation. Search the source for HDRI and substitute-in the commented-out portions. License ------- ### (New) BSD ### Copyright (c) 2006-2008, Harrison Ainsworth / HXA7241. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.