2017-03-14 41 views
0

SceneKit每秒调用其渲染代表60次,以允许主机应用程序调整所包含场景中的参数以提供动画,物理等。如何在SceneKit渲染代表中节省CPU工作量?

我的场景很大(360,000个顶点)。几乎所有(〜95%)的场景每分钟都会稍微旋转一圈(每3,600个代表电话)。一个非常小的剩余场景(约300个节点〜15,000个顶点)每秒移动一次(每60个代表呼叫);所有节点在应用程序“开始”之前(在viewDidLoad)被创建并且它们的属性被设置,并且然后只有它们的位置如上所述在委托调用中被改变。

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

1)做30%的CPU似乎是合理的,因为我的应用程序的这种一般描述?更具体地说,因为我的委托代码看起来很简单,并且从渲染循环的2%调用,我真的可以驾驶SceneKit达到极限吗?

2)如果是这样,有没有任何SceneKit技巧来扣回一些CPU?例如,代表通话费率可以减慢吗?

这是和MacOS 10.12.3和Xcode中8(SWIFT 3)在2.8GHz的/ i7的2015年的MacBook Pro

回答

1

创建SCNLevelOfDetail对象为您的几何形状是值得一试。

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

+0

我会看看'SCNLevelOfDetail' .. ..对我来说是新的。 'preferredFramesPerSecond'变量只能用于> macOS 10.12(但它在那里效果很好)。一个新的发现是渲染循环花费了几乎所有的时间在“金属冲洗”中。 –

+0

我不会移动相机距离场景(尚未),所以'SCNLevelOfDetail'现在没有帮助。 –

+0

你试过了吗?你几乎可以肯定地将更多的顶点放到场景中,而不是像素,所以减少数量(使用LOD)会减少渲染的东西数量。 –

1

如何试图展平节点,它是使用flattenedClone的孩子。

+0

实际上我没有很多节点(大约400个),一个节点是一个非常详细的线几何,有大约350,000个顶点[因此它已经像我'变平了')。将它分解成3,500个顶点的100个节点会更有效率[考虑到'flattenedClone'的描述表明更少的节点更好,我猜不可以]。我觉得我在这里逆向工程SceneKit! –