diff --git a/assignments_2021/assignment4_materials_and_advanced/assignment4_materials_and_advanced.tex b/assignments_2021/assignment4_materials_and_advanced/assignment4_materials_and_advanced.tex index 970abefd25c09ac638b94a53252c68f8ccc05488..f01beee2a53a3a19abf23876ff10cbe9d8f51376 100644 --- a/assignments_2021/assignment4_materials_and_advanced/assignment4_materials_and_advanced.tex +++ b/assignments_2021/assignment4_materials_and_advanced/assignment4_materials_and_advanced.tex @@ -61,13 +61,13 @@ git push \hspace{\fill} \end{figure} Before we get down to business, let's first get rid of aliasing in our renderings. Until now, we have only ever shot our rays through the center of the pixels. If you have a lower-resolution display or zoomed in on your renderings, you probably saw that they are somewhat jaggy because of this (look at sharp edges, like the bottom of the front box)! We can quickly fix that by running minimalistic antialiasing for the whole pixel: in \texttt{main.cpp}, instead of shooting rays always through the pixel center, make it so that the rays can sample the full pixel width and height! -Also make sure that your changes are stored in \texttt{pixelSample} and are passed \texttt{block.put}. This will be important later. Congratulations: your renderings should now be antialiased! +Also make sure that your changes are stored in \texttt{pixelSample} and then passed to \texttt{block.put}. This will be important later. Congratulations: your renderings should now be antialiased! \section{Materials (15 Points + 15 Bonus Points)} \subsection{The Mirror BSDF (5 Points + 5 Bonus Points)} -There is also a mirror material, that might need special care: +We want to add a perfect mirror material, which needs special care: When you are on a surface and compute an outgoing sample, the direction is fixed by the reflection law. -As mentioned during the lecture, this is because the mirror PDF is a Dirac delta type function (Nori calls them \textbf{discrete} PDFs or measures). +As mentioned during the lecture, this is because the mirror direction distribution is a Dirac delta function (Nori calls them \textbf{discrete} PDFs or measures). The key conjecture is that no random hemisphere sampling method could ever hit the singular reflection vector for an incoming view ray by accident, so BSDF sampling is imperative for mirror materials. Only the \texttt{sample} function can be guaranteed to pick the unique and correct reflection direction for the next bounce. The \texttt{Mirror} class accounts for that by always returning 0 in the \texttt{pdf} function and 0 as the colour when calling \texttt{eval}, and 1 in the \texttt{sample} function if the surface is reflects the view ray. @@ -82,7 +82,7 @@ Use the BSDF in \texttt{dielectric.cpp} to make your solution accessible from sc Note that different source use different conventions for the directions and indices of refraction that they reference. You can use any convention you like, but the setup of Nori prefers that \texttt{bRec.wi} should be the negative view ray direction. The dielectric BSDF cannot give you the medium the view ray is coming from and the one it goes to, you should figure this out yourself. It only provides the index of refraction on the exterior and the interior of the object with the given material. -If you want your dielectrics to work with next event estimation, you basically have to treat a hit with them like a hit with a mirror model, because it also only reflects / refracts in one single direction. +If you want your dielectrics to work with next event estimation, you basically have to treat a hit with them like a hit with a mirror material, because it also only reflects / refracts in one single direction. While working on dielectrics, you might wonder what the \texttt{BSDFQueryRecord::eta} is for. This is only really necessary when you perform Russian Roulette with throughput. When light switches media (e.g. vacuum $\rightarrow$ glass), the radiance it carries changes (see slides for details).