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:
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user