如何对 sparxe 体素八叉树 (SVO) 进行三角测量

Posted

技术标签:

【中文标题】如何对 sparxe 体素八叉树 (SVO) 进行三角测量【英文标题】:How to triangulate a sparxe voxel octree (SVO) 【发布时间】:2021-02-08 15:22:47 【问题描述】:

我实现了一个基于 sparxe 体素八叉树 (SVO) 的材料去除模拟数据结构。现在,我想可视化结果。因此,我需要对我的稀疏体素八叉树进行三角测量。

我该怎么做?你能推荐任何快速的算法吗?

可以使用行进立方体 (MC) 对标准体素模型进行三角剖分。但据我所知,我无法将此算法用于 SVO。 MC 算法基于用于生成三角形的 15 种基本模式(借助 LUT 以获得更好的性能)。但是这些模式不再适用于 SVO 体素,因为这些体素可以具有不同的大小,具体取决于树枝中的局部分辨率。

那么,其他人如何对他们的 SVO 进行三角测量?

【问题讨论】:

这个回答太模糊了。如果仅通过暴力破解就可以非常成功地对密集体素场进行网格划分,那么 SVO 应该只会比这更快。您需要更好地描述您的特定情况,在实施幼稚方法时发现的问题等。 @BartekBanachewicz 正如我所写:MC 算法对于 SVO 根本没有意义。它不能轻易地适应 SVO 结构。我还搜索了研究论文,但没有找到描述 SVO 三角剖分的论文,只有依赖于光线投射的基于 GPU 的解决方案。你需要什么澄清?我有一个 SVO 实现。一个体素由一个中心、一半长度的边缘和 0..8 个孩子组成。一切都以八叉树的顺序排列,从根开始。我想要一个体积表面的三角形网格。可以为每个实心八分圆创建三角形,但速度非常慢。 【参考方案1】:

有一种称为“Transvoxel 算法”的算法,您可以将其用于行进立方体。我不会在这里发布详细信息,但你可以谷歌它。它会进行一些内部体素细分。我有自己的曲面细分算法,它在某种程度上被简化了,因为它的情况很少,但是这两种情况一次只允许一个级别的分辨率变化。

您最好的选择可能是根本不使用 MC 并使用表面网络。主要的缺点是它可以生成非流形几何体(如果你关心的话)。还有其他几种变体,例如您可能还想研究的“双轮廓”。双轮廓允许尖角,但需要 Hermite 数据。我相信还有多种版本的双轮廓和/或表面网,但代价是增加了一些复杂性。

在任何情况下,所有这些东西都适用于体素八叉树,但它确实需要一些工作。

【讨论】:

以上是关于如何对 sparxe 体素八叉树 (SVO) 进行三角测量的主要内容,如果未能解决你的问题,请参考以下文章

PCL——八叉树Octree

PCL:八叉树Octree实现点云K近邻搜索

PCL:八叉树(Octree)实现点云半径内近邻搜索

C++ 八叉树容器

点云 | 求异(附C++源码)

octomap点云压缩