[Soc-2016-dev] Weekly Report #07 - Cycles Denoising

Lukas Stockner lukas.stockner at freenet.de
Tue Jul 12 01:42:56 CEST 2016


Hi!

This week, I started with cleaning up and committing the changes from last week:
 - Various MSVC compilation fixes
 - Additional Debug output
 - Fixing Border rendering
 - Implementing the various parts needed for denoising after rendering
 - Fixing a bug where emission closures would cause denoising artifacts
 - Fixing debug passes with CUDA

This week, I fixed another two bugs, one of which would cause the lower-left tile to have visible border artifacts. The other one was a completely wrong computation in the least-squares code for determining the ideal filtering bandwidth. However, it seems that this fix caused some NaN/Black artifacts, so I'll have to fix that.
Also, I added an additional debug output that contains the estimated rMSE reduction per sample - that info would be used for adaptive sampling, so it's nice to be able to see the map.

Then, I finished the new Metallic BSDF patch (D2003). The new patch renames the Anisotropic BSDF to Metallic BSDF and adds the option to choose a coloring mode: "Color" is the default mode and works just like the node did before. "Physical" implements the conductive fresnel equations, so the user sets the N and K values for the metal. Since these can be hard to come by and are pretty unintuitive, the third mode is "Artistic", which uses the same fresnel internally, but controls it via two color options. Also, while finishing the patch, I found and fixed a bug that caused a failed assert when the Ashikhmin-Shirley distribution was used in the Glossy BSDF node.

Next, I continued working on the denoise-after-render feature: Now, it works on CUDA as well, the UI doesn't freeze anymore since the denoising now is a separate job internally, the image is updated whenever a tile is finished and the currently processed tiles are highlighted with the good old orange corners.
Also, I fixed a pretty large memory leak with CPU denoising.
The denoise-after-render feature currently has one remaining issue which is both a problem and an interesting feature: The denoising algorithm depends on the number of samples that the image was rendered with. However, that's not currently stored in the rendered image. Therefore, it just uses the current sample setting in the Scene properties. That's a problem because the user might change it in the meantime, so it's not correct anymore. However, it also offers an interesting control, since you can denoise the render at different sample values and get a noise-vs-blurring tradeoff that way. Of course, it won't remain that way, but it shows that tweaking the parts of the denoiser that depend on the sample value might be a good idea to introduce a real noise-vs-blurring control.

This report is a bit late again because this weekend the BlenderDay took place (as Julian and Thomas already mentioned). It was really great, and I got a lot of feedback and small(ish) feature requests for Cycles. I already hacked some code for one of them, support for correct refraction with nested dielectrics (such as a glass filled with water), and will upload it to dev.b.org soon. Others included things like making the Transparent Film option store alpha transparency for background seen through glass (that wouldn't include the warping caused by refraction, of course, but it's still nice for single-color backgrounds).

So, that's it for the seventh report. Next week I'll try to finally fix the remaining bugs in the denoising algorithm and look into additional feature passes like shadow or AO, so stay tuned for nicer results!

Lukas

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
Url : http://lists.blender.org/pipermail/soc-2016-dev/attachments/20160712/77af2472/attachment-0001.pgp 


More information about the Soc-2016-dev mailing list