Takua Renderer
A physically-based photorealistic global illumination renderer
Overview
Takua Renderer is a physically-based photorealistic 3D renderer I am writing from scratch in C++. Takua is built from the ground up as a global illumination renderer supporting global illumination through several different light transport algorithms, including unidirectional pathtracing with direct light sampling, Veach-style bidirectional pathtracing with multiple importance sampling, progressive photon mapping, and vertex connection and merging. The renderer is still a work in progress, but already supports a number of features, listed below. The ultimate objective of this project is to learn about building an advanced production-ready renderer.
There have been 8 major versions of Takua Renderer so far, with each version representing either a significant refactoring/rewrite and exploration of a new architecture, or a major evolution of the previous version. The current version of Takua Renderer is Revision 9, or Takua a0.9. Past versions are:
Takua a0.9: An evolution of Takua a0.8 with significant advances in production-grade features, including an expanded shading node library, support for tiled, mipmapped out-of-core texture caching, various shading improvements, light visibility controls, new light types, traversal speed improvements, additional subdivision modes, and more.
Takua a0.8: An evolution of Takua a0.7 with significant shading system improvements (including a general-purpose uber-Bsdf and a layering system), support for subdivision surfaces and displacement mapping, instancing improvements, large ray traversal speed improvements, light sampling improvements, and a checkpointing system for suspending/resuming renders.
Takua a0.7: An evolution of Takua a0.6 with significant architectural improvements; redesigned integrator system to a brand new path-space formulation light transport library; completely new advanced shading system.
Takua a0.6: An evolution of Takua a0.5 with significant improvements to overall speed, sampling strategies, light subsystem, and a rebuilt, much more efficient integrator system.
Takua a0.5: Brand new massively concurrent CPU renderer with a highly modular, plugin based architecture and multiple advanced light transport algorithms. Can also optionally make use of CUDA in certain plugin types. The design of Takua a0.5's core is considered stable and is meant to serve as a base for continued development.
Takua a0.4: Experimental CUDA/CPU hybrid unidirectional pathtracer with significant shared code paths between the CUDA and CPU rendering cores. Essentially a merger of Takua a0.3 and Takua a0.2.
Takua a0.3: Experimental CUDA unidirectional pathtracer built from scratch after gaining knowledge from building a previous GPU Pathtracer with Peter Kutz.
Takua a0.2: Experimental CPU unidirectional pathtracer built from scratch after gaining knowledge from building Takua a0.1.
Takua a0.1: My first CPU pathtracer.
This project has been under active development since 2012 and is my personal project outside of work. Takua Renderer is also currently used at Cornell University's Program of Computer Graphics as a research renderer.
Features
Select Images
Planned Future Improvements
Older Images
Acknowledgements
This project would not be possible without the guidance of Joseph T. Kider, Don Greenberg, Aline Normoyle, Patrick Cozzi, and Norm Badler. Also, friends Harmony Li, Gabriel Leung, and Dan Knowlton have been instrumental as sounding boards for ideas and partners for discussion. Numerous discussions with Peter Kutz have provided me with a number of critical insights and his Photorealizer project is what inspired me to undertake this project. Finally, countless people in industry and academia have been kind enough to talk with me and provide encouragement at conferences such as SIGGRAPH and at places I have worked.
Project Blog Posts
I am posting progress updates for Takua Renderer to my development blog, Code & Visuals. The following posts detail the ongoing development of this project. Posts are listed starting with the most recent:
Resources
In the process of building Takua Renderer, I have drawn upon the following papers, books, and articles. They are listed in no particular order. This list, of course, is nowhere near complete; many more resources are cited on my blog in various posts.
Physically Based Rendering: The go-to reference book for rendering, by Matt Phar and Greg Humphreys.
Light Transport Simulation with Vertex Connection and Merging: Georgiev et al.'s 2012 paper introducing the VCM algorithm.
Implementing Vertex Connection and Merging: Iliyan Georgiev's technical report describing implementation details for VCM.
Progressive Photon Mapping: Hachisuka et al.'s 2008 paper presenting a progressive extension to photon mapping.
Stochastic Progressive Photon Mapping: Hachisuka et al.'s 2009 paper extending PPM to handle distributed effects such as depth of field and motion blur.
Progressive Light Transport Simulation on the GPU: Survey and Improvements: Davidovic et al.'s 2012 paper discussing a variety of light transport algorithms.
Sorted Deferred Shading for Production Path Tracing: Eisenacher et al.'s 2013 paper describing the architecture of Walt Disney Animation Studios' production renderer, Hyperion.
Light Transport on Path-Space Manifolds: Wenzel Jakob's 2012 Cornell PhD thesis on Metropolis Light Transport and Manifold Exploration.
Efficient Monte Carlo Methods for Light Transport in Scattering Media: Wojciech Jarosz's 2008 UCSD PhD thesis on Monte Carlo rendering for participating media.
The Rendering Equation: The original 1986 paper presenting the global illumination rendering problem and pathtracing solution, by James Kajiya.
Robust Monte Carlo Methods for Light Transport Simulation: Eric Veach's 1997 Stanford PhD thesis presenting the Metropolis Light Transport method. Also contains useful information on unidirectional and bidirectional pathtracing.
Physically Based Lighting at Pixar: Christophe Hery and Ryusuke Villemin's SIGGRAPH 2013 course notes on physically based rendering.
Mitsuba: Wenzel Jakob's research renderer.
Embree: Intel's open source high performance ray tracing kernels.
Threaded Building Blocks: Intel's open source parallel C++ toolkit.
Realistic Image Synthesis Using Photon Mapping: Henrik Wann Jensen's Photon Mapping book.
Reflections and Refraction in Raytracing: A paper detailing the math behind reflection and refraction, by Bram de Greve.
Realistic Image Synthesis Using Photon Mapping: The original photon mapping book covering general GI problems and the photon mapping algorithm, by Henrik Wann Jensen.
A Hierarchical Automatic Stopping Condition for Monte Carlo Global Illumination: Dammertz et al.'s 2009 paper on a hierarchical adaptive sampling algorithm.
Consistent Normal Interpolation: Reshetov et al.'s 2010 paper on a better normal interpolation algorithm.
The Direct Lighting Computation in Global Illumination Methods: Changyaw Wang's 1994 Indiana University, Bloomington PhD Dissertation detailing the direct lighting component in GI.
Models of Light Reflection for Computer Synthesized Pictures: James Blinn's 1977 paper on the Blinn-Phong shading model.
Active Thread Compaction for GPU Pathtracing: Ingo Wald's 2011 paper on thread compaction as an acceleration technique for GPU pathtracing.
Real-Time KD-Tree Construction on Graphics Hardware: Kun Zhou's 2008 paper on short-stack KD-Tree construction and traversal.
Stackless KD-Tree Traversal for High Performance GPU Ray Tracing: Stefan Popov's 2007 paper on stackless KD-Tree traversal through rope-based KD-Trees.
Interactive KD-Tree GPU Raytracing: Daniel Horn's 2007 paper on various GPU KD-Tree traversal techniques, including short-stack while-while traversal.
Parallelizing the Physics Pipeline: Physics Simulations on the GPU: Takahiro Harada's 2009 GDC talk on GPU physics. The relevant part for this project is the section on history-flag based stackless KD-Tree traversal.
Working with Ellipses: An article by Inigo Quilez on quirks with calculating ellipse bounding boxes and other math.
Fresnel Equations Wikipedia Article: A good overview of the math behind Fresnel reflection/refraction.
KD-Tree Wikipedia Article: A description of the KD-tree spatial partitioning data structure.
KD-Tree Assignment Description: A summary of how kd-trees work from a Stanford University computer science course's homework assignment.
Writing A Pathtracer: An incomplete, but nonetheless useful primer on some basic pathtracing concepts, by Nikita Nikishin.
Wikipedia Pathtracer Article: A fairly concise description of the pathtracing concept.
Bidirectional Reflectance Distribution Function Wikipedia Article: General summary of what BRDFs are and how they work.
Bidirectional Scattering Distribution Function Wikipedia Article: Describes what BSDFs are and how they differ from BRDFs.
Ray Tracey's Blog: Sam Lampere (Ray Tracey)'s blog following the development of OTOY's Brigade Engine.
Photorealizer: Physically-Based Renderer Blog: Peter's Kutz's development blog for Photorealizer.
Renderspud Blog: Mike Farnsworth's development blog for Renderspud.
CIS460 Computer Graphics Notes: An extremely detailed and thorough set of slides created by Professor Norm Badler for his course CIS460: Computer Graphics at the University of Pennsylvania. Unfortunately, Professor Badler's notes are not available publicly.
Simon's Graphics Blog: Simon Brown's pathtracing development blog.
OMPF2: A rendering enthusiast forum and discussion board.




