Welcome to the TinyDiffRast project!
Inspired by tiny renderer, this tiny course aims to implement, explain, and explore state-of-the-art approaches to differentiable triangle rasterization. Differentiable rasterization is a type of inverse rendering approach, which allows 3D scene parameters (materials, lights, cameras, geometry) to be learned from 2D image supervision.
Here are a few of the cool things that you will learn to implement from scratch in this course.
The 3D bunny model was obtained from The Stanford 3D Scanning Repository.
The course content and the accompanying codebase was developed by Jordan J. Bannister while working at Mila, in collaboration with Derek Nowrouzezahrai from the McGill Graphics Lab. Depending on what the future holds, we may develop more content like this to delve into other topics in the world of inverse rendering. If this is something that interests you, let us know by giving us a star on the project github page.
Lessons
-
0) First Things First
-
1) The Discontinuity Problem
-
2) Learnable Camera Models
-
3) Rasterization
-
4) Shading
-
5) Automatic Differentiation
-
6) Optimize Light and Albedo Parameters
-
7) The Return of The Discontinuity Problem
-
8) Rasterize Then Splat (RTS)
-
9) Nvidia Diff Rast (NVDR)
-
10) Optimize Camera Parameters
-
11) Optimize Geometry Parameters
-
12) Wrapping Up