Что нового в ARKit 2.0
Сессии отсмотрены, документация перечитана, демо проекты сделаны, а значит, можно оформить всю собранную информацию в статью. Прошло две недели после окончания конференции WWDC.
В ARKit 1. В первой версии ARKit была возможность отслеживать перемещение телефона в пространстве, определять количество и теплоту света вокруг, а также получать информацию о горизонтальных плоскостях. 3, улучшили качество изображения, добавили определение вертикальных плоскостей, распознавание статичных 2D-изображений и автофокус. 5, который вышел вместе с iOS 11. 0. Давайте посмотрим, что добавили в версии 2.
Имея карту, можно инициализировать с помощью неё AR-сессию, после чего ранее расставленные объекты появятся в нужных местах. Нам дали возможность сохранять карту окружения вместе с расставленными объектами дополненной реальности. Сохранённую карту также можно передать на сервер и использовать на других устройствах.
Внутри этого объекта хранится информация об опорных точках, с помощью которых ARKit может восстановить нулевую координату сцены, а также массив ARAnchors
, к которым могут быть привязаны объекты. Реализовано это так: у ARSession
появился метод getCurrentWorldMapWithCompletionHandler
, который возвращает ARWorldMap
. Для восстановления карты нужно передать её в поле initialWorldMap
у ARSessionConfiguration
перед запуском сессии. ARWorldMap
можно сохранить или отправить куда-нибудь. Как только ARKit соберёт достаточное количество точек для восстановления, нулевая координата будет выставлена в правильное положение и статус сессии перейдёт в состояние .normal
. После запуска статус сессии перейдёт в состояние .limited
с причиной .relocalizing
.
Для лучшей работы Apple советует следующее:
- сканируйте сцену с разных сторон. Массив точек будет больше и точнее;
- окружение должно быть статическим и хорошо текстурированным;
- массив точек должен быть достаточно плотным.
Но нужно их учитывать при проектировании приложения. Самостоятельно следить за этими параметрами не нужно, так как теперь у ARFrame
есть поле worldMappingStatus
.
Зная положение каждого из устройств относительно карты окружения, можно построить многопользовательские сценарии. Механизм сохранения карты окружения позволил синхронизировать систему координат между несколькими устройствами.
На презентации была показана игра SwiftShot, в которой нужно стрелять из своих рогаток по рогаткам соперника.
Синхронизация действий пользователей происходит с помощью фреймворка MultipeerConnectivity. Игра написана на Swift + SceneKit. Исходники приложения можно скачать по ссылке.
Для этого у ARWorldTrackingConfiguration
появилось поле environmentTexturing
. Добавляя металлический объект виртуальной реальности на сцену, хотелось бы увидеть в нём отражение объектов реального мира. Если вы в качестве движка используете SceneKit
и выставите поле environmentTexturing
в .automatic
, вы получите вот такой результат:
Информация, которая не попала в кадр, генерируется с помощью алгоритмов машинного обучения. Получая изображение с камеры, ARKit строит кубическую карту с текстурой окружающей среды.
5 появилось отслеживание только статичных изображений. В ARKit 1. Подобный функционал раньше предоставлял SDK Vuforia. Во второй версии ограничение снято, и теперь можно получать координаты перемещающихся изображений. На презентации в качестве примера использования показали замену фото на видео в фоторамке:
Xcode выдаст предупреждение, если это требование не соблюдается. Для лучшего трекинга нужно использовать контрастные, хорошо текстурированные изображения с отчётливыми признаками.
В конфигурацию передаётся массив trackingImages
и выставляется maximumNumberOfTrackedImages
. Для отслеживания изображений нужно использовать ARImageTrackingConfiguration
. Координаты изображения будут возвращены в виде ARImageAnchor
.
Перед распознаванием объект нужно отсканировать. Также добавили поддержку распознавания статичных 3D-объектов. Объект сканирования должен быть монолитным, матовым и хорошо текстурированным. Сделать это можно с помощью приложения от Apple.
Информацию об объектах вы будете получать в ARFrame
. Для отслеживания объектов нужно создать ARReferenceObject из файла или каталога ресурсов и добавить его к ARWorldTrackingConfiguration.detectionObjects
.
В качестве примера на презентации показали отображение информации о статуэтке в музее в дополненной реальности.
Во второй версии мы увидим три новшества: В предыдущих версиях можно было получать координаты и поворот лица, полигональную сетку лица и массив блендшейпов (51 эмоция с прогрессом от нуля до единицы).
определение направленного света.
С его помощью можно определить интенсивность, температуру и направление света. ARKit 2 использует изображение лица как источник информации о свете. Это позволит сделать маски более реалистичными;
отслеживание языка.
От себя могу добавить, что пробовали показать язык практически все мои знакомые, которым я давал поиграться с animoji; К блендшейпам добавили tongueOut
, который показывает [0,1] степень «высуности» языка.
отслеживание взгляда.
В интернете уже есть демки с примерами использования: У ARFaceAnchor появились три новых поля: leftEyeTransform
, rightEyeTransform
и lookAtPoint
.
- ускорились инициализация и определение плоскостей;
- стало точнее отслеживание телефона в пространстве и определение плоскостей;
- улучшилась точность определения границ плоскостей при расширении плоскости;
- добавлена поддержка соотношения сторон 4:3 (теперь этот формат будет выбран по умолчанию).
Для последнего нужно пересобрать приложение с новым SDK. Все улучшения, кроме перехода на соотношение сторон 4:3, будут применены к вашим приложениям автоматически.
А на вопросы я готов ответить в комментариях. Если для вас информация была полезной, поддержите меня стрелкой вверх.