Source/Sculpt/PBVH
< Source
Sculpt mode uses a coarse BVH tree, PBVH
. The leaves are fairly large compared to most BVHs; this is because the leaves are used to split the GPU mesh.
Data modes
PBVH has three different modes, each of which has a different data backing:
- PBVH_FACES - Normal Mesh data.
- PBVH_BMESH - Dynamic topology, uses BMesh.
- PBVH_GRIDS - Multiresolution data.
You get can the mode with BKE_pbvh_type
.
Vertex/Face references
The PBVH API stores vertex references in a special structure, PBVHVertRef
. It contains a single intptr_t
value, the meaning of which varies by PBVH data mode. PBVH_BMESH
stores pointers in the value, while the other two store indices. The null reference is PBVH_REF_NONE.
Vertex Iteration
You can iterate over the vertices in a PBVHNode
. There are two modes for this, PBVH_ITER_UNIQUE
and PBVH_ITER_ALL.
PBVH_ITER_UNIQUE
iterates over the vertices uniquely assigned to this node, while PBVH_ITER_ALL
iterates over the vertices that belong to this node's faces.
PBVHVertIter vd; BKE_pbvh_vertex_iter_begin(pbvh, node, vd, PBVH_ITER_UNIQUE) { //PBVHVertIter has various bits of data: //vd.co - position //vd.no - normal //vd.mask - pointer to mask //vd.color - active color attribute data, if it exists } BKE_pbvh_vertex_iter_end;