繁体   English   中英

使用 ARKit 时如何减少发热?

[英]How can I reduce the heating while using ARKit?

我正在开发一个使用 Swift 和 ObjC 的 ARKit 应用程序。 有一个 ARSession 正在运行(总是使用ARWorldTrackingConfiguration ),我正在尝试单独使用它的功能。 到目前为止,我已经实现了图像跟踪、QR 检测和平面跟踪。 这些不是同时活动的。

没有场景视图。 只有一个金属视图 (MTKView),带有我自己的着色器,以便显示我从服务器接收的帧和我的相机源,并在必要时对服务器数据应用过滤器。

问题是手机很快就会变热。 5分钟或更短时间后,它会变成一个火球。 现在我知道我执行每个帧的操作(服务器通信和锚点管理)都会导致问题,但由于需要业务逻辑,我必须这样做。 我也知道跟踪是 CPU/GPU 密集型的。 但是我怎样才能让它变得更好,有什么建议吗?

注意:目前在 iPhone 12 Pro Max 上进行测试。

这是一个棘手的问题,因为症状可能是由于未优化的代码造成的。 既然您说您有“所需的业务逻辑”,您可能没有机会修复它。 此时我将只运行一些 memory 分析模板,如活动监视器或 CPU 计数器。 看看是否存在可以减少能源使用的精简计算。

除此之外,您还可以购买 iPhone 散热器。https://arstechnica.com/gadgets/2021/12/razers-rgb-smartphone-cooler-attaches-to-iphones-with-magsafe/

导致大部分能源影响的业务逻辑极不可能是您的业务逻辑,除非您的逻辑单独将 CPU 使用率固定在 75% 或更高。 事实是,ARKit 在后台执行了非常繁重的处理,并且还利用了硬件资源——2 个摄像头(在您的情况下使用 LiDAR 摄像头是 3 个),用于视觉惯性里程计的 ANE+Accelerometer,以及 GPU 和 CPU(后者更重用过的)。

确定您是否可以对此做任何事情的最佳方法是构建一个视图控制器,该控制器仅使用您选择的渲染层运行 vanilla ARKit 实现,并在 XCode 内的Debug Navigator中观察能量影响——特别是单击 Energy Impact并观察开销、CPU、GPU 和网络之间的故障(因为你提到它)。 注意 vanilla ARKit 实例和你的完整应用程序之间的区别,并决定相应地做什么。

如果基线 ARKit 能量影响对于您的用例来说太高了,您可以尝试禁用ARWorldTrackingConfiguration的某些功能(例如,sceneReconstruction 很重)或可能使用不同的配置类型。

否则,如果您的代码被证明是影响的主要部分,那么请尝试减少您处理的帧/秒数。 例如,您希望 ARKit 始终以 60fps 运行,因此可能只处理每 3 帧或 4 帧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM