|
virtual const Class * | getClass () const |
| Retrieve this object's class. More...
|
|
|
| ShapeKDTree () |
| Create an empty kd-tree. More...
|
|
void | addShape (const Shape *shape) |
| Add a shape to the kd-tree. More...
|
|
const std::vector< const Shape * > & | getShapes () const |
| Return the list of stored shapes. More...
|
|
SizeType | getPrimitiveCount () const |
| Return the total number of low-level primitives (triangles and other low-level primitives) More...
|
|
const AABB & | getAABB () const |
| Return an axis-aligned bounding box containing all primitives. More...
|
|
void | build () |
| Build the kd-tree (needs to be called before tracing any rays) More...
|
|
|
bool | rayIntersect (const Ray &ray, Intersection &its) const |
| Intersect a ray against all primitives stored in the kd-tree and return detailed intersection information. More...
|
|
bool | rayIntersect (const Ray &ray, Float &t, ConstShapePtr &shape, Normal &n, Point2 &uv) const |
| Intersect a ray against all primitives stored in the kd-tree and return the traveled distance and intersected shape. More...
|
|
bool | rayIntersect (const Ray &ray) const |
| Test a ray for occlusion with respect to all primitives stored in the kd-tree. More...
|
|
void | findCosts (Float &traversalCost, Float &intersectionCost) |
| Empirically find the best traversal and intersection cost values. More...
|
|
| GenericKDTree () |
| Create a new kd-tree instance initialized with the default parameters. More...
|
|
virtual | ~GenericKDTree () |
| Release all memory. More...
|
|
void | setTraversalCost (Float traversalCost) |
| Set the traversal cost used by the tree construction heuristic. More...
|
|
IndexType * | getIndices () const |
| Returns the underlying kd-tree index buffer. More...
|
|
Float | getTraversalCost () const |
| Return the traversal cost used by the tree construction heuristic. More...
|
|
void | setQueryCost (Float queryCost) |
| Set the query cost used by the tree construction heuristic (This is the average cost for testing a contained shape against a kd-tree search query) More...
|
|
Float | getQueryCost () const |
| Return the query cost used by the tree construction heuristic (This is the average cost for testing a contained shape against a kd-tree search query) More...
|
|
void | setEmptySpaceBonus (Float emptySpaceBonus) |
| Set the bonus factor for empty space used by the tree construction heuristic. More...
|
|
Float | getEmptySpaceBonus () const |
| Return the bonus factor for empty space used by the tree construction heuristic. More...
|
|
void | setMaxDepth (SizeType maxDepth) |
| Set the maximum tree depth (0 = use heuristic) More...
|
|
void | setMinMaxBins (SizeType minMaxBins) |
| Set the number of bins used for Min-Max binning. More...
|
|
SizeType | getMinMaxBins () const |
| Return the number of bins used for Min-Max binning. More...
|
|
SizeType | getMaxDepth () const |
| Return maximum tree depth (0 = use heuristic) More...
|
|
void | setClip (bool clip) |
| Specify whether or not to use primitive clipping will be used in the tree construction. More...
|
|
bool | getClip () const |
| Return whether or not to use primitive clipping will be used in the tree construction. More...
|
|
void | setRetract (bool retract) |
| Specify whether or not bad splits can be "retracted". More...
|
|
bool | getRetract () const |
| Return whether or not bad splits can be "retracted". More...
|
|
void | setMaxBadRefines (SizeType maxBadRefines) |
| Set the number of bad refines allowed to happen in succession before a leaf node will be created. More...
|
|
SizeType | getMaxBadRefines () const |
| Return the number of bad refines allowed to happen in succession before a leaf node will be created. More...
|
|
void | setStopPrims (SizeType stopPrims) |
| Set the number of primitives, at which recursion will stop when building the tree. More...
|
|
SizeType | getStopPrims () const |
| Return the number of primitives, at which recursion will stop when building the tree. More...
|
|
void | setParallelBuild (bool parallel) |
| Specify whether or not tree construction should run in parallel. More...
|
|
bool | getParallelBuild () const |
| Return whether or not tree construction will run in parallel. More...
|
|
void | setExactPrimitiveThreshold (SizeType exactPrimThreshold) |
| Specify the number of primitives, at which the builder will switch from (approximate) Min-Max binning to the accurate O(n log n) optimization method. More...
|
|
SizeType | getExactPrimitiveThreshold () const |
| Return the number of primitives, at which the builder will switch from (approximate) Min-Max binning to the accurate O(n log n) optimization method. More...
|
|
| BOOST_STATIC_ASSERT (sizeof(KDNode)==8) |
|
ELogLevel | getLogLevel () const |
| Return the log level of kd-tree status messages. More...
|
|
void | setLogLevel (ELogLevel level) |
| Return the log level of kd-tree status messages. More...
|
|
const KDNode * | getRoot () const |
| Return the root node of the kd-tree. More...
|
|
bool | isBuilt () const |
| Return whether or not the kd-tree has been built. More...
|
|
const AABB & | getAABB () const |
| Return a (slightly enlarged) axis-aligned bounding box containing all primitives. More...
|
|
const AABB & | getTightAABB () const |
| Return a tight axis-aligned bounding box containing all primitives. More...
|
|
| Object () |
| Construct a new object. More...
|
|
int | getRefCount () const |
| Return the current reference count. More...
|
|
void | incRef () const |
| Increase the reference count of the object by one. More...
|
|
void | decRef (bool autoDeallocate=true) const |
| Decrease the reference count of the object and possibly deallocate it. More...
|
|
virtual std::string | toString () const |
| Return a human-readable string representation of the object's contents. More...
|
|
|
FINLINE IndexType | findShape (IndexType &idx) const |
| Return the shape index corresponding to a primitive index seen by the generic kd-tree implementation. More...
|
|
FINLINE AABB | getAABB (IndexType idx) const |
| Return the axis-aligned bounding box of a certain primitive. More...
|
|
FINLINE AABB | getClippedAABB (IndexType idx, const AABB &aabb) const |
| Return the AABB of a primitive when clipped to another AABB. More...
|
|
FINLINE bool | intersect (const Ray &ray, IndexType idx, Float mint, Float maxt, Float &t, void *temp) const |
|
FINLINE bool | intersect (const Ray &ray, IndexType idx, Float mint, Float maxt) const |
|
template<bool BarycentricPos> |
FINLINE void | fillIntersectionRecord (const Ray &ray, const void *temp, Intersection &its) const |
| After having found a unique intersection, fill a proper record using the temporary information collected in intersect() More...
|
|
bool | rayIntersect (const Ray &ray, Float _mint, Float _maxt) const |
| Plain shadow ray query (used by the 'instance' plugin) More...
|
|
bool | rayIntersect (const Ray &ray, Float _mint, Float _maxt, Float &t, void *temp) const |
| Plain intersection query (used by the 'instance' plugin) More...
|
|
virtual | ~ShapeKDTree () |
| Virtual destructor. More...
|
|
void | buildInternal () |
|
Derived * | cast () |
| Cast to the derived class. More...
|
|
const Derived * | cast () const |
| Cast to the derived class (const version) More...
|
|
template<bool shadowRay> |
FINLINE bool | rayIntersectHavran (const Ray &ray, Float mint, Float maxt, Float &t, void *temp) const |
| Ray tracing kd-tree traversal loop (Havran variant) More...
|
|
FINLINE RayStatistics | rayIntersectHavranCollectStatistics (const Ray &ray, Float mint, Float maxt, Float &t, void *temp) const |
| Internal kd-tree traversal implementation (Havran variant) More...
|
|
template<bool shadowRay> |
FINLINE bool | rayIntersectPBRT (const Ray &ray, Float mint_, Float maxt_, Float &t, void *temp) const |
| Ray tracing kd-tree traversal loop (PBRT variant) More...
|
|
void | buildInternal () |
| Build a KD-tree over the supplied geometry. More...
|
|
| BOOST_STATIC_ASSERT (sizeof(EdgeEvent)==12) |
|
Derived * | cast () |
| Cast to the derived class. More...
|
|
const Derived * | cast () const |
| Cast to the derived class (const version) More...
|
|
EventList | createEventList (OrderedChunkAllocator &alloc, const AABB &nodeAABB, IndexType *prims, SizeType primCount) |
| Create an edge event list for a given list of primitives. More...
|
|
void | createLeaf (BuildContext &ctx, KDNode *node, EdgeEvent *eventStart, EdgeEvent *eventEnd, SizeType primCount) |
| Leaf node creation helper function. More...
|
|
void | createLeaf (BuildContext &ctx, KDNode *node, SizeType *indices, SizeType primCount) |
| Leaf node creation helper function. More...
|
|
void | createLeafAfterRetraction (BuildContext &ctx, KDNode *node, SizeType start) |
| Leaf node creation helper function. More...
|
|
Float | transitionToNLogN (BuildContext &ctx, unsigned int depth, KDNode *node, const AABB &nodeAABB, IndexType *indices, SizeType primCount, bool isLeftChild, SizeType badRefines) |
| Implements the transition from min-max-binning to the O(n log n) optimization. More...
|
|
Float | buildTreeMinMax (BuildContext &ctx, unsigned int depth, KDNode *node, const AABB &nodeAABB, const AABB &tightAABB, IndexType *indices, SizeType primCount, bool isLeftChild, SizeType badRefines) |
| Build helper function (min-max binning) More...
|
|
Float | buildTree (BuildContext &ctx, unsigned int depth, KDNode *node, const AABB &nodeAABB, EdgeEvent *eventStart, EdgeEvent *eventEnd, SizeType primCount, bool isLeftChild, SizeType badRefines) |
|
virtual | ~KDTreeBase () |
|
virtual | ~Object () |
| Virtual private deconstructor. (Will only be called by ref) More...
|
|
SAH KD-tree acceleration data structure for fast ray-triangle intersections.
Implements the construction algorithm for 'perfect split' trees as outlined in the paper "On Bulding fast kd-Trees for Ray Tracing, and on doing that in
O(N log N)" by Ingo Wald and Vlastimil Havran. Non-triangle shapes are supported, but most optimizations here target large triangle meshes. For more details regarding the construction algorithm, please refer to the class GenericKDTree.
This class offers a choice of two different triangle intersection algorithms: By default, intersections are computed using the "TriAccel" projection with pre-computation method from Ingo Wald's PhD thesis "Realtime Ray Tracing
and Interactive Global Illumination". This adds an overhead of 48 bytes per triangle.
When compiled with MTS_KD_CONSERVE_MEMORY
, the Moeller-Trumbore intersection test is used instead, which doesn't need any extra storage. However, it also tends to be quite a bit slower.
- See Also
- GenericKDTree