blender/intern/cycles/kernel/svm
Lukas Stockner 23c276832b Cycles: Add multi-scattering, energy-conserving GGX as an option to the Glossy, Anisotropic and Glass BSDFs
This commit adds a new distribution to the Glossy, Anisotropic and Glass BSDFs that implements the
multiple-scattering microfacet model described in the paper "Multiple-Scattering Microfacet BSDFs with the Smith Model".

Essentially, the improvement is that unlike classical GGX, which only models single scattering and assumes
the contribution of multiple bounces to be zero, this new model performs a random walk on the microsurface until
the ray leaves it again, which ensures perfect energy conservation.

In practise, this means that the "darkening problem" - GGX materials becoming darker with increasing
roughness - is solved in a physically correct and efficient way.

The downside of this model is that it has no (known) analytic expression for evalation. However, it can be
evaluated stochastically, and although the correct PDF isn't known either, the properties of MIS and the
balance heuristic guarantee an unbiased result at the cost of slightly higher noise.

Reviewers: dingto, #cycles, brecht

Reviewed By: dingto, #cycles, brecht

Subscribers: bliblubli, ace_dragon, gregzaal, brecht, harvester, dingto, marcog, swerner, jtheninja, Blendify, nutel

Differential Revision: https://developer.blender.org/D2002
2016-06-23 22:57:26 +02:00
..
svm_attribute.h Fix T46352: Cycles fails to render when material contains UV mapped texture as volume input 2015-10-05 14:45:03 +05:00
svm_blackbody.h Cycles: Use curve approximation for blackbody instead of lookup table 2015-05-05 06:11:54 +00:00
svm_brick.h Fix T46030: Strange behavior of Cycles Brick Texture 2015-09-18 17:32:17 +05:00
svm_brightness.h Cycles: add constant folding for more color operation nodes. 2016-06-19 20:17:28 +02:00
svm_camera.h Cycles: OpenCL kernel split 2015-05-09 19:52:40 +05:00
svm_checker.h Fix T48139: Checker texture strange behavior in cycles 2016-04-15 15:30:30 +02:00
svm_closure.h Cycles: Add multi-scattering, energy-conserving GGX as an option to the Glossy, Anisotropic and Glass BSDFs 2016-06-23 22:57:26 +02:00
svm_color_util.h Cycles: add constant folding for more color operation nodes. 2016-06-19 20:17:28 +02:00
svm_convert.h Cleanup: Fix Cycles Apache header. 2014-12-25 02:50:24 +01:00
svm_displace.h Cycles: OpenCL kernel split 2015-05-09 19:52:40 +05:00
svm_fresnel.h Cycles: OpenCL kernel split 2015-05-09 19:52:40 +05:00
svm_gamma.h Cycles: Constant fold for the Gamma Node. 2015-12-22 13:53:13 +01:00
svm_geometry.h Cycles: OpenCL kernel split 2015-05-09 19:52:40 +05:00
svm_gradient.h Cycles: Use native saturate function for CUDA 2015-04-28 00:38:32 +05:00
svm_hsv.h Code cleanup: simplify SVM stack assignment. 2016-05-05 21:43:46 +02:00
svm_image.h Fix T48691: Cycles - OpenCL - HDR Image mapping does not match CUDA rendering 2016-06-21 00:49:25 +02:00
svm_invert.h Cycles: Code cleanup, spaces around keywords 2015-03-28 00:15:15 +05:00
svm_light_path.h Fix T47461: Different results on CPU and GPU when using Branched Path Tracing 2016-02-18 01:23:38 +01:00
svm_magic.h Cleanup: Fix Cycles Apache header. 2014-12-25 02:50:24 +01:00
svm_mapping.h Cleanup: Fix Cycles Apache header. 2014-12-25 02:50:24 +01:00
svm_math_util.h Cycles: Constant fold for the Gamma Node. 2015-12-22 13:53:13 +01:00
svm_math.h Cleanup: Fix Cycles Apache header. 2014-12-25 02:50:24 +01:00
svm_mix.h Cycles: add constant folding for more color operation nodes. 2016-06-19 20:17:28 +02:00
svm_musgrave.h Cleanup: Remove unused Noise Basis texture code. 2015-05-28 01:07:37 +02:00
svm_noise.h Cycles: Cleanup, indent nested preprocessor directives 2016-03-25 13:55:42 +01:00
svm_noisetex.h Cleanup: Remove unused Noise Basis texture code. 2015-05-28 01:07:37 +02:00
svm_normal.h Cycles: Code cleanup, spaces around keywords 2015-03-28 00:15:15 +05:00
svm_ramp.h Fix Cycles RGB and Vector Curves node Fac handling. 2016-06-19 20:17:27 +02:00
svm_sepcomb_hsv.h Cycles: Code cleanup, spaces around keywords 2015-03-28 00:15:15 +05:00
svm_sepcomb_vector.h Cycles: Code cleanup, spaces around keywords 2015-03-28 00:15:15 +05:00
svm_sky.h Revert "Cycles: Remove the Preetham Sky model." 2016-04-05 12:25:54 +02:00
svm_tex_coord.h Cycles: Tweak inline policy for some functions 2016-01-14 14:53:05 +05:00
svm_texture.h Cleanup: Remove unused Noise Basis texture code. 2015-05-28 01:07:37 +02:00
svm_types.h Cycles: Add multi-scattering, energy-conserving GGX as an option to the Glossy, Anisotropic and Glass BSDFs 2016-06-23 22:57:26 +02:00
svm_value.h Cleanup: Fix Cycles Apache header. 2014-12-25 02:50:24 +01:00
svm_vector_transform.h Cycles: OpenCL kernel split 2015-05-09 19:52:40 +05:00
svm_voronoi.h Cleanup: Remove unused Voronoi texture code. 2015-05-28 00:36:33 +02:00
svm_voxel.h Cycles: Add support for bindless textures. 2016-05-19 13:14:37 +02:00
svm_wave.h Cycles: Add Saw option to the wave texture 2016-01-01 23:25:37 +01:00
svm_wavelength.h Cycles: Code cleanup, spaces around keywords 2015-03-28 00:15:15 +05:00
svm_wireframe.h Cycles: OpenCL kernel split 2015-05-09 19:52:40 +05:00
svm.h Cycles: add constant folding for more color operation nodes. 2016-06-19 20:17:28 +02:00