为什么SceneKit的CPU使用率这么高?

3

我用SceneKit开发了一个应用程序。我在iPhone 10上进行测试,但为了优化,我切换到了iPhone 6。

我看到了几个问题。

即使我停止所有动画,CPU利用率仍然达到80%,只是显示静态相机视图。当动画完全功能时,它几乎保持不变。

FPS大部分时间都是60,但有时会降至59和56,但感觉像是1 FPS。

我使用点击与应用程序进行交互,但是iPhone 6的响应非常迟钝,并且大多数时间都会跳过点击。

在iPhone 10上,大多数时间动画都很流畅,当我向场景添加新节点时,我注意到偶尔会有中断和跳跃的行为。 为此,我尝试隐藏和取消隐藏节点,将它们添加到“didLoad”中,结果相同。 我没有发现点击检测方面的问题。

我将对象更改为基本形状以测试问题是否来自对象几何体,但没有成功。

几乎相同的结果,这是正常的吗?我的意思是,SceneKit适用于iPhone 10和以上的系列。


我没有iPhone 10,但我在iPhone 7上运行了一些相当复杂的动画,其中包含大量逻辑 - CPU使用率很高,但从未低于58 FPS - 反应非常灵敏。 - Voltan
我不明白的是,当preferredFramePerSecond为50或者因为系统只能提供这么多帧率时,为什么动作看起来那么糟糕。我的意思是,即使是30帧每秒也不应该那么糟糕。肯定有些我不知道的东西,因为如果你观看一个以24 FPS运动的电影,它们看起来要好得多。 - Hope
尽可能地,我会缓存带有图形或模型的节点,以备后用。iPhone 6 对于我所尝试的工作来说是一种挑战。是的,我也这么认为——56 FPS与59/60有很大不同。对我而言,低于55就可以玩,但并不理想。 - Voltan
1个回答

0

故事很长,从评论中延续,但我使用计时器进行移动,让渲染器尽可能自由滚动。 假设您正在执行以下操作 - update 中包含您的逻辑和其他内容吗?

extension GameViewController: SCNSceneRendererDelegate
{
    func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval)
    {
        update(vTime: time)
    }
}

我实际上使用的是 scheduledTimer,在计时器处理程序中,我正在执行主要任务,检查位置并发出动作指令或删除它们等,而不是 SCNSceneRendererDelegate。嗯,也许这就是问题所在! - Hope
我试过了。它解决了旧手机用户交互(如轻按)响应问题,但是在使用此功能的旧手机或新手机上,操作效果更差。 - Hope
1
我将arkit放入plist中,以便移除iPhone6/Plus(如果有这个选项的话)。这有点像黑客行为,但这是我找到的限制设备的唯一方法。我实际上正在测试iPad mini,但它根本行不通。一旦一切变得繁忙起来,就会变成浓稠的汤。 - Voltan
我曾考虑检测手机类型并取消旧型号的大部分动画。但是您的想法更尊重您的工作。 - Hope
我不喜欢排除旧手机,这是一个艰难的决定,但有了plist选项,我就不必再围绕它编程了,因为他们无法下载。少一些手机,也少一些麻烦 - 当我试图降低我的概念(如减少动画)以支持旧设备时,我感到很恶心 - 它不符合我想要做的精神。如果需要,之前的帖子[58103566]概述了我在游戏中如何构建事物。 - Voltan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接