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 를 클릭합니다.

마스크 파일 다운로드 항목

팝업에서 필요에 따라 표준 또는 낮은 정밀도를 선택하고 해당 다운로드 버튼을 클릭하여 마스크 파일 압축 파일(zip)을 다운로드합니다. 압축을 풀어 모델 파일을 가져옵니다.

마스크 파일 다운로드

참고

압축 파일에는 하나 이상의 glb 모델 파일이 포함될 수 있습니다. 여러 모델을 Unity에 각각 가져오거나 Blender 같은 디지털 콘텐츠 제작 소프트웨어에서 합친 후 사용할 수 있습니다.

[선택 사항] 모델 자르기

다운로드한 모델을 모두 합치면 Block 전체를 덮습니다. Block 전체를 가릴 경우 이 단계를 건너뛰고 Unity에 바로 가져옵니다. 일부 영역만 가릴 경우 다음 단계에 따라 모델을 자릅니다.

압축을 푼 모델 파일을 Blender 같은 디지털 콘텐츠 제작 소프트웨어로 가져옵니다.

자르기 전

가림에 필요한 부분만 남기도록 모델을 자르고 glb 형식으로 내보냅니다. 여러 모델을 가져온 경우 필요에 따라 합친 후 내보낼 수 있습니다. Unity에서 Block과 정렬되도록 Block 좌표계에서의 위치, 방향, 크기를 유지합니다.

자르기 후

Unity로 모델 가져오기

모델을 Unity로 가져와 장면에서 해당 Block 노드의 자식으로 연결합니다. 여러 모델을 사용하는 경우 각각 가져와 모두 같은 Block 노드에 연결합니다.

참고

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

Inspector 패널에서 각 가림 모델의 Transform을 수정하여 Block 노드에 대한 위치, 회전, 크기를 설정합니다:

  • 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 지정

각 모델에 가림 머티리얼을 적용합니다. 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으로 사용하는 것이 좋습니다.

관련 항목