From 104cc05aa61aa1e7f7fe1d92923623b7ab8faddf Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Mon, 24 Jul 2023 22:47:45 +0300 Subject: [PATCH 1/2] init --- .../geometry/intern/realize_instances.cc | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/source/blender/geometry/intern/realize_instances.cc b/source/blender/geometry/intern/realize_instances.cc index c7e24edcbdc..c9b882da575 100644 --- a/source/blender/geometry/intern/realize_instances.cc +++ b/source/blender/geometry/intern/realize_instances.cc @@ -311,6 +311,18 @@ static void threaded_fill(const GPointer value, GMutableSpan dst) }); } +static void apply_scale_radius(const float scale, MutableSpan radius) +{ + if (scale == 1.0f) { + return; + } + threading::parallel_for(radius.index_range(), 2048, [&](const IndexRange range) { + for (float &radii : radius.slice(range)) { + radii *= scale; + } + }); +} + static void copy_generic_attributes_to_result( const Span> src_attributes, const AttributeFallbacksArray &attribute_fallbacks, @@ -745,7 +757,11 @@ static void execute_realize_pointcloud_task( options, pointcloud_info.stored_ids, task.id, all_dst_ids.slice(point_slice)); } if (!all_dst_radii.is_empty()) { - pointcloud_info.radii.materialize(all_dst_radii.slice(point_slice)); + MutableSpan point_radii = all_dst_radii.slice(point_slice); + pointcloud_info.radii.materialize(point_radii); + const float3 scale = math::to_scale(task.transform); + const float scale_mean = (scale.x + scale.y + scale.z) / 3.0f; + apply_scale_radius(scale_mean, point_radii); } copy_generic_attributes_to_result( @@ -1334,6 +1350,10 @@ static void execute_realize_curve_task(const RealizeInstancesOptions &options, }; if (all_curves_info.create_radius_attribute) { copy_point_span_with_default(curves_info.radius, all_radii, 1.0f); + + const float3 scale = math::to_scale(task.transform); + const float scale_mean = (scale.x + scale.y + scale.z) / 3.0f; + apply_scale_radius(scale_mean, all_radii.slice(dst_point_range)); } if (all_curves_info.create_nurbs_weight_attribute) { copy_point_span_with_default(curves_info.nurbs_weight, all_nurbs_weights, 1.0f); -- 2.30.2 From e89bbd292f4d80accda92b21ca2a7408bdac6140 Mon Sep 17 00:00:00 2001 From: Iliya Katueshenock Date: Tue, 25 Jul 2023 00:41:48 +0300 Subject: [PATCH 2/2] progress --- source/blender/geometry/intern/realize_instances.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/blender/geometry/intern/realize_instances.cc b/source/blender/geometry/intern/realize_instances.cc index c9b882da575..6818807c222 100644 --- a/source/blender/geometry/intern/realize_instances.cc +++ b/source/blender/geometry/intern/realize_instances.cc @@ -311,14 +311,14 @@ static void threaded_fill(const GPointer value, GMutableSpan dst) }); } -static void apply_scale_radius(const float scale, MutableSpan radius) +static void apply_scale_radii(const float scale, MutableSpan radii) { if (scale == 1.0f) { return; } - threading::parallel_for(radius.index_range(), 2048, [&](const IndexRange range) { - for (float &radii : radius.slice(range)) { - radii *= scale; + threading::parallel_for(radii.index_range(), 2048, [&](const IndexRange range) { + for (float &radius : radii.slice(range)) { + radius *= scale; } }); } @@ -761,7 +761,7 @@ static void execute_realize_pointcloud_task( pointcloud_info.radii.materialize(point_radii); const float3 scale = math::to_scale(task.transform); const float scale_mean = (scale.x + scale.y + scale.z) / 3.0f; - apply_scale_radius(scale_mean, point_radii); + apply_scale_radii(scale_mean, point_radii); } copy_generic_attributes_to_result( @@ -1353,7 +1353,7 @@ static void execute_realize_curve_task(const RealizeInstancesOptions &options, const float3 scale = math::to_scale(task.transform); const float scale_mean = (scale.x + scale.y + scale.z) / 3.0f; - apply_scale_radius(scale_mean, all_radii.slice(dst_point_range)); + apply_scale_radii(scale_mean, all_radii.slice(dst_point_range)); } if (all_curves_info.create_nurbs_weight_attribute) { copy_point_span_with_default(curves_info.nurbs_weight, all_nurbs_weights, 1.0f); -- 2.30.2