为 preferredFramesPerSecond 使用自定义值

cco*_*nur 4 augmented-reality scenekit swift arkit

我想让我的 ARkit 应用程序以特定的每秒帧数(在我的情况下为 25 fps)运行。我可以通过修改这个参数来得到这个:preferredFramesPerSecond但它总是设置 30 fps,而不是 25。它适用于 5、15、20、30、45 或 60,但为什么不适用于 25 fps?

override func viewDidLoad() {

    super.viewDidLoad()
    ...
    sceneView.preferredFramesPerSecond = 25
    ...
}
Run Code Online (Sandbox Code Playgroud)

非常感谢!

ARG*_*Geo 5

Instance 属性preferredFramesPerSecond用于显示链接回调的首选帧速率,但不适用于相机。

var preferredFramesPerSecond: Int { get set }
Run Code Online (Sandbox Code Playgroud)

当您为显示链接指定首选帧速率时,它会根据硬件功能和您的游戏或应用程序可能正在执行的其他任务,以尽可能接近的速率通知目标。选择的实际帧率通常是屏幕最大刷新率的一个因素,以提供一致的帧率。例如,如果屏幕的最大刷新率是每秒60帧,那么这也是显示链接设置的最高帧率作为实际帧率。但是,如果您要求较低的帧速率,则显示链接可能会选择每秒 30、20 或 15 帧或其他速率作为实际帧速率。选择您的应用可以始终保持的帧速率。

正在运行的 AR 会话会持续从设备摄像头捕获视频帧。对于每一帧,ARKit 都会分析图像以及来自设备运动传感硬件的数据,以估计设备的真实位置。ARKit 以 ARFrame 对象的形式提供这些跟踪信息和成像参数。

在此处输入图片说明

在此处输入图片说明

强大的增强现实的帧速率必须至少为 60 fps。

但我必须注意到 iPhone X 中的前置深度图像摄像头以 15 Hz(AVDepthData以 15 fps)的频率捕获 zDepth 图像,而不是必须以 60 Hz 捕获的常规 RGB 图像。

在此处输入图片说明

要向 ARKit 询问帧相机位置,您可以使用此处列出的方法(AR View通过渲染相机图像和使用位置跟踪信息来显示叠加内容来构建自定义):Displaying an AR Experience with Metal

或者使用这样的方法:

class ViewController: UIViewController, ARSCNViewDelegate, ARSessionDelegate {

    @IBOutlet var sceneView: ARSCNView!

    override func viewDidLoad() {
        super.viewDidLoad()
        sceneView.delegate = self          // ARSCNViewDelegate
        sceneView.session.delegate = self  // ARSessionDelegate
    } 

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        let configuration = ARWorldTrackingSessionConfiguration()
        sceneView.session.run(configuration)
    }

    func session(_ session: ARSession, didUpdate frame: ARFrame) {
        let currentTransform = frame.camera.transform
    }
}
Run Code Online (Sandbox Code Playgroud)