[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