108 lines
5.9 KiB
HTML
108 lines
5.9 KiB
HTML
|
**Final Report**
|
||
|
|
||
|
Student name: Cédric Hölzl
|
||
|
|
||
|
Sciper number: 257844
|
||
|
|
||
|
|
||
|
Public Dataset (10 points)
|
||
|
==========================
|
||
|
|
||
|
We used high resolution skymap image available from the NASA website. We also used the elevation map of switzerland availabe from OpenTopography. For the elevation map, we used the BlenderGIS plugin that can generate a mesh with a texture from an elevation map and google satelite images.
|
||
|
|
||
|
We can see that the terrain is properly generated with a mostly correct shape. We had to make slight modifications and corrections to "smoothe" and "rougthen" the terrain, since the elevation data does not have high resolution (30m). For instance the peak of the Matterhorn has invalid or missing data and had to be reconstructed by hand.
|
||
|
|
||
|
<img src="os.png" alt="Terrain">
|
||
|
|
||
|
|
||
|
Textures (10 points)
|
||
|
====================
|
||
|
|
||
|
To implement textures, we added a new object type to Nori, namely ETexture, and a class implementing it where we can sample a point on the image at the given coordinates.
|
||
|
|
||
|
We modified the BSDF record structure to hold the UV coordinates, in order to avoid having to pass a new argument when we sample a BSDF. We modified the various BSDF allowing them to take an image path instead of a color (albedo), they instantiate the texture if an image is passed as property and sample it instead of using the color.
|
||
|
|
||
|
We modified the table render from homework-5 and added a wood texture (from GIMP) to the table object.
|
||
|
|
||
|
<img src="table_mis.png" alt="Texture">
|
||
|
|
||
|
Image-Based Illumination (30 points)
|
||
|
====================================
|
||
|
|
||
|
Sample Warping
|
||
|
--------------
|
||
|
|
||
|
We implemented sample warping to adjust for the image provided. We sample the whole image and use linear interpolations to warp samples, and use a mipmap to store the image.
|
||
|
|
||
|
<img src="hsw_panorama.png" alt="WarpA">
|
||
|
<img src="hsw_panorama_2.png" alt="WarpB">
|
||
|
|
||
|
We can see that the warping even when passing the tests, mostly match.
|
||
|
|
||
|
Sampling
|
||
|
--------
|
||
|
We modified the various Integrators we built previously, in order to add support for Image-Based Illumination, when a ray exits the scene, we sample the envmap, similarly to a texture projected on a sphere. We added a infinite_area (envmap) class for this task.
|
||
|
|
||
|
Results
|
||
|
-------
|
||
|
We rendered a scene with a diffuse sphere on the left (using disney BSDF for our render and roughtconductor from the mitsuba reference render), followed by a dielectric ajax head and finaly a mirror ball to show that the skybox is also present behind the camera and matches.
|
||
|
|
||
|
<div class="twentytwenty-container">
|
||
|
<img src="envmap_ref.png" alt="Reference">
|
||
|
<img src="envmap.png" alt="Mine">
|
||
|
</div>
|
||
|
|
||
|
We can see that the images match, except for the Disney BSDF and RoughConductor balls are slightly different (due to disney BSDF not being perfectly equivalent to a rougth conductor in mitsuba).
|
||
|
|
||
|
Disney BRDF (30 points)
|
||
|
=========================
|
||
|
|
||
|
We used multiple references to help us with implementing the BRDF.
|
||
|
[Disney2012](https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf)
|
||
|
[Disney2015](https://blog.selfshadow.com/publications/s2015-shading-course/burley/s2015_pbs_disney_bsdf_notes.pdf)
|
||
|
|
||
|
Sample Warping
|
||
|
--------------
|
||
|
|
||
|
We implemented two warping functions for the Disney BRDF, GTR (Generalized-Trowbridge-Reitz) with $\sigma=1$ and $\sigma=2$ as seen in the disney paper.
|
||
|
|
||
|
<img src="warp_gtr1.png" alt="WarpGTR1">
|
||
|
<img src="warp_gtr2.png" alt="WarpGTR2">
|
||
|
|
||
|
Implementation
|
||
|
--------------
|
||
|
The implementation resides in a single BSDF file. We compute the resulting "color" similarly to how the paper presented it. We encountered some issues, where we missed a multiplication by cosTheta resulting in dark areas (for specular) where light is supposed to be (and similarly, a multiplication using a pdf was also missing). Those issues are however fixed now.
|
||
|
|
||
|
Issues
|
||
|
------
|
||
|
|
||
|
Unfortunately, I was unable to get the anisotropic factor working, it would have been interesting to use it on the water in the final render. The sheen should be implemented properly, I cross checked with the paper and PBRT but was unable to see why it would not display for the test scene below.
|
||
|
|
||
|
Results
|
||
|
-------
|
||
|
|
||
|
We tried to create a scene similar to the one on page 13 of the provided document ([Disney2012](https://media.disneyanimation.com/uploads/production/publication_asset/48/asset/s2012_pbs_disney_brdf_notes_v3.pdf)). In the Image below each column makes the value of a given parameter fluctuate from 0.1 to 1.0 by increments of 0.1. The rows are in order as follows: subsurface, metallic, specular, specular tint, roughness, sheen, sheen tint, clearcoat, clearcoat gloss.
|
||
|
|
||
|
<img src="disney.png" alt="Disney">
|
||
|
|
||
|
When comparing both images, we can clearly see that roughness and metallic render properly. A bit less clearly that specular, specular tint, clearcoat, clearcoat gloss, also seems to produce the desired effect. However, neither sheen nor sheen tint show any clear difference.
|
||
|
|
||
|
Unfortunately neither blender or Mitsuba have a disney BSDF implemented which would have been useful for more precise validation and comparison. As seen previously with the envmap, using an other bsdf with similar parameters results in a very different result.
|
||
|
....
|
||
|
|
||
|
Final Scene
|
||
|
========
|
||
|
|
||
|
<img src="final-A.png" alt="Final Render">
|
||
|
|
||
|
<!-- Slider -->
|
||
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
|
||
|
<script src="../resources/jquery.event.move.js"></script>
|
||
|
<script src="../resources/jquery.twentytwenty.js"></script>
|
||
|
<link href="../resources/offcanvas.css" rel="stylesheet">
|
||
|
<link href="../resources/twentytwenty.css" rel="stylesheet" type="text/css" />
|
||
|
<script>var markdeepOptions = {onLoad: function() {$(".twentytwenty-container").twentytwenty({default_offset_pct: 0.5, move_slider_on_hover: true});} };</script>
|
||
|
<!-- Markdeep: -->
|
||
|
<script src="https://morgan3d.github.io/markdeep/latest/markdeep.min.js?" charset="utf-8"></script>
|
||
|
<script>window.alreadyProcessedMarkdeep||(document.body.style.visibility="visible")</script>
|