Cleanup: Geometry Nodes: Density field computation simplification #118976
|
@ -463,23 +463,19 @@ static Array<float> calc_full_density_factors_with_selection(const Mesh &mesh,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void distribute_points_random(const Mesh &mesh,
|
static void distribute_points_random(const Mesh &mesh,
|
||||||
const Field<float> &density_field,
|
const Span<float> densities,
|
||||||
const Field<bool> &selection_field,
|
|
||||||
const int seed,
|
const int seed,
|
||||||
Vector<float3> &positions,
|
Vector<float3> &positions,
|
||||||
Vector<float3> &bary_coords,
|
Vector<float3> &bary_coords,
|
||||||
Vector<int> &tri_indices)
|
Vector<int> &tri_indices)
|
||||||
{
|
{
|
||||||
const Array<float> 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);
|
sample_mesh_surface(mesh, 1.0f, densities, seed, positions, bary_coords, tri_indices);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void distribute_points_poisson_disk(const Mesh &mesh,
|
static void distribute_points_poisson_disk(const Mesh &mesh,
|
||||||
const float minimum_distance,
|
const float minimum_distance,
|
||||||
const float max_density,
|
const float max_density,
|
||||||
const Field<float> &density_factor_field,
|
const Span<float> density_factors,
|
||||||
const Field<bool> &selection_field,
|
|
||||||
const int seed,
|
const int seed,
|
||||||
Vector<float3> &positions,
|
Vector<float3> &positions,
|
||||||
Vector<float3> &bary_coords,
|
Vector<float3> &bary_coords,
|
||||||
|
@ -490,9 +486,6 @@ static void distribute_points_poisson_disk(const Mesh &mesh,
|
||||||
Array<bool> elimination_mask(positions.size(), false);
|
Array<bool> elimination_mask(positions.size(), false);
|
||||||
update_elimination_mask_for_close_points(positions, minimum_distance, elimination_mask);
|
update_elimination_mask_for_close_points(positions, minimum_distance, elimination_mask);
|
||||||
|
|
||||||
const Array<float> density_factors = calc_full_density_factors_with_selection(
|
|
||||||
mesh, density_factor_field, selection_field);
|
|
||||||
|
|
||||||
update_elimination_mask_based_on_density_factors(
|
update_elimination_mask_based_on_density_factors(
|
||||||
mesh, density_factors, bary_coords, tri_indices, elimination_mask.as_mutable_span());
|
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) {
|
switch (method) {
|
||||||
case GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_RANDOM: {
|
case GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_RANDOM: {
|
||||||
const Field<float> density_field = params.get_input<Field<float>>("Density");
|
const Field<float> density_field = params.get_input<Field<float>>("Density");
|
||||||
distribute_points_random(
|
const Array<float> densities = calc_full_density_factors_with_selection(
|
||||||
mesh, density_field, selection_field, seed, positions, bary_coords, tri_indices);
|
mesh, density_field, selection_field);
|
||||||
|
|
||||||
|
distribute_points_random(mesh, densities, seed, positions, bary_coords, tri_indices);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_POISSON: {
|
case GEO_NODE_POINT_DISTRIBUTE_POINTS_ON_FACES_POISSON: {
|
||||||
const float minimum_distance = params.get_input<float>("Distance Min");
|
const float minimum_distance = params.get_input<float>("Distance Min");
|
||||||
const float density_max = params.get_input<float>("Density Max");
|
const float density_max = params.get_input<float>("Density Max");
|
||||||
|
|
||||||
const Field<float> density_factors_field = params.get_input<Field<float>>("Density Factor");
|
const Field<float> density_factors_field = params.get_input<Field<float>>("Density Factor");
|
||||||
|
const Array<float> density_factors = calc_full_density_factors_with_selection(
|
||||||
|
mesh, density_factors_field, selection_field);
|
||||||
|
|
||||||
distribute_points_poisson_disk(mesh,
|
distribute_points_poisson_disk(mesh,
|
||||||
minimum_distance,
|
minimum_distance,
|
||||||
density_max,
|
density_max,
|
||||||
density_factors_field,
|
density_factors,
|
||||||
selection_field,
|
|
||||||
seed,
|
seed,
|
||||||
positions,
|
positions,
|
||||||
bary_coords,
|
bary_coords,
|
||||||
|
|
Loading…
Reference in New Issue