使用不准确阈值创建简化边界
Creating simplified bounds with an inaccuracy threshold
给定一组非旋转 AABB 界限,我希望从原始集合创建一组更简单的界限,允许一定程度的不准确性。
一些例子:
我正在使用 Bounds 在 Unity 中处理此问题,但这只是基本的 AABB 比较内容,与 Unity 无关。我想 某人 一定在过去的某个时候为此制定了一个系统,但我没有运气四处寻找。封装边界很容易,但这更难,因为您不能一一遍历每个边界。有时只有通观全局才能找到更简单的解决方案。
快速性能并不重要,但会很好。两个方向上的不准确性都是可以的(即边界可能比实际大小少或多一点)。如果有帮助,我希望原始集中的所有边界都连接到某个地方——单独的组中没有自由浮动的部分。
我不希望任何人编写一个完整的系统来解决这个问题,我更希望它已经被解决了,或者可能有一个我还没有想到的明显的过程来实现它。
这听起来可以用表面积启发式 (SAH) 来处理。 SAH 通常用于光线追踪,以在存储三角形的情况下构建更好的树状结构。有多个来源对此进行了更多讨论。一个好处是 Wald's thesis 第 7.3 章。
构建SAH的基本思路是从整体space开始,递归划分。划分位置是通过遍历所有合理位置并计算两个子节点的表面积来确定的。合理的位置是任何三角形都有其上限或下限的位置。扫完所有候选后,使用子类中总表面积最小的划分。
如果 SAH 对您的申请来说不是一个好主意,您可以使用类似的方式扫描所有候选对象,但计算例如 AABB 中额外的 space。
给定一组非旋转 AABB 界限,我希望从原始集合创建一组更简单的界限,允许一定程度的不准确性。
一些例子:
我正在使用 Bounds 在 Unity 中处理此问题,但这只是基本的 AABB 比较内容,与 Unity 无关。我想 某人 一定在过去的某个时候为此制定了一个系统,但我没有运气四处寻找。封装边界很容易,但这更难,因为您不能一一遍历每个边界。有时只有通观全局才能找到更简单的解决方案。
快速性能并不重要,但会很好。两个方向上的不准确性都是可以的(即边界可能比实际大小少或多一点)。如果有帮助,我希望原始集中的所有边界都连接到某个地方——单独的组中没有自由浮动的部分。
我不希望任何人编写一个完整的系统来解决这个问题,我更希望它已经被解决了,或者可能有一个我还没有想到的明显的过程来实现它。
这听起来可以用表面积启发式 (SAH) 来处理。 SAH 通常用于光线追踪,以在存储三角形的情况下构建更好的树状结构。有多个来源对此进行了更多讨论。一个好处是 Wald's thesis 第 7.3 章。
构建SAH的基本思路是从整体space开始,递归划分。划分位置是通过遍历所有合理位置并计算两个子节点的表面积来确定的。合理的位置是任何三角形都有其上限或下限的位置。扫完所有候选后,使用子类中总表面积最小的划分。
如果 SAH 对您的申请来说不是一个好主意,您可以使用类似的方式扫描所有候选对象,但计算例如 AABB 中额外的 space。