164 return primitive_indices;
182 std::vector<CWBVH_Node>
convertToCWBVH(
const std::vector<BVHNode> &bvh2_nodes);
190 BuildNode *left =
nullptr;
191 BuildNode *right =
nullptr;
192 uint32_t first_prim_offset = 0;
193 uint32_t prim_count = 0;
194 uint32_t prim_type = 0;
195 uint32_t split_axis = 0;
199 std::vector<PrimitiveRef> primitive_refs;
200 std::vector<uint32_t> primitive_indices;
201 std::vector<BuildNode *> allocated_nodes;
203 const RayTracingGeometry *geometry =
nullptr;
204 std::vector<uint32_t> type_offsets;
207 static constexpr uint32_t MAX_PRIMS_PER_LEAF = 4;
208 static constexpr uint32_t MAX_DEPTH = 32;
209 static constexpr uint32_t NUM_BINS = 16;
218 AABB computePrimitiveAABB(uint32_t prim_index, uint32_t prim_type)
const;
223 AABB computePatchAABB(uint32_t prim_index)
const;
228 AABB computeTriangleAABB(uint32_t prim_index)
const;
233 AABB computeDiskAABB(uint32_t prim_index)
const;
238 AABB computeTileAABB(uint32_t prim_index)
const;
243 AABB computeVoxelAABB(uint32_t prim_index)
const;
248 AABB computeBBoxAABB(uint32_t prim_index)
const;
273 BuildNode *recursiveBuild(std::vector<PrimitiveRef> &refs, uint32_t start, uint32_t end, uint32_t depth);
286 bool partitionSAH(std::vector<PrimitiveRef> &refs, uint32_t start, uint32_t end,
const AABB &bounds, uint32_t &mid, uint32_t &axis);
291 BuildNode *createLeaf(std::vector<PrimitiveRef> &refs, uint32_t start, uint32_t end);
300 uint32_t flattenTree(BuildNode *node, std::vector<BVHNode> &nodes);
314 BuildNode *reconstructTree(
const std::vector<BVHNode> &bvh2_nodes, uint32_t node_idx = 0);
323 BuildNode *children[8];
325 uint32_t first_prim[8];
326 uint32_t prim_count[8];
327 uint32_t prim_type[8];
330 for (
int i = 0; i < 8; i++) {
331 children[i] =
nullptr;
340 BVH8Node *collapseToBVH8(BuildNode *bvh2_node,
int depth = 0);
347 void assignChildrenToOctants(BVH8Node *node8, std::vector<BuildNode *> &children);
354 void compressNode(
const BVH8Node *src, CWBVH_Node &dst);
362 uint32_t flattenBVH8(BVH8Node *root, std::vector<CWBVH_Node> &cwbvh_nodes);
365 std::vector<BVH8Node *> allocated_bvh8_nodes;