Part Two: Physically Based Rendering

In Part I, we implemented a simple ray tracer, which can already render some interesting scenes. However, that renderer is based on our intuition, instead of physical lows. In this part, we’ll replace every part of the renderer with a physically based scheme, which gives us a more realistic experience.

Generally, what we’ll cover includes:

This is the core part of this tutorial. Please read it carefully and make sure you understand every part, especially those math and physics contents. Note that only the basic implementations of each part are included here. Our main goal is to build a framework that is capable of rendering complex scenes using PBR techniques, and those complex things like advanced integrator will be covered in the next part.

In-compatible Scenes

There’re so much to modify and I will point out them whenever needed. However, all test scenes we’ve been using will be deleted and re-constructed, since so much are changed and it’s cumbersome to modify them step by step.