Table of Contents

Диагностика и исправление: контент не отображается в приложении

"Я вижу реальный мир, но виртуальный контент не появляется." Это одна из самых распространенных проблем в AR-разработке. Такая проблема может возникать на разных этапах, от самой Mega localization до вашей логики рендеринга.

Эта статья поможет вам системно диагностировать и решить эту проблему.

Процесс диагностики: снаружи внутрь

Следование принципу "сначала внешнее, затем внутреннее" позволяет эффективно локализовать проблему. Выполните следующие шаги по порядку:

Шаг 1: использовать внешние инструменты для проверки состояния Mega localization (без изменения кода)

Прежде чем углубляться в код приложения, сначала подтвердите, работает ли сама служба Mega localization нормально. Это самый важный шаг, который помогает понять, находится ли проблема в самой Mega localization или в интеграции приложения, например в рендеринге.

  1. Использовать Mega Toolbox (мобильная сторона)

    • Установите Mega Toolbox App на тестовый телефон, если она еще не установлена.
    • Откройте App и войдите в On-site verification and diagnosis tool.
    • Войдите в свою учетную запись и выберите ту же библиотеку localization, что и в приложении.
    • Отнесите телефон в то же место, где приложение во время тестирования не отображает контент.
    • Наблюдайте результат:
      • Если Toolbox успешно локализуется (в интерфейсе статус Found): поздравляем. Служба Mega localization работает нормально. Проблема внутри вашего приложения, особенно в рендеринге и логике отображения контента. Перейдите к Шагу 2.
      • Если Toolbox не локализуется (в интерфейсе статус NotFound или другой): проблема в самой службе localization. См. следующий раздел для более глубокого анализа.
  2. Использовать симуляцию на PC (если EIF уже собран)

    • Если для этой сцены уже записаны EIF data, можно воспроизвести эти данные в Unity editor на PC с помощью инструмента проверки session.
    • Наблюдайте результат:
      • Если при воспроизведении localization успешна (в интерфейсе статус Found): проблема в коде приложения или среде конкретного устройства.
      • Если при воспроизведении localization неуспешна (в интерфейсе статус NotFound или другой): проблема в самой службе localization. См. следующий раздел для более глубокого анализа.

Шаг 2: проверить внутреннюю логику рендеринга и контента приложения

Если Шаг 1 подтвердил, что сама служба Mega localization работает нормально, проблема находится в коде приложения. Проверьте следующее:

  1. Размещен ли контент под правильным узлом:

    • Правильно ли вы разместили 3D-объекты под автоматически созданными инструментом узлами MegaBlocks > Block_*?
    • Проверьте hierarchy между контентом и узлами Block, чтобы убедиться, что виртуальный контент отображается в правильной позиции во время выполнения.
  2. Правильно ли настроен Block Root у MegaTracker:

    • Разверните AR Session и проверьте, является ли Block Root в Mega Tracker узлом MegaBlocks, созданным инструментом.
  3. Изменялись ли узлы MegaBlocks:

    • Убедитесь, что имена узлов Block_* не изменены и никакие значения в свойствах local transform не изменены.
  4. Правильно ли настроено прослушивание событий:

    • Изменяли ли вы логику обработки callback localization в MegaTracker?
    • Выполняет ли ваш код создание экземпляров или отображение виртуального контента только после события успешного статуса localization?
  5. Рендеринг на гарнитуре и прозрачность:

    • Не перекрыт ли виртуальный объект другими объектами? Проверьте render queue и Shader.
    • Если используется устройство VST (video see-through), проверьте, правильно ли ваш рендеринг наложен поверх видеопотока.
    • Если используется устройство OST (optical see-through), проверьте, не плохо ли виден контент из-за слишком сильного окружающего света.
  6. Проблемы самого контента:

    • Есть ли проблема с Prefab, который вы создаете? Например, отсутствуют файлы модели, ошибки Shader, scale равен 0 и т. д. Попробуйте вручную разместить такой же объект в сцене и проверить, отображается ли он нормально.

Анализ распространенных причин сбоя localization и рекомендации по улучшению

Если на Шаге 1 обнаружено, что Mega Toolbox также не может выполнить localization, нужно внимательно проверить и решить проблему localization. Ниже приведены распространенные причины и меры:

  • Причина 1: карта не соответствует среде
    Среда на месте сильно изменилась по сравнению со временем сбора и построения карты, либо область опыта не была покрыта во время сбора, либо сама карта неверна.
    Рекомендации по улучшению:

    • Убедитесь, что карта, загруженная в вашей библиотеке localization, соответствует текущему физическому пространству по сцене.
    • Если среда была изменена, например ремонт или замена экспозиции, необходимо повторно собрать и сгенерировать карту.
    • Если при сборе и построении карты проблемная область не была покрыта, нужно заново сгенерировать карту через incremental update.
  • Причина 2: плохая среда инициализации
    Приложение запускается в области с малым количеством текстуры, например у однотонной стены или направлено на пол.
    Рекомендации по улучшению:

    • Направляйте пользователей запускать приложение в областях с богатой текстурой, чтобы помочь системе быстро завершить initial localization.
    • Дайте в UI приложения четкую подсказку, например "Поднимите телефон и осмотритесь".
  • Причина 3: проблемы сети или сервиса
    Задержка сети приводит к timeout запроса службы localization, либо сама служба localization неисправна, либо превышен лимит одновременного использования. Для последних случаев своевременно сообщите нам.

  • Причина 4: достигнута граница возможностей алгоритма
    Mega localization основана на передовых алгоритмах компьютерного зрения, AI и т. п., но она не всемогуща и имеет определенные границы возможностей алгоритма. Если localization постоянно не удается в некоторых сценах или точках, вы можете отправить нам feedback через запись экрана, запись EIF data и другие способы, чтобы помочь нам постоянно улучшать и развивать алгоритмы.

Также важно отметить, что Mega localization требует времени, обычно около 1-2 секунд. С учетом сложности реальных сцен, таких как загруженность сети, высокая concurrency, нагрев телефона и снижение частоты, это время может быть больше. Поэтому в приложении можно сделать понятный экран загрузки/ожидания с сообщением "Localizing...", чтобы пользователь из-за ожидания не подумал ошибочно, что сервис не работает или localization не найдена.

Примечание
  • Первая localization обычно медленнее последующих, поскольку системе после первой успешной localization нужно загрузить соответствующий контент. Это нормальное явление.
  • Быстрое перемещение устройства может привести к потере localization. Направляйте пользователей двигать устройство плавно.

Итоги и лучшие практики

  • Всегда сначала проверяйте внешними инструментами: это быстрее всего сужает область проблемы до "localization" или "rendering".
  • Формируйте разумные ожидания пользователя: с помощью UI-подсказок сообщайте пользователю, что localization требует времени, и направляйте его в подходящую среду.
  • Обращайте внимание на логику контента: убедитесь, что настройки вроде content binding корректны.
  • Активно используйте логи: вывод логов в ключевых точках, таких как срабатывание событий, получение позы и статус ответа, помогает быстро находить проблемы логики кода.

С помощью приведенной выше системной диагностики вы сможете решить большинство проблем "контент не отображается". Если проблема остается, подготовьте EIF data и логи, затем отправьте нам подробный отчет через Issue report.