82 float approximate_density,
105 const float2 &sample_pos_re,
106 float sample_radius_re,
108 bool front_face_only,
117 const int3 &corner_tri,
122 const int3 &corner_tri,
123 const Span<T> corner_attribute)
126 corner_attribute[corner_tri[0]],
127 corner_attribute[corner_tri[1]],
128 corner_attribute[corner_tri[2]]);
133 const int3 &corner_tri,
137 corner_attribute[corner_tri[0]],
138 corner_attribute[corner_tri[1]],
139 corner_attribute[corner_tri[2]]);
176 mf::Signature signature_;
180 std::optional<bke::MeshFieldContext> source_context_;
181 std::unique_ptr<fn::FieldEvaluator> source_evaluator_;
void call(const IndexMask &mask, mf::Params params, mf::Context context) const override
BaryWeightFromPositionFn(GeometrySet geometry)
void call(const IndexMask &mask, mf::Params params, mf::Context context) const override
BaryWeightSampleFn(GeometrySet geometry, fn::GField src_field)
void call(const IndexMask &mask, mf::Params params, mf::Context context) const override
CornerBaryWeightFromPositionFn(GeometrySet geometry)
ccl_device_inline float2 mask(const MaskType mask, const float2 a)
T mix3(const float3 &weights, const T &v0, const T &v1, const T &v2)
int sample_surface_points_projected(RandomNumberGenerator &rng, const Mesh &mesh, bke::BVHTreeFromMesh &mesh_bvhtree, const float2 &sample_pos_re, float sample_radius_re, FunctionRef< void(const float2 &pos_re, float3 &r_start, float3 &r_end)> region_position_to_ray, bool front_face_only, int tries_num, int max_points, Vector< float3 > &r_bary_coords, Vector< int > &r_tri_indices, Vector< float3 > &r_positions)
int sample_surface_points_spherical(RandomNumberGenerator &rng, const Mesh &mesh, Span< int > tris_to_sample, const float3 &sample_pos, float sample_radius, float approximate_density, Vector< float3 > &r_bary_coords, Vector< int > &r_tri_indices, Vector< float3 > &r_positions)
void sample_corner_normals(Span< int3 > corner_tris, Span< int > tri_indices, Span< float3 > bary_coords, Span< float3 > src, const IndexMask &mask, MutableSpan< float3 > dst)
void sample_point_attribute(Span< int > corner_verts, Span< int3 > corner_tris, Span< int > tri_indices, Span< float3 > bary_coords, const GVArray &src, const IndexMask &mask, GMutableSpan dst)
float3 compute_bary_coord_in_triangle(Span< float3 > vert_positions, Span< int > corner_verts, const int3 &corner_tri, const float3 &position)
void sample_corner_attribute(Span< int3 > corner_tris, Span< int > tri_indices, Span< float3 > bary_coords, const GVArray &src, const IndexMask &mask, GMutableSpan dst)
void sample_face_attribute(Span< int > corner_tri_faces, Span< int > tri_indices, const GVArray &src, const IndexMask &mask, GMutableSpan dst)
T sample_corner_attribute_with_bary_coords(const float3 &bary_weights, const int3 &corner_tri, const Span< T > corner_attribute)
void sample_point_normals(Span< int > corner_verts, Span< int3 > corner_tris, Span< int > tri_indices, Span< float3 > bary_coords, Span< float3 > src, IndexMask mask, MutableSpan< float3 > dst)
VecBase< float, 2 > float2
VecBase< int32_t, 3 > int3
VecBase< float, 3 > float3