diff --git a/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc b/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc index de3c9d5308e..b69f7b3ec75 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc @@ -463,23 +463,19 @@ static Array calc_full_density_factors_with_selection(const Mesh &mesh, } static void distribute_points_random(const Mesh &mesh, - const Field &density_field, - const Field &selection_field, + const Span densities, const int seed, Vector &positions, Vector &bary_coords, Vector &tri_indices) { - const Array densities = calc_full_density_factors_with_selection( - mesh, density_field, selection_field); sample_mesh_surface(mesh, 1.0f, densities, seed, positions, bary_coords, tri_indices); } static void distribute_points_poisson_disk(const Mesh &mesh, const float minimum_distance, const float max_density, - const Field &density_factor_field, - const Field &selection_field, + const Span density_factors, const int seed, Vector &positions, Vector &bary_coords, @@ -490,9 +486,6 @@ static void distribute_points_poisson_disk(const Mesh &mesh, Array elimination_mask(positions.size(), false); update_elimination_mask_for_close_points(positions, minimum_distance, elimination_mask); - const Array density_factors = calc_full_density_factors_with_selection( - mesh, density_factor_field, selection_field); - update_elimination_mask_based_on_density_factors( mesh, density_factors, bary_coords, tri_indices, elimination_mask.as_mutable_span()); @@ -519,19 +512,24 @@ static void point_distribution_calculate(GeometrySet &geometry_set, switch (method) { case GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_RANDOM: { const Field density_field = params.get_input>("Density"); - distribute_points_random( - mesh, density_field, selection_field, seed, positions, bary_coords, tri_indices); + const Array densities = calc_full_density_factors_with_selection( + mesh, density_field, selection_field); + + distribute_points_random(mesh, densities, seed, positions, bary_coords, tri_indices); break; } case GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_POISSON: { const float minimum_distance = params.get_input("Distance Min"); const float density_max = params.get_input("Density Max"); + const Field density_factors_field = params.get_input>("Density Factor"); + const Array density_factors = calc_full_density_factors_with_selection( + mesh, density_factors_field, selection_field); + distribute_points_poisson_disk(mesh, minimum_distance, density_max, - density_factors_field, - selection_field, + density_factors, seed, positions, bary_coords,