[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