Оглавление
Давным — давно, когда персонажи фильма “Звездные войны” звонили друг другу по видеосвязи — это казалось верхом развития технологий. Теперь это называют, например, скайп и даже твоя бабушка знает, как им пользоваться. Дополненная реальность — звучит, как очередная тема для фантастического фильма, однако она уже сегодня с легкостью помещается в простом смартфоне. Не так давно в ответ на ARKit от Apple, компания Google выпускает ARCore — библиотеку, позволяющую создавать дополненную реальность на платформе Android.
Впрочем, постойте. У нас ведь есть прекрасные приложение на мобильные платформы. Зачем нам эти AR и VR? Ответом на этот вопрос станет “погруженное вычисление” — термин, обозначающий взаимодействие с данными самым естественным способом. Это возможность добавлять цифровой контент в нашу реальность. Объекты, созданные с помощью ARСore, пропорционально масштабируются в реальном мире. К тому же, дополненная реальность доступна каждому, у кого есть современный смартфон. Таким образом, мы строим мост между 2D и 3D миром.
Зачем это нужно — спросите вы? А разве не здорово взять и расставить мебель у себя в комнате до того, как вы ее купили. Покрасить автомобиль в любой цвет и выбрать тот, который вам больше всего нравится. Или просто оставлять виртуальные напоминания на стенах своей квартиры.
Немного истории
История дополненной реальности на Android начинается в 2014 году с проекта Tango. Он не завоевал широкой популярности на рынке, поскольку его работа сильно зависела от сенсора глубины — устройства в смартфоне, рассчитывающего расстояние на основании отраженной длины инфракрасной волны. Сенсор позволял помещать девайс в виртуальное пространство, являющееся отражением реального. Однако у него были серьезные ограничения. Так максимально доступное расстояние составляло всего 4 метра. А расстояние, отраженное от ярких или зеркальных поверхностей, вообще не выстраивалось.
В результате компания Google задалась целью создать дополненную реальность на Android, исключив зависимость от аппаратных средств. Так появился ARCore. Ему абсолютно наплевать на сенсор глубины. Таким образом, опыт, полученный в процессе работы над Tango, для него не пригодился. Но послужил хорошей стартовой площадкой. На сегодня ARCore имеет около 100 миллионов потенциальных пользователей.
Что под капотом?
Концептуально, в основе ARCore лежит 3 основных положения — motion tracking, environment understanding и light estimation.
Motion tracking
Когда ваш мобильный телефон перемещается по всему миру, ARCore объединяет визуальные данные с камеры устройства, чтобы оценить положение и ориентацию объектива относительно времени и пространства. В этой категории следует выделить разные калибровки. Перечислим основные:
- Оптическая
- Pinholde model — математическая модель описывающая отношение между координатами точки в трехмерном пространстве с ее проекцией на полотно, а также Field of View (FoV) — модель описывающая искажение перспективы изображения.
- Фотометрическая калибровка — карта интенсивности цветов.
- Моделирование на основе инерции
- Измеряется ускорение — не дистанция и не скорость.
- Моделирование на основе инерции не сводится к категории “да или нет”. Это — больше статистика, необходимая для конкретного use case.
Впрочем, существует температурная проблема при заводской калибровке IMU. Различные производители изготавливают ее при разной температуре, поэтому данные на различных девайсах могут различаться.
Environment understanding
ARCore ищет кластеры характерных точек, которые, как представляется, лежат на общих горизонтальных поверхностях и делают их доступными для вашего приложения в виде плоскостей.
- В основе понимание окружения лежит технология SLAM — simultaneous localization and mapping. SLAM карта является графиком 3D точек, которые представляют собой разреженное облако, где каждая отметка соответствует координатам оптического объекта (например, угол таблицы).
- Также как и с измерениями на основе ускорения, SLAM опирается на карту точек, которые могут быть более или менее надежными.
- Основная задача SLAM — построение и обновление карты неизвестной среды при одновременном отслеживании местоположения агента внутри нее.
- Также как и Tango, имеет проблемы с зеркальными поверхностями
Light estimation
ARCore может обнаружить среднюю интенсивность изображения камеры, так что вы получаете возможность осветить виртуальные объекты так же, как освещены объекты окружающей среды.
Применение
Чтобы начать использовать ARСore в Android приложениях вам понадобится:
- Загрузить ARCore и установить его
- Базовое понимание разработки под Android с OpenGL
- Общие знания по Android framework
Итак, основные классы в AR core это Session, Frame, Plane, Anchor.
Session. Необходимо проверить поддерживает ли девайс ARCore и если это так — создать конфигурацию.
Frame. Необходимо получить объект камеры и обновить кадр. Основной вопрос на данном этапе — что использовать? Blocking или последнее изображение камеры? Blocking позволяет уменьшить рендеринг до частоты кадров камеры. Последнее же изображение помогает рендирить объекты, как можно быстрее.
Anchors. В этом же методе onDraw() необходимо проверить было ли касание в полигоне и если оно было — расположить якорь. Якорей может быть не больше двадцати.
Proection Matrix. Матрица проекции содержит “позу” -где камера сейчас в мире. Она отвечает за сопоставление виртуальной и реальной камеры. В этом же методе onDraw() необходимо получить матрицу проекций, указав в каких рамках она будет располагаться. В примере ниже мы указываем, что трекаем объекты на расстоянии от 10 см до 100 метров. Из нашего объекта (кадра) мы получаем облако точек (Помните SLAM и достоверные точки?). Далее обновляем “облако точек”, передавая ему матрицу проекции и матрицу видения камеры. Если матрица проекции содержит свойства камеры, а матрица соответствия видов содержит местоположение камеры, то матрица модели получит положение якоря. Теперь вы можете поместить пиксели в нужном месте на своем экране.
Render object. Далее мы проходимся по всех якорям и обновляем объект, который мы хотим нарисовать. Мы обновляем матрицу нашего объекта и матрицу его тени. Наконец, вызываем у них метод draw(). Полученный в примере выше объект “light intensity” мы передаем в качестве параметра нашему объекту и объекту, отвечающему за тень.
Резюме
В целом, мы описали практически всё, что нужно знать, за исключением рендера 3D моделей. Но это — отдельная тема.
Главную проблему технологии AR можно сформулировать примерно так: ок, это круто, но что мы можем с этим сделать? Пожалуй, на сегодня не существует какой-либо killer фичи, которая бы раскрыла ARCore в полной мере. Основная задача — удержать пользователя в приложении, хотя на 15 минут. И чтобы знакомство с ним не закончилось фразой: “Да, это забавно, но не более”.
Одними из наиболее успешных приложений, использующих технологию ARCore, стоит признать программы, располагающие мебель по различным интерьерам и подбирающие цвета для различных объектов (автомобили, одежда, обои и т.д.). Отдельным направлением ARcore скоро станут детские приложения. Прежде всего — игрушки.
Еще мы хотим отметить азиатский рынок, лишенный удовольствия пользоваться Google Play. Этот регион мог бы стать крупнейшим рынком сбыта для продуктов, использующих технологию дополненной реальности. Однако представителям крунпейшего континента придется искать альтернативу ARCore.
Хочется верить, что ARСore полностью раскроет свой потенциал в технологии Google Glass. К сожалению, сейчас проект приостановлен, из-за множества проблем, связанных в том числе с законодательством. Впрочем, Google уже возобновил работу и анонсировал грядущий акцент на промышленном применении очков — заводы, фабрики, высокотехнологичные концерны. Это направление выглядит наиболее перспективным. Оно вполне способно превратить дополненную реальность из забавной игрушки в полноценный инструмент.