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

Lukas Stockner lukas.stockner at freenet.de
Sat Jul 30 03:29:38 CEST 2016


Hi!

So, this week was a bit slower again due to University, but as of today I'm done with my exams and can focus on the GSoC and Blender in general again!
Also, in this report I tried to reduce the technical detail a bit and just summarize changes.

I mainly worked on two areas:
 - Black squares: These are most of the reports I get on BA - essentially, if something goes very wrong in the denoising process, all affected pixels will be black or NaN (displayed as black). The thing that usually goes wrong is NaNs that were already present in Cycles in master, but now become obvious. So, I fixed a few more of them (some also in master, some not yet). Also, any remaining ones are now written as zero instead.

 - Noisy feature passes: As explained for the shadow feature, features have to be noise-free. The regular ones (Normal, Albedo, Depth) usually are, but some things (slightly glossy shaders, DoF/MoBlur etc.) may cause noise. So, now the NLM prefilter is also applied to the regular passes, but without the elaborate even/odd filtering - just a single NLM pass.

Results are pretty good now - the denoiser can't perform miracles (16spp still won't look good after denoising), but for slightly noisy scenes, it produces pretty solid results. Especially some corner cases like the BMW scene's front window now work a lot better.



So, what's left to do?

Smaller stuff:
- Somehow another cause for black areas was introduced, now mainly in bright areas - I'll fix it pretty soon, should be easy to find.
- Reflections in Branched Path Tracing don't write feature passes yet, which causes them to be blurred a lot.
- Get rid of the weird neighbor tile addressing in the filter kernel - at this point, everything except the image itself is stored in a intermediate buffer anyways, so just copy the image into it as well. That should noticeably improve the speed.
- Somehow Windows builds sometimes produce very large black areas that haven't been reproduced by anybody on Linux yet. Probably will need a Windows VM to debug those :S

Larger stuff:
- By rounding the width of the intermediate buffer up to a multiple of 4/8, it's really easy to write a SSE/AVX optimized version for CPUs - speed would probably increase by a factor of 3,5x / 7x (the bottleneck are the easily SIMDable per-pixel operations, not the numerical code).
- Implement NLM-like weights for the LWR regression, should improve quality.
- Implement standalone filtering of animated sequences - significantly reduces flickering and improves general quality of every frame, but can't be integrated into Blender's rendering pipeline due to the dependence on previous/next frames.
- Implement a decent UI for the denoise-after-render operator - I got great feedback at the GSoC UI meeting, time to implement it!

And of course, documentation and cleanup - but since I'm still tweaking the algorithm, doing it now would just make it obsolete very soon.

So, I'll try to handle the smaller stuff and as many of the larger points as possible in the next week!

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/20160730/bbdc96d7/attachment.pgp 


More information about the Soc-2016-dev mailing list