如何在 SceneKit 渲染委托中节省 CPU 工作量?

How can I save CPU effort in SceneKit rendering delegates?

SceneKit 每秒调用其渲染委托六十次,以允许宿主应用程序调整包含场景中的参数以提供动画、物理等。

我的场景很大(360,000 个顶点)。几乎所有 (~95%) 场景每分钟都会稍微旋转一次(每 3,600 个代表调用一次)。场景的一小部分(大约 300 个节点 ~ 15,000 个顶点)每秒移动一次(每 60 个委托调用一次);在应用程序 'starts'(在 viewDidLoad 中)之前创建所有节点并设置它们的属性,然后如上所述,在委托调用中仅更改它们的位置。

我的帧刷新率仅保持在 60 fps,CPU 根据 Xcode 使用率约为 30%。所有这些努力都花在了渲染循环中(没有交互;没有其他工作)所以我有两个问题:

1) 考虑到我的应用程序的一般描述,30% CPU 似乎合理吗?更具体地说,由于我的委托代码看起来很简单并且从 <2% 的渲染循环中调用,我真的可以将 SceneKit 推向极限吗?

2) 如果是这样,是否有任何 SceneKit 技巧可以收回一些 CPU?例如,可以减慢委托调用速度吗?

这是在 2.8GHz/i7 2015 MacBook Pro 上使用 macOS 10.12.3 和 Xcode 8 (Swift 3)

为您的几何创建 SCNLevelOfDetail 个对象值得一试。

还有其他动静吗?你能减少你的观点 preferredFramesPerSecond 吗?

尝试使用 flattenedClone 展平节点及其子节点怎么样?