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