blender/intern/cycles/render
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
..
attribute.cpp Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
attribute.h Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
background.cpp Fix Cycles debug build assert on some platforms, tighten checks to avoid this in the future. 2016-06-12 17:35:15 +02:00
background.h Code refactor: minor node and node type utility functions and changes. 2016-05-29 20:30:16 +02:00
bake.cpp Fix T46207: Slow OpenCL GPU bake and blown out baking Cycles render 2016-05-31 17:48:42 +02:00
bake.h Fix T46550: Cycles combined baking black in some cases. 2016-02-06 21:02:02 +01:00
buffers.cpp Code refactor: nodify Cycles background and film. 2016-05-22 17:29:25 +02:00
buffers.h Code refactor: nodify Cycles background and film. 2016-05-22 17:29:25 +02:00
camera.cpp Fix Cycles debug build assert on some platforms, tighten checks to avoid this in the future. 2016-06-12 17:35:15 +02:00
camera.h Code refactor: minor node and node type utility functions and changes. 2016-05-29 20:30:16 +02:00
CMakeLists.txt Code refactor: add generic Cycles node infrastructure. 2016-05-22 17:29:24 +02:00
curves.cpp Cycles: Code cleanup, prepare for strict C++ flags 2015-03-27 18:23:31 +05:00
curves.h Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
film.cpp Code refactor: minor node and node type utility functions and changes. 2016-05-29 20:30:16 +02:00
film.h Code refactor: nodify Cycles background and film. 2016-05-22 17:29:25 +02:00
graph.cpp Fix issues with node deduplication in Cycles shader graph. 2016-06-19 20:17:27 +02:00
graph.h Code refactor: small code simplification for Cycles constant folding. 2016-06-19 20:17:27 +02:00
image.cpp Cleanup: Remove todo comment, this is fine as is. 2016-06-19 21:09:54 +02:00
image.h Cycles: Support half and half4 textures. 2016-06-19 17:31:16 +02:00
integrator.cpp Code refactor: minor node and node type utility functions and changes. 2016-05-29 20:30:16 +02:00
integrator.h Code refactor: minor node and node type utility functions and changes. 2016-05-29 20:30:16 +02:00
light.cpp Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
light.h Code refactor: nodify Cycles shader and lights. 2016-05-22 17:29:25 +02:00
mesh_displace.cpp Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
mesh.cpp Fix Cycles debug build assert on some platforms, tighten checks to avoid this in the future. 2016-06-12 17:35:15 +02:00
mesh.h Cycles: Fixes for recent refactor 2016-05-31 15:32:31 +02:00
nodes.cpp 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
nodes.h Cycles: Deduplicate Vector and RGB Curve nodes 2016-06-21 00:19:51 +02:00
object.cpp Fix Cycles debug build assert on some platforms, tighten checks to avoid this in the future. 2016-06-12 17:35:15 +02:00
object.h Cycles: Ignore zero size instances in BVH 2016-06-06 09:23:53 +02:00
osl.cpp Cycles: Fix unhandled enumerator in OSL switch 2016-06-13 10:15:39 +02:00
osl.h Cycles: nodify shader nodes 2016-06-11 20:32:24 +02:00
particles.cpp Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
particles.h Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
scene.cpp Cycles: Add human readable sizes to debug output 2016-05-31 06:13:54 -04:00
scene.h Cycles: Support half and half4 textures. 2016-06-19 17:31:16 +02:00
session.cpp Code refactor: modify mesh storage to use arrays rather than vectors, separate some arrays. 2016-05-28 18:31:00 +02:00
session.h Cycles: Use explicit qualifier for single-argument constructors 2016-05-11 16:51:14 +02:00
shader.cpp Cycles: nodify shader nodes 2016-06-11 20:32:24 +02:00
shader.h Code refactor: nodify Cycles shader and lights. 2016-05-22 17:29:25 +02:00
sobol.cpp Fix #29528: crash adding subsurf modifier in a particular scene with viewport render. 2011-12-08 21:55:35 +00:00
sobol.h Cleanup: Fix Cycles Apache header. 2014-12-25 02:50:24 +01:00
svm.cpp Cycles: nodify shader nodes 2016-06-11 20:32:24 +02:00
svm.h Code refactor: make ShaderNode match Node a bit more, reusing types and enums. 2016-05-28 15:49:15 +02:00
tables.cpp Cycles: Fix two small memory leaks and deduplicate table freeing 2016-05-08 17:44:03 +02:00
tables.h Cycles: Fix two small memory leaks and deduplicate table freeing 2016-05-08 17:44:03 +02:00
tile.cpp Cycles: Resumable render implementation for Cycles 2016-03-30 16:02:27 +02:00
tile.h Cycles: Resumable render implementation for Cycles 2016-03-30 16:02:27 +02:00