Диагностика и исправление дрожания и дрейфа контента в приложении
"Виртуальный контент дрейфует", "объекты дрожат", "позиция нестабильна" - это частые проблемы, с которыми разработчики сталкиваются в AR-приложениях. Нестабильный контент сильно разрушает эффект присутствия и может приводить к плохому пользовательскому опыту.
Эта статья поможет понять причины дрожания и дрейфа контента и предлагает систематический процесс диагностики и оптимизации.
Отличайте "нормальное дрожание" от "аномального дрейфа"
Сначала нужно сформировать реалистичные ожидания. Высокоточное AR-tracking на мобильных устройствах само по себе является сложной задачей. Следующие ситуации находятся в нормальном диапазоне. Их нельзя полностью устранить, но можно оптимизировать:
Небольшое высокочастотное дрожание:
- Проявление: Виртуальный объект слегка дрожит на уровне миллиметров.
- Причина: Это вызвано физическим шумом датчиков устройства, пределами точности алгоритмов visual tracking и небольшим дрожанием рук при удержании устройства.
- Пример: При наблюдении с близкого расстояния, например если разместить виртуальный объект на столе и подойти ближе, такое небольшое дрожание нормально.
Кратковременный дрейф:
- Проявление: Когда пользователь быстро перемещает или поворачивает устройство, виртуальный объект на короткое время (0.5-1 секунду) получает смещение позиции, а затем восстанавливается.
- Причина: При быстром движении накопленная ошибка IMU (инерциального измерительного блока) и задержка visual localization в SLAM-системе устройства могут вызывать кратковременный дрейф позиции.
- Пример: В динамических сценах это допустимо. Если объект быстро "возвращается" в правильную позицию, значит система работает эффективно.
А следующие ситуации являются аномальными проблемами, которые нужно диагностировать и исправлять:
- Постоянный значительный дрейф позиции: Виртуальный объект медленно и непрерывно уходит от своего правильного положения и не восстанавливается или восстанавливается только через долгое время.
- Сильные скачки или мерцание: Виртуальный объект сильно прыгает на экране или то появляется, то исчезает.
- Несогласованная относительная позиция с реальными объектами: Виртуальный объект не может стабильно "закрепиться" на реальном объекте.
Примечание
Также есть важный момент:
Для устройств, работающих в режимах 0DoF, 3DoF или 5DoF, ощущение совмещения и реалистичности изначально слабее, чем у устройств 6DoF. Когда пользователь быстро движется, поворачивает или идет по лестнице, виртуальные объекты не могут следовать идеально.
Поэтому в таких режимах явления вроде "парения" контента в воздухе или "смещения позиции" являются фундаментальными ограничениями возможностей устройства, а не неисправностью "дрожания или дрейфа контента", рассматриваемой в этой статье.
О различиях опыта между разными режимами xDoF см. введение в Лучшие практики навигации.
Систематический процесс диагностики
Выполняйте диагностику в следующем порядке, начиная с наиболее вероятных причин.
Шаг 1. Внешняя среда и аппаратные факторы (изменение кода не требуется)
Проверка физической среды:
- Насыщенность текстурами
Не слишком ли однообразна тестовая среда? Большие однотонные белые стены, гладкие полы и стеклянные поверхности могут приводить к отказам или ошибкам visual localization. - Динамические объекты
Есть ли в среде много движущихся объектов, например толпы людей или движущиеся автомобили? Динамические объекты мешают visual localization, но такая проблема обычно кратковременная. - Путаница сцен
Есть ли в среде очень похожие области, например лифтовые холлы у разных входов? Визуально похожие зоны влияют на localization и могут заставлять результаты локализации прыгать между похожими областями. Такие проблемы можно избежать, заранее задав подходящую prior information.
- Насыщенность текстурами
Проверка аппаратной части устройства:
- Нагрев устройства
Сильно ли нагревается устройство после длительной работы? Перегрев может вызывать снижение частот CPU/GPU и влиять на tracking performance собственной SLAM-системы устройства. Это самая частая причина постоянного дрейфа. - Производительность устройства
Некоторые старые устройства ограничены производительностью hardware и точностью компонентов, поэтому на них легче возникает scale drift, из-за чего виртуальный контент также дрейфует. Попробуйте заменить устройство для сравнительного теста, чтобы понять, вызвана ли проблема ограничениями самого устройства.
- Нагрев устройства
Шаг 2. Анализ качества карты и локализации (с использованием внешних инструментов)
Используйте Mega Toolbox:
- Запустите Mega Toolbox в той же точке и наблюдайте за стабильностью localization.
- Если localization в Toolbox также дрейфует или прыгает: Проблема находится в самой карте или текущая среда не подходит для localization.
- Если localization в Toolbox стабильна: Проблема находится в вашем приложении. Перейдите к шагу 3.
Запустите EIF data в PC simulation:
- Воспроизведите EIF data, записанные на месте.
- Если воспроизведение также дрейфует или прыгает: Это означает, что сама сцена не подходит для localization, или есть проблема в самой карте, или у устройства, записавшего EIF, есть scale drift в motion tracking.
- Если воспроизведение стабильно: Это означает, что сама сцена дружелюбна к localization, а проблема может быть связана с факторами при realtime-запуске вашего приложения, например нагревом устройства и throttling.
Шаг 3. Проверка внутренней логики приложения
Обновление pose:
- Проверьте, не применяете ли вы к pose data ненужное дополнительное сглаживание, например чрезмерные
LerpилиSmoothDamp, которые наоборот могут вызывать задержку и ощущение дрейфа. - В большинстве случаев самым стабильным подходом является прямое использование исходного Pose, возвращенного Mega.
- Проверьте, не применяете ли вы к pose data ненужное дополнительное сглаживание, например чрезмерные
Соответствие coordinate system:
- Убедитесь, что связи node между виртуальными объектами, scene camera,
MegaTrackerи похожими объектами корректны, а значенияlocal transformу nodes подMegaBlocksне изменялись. - Неправильная настройка node может привести к неверным преобразованиям coordinate system и вызвать непредсказуемое поведение rendering контента.
- Убедитесь, что связи node между виртуальными объектами, scene camera,
Особое напоминание: проблемы visual overlay на OST-headset
После проверки localization и rendering logic, если вы используете OST (optical see-through) headset, нужно также учитывать особую категорию проблем.
Даже если само устройство обладает хорошей способностью 6DoF motion tracking, иногда virtual object все равно плохо совмещаются с physical space. Обычно это не сбой Mega localization service, а присущее явление, вызванное оптическими принципами OST-устройств, например ошибками optical alignment или различиями eye calibration.
Подробное объяснение и способы оценки таких проблем см. в Особых примечаниях для OST-устройств.
Итоги и лучшие практики
После диагностики выше вы должны определить корневую причину дрожания или дрейфа контента. Чтобы быстро повторить выводы и перейти к действиям, в таблице ниже сведены распространенные симптомы, возможные причины и лучшие практики. По результату своей диагностики найдите соответствующее решение в таблице.
| Тип проблемы | Возможная причина | Лучшая практика |
|---|---|---|
| Небольшое дрожание | Шум датчиков, пределы алгоритма | Такое небольшое дрожание является нормальным и обычно не требует особого внимания |
| Дрейф после быстрого движения | Задержка SLAM, коррекция алгоритма | Можно направлять пользователя двигать устройство плавно. Если быстрое восстановление невозможно, уделите этому дополнительное внимание |
| Постоянный большой дрейф | Сбой SLAM, различия устройств | Используйте другое устройство для cross-validation |
| Сильные скачки/мерцание | Похожая сцена, среда неблагоприятна для localization | Задайте auxiliary prior information или направляйте пользователя |
| Несогласованная относительная позиция с реальными объектами | Ошибка localization/map, ошибка code logic | Тестируйте с нескольких viewpoints, наблюдайте позицию virtual object и исправьте возможные ошибки кода |
Если после описанной диагностики и исправлений проблема все еще существует, отправьте подробный отчет через Issue reporting, приложив screen recordings, EIF data recordings и подробные logs.