July 18, 2016, 17:47 (GMT) |
Render API: Preserve extended passes when using bordered rendering |
July 11, 2016, 20:46 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising Conflicts: intern/cycles/kernel/kernel_types.h |
July 11, 2016, 20:41 (GMT) |
Cycles/Render API: Implement interactive updating while denoising The tile highlighting is still a bit random and the progress bar isn't showing either, but the basic live update works. To avoid lots of duplicated code, editors/render and editors/space_image now share two functions. |
July 11, 2016, 17:37 (GMT) |
Cycles: Fix Memory leak when denoising renderred images |
July 11, 2016, 17:36 (GMT) |
Render API: Implement the denoising process as a job to keep the UI responsive |
July 11, 2016, 16:25 (GMT) |
Cycles: Support denoising after rendering on CUDA |
July 8, 2016, 01:39 (GMT) |
Cycles: Once again fix MSVC building Apparently, MSVC doesn't like enum values being larger than 32 bit. So, for now the enum entries are just #define'd instead. |
July 7, 2016, 18:12 (GMT) |
Cycles: Add additional debugging output containing the estimated rMSE reduction per sample |
July 7, 2016, 18:12 (GMT) |
Cycles: Fix 2-parameter least-squares helper function |
July 7, 2016, 18:10 (GMT) |
Cycles: Fix artifacts in lower-left tile when denoising on the CPU |
July 6, 2016, 22:50 (GMT) |
Cycles: Add experimental alternative SVD-threshold norm based on power iteration One of the first steps of the algorithm is to apply a truncated SVD to a matrix formed by the features in order to reduce the dimensionality of the problem and decorrelate dimensions. The truncation threshold, according to the paper, is defined by twice the spectral norm of the matrix that is formed like the first one, but from the variances of the features. The reference implementation doesn't compute the spectral norm, but instead computes the Frobenius norm and multiplies it with sqrt(Rank)/2. That makes sense since it's guaranteed that the Frobenius norm lies somewhere between the one and sqrt(Rank) times the spectral norm. However, it's still an approximation. Therefore, in this commit I've tried to directly compute the spectral norm since the runtime performance is currently mainly limited by the per-pixel loops, so a small constant increase shouldn't matter too much. In order to compute it, the code just constructs the Gramian matrix of the variance matrix and computes the square root of its largest eigenvalue, which is found via power iteration. I haven't tested the code too much yet, but it seems that the improvement is quite negligible and not really worth the effort. Still, it might be interesting to tweak it further. |
July 6, 2016, 19:25 (GMT) |
Merge remote-tracking branch 'origin/master' into soc-2016-cycles_denoising |
July 6, 2016, 19:25 (GMT) |
Cycles: Fix denoising artifacts caused by Emission closures |
July 6, 2016, 19:24 (GMT) |
Cycles: Fix denoising debug passes with CUDA |
July 6, 2016, 02:24 (GMT) |
Cycles: Implement Postprocessing callback This commit finally uses all the work from the earlier commits to implement the postprocess callback, which triggers a denoising pass on the current RenderResult. Note that this does not work on GPUs yet - they can be used for rendering, but the Device setting has to be switched to CPU rendering before using the postprocess button. One other remaining problem is that the Image editor view isn't updated automatically, you have to switch to another pass/layer and back to see the change. Also, the feature should eventually be implemeted as a Job to get a progress bar and a responding UI during denoising. |
July 6, 2016, 02:19 (GMT) |
Cycles: Add denoise-only mode the the Session This mode just creates the Device, generates tiles and runs the denoising kernel on each tile. Compared to the regular mode of operation, a lot is missing: No interactivity, no scene syncing, no progressive rendering etc. However, these features aren't needed for the denoise-after-render feature, and so this mode saves a lot of code when calling it from the bindings. Internally, it uses one single large buffer to hold the image, instead of a small buffer per tile. That requires some changes to the TileManager and is also the reason for the earlier region-of-interest commit. |
July 6, 2016, 02:14 (GMT) |
Cycles: Implement RenderResult -> RenderBuffers import This commit adds a function that takes an existing RenderResult and copies the passes to newly created RenderBuffers. That will later be used to copy the rendered image back for post-processing denoising. |
July 6, 2016, 02:09 (GMT) |
Cycles: Explicitly pass region of interest to RenderBuffers when exporting pixels to Blender By itself, that change is pretty useless, but it's important for the upcoming denoise-after-render support. |
July 6, 2016, 01:35 (GMT) |
Render API: Fix bugs regarding pass handling when Cycles debugging is enabled The probem here was that regular passes are stored as (signed) integers. Therefore, the pass with bit 31 set (the Cycles debug pass) is stored as -1. On its own, that's fine - however, when that pass type is implicitly cast to uint64_t in a function call, the compiler apparently first sign-extends it and then reinterprets it as unsigned, so the result is 0xffffffff80000000 instead of only bit 31. To get around that issue, the type is now explicitly cast to a unsigned int32 first and then implicitly extended to uint64_t. |
July 6, 2016, 01:32 (GMT) |
Cycles: Add additional debugging info to the denoiser |
|