[Bf-blender-cvs] [60ecf2ee0ec] soc-2022-many-lights-sampling: Merge branch 'master' into soc-2022-many-lights-sampling
Brecht Van Lommel
noreply at git.blender.org
Fri Dec 2 19:47:10 CET 2022
Commit: 60ecf2ee0ecab1057ffe687508baa83531252fa3
Author: Brecht Van Lommel
Date: Fri Dec 2 18:27:47 2022 +0100
Branches: soc-2022-many-lights-sampling
https://developer.blender.org/rB60ecf2ee0ecab1057ffe687508baa83531252fa3
Merge branch 'master' into soc-2022-many-lights-sampling
===================================================================
===================================================================
diff --cc intern/cycles/kernel/light/area.h
index 2108073c199,db8faf6ec10..16d2e2c7d3a
--- a/intern/cycles/kernel/light/area.h
+++ b/intern/cycles/kernel/light/area.h
@@@ -321,44 -342,4 +342,44 @@@ ccl_device_inline bool area_light_sampl
return true;
}
+
+template<bool in_volume_segment>
+ccl_device_forceinline bool area_light_tree_parameters(const ccl_global KernelLight *klight,
+ const float3 centroid,
+ const float3 P,
+ const float3 N,
+ const float3 bcone_axis,
+ ccl_private float &cos_theta_u,
+ ccl_private float2 &distance,
+ ccl_private float3 &point_to_centroid)
+{
+ if (!in_volume_segment) {
+ /* TODO: a cheap substitute for minimal distance between point and primitive. Does it
+ * worth the overhead to compute the accurate minimal distance? */
+ float min_distance;
+ point_to_centroid = safe_normalize_len(centroid - P, &min_distance);
+ distance = make_float2(min_distance, min_distance);
+ }
+
- const float3 extentu = klight->area.extentu;
- const float3 extentv = klight->area.extentv;
++ const float3 extentu = klight->area.axis_u * klight->area.len_u;
++ const float3 extentv = klight->area.axis_v * klight->area.len_v;
+ for (int i = 0; i < 4; i++) {
+ const float3 corner = ((i & 1) - 0.5f) * extentu + 0.5f * ((i & 2) - 1) * extentv + centroid;
+ float distance_point_to_corner;
+ const float3 point_to_corner = safe_normalize_len(corner - P, &distance_point_to_corner);
+ cos_theta_u = fminf(cos_theta_u, dot(point_to_centroid, point_to_corner));
+ if (!in_volume_segment) {
+ distance.x = fmaxf(distance.x, distance_point_to_corner);
+ }
+ }
+
+ const bool front_facing = dot(bcone_axis, point_to_centroid) < 0;
+ const bool shape_above_surface = dot(N, centroid - P) + fabsf(dot(N, extentu)) +
+ fabsf(dot(N, extentv)) >
+ 0;
+ const bool in_volume = is_zero(N);
+
+ return (front_facing && shape_above_surface) || in_volume;
+}
+
CCL_NAMESPACE_END
More information about the Bf-blender-cvs
mailing list