【问题标题】:Scenekit: Performance of SCNNode octrees/quadtrees vs all in root levelScenekit:SCNNode 八叉树/四叉树与根级别的所有性能
【发布时间】:2017-01-09 10:39:20
【问题描述】:

为了在 SceneKit 游戏中表示地形,我有大约 20k 个 SCNNode 以层次结构的形式构建,类似于八叉树或四叉树。这棵树不平衡 - 一些分支的伟大 (*n) 孙辈比其他分支多得多。

SceneKit 花费了多少额外的时间来获取单个 SCNNodes 以进行物理、渲染、添加/删除节点等,与它们在根级别都是平坦的情况相比?是否需要做很多额外的工作来遍历树的整个高度来迭代或执行随机访问,或者它只是不是一个显着的开销? (也许提前构建节点本身就足够聪明了?)

我不是在问图形引擎在理论上如何处理这个问题。我在问 SceneKit 实际上做了什么。

编辑:以防万一它让人们无法回答这个问题......我不需要 SceneKit 需要多少时间的确切数字,显然这取决于设备。我只是想知道这是否占很大比例。有没有人尝试过两种方法并进行比较,或者从一种方法切换到另一种方法并注意到是否存在显着差异?

感谢您的帮助。

【问题讨论】:

  • 看起来这个问题彻底击败了赏金猎人,但如果未来有任何优秀的天才能够勇敢地接受挑战,我们中的很多人仍然会喜欢答案。
  • 更新:见triple7的回答下的评论。

标签: ios 3d scenekit


【解决方案1】:

我也在研究这个问题,因为我的场景开始打包大量节点,但这是我的看法:

当您调用 node.childNode(withName: String, recursive: true) 时,这意味着实现使用某种形式的平衡或非平衡树,在二叉树、ab 树 b+ 树之间进行选择(在这种情况下)一个节点有多个超过某个阈值的子节点),你最终会得到一个 log|n|复杂性取决于您是要插入删除还是搜索树结构。 AVL 树通常将最常用的节点保留在层次结构中,这样您就可以减少计算量。

只看四叉树或 R 树结构,它们也可能有 log|n|复杂性,因为我们正在讨论进入根象限的迭代子象限。

最好知道您在子节点方面得到了什么样的实际结构,以了解采取哪种最佳策略。

顺便说一句,是什么促使您的地形拥有 20k 次 ndo? a您是否在地形上为每个贝塞尔点或顶点附加一个节点以进行一些变形?

【讨论】:

  • 所以...我做了一些测试和分析并扁平化了结构。结果树的高度,就像遍历到一个典型节点的 SCNNodes 的数量一样,似乎并不重要 - 但实际的节点数量是速度的一个重要因素,通过展平它你可以摆脱很多不可见的父节点,其唯一的工作是包含子节点。无论如何,感谢您的回复,为最佳答案投上一票:)
猜你喜欢
  • 1970-01-01
  • 2013-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多