November 13, 2016, 16:40 (GMT) |
Cycles: Fix two debugging problems in the Denoiser The mismatching alloc/dealloc would upset ASan, and the undefined elements would cause FPEs in the NLM code (the result was fine due to masking, but the intermediate values weren't). |
November 13, 2016, 16:39 (GMT) |
Cycles: Fix CPU Denoising kernels after recent SSE-for-vector-types commit That change (enabling __KERNEL_SSE__ for AVX(2)) broke the ABI between the kernel and device code when int4 was passed as an argument. Now, a pointer to the first element is passed instead. |
November 11, 2016, 02:17 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising Conflicts: intern/cycles/blender/blender_python.cpp intern/cycles/device/device_opencl.cpp intern/cycles/kernel/kernel_accumulate.h intern/cycles/kernel/kernel_path.h intern/cycles/kernel/kernel_path_branched.h intern/cycles/kernel/kernel_path_surface.h intern/cycles/kernel/kernel_types.h intern/cycles/kernel/svm/svm_displace.h |
September 9, 2016, 15:02 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising |
September 9, 2016, 15:01 (GMT) |
Cycles: Support filter strength for denoising after rendering |
September 5, 2016, 02:03 (GMT) |
Cycles: Temporarily add old kernel for comparison |
September 5, 2016, 02:03 (GMT) |
Merge branch 'master' into soc-2016-cycles_denoising |
September 3, 2016, 15:09 (GMT) |
Cycles: Tweak the reduced feature space calculation |
August 23, 2016, 21:01 (GMT) |
Fix two compilation issues |
August 23, 2016, 18:56 (GMT) |
Cycles: Get rid of tile border artifacts when denoising after rendering or standalone denoising The issue was that although all of the image is available, the prefiltering system didn't use the area outside of the current tile, which caused visible seams. |
August 23, 2016, 15:47 (GMT) |
Cycles: Remove another two useless files |
August 23, 2016, 15:37 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising |
August 23, 2016, 15:34 (GMT) |
Cycles: Fix a memory leak in the CUDA denoising code |
August 23, 2016, 15:34 (GMT) |
Cycles: Use separate struct for CUDA denoising storage to avoid allocating the transform memory twice |
August 23, 2016, 15:33 (GMT) |
Cycles: Support cross-frame denoising on CUDA |
August 23, 2016, 15:32 (GMT) |
Cycles: Fix Shadow prefiltering for cross-frame filtering |
August 23, 2016, 15:31 (GMT) |
Cycles: Fix building on Windows |
August 21, 2016, 15:38 (GMT) |
Cycles: Revert design_row redesign This commit reverts fba2b77c2a12950802491c3112b3922f5805f98a since it turned out that it actually doesn't help with speed at all - I screwed up the original benchmarking... Considering that there is no real performance difference, the increased complexity isn't worth it. |
August 21, 2016, 04:07 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising |
August 21, 2016, 04:06 (GMT) |
Cycles: Use the correct bias and variance models for the least-squares fit and global bandwidth optimization The approach that is used to find the global bandwidth is: - Run the reconstruction filter for different bandwidths and estimate bias and variance - Fit analytic bias and variance models to these bandwidth-bias/variance pairs using least-squares - Minimize the MSE term (Bias^2 + Variance) analytically using the fitted models The models used in the LWR paper are: - Bias(h) = a + b*h^2 - Variance(h) = (c + d*h^(-k))/n , where (a, b, c, d) are the parameters to be fitted, h is the global bandwidth, k is the rank and n is the number of samples. Classic linear least squares is used to find a, b, c and d. Then, the paper states that MSE(h) = (Bias(h)^2 + Variance(h)) is minimal for h = (k*d / (4*b^2*n))^(1/(k+4)). Now, what is suspicious about this term is that a and c don't appear. c makes sense - after all, its contribution to the variance is independent of h. a, however, does not - after all, the Bias term is squared, so a term that depends on both h and a exists. It turns out that this minimization term is wrong for these models, but instead correct when using Bias(h) = b*h^2 (without constant offset). That model also makes intuitive sense, since the bias goes to zero as filter strength (bandwidth) does so. Similarly, the variance model should go to zero as h goes towards infinity, since infinite filter strength would eliminate all possible noise. Therefore, this commit changes the bias and variance models to not include the constant term any more. The change in result can be significant - in my test scene, the average bandwidth halved. |
|