Сама по себе технология дополненной реальности – отличная штука. И мы давно уже присматривались, как бы её применить в нашем проекте «Узнай Москву». Наконец, все сложилось, в приложении появилась опция «AR». Достаточно навести камеру смартфона на улицу, чтобы увидеть, какие достопримечательности находятся рядом, почитать информацию о них и даже пройти по маршруту в режиме дополненной реальности – ведение по маршруту. Как мы к этому пришли, с помощью чего и по какой логике реализовали, рассказываем в этой статье.
«А давайте сделаем AR!»
С момента, когда в нашей команде были впервые сказаны эти слова, прошло немало времени. Уже тогда хотелось протестировать технологию, применить её базовые механики. Но к реальному воплощению этой идеи мы подошли только тогда, когда ответили на несколько основных вопросов.
Сначала появились вопросы по технически-организационным моментам: как и на базе каких технологий внедрять AR? Сколько это потребует времени и сил?
Затем по практической составляющей: зачем этот AR нужен пользователям приложения, что заставит их нажать на заветную кнопку, да еще и не один раз? Какую дополнительную пользу оно им принесет?
Наконец, дошли до контентной части: где взять подходящий контент и какие механики его использования выбрать?
Изучаем предметную область
Анализ возможностей существующих SDK для разработки AR-продуктов не занял много времени. Сразу нарисовались два основных варианта: Wukitude и ARKit/ARcore. У каждого из них есть свои сильные стороны и подводные камни. Например, Wukitude является очень мощным и достаточно универсальным инструментом, но при этом и весьма дорогим. В то же время нативные AR SDK бесплатны, но требуют больших усилий со стороны программистов, даже несмотря на то, что наш проект кроссплатформенный (Xamarin), кодить все равно придется как минимум в два раза больше. И если посчитать это в деньгах, Wukitude может оказаться в итоге даже дешевле.
Особенно опасны изъяны, всплывающие при реализации конкретного функционала. Например, мы столкнулись с тем, что у ARKit при реализации задач навигации, сходных с нашей, существует проблема с накапливаемой погрешностью в получаемых библиотекой CoreLocation координатах и смещении текущей позиции, более того, Apple самостоятельно не рекомендует использовать ARKit для решения подобных задач. Да, существует интересный фреймворк ARKit+CoreLocation, который использовал в своем решении Яндекс для обеспечения 3D-обзора. Однако, применительно к нашему случаю, и здесь нашлось множество подводных камней.
В общем, прошлись по всем нам доступным возможностям, посмотрели, где какой функционал можно реализовать проще и быстрее. В итоге появилось вполне четкое понимание структуры работ. К сожалению, не существует волшебной кнопки «Запилить AR в приложение». Зато есть великое множество волшебных кнопок более узкого назначения, и глобальную задачу можно раздробить на несколько понятных этапов.
Мы быстро собрали на основе нескольких изучаемых SDK демо-приложения, реализующие базовый функционал: 3D-обзор, распознавание, построение трехмерного маршрута. Посмотрели, где с какими сложностями предстоит столкнуться, и сделали окончательный выбор в пользу Wukitude.
Какие механизмы мы протестировали на AR-болванке? Это в первую очередь наложение объектов на камеру с разной удаленностью, построение линии маршрута поверх видео с камеры, базовое распознавание сцен/объектов, наложение объектов/изображения на сцену с учетом перспективы и базовая обработка коллизий ночь/день, пасмурно/ярко, а также работа с системой координат в реальном времени.
Придумываем сценарии использования
Пришло время определиться с наиболее интересными для пользователей приложения «Узнай Москву» сценариями использования. Ясно, что AR должен помогать навигационно-туристическому проекту направлять и информировать пользователей, создавая в приложении единое виртуальное пространство со всеми уже существующими сервисами: описаниями тысяч архитектурных объектов Москвы, маршрутами и квестами.
Вырисовался такой список:
1. Отображение графических образов расположенных вокруг пользователя интересных объектов, причем их размер должен зависеть от расстояния до объекта.
2. Ведение по маршруту в режиме «камера» в реальном времени: отображение навигации стрелками по основным реперным точкам на карте с дополнительными инструкциями.
3. Базовый аналог цифрового зрения – определение объектов, попадающих в прицел камеры, и вывод по ним информации в режиме «дополненной реальности».
Разберем каждый из этих сценариев.
1. Отображение объектов вокруг пользователя.
Здесь подразумевается создание 3D-обзора, в рамках которого на экране смартфона поверх изображения с камеры отображаются пины-указатели интересных объектов: домов, музеев, памятников, маршрутов, территорий и квестов. Каждый пин содержит название объекта, пиктограммку и расстояние до него.
Пины объектов, находящихся в непосредственной близости (до 100 метров), отображаются непрозрачными, с названием и расстоянием до объекта. Те, что находятся на расстоянии 100-300 метров, полупрозрачны и содержат только расстояние. Если пользователь перемещается, то пины, выходящие из радиуса 300 м, удаляются из 3D-обзора, а новые, попадающие в этот радиус, появляются.
AR-модуль должен найти «верх» и «низ» на изображении и расположить пины ярусами. Дома и музеи на верхнем уровне, квесты и памятники – на среднем, а маршруты и территории – на нижнем.
Сценарий взаимодействия при этом выглядит так. Пользователь из меню или с карты в приложении запускает режим AR. На экране отображается картинка с камеры с добавленными в нее пинами объектов. Когда пользователь нажимает на пин, открывается страница объекта.
Здесь же напрашивалась опция по построению трехмерного маршрута к заинтересовавшему пользователя объекту. Маршрут будет отображаться прямо на экране в виде 3D-линии с указанием направления.
2. Ведение по маршруту в режиме «камера» в реальном времени.
Более сложный вариант навигации – ведение пользователя по определенному маршруту от одного интересного объекта к другому. При этом на изображение с камеры выводится базовая информация о маршруте и трехмерные указатели направления движения, объединенные в линию маршрута. Если для маршрута предусмотрен аудиогид, он должен воспроизводиться в штатном режиме.
Сценарий при этом такой. Пользователь открывает в приложении страницу маршрута и выбирает пункт «Пройти маршрут». Если он при этом находится не в начале маршрута, система предлагает ему дойти до начальной точки. Когда человек окажется на месте, приложение построит на обычной 2D-карте маршрут. В этот момент появится возможность переключиться на AR.
В AR-режиме на экране будет изображение с камеры с наложенными на него указателями, миникартой, пинами интересных мест и описаниями ближайших точек маршрута. Здесь же будет расположена иконка для включения аудиогида. Пользователь идет по маршруту, руководствуясь указаниями на экране.
3. Цифровое зрение – изменение внешнего вида объектов в режиме реального времени.
А почему бы какие-то интересные истории, связанные с объектами, не выводить непосредственно на них? Пользователь подходит к объекту, отмеченному AR-меткой, наводит на него камеру и видит наложенную поверх него информацию. Это может быть исторический вид объекта в разные эпохи, его 3D-модель, текстовая справка или видео.
Под «цифровым зрением» в данном проекте мы подразумеваем обнаружение, распознавание и классификацию объектов или целых сцен (окружающего пространства) с целью их последующей графической трансформации или дополнения в реальном времени.
В настоящий момент пока реализован только один пример с объектом «Останкинская башня». В дальнейшем планируем расширить список объектов.
Так как решение нетривиальное, остановимся чуть подробнее на том, как это работает:
1) Сначала создается набор фотоснимков объекта с различных ракурсов в разное время суток и в разные сезоны.
2) Собранный материал загружается в модуль создания цифровых слепков, своеобразных тепловых карт с набором характеристик распознаваемой сцены.
3) Цифровой слепок объекта загружается в приложение «Узнай Москву» с уже внедренным AR SDK.
4)При распознавании объекта в приложении по тепловой карте AR-модуль дополняет вид объекта с камеры заранее подготовленными графическими элементами.
При этом дополнительные графические элементы должны быть привязаны к поверхности объекта и менять ракурс вместе с изменением ракурса камеры. Графическими элементами могут быть: обводки частей здания, изображения, фотографии, иконки, привязанные к разным частям объекта.
Сценарий взаимодействия в этом случае таков: пользователь заходит в режим дополненной реальности, находит дом с иконкой «AR», помещает его целиком в границы экрана. Выполняется распознавание дома, после чего на нем отображаются дополнительные графические элементы.
Где взять данные?
Для цифрового зрения, как вы наверняка поняли, требуется огромное количество фотоматериала, архивы исторических изображений и 3D-модели. Где их взять? Здесь можно пойти несколькими путями.
Существует большой архив фасадов зданий Москвы, доступ к которому вполне можно получить. Но этого мало, нужен не только фасад, но и окружение объекта, разные ракурсы. Для сбора фотоматериала разумно привлечь самих пользователей, предложив им различные игровые механики и мотивационные схемы. Мы сейчас как раз прорабатываем этот вопрос.
Погружение в тему
Если хотите глубже погрузиться в область AR, рекомендуем пройтись вот по этим ссылкам:
https://ict.moscow/projects/vrar/ - спецпроект ICT.Moscow VR/AR
https://youtu.be/5Zsxi33J_bg?t=506 - создание слепков сцены и помещение персонажей. Да, тут пример для Unity, но тем не менее.
https://youtu.be/g-0cuqeUvCQ?t=132 - некое решение по навигации (для маршрутов).
https://www.wikitude.com/showcase/paysafecard/ - тоже классный проект.
https://www.wikitude.com/showcase/# - вообще, тут много интересных реализаций.