Отрегулируйте фокусировку камеры в ARKit

Я хочу настроить фокусировку физической камеры устройства в режиме расширенной реальности. (Я не говорю об объекте SCNCamera.)
В форуме форума Apple Dev, я читал, что автофокус будет мешать обнаружению объекта ARKit, что имеет смысл для меня.

Теперь я работаю над приложением, где пользователи будут близко к объекту, на который они смотрят. Фокусировка камеры по умолчанию делает все очень размытым, когда ближе к объекту, чем около 10 см.

Можно ли настроить фокусировку камеры перед инициализацией сцены или, желательно, на сцене?


20.01.2018
По-видимому, решения этой проблемы по-прежнему нет. Вы можете узнать больше об этом на этот пост reddit и этот форум разработчиков post для частных обходных API API и другой (не помогающей) информации.


25.01.2018
@AlexanderVasenin предоставил полезное обновление, указывающее на документацию Apple. Он показывает, что ARKit сможет поддерживать не только фокусировку, но и автофокусировку с iOS 11.3.
См. Мой пример использования ниже.

Ответ 1

Как заявленный Александром, iOS 11.3 приносит автофокус в ARKit.
соответствующий сайт документации показывает, как это объявлено:

var isAutoFocusEnabled: Bool { get set }

Вы можете получить к нему доступ таким образом:

var configuration = ARWorldTrackingConfiguration()
configuration.isAutoFocusEnabled = true // or false

Однако, поскольку по умолчанию это true, вам не нужно даже устанавливать его вручную, если вы не решите отказаться.

Ответ 2

UPDATE: Начиная с iOS 11.3 ARKit поддерживает автофокусировку, и по умолчанию она включена (подробнее). Ручная фокусировка по-прежнему недоступна.


До iOS 11.3 ARKit не поддерживал настройку ручной фокусировки и автофокусировку.

Вот ответ Apple на эту тему (октябрь 2017):

ARKit не запускается с включенной автофокусом, так как это может отрицательно повлиять на определение плоскости. Существует существующий запрос функции для поддержки автофокусировки и нет необходимости запрашивать дополнительные запросы. Любые другие несоответствия фокуса должны быть представлены как отчеты об ошибках. Обязательно включите модель устройства и версию ОС. (источник)

Существует другой поток на форумах Apple, на которых разработчик утверждает, что он смог настроить автофокус, вызывая метод AVCaptureDevice.setFocusModeLocked(lensPosition:completionHandler:) на private AVCaptureDevice, используемый ARKit, и похоже, что это не влияет на отслеживание. Хотя сам метод является публичным, ARKit AVCaptureDevice нет, поэтому использование этого взлома в производстве скорее всего приведет к отказу в App Store.