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