Blender Git Commits

Blender Git "soc-2016-cycles_denoising" branch commits.

Page: 8 / 12

August 9, 2016, 01:50 (GMT)
Cycles: Move denoising utility functions into a separate file
August 9, 2016, 01:50 (GMT)
Cycles: Add a few SSE utilities
August 9, 2016, 01:50 (GMT)
Cycles: Implement SSE3-optimized NLM prefiltering kernel
August 9, 2016, 01:50 (GMT)
Cycles: Move prefiltering functions into a separate file
August 9, 2016, 01:50 (GMT)
Cycles: Fix preprocessor directives around SSE3 replacement functions

The code is supposed to implement replacements for a few SSE4.1-specific functions so that they can be used with SSE3 as well.
Therefore, it was enabled when __KERNEL_SSE3__ was set, but __KERNEL_SSE4__ wasn't.

However, __KERNEL_SSE4__ is never set anywhere - the correct one is __KERNEL_SSE41__.
Because of that, the replacements were enabled for SSE4.1 and better (AVX) as well, where they're not needed, but only slow things down.
August 9, 2016, 01:50 (GMT)
Cycles: Implement SSE3-optimized denoising kernel
August 9, 2016, 01:50 (GMT)
Cycles: Fix GGX shader after recent changes to numerical stability
August 9, 2016, 01:50 (GMT)
Cycles: Remove a few useless temporary files
August 9, 2016, 01:50 (GMT)
Cycles: Fix denoising feature matrix norm calculation
August 9, 2016, 01:50 (GMT)
Cycles: Fix building after the debug_fpe commit
August 8, 2016, 19:10 (GMT)
Cycles: Add denoising option to the Cycles Standalone executable

To use it, call it with "./cycles --denoise --samples <sample number> --output <denoised_file.png> <rendered_image.exr>".
You need to enter the sample number that the image was rendered with - others will work as well, but might produce artifacts.
The input image can be generated by rendering with "Keep denoising data" enabled (denoising itself isn't needed) and saving the result as Multilayer EXR.

For now, this is mainly useful for quicker testing without re-rendering and profiling, not so much for regular users.
However, the next step will be to implement inter-frame denoising for animations, which will provide a significant quality boost.
August 8, 2016, 19:09 (GMT)
Cycles Standalone: Add option to set the tile size
August 6, 2016, 03:22 (GMT)
Cycles: Redesign the buffer accesses of the denoising kernel.

At first, the denoising kernel just directly accessed the RenderBuffers.
However, that introduced some addressing complexity since the filter window might cover multiple tiles, each with a separate buffer.
Apart from the addressing overhead, this also made it pretty much impossible to SIMDify the CPU code.

When feature prefiltering was added, it changed the buffer addressing.
First, it copied the various parts of different buffers into one continuous array. Then, it operated directly on that array.
With these changes, the only thing the regular buffer addressing was still needed for was the color image.

Now, this commit also copies the color image into the prefiltered buffer. Therefore, it's not really just a prefiltered buffer anymore, but actually contains all the data needed to denoise.
This allows to redesign and clean up the kernel-device-interface, which is also done in this commit.

Advantages are:
- Lower addressing overhead - every pixel is only addressed once to copy the data to the denoising buffer, and once to store the final result - instead of hundreds of accesses per pixel when looping over the filter window.
- Lower code complexity - one array with standard scanline addressing makes the code a lot cleaner.
- For GPUs: More memory access coherence since the passes are stored in SoA layout instead of AoS (like the regular RenderBuffers are).
- For CPUs: Possibility to use SIMD instructions in the future due to the SoA layout.
The disadvantage is slightly higher memory usage - 22 floats per pixel instead of 16.

This commit doesn't include the CUDA changes yet.
August 6, 2016, 03:22 (GMT)
Cycles: Fix potential divide by zero in the area light sampling code
August 6, 2016, 03:22 (GMT)
Cycles: Adapt CUDA device to the new denoise buffer architecture
August 6, 2016, 03:22 (GMT)
Cycles: Fix wrong array indexing in the feature kernel
August 6, 2016, 03:22 (GMT)
Cycles: Implement the Filter Weight functionality

For now, the slider defines the weight given to feature pass variances (which now is 2**filter_strength instead of 1).
August 6, 2016, 03:19 (GMT)
Cycles: Replace NaNs in the feature passes with zero

As soon as any feature pass sample is NaN, every pixel which contains that sample in its filter window will be black in the filtered result.
Ideally no NaNs should be generated in the first place, but there are quite a few cases where they are generated in Cycles and now become visible.
So, as a temporary fix, NaNs are now replaced with zero when storing the passes. Ideally these NaNs should be fixed for good, of course.
August 6, 2016, 03:17 (GMT)
Cycles: Prefilter all feature passes

This commit adds prefiltering to all feature passes, instead of just the shadow pass.
Feature passes are supposed to be noise-free, but effects like Depth of Field, Motion Blur or slightly glossy shaders could still produce noticable amounts of noise.
July 27, 2016, 20:36 (GMT)
Cycles: Fix a memory leak when cancelling a denoised render
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021