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;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs