Что нового в ARKit 2.0

в 8:45, , рубрики: AR и VR, arkit, iOS, ios development, wwdc, WWDC 2018, Блог компании FunCorp, разработка мобильных приложений, Разработка под AR и VR, разработка под iOS

Прошло две недели после окончания конференции WWDC. Сессии отсмотрены, документация перечитана, демо проекты сделаны, а значит, можно оформить всю собранную информацию в статью.

Что нового в ARKit 2.0 - 1

В первой версии ARKit была возможность отслеживать перемещение телефона в пространстве, определять количество и теплоту света вокруг, а также получать информацию о горизонтальных плоскостях. В ARKit 1.5, который вышел вместе с iOS 11.3, улучшили качество изображения, добавили определение вертикальных плоскостей, распознавание статичных 2D-изображений и автофокус. Давайте посмотрим, что добавили в версии 2.0.

Сохранение и восстановление AR-карты

Нам дали возможность сохранять карту окружения вместе с расставленными объектами дополненной реальности. Имея карту, можно инициализировать с помощью неё AR-сессию, после чего ранее расставленные объекты появятся в нужных местах. Сохранённую карту также можно передать на сервер и использовать на других устройствах.

Реализовано это так: у ARSession появился метод getCurrentWorldMapWithCompletionHandler, который возвращает ARWorldMap. Внутри этого объекта хранится информация об опорных точках, с помощью которых ARKit может восстановить нулевую координату сцены, а также массив ARAnchors, к которым могут быть привязаны объекты. ARWorldMap можно сохранить или отправить куда-нибудь. Для восстановления карты нужно передать её в поле initialWorldMap у ARSessionConfiguration перед запуском сессии. После запуска статус сессии перейдёт в состояние .limited с причиной .relocalizing. Как только ARKit соберёт достаточное количество точек для восстановления, нулевая координата будет выставлена в правильное положение и статус сессии перейдёт в состояние .normal.

Для лучшей работы Apple советует следующее:

  • сканируйте сцену с разных сторон. Массив точек будет больше и точнее;
  • окружение должно быть статическим и хорошо текстурированным;
  • массив точек должен быть достаточно плотным.

Самостоятельно следить за этими параметрами не нужно, так как теперь у ARFrame есть поле worldMappingStatus. Но нужно их учитывать при проектировании приложения.

Многопользовательская дополненная реальность

Механизм сохранения карты окружения позволил синхронизировать систему координат между несколькими устройствами. Зная положение каждого из устройств относительно карты окружения, можно построить многопользовательские сценарии.

На презентации была показана игра SwiftShot, в которой нужно стрелять из своих рогаток по рогаткам соперника.

Что нового в ARKit 2.0 - 2

Игра написана на Swift + SceneKit. Синхронизация действий пользователей происходит с помощью фреймворка MultipeerConnectivity. Исходники приложения можно скачать по ссылке.

Отражение окружающей среды

Добавляя металлический объект виртуальной реальности на сцену, хотелось бы увидеть в нём отражение объектов реального мира. Для этого у ARWorldTrackingConfiguration появилось поле environmentTexturing. Если вы в качестве движка используете SceneKit и выставите поле environmentTexturing в .automatic, вы получите вот такой результат:

Что нового в ARKit 2.0 - 3

Получая изображение с камеры, ARKit строит кубическую карту с текстурой окружающей среды. Информация, которая не попала в кадр, генерируется с помощью алгоритмов машинного обучения.

Отслеживание перемещающихся 2D-изображений

В ARKit 1.5 появилось отслеживание только статичных изображений. Во второй версии ограничение снято, и теперь можно получать координаты перемещающихся изображений. Подобный функционал раньше предоставлял SDK Vuforia. На презентации в качестве примера использования показали замену фото на видео в фоторамке:

Что нового в ARKit 2.0 - 4

Для лучшего трекинга нужно использовать контрастные, хорошо текстурированные изображения с отчётливыми признаками. Xcode выдаст предупреждение, если это требование не соблюдается.

Для отслеживания изображений нужно использовать ARImageTrackingConfiguration. В конфигурацию передаётся массив trackingImages и выставляется maximumNumberOfTrackedImages. Координаты изображения будут возвращены в виде ARImageAnchor.

Отслеживание статичных 3D-объектов

Также добавили поддержку распознавания статичных 3D-объектов. Перед распознаванием объект нужно отсканировать. Сделать это можно с помощью приложения от Apple. Объект сканирования должен быть монолитным, матовым и хорошо текстурированным.

Для отслеживания объектов нужно создать ARReferenceObject из файла или каталога ресурсов и добавить его к ARWorldTrackingConfiguration.detectionObjects. Информацию об объектах вы будете получать в ARFrame.

В качестве примера на презентации показали отображение информации о статуэтке в музее в дополненной реальности.

Отслеживание лица

В предыдущих версиях можно было получать координаты и поворот лица, полигональную сетку лица и массив блендшейпов (51 эмоция с прогрессом от нуля до единицы). Во второй версии мы увидим три новшества:

определение направленного света.

ARKit 2 использует изображение лица как источник информации о свете. С его помощью можно определить интенсивность, температуру и направление света. Это позволит сделать маски более реалистичными;

отслеживание языка.

К блендшейпам добавили tongueOut, который показывает [0,1] степень «высуности» языка. От себя могу добавить, что пробовали показать язык практически все мои знакомые, которым я давал поиграться с animoji;

отслеживание взгляда.

У ARFaceAnchor появились три новых поля: leftEyeTransform, rightEyeTransform и lookAtPoint. В интернете уже есть демки с примерами использования:

Общие улучшения в новой версии:

  • ускорились инициализация и определение плоскостей;
  • стало точнее отслеживание телефона в пространстве и определение плоскостей;
  • улучшилась точность определения границ плоскостей при расширении плоскости;
  • добавлена поддержка соотношения сторон 4:3 (теперь этот формат будет выбран по умолчанию).

Все улучшения, кроме перехода на соотношение сторон 4:3, будут применены к вашим приложениям автоматически. Для последнего нужно пересобрать приложение с новым SDK.


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

Автор: vdugnist

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js