Хабрахабр

Что нового в 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, будут применены к вашим приложениям автоматически.

А на вопросы я готов ответить в комментариях. Если для вас информация была полезной, поддержите меня стрелкой вверх.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть