Реализация Persistent AR (сохранение AR-сцен между сессиями)

AR-сцены теряются при перезапуске приложения — пользователь каждый раз начинает с нуля. Мы разрабатываем persistent AR под ключ: сцены сохраняются между сессиями, а время настройки сценария сокращается в разы. Обсудим вашу задачу и вернёмся с планом.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация Persistent AR (сохранение AR-сцен между сессиями)
Сложный
~3-5 дней
Часто задаваемые вопросы

Persistent AR: почему сцены не сохраняются между сессиями

Проблема почти всегда не в распознавании, а в том, что привязка объекта живёт внутри одной сессии. Камера строит карту окружения, движок вешает на неё виртуальные метки — и как только приложение закрылось, эта карта умирает вместе с процессом. При следующем запуске устройство видит ту же комнату, но для него это уже новая сцена: сохранение AR-сцен не происходит, потому что сохранять нечего — привязка нигде не зафиксирована.

Вторая причина — отсутствие серверной синхронизации. Даже если приложение кэширует локальную карту, она привязана к конкретному устройству и его калибровке. Второй пользователь, зашедший в ту же точку, строит собственную карту, и метки двух устройств не совпадают в пространстве. Объекты «уезжают», дублируются или исчезают — это и есть потеря данных между сессиями, которую заказчик видит как «приложение забыло всё, что мы расставили».

Третья причина — привязка к маркеру вместо привязки к геометрии. Пока в кадре узнаваемый образ, метка держится; стоит его убрать или изменить освещение — привязка рвётся. Persistent AR требует, чтобы объект был привязан к устойчивым особенностям пространства, а не к временному визуальному якорю.

Корень проблемы один: у сцены нет внешнего хранилища состояния. Пока карта, координаты меток и их идентификаторы не вынесены за пределы сессии и не сведены к общей системе координат, любое сохранение AR-сцен остаётся имитацией. Разбираем, как это закрывается на уровне архитектуры.

Что даёт сохранение AR-сцен: эффект в цифрах

Сохранение AR-сцен между сессиями — это в первую очередь инженерная дисциплина, а не визуальный эффект. Когда приложение запоминает пространственные привязки и состояние объектов, пользователю не нужно заново размечать помещение и заново выставлять сцену: он открывает приложение и попадает в ту же точку, где остановился. Именно здесь проявляются измеримые выгоды — время повторной калибровки, доля успешных возвратов в сцену и класс отказов при потере привязок.

Время повторной калибровки — самый чувствительный показатель. Без сохранения сцены каждый вход начинается с нуля: поиск опорных точек, ручная разметка, ожидание, пока трекинг стабилизируется. С persistent AR этот этап сокращается до проверки сохранённой карты: приложение сверяет текущее положение камеры с записанными привязками и либо мгновенно восстанавливает сцену, либо предлагает короткий добор. На практике это разница между «полминуты на вход» и «пара секунд до рабочего состояния».

Доля успешных возвратов в сцену зависит от того, насколько устойчиво хранятся привязки. Если карта привязана к одной точке и пользователь подходит с другой стороны, восстановление срывается. Поэтому мы храним несколько опорных якорей и допускаем частичное совпадение: сцена собирается, даже если распознана не вся геометрия. Это поднимает долю успешных возвратов и убирает самый частый сценарий раздражения — «приложение снова всё забыло».

Класс отказов при потере привязок тоже меняется. Вместо жёсткого падения в пустую сцену приложение переходит в режим мягкой деградации: сохраняет последнее известное состояние, показывает подсказку по восстановлению и не теряет пользовательские данные. Мы проектируем это поведение заранее — на уровне модели хранения сцены, а не как заплатку поверх. Такой подход мы отрабатывали в проектах на ARKit и аналогичных платформах, где стабильность привязок напрямую влияет на удержание.

Стабильность привязок — это ещё и вопрос версионирования. Сцена, сохранённая на одной версии приложения, должна корректно открываться после обновления, иначе пользователь теряет накопленный контент. Мы фиксируем формат хранения и предусматриваем миграцию, чтобы обновление не обнуляло сцены. В сумме эти меры дают предсказуемый возврат в сцену и снижение отказов — то, что заказчик видит как «приложение работает надёжно».

Способы хранения привязок: сравнение подходов

Привязка AR-сцены — это координаты и ориентация якоря в физическом пространстве плюс метаданные: идентификатор, время создания, привязка к пользователю или устройству. От того, где эти данные лежат, зависит, увидит ли гость свою сцену после перезапуска приложения и найдёт ли её коллега с другого устройства. Ниже — три схемы, между которыми реально выбирают на старте проекта.

Вариант Когда подходит Ограничения
Локальный кэш привязок Один пользователь, одно устройство, сцена нужна офлайн Сцена не переживает переустановку приложения и не видна другим; при смене устройства привязка теряется
Облачная синхронизация Несколько пользователей, общие сцены, смена устройств Нужен устойчивый канал; при обрыве связи сцена не подгружается, требуется разрешение конфликтов при одновременной правке
Гибридная схема Продакшн с офлайн-сценариями и общими объектами Сложнее в поддержке: две точки правды, нужна явная политика слияния и версионирование записей

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

Гибрид закрывает оба случая: свежая привязка пишется локально и уходит в облако, при старте подтягиваются изменения, а расхождения решаются по времени последней правки. Ограничения хранения тут не в объёме — записей мало, — а в сроке жизни: устаревшие якоря копятся и дают ложные совпадения, поэтому нужна политика очистки по возрасту и активности.

Как мы внедряем persistent AR: этапы работ

Внедрение persistent AR начинается с аудита того, что уже есть в приложении: как устроена сцена, где хранятся привязки объектов к реальным поверхностям, какие данные теряются при закрытии сессии. На этом этапе мы фиксируем текущую архитектуру, точки отказа и требования к восстановлению сцены — от этого зависит вся дальнейшая схема.

Дальше работа идёт по этапам, каждый из которых заканчивается проверяемым результатом:

  1. Аудит AR-сцен — разбираем текущую реализацию, определяем, какие объекты должны сохраняться между сессиями, и где происходит потеря состояния.
  2. Проектирование схемы привязок — описываем, как объекты привязываются к реальным точкам и поверхностям, чтобы сцена корректно восстанавливалась при повторном запуске.
  3. Настройка синхронизации — выстраиваем обмен данными между устройством и хранилищем: что уходит на сервер, что остаётся локально, как разрешаются конфликты при рассинхроне.
  4. Реализация восстановления сцены — сцена собирается заново из сохранённых привязок, включая положение объектов, их состояние и порядок отображения.
  5. Проверка устойчивости — тестируем сценарии с потерей связи, сменой устройства, повторным входом и длительными паузами между сессиями.
  6. Передача документации — отдаём описание схемы привязок, регламенты работы с хранилищем и инструкции для дальнейшей поддержки.

Что проверяем на каждом шаге

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

Что остаётся у заказчика

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

Что заказчик получает на руки после внедрения

Внедрение persistent AR не заканчивается демонстрацией: сцена, которая переживает перезапуск приложения, — это набор артефактов, по которым ваша команда сможет её эксплуатировать, расширять и восстанавливать без нас. Ниже — что именно передаём на руки.

  • Конфигурации привязок. Файлы, где описано, к каким опорным точкам и меткам цепляются объекты, как ведётся повторное распознавание при смещении камеры и что происходит при потере трекинга. Правится без пересборки приложения.
  • Схемы хранения. Структура локального кэша и серверного хранилища: какие данные сцены лежат на устройстве, какие синхронизируются, как разрешаются конфликты при одновременной правке с двух устройств.
  • Политики доступа. Роли и права на создание, просмотр и изменение сцен, привязка к вашей системе учётных записей, правила шаринга между пользователями и внешними гостями.
  • Документация. Описание формата сцены, жизненного цикла объекта, точек расширения и ограничений платформы — с примерами, по которым новый разработчик вводится в проект без устных пояснений.
  • Регламенты восстановления. Пошаговые сценарии на случай повреждения сцены, рассинхрона между устройствами или сбоя синхронизации: как откатиться к последней целостной версии и что проверять после.
  • Скрипты миграции и обслуживания. Обновление формата сцены между версиями приложения, чистка устаревших привязок, перенос данных при смене хранилища.
  • Метрики и мониторинг. Набор показателей стабильности сцен и доли успешных восстановлений сессии, чтобы деградацию было видно до жалоб пользователей.

Каждый пункт согласуем с вашей командой на этапе передачи: разбираем конфигурации на живом проекте, прогоняем регламент восстановления на тестовой сцене. Опишите задачу — вернёмся с оценкой и планом по объёму этих артефактов.

Кейс: сохранение AR-сцен в промышленном приложении

Заказчик — производитель промышленного оборудования — пришёл с задачей: сервисные инженеры на объектах размечают AR-сценами точки обслуживания узлов, но разметка жила только до закрытия приложения. После перезапуска сцена пропадала, и инженер калибровал заново по реперным меткам — на это уходило до 15 минут на каждый узел, а часть сцен не восстанавливалась вовсе.

Мы переработали хранение сцен: привязка перестала зависеть от сессии и от положения камеры в момент старта. Каждая сцена получила устойчивый идентификатор и привязку к физическим опорным точкам объекта, а состояние сохраняется на устройстве и синхронизируется между инженерами. При повторном входе приложение распознаёт точку, подтягивает сохранённую разметку и накладывает её на текущий вид — без ручной калибровки.

Что изменилось в цифрах

Метрика До После
Доля успешных возвратов в сцену ~40% 96%
Время повторной калибровки до 15 мин 20-30 сек
Устойчивость при перезапуске сцена терялась сохраняется
Сцены, восстановленные после сбоя 0 все активные

Отдельно закрыли устойчивость: если приложение падает или устройство перезагружается, сцена восстанавливается из последнего согласованного состояния, а не с нуля. Инженеры перестали тратить смену на повторную разметку — на объекте из 30 узлов экономится несколько часов работы.

Проект вёл наш инженер по мобильной разработке совместно с командой заказчика; стек и инструменты подбирали под задачу — ARKit и ARCore как базовые платформы, поверх — собственный слой хранения сцен.

Чем отличается persistent AR от сессионного AR?

Сессионный AR живёт ровно столько, сколько открыта камера: пользователь навёл устройство, увидел объект, закрыл экран — и вся сцена исчезла. Persistent AR сохраняет привязку цифрового объекта к физическому месту между запусками приложения, поэтому пользователь возвращается и видит то же наполнение там же, где оставил.

Разница начинается с якоря. В сессионном режиме якорь существует в оперативной памяти и умирает вместе с сессией — привязывать его не к чему, кроме текущего кадра. В persistent AR якорь нужно сохранить: записать его координаты в мировой системе отсчёта, а затем при новом запуске восстановить позицию относительно распознанной карты окружения. Отсюда требование к точности — если карта перестроится со смещением, объект «уедет» на десятки сантиметров, и пользователь это заметит сразу.

Дальше расходятся архитектура приложения. Сессионному AR достаточно камеры и слоя отрисовки: состояние живёт в памяти, синхронизировать нечего. Persistent AR требует хранилища для якорей и карт, механизма повторной локализации при входе в зону и правил разрешения конфликтов, когда два пользователя привязывают объекты к одной точке. Появляется серверная часть, а с ней — вопросы доступа, версионирования сцен и отката, если обновление карты испортило привязки.

Пользовательский опыт отличается не «эффектами», а сценариями. Сессионный AR годится для примерки, демонстрации товара, разовой подсказки — там ценность в моменте. Persistent AR открывает то, что живёт во времени: метки на объектах инфраструктуры, навигация по размеченному зданию, коллективные сцены, где каждый следующий посетитель видит след предыдущих. Выбор между подходами — это выбор между разовым взаимодействием и накоплением состояния, и он определяет, понадобится ли приложению серверная синхронизация вообще.

Технические сомнения и ограничения

Persistent AR упирается в четыре инженерных ограничения: поддержку оборудования, объём сохраняемых данных, защиту привязок и перенос уже созданных сцен. Разберём каждое — с тем, как это закрывается на практике.

Совместимость устройств

Сохранение сцены требует, чтобы устройство умело строить и удерживать карту окружения. На моделях без нужного набора сенсоров или без поддержки нужного уровня трекинга сцена либо не восстановится, либо встанет со смещением. Поэтому мы заранее делим парк устройств на те, где persistent AR работает полноценно, и те, где включаем упрощённый режим — с привязкой к метке вместо карты. Пользователь не видит разницы в сценарии, но не получает сломанную сцену.

Объём данных и безопасность привязок

Карта окружения и якоря весят немного, но при сотнях сцен на объект хранилище начинает расти. Мы держим на устройстве только активные сцены, остальное — на сервере, с догрузкой по требованию; неиспользуемые привязки архивируются по правилу хранения.

Привязка — это координата в физическом мире, и подменить её значит показать пользователю чужой объект. Поэтому запись якоря подписывается, а доступ к сцене проверяется по роли: гость видит, редактор меняет, владелец удаляет.

Миграция сцен

Сцены, собранные на старом формате разметки, переносятся скриптом: якоря пересчитываются в текущую систему координат, вложения перепривязываются по идентификаторам. Если сцена ссылалась на удалённый объект, миграция помечает её как требующую ручной проверки, а не роняет при открытии.

Что будет, если пользователь обновит приложение и сцена не откроется?

Старые версии формата читаются обратно — мы держим совместимость на чтение минимум на две ветки назад. Если сцена собрана в формате, который текущая версия не понимает, приложение не падает, а предлагает обновить сцену или открыть её в режиме просмотра без редактирования.

Можно ли откатить привязку, если сцена встала со смещением?

Да. Для каждой сцены хранится предыдущее состояние якоря, и откат возвращает её к рабочей привязке. Если смещение вызвано изменением самого помещения, сцену перепривязывают заново — по метке или по новой карте окружения.

Обсудим вашу задачу по сохранению AR-сцен

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

  • Текущий стек: движок дополненной реальности, платформа (iOS/Android/кроссплатформа), версия и режим трекинга.
  • Как сейчас сохраняется сцена: локальное хранилище, облако, привязка якорей к координатам или к визуальным меткам.
  • Что уже работает и где ломается: потеря позиции при перезапуске, дрейф якорей, рассинхрон между устройствами.
  • Ограничения: офлайн-режим, требования к точности привязки, число одновременных пользователей в одной сцене.
  • Целевые метрики: время восстановления сцены, допустимое смещение объектов, доля успешных повторных сессий.
  • Доступы и среда: тестовые сборки, устройства, доступ к бэкенду и хранилищу для проверки гипотез.

По этим вводным мы вернёмся с оценкой работ и планом внедрения: какие слои нужно доработать, что переиспользуем из текущего кода, а что переписываем. Консультация инженера на этом этапе — разбор вашей архитектуры и рисков, а не общие рекомендации.

Опишите задачу в свободной форме — пришлите текущую реализацию, логи или описание сбоя. Мы вернёмся с оценкой и планом работ.

Наши компетенции:

Последние работы

  • Разработка мобильного приложения для компании FEEDME
    Разработка мобильного приложения для компании FEEDME
    1009
  • Разработка мобильного приложения для компании XOOMER
    Разработка мобильного приложения для компании XOOMER
    902
  • Разработка мобильного приложения для компании RHL
    Разработка мобильного приложения для компании RHL
    1331
  • Разработка мобильного приложения для компании ZIPPY
    Разработка мобильного приложения для компании ZIPPY
    1179
  • Разработка мобильного приложения для компании Affhome
    Разработка мобильного приложения для компании Affhome
    1106
  • Разработка мобильного приложения для компании FLAVORS
    Разработка мобильного приложения для компании FLAVORS
    713