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



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

仪器显示渲染器循环在冻结期间处于繁忙状态。

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

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

谢谢大家

随着ARKit 3.0及其卫星– RealityKit(具有优化渲染引擎和更改场景层次结构的框架,它是用 Swift 编写的,因此它没有 Objective-C 绑定)的发布,添加子级时,丢帧会减少到难以察觉的值

对于处理器为 A12 仿生和A13仿生的设备,这种可预测的ARKit3/RealityKit韧带行为尤其如此7 纳米工艺制造(当然,由于它们具有上一代神经引擎和强大的 GPU)。

对于处理器功能较弱的设备(A9、A10、A11),建议使用每个模型多边形总数不超过 10K 的 3D 模型,以及常用的着色器,如.blinn.phong(不是 PBR)。

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

然而,值得一提的是,与VR游戏不同,AR游戏消耗更多的处理能力,因此需要仔细优化。所以,你是绝对正确的,在使用节点之前渲染节点,这是游戏编程中的正常行为。

最新更新