**CS888: Advanced Topics in Computer Graphics**
**(Ray Tracing Seminar)**
![Denoising an image produced by Monte Carlo path tracing using the method of [Vogels et al. 2018](http://drz.disneyresearch.com/~jnovak/publications/KPAL/KPAL.pdf)](denoising.jpg)
**Instructors**: [Morgan McGuire](https://casual-effects.com), [Craig Kaplan](http://www.cgl.uwaterloo.ca/csk/), [Stephen Mann](http://www.cgl.uwaterloo.ca/smann/)
This is a seminar course with a majority of the lecture time devoted
to student-led presentations. In each session, a student will present
and critique one or two assigned papers related to the term's
topic. They will discuss the paper or papers, and offer their own
thoughts about what could have been done differently and how the work
could be extended. The rest of the students are expected to read the
papers, attend the presentations, and participate in the following
discussion. Students who take the course for credit are also expected
to complete a small project at the end of the term.
Topics covered:
- Monte Carlo Integration
- Markov Chain Monte Carlo
- Bounding Volume Hierarchies
- Parallel Ray Tracing
- Quasi-Monte Carlo and Low-Discrepancy Patterns
- Photon Mapping
- Path Tracing
- Metropolis Light Transport
- Participating Media
- Image Reconstruction (Denoising)
Room: DC 2568
Time: Friday 10am-1pm
First meeting September 6, 2019
Student Reponsibilities
===============================================================================
Background
-------------------------------------------------------------------------------
- Intro graphics through Whitted ray tracing (CS488/688)
- Derivative and integral calculus (MATH138)
- Probability (STAT230)
Audit
-------------------------------------------------------------------------------
Students who wish to audit the course must:
- Read all assigned papers
- For each paper, write a one-paragraph summary distinguishing that paper from previous work
- Attend all lectures
- Participate in discussions
- Present one seminar
Credit
-------------------------------------------------------------------------------
Students who take the course for credit must complete all the above
work as well as complete a programming project at the end of the
term.
Marks will be assigned as follows:
- Participation (including attendance and weekly paragraphs): 25%
- Warmup programming project (Path Tracing): 10%
- Seminar presentation and lecture notes: 30%
- Project (including written report): 35%
Meta-Topics
===============================================================================
We begin the course by discussing strategies for reading technical
papers in computer graphics rendering and how you should present and
critique such work. The remaining lectures will be by students in
accordance with these guidelines.
Implicit goals of the course are to teach you to work with primary
sources in this field, to develop your intuition for important
techniques and problems, and to connect research theory with
implementation practice.
At the beginning of the course, we'll present two lectures reviewing
ray tracing, the rendering equation, importance sampling, Monte Carlo,
path tracing, and parallel processing. These will use the Graphics
Codex for supplemental reading and cover the material for the warmup
programming project of implementing a naive pure path tracer.
Schedule
===============================================================================
We will read a subset of the following papers, driven by enrolment and
student preferences.
Please submit your 1-paragraph summary of each assigned paper _before_
class via LEARN. Late work or missing will receive a failing grade.
The Graphics Codex path tracing content is in the _web edition_
(Amazon) in September. The iOS edition is a point release behind
because of Apple's review process and will not be up to date until
mid-September.
1. Sep 6, *Path tracing*:
+ Lecture:
- Welcome to the ray tracing seminar [[PPT](welcome.pptx)|[PDF](welcome.pdf)]
- How to read rendering research papers [[PPT](reading-research.pptx)|[PDF](reading-research.pdf)]
- How to present a research paper [[PPT](present-research.pptx)|[PDF](present-research.pdf)]
- Sign up for presentation dates
- Global illumination, Monte Carlo, and path tracing review [[PPT](path-tracing-review.pptx)|[PDF](path-tracing-review.pdf)]
- Example importance sampling pure path tracer [[C++](https://casual-effects.com/g3d/G3D10/samples/simplePathTracer/main.cpp)]
+ Required reading (after class, no summary paragraph required):
- "Numerical Calculus" and "Path Tracing" chapters in the [Graphics Codex](http://graphicscodex.com), version 2.16
- [The rendering equation](https://dl.acm.org/citation.cfm?id=15902), Kajiya, SIGGRAPH'86
- Further optional reading:
- [Bidirectional estimators for light transport](http://graphics.stanford.edu/papers/bidir/), Veach and Guibas, EGSR'94
- [A radiosity method for non-diffuse environments](https://www.researchgate.net/publication/220720201_A_Radiosity_Method_for_Non-Diffuse_Environments), Immel et al., SIGGRAPH'86
- Kaplan and ½ Mann out
1. Sep 13, *Materials*:
+ Lecture: Parallel path tracing [[PPT](parallel-path-tracing.pptx)|[PDF](parallel-path-tracing.pdf)]
+ Andrew Na presents [Physically-based shading at Disney](https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf), Burley, SIGGRAPH'12 Courses
- Sign up for a _second_ presentation
- Recommended reading:
- "Materials" chapter in the [Graphics Codex](http://graphicscodex.com)
- [Microfacet models for refraction through rough surfaces](https://www.cs.cornell.edu/~srm/publications/EGSR07-btdf.html), Walter et al., EGSR'07
- Kaplan ½ out
1. Sep 20, *Re-using paths*:
+ Ze Ran Lu presents [Instant radiosity](https://dl.acm.org/citation.cfm?id=258769), Keller, SIGGRAPH'97
+ Ilene Lu presents [Global illumination using photon maps](http://graphics.ucsd.edu/~henrik/papers/photon_map/), Jensen, EGSR'96
- Recommended reading:
- "Rendering Algorithms" chapter in the [Graphics Codex](http://graphicscodex.com), version 2.16
- Warmup path tracer due
1. ~~Sep 27, *Sampling*~~:
Class is cancelled in acknowledgement of community participation in [Global Climate Strike](https://globalclimatestrike.net/).
_University participants plan to gather at 10 a.m. in the Arts Quad before heading to Uptown to join the region's
11:30 am event in Waterloo Town Square._
The required reading is:
+ The "Parallel Architectures" chapter in the [Graphics Codex](http://graphicscodex.com), version 2.17 (available Sep. 19, no summary paragraph required)
+ Your choice of _one_ of the following, for which you must submit a paragraph as usual:
- [Sampling the GGX distribution of visible normals](http://jcgt.org/published/0007/04/01/), Heitz, JCGT'18
- [A low-discrepancy sampler that distributes Monte Carlo errors as blue noise in screen space](https://belcour.github.io/blog/research/2019/06/17/sampling-bluenoise.html), Heitz et al., EGSR'19
- [Analysis of Sample Correlations for Monte Carlo Rendering](https://pdfs.semanticscholar.org/59bc/d7a48ea034236391c71acdd2cd749b3da485.pdf), Singh et al., Eurographics'19
1. Oct 4, *Optimal MCMC*:
+ Joshua Liu presents [Metropolis light transport](https://dl.acm.org/citation.cfm?id=258775), Veach and Guibas, SIGGRAPH'97
- Towaki Takikawa presents [Fusing State Spaces for Markov Chain Monte Carlo Rendering](https://dl.acm.org/citation.cfm?id=3073691), Otsu et al., SIGGRAPH'17
- [A Simple and Robust Mutation Strategy for the Metropolis Light Transport Algorithm](), Kelemen et al., Computer Graphics Forum 2002
- [Charted Metropolis Light Transport](https://dl.acm.org/citation.cfm?id=3073677), Pantaleoni, SIGGRAPH'17
- [Neural importance sampling](http://drz.disneyresearch.com/~jnovak/publications/NIS/index.html), Müller et al., SIGGRAPH'19
- [Optimal multiple importance sampling](https://graphics.cg.uni-saarland.de/publications/kondapaneni-2019-siggraph-optimal-mis.html), Kondapaneni et al., SIGGRAPH'19
- Kaplan out
1. Oct 11, *Volumes*:
- Sina Nabizadeh presents [Gradient-domain volumetric photon density estimation](https://dl.acm.org/citation.cfm?id=3201363), Gruson et al., Transactions on Graphics 2018
- Allen Yeh presents [Multi-scale modeling and rendering of granular materials](https://cs.dartmouth.edu/~wjarosz/publications/meng15granular.html), Meng et al., SIGGRAPH'15
- Lizhe Chen presents [Deep scattering: rendering atmospheric clouds with radiance-predicting neural networks](https://dl.acm.org/citation.cfm?id=3130880), Kallweit et al., SIGGRAPH'17
1. Oct 25, *Denoising*:
- Andrew Tinits presents [Sample-based Monte Carlo Denoising using a Kernel-Splatting Network](https://groups.csail.mit.edu/graphics/rendernet/), Gharbi et al., SIGGRAPH'19
- Qingnan Duan presents [Texture space caching and reconstruction for ray tracing](https://dl.acm.org/citation.cfm?id=2982407), Munkberg et al., Transactions on Graphics 2016
- [Denoising with kernel prediction and asymmetric loss functions](https://dl.acm.org/citation.cfm?id=3201388), Vogels et al., SIGGRAPH'18
- [On Filtering the Noise from the Random Parameters in Monte Carlo Rendering](https://dl.acm.org/citation.cfm?id=2167083), Sen and Darabi, SIGGRAPH'12
1. Nov 1, *Scheduling*:
+ Matthew Lakier presents [GPU Ray Tracing](https://dl.acm.org/citation.cfm?id=2447976.2447997&coll=portal&dl=ACM), Parker et al., Communications of the ACM 2013
- Qingnan Duan presents [Embree: A Kernel Framework for Efficient CPU Ray Tracing](https://dl.acm.org/citation.cfm?doid=2601097.2601199), Wald et al., Transactions on Graphics 2014
- Josh Liu presents [Mitsuba 2: A Retargetable Forward and Inverse Renderer](https://rgl.epfl.ch/publications/NimierDavidVicini2019Mitsuba2), Nimier-David, Vicini, et al., Transactions on Graphics 2019
1. Nov 8, *Traversal*:
- Lizhe Chen presents [Wide BVH Traversal with a Short Stack](https://www.researchgate.net/publication/333933938_Wide_BVH_Traversal_with_a_Short_Stack), Vaidyanathan et al., HPG'19
- Matthew Lakier presents [The Design and Evolution of Disney's Hyperion Renderer](https://www.yiningkarlli.com/projects/hyperiondesign/hyperiondesign.pdf), Burley et al., Transactions on Graphics 2018
- [Dual split trees](http://www.cemyuksel.com/research/papers/dualsplittrees_i3d2019.pdf), Lin et al., I3D'19
- [Flexible Ray Traversal with an Extended Programming Model](https://web.yonsei.ac.kr/wjlee/traversalshader.html), Lee et al., SIGGRAPH Asia 2019 Technical Brief
1. Nov 15, *Production I*:
+ Saadiya Desai presents [Arnold: A Brute-Force Production Path Tracer](https://www.arnoldrenderer.com/research/Arnold_TOG2018.pdf), Georgiev et al., Transactions on Graphics 2018
- Sina Nabizadeh presents [Sony Pictures Imageworks Arnold](https://fpsunflower.github.io/ckulla/data/2018_tog_spi_arnold.pdf), Kulla et al., Transactions on Graphics 2018
- [The Iray Light Transport Simulation and Rendering System](https://arxiv.org/abs/1705.01263), Keller et al., NVIDIA Technical Report 2017
1. Nov 22, *Production II*:
+ Saadiya Desai presents [Manuka: A batch-shading architecture for spectral path tracing in movie production](https://jo.dreggn.org/home/2018_manuka.pdf), Fascione et al., Transactions on Graphics 2018
- Towaki Takikawa presents [RenderMan: An Advanced Path-Tracing Architecture for Movie Rendering](https://graphics.pixar.com/library/RendermanTog2018/paper.pdf), Christensen et al., Transactions on Graphics 2018
- Andrew Na presents [Vectorized Production Path Tracing](http://www.tabellion.org/et/paper17/MoonRay.pdf), Lee et al., HPG 2017
1. Nov 29, *Project Presentations* (8 min each, plus 2-3 min questions and setup)
- Andrew Na: Progressive photon mapping
- Lizhe Chen: Stochastic progressive photon mapping
- Qingnan Duan: Distributing Monte Carlo errors as blue noise
- Ze Ran Lu: Sampling the GGX distribution of visible normals
- Josh Liu: Primary space Metropolis light transport
- Matthew Lakier: Practical model of subsurface light transport
- Sina Nabizadeh: Implicit surface path tracing
- Towaki Takikawa: DeepSDF
⭑ Must be among the papers presented on this day
Projects
===============================================================================
Warmup
-------------------------------------------------------------------------------
The warmpup project is implementing a naive pure path tracer from in
your preferred programming environment. You must implement the path
tracing main loop, reflection and refraction, at least cosine-based
importance sampling, and gamma encoding.
Render images of the Cornell Box (the classic version with the mirror
box in it), a scene with refractive transmission (such as the Cornell
Box with glass spheres), and one other scene showing glossy
reflection, such as the version Sponza with the glossy floor. Submit a
two-page "report" comprising solely of your images and the core
implementation of the algorithm, which should be about 100 lines of
code.
You are not expected to implement your own BVH, tone mapping, point
lights, light importance sampling, low-discrepancy sampling, full BSDF
importance sampling, denoising, etc. There are no expectations for
performance.
You may use a ray-triangle intersection library such as Embree, OptiX,
RadeonRays, VKRT, or DXR. You may use a asset-loading libraries such
as tinyOBJ, AssIMP, FreeImage, etc. I recommend using
[G3D](https://casual-effects.com/g3d), which provides the `G3D::Scene`
loader and `G3D::TriTree` as simple C++ interface to Embree and OptiX.
The purposes of the warmup are to build your intuition for the Monte
Carlo aspects of the papers we will read and ensure that you have
experience with some software tools that you might use for the final
project. We recommend against using something like Shadertoy for the
warmup because this will not put you in a good position for a more
significant project later (although it is certainly a fun exercise to
write a single-shader path tracer!).
Final
-------------------------------------------------------------------------------
The final programming project will involve implementing a well-known
rendering algorithm of the student's choice. Most students will work
individually, but I will consider proposals for pair projects based on
the topic and implementation plan.
The deliverables for the programming project are:
- A three-page report summarizing the project
- Visual results (included in the report) demonstrating:
- Correctness (or lack thereof) in simple, reproducible contexts
- Artistic images demonstrating the visual impact
- Experimental results comparing to the paper
- Supplemental material of code demonstrating the core of the technique. This should
not include all of the dependencies or necessarilly be compilable on its own.
- A 5-10 minute presentation in class comprising a _brief_ discussion of
the core mathematical idea and then results
I recommend that you begin the project about half way through the
term. Projects generally should not be "from scratch" and should
instead build on some existing rendering framework that handles
low-level asset loading, ray-triangle intersection, and materials,
such as:
- [G3D](https://casual-effects.com/g3d/)
- [PBRT](https://github.com/mmp/pbrt-v3)
- [Mitsuba](https://www.mitsuba-renderer.org/)
- [Falcor](https://developer.nvidia.com/falcor)