利用者:Lukasstockner97/GSoC 2016/Weekly Reports/Week 4

提供: wiki
移動先: 案内検索

Hi!

This week, I finished the basic denoising code. It took a bit longer than expected, there were a bunch of annoying issues in the numerical code like swapped indices etc. I'm pretty sure there's still a bug somewhere in there since some corners get completely over-blurred, but that shouldn't be so hard to find.

Regular denoising mode.

For many scenes, though, it already works pretty fine - here's an example of the Classroom benchmark scene, rendered at 300spp and denoised. (Annoyingly, though, I forgot to save the noisy version as well and didn't want to delay the already pretty late report by 2h to render it again, so there's no direct comparison). The biggest problem in that scene (and many others) are the shadow edges that are completely gone, so I tried a little trick inspired by the paper I linked in report #2 - instead of just using x and y as screen position features, using x, y, x^2, y^2 and x*y (essentially, the second-order taylor expansion in screen space) produces much better shadows, as you can see to the right.

Experimental quadratic fitting mode.

However, you may also notice that the out-of-focus desk in the lower right corner has a lot of artifacts now - that's why an adaptive picking of the taylor order, as described in the paper, is needed to use the higher order fits properly. Therefore, I've just left the second-order fitting as a (disabled) option in kernel_types.h for now.

Also, I did some non-denoising related Cycles stuff again:

  • Updated the multiscattering microfacet patch
  • Created a patch that allows to use custom properties of Objects in the Attribute node in Cycles for per-object shader customization (D2057)
  • Bisected and fixed a bug in the recent nodes refactor (T48657)

So, next week I'll first clean up some smaller issues:

  • GPU denoising isn't implemented yet (the kernel code is the same, but the wrapper code has to be added).
  • As mentioned above, a bug is overblurring some edges.
  • The new SVD code doesn't work yet.
  • It might be possible to skip the SVD altogether and use a eigendecomposition instead, since the matrix is Gramian and therefore symmetric, which means that the eigendecomposition exists and is equal to the SVD (up to the signs of the columns, which don't really matter here anyways).
  • Border rendering is broken.
  • Some scenes (like the Classroom) don't show the feature passes.
  • The filter strength option doesn't do anything yet.

Next to that, I'll try to improve results for some corner cases like shadow edges and strong reflections on glass.

So, that's my 4th report. You can already try out the denoiser, but it's not working 100% correct yet. So, in case it's already working well for a scene - great! And if it isn't, it hopefully will do so next week ;)

Lukas