Sculpt: Separate distance filtering from calculation

Remove the filtering of factors from the brush distance calculation
function to simplify its responsibilities and to allow passing a custom
radius from the outside. Factor filtering is now done in a separate
function. Also rename the distance calculation functions.
This commit is contained in:
Hans Goudey
2024-07-03 09:10:16 -04:00
parent a882d289fe
commit 61fb25cb94
22 changed files with 175 additions and 171 deletions

View File

@@ -80,8 +80,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
calc_brush_strength_factors(cache, brush, distances, factors);
if (cache.automasking) {
@@ -129,8 +130,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
calc_brush_strength_factors(cache, brush, distances, factors);
if (cache.automasking) {
@@ -176,8 +177,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
calc_brush_strength_factors(cache, brush, distances, factors);
if (cache.automasking) {

View File

@@ -67,7 +67,7 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_cube_distance_falloff(ss, brush, mat, positions_eval, verts, distances, factors);
calc_brush_cube_distances(ss, brush, mat, positions_eval, verts, distances, factors);
scale_factors(distances, cache.radius);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -128,7 +128,7 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_cube_distance_falloff(ss, brush, mat, positions, distances, factors);
calc_brush_cube_distances(ss, brush, mat, positions, distances, factors);
scale_factors(distances, cache.radius);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -187,7 +187,7 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_cube_distance_falloff(ss, brush, mat, positions, distances, factors);
calc_brush_cube_distances(ss, brush, mat, positions, distances, factors);
scale_factors(distances, cache.radius);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -73,8 +73,8 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -125,8 +125,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -175,8 +175,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -93,8 +93,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -155,8 +156,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -212,8 +213,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -62,8 +62,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -109,8 +110,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -154,8 +155,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -103,8 +103,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -150,8 +151,8 @@ static void calc_grids(
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -195,8 +196,8 @@ static void calc_bmesh(
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -64,8 +64,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -118,8 +119,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -170,8 +171,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -63,8 +63,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -115,8 +116,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -165,8 +166,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -75,8 +75,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -123,8 +124,9 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -172,8 +174,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, orig_positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -70,8 +70,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -119,8 +120,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -166,8 +167,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -84,8 +84,8 @@ static void calc_faces(const Brush &brush,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -169,8 +169,8 @@ static void calc_grids(
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -246,8 +246,8 @@ static void calc_bmesh(
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -197,8 +197,8 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
/* NOTE: The distances are not used from this call, it's only used for filtering. */
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
tls.local_positions.reinitialize(verts.size());
MutableSpan<float3> local_positions = tls.local_positions;
@@ -261,8 +261,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
/* NOTE: The distances are not used from this call, it's only used for filtering. */
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
tls.local_positions.reinitialize(grid_verts_num);
MutableSpan<float3> local_positions = tls.local_positions;
@@ -323,8 +323,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
/* NOTE: The distances are not used from this call, it's only used for filtering. */
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
tls.local_positions.reinitialize(verts.size());
MutableSpan<float3> local_positions = tls.local_positions;

View File

@@ -74,8 +74,8 @@ static void calc_node(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -59,8 +59,8 @@ static void calc_node(
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -92,8 +92,8 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -147,8 +147,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -200,8 +200,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -79,8 +79,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -127,8 +128,9 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -175,8 +177,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, orig_positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -64,8 +64,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -118,8 +119,8 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -170,8 +171,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -128,8 +128,9 @@ BLI_NOINLINE static void apply_positions_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -126,8 +126,9 @@ static void apply_masks_faces(const Brush &brush,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, positions_eval, verts, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -62,8 +62,9 @@ static void calc_faces(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -107,8 +108,9 @@ static void calc_grids(const Sculpt &sd,
tls.distances.reinitialize(grid_verts_num);
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(
ss, orig_data.positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);
@@ -153,8 +155,8 @@ static void calc_bmesh(const Sculpt &sd,
tls.distances.reinitialize(verts.size());
const MutableSpan<float> distances = tls.distances;
calc_distance_falloff(
ss, orig_positions, eBrushFalloffShape(brush.falloff_shape), distances, factors);
calc_brush_distances(ss, orig_positions, eBrushFalloffShape(brush.falloff_shape), distances);
filter_distances_with_radius(cache.radius, distances, factors);
apply_hardness_to_distances(cache, distances);
calc_brush_strength_factors(cache, brush, distances, factors);

View File

@@ -131,35 +131,36 @@ void filter_region_clip_factors(const SculptSession &ss,
* Calculate distances based on the distance from the brush cursor and various other settings.
* Also ignore vertices that are too far from the cursor.
*/
void calc_distance_falloff(const SculptSession &ss,
Span<float3> vert_positions,
Span<int> vert_indices,
eBrushFalloffShape falloff_shape,
MutableSpan<float> r_distances,
MutableSpan<float> factors);
void calc_distance_falloff(const SculptSession &ss,
Span<float3> positions,
const eBrushFalloffShape falloff_shape,
MutableSpan<float> r_distances,
MutableSpan<float> factors);
void calc_brush_distances(const SculptSession &ss,
Span<float3> vert_positions,
Span<int> vert_indices,
eBrushFalloffShape falloff_shape,
MutableSpan<float> r_distances);
void calc_brush_distances(const SculptSession &ss,
Span<float3> positions,
const eBrushFalloffShape falloff_shape,
MutableSpan<float> r_distances);
/** Set the factor to zero for all distances greater than the radius. */
void filter_distances_with_radius(float radius, Span<float> distances, MutableSpan<float> factors);
/**
* Calculate distances based on a "square" brush tip falloff and ignore vertices that are too far
* away.
*/
void calc_cube_distance_falloff(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
Span<float3> positions,
Span<int> verts,
MutableSpan<float> r_distances,
MutableSpan<float> factors);
void calc_cube_distance_falloff(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
const Span<float3> positions,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors);
void calc_brush_cube_distances(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
Span<float3> positions,
Span<int> verts,
MutableSpan<float> r_distances,
MutableSpan<float> factors);
void calc_brush_cube_distances(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
const Span<float3> positions,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors);
/**
* Scale the distances based on the brush radius and the cached "hardness" setting, which increases

View File

@@ -6914,12 +6914,11 @@ void filter_region_clip_factors(const SculptSession &ss,
}
}
void calc_distance_falloff(const SculptSession &ss,
const Span<float3> positions,
const Span<int> verts,
const eBrushFalloffShape falloff_shape,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors)
void calc_brush_distances(const SculptSession &ss,
const Span<float3> positions,
const Span<int> verts,
const eBrushFalloffShape falloff_shape,
const MutableSpan<float> r_distances_sq)
{
BLI_assert(verts.size() == factors.size());
BLI_assert(verts.size() == r_distances.size());
@@ -6933,32 +6932,20 @@ void calc_distance_falloff(const SculptSession &ss,
for (const int i : verts.index_range()) {
float3 projected;
closest_to_plane_normalized_v3(projected, test_plane, positions[verts[i]]);
r_distances[i] = math::distance_squared(projected, test_location);
r_distances_sq[i] = math::distance(projected, test_location);
}
}
else {
for (const int i : verts.index_range()) {
r_distances[i] = math::distance_squared(test_location, positions[verts[i]]);
}
}
const float radius_sq = ss.cache ? ss.cache->radius_squared :
ss.cursor_radius * ss.cursor_radius;
for (const int i : r_distances.index_range()) {
if (r_distances[i] < radius_sq) {
r_distances[i] = std::sqrt(r_distances[i]);
}
else {
factors[i] = 0.0f;
r_distances_sq[i] = math::distance(test_location, positions[verts[i]]);
}
}
}
void calc_distance_falloff(const SculptSession &ss,
const Span<float3> positions,
const eBrushFalloffShape falloff_shape,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors)
void calc_brush_distances(const SculptSession &ss,
const Span<float3> positions,
const eBrushFalloffShape falloff_shape,
const MutableSpan<float> r_distances_sq)
{
BLI_assert(positions.size() == factors.size());
BLI_assert(positions.size() == r_distances.size());
@@ -6972,34 +6959,34 @@ void calc_distance_falloff(const SculptSession &ss,
for (const int i : positions.index_range()) {
float3 projected;
closest_to_plane_normalized_v3(projected, test_plane, positions[i]);
r_distances[i] = math::distance_squared(projected, test_location);
r_distances_sq[i] = math::distance(projected, test_location);
}
}
else {
for (const int i : positions.index_range()) {
r_distances[i] = math::distance_squared(test_location, positions[i]);
r_distances_sq[i] = math::distance(test_location, positions[i]);
}
}
}
const float radius_sq = ss.cache ? ss.cache->radius_squared :
ss.cursor_radius * ss.cursor_radius;
for (const int i : r_distances.index_range()) {
if (r_distances[i] < radius_sq) {
r_distances[i] = std::sqrt(r_distances[i]);
}
else {
void filter_distances_with_radius(const float radius,
const Span<float> distances,
const MutableSpan<float> factors)
{
for (const int i : distances.index_range()) {
if (distances[i] > radius) {
factors[i] = 0.0f;
}
}
}
void calc_cube_distance_falloff(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
const Span<float3> positions,
const Span<int> verts,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors)
void calc_brush_cube_distances(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
const Span<float3> positions,
const Span<int> verts,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors)
{
BLI_assert(verts.size() == factors.size());
BLI_assert(verts.size() == r_distances.size());
@@ -7023,12 +7010,12 @@ void calc_cube_distance_falloff(SculptSession &ss,
}
}
void calc_cube_distance_falloff(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
const Span<float3> positions,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors)
void calc_brush_cube_distances(SculptSession &ss,
const Brush &brush,
const float4x4 &mat,
const Span<float3> positions,
const MutableSpan<float> r_distances,
const MutableSpan<float> factors)
{
BLI_assert(positions.size() == factors.size());
BLI_assert(positions.size() == r_distances.size());