Диагностика и исправление: проблема отображения контента в приложении
«Я вижу реальный мир, но виртуальный контент не появляется». Это одна из наиболее распространенных проблем в AR-разработке. Эта проблема может возникнуть на различных этапах, начиная от самого Mega-позиционирования и заканчивая вашей рендеринговой логикой.
В этой статье мы поможем вам системно проверить и решить эту проблему.
Процесс проверки: от внешнего к внутреннему
Следуя принципу «сначала внешнее, потом внутреннее», вы можете эффективно определить проблему. Пожалуйста, выполните следующие шаги в указанном порядке:
Шаг 1: Проверка статуса Mega-позиционирования с помощью внешних инструментов (без изменения кода)
Перед тем, как углубиться в код вашего приложения, убедитесь, что сам сервис Mega-позиционирования работает корректно. Это самый важный шаг, который поможет вам определить, является ли проблема связанной с Mega-позиционированием или с интеграцией рендеринга и других аспектов разработки приложения.
Использование Mega Toolbox (мобильная версия)
- Установите Mega Toolbox App на вашем тестовом телефоне (если он еще не установлен).
- Откройте приложение и перейдите в
Инструмент проверки и диагностики на месте. - Войдите в свою учетную запись и выберите ту же базу позиционирования, которая используется в вашем приложении.
- Принесите телефон в то же место, где в вашем приложении контент не отображается.
- Обратите внимание на результаты:
- Если Toolbox успешно определил позицию (на экране отображается статус
Found): Поздравляем! Сервис Mega-позиционирования работает корректно. Проблема находится внутри вашего приложения, особенно в рендеринге и логике отображения контента. Перейдите к Шагу 2. - Если Toolbox не смог определить позицию (на экране отображается статус
NotFoundили другой): Проблема связана с самим сервисом позиционирования. Пожалуйста, обратитесь к следующему разделу для более глубокого анализа.
- Если Toolbox успешно определил позицию (на экране отображается статус
Использование симуляции на ПК (если были собраны данные EIF)
- Если вы уже записали данные EIF для этого сценария, вы можете воспроизвести эти данные в Unity Editor на ПК с помощью инструмента
session. - Обратите внимание на результаты:
- Если при воспроизведении позиция была успешно определена (на экране отображается статус
Found): Проблема находится в вашем коде приложения или в специфической среде устройства. - Если при воспроизведении позиция не была определена (на экране отображается статус
NotFoundили другой): Проблема связана с самим сервисом позиционирования. Пожалуйста, обратитесь к следующему разделу для более глубокого анализа.
- Если при воспроизведении позиция была успешно определена (на экране отображается статус
- Если вы уже записали данные EIF для этого сценария, вы можете воспроизвести эти данные в Unity Editor на ПК с помощью инструмента
Шаг 2: Проверка рендеринга и логики контента внутри приложения
Если на Шаге 1 было установлено, что сервис Mega-позиционирования работает корректно, то проблема находится в коде вашего приложения. Пожалуйста, проверьте следующие аспекты:
Расположен ли контент в правильном узле:
- Правильно ли вы разместили 3D-объекты под автоматически сгенерированным узлом
MegaBlocks>Block_*? - Проверьте иерархическую связь между контентом и узлом Block, чтобы убедиться, что виртуальный контент рендерится в правильном месте во время выполнения.
- Правильно ли вы разместили 3D-объекты под автоматически сгенерированным узлом
Корректно ли настроен корневой узел Block в MegaTracker:
- Разверните
AR Sessionи проверьте, является лиBlock RootвMega TrackerузломMegaBlocks, сгенерированным инструментом.
- Разверните
Был ли изменен узел MegaBlocks:
- Убедитесь, что вы не изменили имя узла
Block_*и не изменили никакие значения в свойствеlocal transform.
- Убедитесь, что вы не изменили имя узла
Корректно ли настроено прослушивание событий:
- Вы не изменили ли логику обработки обратного вызова позиционирования в
MegaTracker? - Ваш код выполняет ли операцию инстанцирования или отображения виртуального контента только после того, как было вызвано событие успешного статуса позиционирования?
- Вы не изменили ли логику обработки обратного вызова позиционирования в
Рендеринг и прозрачность на головном устройстве:
- Не перекрывает ли ваш виртуальный объект другой объект? Проверьте очередь рендеринга и шейдер.
- Если вы используете устройство VST (видеопрозрачность), проверьте, правильно ли ваш рендеринг наложен на видеопоток.
- Если вы используете устройство OST (оптическая прозрачность), проверьте, не затрудняет ли слишком сильный окружающий свет видимость контента.
Проблемы с самим контентом:
- Есть ли проблемы с самим префабом (Prefab), который вы инстанцируете? Например, отсутствие файла модели, ошибка шейдера, масштаб 0 и т.д. Попробуйте вручную разместить такой же объект в сцене и посмотрите, отображается ли он корректно.
Анализ распространенных причин неудачного позиционирования и рекомендации по улучшению
Если на Шаге 1 вы обнаружили, что Mega Toolbox также не может определить позицию, то необходимо внимательно рассмотреть и решить проблему с позиционированием. Ниже приведены распространенные причины и соответствующие меры:
Причина 1: Несовпадение карты и окружающей среды
Сцена на месте изменилась значительно по сравнению с моментом сбора данных для создания карты, или область, в которой вы проводите испытания, не была охвачена при сборе данных, или карта сама по себе является ошибочной.
Рекомендации по улучшению:- Убедитесь, что карта, загруженная в вашей базе позиционирования, соответствует текущему физическому пространству.
- Если окружающая среда была изменена (например, ремонт, замена экспозиции), необходимо заново собрать данные и создать карту.
- Если при сборе данных для создания карты не была охвачена область, где возникла проблема, необходимо обновить данные и создать новую карту.
Причина 2: Плохая инициализация окружающей среды
Запуск приложения в области с малым количеством текстур (например, на однотонной стене, направленной на пол).
Рекомендации по улучшению:- Подсказывайте пользователям запускать приложение в области с большим количеством текстур, чтобы помочь системе быстро выполнить начальную позиционирование.
- В интерфейсе приложения дайте четкие инструкции, например, «Поднимите телефон и осмотритесь вокруг».
Причина 3: Проблемы с сетью или сервисом
Задержка в сети приводит к истечению времени ожидания запроса к сервису позиционирования, или сервис позиционирования сам по себе имеет сбои, или достигнут предел одновременного использования. В последнем случае обратитесь к нам с сообщением об ошибке.Причина 4: Достижение границ алгоритма
Mega-позиционирование основано на передовых алгоритмах компьютерного зрения, ИИ и других технологиях, но оно не является универсальным и имеет определенные границы возможностей алгоритма. Если в определенных сценариях или точках позиционирование постоянно не удается, вы можете отправить нам видеозапись, записи данных EIF и другие сведения, чтобы помочь нам постоянно улучшать и обновлять алгоритмы.
Кроме того, необходимо особо отметить, что Mega-позиционирование требует определенного времени, обычно около 1-2 секунд. Учитывая сложность реальных сценариев, таких как задержки в сети, высокая загрузка, снижение частоты процессора из-за нагрева телефона и другие факторы, это время может быть больше. Поэтому в приложении можно создать четкий интерфейс загрузки/ожидания, чтобы сообщить пользователям, что «Позиционирование в процессе...», и избежать ситуаций, когда пользователи могут подумать, что сервис не работает или не может определить позицию из-за ожидания.
Примечание
- Первое позиционирование обычно занимает больше времени, чем последующие, так как система должна загрузить соответствующий контент после успешного первого позиционирования. Это нормальное явление.
- Быстрое перемещение устройства может привести к потере позиции. Подсказывайте пользователям перемещать устройство плавно.
Итоги и рекомендации
- Всегда используйте внешние инструменты для предварительной проверки: Это позволяет максимально быстро сузить область поиска проблемы до «позиционирования» или «рендеринга».
- Создавайте правильные ожидания у пользователей: С помощью подсказок в интерфейсе приложения сообщайте пользователям, что позиционирование требует времени, и направляйте их в подходящую среду.
- Уделяйте внимание логике контента: Убедитесь, что настройки привязки контента и другие параметры корректны.
- Используйте логирование: Выводите логи на важных этапах (например, при вызове события, получении положения, статусе ответа), это поможет вам быстро определить проблемы в логике кода.
С помощью данной систематической проверки вы должны быть в состоянии решить большинство проблем с «отсутствием отображения контента». Если проблема все еще существует, подготовьте данные EIF и логи и отправьте нам подробный отчет с помощью отчета о проблеме.