Использование EasyAR Mega в Unity для реализации occlusion
Occlusion — ключевая технология для повышения погружения при совмещении виртуального и реального контента в AR. В этой статье описано, как реализовать эффект occlusion в Unity через EasyAR Mega.
Перед началом
- Завершите быстрый старт с EasyAR Mega Unity sample.
- Умейте создавать контент, выровненный с реальным миром.
Способы реализации 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.

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

Симуляция с EIF-данными или запуск на устройстве
Используйте симуляцию EIF-данных или реальное устройство, чтобы проверить, скрываются ли виртуальные объекты соответствующими реальными областями.
Использование geometry как occlusion
Следуйте шагам ниже, чтобы добавить geometry, используемую как occlusion, в сцену и проверить эффект.
Разместить occlusion geometry
На основе dense model Mega Block используйте встроенную geometry или собственную geometry как occlusion и разместите ее в правильной позиции в системе координат Block.

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

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

Симулировать запуск с 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.

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

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

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

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

Симулировать запуск с EIF data или запустить на реальном устройстве
Используйте EIF data для симуляции запуска или запустите на реальном устройстве, чтобы увидеть эффект.
Ожидаемый эффект occlusion
Эффект occlusion в основном зависит от:
- Точности localization tracking
- Точности размещения модели
- Точности самой модели, если это не простая geometry
При localization drift смещение в несколько сантиметров является нормальным.
Слишком большое количество faces в модели occlusion может влиять на производительность. Рекомендуется использовать ее только в необходимых областях и по возможности применять simple geometry как occlusion.


