Диагностика и исправление: контент не отображается в приложении
"Я вижу реальный мир, но виртуальный контент не появляется." Это одна из самых распространенных проблем в AR-разработке. Такая проблема может возникать на разных этапах, от самой Mega localization до вашей логики рендеринга.
Эта статья поможет вам системно диагностировать и решить эту проблему.
Процесс диагностики: снаружи внутрь
Следование принципу "сначала внешнее, затем внутреннее" позволяет эффективно локализовать проблему. Выполните следующие шаги по порядку:
Шаг 1: использовать внешние инструменты для проверки состояния Mega localization (без изменения кода)
Прежде чем углубляться в код приложения, сначала подтвердите, работает ли сама служба Mega localization нормально. Это самый важный шаг, который помогает понять, находится ли проблема в самой Mega localization или в интеграции приложения, например в рендеринге.
Использовать Mega Toolbox (мобильная сторона)
- Установите Mega Toolbox App на тестовый телефон, если она еще не установлена.
- Откройте App и войдите в
On-site verification and diagnosis tool. - Войдите в свою учетную запись и выберите ту же библиотеку localization, что и в приложении.
- Отнесите телефон в то же место, где приложение во время тестирования не отображает контент.
- Наблюдайте результат:
- Если Toolbox успешно локализуется (в интерфейсе статус
Found): поздравляем. Служба Mega localization работает нормально. Проблема внутри вашего приложения, особенно в рендеринге и логике отображения контента. Перейдите к Шагу 2. - Если Toolbox не локализуется (в интерфейсе статус
NotFoundили другой): проблема в самой службе localization. См. следующий раздел для более глубокого анализа.
- Если Toolbox успешно локализуется (в интерфейсе статус
Использовать симуляцию на PC (если EIF уже собран)
- Если для этой сцены уже записаны EIF data, можно воспроизвести эти данные в Unity editor на PC с помощью инструмента проверки
session. - Наблюдайте результат:
- Если при воспроизведении localization успешна (в интерфейсе статус
Found): проблема в коде приложения или среде конкретного устройства. - Если при воспроизведении localization неуспешна (в интерфейсе статус
NotFoundили другой): проблема в самой службе localization. См. следующий раздел для более глубокого анализа.
- Если при воспроизведении localization успешна (в интерфейсе статус
- Если для этой сцены уже записаны EIF data, можно воспроизвести эти данные в Unity editor на PC с помощью инструмента проверки
Шаг 2: проверить внутреннюю логику рендеринга и контента приложения
Если Шаг 1 подтвердил, что сама служба Mega localization работает нормально, проблема находится в коде приложения. Проверьте следующее:
Размещен ли контент под правильным узлом:
- Правильно ли вы разместили 3D-объекты под автоматически созданными инструментом узлами
MegaBlocks>Block_*? - Проверьте hierarchy между контентом и узлами Block, чтобы убедиться, что виртуальный контент отображается в правильной позиции во время выполнения.
- Правильно ли вы разместили 3D-объекты под автоматически созданными инструментом узлами
Правильно ли настроен Block Root у MegaTracker:
- Разверните
AR Sessionи проверьте, является лиBlock RootвMega TrackerузломMegaBlocks, созданным инструментом.
- Разверните
Изменялись ли узлы MegaBlocks:
- Убедитесь, что имена узлов
Block_*не изменены и никакие значения в свойствахlocal transformне изменены.
- Убедитесь, что имена узлов
Правильно ли настроено прослушивание событий:
- Изменяли ли вы логику обработки callback localization в
MegaTracker? - Выполняет ли ваш код создание экземпляров или отображение виртуального контента только после события успешного статуса localization?
- Изменяли ли вы логику обработки callback localization в
Рендеринг на гарнитуре и прозрачность:
- Не перекрыт ли виртуальный объект другими объектами? Проверьте render queue и Shader.
- Если используется устройство VST (video see-through), проверьте, правильно ли ваш рендеринг наложен поверх видеопотока.
- Если используется устройство OST (optical see-through), проверьте, не плохо ли виден контент из-за слишком сильного окружающего света.
Проблемы самого контента:
- Есть ли проблема с 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.