[Bf-blender-cvs] [d17858cb370] master: Fix Cycles rectangular area light in volume segment sampled by ellipse

Weizhen Huang noreply at git.blender.org
Mon Dec 12 16:00:35 CET 2022


Commit: d17858cb37025c9732ef0987d2222e5de884bd95
Author: Weizhen Huang
Date:   Mon Dec 12 15:56:50 2022 +0100
Branches: master
https://developer.blender.org/rBd17858cb37025c9732ef0987d2222e5de884bd95

Fix Cycles rectangular area light in volume segment sampled by ellipse

===================================================================

M	intern/cycles/kernel/light/area.h
M	intern/cycles/kernel/light/common.h

===================================================================

diff --git a/intern/cycles/kernel/light/area.h b/intern/cycles/kernel/light/area.h
index 69cf810f800..9c0ca0c8a70 100644
--- a/intern/cycles/kernel/light/area.h
+++ b/intern/cycles/kernel/light/area.h
@@ -255,8 +255,9 @@ ccl_device_inline bool area_light_sample(const ccl_global KernelLight *klight,
   float3 inplane;
 
   if (in_volume_segment) {
-    /* FIXME: handle rectangular light. */
-    inplane = ellipse_sample(axis_u * len_u * 0.5f, axis_v * len_v * 0.5f, randu, randv);
+    inplane = sample_rectangle ?
+                  rectangle_sample(axis_u * len_u * 0.5f, axis_v * len_v * 0.5f, randu, randv) :
+                  ellipse_sample(axis_u * len_u * 0.5f, axis_v * len_v * 0.5f, randu, randv);
     ls->P += inplane;
     ls->pdf = invarea;
   }
diff --git a/intern/cycles/kernel/light/common.h b/intern/cycles/kernel/light/common.h
index 5f0a3218ae1..9a08bbcf43a 100644
--- a/intern/cycles/kernel/light/common.h
+++ b/intern/cycles/kernel/light/common.h
@@ -34,6 +34,11 @@ ccl_device_inline float3 ellipse_sample(float3 ru, float3 rv, float randu, float
   return ru * randu + rv * randv;
 }
 
+ccl_device_inline float3 rectangle_sample(float3 ru, float3 rv, float randu, float randv)
+{
+  return ru * (2.0f * randu - 1.0f) + rv * (2.0f * randv - 1.0f);
+}
+
 ccl_device float3 disk_light_sample(float3 v, float randu, float randv)
 {
   float3 ru, rv;



More information about the Bf-blender-cvs mailing list