diff --git a/assignments_2021/assignment3_sampling/assignment.tex b/assignments_2021/assignment3_sampling/assignment3_importance_sampling.tex similarity index 98% rename from assignments_2021/assignment3_sampling/assignment.tex rename to assignments_2021/assignment3_sampling/assignment3_importance_sampling.tex index 35428067cd9bf428ff00d4b843522186c19df286..f338c042e0caa1f5ed37827c0861b6422fa6afb6 100644 --- a/assignments_2021/assignment3_sampling/assignment.tex +++ b/assignments_2021/assignment3_sampling/assignment3_importance_sampling.tex @@ -10,7 +10,7 @@ \newcommand{\todo}[1]{\color[red]{\textbf{#1}}} \title{Assignment 3: Importance Sampling} -\deadline{2020-07-14 23:59}%2020-05-13 23:59 +\deadline{2021-06-02 23:59}%2020-05-13 23:59 \teaser{ \hspace*{\fill} \includegraphics[width=0.32\linewidth]{figures/ajax_pt_uniform.png} @@ -42,7 +42,6 @@ git pull upstream master git push \end{verbatim} We also provide a reference implementation for assignment 2, you can download it from TUWEL. -If you didn't implement light surface sampling, you should use it, as we will need it for next event estimation. \section{Sample Warping (7 easy points, 9 bonus points)} Random numbers are often generated uniformly in the range between 0 and 1. We can combine multiple such random numbers to sample cartesian domains uniformly, but different distributions are needed, e.g., to get uniform distribution in a non-cartesian domain (for recursive rendering, we need to sample the hemisphere for instance), or for importance sampling techniques. This task can be fully solved in \texttt{warp.cpp}. @@ -126,7 +125,7 @@ Implement next event estimation (NEE) for your diffuse path tracer, according to That is, on every bounce, you create one light surface sample and try to connect to compute direct lighting with surface sampling. Another ray is then sent out to retrieve indirect light in the next bounce. Make sure that you use the BSDF to generate the indirect sample to benefit from cosine-weighted hemisphere sampling of indirect light on materials that use it. If you implement NEE, be careful not to erroneously count the emittance twice (i.e., first when doing the light surface sampling and then when hitting a light source randomly). -To get a correct image, the emittant surface points that your ray hits should only be considered on the first intersection. +To get a correct image, the emittant surface points that your ray hits should only be considered on the first intersection or if the last material did not support hemisphere sampling (e.g., mirrors!). For all other light, the illumination is computed via direct lighting, i.e., one bounce in the future (hence, "next event"). For further details, please see the lecture slides. Just as a heads-up: implementing NEE will dramatically improve the quality of your renderings! In combination with spatial acceleration structures, you should now be able to render impressive scenes fast! To test this, compare the output of the test scenes that end in \texttt{uniform} or \texttt{cosine} with the ones that end in \texttt{nee}. The latter use next event estimation and should give significantly cleaner results. diff --git a/suggestions_for_2022.txt b/suggestions_for_2022.txt index 0b1a098a99ea1bdd5d19f64017f41949891f2f38..65708bf7e7126f4e0f36f288877e3e5ff5629551 100644 --- a/suggestions_for_2022.txt +++ b/suggestions_for_2022.txt @@ -30,3 +30,5 @@ NORI_REGISTER_CLASS(ParallelogramEmitter, "parallelogram_emitter"); * tbb --> C++11 standard lib +* Add a few cooler scenes to BVH assignment! Like some ajax being rendered with AO :) +