World Brush: рисование в AR
Время чтения: 5 мин.Вместе с тем, как Google и Apple за последние месяцы сделали много крупных заявок об Augmented Reality стало понятным, что AR скоро станет частью жизни многих людей. Active Theory в основном работает с передовыми веб-технологиями, такими как WebGL, чтобы сделать сайты с действительно хорошим опытом, способным увлечь пользователя (ex. Pottermore’s Explore Hogwarts), поэтому мы задались вопросом, сможем ли мы принести свои инструменты, фреймворки и опыт в эту новую границу.
Поскольку WebGL - это платформа, построенная на OpenGL, мы смогли создать собственную платформу приложений, которая позволяет нам писать тот же код JavaScript, который мы используем в Интернете, и параллельно визуализировать графику в OpenGL в нейтив приложении iOS или Android и пользоваться преимуществами ARKit и ARCore.

Ранее этим летом мы создали пруф концептуального эксперимента. Все в Active Theory хотят использовать технологии творчески, что изначально было работой с клиентом, но возможность создавать продукты с использованием Augmented Reality сподвигла нас на мысль о нашем первом предложении.
Представляем World Brush

World Brush - это AR опыт, который позволяет пользователям рисовать мир для того, чтобы другие могли открыть его для себя. Каждый рисунок анонимен и виден только в том месте, где он был создан. Пользователи имеют доступ к like, dislike и report, что помогает скрыть плохие и продемонстрировать хорошие вещи другим.
Идея выросла из желания объединить физический и цифровой мир таким образом, чтобы любой пользователь мог вникнуть в него и испытать все на себе. Легко представить людей, гуляющих по Venice Beach, вокруг которых появляется virtual art, связанный с реальными объектами. Простой механизм рисования, привязанный к реальному миру, позволяет использовать огромное количество возможностей, которые выходят за рамки языковых барьеров и создают уникальный опыта для каждого человека.
Еще с самого начала мы решили, что World Brush будет простым инструментом и не заставит пользователей чувствовать себя загруженными от к-ва опций. С первого запуска люди могут просто рисовать на своих экранах и видеть линии, которые они создают, в одном метре от себя. При разблокировке дополнительных кистей, простые слайдеры меняют цвет и толщину линии.

Технология
Помимо собственного кода, который обеспечивает работу платформы, весь код, предназначенный для приложения World Brush, написан на JavaScript. Основная часть AR опыта, включая строки и пользовательский интерфейс, создается в OpenGL, с помощью библиотеки three.js. Экран карты и выбора кисти -стандартные веб-элементы, содержащиеся в уровне WebView, который появляется при любом действии пользователя.

Линии рендеринга
Мы использовали предыдущий опыт для создания нового линейного рендеринга в нашем фреймворке и three.js. Во время рисования линии данные сохраняются, включая в себя X, Y, Z позиции в пространстве, толщину линий и цвет среди других атрибутов.

Размещение рисунков в реальном мире
ARKit и ARCore предоставляют tracking данные относительно того, в каком пространстве находится телефон во время работы приложения. Чтобы разместить ранее нарисованные рисунки в реальном мире, мы связываем визуализированную сцену с компасом, поэтому независимо от используемого устройства, рисунки появляются в том же месте, в котором они были нарисованы.
Местоположение пользователя на основе GPS отображается с погрешностью примерно в 10-20 метров, но все равно картина остается направлена в правильную сторону.
Оптимизация
По мере того как пользователь рисует, каждая отдельная линия отображается как отдельная сетка с собственной уникальной геометрией. Когда сеанс сохранен или удаленная картина уже загружена, все отдельные линии в этом нем объединяются вместе в одну геометрию и создают рисунок.
Когда сеанс рисования загружается, он объединяется в отдельный фоновый поток, используя пользовательскую реализацию WebWorkers, предотвращая временное замораживание основного опыта, в то время как тяжелые математические вычисления объединяют картины вместе.
Со стороны сервера
Мы объединили новые server-less cloud функции от Google и нашу платформу на основе сервера Medusa, чтобы сохранять и доставать данные о живописи, которые хранятся в Google Cloud Storage. Таким образом их получение занимает миллисекунды.
Метаданные сеанса рисования, такие как местоположение и время создания, хранятся в Firebase. Это позволило легко получать доступ к сабсетам рисунков, сохраненных в той же GPS-локации, в которой находился пользователь.
Мы также внедрили алгоритм подсчета очков, который анализирует популярность и время создания картины, чтобы предоставить пользователю самый качественный контент в популярных локациях.
Двигаясь вперед
Мы рады видеть, что несет с собой увлечение Augmented Reality. Мы всегда стремимся использовать сложные технологии, заставляя их выглядеть как можно более простыми для конечных пользователей.