From 56e8428cb748de2f9e55c51a7732d495b2578399 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 08:14:25 +0100 Subject: [PATCH 01/15] Start linear work --- Source/EBGeometry_BVH.hpp | 74 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index 44f2010f..034b5a62 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -67,7 +67,7 @@ namespace BVH { /*! @brief Enum for determining if a BVH node is a leaf or a regular node (only leaf nodes contain data) */ - enum class NodeType { + enum class NodeType : bool { Regular, Leaf, }; @@ -412,6 +412,78 @@ namespace BVH { inline void pruneUnordered2(T& a_minDist2, std::shared_ptr& a_closest, const Vec3& a_point) const noexcept; }; + + /*! + @brief Node type for linearized (flattened) BVH. This will be constructed from the other (conventional) BVH type. + @details T is the precision for Vec3, P is the primitive type you want to enclose, BV is the bounding volume you use for it. + @note P MUST supply function signedDistance(...) and unsignedDistance2(Vec3). BV must supply a + function getDistance (had this been C++20, we would have use concepts to enforce this). + */ + template + class LinearNodeT { + public: + + /*! + @brief Alias for cutting down on typing. + */ + using PrimitiveList = PrimitiveListT

; + + /*! + @brief Alias for cutting down on typing + */ + using Vec3 = Vec3T; + + /*! + @brief Constructor. + */ + LinearNodeT(); + + /*! + @brief Destructor. + */ + virtual ~LinearNodeT(); + + /*! + @brief Get the primitives offset + */ + inline + const unsigned long& getPrimitivesOffset() const noexcept; + + /*! + @brief Get the number of primitives. + */ + inline + const unsigned long& getNumPrimitives() const noexcept; + + /*! + @brief Get the bounding volume + */ + inline + const BV& getBoundingVolume() const noexcept; + + protected: + + /*! + @brief Bounding volume. An AABB box will be 6*T big => 24/48 bytes. + */ + BV m_bv; + + /*! + @brief We assume that, outside of this class, is a data structure std::vector >that holds all primitives. This member + is the starting index in that vector. + */ + unsigned long m_primitivesOffset; // 8 bytes + + /*! + @ Number of primitives. m_numPrimitives = 0 is an interior node. Other it's a leaf node. + */ + unsigned int m_numPrimitives; // 8 bytes + + /*! + @brief Offset to child nodes. + */ + std::array m_childrenOffsets; // (K-1)*8 bytes. + }; } #include "EBGeometry_NamespaceFooter.hpp" From ade09d8c238673eb7f88a48109068da9e4f77bec Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 12:18:41 +0100 Subject: [PATCH 02/15] WIP --- Examples/Basic/main.cpp | 6 +- Examples/Union/README.md | 2 +- Source/EBGeometry_BVH.hpp | 105 ++++++++++++++++++++++++++------ Source/EBGeometry_BVHImplem.hpp | 59 ++++++++++++++++++ 4 files changed, 150 insertions(+), 22 deletions(-) diff --git a/Examples/Basic/main.cpp b/Examples/Basic/main.cpp index 29e91005..b8f45851 100644 --- a/Examples/Basic/main.cpp +++ b/Examples/Basic/main.cpp @@ -60,13 +60,15 @@ int main(int argc, char *argv[]) { EBGeometry::Dcel::spatialSplitPartitioner, EBGeometry::Dcel::defaultStopFunction); + // root->buildCompactTree(); + auto fast = std::make_shared(root, false); // Query the distance to a point. - std::cout << "Distance to point using direct method = " << (*slow)(Vec3::one()) << std::endl; - std::cout << "Distance to point using bounding volumes = " << (*fast)(Vec3::one()) << std::endl; + std::cout << "Distance to point using direct method = " << slow->signedDistance(Vec3::one()) << std::endl; + std::cout << "Distance to point using bounding volumes = " << fast->signedDistance(Vec3::one()) << std::endl; return 0; } diff --git a/Examples/Union/README.md b/Examples/Union/README.md index c4778805..9b95f297 100644 --- a/Examples/Union/README.md +++ b/Examples/Union/README.md @@ -6,7 +6,7 @@ Two unions are defined: : * A union that uses BVHs for finding the closest object(s). The scene is defined as an array of analytic spheres bound by axis-aligned bounding boxes. -To shift the computational load to the signed distance function itself, computing the distance function has been given a delay of about 1 millisecond. +To shift the computational load to the signed distance function itself, computing the distance function has been given a delay of about 1 microsecond. Compiling --------- diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index 034b5a62..107e5841 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -259,6 +259,48 @@ namespace BVH { inline T pruneUnordered2(const Vec3& a_point) const noexcept; + /*! + @brief Build compact tree representation. + */ +#if 0 + void buildCompactTree() const noexcept; + + std::vector > sortedPrimitives; + std::vector > linearNodes; + + int offset = 0; + this->buildCompactTree2(linearNodes, sortedPrimitives, offset); + + std::cout << "total number of primitives = " << sortedPrimitives.size() << std::endl;; + } + + inline void buildCompactTree2(std::vector >& a_linearNodes, + std::vector >& a_sortedPrimitives); + + switch(m_nodeType){ + case NodeType::Leaf: + { + a_sortedPrimitives.insert(a_sortedPrimitives.end(), m_primitives.begin(), m_primitives.end()); + + + a_linearNodes.emplace_back(std::make_shared >()); + + a_numPrims.emplace_back(m_primitives.size()); + + break; + } + case NodeType::Regular: + { + for (const auto& child : m_children){ + child->buildCompactTree2(a_sortedPrimitives, a_numPrims); + } + + break; + } + } + } +#endif + protected: /*! @@ -417,72 +459,97 @@ namespace BVH { @brief Node type for linearized (flattened) BVH. This will be constructed from the other (conventional) BVH type. @details T is the precision for Vec3, P is the primitive type you want to enclose, BV is the bounding volume you use for it. @note P MUST supply function signedDistance(...) and unsignedDistance2(Vec3). BV must supply a - function getDistance (had this been C++20, we would have use concepts to enforce this). + function getDistance (had this been C++20, we would have use concepts to enforce this). Note that LinearNode is the result + of a flattnened BVH hierarchy where nodes are stored with depth-first ordering for improved cache-location in the downward + traversal. */ template class LinearNodeT { public: /*! - @brief Alias for cutting down on typing. + @brief Constructor. */ - using PrimitiveList = PrimitiveListT

; + inline + LinearNodeT(); /*! - @brief Alias for cutting down on typing + @brief Destructor. */ - using Vec3 = Vec3T; + inline + virtual ~LinearNodeT(); /*! - @brief Constructor. + @brief Set the bounding volume + @param[in] a_bv Bounding volume for this node. */ - LinearNodeT(); + inline + void setBoundingVolume(const BV& a_boundingVolume) noexcept; /*! - @brief Destructor. + @brief Set the child offsets. + @param[in] a_childOffset Offset in node array. + @param[in] a_whichChild Child index in m_childrenOffsets. Must be [0,K-1] */ - virtual ~LinearNodeT(); + inline + void setChildOffset(const unsigned long a_childOffset, const int a_whichChild) noexcept; + + /*! + @brief Set number of primitives. + @param[in] a_numPrimitives Number of primitives. + */ + inline + void setNumPrimitives(const int a_numPrimitives) noexcept; + + /*! + @brief Get the node bounding volume. + return m_boundingVolume + */ + inline + const BV& getBoundingVolume() const noexcept; /*! @brief Get the primitives offset + @return Returns m_primitivesOffset */ inline const unsigned long& getPrimitivesOffset() const noexcept; /*! @brief Get the number of primitives. + @return Returns m_numPrimitives */ inline const unsigned long& getNumPrimitives() const noexcept; /*! - @brief Get the bounding volume + @brief Get the child offsets + @return Returns m_childOffsets */ inline - const BV& getBoundingVolume() const noexcept; + const std::array& getChildOffsets() const noexcept; protected: /*! - @brief Bounding volume. An AABB box will be 6*T big => 24/48 bytes. + @brief Bounding volume. */ - BV m_bv; + BV m_boundingVolume; /*! - @brief We assume that, outside of this class, is a data structure std::vector >that holds all primitives. This member - is the starting index in that vector. + @brief Offset into primitives array */ - unsigned long m_primitivesOffset; // 8 bytes + unsigned long m_primitivesOffset; /*! - @ Number of primitives. m_numPrimitives = 0 is an interior node. Other it's a leaf node. + @brief Number of primitives */ - unsigned int m_numPrimitives; // 8 bytes + int m_numPrimitives; /*! @brief Offset to child nodes. */ - std::array m_childrenOffsets; // (K-1)*8 bytes. + std::array m_childOffsets; }; } diff --git a/Source/EBGeometry_BVHImplem.hpp b/Source/EBGeometry_BVHImplem.hpp index 332b88da..bd41d199 100644 --- a/Source/EBGeometry_BVHImplem.hpp +++ b/Source/EBGeometry_BVHImplem.hpp @@ -489,6 +489,65 @@ namespace BVH { } } } + + template + inline + LinearNodeT::LinearNodeT(){ + m_boundingVolume = BV(); + m_primitivesOffset = 0UL; + m_numPrimitives = 0; + + for (auto& offset : m_childOffsets){ + offset = 0UL; + } + } + + template + inline + LinearNodeT::~LinearNodeT(){ + } + + template + inline + void LinearNodeT::setBoundingVolume(const BV& a_boundingVolume) noexcept { + m_boundingVolume = a_boundingVolume; + } + + template + inline + void LinearNodeT::setChildOffset(const unsigned long a_childOffset, const int a_whichChild) noexcept { + m_childOffsets[a_whichChild] = a_childOffset; + } + + template + inline + void LinearNodeT::setNumPrimitives(const int a_numPrimitives) noexcept { + m_numPrimitives = a_numPrimitives; + } + + template + inline + const BV& LinearNodeT::getBoundingVolume() const noexcept { + return m_boundingVolume; + } + + template + inline + const unsigned long& LinearNodeT::getPrimitivesOffset() const noexcept { + return m_primitivesOffset; + } + + template + inline + const unsigned long& LinearNodeT::getNumPrimitives() const noexcept { + return m_numPrimitives; + } + + template + inline + const std::array& LinearNodeT::getChildOffsets() const noexcept { + return m_childOffsets; + } } #include "EBGeometry_NamespaceFooter.hpp" From fc349939eeecb17ebec8caf7e685c20b4b666d46 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 14:37:45 +0100 Subject: [PATCH 03/15] Think flattening function is correct -- need to expose sorted vector and purge the old BVH when function is called --- Examples/Basic/main.cpp | 3 +- Source/EBGeometry_BVH.hpp | 75 +++++++++++-------------- Source/EBGeometry_BVHImplem.hpp | 82 ++++++++++++++++++++++++++-- Source/EBGeometry_DcelMeshImplem.hpp | 2 +- 4 files changed, 111 insertions(+), 51 deletions(-) diff --git a/Examples/Basic/main.cpp b/Examples/Basic/main.cpp index b8f45851..47243896 100644 --- a/Examples/Basic/main.cpp +++ b/Examples/Basic/main.cpp @@ -37,7 +37,6 @@ int main(int argc, char *argv[]) { using BV = BoundingVolumes::AABBT; using Vec3 = Vec3T; using Face = FaceT; - using SDF = SignedDistanceFunction; using slowSDF = SignedDistanceDcel; using fastSDF = SignedDistanceBVH; @@ -60,7 +59,7 @@ int main(int argc, char *argv[]) { EBGeometry::Dcel::spatialSplitPartitioner, EBGeometry::Dcel::defaultStopFunction); - // root->buildCompactTree(); + auto linearNode = root->flattenTree(); auto fast = std::make_shared(root, false); diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index 107e5841..aabc3f94 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -34,6 +34,12 @@ namespace BVH { template class NodeT; + /*! + @brief Forward declare linear node class + */ + template + class LinearNodeT; + /*! @brief Alias to cut down on typing. */ @@ -260,46 +266,11 @@ namespace BVH { T pruneUnordered2(const Vec3& a_point) const noexcept; /*! - @brief Build compact tree representation. + @brief Flatten everything beneath this node into a depth-first sorted BVH hierarchy. + @details This will allocate a linear node */ -#if 0 - void buildCompactTree() const noexcept; - - std::vector > sortedPrimitives; - std::vector > linearNodes; - - int offset = 0; - this->buildCompactTree2(linearNodes, sortedPrimitives, offset); - - std::cout << "total number of primitives = " << sortedPrimitives.size() << std::endl;; - } - - inline void buildCompactTree2(std::vector >& a_linearNodes, - std::vector >& a_sortedPrimitives); - - switch(m_nodeType){ - case NodeType::Leaf: - { - a_sortedPrimitives.insert(a_sortedPrimitives.end(), m_primitives.begin(), m_primitives.end()); - - - a_linearNodes.emplace_back(std::make_shared >()); - - a_numPrims.emplace_back(m_primitives.size()); - - break; - } - case NodeType::Regular: - { - for (const auto& child : m_children){ - child->buildCompactTree2(a_sortedPrimitives, a_numPrims); - } - - break; - } - } - } -#endif + inline + LinearNodeT flattenTree(); protected: @@ -453,6 +424,16 @@ namespace BVH { */ inline void pruneUnordered2(T& a_minDist2, std::shared_ptr& a_closest, const Vec3& a_point) const noexcept; + + /*! + @brief Internal flattening method + */ + inline + unsigned long flattenTree(std::vector >& a_linearNodes, + std::vector >& a_sortedPrimitives, + unsigned long& a_offset) const noexcept; + + }; /*! @@ -487,12 +468,10 @@ namespace BVH { void setBoundingVolume(const BV& a_boundingVolume) noexcept; /*! - @brief Set the child offsets. - @param[in] a_childOffset Offset in node array. - @param[in] a_whichChild Child index in m_childrenOffsets. Must be [0,K-1] + @brief Set the offset into the primitives array. */ inline - void setChildOffset(const unsigned long a_childOffset, const int a_whichChild) noexcept; + void setPrimitivesOffset(const unsigned long a_primitivesOffset) noexcept; /*! @brief Set number of primitives. @@ -501,6 +480,14 @@ namespace BVH { inline void setNumPrimitives(const int a_numPrimitives) noexcept; + /*! + @brief Set the child offsets. + @param[in] a_childOffset Offset in node array. + @param[in] a_whichChild Child index in m_childrenOffsets. Must be [0,K-1] + */ + inline + void setChildOffset(const unsigned long a_childOffset, const int a_whichChild) noexcept; + /*! @brief Get the node bounding volume. return m_boundingVolume @@ -549,7 +536,7 @@ namespace BVH { /*! @brief Offset to child nodes. */ - std::array m_childOffsets; + std::array m_childOffsets; }; } diff --git a/Source/EBGeometry_BVHImplem.hpp b/Source/EBGeometry_BVHImplem.hpp index bd41d199..658d40b0 100644 --- a/Source/EBGeometry_BVHImplem.hpp +++ b/Source/EBGeometry_BVHImplem.hpp @@ -492,7 +492,75 @@ namespace BVH { template inline - LinearNodeT::LinearNodeT(){ + LinearNodeT NodeT::flattenTree() { + + // Create a list of sorted primitives and nodes. + std::vector > sortedPrimitives; + std::vector > linearNodes; + + // Track the offset into the linearized node array. + unsigned long offset = 0; + + // Flatten recursively. + this->flattenTree(linearNodes, sortedPrimitives, offset); + + // Return the root node. + return linearNodes.front(); + } + + template + inline + unsigned long NodeT::flattenTree(std::vector >& a_linearNodes, + std::vector >& a_sortedPrimitives, + unsigned long& a_offset) const noexcept { + + // TLDR: This is the main routine for flattening the hierarchy beneath the current node. When this is called we insert + // this node into a_linearNodes and associate the array offsets so that we can find the children in the linearized array. + + // Current node we are dealing with. + const auto curNode = a_offset; + + // Insert a new node corresponding to this node and provide it with the current bounding volume. + a_linearNodes.emplace_back(LinearNodeT()); + a_linearNodes[curNode].setBoundingVolume(m_boundingVolume); + + a_offset++; + + switch(m_nodeType){ + case NodeType::Leaf: + { + // Insert primitives and offsets. + a_linearNodes[curNode].setNumPrimitives (m_primitives. size()); + a_linearNodes[curNode].setPrimitivesOffset(a_sortedPrimitives.size()); + + a_sortedPrimitives.insert(a_sortedPrimitives.end(), m_primitives.begin(), m_primitives.end()); + + break; + } + case NodeType::Regular: + { + a_linearNodes[curNode].setNumPrimitives (0 ); + a_linearNodes[curNode].setPrimitivesOffset(0UL); + + // Go through the children nodes and + for (int k = 0; k < K; k++){ + const int offset = m_children[k]->flattenTree(a_linearNodes, a_sortedPrimitives, a_offset); + + a_linearNodes[curNode].setChildOffset(offset, k); + } + + break; + } + } + + return curNode; + } + + template + inline + LinearNodeT::LinearNodeT() { + + // Initialize everything. m_boundingVolume = BV(); m_primitivesOffset = 0UL; m_numPrimitives = 0; @@ -504,7 +572,7 @@ namespace BVH { template inline - LinearNodeT::~LinearNodeT(){ + LinearNodeT::~LinearNodeT() { } template @@ -515,8 +583,8 @@ namespace BVH { template inline - void LinearNodeT::setChildOffset(const unsigned long a_childOffset, const int a_whichChild) noexcept { - m_childOffsets[a_whichChild] = a_childOffset; + void LinearNodeT::setPrimitivesOffset(const unsigned long a_primitivesOffset) noexcept { + m_primitivesOffset = a_primitivesOffset; } template @@ -525,6 +593,12 @@ namespace BVH { m_numPrimitives = a_numPrimitives; } + template + inline + void LinearNodeT::setChildOffset(const unsigned long a_childOffset, const int a_whichChild) noexcept { + m_childOffsets[a_whichChild] = a_childOffset; + } + template inline const BV& LinearNodeT::getBoundingVolume() const noexcept { diff --git a/Source/EBGeometry_DcelMeshImplem.hpp b/Source/EBGeometry_DcelMeshImplem.hpp index ddf95f38..efcc7b48 100644 --- a/Source/EBGeometry_DcelMeshImplem.hpp +++ b/Source/EBGeometry_DcelMeshImplem.hpp @@ -289,7 +289,7 @@ namespace Dcel { template inline T MeshT::signedDistance(const Vec3& a_point, SearchAlgorithm a_algorithm) const noexcept { - T minDist; + T minDist = std::numeric_limits::max(); switch(a_algorithm){ case SearchAlgorithm::Direct: From b2761cc1ee1892ec735bb2e5e9494aeb3119a9e7 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 15:55:03 +0100 Subject: [PATCH 04/15] Linearized version producing correct result. Now for the traversal algorithm... --- Examples/Basic/main.cpp | 3 +- Source/EBGeometry_BVH.hpp | 106 +++++++++++++++++++++++++++++++- Source/EBGeometry_BVHImplem.hpp | 71 ++++++++++++++++++++- 3 files changed, 174 insertions(+), 6 deletions(-) diff --git a/Examples/Basic/main.cpp b/Examples/Basic/main.cpp index 47243896..50a07552 100644 --- a/Examples/Basic/main.cpp +++ b/Examples/Basic/main.cpp @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) { EBGeometry::Dcel::spatialSplitPartitioner, EBGeometry::Dcel::defaultStopFunction); - auto linearNode = root->flattenTree(); + auto linearBVH = root->flattenTree(); auto fast = std::make_shared(root, false); @@ -68,6 +68,7 @@ int main(int argc, char *argv[]) { // Query the distance to a point. std::cout << "Distance to point using direct method = " << slow->signedDistance(Vec3::one()) << std::endl; std::cout << "Distance to point using bounding volumes = " << fast->signedDistance(Vec3::one()) << std::endl; + std::cout << "Distance to point using linearized bvh = " << linearBVH.signedDistance(Vec3::one()) << std::endl; return 0; } diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index aabc3f94..506fdf30 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -40,6 +40,12 @@ namespace BVH { template class LinearNodeT; + /*! + @brief Forward declare linear BVH class. + */ + template + class LinearBVH; + /*! @brief Alias to cut down on typing. */ @@ -270,7 +276,7 @@ namespace BVH { @details This will allocate a linear node */ inline - LinearNodeT flattenTree(); + LinearBVH flattenTree(); protected: @@ -448,6 +454,11 @@ namespace BVH { class LinearNodeT { public: + /*! + @brief Alias for cutting down on typing. + */ + using Vec3 = Vec3T; + /*! @brief Constructor. */ @@ -514,7 +525,36 @@ namespace BVH { @return Returns m_childOffsets */ inline - const std::array& getChildOffsets() const noexcept; + const std::array& getChildOffsets() const noexcept; + + /*! + @brief Is leaf or not + */ + inline + bool isLeaf() const noexcept; + + /*! + @brief Get the distance from a 3D point to the bounding volume + @param[in] a_point 3D point + @return Returns distance to bounding volume. A zero distance implies that the input point is inside the bounding volume. + */ + inline + T getDistanceToBoundingVolume(const Vec3& a_point) const noexcept; + + /*! + @brief Get the unsigned square from a 3D point to the bounding volume + @param[in] a_point 3D point + @return Returns squared distance to bounding volume. A zero distance implies that the input point is inside the bounding volume. + */ + inline + T getDistanceToBoundingVolume2(const Vec3& a_point) const noexcept; + + /*! + @brief Compute signed distance to primitives. + @note Only call if this is a leaf node. + */ + inline + T getDistanceToPrimitives(const Vec3& a_point, const std::vector >& a_primitives) const noexcept; protected: @@ -538,6 +578,68 @@ namespace BVH { */ std::array m_childOffsets; }; + + /*! + @brief Linear root node for BVH hierarchy + */ + template + class LinearBVH { + public: + + /*! + @brief Cut down on typing + */ + using Vec3 = Vec3T; + + /*! + @brief Alias for cutting down on typing + */ + using LinearNode = LinearNodeT; + + /*! + @brief List of primitives + */ + using PrimitiveList = std::vector >; + + /*! + @brief Disallowed. Use the full constructor please. + */ + LinearBVH() = delete; + + /*! + @brief Full constructor. Associates the nodes and primitives. + @param[in] a_linearNodes Linearized BVH nodes. + @param[in] a_primitives Primitives. + */ + inline + LinearBVH(const std::vector& a_linearNodes, + const PrimitiveList& a_primitives); + + /*! + @brief Destructor. Does nothing + */ + inline + virtual ~LinearBVH(); + + /*! + @brief Function which computes the signed distance + @param[in] a_point 3D point in space + */ + inline + T signedDistance(const Vec3& a_point) const noexcept; + + protected: + + /*! + @brief List of linearly stored nodes + */ + std::vector > m_linearNodes; + + /*! + @brief Global list of primitives. Note that this is ALL primitives, sorted so that LinearNodeT can interface into it. + */ + PrimitiveList m_primitives; + }; } #include "EBGeometry_NamespaceFooter.hpp" diff --git a/Source/EBGeometry_BVHImplem.hpp b/Source/EBGeometry_BVHImplem.hpp index 658d40b0..820ad2e6 100644 --- a/Source/EBGeometry_BVHImplem.hpp +++ b/Source/EBGeometry_BVHImplem.hpp @@ -492,7 +492,7 @@ namespace BVH { template inline - LinearNodeT NodeT::flattenTree() { + LinearBVH NodeT::flattenTree() { // Create a list of sorted primitives and nodes. std::vector > sortedPrimitives; @@ -505,7 +505,7 @@ namespace BVH { this->flattenTree(linearNodes, sortedPrimitives, offset); // Return the root node. - return linearNodes.front(); + return LinearBVH(linearNodes, sortedPrimitives); } template @@ -621,7 +621,72 @@ namespace BVH { inline const std::array& LinearNodeT::getChildOffsets() const noexcept { return m_childOffsets; - } + } + + template + inline + bool LinearNodeT::isLeaf() const noexcept { + return m_numPrimitives > 0; + } + + template + inline + T LinearNodeT::getDistanceToBoundingVolume(const Vec3& a_point) const noexcept{ + return m_boundingVolume.getDistance(a_point); + } + + template + inline + T LinearNodeT::getDistanceToBoundingVolume2(const Vec3& a_point) const noexcept{ + return m_boundingVolume.getDistance2(a_point); + } + + template + inline + T LinearNodeT::getDistanceToPrimitives(const Vec3T& a_point, const std::vector >& a_primitives) const noexcept { + T minDist = std::numeric_limits::infinity(); + + for (unsigned int i = 0; i < m_numPrimitives; i++){ + const T curDist = a_primitives[m_primitivesOffset + i]->signedDistance(a_point); + + if(std::abs(curDist) < std::abs(minDist)){ + minDist = curDist; + } + } + + return minDist; + } + + template + inline + LinearBVH::LinearBVH(const std::vector& a_linearNodes, + const PrimitiveList& a_primitives) { + m_linearNodes = a_linearNodes; + m_primitives = a_primitives ; + } + + template + inline + LinearBVH::~LinearBVH() { + + } + + template + T LinearBVH::signedDistance(const Vec3& a_point) const noexcept { + T minDist = std::numeric_limits::infinity(); + + for (const auto& node : m_linearNodes) { + if(node.isLeaf()){ + const T curDist = node.getDistanceToPrimitives(a_point, m_primitives); + + if(std::abs(curDist) < std::abs(minDist)) { + minDist = curDist; + } + } + } + + return minDist; + } } #include "EBGeometry_NamespaceFooter.hpp" From 3d0e7602e26f0780dce91a55e60c172816d90de4 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 16:01:10 +0100 Subject: [PATCH 05/15] Update README --- README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index bd10d99f..1b2dc974 100644 --- a/README.md +++ b/README.md @@ -6,20 +6,21 @@ Can be used with embedded-boundary (EB) codes like Chombo or AMReX. The tesselations must consist of planar polygons, but these polygons are not necessarily restricted to triangles. Internally, the surface mesh is stored in a doubly-connected edge list (DCEL), i.e. a half-edge data structure. -On watertight and orientable grids, the distance to any feature (facet, edge, vertex) is well defined, and can naively be computed by computing the distance to every facet. +On watertight and orientable grids, the distance to any feature (facet, edge, vertex) is well defined, and can naively be computed in various ways: -EBGeometry provides bounding volume hierarchies (BVHs) for accelerating the signed distance computation. -In the DCEL context the BVHs are used for bounding the facets on the surface mesh, but there are no fundamental limitations on which objects that can be bounded. -Thus, multiple objects (e.g., surface grids or analytic functions) can also be bound in the BVHs. -Querying the distance to the mesh through the BVH is much faster than the naive approach. -On average, if the mesh consists of N facets then a BVH has O(log(N)) complexity while a direct search has O(N) complexity. +* Directly, by iterating through all facets. +* With conventional bounding volume hierarchies (BVHs). +* With compact (linearized) BVHs. + +The BVHs in EBGeometry are not limited to facets. +By providing a bounding volume constructor, users can also embed entire objects (e.g., analytic functions) in the BVHs. +This permits the construction of multi-object scenes, for example BVHs-of-BVHs type of scenes where multiple DCEL objects are embedded into another BVH layer. Requirements ------------ * A C++ compiler which supports C++14. * EBGeometry takes a watertight and orientable surface as input (only PLY files currently supported). - Although EBGeometry does it's best at processing grids that contain self-intersections, holes, and hanging vertices the signed distance function is not well-defined. Basic usage ----------- From 8e4a7a11744c4d0224c82c2aae1dac7078aac20b Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 16:04:28 +0100 Subject: [PATCH 06/15] Update again --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1b2dc974..126c38e9 100644 --- a/README.md +++ b/README.md @@ -13,14 +13,15 @@ On watertight and orientable grids, the distance to any feature (facet, edge, ve * With compact (linearized) BVHs. The BVHs in EBGeometry are not limited to facets. -By providing a bounding volume constructor, users can also embed entire objects (e.g., analytic functions) in the BVHs. -This permits the construction of multi-object scenes, for example BVHs-of-BVHs type of scenes where multiple DCEL objects are embedded into another BVH layer. +Users can also embed entire objects (e.g., analytic functions) in the BVHs, e.g. the BVH accelerator can be used for a packed sphere geometry. +BVHs can also be nested so that the BVH accelerator is used to embed objects that are themselves described by a BVH. +For example, a scene consisting of many objects described by surface grids can be embedded as a BVH-of-BVH type of scene. Requirements ------------ * A C++ compiler which supports C++14. -* EBGeometry takes a watertight and orientable surface as input (only PLY files currently supported). +* Watertight and orientable surfaces (only PLY files currently supported). Basic usage ----------- From 80dbed8f4c75cc1364544d71834273d4ed9a2940 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 16:15:19 +0100 Subject: [PATCH 07/15] Another readme update --- README.md | 9 +++++++-- example.png | Bin 0 -> 250358 bytes 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 example.png diff --git a/README.md b/README.md index 126c38e9..15b43858 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ EBGeometry A compact code for computing signed distance functions to watertight and orientable surface grids. Can be used with embedded-boundary (EB) codes like Chombo or AMReX. -The tesselations must consist of planar polygons, but these polygons are not necessarily restricted to triangles. +The tesselations must consist of planar polygons (not necessarily triangles). Internally, the surface mesh is stored in a doubly-connected edge list (DCEL), i.e. a half-edge data structure. On watertight and orientable grids, the distance to any feature (facet, edge, vertex) is well defined, and can naively be computed in various ways: @@ -15,7 +15,12 @@ On watertight and orientable grids, the distance to any feature (facet, edge, ve The BVHs in EBGeometry are not limited to facets. Users can also embed entire objects (e.g., analytic functions) in the BVHs, e.g. the BVH accelerator can be used for a packed sphere geometry. BVHs can also be nested so that the BVH accelerator is used to embed objects that are themselves described by a BVH. -For example, a scene consisting of many objects described by surface grids can be embedded as a BVH-of-BVH type of scene. +For example, a scene consisting of many objects described by surface grids can be embedded as a BVH-of-BVH type of scene. + + + +In addition, EBGeometry provides standard operators for signed distance fields like rotations, translations, and scalings. +Multi-object scenes can be constructed with conventional unions, or with BVH-enabled unions (which can be orders of magnitudes faster). Requirements ------------ diff --git a/example.png b/example.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d681b2d7d92659d8138b10939a5b514b183aa0 GIT binary patch literal 250358 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%0D% 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·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 D*SO_s literal 0 HcmV?d00001 From b70bce5bfd85383c1f1a1e138ca371578225df60 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 16:15:51 +0100 Subject: [PATCH 08/15] oops --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15b43858..5176410b 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Users can also embed entire objects (e.g., analytic functions) in the BVHs, e.g. BVHs can also be nested so that the BVH accelerator is used to embed objects that are themselves described by a BVH. For example, a scene consisting of many objects described by surface grids can be embedded as a BVH-of-BVH type of scene. - + In addition, EBGeometry provides standard operators for signed distance fields like rotations, translations, and scalings. Multi-object scenes can be constructed with conventional unions, or with BVH-enabled unions (which can be orders of magnitudes faster). From fe85a82d28af8677bf57e60c8c6383d124a61a75 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 16:16:10 +0100 Subject: [PATCH 09/15] Bigger picture --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5176410b..51120969 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Users can also embed entire objects (e.g., analytic functions) in the BVHs, e.g. BVHs can also be nested so that the BVH accelerator is used to embed objects that are themselves described by a BVH. For example, a scene consisting of many objects described by surface grids can be embedded as a BVH-of-BVH type of scene. - + In addition, EBGeometry provides standard operators for signed distance fields like rotations, translations, and scalings. Multi-object scenes can be constructed with conventional unions, or with BVH-enabled unions (which can be orders of magnitudes faster). From 14a3c35554e98ddb299d17e326ff94454871949b Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 20:48:03 +0100 Subject: [PATCH 10/15] Linearized BVH in place -- some minor optimizations yet to be made --- Examples/Basic/main.cpp | 56 ++++++++++++++++------- Source/EBGeometry_BVH.hpp | 24 ++++++++++ Source/EBGeometry_BVHImplem.hpp | 79 ++++++++++++++++++++++++++++----- 3 files changed, 132 insertions(+), 27 deletions(-) diff --git a/Examples/Basic/main.cpp b/Examples/Basic/main.cpp index 50a07552..1d4585f7 100644 --- a/Examples/Basic/main.cpp +++ b/Examples/Basic/main.cpp @@ -5,6 +5,7 @@ #include #include +#include #include "../../EBGeometry.hpp" @@ -12,7 +13,7 @@ using namespace EBGeometry; using namespace EBGeometry::Dcel; // Degree of bounding volume hierarchies. -constexpr int K = 2; +constexpr int K = 4; int main(int argc, char *argv[]) { @@ -30,21 +31,21 @@ int main(int argc, char *argv[]) { return 1; } - // Declare precision. - using precision = float; + // Declare T. + using T = float; // Aliases for cutting down on typing. - using BV = BoundingVolumes::AABBT; - using Vec3 = Vec3T; - using Face = FaceT; - using slowSDF = SignedDistanceDcel; - using fastSDF = SignedDistanceBVH; + using BV = BoundingVolumes::AABBT; + using Vec3 = Vec3T; + using Face = FaceT; + using slowSDF = SignedDistanceDcel; + using fastSDF = SignedDistanceBVH; std::string inputFile; // Create an empty DCEL mesh std::cout << "Parsing input file\n"; - auto mesh = EBGeometry::Dcel::Parser::PLY::readASCII(file); + auto mesh = EBGeometry::Dcel::Parser::PLY::readASCII(file); // Create a signed distance function from the mesh. This is the object // that will iterate through each and every facet in the input mesh. @@ -52,12 +53,12 @@ int main(int argc, char *argv[]) { // Create a bounding-volume hierarchy of the same mesh type. We begin by create the root node and supplying all the mesh faces to it. Here, // our bounding volume hierarchy bounds the facets in a binary tree. - auto root = std::make_shared > (mesh->getFaces()); + auto root = std::make_shared > (mesh->getFaces()); std::cout << "Partitioning BVH\n"; - root->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, - EBGeometry::Dcel::spatialSplitPartitioner, - EBGeometry::Dcel::defaultStopFunction); + root->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, + EBGeometry::Dcel::spatialSplitPartitioner, + EBGeometry::Dcel::defaultStopFunction); auto linearBVH = root->flattenTree(); @@ -65,10 +66,31 @@ int main(int argc, char *argv[]) { auto fast = std::make_shared(root, false); - // Query the distance to a point. - std::cout << "Distance to point using direct method = " << slow->signedDistance(Vec3::one()) << std::endl; - std::cout << "Distance to point using bounding volumes = " << fast->signedDistance(Vec3::one()) << std::endl; - std::cout << "Distance to point using linearized bvh = " << linearBVH.signedDistance(Vec3::one()) << std::endl; + const Vec3 point = Vec3::one(); + + const auto t1 = std::chrono::high_resolution_clock::now(); + const T directDist = slow->signedDistance(point); + const auto t2 = std::chrono::high_resolution_clock::now(); + + const auto t3 = std::chrono::high_resolution_clock::now(); + const T bvhDist = fast->signedDistance(point); + const auto t4 = std::chrono::high_resolution_clock::now(); + + fast = nullptr; + + const auto t5 = std::chrono::high_resolution_clock::now(); + const T linDist = linearBVH.signedDistance(point); + const auto t6 = std::chrono::high_resolution_clock::now(); + + + + const std::chrono::duration directTime = t2-t1; + const std::chrono::duration bvhTime = t4-t3; + const std::chrono::duration linTime = t6-t5; + + std::cout << "Distance and time using direct query = " << directDist << ", which took " << directTime.count() << " ms\n"; + std::cout << "Distance and time using bvh query = " << bvhDist << ", which took " << bvhTime.count() << " ms\n"; + std::cout << "Distance and time using linear bvh query = " << linDist << ", which took " << linTime.count() << " ms\n"; return 0; } diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index 506fdf30..2cc5a219 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -444,11 +444,24 @@ namespace BVH { /*! @brief Node type for linearized (flattened) BVH. This will be constructed from the other (conventional) BVH type. + @details T is the precision for Vec3, P is the primitive type you want to enclose, BV is the bounding volume you use for it. + @note P MUST supply function signedDistance(...) and unsignedDistance2(Vec3). BV must supply a function getDistance (had this been C++20, we would have use concepts to enforce this). Note that LinearNode is the result of a flattnened BVH hierarchy where nodes are stored with depth-first ordering for improved cache-location in the downward traversal. + + @note This class exists so that we can fit the nodes with a smaller memory footprint. The standard BVH node (NodeT) is very useful + when building the tree but less useful when traversing it since it stores references to the primitives in the node itself. It will span + multiple cache lines. This node exists so that we can fit all the BVH info onto fewer cache lines. The number of cache lines will depend + on the tree degree, precision, and bounding volume that is chosen. + + @todo There's a minor optimization that can be made to the memory alignment, which is as follows: For a leaf node we never really need + the m_childOffsets array, and for a regular node we never really need the m_primitivesOffset member. Moreover, m_childOffsets could be + made into a K-1 sized array because we happen to know that the linearized hierarchy will store the first child node immediately after + the regular node. We could shave off 16 bytes of storage, which would mean that a double-precision binary tree only takes up one word + of CPU memory. */ template class LinearNodeT { @@ -556,6 +569,17 @@ namespace BVH { inline T getDistanceToPrimitives(const Vec3& a_point, const std::vector >& a_primitives) const noexcept; + /*! + @brief Pruning algorithm. This is the same algorithm as NodeT::pruneOrdered2, except that the nodes and primitives come in as arguments (and the node + has been collapsed onto one cache line). + */ + inline + void pruneOrdered2(T& a_shortestSquareDistanceSoFar, + unsigned long& a_closestPrimitiveSoFar, + const Vec3& a_point, + const std::vector >& a_linearNodes, + const std::vector >& a_primitives) const noexcept; + protected: /*! diff --git a/Source/EBGeometry_BVHImplem.hpp b/Source/EBGeometry_BVHImplem.hpp index 820ad2e6..203b5c20 100644 --- a/Source/EBGeometry_BVHImplem.hpp +++ b/Source/EBGeometry_BVHImplem.hpp @@ -657,6 +657,69 @@ namespace BVH { return minDist; } + template + inline + void LinearNodeT::pruneOrdered2(T& a_shortestSquareDistanceSoFar, + unsigned long& a_closestPrimitiveSoFar, + const Vec3& a_point, + const std::vector >& a_linearNodes, + const std::vector >& a_primitives) const noexcept { + + // If this is a leaf node, see if one of the primitives in this node is closer than the closest distance this far. If it is, + // update the closest primitive. + + if(m_numPrimitives > 0){ + + // See if this node has primitives that are closer than the closest one we've found so far. + for (unsigned int i = 0; i < m_numPrimitives; i++){ + const std::shared_ptr& curPrim = a_primitives[m_primitivesOffset + i]; + + const T curDist2 = curPrim->unsignedDistance2(a_point); + + if(curDist2 < a_shortestSquareDistanceSoFar){ + a_shortestSquareDistanceSoFar = curDist2; + a_closestPrimitiveSoFar = m_primitivesOffset + i; + } + } + } + else{ + // In this case we are at a regular node and we need to determine which branch to descend first. One we've selected a branch we won't visit + // the other branch until we've drilled all the way down into the bottom of the tree, so this choice is critical. We assume that the closest + // bounding volume is more likely to also contain the closest primitive, so we sort the distance to the bounding volumes and take the closest + // bounding volume first. + + // Compute the distance to the child node bounding volumes. + std::array, K > distancesAndNodes; + for (int k = 0; k < K; k++){ + const unsigned long& childOffset = m_childOffsets[k]; + const LinearNodeT& childNode = a_linearNodes[childOffset]; + + distancesAndNodes[k] = std::make_pair(childNode.getDistanceToBoundingVolume2(a_point), childOffset); + } + + // Sort, closest node goes first. + std::sort(distancesAndNodes.begin(), + distancesAndNodes.end(), + [](const std::pair& node1, const std::pair& node2){ + return node1.first < node2.first; + }); + + + // Go through the child nodes and call this function again. + for (int k = 0; k < K; k++){ + const unsigned long& childOffset = distancesAndNodes[k].second; + const LinearNodeT& childNode = a_linearNodes[childOffset]; + + if(distancesAndNodes[k].first < a_shortestSquareDistanceSoFar){ + childNode.pruneOrdered2(a_shortestSquareDistanceSoFar, a_closestPrimitiveSoFar, a_point, a_linearNodes, a_primitives); + } + else{ // Prune the other subtree. + break; + } + } + } + } + template inline LinearBVH::LinearBVH(const std::vector& a_linearNodes, @@ -673,20 +736,16 @@ namespace BVH { template T LinearBVH::signedDistance(const Vec3& a_point) const noexcept { - T minDist = std::numeric_limits::infinity(); - for (const auto& node : m_linearNodes) { - if(node.isLeaf()){ - const T curDist = node.getDistanceToPrimitives(a_point, m_primitives); + T minDist2 = std::numeric_limits::infinity(); + unsigned long closestPrimitiveSoFar = 0UL; - if(std::abs(curDist) < std::abs(minDist)) { - minDist = curDist; - } - } - } + m_linearNodes[0].pruneOrdered2(minDist2, closestPrimitiveSoFar, a_point, m_linearNodes, m_primitives); - return minDist; + return m_primitives[closestPrimitiveSoFar]->signedDistance(a_point); } + + } #include "EBGeometry_NamespaceFooter.hpp" From abbbe5700fe9a7579364b82e1fa76f5edf2d77d8 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 21:19:10 +0100 Subject: [PATCH 11/15] All pointers now --- Examples/Basic/README.md | 9 +++- Examples/Basic/main.cpp | 81 ++++++++++++++++----------------- Source/EBGeometry_BVH.hpp | 2 +- Source/EBGeometry_BVHImplem.hpp | 4 +- 4 files changed, 49 insertions(+), 47 deletions(-) diff --git a/Examples/Basic/README.md b/Examples/Basic/README.md index a015a6be..18a87c37 100644 --- a/Examples/Basic/README.md +++ b/Examples/Basic/README.md @@ -1,4 +1,11 @@ -This folder contains a basic example of using EBGeometry. +This folder contains a basic example of using EBGeometry, with three different representations of the signed distance field. + +* A naive approach which iterates through all facets and computed the signed distance. +* Using a conventional bounding volume hierarchy with (references to) primitives stored directly in the nodes. +* A flatten, more compact bounding volume hierarchy. + +Note that SDF queries have different complexity for different geometries and input points. +For example, a tessellated sphere has a "blind spot" in it's center where even BVHs will visit most, if not all, primitives. Compiling --------- diff --git a/Examples/Basic/main.cpp b/Examples/Basic/main.cpp index 1d4585f7..4e347b5b 100644 --- a/Examples/Basic/main.cpp +++ b/Examples/Basic/main.cpp @@ -12,7 +12,8 @@ using namespace EBGeometry; using namespace EBGeometry::Dcel; -// Degree of bounding volume hierarchies. +// Degree of bounding volume hierarchies. We use a 4-ary tree here, where each +// regular node has four children. constexpr int K = 4; int main(int argc, char *argv[]) { @@ -21,76 +22,70 @@ int main(int argc, char *argv[]) { std::vector all_args; std::string file; - + + // Read the input file. if (argc == 2) { file = "../PLY/" + std::string(argv[1]); } else{ std::cerr << "Missing file name. Use ./a.out 'filename' where 'filename' is one of the files in ../PLY\n"; - - return 1; } - // Declare T. + // Declare the precision T as float. using T = float; - // Aliases for cutting down on typing. - using BV = BoundingVolumes::AABBT; - using Vec3 = Vec3T; - using Face = FaceT; - using slowSDF = SignedDistanceDcel; - using fastSDF = SignedDistanceBVH; + // Aliases for cutting down on typing. + using BV = BoundingVolumes::AABBT; + using Vec3 = Vec3T; - std::string inputFile; - - // Create an empty DCEL mesh + // Parse the mesh from file. std::cout << "Parsing input file\n"; - auto mesh = EBGeometry::Dcel::Parser::PLY::readASCII(file); + const std::shared_ptr > mesh = EBGeometry::Dcel::Parser::PLY::readASCII(file); // Create a signed distance function from the mesh. This is the object // that will iterate through each and every facet in the input mesh. - auto slow = std::make_shared(mesh, false); + auto directSDF = std::make_shared >(mesh, false); // Create a bounding-volume hierarchy of the same mesh type. We begin by create the root node and supplying all the mesh faces to it. Here, // our bounding volume hierarchy bounds the facets in a binary tree. - auto root = std::make_shared > (mesh->getFaces()); - - std::cout << "Partitioning BVH\n"; - root->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, - EBGeometry::Dcel::spatialSplitPartitioner, - EBGeometry::Dcel::defaultStopFunction); - - auto linearBVH = root->flattenTree(); - - - auto fast = std::make_shared(root, false); + std::cout << "Partitioning BVH\n"; + auto bvhSDF = std::make_shared, BV, K> > (mesh->getFaces()); + bvhSDF->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, + EBGeometry::Dcel::spatialSplitPartitioner, + EBGeometry::Dcel::defaultStopFunction); + // Create the linear representation of the conventional BVH SDF above. + std::cout << "Flattening BVH tree\n"; + auto linSDF = bvhSDF->flattenTree(); + // Compute signed distance for this position and time all SDF representations. const Vec3 point = Vec3::one(); - + const auto t1 = std::chrono::high_resolution_clock::now(); - const T directDist = slow->signedDistance(point); + const T directDist = directSDF->signedDistance(point); const auto t2 = std::chrono::high_resolution_clock::now(); - + const auto t3 = std::chrono::high_resolution_clock::now(); - const T bvhDist = fast->signedDistance(point); + const T bvhDist = bvhSDF->signedDistance(point); const auto t4 = std::chrono::high_resolution_clock::now(); - fast = nullptr; - const auto t5 = std::chrono::high_resolution_clock::now(); - const T linDist = linearBVH.signedDistance(point); + const T linDist = linSDF->signedDistance(point); const auto t6 = std::chrono::high_resolution_clock::now(); - - - const std::chrono::duration directTime = t2-t1; - const std::chrono::duration bvhTime = t4-t3; - const std::chrono::duration linTime = t6-t5; - - std::cout << "Distance and time using direct query = " << directDist << ", which took " << directTime.count() << " ms\n"; - std::cout << "Distance and time using bvh query = " << bvhDist << ", which took " << bvhTime.count() << " ms\n"; - std::cout << "Distance and time using linear bvh query = " << linDist << ", which took " << linTime.count() << " ms\n"; + // Kill all the SDF representations. + directSDF = nullptr; + bvhSDF = nullptr; + linSDF = nullptr; + + // Get the timings. + const std::chrono::duration directTime = t2-t1; + const std::chrono::duration bvhTime = t4-t3; + const std::chrono::duration linTime = t6-t5; + + std::cout << "Distance and time using direct query = " << directDist << ", which took " << directTime.count() << " us\n"; + std::cout << "Distance and time using bvh query = " << bvhDist << ", which took " << bvhTime. count() << " us\n"; + std::cout << "Distance and time using linear bvh query = " << linDist << ", which took " << linTime. count() << " us\n"; return 0; } diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index 2cc5a219..f26eaeaf 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -276,7 +276,7 @@ namespace BVH { @details This will allocate a linear node */ inline - LinearBVH flattenTree(); + std::shared_ptr > flattenTree(); protected: diff --git a/Source/EBGeometry_BVHImplem.hpp b/Source/EBGeometry_BVHImplem.hpp index 203b5c20..a6613dfd 100644 --- a/Source/EBGeometry_BVHImplem.hpp +++ b/Source/EBGeometry_BVHImplem.hpp @@ -492,7 +492,7 @@ namespace BVH { template inline - LinearBVH NodeT::flattenTree() { + std::shared_ptr > NodeT::flattenTree() { // Create a list of sorted primitives and nodes. std::vector > sortedPrimitives; @@ -505,7 +505,7 @@ namespace BVH { this->flattenTree(linearNodes, sortedPrimitives, offset); // Return the root node. - return LinearBVH(linearNodes, sortedPrimitives); + return std::make_shared >(linearNodes, sortedPrimitives); } template From 856f25abe2ea51da281e9758491451e64d8f6d24 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 21:33:58 +0100 Subject: [PATCH 12/15] Basic example not using intermediate SDF definitions --- Examples/AMReX/main.cpp | 4 +--- Examples/Basic/main.cpp | 11 ++++------- Source/EBGeometry_BVH.hpp | 14 +++++++++----- Source/EBGeometry_BVHImplem.hpp | 21 ++++++++++++++++----- 4 files changed, 30 insertions(+), 20 deletions(-) diff --git a/Examples/AMReX/main.cpp b/Examples/AMReX/main.cpp index a02a1487..cdb1d19a 100644 --- a/Examples/AMReX/main.cpp +++ b/Examples/AMReX/main.cpp @@ -16,7 +16,7 @@ using namespace amrex; // BVH tree degree -constexpr int K = 2; +constexpr int K = 4; namespace amrex { namespace EB2 { @@ -29,8 +29,6 @@ namespace amrex { class SignedDistanceBVH : public EBGeometry::SignedDistanceBVH { public: - - SignedDistanceBVH(const std::string a_filename, const bool a_flipSign) { auto mesh = EBGeometry::Dcel::Parser::PLY::readASCII(a_filename); diff --git a/Examples/Basic/main.cpp b/Examples/Basic/main.cpp index 4e347b5b..c140793f 100644 --- a/Examples/Basic/main.cpp +++ b/Examples/Basic/main.cpp @@ -38,18 +38,15 @@ int main(int argc, char *argv[]) { using BV = BoundingVolumes::AABBT; using Vec3 = Vec3T; - // Parse the mesh from file. + // Parse the mesh from file. One can call the signed distance function directly on the mesh, but it will + // iterate through every facet. std::cout << "Parsing input file\n"; - const std::shared_ptr > mesh = EBGeometry::Dcel::Parser::PLY::readASCII(file); - - // Create a signed distance function from the mesh. This is the object - // that will iterate through each and every facet in the input mesh. - auto directSDF = std::make_shared >(mesh, false); + std::shared_ptr > directSDF = EBGeometry::Dcel::Parser::PLY::readASCII(file); // Create a bounding-volume hierarchy of the same mesh type. We begin by create the root node and supplying all the mesh faces to it. Here, // our bounding volume hierarchy bounds the facets in a binary tree. std::cout << "Partitioning BVH\n"; - auto bvhSDF = std::make_shared, BV, K> > (mesh->getFaces()); + auto bvhSDF = std::make_shared, BV, K> > (directSDF->getFaces()); bvhSDF->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, EBGeometry::Dcel::spatialSplitPartitioner, EBGeometry::Dcel::defaultStopFunction); diff --git a/Source/EBGeometry_BVH.hpp b/Source/EBGeometry_BVH.hpp index f26eaeaf..3afc8745 100644 --- a/Source/EBGeometry_BVH.hpp +++ b/Source/EBGeometry_BVH.hpp @@ -273,7 +273,7 @@ namespace BVH { /*! @brief Flatten everything beneath this node into a depth-first sorted BVH hierarchy. - @details This will allocate a linear node + @details This will compute the flattening of the standard BVH tree and return a pointer to the root node. */ inline std::shared_ptr > flattenTree(); @@ -432,14 +432,18 @@ namespace BVH { void pruneUnordered2(T& a_minDist2, std::shared_ptr& a_closest, const Vec3& a_point) const noexcept; /*! - @brief Internal flattening method + @brief Flatten tree method. + @details This function will flatten everything beneath the current node and linearize all the nodes and primitives beneath it to + a_linearNodes and a_sortedPrimitives. This function is called recursively. + @param[inout] a_linearNodes BVH nodes, linearized onto a vector. + @param[inout] a_sortedPrimitives Sorted primitives (in leaf node order). + @param[inout] a_offset Supporting integer for figuring out where in the tree we are. + @note When called from the root node, a_linearNodes and a_sortedPrimitives should be empty and a_offset=0UL. */ inline unsigned long flattenTree(std::vector >& a_linearNodes, std::vector >& a_sortedPrimitives, unsigned long& a_offset) const noexcept; - - }; /*! @@ -650,7 +654,7 @@ namespace BVH { @param[in] a_point 3D point in space */ inline - T signedDistance(const Vec3& a_point) const noexcept; + T signedDistance(const Vec3& a_point, const Prune a_pruning = Prune::Ordered2) const noexcept; protected: diff --git a/Source/EBGeometry_BVHImplem.hpp b/Source/EBGeometry_BVHImplem.hpp index a6613dfd..5aa8a135 100644 --- a/Source/EBGeometry_BVHImplem.hpp +++ b/Source/EBGeometry_BVHImplem.hpp @@ -735,14 +735,25 @@ namespace BVH { } template - T LinearBVH::signedDistance(const Vec3& a_point) const noexcept { + T LinearBVH::signedDistance(const Vec3& a_point, const Prune a_pruning) const noexcept { + T minDist = std::numeric_limits::infinity(); + + switch(a_pruning){ + case Prune::Ordered2: + { + unsigned long closestPrimitiveSoFar = 0UL; - T minDist2 = std::numeric_limits::infinity(); - unsigned long closestPrimitiveSoFar = 0UL; + m_linearNodes[0].pruneOrdered2(minDist, closestPrimitiveSoFar, a_point, m_linearNodes, m_primitives); - m_linearNodes[0].pruneOrdered2(minDist2, closestPrimitiveSoFar, a_point, m_linearNodes, m_primitives); + minDist = m_primitives[closestPrimitiveSoFar]->signedDistance(a_point); - return m_primitives[closestPrimitiveSoFar]->signedDistance(a_point); + break; + } + default: + std::cerr << "In file EBGeometry_BVHImplem.hpp function LinearBVH::signedDistance(Vec3, Prune) -- bad input enum for 'Prune'\n"; + }; + + return minDist; } From 2ebe6c33ba9256458094aaad35731bc2ccedf70c Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 21:53:28 +0100 Subject: [PATCH 13/15] AMReX using flattened BVH --- Examples/AMReX/main.cpp | 230 ++++++++++++++++++++++++---------------- 1 file changed, 137 insertions(+), 93 deletions(-) diff --git a/Examples/AMReX/main.cpp b/Examples/AMReX/main.cpp index cdb1d19a..97f5134e 100644 --- a/Examples/AMReX/main.cpp +++ b/Examples/AMReX/main.cpp @@ -15,131 +15,175 @@ using namespace amrex; -// BVH tree degree -constexpr int K = 4; - namespace amrex { namespace EB2 { - using prec = float; - using Vec3 = EBGeometry::Vec3T; - using BV = EBGeometry::BoundingVolumes::AABBT; - using Node = EBGeometry::BVH::NodeT, BV, K>; - - - class SignedDistanceBVH : public EBGeometry::SignedDistanceBVH { + /*! + @brief This is an AMReX-capable version of the EBGeometry BVH accelerator. It is templated as T, BV, K which indicate + the EBGeometry precision, bounding volume, and tree degree. + */ + template + class SignedDistanceBVH { public: + + /*! + @brief Alias for builder node, for encapsulating a "standard" BVH node + */ + using BuilderNode = EBGeometry::BVH::NodeT, BV, K>; + + /*! + @brief Alias for linearized BVH node + */ + using LinearNode = EBGeometry::BVH::LinearBVH, BV, K>; + + /*! + @brief Alias for always-3D vector + */ + using Vec3 = EBGeometry::Vec3T; + + /*! + @brief Full constructor. + @param[in] a_filename File name. Must be a PLY file and will be parser by the PLY parser. + @param[in] a_flipSign Hook for swapping inside/outside. + */ SignedDistanceBVH(const std::string a_filename, const bool a_flipSign) { - auto mesh = EBGeometry::Dcel::Parser::PLY::readASCII(a_filename); + // 1. Read mesh from file. + auto mesh = EBGeometry::Dcel::Parser::PLY::readASCII(a_filename); - m_rootNode = std::make_shared (mesh->getFaces()); + // 2. Create a standard BVH hierarchy. This is not a compact ree. + auto root = std::make_shared(mesh->getFaces()); + root->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, + EBGeometry::Dcel::spatialSplitPartitioner, + EBGeometry::Dcel::defaultStopFunction); - m_rootNode->topDownSortAndPartitionPrimitives(EBGeometry::Dcel::defaultBVConstructor, - EBGeometry::Dcel::spatialSplitPartitioner, - EBGeometry::Dcel::defaultStopFunction); + // 3. Flatten the tree onto a tighter memory representation. + m_rootNode = root->flattenTree(); } + /*! + @brief Copy constructor. + @param[in] a_other Other SDF. + */ SignedDistanceBVH(const SignedDistanceBVH& a_other) { this->m_rootNode = a_other.m_rootNode; this->m_flipSign = a_other.m_flipSign; - this->m_transformOps = a_other.m_transformOps; } + /*! + @brief AMReX's implicit function definition. + */ Real operator() (AMREX_D_DECL(Real x, Real y, Real z)) const noexcept { - const Real sign = (m_flipSign) ? -1.0 : 1.0; - return sign * m_rootNode->signedDistance(this->transformPoint(Vec3(x,y,z))); + return sign * m_rootNode->signedDistance(Vec3(x,y,z)); }; + /*! + @brief Also an AMReX implicit function implementation + */ inline Real operator() (const RealArray& p) const noexcept { return this->operator()(AMREX_D_DECL(p[0],p[1],p[2])); - } + } + + protected: + + /*! + @brief Root node of the linearized BVH hierarchy. + */ + std::shared_ptr m_rootNode; + + /*! + @brief Hook for flipping the sign + */ + bool m_flipSign; }; } } -int main (int argc, char* argv[]) -{ - amrex::Initialize(argc, argv); +int main (int argc, char* argv[]) { + amrex::Initialize(argc, argv); - { - int n_cell = 128; - int max_grid_size = 32; - int which_geom = 0; + int n_cell = 128; + int max_grid_size = 32; + int which_geom = 0; - std::string filename; + std::string filename; - // read parameters - ParmParse pp; - pp.query("n_cell", n_cell); - pp.query("max_grid_size", max_grid_size); - pp.query("which_geom", which_geom); + // read parameters + ParmParse pp; + pp.query("n_cell", n_cell); + pp.query("max_grid_size", max_grid_size); + pp.query("which_geom", which_geom); - Geometry geom; - { - RealBox rb; + Geometry geom; + { + RealBox rb; - if(which_geom == 0){// Airfoil case - rb = RealBox({-100,-100,-75}, {400,100,125}); - filename = "../PLY/airfoil.ply"; - } - else if (which_geom == 1){ // Sphere case - rb = RealBox({-400,-400,-400}, {400,400,400}); - filename = "../PLY/sphere.ply"; - } - else if (which_geom == 2){ // Dodecahedron - rb = RealBox({-2.,-2.,-2.}, {2.,2.,2.}); - filename = "../PLY/dodecahedron.ply"; - } - else if (which_geom == 3){ // Horse - rb = RealBox({-0.12,-0.12,-0.12}, {0.12,0.12,0.12}); - filename = "../PLY/horse.ply"; - } - else if (which_geom == 4){ // Car - // rb = RealBox({-20,-20,-20}, {20,20,20}); // Doesn't work. - rb = RealBox({-10,-5,-5}, {10,5,5}); // Works. - filename = "../PLY/porsche.ply"; - } - else if (which_geom == 5){ // Orion - rb = RealBox({-10,-5,-10}, {10,10,10}); - filename = "../PLY/orion.ply"; - } - else if (which_geom == 6){ // Armadillo - rb = RealBox({-100,-75,-100}, {100,125,100}); - filename = "../PLY/armadillo.ply"; - } - - Array is_periodic{false, false, false}; - Geometry::Setup(&rb, 0, is_periodic.data()); - Box domain(IntVect(0), IntVect(n_cell-1)); - geom.define(domain); - } - - // Create the signed distance function. - EB2::SignedDistanceBVH sdf(filename, false); - - auto gshop = EB2::makeShop(sdf); - EB2::Build(gshop, geom, 0, 0); - - // Put some data - MultiFab mf; - { - BoxArray ba(geom.Domain()); - ba.maxSize(max_grid_size); - DistributionMapping dm{ba}; - - std::unique_ptr factory - = amrex::makeEBFabFactory(geom, ba, dm, {2,2,2}, EBSupport::full); - - mf.define(ba, dm, 1, 0, MFInfo(), *factory); - mf.setVal(1.0); - } - - EB_WriteSingleLevelPlotfile("plt", mf, {"rho"}, geom, 0.0, 0); + if(which_geom == 0){// Airfoil case + rb = RealBox({-100,-100,-75}, {400,100,125}); + filename = "../PLY/airfoil.ply"; + } + else if (which_geom == 1){ // Sphere case + rb = RealBox({-400,-400,-400}, {400,400,400}); + filename = "../PLY/sphere.ply"; + } + else if (which_geom == 2){ // Dodecahedron + rb = RealBox({-2.,-2.,-2.}, {2.,2.,2.}); + filename = "../PLY/dodecahedron.ply"; + } + else if (which_geom == 3){ // Horse + rb = RealBox({-0.12,-0.12,-0.12}, {0.12,0.12,0.12}); + filename = "../PLY/horse.ply"; + } + else if (which_geom == 4){ // Car + // rb = RealBox({-20,-20,-20}, {20,20,20}); // Doesn't work. + rb = RealBox({-10,-5,-5}, {10,5,5}); // Works. + filename = "../PLY/porsche.ply"; } + else if (which_geom == 5){ // Orion + rb = RealBox({-10,-5,-10}, {10,10,10}); + filename = "../PLY/orion.ply"; + } + else if (which_geom == 6){ // Armadillo + rb = RealBox({-100,-75,-100}, {100,125,100}); + filename = "../PLY/armadillo.ply"; + } + + Array is_periodic{false, false, false}; + Geometry::Setup(&rb, 0, is_periodic.data()); + Box domain(IntVect(0), IntVect(n_cell-1)); + geom.define(domain); + } + + // Create our signed distance function. K is the tree degree while T is the EBGeometry precision. + constexpr int K = 2; + + using T = float; + using Vec3 = EBGeometry::Vec3T; + using BV = EBGeometry::BoundingVolumes::AABBT; + + EB2::SignedDistanceBVH sdf(filename, false); + + auto gshop = EB2::makeShop(sdf); + EB2::Build(gshop, geom, 0, 0); + + // Put some data + MultiFab mf; + { + BoxArray ba(geom.Domain()); + ba.maxSize(max_grid_size); + DistributionMapping dm{ba}; + + std::unique_ptr factory + = amrex::makeEBFabFactory(geom, ba, dm, {2,2,2}, EBSupport::full); + + mf.define(ba, dm, 1, 0, MFInfo(), *factory); + mf.setVal(1.0); + } + + EB_WriteSingleLevelPlotfile("plt", mf, {"rho"}, geom, 0.0, 0); - amrex::Finalize(); + amrex::Finalize(); } From 3f8bf8514a9844b5cc70fc32e903c69308f2c370 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 21:58:30 +0100 Subject: [PATCH 14/15] Removed some implementations which were uncessary --- EBGeometry.hpp | 2 - Source/EBGeometry_SignedDistanceBVH.hpp | 98 ------------------- Source/EBGeometry_SignedDistanceBVHImplem.hpp | 54 ---------- Source/EBGeometry_SignedDistanceDcel.hpp | 82 ---------------- .../EBGeometry_SignedDistanceDcelImplem.hpp | 48 --------- Source/EBGeometry_SignedDistanceFunction.hpp | 3 + 6 files changed, 3 insertions(+), 284 deletions(-) delete mode 100644 Source/EBGeometry_SignedDistanceBVH.hpp delete mode 100644 Source/EBGeometry_SignedDistanceBVHImplem.hpp delete mode 100644 Source/EBGeometry_SignedDistanceDcel.hpp delete mode 100644 Source/EBGeometry_SignedDistanceDcelImplem.hpp diff --git a/EBGeometry.hpp b/EBGeometry.hpp index 8392ed56..da0c3817 100644 --- a/EBGeometry.hpp +++ b/EBGeometry.hpp @@ -9,8 +9,6 @@ #include "Source/EBGeometry_DcelIterator.hpp" #include "Source/EBGeometry_DcelParser.hpp" #include "Source/EBGeometry_SignedDistanceFunction.hpp" -#include "Source/EBGeometry_SignedDistanceDcel.hpp" -#include "Source/EBGeometry_SignedDistanceBVH.hpp" #include "Source/EBGeometry_Union.hpp" #include "Source/EBGeometry_UnionBVH.hpp" diff --git a/Source/EBGeometry_SignedDistanceBVH.hpp b/Source/EBGeometry_SignedDistanceBVH.hpp deleted file mode 100644 index d4524d59..00000000 --- a/Source/EBGeometry_SignedDistanceBVH.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/* EBGeometry - * Copyright © 2022 Robert Marskar - * Please refer to Copyright.txt and LICENSE in the EBGeometry root directory. - */ - -/*! - @file EBGeometry_SignedDistanceBVH.hpp - @brief Declaration of a signed-distance object that uses bounding volume hiearchices for accelerating signed queries from DCEL tesselations. - @author Robert Marskar -*/ - -#ifndef EBGeometry_SignedDistanceBVH -#define EBGeometry_SignedDistanceBVH - -// Std includes -#include - -// Our includes -#include "EBGeometry_SignedDistanceFunction.hpp" -#include "EBGeometry_DcelMesh.hpp" -#include "EBGeometry_NamespaceHeader.hpp" - -/*! - @brief Signed distance function from a DCEL mesh, using BVHs for accelerating the query. - @details This class stores a reference to the node in the BVH tree. For that reason, the class is templated using the precision (T), the bounding volume type - that encloses the primitives (BV), and the tree degree (K. -*/ -template -class SignedDistanceBVH : public SignedDistanceFunction { -public: - - /*! - @brief Alias for DCEL faces - */ - using Face = EBGeometry::Dcel::FaceT; - - /*! - @brief Alias for BVH node - */ - using Node = EBGeometry::BVH::NodeT; - - /*! - @brief Alias for DCEl mesh with precision T - */ - using Mesh = Dcel::MeshT; - - /*! - @brief Weak constructor. - */ - SignedDistanceBVH() = default; - - /*! - @brief Full constructor - @param[in] a_rootNode Reference to root node in BVH. - @param[in] a_flipSign Hook for turning inside to outside - */ - SignedDistanceBVH(const std::shared_ptr& a_rootNode, const bool a_flipSign); - - /*! - @brief Copy constructor - @param[in] a_object Other distance function - */ - SignedDistanceBVH(const SignedDistanceBVH& a_object); - - /*! - @brief Destructor (does nothing) - */ - virtual ~SignedDistanceBVH(); - - /*! - @brief Return the root node bounding volume - */ - const BV& getBoundingVolume() const noexcept; - - /*! - @brief Value function - @param[in] a_point 3D point. - */ - T signedDistance(const Vec3T& a_point) const noexcept override; - -protected: - - /*! - @brief Reference to root node in DCEL mesh. - */ - std::shared_ptr m_rootNode; - - /*! - @brief Hook for turning inside to outside - */ - bool m_flipSign; -}; - -#include "EBGeometry_NamespaceFooter.hpp" - -#include "EBGeometry_SignedDistanceBVHImplem.hpp" - -#endif diff --git a/Source/EBGeometry_SignedDistanceBVHImplem.hpp b/Source/EBGeometry_SignedDistanceBVHImplem.hpp deleted file mode 100644 index 96da204d..00000000 --- a/Source/EBGeometry_SignedDistanceBVHImplem.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* EBGeometry - * Copyright © 2022 Robert Marskar - * Please refer to Copyright.txt and LICENSE in the EBGeometry root directory. - */ - -/*! - @file EBGeometry_SignedDistanceBVHImplem.hpp - @brief Implementation of EBGeometry_SignedDistanceBVH.hpp - @author Robert Marskar -*/ - -#ifndef EBGeometry_SignedDistanceBVHImplem -#define EBGeometry_SignedDistanceBVHImplem - -// Our includes -#include "EBGeometry_SignedDistanceBVH.hpp" -#include "EBGeometry_NamespaceHeader.hpp" - -using namespace Dcel; -using namespace BVH; - -template -SignedDistanceBVH::SignedDistanceBVH(const std::shared_ptr& a_rootNode, const bool a_flipSign) { - this->m_rootNode = a_rootNode; - this->m_flipSign = a_flipSign; -} - -template -SignedDistanceBVH::SignedDistanceBVH(const SignedDistanceBVH& a_other) { - this->m_mesh = a_other.m_mesh; - this->m_flipSign = a_other.m_flipSign; - this->m_transformOps = a_other.m_transformOps; -} - -template -SignedDistanceBVH::~SignedDistanceBVH() { - -} - -template -const BV& SignedDistanceBVH::getBoundingVolume() const noexcept { - return m_rootNode->getBoundingVolume(); -} - -template -T SignedDistanceBVH::signedDistance(const Vec3T& a_point) const noexcept { - const T sign = (m_flipSign) ? -1.0 : 1.0; - - return sign * m_rootNode->signedDistance(this->transformPoint(a_point)); -} - -#include "EBGeometry_NamespaceFooter.hpp" - -#endif diff --git a/Source/EBGeometry_SignedDistanceDcel.hpp b/Source/EBGeometry_SignedDistanceDcel.hpp deleted file mode 100644 index dfb5d223..00000000 --- a/Source/EBGeometry_SignedDistanceDcel.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* EBGeometry - * Copyright © 2022 Robert Marskar - * Please refer to Copyright.txt and LICENSE in the EBGeometry root directory. - */ - -/*! - @file EBGeometry_SignedDistanceDcel.hpp - @brief Declaration of a signed-distance object that gets its value function from a DCEL surface tesselation - @author Robert Marskar -*/ - -#ifndef EBGeometry_SignedDistanceDcel -#define EBGeometry_SignedDistanceDcel - -// Std includes -#include - -// Our includes -#include "EBGeometry_SignedDistanceFunction.hpp" -#include "EBGeometry_DcelMesh.hpp" -#include "EBGeometry_NamespaceHeader.hpp" - -/*! - @brief Signed distance function from a DCEL mesh. - @details This does not use a bounding volume hierarchy for performance. The template parameter is the floating point precision. -*/ -template -class SignedDistanceDcel : public SignedDistanceFunction { -public: - - /*! - @brief Alias for DCEl mesh with precision T - */ - using Mesh = Dcel::MeshT; - - /*! - @brief Weak constructor. - */ - SignedDistanceDcel() = default; - - /*! - @brief Full constructor - @param[in] a_mesh DCEL mesh - @param[in] a_flipSign Hook for turning inside to outside - */ - SignedDistanceDcel(const std::shared_ptr& a_mesh, const bool a_flipSign); - - /*! - @brief Copy constructor - @param[in] a_object Other distance function - */ - SignedDistanceDcel(const SignedDistanceDcel& a_object); - - /*! - @brief Destructor (does nothing) - */ - virtual ~SignedDistanceDcel(); - - /*! - @brief Value function - @param[in] a_point 3D point. - */ - T signedDistance(const Vec3T& a_point) const noexcept override; - -protected: - - /*! - @brief Half-edge mesh structure. - */ - std::shared_ptr m_mesh; - - /*! - @brief Hook for turning inside to outside - */ - bool m_flipSign; -}; - -#include "EBGeometry_NamespaceFooter.hpp" - -#include "EBGeometry_SignedDistanceDcelImplem.hpp" - -#endif diff --git a/Source/EBGeometry_SignedDistanceDcelImplem.hpp b/Source/EBGeometry_SignedDistanceDcelImplem.hpp deleted file mode 100644 index 64abafac..00000000 --- a/Source/EBGeometry_SignedDistanceDcelImplem.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/* EBGeometry - * Copyright © 2022 Robert Marskar - * Please refer to Copyright.txt and LICENSE in the EBGeometry root directory. - */ - -/*! - @file EBGeometry_SignedDistanceDcelImplem.H - @brief Implementation of EBGeometry_SignedDistanceDcel.H - @author Robert Marskar -*/ - -#ifndef EBGeometry_SignedDistanceDcelImplem_H -#define EBGeometry_SignedDistanceDcelImplem_H - -// Our includes -#include "EBGeometry_Vec.hpp" -#include "EBGeometry_SignedDistanceDcel.hpp" -#include "EBGeometry_NamespaceHeader.hpp" - -template -SignedDistanceDcel::SignedDistanceDcel(const std::shared_ptr& a_mesh, const bool a_flipSign) { - this->m_mesh = a_mesh; - this->m_flipSign = a_flipSign; -} - -template -SignedDistanceDcel::SignedDistanceDcel(const SignedDistanceDcel& a_object) { - this->m_mesh = a_object.m_mesh; - this->m_flipSign = a_object.m_flipSign; - this->m_transformOps = a_object.m_transformOps; -} - -template -SignedDistanceDcel::~SignedDistanceDcel(){ - -} - -template -T SignedDistanceDcel::signedDistance(const Vec3T& a_point) const noexcept { - - T sign = (m_flipSign) ? -1.0 : 1.0; - - return sign * m_mesh->signedDistance(this->transformPoint(a_point)); -} - -#include "EBGeometry_NamespaceFooter.hpp" - -#endif diff --git a/Source/EBGeometry_SignedDistanceFunction.hpp b/Source/EBGeometry_SignedDistanceFunction.hpp index 853e9ade..63470d8a 100644 --- a/Source/EBGeometry_SignedDistanceFunction.hpp +++ b/Source/EBGeometry_SignedDistanceFunction.hpp @@ -21,6 +21,9 @@ /*! @brief Abstract representation of a signed distance function. + @details Users can put whatever they like in here, e.g. analytic functions, DCEL meshes, or DCEL meshes stored in full or compact BVH trees. The signedDistance + function must be implemented by the user. When computing it, the user can apply transformation operators (rotations, scaling, translations) by calling transformPoint + on the input coordinate. */ template class SignedDistanceFunction { From 5fb1defce6e60357b2889be809b9d14186c30b89 Mon Sep 17 00:00:00 2001 From: Robert Marskar Date: Mon, 7 Mar 2022 22:03:53 +0100 Subject: [PATCH 15/15] Union also uses flattened tree --- Source/EBGeometry_UnionBVH.hpp | 11 ++++++++--- Source/EBGeometry_UnionBVHImplem.hpp | 12 +++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Source/EBGeometry_UnionBVH.hpp b/Source/EBGeometry_UnionBVH.hpp index c888d30d..ba8cd9a4 100644 --- a/Source/EBGeometry_UnionBVH.hpp +++ b/Source/EBGeometry_UnionBVH.hpp @@ -82,9 +82,14 @@ class UnionBVH : public SignedDistanceFunction { using SDFList = std::vector >; /*! - @brief Node type in BVH tree + @brief Builder node type in BVH tree. Tree is constructed in "full". */ - using Node = EBGeometry::BVH::NodeT; + using BuilderNode = EBGeometry::BVH::NodeT; + + /*! + @brief Node type in BVH tree. We use a flattened tree. + */ + using LinearNode = EBGeometry::BVH::LinearBVH; /*! @brief List of distance functions @@ -94,7 +99,7 @@ class UnionBVH : public SignedDistanceFunction { /*! @brief Root node for BVH tree */ - std::shared_ptr m_rootNode; + std::shared_ptr m_rootNode; /*! @brief Is good or not diff --git a/Source/EBGeometry_UnionBVHImplem.hpp b/Source/EBGeometry_UnionBVHImplem.hpp index 7840ba31..fd4a4396 100644 --- a/Source/EBGeometry_UnionBVHImplem.hpp +++ b/Source/EBGeometry_UnionBVHImplem.hpp @@ -124,18 +124,20 @@ void UnionBVH::buildTree(const BVConstructor& a_bvConstructor) { }; // Stop function. Exists subdivision if there are not enough primitives left to keep subdividing. We set the limit at 10 primitives. - EBGeometry::BVH::StopFunctionT stopFunc = [] (const Node& a_node) -> bool { + EBGeometry::BVH::StopFunctionT stopFunc = [] (const BuilderNode& a_node) -> bool { const int numPrimsInNode = (a_node.getPrimitives()).size(); return numPrimsInNode < K; }; // Init the root node and partition the primitives. - m_rootNode = std::make_shared(m_distanceFunctions); + auto root = std::make_shared(m_distanceFunctions); - m_rootNode->topDownSortAndPartitionPrimitives(a_bvConstructor, - partitioner, - stopFunc); + root->topDownSortAndPartitionPrimitives(a_bvConstructor, + partitioner, + stopFunc); + m_rootNode = root->flattenTree(); + m_isGood = true; }