blender/intern
Lukas Stockner 5505ba8d47 Cycles/Eevee: Implement disk and ellipse shapes for area lamps
The implementation is pretty straightforward.

In Cycles, sampling the shapes is currently done w.r.t. area instead of solid angle.

There is a paper on solid angle sampling for disks [1], but the described algorithm is based on
simply sampling the enclosing square and rejecting samples outside of the disk, which is not exactly
great for Cycles' RNG (we'd need to setup a LCG for the repeated sampling) and for GPU divergence.

Even worse, the algorithm is only defined for disks. For ellipses, the basic idea still works, but a
way to analytically calculate the solid angle is required. This is technically possible [2], but the
calculation is extremely complex and still requires a lookup table for the Heuman Lambda function.

Therefore, I've decided to not implement that for now, we could still look into it later on.

In Eevee, the code uses the existing ltc_evaluate_disk to implement the lighting calculations.

[1]: "Solid Angle Sampling of Disk and Cylinder Lights"
[2]: "Analytical solution for the solid angle subtended at any point by an ellipse via a point source radiation vector potential"

Reviewers: sergey, brecht, fclem

Differential Revision: https://developer.blender.org/D3171
2018-05-24 16:43:47 +02:00
..
atomic atomic_ops: add atomic_cas_float helper. 2017-11-23 21:17:16 +01:00
audaspace PyDocs: Fix link syntax 2018-03-22 16:38:53 -04:00
clog Merge branch 'master' into blender2.8 2018-05-18 11:02:39 +02:00
cycles Cycles/Eevee: Implement disk and ellipse shapes for area lamps 2018-05-24 16:43:47 +02:00
dualcon Remove MinGW support 2017-05-27 15:34:55 -04:00
eigen Fix compilation error with clang-5 2017-11-14 17:11:48 +01:00
elbeem Merge branch 'master' into blender2.8 2018-02-07 11:19:01 +11:00
ffmpeg Fix building with latest versions of ffmpeg. 2018-05-08 16:00:52 +02:00
gawain GWN: Add Line Adjacency primitive support. 2018-05-20 19:14:22 +02:00
ghost Merge branch 'master' into blender2.8 2018-05-07 14:20:47 +02:00
glew-mx OpenGL: remove use of GLEW MX 2017-04-22 00:35:04 -04:00
guardedalloc Fix incorrect size in aligned lockfree realloc 2018-05-23 07:24:57 +02:00
iksolver FIX T49899: Add EIGEN_MAKE_ALIGNED_OPERATOR_NEW to classes that use eigen's data types , to force aligned on 16 byte boundaries. 2016-11-15 13:21:01 -07:00
itasc Cleanup: don't use Blender structs in iTaSC module. 2018-04-13 11:31:19 +02:00
libmv Libmv: Fix compilation error on Windows 2018-03-23 15:05:08 +01:00
locale Add C internal version of msgfmt (similar to makesrna/dna binaries). 2017-04-24 10:49:54 +02:00
memutil Cleanup: doxygen comments 2017-06-19 10:04:30 +10:00
mikktspace Mikktspace: Speed up the merging of identical vertices 2017-11-17 18:34:53 +01:00
opencolorio OpenGL: Remove remaining instances of GL_RGBA16F_ARB. 2018-04-24 12:48:43 +02:00
opensubdiv Merge branch 'master' into blender2.8 2018-02-07 17:17:24 +01:00
openvdb Build: add WITH_OPENVDB_3_ABI_COMPATIBLE option. 2018-04-02 19:13:04 +02:00
rigidbody Use the newer version of the bullet 6dof spring constraint for rigidbody. 2018-04-09 19:14:35 +03:00
smoke Smoke: Pass non-trivial arguments by const reference 2017-11-14 17:11:48 +01:00
string Removing Blender Game Engine from Blender 2.8 2018-04-17 17:51:28 +02:00
utfconv C++ conformance fixes (MSVC /permissive-) 2017-02-06 10:44:56 +01:00
CMakeLists.txt Cleanup: remove modules that were only used by the game engine. 2018-04-17 18:37:29 +02:00