为了表示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是否要在地形上为每个贝塞尔点或顶点附加一个节点以进行某些变形?
关于ios - Scenekit:SCNNode八叉树/四叉树的性能与所有根级的性能对比,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39273324/