Blender Git Commits

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

Page: 2 / 12

February 1, 2017, 04:00 (GMT)
Cycles Denoising: Also enable FPE debugging during denoising
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Fix Cross Denoising after Rendering
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Support postprocess denoising on loaded images
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Remove useless functions
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Add missing kernel function stubs
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Allow to reconstruct into denoising buffer
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Use squared samples for denoising-after-rendering when they're enabled

Previously, the setting would be ignored, which lead to extremely overblurred results.
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Correct buffer variance calculation
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Change memory layout of noisy color and variance information
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Use different heuristic for feature space dimensionality reduction

Since the features that are used for denoising may be highly correlated (for example, with a greyscale texture the three albedo channels will be identical), using them directly for fitting would be rather unstable.
Therefore, before performing the actual fit a transformation into a reduced feature space is peformed using Principal Component Analysis by calculating the eigendecomposition of X^t*X, where X is the feature matrix.
After doing that, the eigenvectors are the basis vectors of the new feature space, and the eigenvalues specify their "importance". Therefore, by discarding eigenvectors whose eigenvalues are low, its possible to get rid of unneccessary dimensions.

Now, the question is which dimensions should be removed. The original WLR algorithm calculates a threshold based on the variance of the feature passes, with the goal of discarding noisy features. However, this implementation already prefilters the feature passes, so the (original) variance passes overestimate the actual variance a lot and discarding them isn't actually needed anymore.
Therefore, this commit replaces it with two simpler heuristics - either removing all eigenvalues below a certain threshold, or removing until a certain fraction of the energy in the eigenvalues is gone.
Which heuristic is used is chosen based on the sign of the filter strength, positive values choose the energy heuristic and negative values the absolute heuristic. In both cases, the threshold value is 10^(2*abs(filter strength)). If the default of zero is used, it uses the energy heuristic with a fraction of 10^-3.

Note that in some cases, especially motion blur and depth of field, this might cause new artifacts. These can be solved and I'll commit that soon. On the positive side, this change makes the denoiser handle hair/fur much better.
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Also write NLM-filtered version of the color input when debugging is enabled
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Remove useless if() in the kernel code
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Fix compilation of GTests
February 1, 2017, 04:00 (GMT)
Cycles Denoising: Redesign debug EXR writing code for a cleaner integration

Also, remove the denoising passes from CUDA - just adds to much clutter and the results are the same as on the CPU anyways.
January 31, 2017, 01:11 (GMT)
Cycles Denoising: Cleanup by renaming a variable
January 20, 2017, 04:46 (GMT)
Cycles/Render API: Get rid of Render Pass flags and port Denoising passes to the new system

This also means that the temporary uint64_t passflag hack is removed now.
January 13, 2017, 15:45 (GMT)
Cycles: Implement new NLM reconstruction kernels
January 12, 2017, 23:09 (GMT)
Cycles: Implement new NLM kernels for CUDA
January 12, 2017, 03:56 (GMT)
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising
January 12, 2017, 03:56 (GMT)
Cycles: Clean up passing of int4 to CPU kernels

Since the type of int4 depends on whether SSE is enabled, the SSE kernels expect a different type than the device code.
Therefore, the content must be passed as a pointer...
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021