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
我会看看'SCNLevelOfDetail' .. ..对我来说是新的。 'preferredFramesPerSecond'变量只能用于> macOS 10.12(但它在那里效果很好)。一个新的发现是渲染循环花费了几乎所有的时间在“金属冲洗”中。 –
我不会移动相机距离场景(尚未),所以'SCNLevelOfDetail'现在没有帮助。 –
你试过了吗?你几乎可以肯定地将更多的顶点放到场景中,而不是像素,所以减少数量(使用LOD)会减少渲染的东西数量。 –