Table of Contents

Использование EasyAR Mega в Unity для реализации occlusion

Occlusion — ключевая технология для повышения погружения при совмещении виртуального и реального контента в AR. В этой статье описано, как реализовать эффект occlusion в Unity через EasyAR Mega.

Перед началом

Способы реализации occlusion

  • Offline modeling: в системе координат Block создайте geometry с соответствием 1:1 для реальных объектов, таких как стены, колонны, крупное оборудование; или получите оптимизированную модель путем обрезки и уменьшения числа полигонов dense model Block.

  • Runtime alignment: во время выполнения выровняйте систему координат Block с реальным пространством через cloud localization и загрузите соответствующую geometry.

  • Material replacement: назначьте этим geometry специальные occlusion materials.

  • Визуальный эффект: когда GPU рендерит другие виртуальные объекты, пиксели перекрытых частей автоматически отбрасываются из-за непрохождения depth test, благодаря чему виртуальные объекты следуют логике occlusion реального физического пространства.

Использование файлов маски из результатов построения карты

Следуйте шагам ниже, чтобы скачать файл маски из результата построения карты через пункт Mask file download в cloud localization database, использовать его как white model для occlusion и импортировать в сцену. Файл маски можно использовать напрямую или обрезать по необходимости.

Примечание

Этот способ скачивания применим только к результатам mapping версии 9.6 и выше.

Скачать файл маски

После добавления Block в cloud localization database нажмите Mask file download в столбце Action строки этого Block.

Пункт скачивания файла маски

В popup выберите standard precision или low precision и нажмите соответствующую кнопку Download, чтобы скачать файл маски в формате glb.

Скачать файл маски

[Необязательно] Обрезать модель

Файл маски покрывает весь Block. Если это покрытие уже подходит для occlusion, используйте файл напрямую. Если нужна только часть области, обрежьте модель.

Откройте скачанную модель в ПО для создания цифрового контента, например Blender.

До обрезки

Обрежьте модель, оставив только часть для occlusion, и сохраните ее в формате glb. Не меняйте position, rotation и scale модели, чтобы после импорта в Unity она совпала с Block.

После обрезки

Импортировать модель в Unity

Импортируйте модель в Unity и добавьте ее под соответствующий node Block в сцене как дочерний node.

Примечание

Для импорта модели glb в Unity нужен пакет com.unity.cloud.gltfast версии 6.8 или выше. Установите или обновите его через Package Manager.

В панели Inspector измените Transform модели occlusion относительно node Block:

  • Установите Position в (0, 0, 0).
  • Установите Rotation в (0, 180, 0).
  • Установите Scale в (1, 1, 1).

После этого модель occlusion должна совпадать с соответствующей частью dense model Block.

Импорт модели occlusion

Примечание

Файл маски из cloud localization database использует систему координат, отличную от Unity, поэтому компонент Y в Rotation нужно установить в 180.

Назначить модели материал occlusion

Измените материал модели на материал occlusion. Можно использовать встроенный в Unity SpatialMappingOcclusion.

Замена материала модели occlusion

Симуляция с EIF-данными или запуск на устройстве

Используйте симуляцию EIF-данных или реальное устройство, чтобы проверить, скрываются ли виртуальные объекты соответствующими реальными областями.

Использование geometry как occlusion

Следуйте шагам ниже, чтобы добавить geometry, используемую как occlusion, в сцену и проверить эффект.

Разместить occlusion geometry

На основе dense model Mega Block используйте встроенную geometry или собственную geometry как occlusion и разместите ее в правильной позиции в системе координат Block. Place occlusion geometry

[Optional] Точно настроить положение geometry по панораме

Fine-tune occlusion according to the panorama

Назначить geometry occlusion material

Измените material geometry на occlusion material. Можно использовать встроенный в Unity SpatialMappingOcclusion. Fine-tune occlusion according to the panorama

Симулировать запуск с EIF data или запустить на реальном устройстве

Точно настройте размещение occlusion model в соответствии с результатом выполнения.

Использовать обрезанную и упрощенную dense model как occlusion

Следуйте шагам ниже, чтобы обрезать и упростить экспортированную Mega Block dense model, получить white model для occlusion и импортировать ее в сцену как occlusion.

Экспорт в Mega Blocks

Нажмите кнопку Export справа от Mesh, чтобы экспортировать dense model.

Изменить export options

При экспорте обратите внимание на изменение export options.

На рисунке 1 — LOD level. Чем ниже уровень, тем проще модель и тем меньше faces. Если нужна максимальная точность, выберите самый высокий уровень.

На рисунке 2 — опция экспорта textures. Здесь нужна только white model для occlusion, textures не требуются.

Обрезать и упростить модель

Обрежьте и упростите экспортированную модель в программе создания цифрового контента, например Blender, и сохраните как glb.

Совет

В примере используется Decimate Modifier в Blender.

Before cropping

После обрезки и упрощения:

After cropping

Импортировать occlusion model в Unity и разместить под Block node в сцене

Import occlusion model

Изменить Transform модели

Измените Transform модели так, чтобы Position и Rotation полностью были 0.

В этот момент white model для occlusion должна совпадать с dense model, потому что операции обрезки и упрощения в программе создания цифрового контента не изменили определение системы координат Block.

Occlusion model fit

Назначить модели occlusion material

Измените material модели на occlusion material. Можно использовать встроенный в Unity SpatialMappingOcclusion.

Replace occlusion model material

Симулировать запуск с EIF data или запустить на реальном устройстве

Используйте EIF data для симуляции запуска или запустите на реальном устройстве, чтобы увидеть эффект.

Ожидаемый эффект occlusion

Эффект occlusion в основном зависит от:

  • Точности localization tracking
  • Точности размещения модели
  • Точности самой модели, если это не простая geometry

При localization drift смещение в несколько сантиметров является нормальным.

Слишком большое количество faces в модели occlusion может влиять на производительность. Рекомендуется использовать ее только в необходимых областях и по возможности применять simple geometry как occlusion.

Связанные темы