Table of Contents

Unity에서 EasyAR Mega를 사용해 occlusion 구현

Occlusion은 AR에서 virtual-real fusion immersion을 향상시키는 핵심 기술입니다. 이 문서는 Unity에서 EasyAR Mega를 통해 occlusion effect를 구현하는 방법을 설명합니다.

시작하기 전에

Occlusion 구현 방식

  • Offline modeling: Block coordinate system 아래에서 wall, column, large equipment와 같은 현실 세계 entity에 대해 1:1 matching geometry를 생성하거나, Block dense model을 crop 및 face reduction하여 optimized model을 얻습니다.

  • Runtime alignment: runtime에 cloud localization을 통해 Block coordinate system을 real space와 align하고 해당 geometry를 load합니다.

  • Material replacement: 이러한 geometry에 특수 occlusion material을 부여합니다.

  • Visual effect: GPU가 다른 virtual object를 render할 때 occluded part의 pixel은 depth test를 통과하지 못해 자동으로 cull되므로, virtual object가 현실 physical space의 occlusion logic을 따르게 됩니다.

매핑 결과의 마스크 파일 사용

다음 단계에 따라 cloud localization database 의 Mask file download 항목에서 매핑 결과의 마스크 파일을 다운로드하고, occlusion용 white model로 사용하여 scene에 가져옵니다. 마스크 파일은 그대로 사용할 수도 있고 필요에 따라 잘라서 사용할 수도 있습니다.

참고

이 다운로드 방식은 mapping version 9.6 이상의 매핑 결과에만 적용됩니다.

마스크 파일 다운로드

Block을 cloud localization database에 추가한 뒤, 해당 Block 행의 Action 열에서 Mask file download 를 클릭합니다.

마스크 파일 다운로드 항목

팝업에서 필요에 따라 standard precision 또는 low precision을 선택하고 해당 Download 버튼을 클릭하여 glb 형식의 마스크 파일을 다운로드합니다.

마스크 파일 다운로드

[선택 사항] 모델 자르기

마스크 파일은 전체 Block을 덮습니다. 범위가 occlusion 요구를 만족하면 바로 사용합니다. 일부 영역만 필요한 경우 아래 단계로 모델을 자릅니다.

Blender와 같은 디지털 콘텐츠 제작 소프트웨어에서 다운로드한 모델을 엽니다.

자르기 전

모델을 잘라 occlusion에 필요한 부분만 남기고 glb 형식으로 저장합니다. Unity로 가져온 뒤 Block과 맞도록 position, rotation, scale은 변경하지 않습니다.

자르기 후

Unity로 모델 가져오기

모델을 Unity로 가져와 scene의 해당 Block node 아래에 child node로 배치합니다.

참고

Unity에서 glb 모델을 가져오려면 com.unity.cloud.gltfast 패키지 6.8 이상이 필요합니다. Package Manager 로 설치하거나 업그레이드하세요.

Inspector 패널에서 Block node 기준 occlusion 모델의 Transform 을 설정합니다.

  • Position(0, 0, 0) 으로 설정합니다.
  • Rotation(0, 180, 0) 으로 설정합니다.
  • Scale(1, 1, 1) 으로 설정합니다.

완료 후 occlusion 모델은 Block dense model의 해당 부분과 맞아야 합니다.

occlusion 모델 가져오기

참고

cloud localization database에서 다운로드한 마스크 파일은 Unity와 다른 좌표계 정의를 사용하므로, 정렬하려면 Rotation 의 Y 성분을 180 으로 설정해야 합니다.

모델에 occlusion material 지정

모델 material을 occlusion material로 변경합니다. Unity 내장 SpatialMappingOcclusion 을 사용할 수 있습니다.

occlusion 모델 material 변경

EIF 데이터 시뮬레이션 또는 실제 기기 실행

EIF 데이터 시뮬레이션 또는 실제 기기 실행으로 가상 객체가 해당 실제 영역에 의해 가려지는지 확인합니다.

Geometry를 occlusion으로 사용

다음 단계에 따라 scene에 occlusion으로 사용할 geometry를 추가하고 효과를 검증할 수 있습니다.

Occlusion geometry 배치

Mega Block의 dense model에 따라 built-in geometry 또는 custom geometry를 occlusion으로 사용하고 Block coordinate system의 올바른 위치에 배치합니다. Place occlusion geometry

[Optional] Panorama에 따라 geometry 위치 fine-tune

Fine-tune occlusion according to the panorama

Geometry에 occlusion material 부여

Geometry material을 occlusion material로 변경합니다. Unity built-in SpatialMappingOcclusion을 사용할 수 있습니다. Fine-tune occlusion according to the panorama

EIF data로 simulate running 또는 real device running

Running effect에 따라 occlusion model placement를 fine-tune할 수 있습니다.

Crop 및 face reduction한 dense model을 occlusion으로 사용

다음 단계에 따라 export된 Mega Block dense model을 crop 및 face reduction하여 occlusion용 white model을 얻고 scene에 import하여 occlusion으로 사용합니다.

Mega Blocks에서 export

Mesh 오른쪽의 Export 버튼을 클릭하여 dense model을 export합니다.

Export options 수정

Export 시 export options 수정에 주의합니다.

그림의 1은 LOD level입니다. Level이 낮을수록 model은 더 단순하고 face 수는 더 적습니다. 최고 precision이 필요하면 최고 level을 선택합니다.

그림의 2는 texture export option입니다. 여기서는 occlusion용 white model만 필요하며 texture는 필요하지 않습니다.

Model crop 및 face reduction

Export된 model을 Blender와 같은 digital content creation software에서 crop 및 face reduction하고 glb로 저장합니다.

예제에서는 Blender의 Decimate Modifier를 사용합니다.

Before cropping

Crop 및 face reduction 후:

After cropping

Occlusion model을 Unity로 import하고 scene의 Block node 아래에 mount

Import occlusion model

Model Transform 수정

Model의 Transform을 수정하여 Position, Rotation이 모두 0이 되도록 합니다.

이때 occlusion용 white model은 dense model과 맞아야 합니다. Digital content creation software에서 crop 및 face reduction을 할 때 Block coordinate system의 정의를 변경하지 않았기 때문입니다.

Occlusion model fit

Model에 occlusion material 부여

Model material을 occlusion material로 변경합니다. Unity built-in SpatialMappingOcclusion을 사용할 수 있습니다.

Replace occlusion model material

EIF data로 simulate running 또는 real device running

EIF data로 simulate running하거나 real device에서 실행하여 효과를 확인합니다.

Occlusion effect expectation

Occlusion effect는 주로 다음 요소의 영향을 받습니다.

  • Localization tracking 자체의 accuracy
  • Model placement의 accuracy
  • Model 자체의 accuracy(simple geometry가 아닌 경우)

Localization drift 시 몇 centimeter의 misalignment가 발생하는 것은 정상입니다.

Occlusion model의 face 수가 너무 많으면 performance에 영향을 주기 쉽습니다. 필요한 area에서만 사용하고 가능한 simple geometry를 occlusion으로 사용하는 것이 좋습니다.

관련 항목