TL;ДР;
Новые AR животные от Google выглядят так, как будто они являются AR в Интернете (например, AR.js или 8-я стена), но на самом деле являются родными приложениями ARCore. Ловкость рук заключается в том, что ссылка в браузере (на самом деле кнопка с очень запутанной цепочкой обработчиков событий) запускает само приложение ARCore без каких-либо запросов пользователю что-либо установить. Как Google это делает? Я тоже хочу это сделать.
Деталь
Недавно Google введена функция поиска, который позволяет пользователям смотреть животных в дополненной реальности, щелкнув ссылку на карточке с информацией о поиске.
Это настоящая дополненная реальность с распознаванием плоскости, отслеживанием SLAM, маркеры не требуются. Просматривая примеры на моем собственном телефоне (Pixel 2 под управлением Android 9), точность расположения и угла обзора впечатляет. Я могу перемещать телефон, ходить, и лапа тигра (например) остается на якоре в пределах нескольких дюймов. Точно так же объекты AR имеют отличную визуальную стабильность, избегая дрожания, которое преследует большинство приложений AR.js на основе маркеров, которые я видел, или посредственной привязки объектов, которую я вижу в 8th Wall немаркерПримеры.
Как разработчику, работающему над доставкой дополненной реальности через Интернет, мне очень любопытно, как они добились такого высококачественного результата. Есть ли у них гораздо более совершенные проприетарные технологии, которыми они не делятся с проектами с открытым исходным кодом THREE.js / ARKit / AR.js?
Нет. Выполнив отладку примера с тигром, используя удаленную USB-проверку моего телефона с моего ноутбука, а также некоторые косвенные подсказки, я пришел к выводу, что они выглядят так хорошо, потому что это не веб-AR, а нативная AR с использованием ARCore. Каким-то образом Google заставляет телефон пользователя загружать собственное приложение ARCore (системные журналы показывают, что сам ARCore запускается как приложение) без какого-либо запроса на установку. Попытка переключиться на другое приложение приводит к автоматическому закрытию приложения дополненной реальности, что затрудняет его отладку или проверку.
Собственные документы Google ARCore обычно подразумевают, что вам необходимо опубликовать приложение в магазине Play, чтобы фактически получить программное обеспечение с поддержкой ARCore в руки пользователей. Итак, кто-нибудь знает, как Google делает то, что они делают здесь?
Все изображения мои авторские работы
Ссылка на информационную карту:
Запрос на предоставление разрешений приложения для ARCore:
ARCore был только что использован:
https://developers.google.com/ar/develop/java/scene-viewer
Scene Viewer is an immersive viewer that enables AR experiences from your website. It lets Android mobile device users easily place, view, and interact with web-hosted 3D models in their environment.
To do this, all a user needs is an Android device that has ARCore 1.9 or later. Most Android browsers are supported, and no programmatic integration with a browser is necessary -- only properly-formatted links on a web page.
<model-viewer ar alt = "A 3D model of an astronaut." src = "Astronaut.gltf"></model-viewer>
Спасибо за размещение этого вопроса. :) Я ждал эту функцию, но не знал, когда она выйдет.
Он работает с использованием URL-адресов намерений Android.
intent://arvr.google.com/scene-viewer/1.2?file=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/model.glb&title=Giant%20panda&referrer=google.com:ANIMALS:kp_carousel&sound=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/Bear_Panda_Giant_Unisex_Adult.ogg&card_content=https://arvr.google.com/searchar/infocard?data%3DCg0vZy8xMWo1ZjVkbms0EAE%26hl%3Den-US&share_text=See%20a%20life-sized%20animal!%20Search%20%22Giant%20panda%22%20on%20Google%20and%20tap%20%22View%20in%203D.%22%20https://www.google.com/search?q%3DGiant%2Bpanda%26hl%3Den-US%26stick%3DH4sIAAAAAAAAAFPi0M_VNzBOyjJ8xGjMLfDyxz1hKa1Ja05eY1Th4grOyC93zSvJLKkUEuNig7J4pLi44Jp4FrFyu2cm5pUoFCTmpSQCADr-Ul5OAAAA#Intent;package=com.google.android.googlequicksearchbox;scheme=https;S.browser_fallback_url=https://arvr.google.com/scene-viewer?file=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/model.glb&title=Giant%20panda&referrer=google.com:ANIMALS:kp_carousel&sound=https://storage.googleapis.com/ar-answers-in-search-models/static/GiantPanda/Bear_Panda_Giant_Unisex_Adult.ogg;end;
Перейти к концу для генератора.
Давайте разберем формат URL.
intent://
Хорошо, это URL намерения Android
arvr.google.com/scene-viewer/1.2?[parameters]
Это URL-адрес, который будет передан приложению ARCore. Параметры работают следующим образом:
card_content
: это ссылка на веб-страницу, которая отображается на информационном листе в нижней части представления AR.
file
: Это файл 3D-модели в формате glb.referrer
: Не знаю, для чего это, наверное, для отслеживания.share_text
: устанавливает текст, которым вы делитесь, когда вы нажимаете кнопку «Поделиться».
sound
: аудиофайл для воспроизведения в формате ogg.title
: Имя модели, указанное в заголовке информационного листа внизу.#Intent;
Хорошо, теперь мы подходим к той части, где мы сообщаем Android, где открыть ссылку.
package=com.google.android.googlequicksearchbox;
Интересно. Это открывается в приложении Google, а не в приложении ARCore. У Google есть привычка вставлять случайные вещи в приложение Google, и я думаю, что это одна из них.scheme=https;
Это означает, что URL-адрес в начале должен быть передан в Google как URL-адрес https://.S.browser_fallback_url=https://arvr.google.com/scene-viewer?[parameters]
Этот URL будет открыт, если у пользователя нет приложения Google.
file
: См. выше.title
: См. выше.sound
: См. выше.referrer
: См. выше.;end;
Конец URL здесь.
urlform.oninput=()=>{
out.textContent=`intent://arvr.google.com/scene-viewer/1.2?file=${encodeURIComponent(file.value)}&title=${encodeURIComponent(title.value)}&referrer=&sound=${encodeURIComponent(sound.value)}&card_content=${encodeURIComponent(card.value)}&share_text=${encodeURIComponent(share.value)}#Intent;package=com.google.android.googlequicksearchbox;scheme=https;S.browser_fallback_url=https://arvr.google.com/scene-viewer?file=${encodeURIComponent(file.value)}&title=${encodeURIComponent(title.value)}&referrer=&sound=${encodeURIComponent(sound.value)};end;`
}
#urlform{
display:grid;
grid-gap:9px;
}
<form id = "urlform">
<input type = "text" placeholder = "URL of model file (GLB)" id = "file">
<input type = "text" placeholder = "Model name" id = "title">
<input type = "text" placeholder = "URL of sound file (OGG)" id = "sound">
<input type = "text" placeholder = "URL of card webpage (HTML)" id = "card">
<textarea placeholder = "Share text" id = "share"></textarea>
</form>
<div id = "out"></div>
Стоит отметить, что <model-viewer> также работает с устройствами с поддержкой ARKit, запуская приложение AR View, встроенное в iOS 12+.