25inline namespace relax_cc {
94 if (stroke_iteration % 3 == 0) {
95 return {strength, strength, strength, strength};
99 const float modified_strength = strength * 1.5f;
100 return {modified_strength, modified_strength, strength, strength};
109 const float strength,
110 const bool relax_face_sets,
142 vert_to_face_map, attribute_data.
face_sets, relax_face_sets,
verts, factors);
150 const float strength,
151 const bool relax_face_sets)
156 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
158 const Span<int> corner_verts = mesh.corner_verts();
167 nodes, node_mask, node_offset_data);
202 factors.
as_span().slice(node_vert_offsets[
pos]),
226 const float strength,
227 const bool relax_face_sets,
277 const float strength,
278 const bool relax_face_sets)
287 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
289 const Span<int> corner_verts = mesh.corner_verts();
297 key, nodes, node_mask, node_offset_data);
332 factors.
as_span().slice(node_vert_offsets[
pos]),
352 const int face_set_offset,
354 const float strength,
355 const bool relax_face_sets,
386 face_set_offset, relax_face_sets,
verts, factors);
394 const float strength,
395 const bool relax_face_sets)
401 nodes, node_mask, node_offset_data);
404 &
object.sculpt->bm->pdata,
CD_PROP_INT32,
".sculpt_face_set");
432 factors.
as_span().slice(node_vert_offsets[
pos]),
442 current_positions.
as_span().slice(node_vert_offsets[
pos]));
456 const float strength,
495 const float strength)
500 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
502 const Span<int> corner_verts = mesh.corner_verts();
510 nodes, node_mask, node_offset_data);
541 factors.
as_span().slice(node_vert_offsets[
pos]),
560 const float strength,
604 const float strength)
609 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
613 Mesh &mesh = *
static_cast<Mesh *
>(
object.data);
615 const Span<int> corner_verts = mesh.corner_verts();
623 key, nodes, node_mask, node_offset_data);
654 factors.
as_span().slice(node_vert_offsets[
pos]),
675 const float strength,
716 const float strength)
721 &
object.sculpt->bm->pdata,
CD_PROP_INT32,
".sculpt_face_set");
725 nodes, node_mask, node_offset_data);
752 factors.
as_span().slice(node_vert_offsets[
pos]),
762 current_positions.
as_span().slice(node_vert_offsets[
pos]));
788 for (
const float strength : strengths) {
792 depsgraph, sd, brush,
object, node_mask, strength * strength, relax_face_sets);
796 depsgraph, sd, brush,
object, node_mask, strength * strength, relax_face_sets);
800 depsgraph, sd, brush,
object, node_mask, strength * strength, relax_face_sets);
822 for (
int i = 0; i < 4; i++) {
int CustomData_get_offset_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
const Brush * BKE_paint_brush_for_read(const Paint *paint)
const blender::Set< BMVert *, 0 > & BKE_pbvh_bmesh_node_unique_verts(blender::bke::pbvh::BMeshNode *node)
CCGKey BKE_subdiv_ccg_key_top_level(const SubdivCCG &subdiv_ccg)
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
constexpr int64_t size() const
void resize(const int64_t new_size)
void tag_positions_changed(const IndexMask &node_mask)
Span< NodeT > nodes() const
void foreach_index(Fn &&fn) const
const Depsgraph * depsgraph
pbvh::Tree * pbvh_get(Object &object)
void update_node_bounds_bmesh(BMeshNode &node)
void update_node_bounds_mesh(Span< float3 > positions, MeshNode &node)
Span< float3 > vert_normals_eval(const Depsgraph &depsgraph, const Object &object_orig)
void update_node_bounds_grids(int grid_area, Span< float3 > positions, GridsNode &node)
void flush_bounds_to_parents(Tree &pbvh)
void calc_grids_factors(const Depsgraph &depsgraph, const Object &object, const Cache &cache, const bke::pbvh::GridsNode &node, Span< int > grids, MutableSpan< float > factors)
void calc_vert_factors(const Depsgraph &depsgraph, const Object &object, const Cache &cache, const bke::pbvh::MeshNode &node, Span< int > verts, MutableSpan< float > factors)
void ensure_boundary_info(Object &object)
static BLI_NOINLINE void fill_factor_from_hide_and_mask(const Mesh &mesh, const Span< int > face_indices, const MutableSpan< float > r_factors)
void filter_verts_with_unique_face_sets_mesh(const GroupedSpan< int > vert_to_face_map, const Span< int > face_sets, const bool unique, const Span< int > verts, const MutableSpan< float > factors)
void filter_verts_with_unique_face_sets_bmesh(int face_set_offset, const bool unique, const Set< BMVert *, 0 > &verts, const MutableSpan< float > factors)
void filter_verts_with_unique_face_sets_grids(const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face_map, const Span< int > face_sets, const SubdivCCG &subdiv_ccg, const bool unique, const Span< int > grids, const MutableSpan< float > factors)
static std::array< float, 4 > iteration_strengths(const float strength, const int stroke_iteration)
static void do_topology_relax_brush_grids(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength)
static BLI_NOINLINE void calc_factors_faces(const Depsgraph &depsgraph, const Brush &brush, const Span< float3 > positions_eval, const Span< float3 > vert_normals, const GroupedSpan< int > vert_to_face_map, const MeshAttributeData &attribute_data, const float strength, const bool relax_face_sets, const Object &object, const bke::pbvh::MeshNode &node, MeshLocalData &tls, const MutableSpan< float > factors)
static void calc_factors_bmesh(const Depsgraph &depsgraph, Object &object, const Brush &brush, const int face_set_offset, bke::pbvh::BMeshNode &node, const float strength, const bool relax_face_sets, BMeshLocalData &tls, MutableSpan< float3 > positions, MutableSpan< float > factors)
static void do_relax_face_sets_brush_grids(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength, const bool relax_face_sets)
static BLI_NOINLINE void calc_topology_relax_factors_faces(const Depsgraph &depsgraph, const Brush &brush, const float strength, const Object &object, const MeshAttributeData &attribute_data, const bke::pbvh::MeshNode &node, MeshLocalData &tls, const MutableSpan< float > factors)
static void do_relax_face_sets_brush_bmesh(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength, const bool relax_face_sets)
static void apply_positions_grids(const Sculpt &sd, const Span< int > grids, Object &object, const Span< float3 > positions, const MutableSpan< float3 > translations)
static void apply_positions_bmesh(const Sculpt &sd, const Set< BMVert *, 0 > verts, Object &object, const MutableSpan< float3 > translations, const Span< float3 > positions)
static void do_topology_relax_brush_bmesh(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength)
static void calc_topology_relax_factors_bmesh(const Depsgraph &depsgraph, Object &object, const Brush &brush, bke::pbvh::BMeshNode &node, const float strength, BMeshLocalData &tls, MutableSpan< float3 > positions, MutableSpan< float > factors)
static void do_relax_face_sets_brush_mesh(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength, const bool relax_face_sets)
static BLI_NOINLINE void calc_factors_grids(const Depsgraph &depsgraph, const Brush &brush, const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face_map, const Span< int > face_sets, const bke::pbvh::GridsNode &node, const float strength, const bool relax_face_sets, Object &object, GridLocalData &tls, const MutableSpan< float3 > positions, const MutableSpan< float > factors)
static void apply_positions_faces(const Sculpt &sd, const Span< int > verts, Object &object, const MutableSpan< float3 > translations, const PositionDeformData &position_data)
static void do_topology_relax_brush_mesh(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength)
static BLI_NOINLINE void calc_topology_relax_factors_grids(const Depsgraph &depsgraph, const Brush &brush, const float strength, const Object &object, const bke::pbvh::GridsNode &node, GridLocalData &tls, const MutableSpan< float3 > positions, const MutableSpan< float > factors)
void calc_relaxed_translations_grids(const SubdivCCG &subdiv_ccg, const OffsetIndices< int > faces, const Span< int > corner_verts, const Span< int > face_sets, const GroupedSpan< int > vert_to_face_map, const BitSpan boundary_verts, const Span< int > grids, const bool filter_boundary_face_sets, const Span< float > factors, Vector< Vector< SubdivCCGCoord > > &neighbors, const MutableSpan< float3 > translations)
void calc_relaxed_translations_faces(const Span< float3 > vert_positions, const Span< float3 > vert_normals, const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face_map, const BitSpan boundary_verts, const Span< int > face_sets, const Span< bool > hide_poly, const bool filter_boundary_face_sets, const Span< int > verts, const Span< float > factors, Vector< Vector< int > > &neighbors, const MutableSpan< float3 > translations)
void calc_relaxed_translations_bmesh(const Set< BMVert *, 0 > &verts, const Span< float3 > positions, const int face_set_offset, const bool filter_boundary_face_sets, const Span< float > factors, Vector< Vector< BMVert * > > &neighbors, const MutableSpan< float3 > translations)
void gather_bmesh_positions(const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions)
void do_relax_face_sets_brush(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
void calc_brush_strength_factors(const StrokeCache &cache, const Brush &brush, Span< float > distances, MutableSpan< float > factors)
void gather_data_grids(const SubdivCCG &subdiv_ccg, Span< T > src, Span< int > grids, MutableSpan< T > node_data)
void apply_hardness_to_distances(float radius, float hardness, MutableSpan< float > distances)
void filter_distances_with_radius(float radius, Span< float > distances, MutableSpan< float > factors)
OffsetIndices< int > create_node_vert_offsets_bmesh(const Span< bke::pbvh::BMeshNode > nodes, const IndexMask &nodes_mask, Array< int > &node_data)
void filter_region_clip_factors(const SculptSession &ss, Span< float3 > vert_positions, Span< int > verts, 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 orig_position_data_gather_bmesh(const BMLog &bm_log, const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions, MutableSpan< float3 > normals)
void do_topology_relax_brush(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
void scale_factors(MutableSpan< float > factors, float strength)
void clip_and_lock_translations(const Sculpt &sd, const SculptSession &ss, Span< float3 > positions, Span< int > verts, MutableSpan< float3 > translations)
void apply_translations(Span< float3 > translations, Span< int > verts, MutableSpan< float3 > positions)
OrigPositionData orig_position_data_get_mesh(const Object &object, const bke::pbvh::MeshNode &node)
OrigPositionData orig_position_data_get_grids(const Object &object, const bke::pbvh::GridsNode &node)
void calc_front_face(const float3 &view_normal, Span< float3 > normals, MutableSpan< float > factors)
OffsetIndices< int > create_node_vert_offsets(const Span< bke::pbvh::MeshNode > nodes, const IndexMask &nodes_mask, Array< int > &node_data)
void calc_brush_texture_factors(const SculptSession &ss, const Brush &brush, Span< float3 > vert_positions, Span< int > vert_indices, MutableSpan< float > factors)
bool SCULPT_stroke_is_first_brush_step_of_symmetry_pass(const blender::ed::sculpt_paint::StrokeCache &cache)
blender::ed::sculpt_paint::StrokeCache * cache
SculptVertexInfo vertex_info
blender::BitVector boundary
blender::Array< blender::float3 > positions
VArraySpan< bool > hide_poly
VArraySpan< int > face_sets
VArraySpan< bool > hide_vert
std::unique_ptr< auto_mask::Cache > automasking
Vector< float > distances
Vector< float > distances
Vector< float > distances
Vector< Vector< BMVert * > > vert_neighbors
Vector< float > distances
Vector< float > distances
Vector< Vector< SubdivCCGCoord > > vert_neighbors
Vector< float > distances
Vector< Vector< int > > vert_neighbors