- PVSM.RU - https://www.pvsm.ru -

Дополненная реальность в Web: какие библиотеки актуальны в 2025?

Дополненная реальность в Web: какие библиотеки актуальны в 2025? - 1

Привет! Я Света, фронтенд-разработчик в отделе рекламных спецпроектов в KTS [1].

Не так давно при работе над одной из задач мне потребовалось разобраться, какие существуют библиотеки для работы с AR в вебе. Я провела небольшое исследование, покопалась в документации, отыскала кучу примеров и решила, что этим материалом будет полезно поделиться.

В этой статье я расскажу про библиотеки, которые позволяют добавлять дополненную реальность в веб-приложения, рассмотрю их основные особенности и поделюсь примерами их использования.

Если вы ищете способы внедрить AR в свои проекты, эта статья поможет вам сориентироваться и составить общее представление о возможностях соответствующих библиотек.

Оглавление

Какие термины важно понимать

WebXR API — стандарт, который позволяет реализовывать как дополненную (AR), так и виртуальную реальность (VR) прямо в браузере. Он отвечает за поиск совместимых устройств, и рендеринг 3D-сцены, а также управляет различными точками при отрисовке сцены. Однако WebXR не знает, как загружать 3D-модели и управлять ими, как их рендерить, текстурировать и так далее – для этого нужны другие инструменты.

WebAR — это общий термин для всех способов использования технологий дополненной реальности (AR) в вебе, включая нативные SDK и сторонние библиотеки.

ARCore и ARKit — нативные SDK для создания AR-приложений на Android и iOS соответственно. Через WebXR они могут быть подключены к веб-приложению, если браузер поддерживает их интеграцию.

WebGL — графический движок для создания и рендеринга 3D-графики в веб-браузере. Он помогает рисовать и оживлять ваши 3D-модели в AR; в частности, именно он накладывает текстуры, освещение и шейдеры.

WebRTC — технология, которая позволяет веб-приложениям захватывать и передавать потоковое аудио и видео и обмениваться другими данными. Хотя она не создана непосредственно для AR, библиотеки используют ее API для доступа к камере устройства.

Типы AR:

  • Marker-based (на основе маркера) — виртуальный объект появляется поверх специального маркера (например, Hiro, Kanji, barcode) или изображения.

  • Markerless (без маркера) — модель размещается перед пользователем на реальных поверхностях и не требует сканировать маркеры или картинки. Для этого обычно используется технология SLAM, которая строит точную модель окружающей среды в реальном времени.

  • Location-Based (на основе местоположения) — модель размещается в пространстве на основе данных о геопозиции устройства.

Обзор библиотек

Веб-приложение с дополненной реальностью можно создать с помощью библиотек и фреймворков на основе WebXR API или WebGL (например, Three.js, A-Frame, AR.js, model-viewer) или с помощью альтернативных решений, имитирующих WebXR API (например, 8th Wall).

Давайте разберем несколько популярных инструментов для создания AR в вебе, чтобы вам было проще сориентироваться в их многообразии.

Фреймворки и библиотеки на основе WebXR API и на основе WebGL

Three.js

Промо для веб-приложения AR Fake Sneakers компании Lusion

Промо для веб-приложения AR Fake Sneakers компании Lusion

Three.js — одна из самых популярных библиотек для работы с 3D-графикой в вебе. Под капотом она использует WebGL и будет отличным выбором, если требуется создать сложную 3D-сцену. 

Для создания полноценного приложения с Markerless AR в Three.js есть специальные методы и классы, которые позволяют работать с WebXR API. А упростить работу с AR на React помогут библиотеки React Three Fiber и @react-three/xr.

Однако для реализации дополненной реальности на основе маркеров или геолокации будет необходимо дополнительно настроить интеграцию с другими библиотеками, например, AR.js или jsartoolkit5.

Документация: Three.js Docs [17]

Гитхаб: https://github.com/mrdoob/three.js/ [18] 

Примеры:

A-Frame

Пример из блога A-Frame

Пример из блога A-Frame

A-Frame — это фреймворк на основе Three.js. Он упрощает создание AR и VR-приложений благодаря декларативному синтаксису и использованию обычного HTML: для создания сцены достаточно добавить необходимые теги, которые есть в A-Frame, не нужно даже сильно углубляться в JavaScript.

Есть одно "но": AR-функции A-Frame пока поддерживаются только в Chromium-браузерах на Android из-за WebXR API — поддержка этой технологии пока еще сильно ограничена. Этот момент важно учитывать, особенно если вам необходимо, чтобы ваше приложение работало в Safari или на iOS.

С созданием AR на основе маркеров или геолокации A-Frame сам по себе не справится. Вам понадобятся дополнительные библиотеки, такие как AR.js. 

Чтобы интегрировать A-Frame с React, существуют библиотеки aframe-react и react-aframe-ar, но на данный момент они устарели и не поддерживаются авторами. При использовании платформы 8th Wall можно обратить внимание на библиотеку react-8thwall-aframe.

Документация: A-Frame Docs [22]

Гитхаб: https://github.com/aframevr/aframe/ [23] 

Примеры:

AR.js

Слева — Hiro-маркер, справа — 3D-модель поверх него

Слева — Hiro-маркер, справа — 3D-модель поверх него

Это одно из наиболее популярных решений для разработки маркерной AR. В основе AR.js лежит jsartoolkit5, который использует технологии компьютерного зрения для отслеживания маркеров и распознавания изображений. Библиотека также поддерживает AR на основе геопозиции.

Для отображения контента вы можете выбрать одну из двух сборок: для Three.js или для A-Frame. Если вас интересует AR на основе геопозиции с Three.js, обратите внимание на отдельный проект от тех же разработчиков — LocAR.js [27].

AR.js работает во всех в браузерах, где доступны WebGL и WebRTC. И тот, и другой уже активно поддерживаются.

Но имейте в виду: при интеграции с React могут возникать проблемы. В таком случае можно воспользоваться библиотекой-оберткой react-three-arjs [28] или попробовать альтернативный вариант — встроить код с AR.js в iframe.

Документация: AR.js Docs [29]

Гитхаб: https://github.com/AR-js-org/AR.js [30] 

Коллекция примеров с использованием AR.js:

Model-Viewer

Пример размещения 3D-модели

Пример размещения 3D-модели

Model-Viewer — это библиотека от Google, реализованная в виде веб-компонента. Ее основной API — это пользовательский HTML-элемент <model-viewer>. Под капотом Model-Viewer использует Three.js.

Библиотека поддерживает WebXR, что позволяет добавлять AR-функциональность в браузеры на базе Chromium. Если WebXR не поддерживается, Model-Viewer может использовать SceneViewer (для Android) и QuickLook (для iOS). Однако несмотря на свою широкую поддержку, Model-Viewer не работает в Firefox.

Как и другие веб-компоненты, <model-viewer> отлично работает в проектах на React. Если вам нужно подключить типы для работы с библиотекой, рекомендую хорошую статью [33], где можно почитать об этом подробнее.

Для быстрой проверки работы 3D-модели на мобильных устройствах вы можете воспользоваться удобным инструментом Model Editor [34].

Документация: Model Viewer Docs [35]

Гитхаб: https://github.com/google/model-viewer [36] 

Витрина примеров на сайте: https://modelviewer.dev/examples/augmentedreality/ [37] 

Babylon.js

Фрагмент из видео-туториала на канале BabylonJS

Фрагмент из видео-туториала на канале BabylonJS

Babylon.js — это мощный движок для работы с 3D-графикой в вебе, использующий WebGL/WebGPU. Библиотека предоставляет богатый API, включающий инструменты для работы с физикой, анимациями, светом и тенью, а также обширную библиотеку 3D-шейдеров. Для создания AR и VR Babylon.js использует WebXR API. 

Силами этой библиотеки можно реализовать как Markerless, так и Marker Based AR, хотя последний тип пока имеет экспериментальный API. Для маркерного AR можно также воспользоваться библиотекой BabylonAR, где трекинг реализован с помощью модуля ArUco из OpenCV.

Для базовой работы Babylon.js в проекте на React не потребуется дополнительных пакетов: для инициализации достаточно использовать код из соответствующего раздела документации. Чтобы упростить интеграцию, можно взять уже готовый компонент из пакета babylonjs-hook. Для создания сцен и интерфейсов с помощью привычного синтаксиса React-компонентов, жизненного цикла и хуков документация предлагает библиотеку react-babylonjs. 

Песочница: Babylon.js Playground [38]

Документация: WebXR и Babylon.js [39]

Гитхаб: https://github.com/BabylonJS/Babylon.js [40] 

Некоторые демо из документации (может потребоваться время на загрузку моделей): 

MindAR

Отслеживание изображения, интерактивный пример

Отслеживание изображения, интерактивный пример

Библиотека MindAR специализируется на трекинге изображений и лиц. Она ориентирована на AR с использованием маркеров и поддерживает отслеживание пользовательских изображений. Более того, MindAR может отслеживать несколько маркеров одновременно, что не всегда доступно в других библиотеках с AR-возможностями.

MindAR также позволяет отслеживать лица, но не поддерживает другие виды AR без маркеров (например, обнаружение поверхностей или плоскостей).

Для создания AR MindAR использует WebGL и WebRTC, поэтому приложения, сделанные на этой библиотеке, должны поддерживаться и в Safari, и в Firefox. Для обработки и отображения 3D-контента MindAR использует Three.js или A-Frame.

Документация: MindAR Documentation [44]

Гитхаб: https://github.com/hiukim/mind-ar-js [45] 

Примеры из документации: 

PlayCanvas

Просмотр модели с помощью glTF Viewer

Просмотр модели с помощью glTF Viewer

PlayCanvas — это движок для создания веб-графики и игр, который использует возможности WebGL.

Для реализации Markerless AR в библиотеке имеется свой API, который под капотом использует WebXR. Это, опять же, сужает количество устройств, однако движок поддерживается также платными платформами вроде 8th Wall и Zappar, которые позволят запустить приложение в Safari. Для создания AR с маркерами можно использовать AR Starter Kit [50], который, в свою очередь, использует ARToolkit.

Одним из удобных инструментов PlayCanvas является редактор сцен, который упрощает процесс создания приложений. В редакторе можно использовать готовые шаблоны (например, WebXR AR Starter Kit или Model Viewer) чтобы быстро начать проект с поддержкой AR.

Документация: PlayCanvas Developer Site [51]

Гитхаб: https://github.com/playcanvas/engine [52] 

Примеры: 

Больше источников и примеров можно найти в репозитории awesome-playcanvas [56].

JSARToolKit5

JSARToolKit5 — это библиотека, представляющая собой JavaScript-реализацию ARToolKit, одного из первых инструментов для создания AR. Она ориентирована исключительно на трекинг разных видов маркеров, включая квадратные со штрих-кодами, наборы из нескольких маркеров и NFT-маркеры. 

Эта библиотека часто используется как основа для других решений с marker-based AR, поэтому неоднократно упоминалась выше. Однако сама по себе JSARToolKit5 не умеет отображать 3D-модели – для этого ее обычно интегрируют с библиотеками вроде Three.js, которые отвечают за визуализацию.

Гитхаб (более новый форк): https://github.com/artoolkitx/jsartoolkit5 [57]

Несколько простых примеров можно посмотреть здесь: 

Платные альтернативы, имитирующие WebXR API

Для создания веб-приложений с дополненной реальностью существуют и платные платформы, предлагающие расширенные возможности, такие как упрощение разработки и обеспечение кроссплатформенности. Одним из таких решений является 8th Wall.

8th Wall

Пример промо-приложения для McDonalds

Пример промо-приложения для McDonalds
Пример промо-приложения для Coca-Cola

Пример промо-приложения для Coca-Cola

Платформа 8th Wall использует свою собственную имплементацию SLAM, которая не полагается на встроенную поддержку WebXR API в браузере. Алгоритмы трекинга работают напрямую с камерой устройства и сенсорами через стандартные веб-API, такие как WebRTC и WebGL. Это делает Markerless AR доступным даже в Safari на iOS. Более того, движок был разработан с учётом производительности мобильных устройств.

Платформа предоставляет возможность создания проектов бесплатно в собственном интерактивном редакторе и позволяет интегрировать другие библиотеки, например, A-Frame, Three.js, PlayCanvas. На платформе можно реализовать все виды AR, даже Location-based и AR с фильтрами для лица.

Однако бесплатная версия имеет неприятные ограничения: пользователи не могут разрабатывать проект локально и изменять базовые файлы проекта, которые лежат под капотом (например, app.js, body.html), что делает сложную кастомизацию невозможной.

Документация: 8th Wall Documentation [59]

Примеры:

Существуют и другие менее популярные платные платформы, имитирующие функциональность WebXR API, например, Onirix, Zappar и MyWebAR.

Поддержка AR в вебе

Работа вашего приложения во многом зависит от того, какой тип AR вы хотите реализовать и какие технологии используются библиотекой.

Markerless AR в вебе основывается на WebXR API. Поддержка WebXR ограничена браузерами на основе Chromium (Google Chrome, Microsoft Edge, Opera и другими). В то же время браузеры на базе WebKit (Safari, а также Chrome и Firefox для iOS) все еще не поддерживают эту технологию. Даже включение экспериментальных флагов для WebXR в Safari не дает плодов.

Есть надежда, что появление новых устройств вроде Apple Vision Pro сможет подтолкнуть Apple и к внедрению WebXR в WebKit. Но пока Markerless AR с помощью одного лишь WebXR API в Safari реализовать не получится.

Marker-based AR, напротив, будет работать во всех популярных браузерах. Этот тип AR чаще всего не использует WebXR API и не требует сложного отслеживания среды (SLAM). Вместо этого он полагается на широко поддерживаемые веб-технологии: WebGL, WebRTC (в частности, getUserMedia API) и алгоритмы обработки изображений.

Location-based AR также может быть реализован без WebXR API. Он визуализирует 3D-модели с помощью WebGL и использует веб-API типа Geolocation API и DeviceOrientationEvent API, которые хорошо поддерживаются в большинстве современных браузеров.

Заключение

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

Сравнение библиотек и фреймворков

Сравнение библиотек и фреймворков

Так, если выбирать из бесплатных решений, для Markerless AR в несложных сценариях (например, просто отобразить 3D-модель) хорошо подойдет Model Viewer — приложение будет работать на максимальном количестве устройств. Three.js, PlayCanvas и Babylon.js можно рассмотреть для этого типа AR, если понадобятся более сложные 3D-сцены и игры, однако приложения не будут работать в браузерах без WebXR.

Для трекинга маркеров и Location Based AR подойдет AR.js; для трекинга изображений и лиц — MindAR. Эти библиотеки также будут работать во многих браузерах.

Если у вас есть опыт работы с веб-технологиями для AR, расскажите об этом в комментариях. Это будет отличным дополнением к статье и поможет другим читателям (и мне тоже!) получить более полное представление о реальных кейсах их использования.

А для желающих узнать больше не только про AR в вебе, но и о веб-разработке в целом, я собрала список публикаций из нашего блога. Рекомендую к прочтению:

Автор: kurakina

Источник [71]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/dopolnennaya-real-nost/407995

Ссылки в тексте:

[1] KTS: https://kts.tech/

[2] Какие термины важно понимать: #%D0%9A%D0%B0%D0%BA%D0%B8%D0%B5%20%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D1%8B%20%D0%B2%D0%B0%D0%B6%D0%BD%D0%BE%20%D0%BF%D0%BE%D0%BD%D0%B8%D0%BC%D0%B0%D1%82%D1%8C

[3] Обзор библиотек: #%D0%9E%D0%B1%D0%B7%D0%BE%D1%80%20%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA

[4] Фреймворки и библиотеки на основе WebXR API и на основе WebGL: #%D0%A4%D1%80%D0%B5%D0%B9%D0%BC%D0%B2%D0%BE%D1%80%D0%BA%D0%B8%20%D0%B8%20%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B8%20%D0%BD%D0%B0%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%20WebXR%20API%20%D0%B8%20%D0%BD%D0%B0%20%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B5%20WebGL

[5] Three.js: #Three.js

[6] A-Frame: #A-Frame

[7] AR.js: #AR.js

[8] Model-Viewer: #Model-Viewer

[9] Babylon.js: #Babylon.js

[10] MindAR: #MindAR

[11] PlayCanvas: #PlayCanvas

[12] JSARToolKit5: #JSARToolKit5

[13] Платные альтернативы, имитирующие WebXR API: #%D0%9F%D0%BB%D0%B0%D1%82%D0%BD%D1%8B%D0%B5%20%D0%B0%D0%BB%D1%8C%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%82%D0%B8%D0%B2%D1%8B,%20%D0%B8%D0%BC%D0%B8%D1%82%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B5%20WebXR%20API

[14] 8th Wall: #8th%20Wall

[15] Поддержка AR в вебе: #%D0%9F%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B0%20AR%20%D0%B2%20%D0%B2%D0%B5%D0%B1%D0%B5

[16] Заключение: #%D0%97%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5

[17] Three.js Docs: https://threejs.org/docs/

[18] https://github.com/mrdoob/three.js/: https://github.com/mrdoob/three.js/

[19] WebXR Sneakers: https://webxr-sneakers.lusion.co/

[20] Hit Test Example: https://threejs.org/examples/webxr_ar_hittest

[21] AR.js Example: https://jeromeetienne.github.io/AR.js/three.js/examples/mobile-performance.html

[22] A-Frame Docs: https://aframe.io/docs/1.6.0/introduction/

[23] https://github.com/aframevr/aframe/: https://github.com/aframevr/aframe/

[24] Model Viewer: https://aframe.io/examples/showcase/modelviewer/

[25] Anime UI: https://aframe.io/examples/showcase/anime-UI/

[26] Augmented Reality Roller Coaster: https://ada.is/rollAR-coaster/

[27] LocAR.js: https://github.com/AR-js-org/locar.js

[28] react-three-arjs: https://github.com/artcom/react-three-arjs

[29] AR.js Docs: https://ar-js-org.github.io/AR.js-Docs/

[30] https://github.com/AR-js-org/AR.js: https://github.com/AR-js-org/AR.js

[31] https://jeromeetienne.github.io/AR.js-docs/misc/EXAMPLES.html: https://jeromeetienne.github.io/AR.js-docs/misc/EXAMPLES.html

[32] https://stemkoski.github.io/AR-Examples/: https://stemkoski.github.io/AR-Examples/

[33] хорошую статью: https://dev.to/asross311/a-strongly-typed-google-model-viewer-implementation-in-react-3m5c

[34] Model Editor: https://modelviewer.dev/editor/

[35] Model Viewer Docs: https://modelviewer.dev/docs/

[36] https://github.com/google/model-viewer: https://github.com/google/model-viewer

[37] https://modelviewer.dev/examples/augmentedreality/: https://modelviewer.dev/examples/augmentedreality/

[38] Babylon.js Playground: https://playground.babylonjs.com/

[39] WebXR и Babylon.js: https://doc.babylonjs.com/features/featuresDeepDive/webXR

[40] https://github.com/BabylonJS/Babylon.js: https://github.com/BabylonJS/Babylon.js

[41] https://playground.babylonjs.com/#F41V6N#32: https://playground.babylonjs.com/#F41V6N#32

[42] https://playground.babylonjs.com/#NAZYHG#5: https://playground.babylonjs.com/#NAZYHG#5

[43] https://playground.babylonjs.com/#GG06BQ#97: https://playground.babylonjs.com/#GG06BQ#97

[44] MindAR Documentation: https://hiukim.github.io/mind-ar-js-doc/

[45] https://github.com/hiukim/mind-ar-js: https://github.com/hiukim/mind-ar-js

[46] https://hiukim.github.io/mind-ar-js-doc/face-tracking-samples/tryon.html: https://hiukim.github.io/mind-ar-js-doc/face-tracking-samples/tryon.html

[47] https://hiukim.github.io/mind-ar-js-doc/samples/advanced.html: https://hiukim.github.io/mind-ar-js-doc/samples/advanced.html

[48] https://cdn.jsdelivr.net/gh/hiukim/mind-ar-js@1.1.4/examples/image-tracking/assets/card-example/card.png: https://cdn.jsdelivr.net/gh/hiukim/mind-ar-js@1.1.4/examples/image-tracking/assets/card-example/card.png

[49] https://hiukim.github.io/mind-ar-js-doc/examples/multi-tracks: https://hiukim.github.io/mind-ar-js-doc/examples/multi-tracks

[50] AR Starter Kit: https://github.com/playcanvas/playcanvas-ar

[51] PlayCanvas Developer Site: https://developer.playcanvas.com/

[52] https://github.com/playcanvas/engine: https://github.com/playcanvas/engine

[53] https://playcanvas.com/project/672464/: https://playcanvas.com/project/672464/

[54] https://playcanvas.vercel.app/#/xr/xr-ui: https://playcanvas.vercel.app/#/xr/xr-ui

[55] https://playcanv.as/p/eJ1ygzym/: https://playcanv.as/p/eJ1ygzym/

[56] awesome-playcanvas: https://github.com/playcanvas/awesome-playcanvas

[57] https://github.com/artoolkitx/jsartoolkit5: https://github.com/artoolkitx/jsartoolkit5

[58] https://kalwalt.github.io/jsartoolkit5/examples/: https://kalwalt.github.io/jsartoolkit5/examples/

[59] 8th Wall Documentation: https://www.8thwall.com/docs/home/intro

[60] https://ar.pandora-ar.com/got/index.html: https://ar.pandora-ar.com/got/index.html

[61] https://edl-002-lucky-charms-ar.still.14four.com/: https://edl-002-lucky-charms-ar.still.14four.com/

[62] https://www.8thwall.com/alivenow/oreo-playful-dunks: https://www.8thwall.com/alivenow/oreo-playful-dunks

[63] https://www.8thwall.com/invision/gingygiftgrab: https://www.8thwall.com/invision/gingygiftgrab

[64] https://caniuse.com/webxr: https://caniuse.com/webxr

[65] https://immersive-web.github.io/webxr-samples/: https://immersive-web.github.io/webxr-samples/

[66] Как сделать анимацию разными способами: CSS, WebP, Canvas, Lottie, Spine и секвенции: https://habr.com/ru/companies/kts/articles/864302/

[67] Летающий Санта и танцующие снегири: опыт реализации и оптимизации CSS-анимации: https://habr.com/ru/companies/kts/articles/819757/

[68] Подключаем библиотеку к проекту с помощью npm/yarn link: https://habr.com/ru/companies/kts/articles/821111/

[69] Next.js + Playwright. Как мы начали писать автотесты и что из этого вышло: https://habr.com/ru/companies/kts/articles/843054/

[70] Искусство сетапа: автоматизируем подготовку стека под новые проекты: https://habr.com/ru/companies/kts/articles/829460/

[71] Источник: https://habr.com/ru/companies/kts/articles/874464/?utm_campaign=874464&utm_source=habrahabr&utm_medium=rss