将子项添加到场景ARKit / SceneKit时FPS会下降

时间:2018-01-23 19:04:52

标签: ios swift scenekit arkit

我正在研究ARKit项目4个月了。 我注意到在将一个子项添加到我的场景rootNode时,会有一个FPS丢弃。该设备冻结不到一秒钟。 我做了很多研究和试验,注意到所有Apple的代码示例在放置对象时都会使这个FPS下降。 无论是直接添加节点(scene.rootNode.addChild(child))还是在不同阶段(didUpdateAtTime,didApplyAnimations等等)的渲染器循环中添加节点都无关紧要。 我发现一旦将一个对象添加到场景中,下一个添加的对象将立即呈现。我使用在SceneKit编辑器中创建的3D模型,克隆它以生成我的不同节点,然后将它们添加为子节点。我在放置对象之前完成了这个加载工作。

仪器显示渲染器循环在冻结期间很忙。

我找到的唯一解决方案是在开始整个体验之前将我的节点添加到加载屏幕后面的场景中。

这是游戏编程中使用它们之前渲染节点的正常行为吗?

谢谢你们

1 个答案:

答案 0 :(得分:1)

ARKit 3.0 及其附属软件 RealityKit (具有优化的渲染引擎并更改了场景层次结构的框架,是用Swift编写的,因此没有Objective- C绑定),则在添加子级时将其丢弃帧减小为难以感知的值

ARKit3 / RealityKit韧带的这种可预测行为尤其适用于处理器为 A12 Bionic和 A13 Bionic的处理器nm过程(当然,由于它们具有最新一代的神经引擎和强大的GPU)。

对于处理器能力较低的设备(A9,A10,A11),建议使用多边形总数不超过每个模型10K的3D模型,并使用.blinn.phong(不是策略路由)。

我认为,对于使用游戏引擎的游戏和应用程序来说,这是非常普遍的做法,首先在使用它们之前将所有必要的游戏资产(例如3D模型,纹理,声音文件等)加载(​​或缓存)到RAM中。有关更多详细信息,请阅读 this article this article

但是,值得一提的是,与VR游戏不同,AR游戏消耗的处理能力要大得多,因此需要仔细优化它们。因此,您绝对正确,在使用节点之前先渲染它们,这在游戏编程中是正常现象。