55 position_data.deform(translations,
verts);
92 if (stroke_iteration % 3 == 0) {
93 return {strength, strength, strength, strength};
99 const float modified_strength = std::min(strength * 1.5f, 1.0f);
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)
167 nodes, node_mask, node_offset_data);
201 factors.
as_span().slice(node_vert_offsets[
pos]),
224 const float strength,
225 const bool relax_face_sets,
275 const float strength,
276 const bool relax_face_sets)
295 key,
nodes, node_mask, node_offset_data);
329 factors.
as_span().slice(node_vert_offsets[
pos]),
348 const int face_set_offset,
350 const float strength,
351 const bool relax_face_sets,
382 face_set_offset, relax_face_sets,
verts, factors);
390 const float strength,
391 const bool relax_face_sets)
397 nodes, node_mask, node_offset_data);
400 &
object.sculpt->bm->pdata,
CD_PROP_INT32,
".sculpt_face_set");
427 factors.
as_span().slice(node_vert_offsets[
pos]),
436 current_positions.
as_span().slice(node_vert_offsets[
pos]));
450 const float strength,
489 const float strength)
504 nodes, node_mask, node_offset_data);
534 factors.
as_span().slice(node_vert_offsets[
pos]),
552 const float strength,
596 const float strength)
601 SubdivCCG &subdiv_ccg = *
object.sculpt->subdiv_ccg;
615 key,
nodes, node_mask, node_offset_data);
645 factors.
as_span().slice(node_vert_offsets[
pos]),
665 const float strength,
706 const float strength)
711 &
object.sculpt->bm->pdata,
CD_PROP_INT32,
".sculpt_face_set");
715 nodes, node_mask, node_offset_data);
741 factors.
as_span().slice(node_vert_offsets[
pos]),
750 current_positions.
as_span().slice(node_vert_offsets[
pos]));
776 for (
const float strength : strengths) {
780 depsgraph, sd, brush,
object, node_mask, strength * strength, relax_face_sets);
784 depsgraph, sd, brush,
object, node_mask, strength * strength, relax_face_sets);
788 depsgraph, sd, brush,
object, node_mask, strength * strength, relax_face_sets);
810 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)
BPy_StructRNA * depsgraph
void resize(const int64_t new_size)
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
constexpr int64_t size() const
GAttributeReader lookup(const StringRef attribute_id) const
void tag_positions_changed(const IndexMask &node_mask)
Span< NodeT > nodes() const
void flush_bounds_to_parents()
void foreach_index(Fn &&fn) const
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 calc_vert_factors(const Depsgraph &depsgraph, const Object &object, const Cache &automasking, const bke::pbvh::MeshNode &node, Span< int > verts, MutableSpan< float > factors)
void calc_grids_factors(const Depsgraph &depsgraph, const Object &object, const Cache &automasking, const bke::pbvh::GridsNode &node, Span< int > grids, 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)
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 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)
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 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 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_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 apply_positions_grids(const Sculpt &sd, const Span< int > grids, Object &object, const Span< float3 > positions, const MutableSpan< float3 > translations)
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 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 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 std::array< float, 4 > iteration_strengths(const float strength, const int stroke_iteration)
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_grids(const Depsgraph &depsgraph, const Sculpt &sd, const Brush &brush, Object &object, const IndexMask &node_mask, const float strength)
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_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 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)
void do_topology_relax_brush(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
void do_relax_face_sets_brush(const Depsgraph &depsgraph, const Sculpt &sd, Object &object, const IndexMask &node_mask)
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)
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, 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, 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, const MutableSpan< float3 > translations)
void gather_bmesh_positions(const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions)
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)
void filter_region_clip_factors(const SculptSession &ss, Span< float3 > vert_positions, Span< int > verts, MutableSpan< float > factors)
void orig_position_data_gather_bmesh(const BMLog &bm_log, const Set< BMVert *, 0 > &verts, MutableSpan< float3 > positions, MutableSpan< float3 > normals)
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 calc_brush_distances(const SculptSession &ss, Span< float3 > vert_positions, Span< int > vert, eBrushFalloffShape falloff_shape, MutableSpan< float > r_distances)
OffsetIndices< int > create_node_vert_offsets(Span< bke::pbvh::MeshNode > nodes, const IndexMask &node_mask, Array< int > &node_data)
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)
void calc_brush_texture_factors(const SculptSession &ss, const Brush &brush, Span< float3 > vert_positions, Span< int > vert, MutableSpan< float > factors)
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_bmesh(Span< bke::pbvh::BMeshNode > nodes, const IndexMask &node_mask, Array< int > &node_data)
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
Span< int > grids() const
Span< int > verts() const
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< float > distances
Vector< float > distances
Vector< float > distances