Использовать пользовательское значение для предпочитаемого фреймаPerSecond - PullRequest
0 голосов
/ 24 августа 2018

Я бы хотел, чтобы мое приложение ARkit работало с определенным числом кадров в секунду (в моем случае 25 кадров в секунду).Я могу получить это, изменив этот параметр: предпочитаемое значениеFramesPerSecond , но оно всегда устанавливает 30 кадров в секунду, а не 25. Он работает нормально для 5, 15, 20, 30, 45 или 60, но почему не для 25 кадров в секунду?

override func viewDidLoad() {

    super.viewDidLoad()
    ...
    sceneView.preferredFramesPerSecond = 25
    ...
}

Заранее большое спасибо!

1 Ответ

0 голосов
/ 24 августа 2018

Свойство экземпляра preferredFramesPerSecond предназначено для предпочтительной частоты кадров для обратного вызова ссылки дисплея, но не для камеры.

var preferredFramesPerSecond: Int { get set }

Когда вы указываете предпочтительную частоту кадров для ссылки дисплея, оноуведомляет цель с максимально возможной скоростью на основе возможностей аппаратного обеспечения и других задач, которые может выполнять ваша игра или приложение. Фактическая выбранная частота кадров обычно является фактором максимальной частоты обновления экрана для обеспечения постоянной частоты кадров .Например, если максимальная частота обновления экрана составляет 60 кадров в секунду, это также самая высокая частота кадров, которую канал отображения устанавливает в качестве фактической частоты кадров.Однако, если вы запрашиваете более низкую частоту кадров, в качестве ссылки на отображение может быть выбрано 30, 20 или 15 кадров в секунду или другая скорость.Выберите частоту кадров, которую ваше приложение может постоянно поддерживать.

Во время сеанса AR непрерывно захватывает видеокадры с камеры устройства.Для каждого кадра ARKit анализирует изображение вместе с данными от устройства обнаружения движения устройства , чтобы оценить реальное положение устройства.ARKit предоставляет эту информацию об отслеживании и параметры изображения в виде объекта ARFrame.

enter image description here

enter image description here

Частота кадров для устойчивой дополненной реальности должна бытьМинимум 60 кадров в секунду.

Но я должен заметить, что передняя камера глубины изображения в iPhone X захватывает изображение zDepth с частотой 15 Гц (AVDepthData при 15 кадрах в секунду) вместо обычного изображения RGBкоторые должны быть зафиксированы с частотой 60 Гц.

enter image description here

Чтобы запросить ARKit о положении камеры, вы можете использовать методы, перечисленные здесь (для создания пользовательского AR View путем рендеринга изображений с камеры и использования информации отслеживания положения для отображения наложенного содержимого): Отображение опыта AR с металлом .

Или используйте такой подход:

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
    }
}
...