Scenekit:SCNNode octrees/quadtrees 与所有根级别的性能对比
Scenekit: Performance of SCNNode octrees/quadtrees vs all in root level
为了在 SceneKit 游戏中表示地形,我有大约 20k 个 SCNNodes 在层次结构中构建,类似于八叉树或四叉树。这棵树不平衡 - 一些分支的曾 (*n) 孙辈比其他分支多得多。
SceneKit 花费多少额外时间来获取物理、渲染、adding/deleting 节点等的各个 SCNNode 与它们在根级别都是平坦的相比?它是否必须做很多额外的工作来遍历树的整个高度只是为了迭代或执行随机访问,或者这只是一个不显着的开销? (也许提前构造节点本身就足够聪明了?)
我不是在问图形引擎理论上如何处理这个问题。我在问 SceneKit 到底做了什么。
编辑:以防万一它让人们不愿回答这个问题......我不需要 SceneKit 花费多少时间的确切数字,显然这无论如何都取决于设备。我只想知道这是否占了很大一部分时间。有没有人有尝试过两种方法并进行比较,或者从一种方法切换到另一种方法并注意到是否存在显着差异的经验?
感谢您的帮助。
我也在研究这个问题,因为我的场景开始包含大量节点,但这是我的看法:
当您调用 node.childNode(withName: String, recursively: true) 时,这意味着实现使用了某种形式的平衡树或非平衡树,您可以在二叉树、a-b 树、b+ 树之间进行选择(在一个节点有多个子节点超过某个阈值的情况下),你最终会得到一个 log|n|复杂性取决于您是要插入删除还是搜索树结构。 AVL 树通常将最常用的节点保留在层次结构中,这样您就可以减少计算量。
单看四叉树或者R树结构,应该也有log|n|复杂性,因为我们正在讨论进入根象限的迭代子象限。
最好知道你在子节点方面得到了什么样的实际结构,以了解采取什么最佳策略。
附带说明一下,是什么促使您的地形拥有 20 k ndoes? a你是否在你的地形上为每个贝塞尔点或顶点附加一个节点来做一些变形?
为了在 SceneKit 游戏中表示地形,我有大约 20k 个 SCNNodes 在层次结构中构建,类似于八叉树或四叉树。这棵树不平衡 - 一些分支的曾 (*n) 孙辈比其他分支多得多。
SceneKit 花费多少额外时间来获取物理、渲染、adding/deleting 节点等的各个 SCNNode 与它们在根级别都是平坦的相比?它是否必须做很多额外的工作来遍历树的整个高度只是为了迭代或执行随机访问,或者这只是一个不显着的开销? (也许提前构造节点本身就足够聪明了?)
我不是在问图形引擎理论上如何处理这个问题。我在问 SceneKit 到底做了什么。
编辑:以防万一它让人们不愿回答这个问题......我不需要 SceneKit 花费多少时间的确切数字,显然这无论如何都取决于设备。我只想知道这是否占了很大一部分时间。有没有人有尝试过两种方法并进行比较,或者从一种方法切换到另一种方法并注意到是否存在显着差异的经验?
感谢您的帮助。
我也在研究这个问题,因为我的场景开始包含大量节点,但这是我的看法:
当您调用 node.childNode(withName: String, recursively: true) 时,这意味着实现使用了某种形式的平衡树或非平衡树,您可以在二叉树、a-b 树、b+ 树之间进行选择(在一个节点有多个子节点超过某个阈值的情况下),你最终会得到一个 log|n|复杂性取决于您是要插入删除还是搜索树结构。 AVL 树通常将最常用的节点保留在层次结构中,这样您就可以减少计算量。
单看四叉树或者R树结构,应该也有log|n|复杂性,因为我们正在讨论进入根象限的迭代子象限。
最好知道你在子节点方面得到了什么样的实际结构,以了解采取什么最佳策略。
附带说明一下,是什么促使您的地形拥有 20 k ndoes? a你是否在你的地形上为每个贝塞尔点或顶点附加一个节点来做一些变形?