Blender Git Commit Log
Git Commits -> Revision 43b374e
Revision 43b374e by Lukas Stockner (master) May 7, 2017, 12:40 (GMT) |
Cycles: Implement denoising option for reducing noise in the rendered image This commit contains the first part of the new Cycles denoising option, which filters the resulting image using information gathered during rendering to get rid of noise while preserving visual features as well as possible. To use the option, enable it in the render layer options. The default settings fit a wide range of scenes, but the user can tweak individual settings to control the tradeoff between a noise-free image, image details, and calculation time. Note that the denoiser may still change in the future and that some features are not implemented yet. The most important missing feature is animation denoising, which uses information from multiple frames at once to produce a flicker-free and smoother result. These features will be added in the future. Finally, thanks to all the people who supported this project: - Google (through the GSoC) and Theory Studios for sponsoring the development - The authors of the papers I used for implementing the denoiser (more details on them will be included in the technical docs) - The other Cycles devs for feedback on the code, especially Sergey for mentoring the GSoC project and Brecht for the code review! - And of course the users who helped with testing, reported bugs and things that could and/or should work better! |
Commit Details:
Full Hash: 43b374e8c5430488a302298b1026faa1c3a231e9
Parent Commit: bca6978
Lines Changed: +6434, -1135
25 Added Paths:
/intern/cycles/device/device_denoising.cpp (+218, -0) (View)
/intern/cycles/device/device_denoising.h (+145, -0) (View)
/intern/cycles/kernel/filter/filter.h (+52, -0) (View)
/intern/cycles/kernel/filter/filter_defines.h (+38, -0) (View)
/intern/cycles/kernel/filter/filter_features.h (+120, -0) (View)
/intern/cycles/kernel/filter/filter_features_sse.h (+95, -0) (View)
/intern/cycles/kernel/filter/filter_kernel.h (+50, -0) (View)
/intern/cycles/kernel/filter/filter_nlm_cpu.h (+163, -0) (View)
/intern/cycles/kernel/filter/filter_nlm_gpu.h (+147, -0) (View)
/intern/cycles/kernel/filter/filter_prefilter.h (+145, -0) (View)
/intern/cycles/kernel/filter/filter_reconstruction.h (+103, -0) (View)
/intern/cycles/kernel/filter/filter_transform.h (+113, -0) (View)
/intern/cycles/kernel/filter/filter_transform_gpu.h (+117, -0) (View)
/intern/cycles/kernel/filter/filter_transform_sse.h (+110, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter.cpp (+61, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_avx.cpp (+39, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_avx2.cpp (+40, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_cpu.h (+132, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_cpu_impl.h (+259, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_sse2.cpp (+34, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_sse3.cpp (+36, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_sse41.cpp (+37, -0) (View)
/intern/cycles/kernel/kernels/cuda/filter.cu (+235, -0) (View)
/intern/cycles/kernel/kernels/opencl/filter.cl (+262, -0) (View)
/intern/cycles/util/util_math_matrix.h (+379, -0) (View)
/intern/cycles/device/device_denoising.h (+145, -0) (View)
/intern/cycles/kernel/filter/filter.h (+52, -0) (View)
/intern/cycles/kernel/filter/filter_defines.h (+38, -0) (View)
/intern/cycles/kernel/filter/filter_features.h (+120, -0) (View)
/intern/cycles/kernel/filter/filter_features_sse.h (+95, -0) (View)
/intern/cycles/kernel/filter/filter_kernel.h (+50, -0) (View)
/intern/cycles/kernel/filter/filter_nlm_cpu.h (+163, -0) (View)
/intern/cycles/kernel/filter/filter_nlm_gpu.h (+147, -0) (View)
/intern/cycles/kernel/filter/filter_prefilter.h (+145, -0) (View)
/intern/cycles/kernel/filter/filter_reconstruction.h (+103, -0) (View)
/intern/cycles/kernel/filter/filter_transform.h (+113, -0) (View)
/intern/cycles/kernel/filter/filter_transform_gpu.h (+117, -0) (View)
/intern/cycles/kernel/filter/filter_transform_sse.h (+110, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter.cpp (+61, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_avx.cpp (+39, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_avx2.cpp (+40, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_cpu.h (+132, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_cpu_impl.h (+259, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_sse2.cpp (+34, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_sse3.cpp (+36, -0) (View)
/intern/cycles/kernel/kernels/cpu/filter_sse41.cpp (+37, -0) (View)
/intern/cycles/kernel/kernels/cuda/filter.cu (+235, -0) (View)
/intern/cycles/kernel/kernels/opencl/filter.cl (+262, -0) (View)
/intern/cycles/util/util_math_matrix.h (+379, -0) (View)
92 Modified Paths:
/intern/cycles/blender/addon/engine.py (+12, -0) (Diff)
/intern/cycles/blender/addon/properties.py (+74, -0) (Diff)
/intern/cycles/blender/addon/ui.py (+72, -0) (Diff)
/intern/cycles/blender/blender_session.cpp (+41, -11) (Diff)
/intern/cycles/blender/blender_session.h (+2, -2) (Diff)
/intern/cycles/blender/blender_sync.cpp (+37, -1) (Diff)
/intern/cycles/blender/blender_sync.h (+1, -0) (Diff)
/intern/cycles/device/CMakeLists.txt (+2, -0) (Diff)
/intern/cycles/device/device.cpp (+12, -0) (Diff)
/intern/cycles/device/device.h (+13, -0) (Diff)
/intern/cycles/device/device_cpu.cpp (+460, -386) (Diff)
/intern/cycles/device/device_cuda.cpp (+448, -47) (Diff)
/intern/cycles/device/device_memory.h (+43, -1) (Diff)
/intern/cycles/device/device_multi.cpp (+54, -0) (Diff)
/intern/cycles/device/device_split_kernel.cpp (+3, -3) (Diff)
/intern/cycles/device/device_split_kernel.h (+3, -3) (Diff)
/intern/cycles/device/device_task.cpp (+3, -3) (Diff)
/intern/cycles/device/device_task.h (+12, -2) (Diff)
/intern/cycles/device/opencl/opencl.h (+50, -3) (Diff)
/intern/cycles/device/opencl/opencl_base.cpp (+440, -25) (Diff)
/intern/cycles/device/opencl/opencl_mega.cpp (+33, -21) (Diff)
/intern/cycles/device/opencl/opencl_split.cpp (+29, -16) (Diff)
/intern/cycles/device/opencl/opencl_util.cpp (+14, -0) (Diff)
/intern/cycles/kernel/closure/bsdf.h (+18, -0) (Diff)
/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_diffuse.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_microfacet.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_microfacet_multi.h (+1, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_oren_nayar.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_phong_ramp.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_principled_diffuse.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_principled_sheen.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_toon.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bssrdf.h (+0, -1) (Diff)
/intern/cycles/kernel/CMakeLists.txt (+62, -38) (Diff)
/intern/cycles/kernel/geom/geom_triangle.h (+4, -2) (Diff)
/intern/cycles/kernel/kernel.h (+14, -24) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_avx.cpp (+16, -14) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_avx2.cpp (+17, -15) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_cpu.h (+0, -2) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h (+38, -41) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_avx.cpp (+16, -13) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_avx2.cpp (+17, -15) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_sse2.cpp (+11, -9) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp (+13, -11) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_sse41.cpp (+14, -12) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_sse2.cpp (+11, -9) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_sse3.cpp (+13, -11) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_sse41.cpp (+14, -12) (Diff)
/intern/cycles/kernel/kernel_accumulate.h (+80, -18) (Diff)
/intern/cycles/kernel/kernel_compat_cpu.h (+2, -0) (Diff)
/intern/cycles/kernel/kernel_compat_cuda.h (+4, -0) (Diff)
/intern/cycles/kernel/kernel_compat_opencl.h (+2, -0) (Diff)
/intern/cycles/kernel/kernel_light.h (+1, -1) (Diff)
/intern/cycles/kernel/kernel_passes.h (+203, -0) (Diff)
/intern/cycles/kernel/kernel_path.h (+43, -46) (Diff)
/intern/cycles/kernel/kernel_path_branched.h (+67, -50) (Diff)
/intern/cycles/kernel/kernel_path_state.h (+14, -0) (Diff)
/intern/cycles/kernel/kernel_path_surface.h (+14, -9) (Diff)
/intern/cycles/kernel/kernel_path_volume.h (+4, -4) (Diff)
/intern/cycles/kernel/kernel_projection.h (+3, -0) (Diff)
/intern/cycles/kernel/kernel_shader.h (+3, -3) (Diff)
/intern/cycles/kernel/kernel_types.h (+68, -21) (Diff)
/intern/cycles/kernel/split/kernel_branched.h (+22, -2) (Diff)
/intern/cycles/kernel/split/kernel_buffer_update.h (+3, -12) (Diff)
/intern/cycles/kernel/split/kernel_holdout_emission_blurring_pathtermination_ao.h (+3, -1) (Diff)
/intern/cycles/kernel/split/kernel_shadow_blocked_dl.h (+2, -2) (Diff)
/intern/cycles/kernel/svm/svm_closure.h (+2, -0) (Diff)
/intern/cycles/kernel/svm/svm_displace.h (+7, -2) (Diff)
/intern/cycles/kernel/svm/svm_geometry.h (+1, -0) (Diff)
/intern/cycles/kernel/svm/svm_image.h (+2, -2) (Diff)
/intern/cycles/kernel/svm/svm_types.h (+7, -6) (Diff)
/intern/cycles/render/buffers.cpp (+60, -3) (Diff)
/intern/cycles/render/buffers.h (+12, -3) (Diff)
/intern/cycles/render/film.cpp (+22, -0) (Diff)
/intern/cycles/render/film.h (+7, -0) (Diff)
/intern/cycles/render/mesh.cpp (+1, -1) (Diff)
/intern/cycles/render/session.cpp (+152, -63) (Diff)
/intern/cycles/render/session.h (+23, -3) (Diff)
/intern/cycles/render/tile.cpp (+160, -39) (Diff)
/intern/cycles/render/tile.h (+27, -6) (Diff)
/intern/cycles/util/CMakeLists.txt (+1, -0) (Diff)
/intern/cycles/util/util_math.h (+72, -65) (Diff)
/intern/cycles/util/util_math_float3.h (+15, -0) (Diff)
/intern/cycles/util/util_math_int4.h (+9, -0) (Diff)
/intern/cycles/util/util_simd.h (+39, -6) (Diff)
/intern/cycles/util/util_types.h (+5, -0) (Diff)
/source/blender/makesrna/intern/rna_render.c (+1, -0) (Diff)
/source/blender/render/extern/include/RE_engine.h (+1, -1) (Diff)
/source/blender/render/intern/source/external_engine.c (+2, -2) (Diff)
/source/blenderplayer/bad_level_call_stubs/stubs.c (+1, -1) (Diff)
/intern/cycles/blender/addon/properties.py (+74, -0) (Diff)
/intern/cycles/blender/addon/ui.py (+72, -0) (Diff)
/intern/cycles/blender/blender_session.cpp (+41, -11) (Diff)
/intern/cycles/blender/blender_session.h (+2, -2) (Diff)
/intern/cycles/blender/blender_sync.cpp (+37, -1) (Diff)
/intern/cycles/blender/blender_sync.h (+1, -0) (Diff)
/intern/cycles/device/CMakeLists.txt (+2, -0) (Diff)
/intern/cycles/device/device.cpp (+12, -0) (Diff)
/intern/cycles/device/device.h (+13, -0) (Diff)
/intern/cycles/device/device_cpu.cpp (+460, -386) (Diff)
/intern/cycles/device/device_cuda.cpp (+448, -47) (Diff)
/intern/cycles/device/device_memory.h (+43, -1) (Diff)
/intern/cycles/device/device_multi.cpp (+54, -0) (Diff)
/intern/cycles/device/device_split_kernel.cpp (+3, -3) (Diff)
/intern/cycles/device/device_split_kernel.h (+3, -3) (Diff)
/intern/cycles/device/device_task.cpp (+3, -3) (Diff)
/intern/cycles/device/device_task.h (+12, -2) (Diff)
/intern/cycles/device/opencl/opencl.h (+50, -3) (Diff)
/intern/cycles/device/opencl/opencl_base.cpp (+440, -25) (Diff)
/intern/cycles/device/opencl/opencl_mega.cpp (+33, -21) (Diff)
/intern/cycles/device/opencl/opencl_split.cpp (+29, -16) (Diff)
/intern/cycles/device/opencl/opencl_util.cpp (+14, -0) (Diff)
/intern/cycles/kernel/closure/bsdf.h (+18, -0) (Diff)
/intern/cycles/kernel/closure/bsdf_ashikhmin_velvet.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_diffuse.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_diffuse_ramp.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_microfacet.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_microfacet_multi.h (+1, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_oren_nayar.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_phong_ramp.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_principled_diffuse.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_principled_sheen.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bsdf_toon.h (+0, -1) (Diff)
/intern/cycles/kernel/closure/bssrdf.h (+0, -1) (Diff)
/intern/cycles/kernel/CMakeLists.txt (+62, -38) (Diff)
/intern/cycles/kernel/geom/geom_triangle.h (+4, -2) (Diff)
/intern/cycles/kernel/kernel.h (+14, -24) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_avx.cpp (+16, -14) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_avx2.cpp (+17, -15) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_cpu.h (+0, -2) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_cpu_impl.h (+38, -41) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_avx.cpp (+16, -13) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_avx2.cpp (+17, -15) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_sse2.cpp (+11, -9) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_sse3.cpp (+13, -11) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_split_sse41.cpp (+14, -12) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_sse2.cpp (+11, -9) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_sse3.cpp (+13, -11) (Diff)
/intern/cycles/kernel/kernels/cpu/kernel_sse41.cpp (+14, -12) (Diff)
/intern/cycles/kernel/kernel_accumulate.h (+80, -18) (Diff)
/intern/cycles/kernel/kernel_compat_cpu.h (+2, -0) (Diff)
/intern/cycles/kernel/kernel_compat_cuda.h (+4, -0) (Diff)
/intern/cycles/kernel/kernel_compat_opencl.h (+2, -0) (Diff)
/intern/cycles/kernel/kernel_light.h (+1, -1) (Diff)
/intern/cycles/kernel/kernel_passes.h (+203, -0) (Diff)
/intern/cycles/kernel/kernel_path.h (+43, -46) (Diff)
/intern/cycles/kernel/kernel_path_branched.h (+67, -50) (Diff)
/intern/cycles/kernel/kernel_path_state.h (+14, -0) (Diff)
/intern/cycles/kernel/kernel_path_surface.h (+14, -9) (Diff)
/intern/cycles/kernel/kernel_path_volume.h (+4, -4) (Diff)
/intern/cycles/kernel/kernel_projection.h (+3, -0) (Diff)
/intern/cycles/kernel/kernel_shader.h (+3, -3) (Diff)
/intern/cycles/kernel/kernel_types.h (+68, -21) (Diff)
/intern/cycles/kernel/split/kernel_branched.h (+22, -2) (Diff)
/intern/cycles/kernel/split/kernel_buffer_update.h (+3, -12) (Diff)
/intern/cycles/kernel/split/kernel_holdout_emission_blurring_pathtermination_ao.h (+3, -1) (Diff)
/intern/cycles/kernel/split/kernel_shadow_blocked_dl.h (+2, -2) (Diff)
/intern/cycles/kernel/svm/svm_closure.h (+2, -0) (Diff)
/intern/cycles/kernel/svm/svm_displace.h (+7, -2) (Diff)
/intern/cycles/kernel/svm/svm_geometry.h (+1, -0) (Diff)
/intern/cycles/kernel/svm/svm_image.h (+2, -2) (Diff)
/intern/cycles/kernel/svm/svm_types.h (+7, -6) (Diff)
/intern/cycles/render/buffers.cpp (+60, -3) (Diff)
/intern/cycles/render/buffers.h (+12, -3) (Diff)
/intern/cycles/render/film.cpp (+22, -0) (Diff)
/intern/cycles/render/film.h (+7, -0) (Diff)
/intern/cycles/render/mesh.cpp (+1, -1) (Diff)
/intern/cycles/render/session.cpp (+152, -63) (Diff)
/intern/cycles/render/session.h (+23, -3) (Diff)
/intern/cycles/render/tile.cpp (+160, -39) (Diff)
/intern/cycles/render/tile.h (+27, -6) (Diff)
/intern/cycles/util/CMakeLists.txt (+1, -0) (Diff)
/intern/cycles/util/util_math.h (+72, -65) (Diff)
/intern/cycles/util/util_math_float3.h (+15, -0) (Diff)
/intern/cycles/util/util_math_int4.h (+9, -0) (Diff)
/intern/cycles/util/util_simd.h (+39, -6) (Diff)
/intern/cycles/util/util_types.h (+5, -0) (Diff)
/source/blender/makesrna/intern/rna_render.c (+1, -0) (Diff)
/source/blender/render/extern/include/RE_engine.h (+1, -1) (Diff)
/source/blender/render/intern/source/external_engine.c (+2, -2) (Diff)
/source/blenderplayer/bad_level_call_stubs/stubs.c (+1, -1) (Diff)