January 12, 2017, 03:56 (GMT) |
Cycles Denoising: Remove now-useless feature utilities |
January 12, 2017, 03:56 (GMT) |
Cycles Denoising: Use better and faster NLM implementation for feature pass prefiltering Previously, the prefiltering NLM kernel was implemented just as it's described in the paper: For every pixel P, loop over every pixel Q in the search window. Then, loop over the small patches around them, calculate the average difference, and use that to compute the weight of Q for the denoised result at P. However, that gives you a time complexity of O(N^2 * R^2 * F^2), where N is the image size, R the search window and F the patch size... So, this patch implements the clever idea from "A Simple Trick to Speed Up and Improve the Non-Local Means" - by reformulating the loop, it's actually possible to skip a lot of computation and replace it with a separable box filter convolution. This reduces complexity to O(N^2 * R^2 * F), and the amount of pixel differences calculated even to O(N^2 * R^2)! Furthermore, by applying a second box-filter pass after calculating the weights, we get the "patchwise NLM" improvement basically for free! This is CPU-only so far, but that will change soon. |
January 11, 2017, 06:37 (GMT) |
Cycles Denoising: Remove WLR and experimental NFOR modes The denoising code started out as an implementation of WLR, but the NLM mode is working so much better that I decided to remove the WLR mode completely. This allows to get rid of a significant amount of complexity and code. Also, the NFOR mode is removed - the name is misleading, most of the ideas behind the NFOR paper are actually what powers the NLM mode. NFOR mode was just an experiment with removing the T-SVD feature space reduction, and it turned out that the experiment had failed. |
January 11, 2017, 05:28 (GMT) |
Cycles Denoising: Remove hidden NLM-only option |
December 21, 2016, 04:09 (GMT) |
Cycles: Rename and add new matrix math helper functions to clean up the actual filter code |
December 21, 2016, 01:29 (GMT) |
Cycles: Deduplicate numerical code in the WLR bandwidth estimation Also includes some documentation about what this code actually does. |
December 20, 2016, 14:01 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising Conflicts: source/blender/makesrna/intern/rna_render.c |
December 20, 2016, 04:38 (GMT) |
Cycles: Move normal equation solver into a separate function and rename a few variables for clarity |
December 20, 2016, 04:38 (GMT) |
Cycles: Replace T-SVD algorithm with new Jacobi Eigendecomposition solver The code that was used for the T-SVD before came from the WLR reference implementation, but had numerical problems on Windows and would often cause NaNs. This commit replaces it with a new implementation using Eigendecomposition based on the Jacobi Eigenvalue Method. That should: - Give a slight performance boost (probably not noticable, since the T-SVD was no bottleneck to begin with) - Improve numerical accuracy of the results (not very important either since the eigenvalues are only compared against a threshold) - FINALLY solve the black spot issue on Windows - Slightly reduce memory usage (singular values are now constructed on the diagonal of the input matrix) with the potential of more in the future (now only the lower-triangular part is required). - Resolve potential licensing issues - the specific file containing the original code didn't come with any licensing information, and the main file contains an apparently custom license... |
December 20, 2016, 04:38 (GMT) |
Cycles: Declare more utility function arguments const |
December 20, 2016, 04:38 (GMT) |
Cycles: Include util_math_matrix.h in CMake |
December 6, 2016, 20:13 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising Conflicts: intern/cycles/device/device_cpu.cpp intern/cycles/device/device_cuda.cpp intern/cycles/render/tile.cpp intern/cycles/render/tile.h |
December 2, 2016, 22:31 (GMT) |
Cycles: Clamp optimal bandwidth parameter to the range of evaluated parameters |
December 2, 2016, 21:14 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising |
December 2, 2016, 21:14 (GMT) |
Cycles: Actually enable FTZ The previous commit added the function to enable it, but didn't ever call it... |
December 1, 2016, 21:43 (GMT) |
Cycles: Fix Progressive Rendering This also fixes the material and world preview bug. |
November 26, 2016, 03:19 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising |
November 26, 2016, 03:18 (GMT) |
Cycles: Properly initialize some denoising-related variables |
November 26, 2016, 02:29 (GMT) |
Cycles: Fix progress calculation while denoising after rendering |
November 24, 2016, 23:48 (GMT) |
Cycles: Fix progress bar not appearing for denoising after rendering |
|