|
| 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