Blender V4.3
sculpt_smooth.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "BLI_generic_span.hh"
12#include "BLI_math_vector.hh"
13#include "BLI_offset_indices.hh"
14#include "BLI_set.hh"
15
16#include "BKE_subdiv_ccg.hh"
17
18struct BMVert;
19struct Object;
20struct SubdivCCG;
21struct SubdivCCGCoord;
22namespace blender::bke {
23enum class AttrDomain : int8_t;
24}
25
27
32void bmesh_four_neighbor_average(float avg[3], const float3 &direction, const BMVert *v);
33
34void neighbor_color_average(OffsetIndices<int> faces,
35 Span<int> corner_verts,
36 GroupedSpan<int> vert_to_face_map,
37 GSpan color_attribute,
38 bke::AttrDomain color_domain,
39 Span<Vector<int>> vert_neighbors,
40 MutableSpan<float4> smooth_colors);
41
42void neighbor_position_average_interior_grids(OffsetIndices<int> faces,
43 Span<int> corner_verts,
44 BitSpan boundary_verts,
45 const SubdivCCG &subdiv_ccg,
46 Span<int> grids,
47 MutableSpan<float3> new_positions);
48
49void neighbor_position_average_bmesh(const Set<BMVert *, 0> &verts,
50 MutableSpan<float3> new_positions);
51void neighbor_position_average_interior_bmesh(const Set<BMVert *, 0> &verts,
52 MutableSpan<float3> new_positions);
53
54template<typename T>
55void neighbor_data_average_mesh(Span<T> src, Span<Vector<int>> vert_neighbors, MutableSpan<T> dst);
56template<typename T>
58 Span<int> verts,
59 Span<Vector<int>> vert_neighbors,
60 MutableSpan<T> dst);
61
62template<typename T>
63void average_data_grids(const SubdivCCG &subdiv_ccg,
64 Span<T> src,
65 Span<int> grids,
66 MutableSpan<T> dst);
67
68template<typename T>
69void average_data_bmesh(Span<T> src, const Set<BMVert *, 0> &verts, MutableSpan<T> dst);
70
71/* Average the data in the argument span across vertex neighbors. */
72void blur_geometry_data_array(const Object &object, int iterations, MutableSpan<float> data);
73
74/* Surface Smooth Brush. */
75
76void surface_smooth_laplacian_step(Span<float3> positions,
77 Span<float3> orig_positions,
78 Span<float3> average_positions,
79 float alpha,
80 MutableSpan<float3> laplacian_disp,
81 MutableSpan<float3> translations);
82void surface_smooth_displace_step(Span<float3> laplacian_disp,
83 Span<float3> average_laplacian_disp,
84 float beta,
85 MutableSpan<float3> translations);
86
87void calc_relaxed_translations_faces(Span<float3> vert_positions,
88 Span<float3> vert_normals,
89 OffsetIndices<int> faces,
90 Span<int> corner_verts,
91 GroupedSpan<int> vert_to_face_map,
92 BitSpan boundary_verts,
93 Span<int> face_sets,
94 Span<bool> hide_poly,
95 bool filter_boundary_face_sets,
96 Span<int> verts,
97 Span<float> factors,
98 Vector<Vector<int>> &neighbors,
99 MutableSpan<float3> translations);
100void calc_relaxed_translations_grids(const SubdivCCG &subdiv_ccg,
101 OffsetIndices<int> faces,
102 Span<int> corner_verts,
103 Span<int> face_sets,
104 GroupedSpan<int> vert_to_face_map,
105 BitSpan boundary_verts,
106 Span<int> grids,
107 bool filter_boundary_face_sets,
108 Span<float> factors,
109 Vector<Vector<SubdivCCGCoord>> &neighbors,
110 MutableSpan<float3> translations);
111void calc_relaxed_translations_bmesh(const Set<BMVert *, 0> &verts,
112 Span<float3> positions,
113 const int face_set_offset,
114 bool filter_boundary_face_sets,
115 Span<float> factors,
116 Vector<Vector<BMVert *>> &neighbors,
117 MutableSpan<float3> translations);
118
119} // namespace blender::ed::sculpt_paint::smooth
ATTR_WARN_UNUSED_RESULT const BMVert * v
static float verts[][3]
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 average_data_bmesh(const Span< T > src, const Set< BMVert *, 0 > &verts, const MutableSpan< T > dst)
void neighbor_position_average_interior_grids(const OffsetIndices< int > faces, const Span< int > corner_verts, const BitSpan boundary_verts, const SubdivCCG &subdiv_ccg, const Span< int > grids, const MutableSpan< float3 > new_positions)
void neighbor_data_average_mesh_check_loose(const Span< T > src, const Span< int > verts, const Span< Vector< int > > vert_neighbors, const MutableSpan< T > dst)
void neighbor_position_average_interior_bmesh(const Set< BMVert *, 0 > &verts, const MutableSpan< float3 > new_positions)
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)
static float3 average_positions(const CCGKey &key, const Span< float3 > positions, const Span< SubdivCCGCoord > coords)
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 surface_smooth_laplacian_step(const Span< float3 > positions, const Span< float3 > orig_positions, const Span< float3 > average_positions, const float alpha, MutableSpan< float3 > laplacian_disp, MutableSpan< float3 > translations)
void surface_smooth_displace_step(const Span< float3 > laplacian_disp, const Span< float3 > average_laplacian_disp, const float beta, const MutableSpan< float3 > translations)
void neighbor_color_average(const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face_map, const GSpan color_attribute, const bke::AttrDomain color_domain, const Span< Vector< int > > vert_neighbors, const MutableSpan< float4 > smooth_colors)
void bmesh_four_neighbor_average(float avg[3], const float3 &direction, const BMVert *v)
void neighbor_data_average_mesh(const Span< T > src, const Span< Vector< int > > vert_neighbors, const MutableSpan< T > dst)
void average_data_grids(const SubdivCCG &subdiv_ccg, const Span< T > src, const Span< int > grids, const MutableSpan< T > dst)
void blur_geometry_data_array(const Object &object, const int iterations, const MutableSpan< float > data)
void neighbor_position_average_bmesh(const Set< BMVert *, 0 > &verts, const MutableSpan< float3 > new_positions)
signed char int8_t
Definition stdint.h:75
ccl_device_inline float beta(float x, float y)
Definition util/math.h:833