occlusion culling
오클루전 컬링은 다른 오브젝트에 가려 카메라에 보이지 않는 오브젝트의 렌더링을 비활성화하는 기능이다. 3D 환경에서 최적화 기법으로 자주 쓰이는 방법이지만 AR 환경에서는 현실의 물체가 가상의 오브젝트를 가리는 효과를 연출하여 현실감을 살리는데 사용된다.
Visual Positioning System
VPS는 위치와 지형지물을 인식하여 센서에만 의존하는 GPS의 한계를 넘어 포지셔닝을 지원하는 기법으로, VPS가 적용된 AR에서는 현실에 존재하는 물체에 배치된 오브젝트가 가려지는 것이 중요하다.
따라서 AR에서는 Depth라는 개념이 중요한데, 가상의 오브젝트의 Depth와 실제 오브젝트와의 거리를 비교하여 가까운 오브젝트가 상대적으로 먼 오브젝트를 가릴 수 있도록 구현된다.
Depth API
Depth는 Unity에서 Position.z의 값을 설정하는 것으로 조절이 가능하지만, 현실 오브젝트와의 거리를 측정하기 위해서는 앱을 구동하는 AR 기기가 Depth API 기능을 가지고 있어야한다.
Occlusion
적용Depth API를 지원하고 있다면 AR에서 Occlusion culling을 적용하는 방법을 알아보자
AR Occlusion Manager
가장 간단한 방법은 XR Origin에 있는 main camera에 AR Occlusion Manager 컴포넌트를 추가하는 것이다. 이렇게 추가만하고 빌드만 해도 앱을 실행했을 때, 현실의 오브젝트가 가상의 오브젝트를 가리는 것을 확인할 수 있다.
하지만 단점은 현실의 오브젝트가 가상의 오브젝트를 가릴 때 가상 오브젝트의 렌더링이 깨져보이는 현상이 발생하는데 이를 방지하기 위해서 다른 방법을 활용할 필요가 있다.
AR Default Plane
두 번째 방법은 AR Default Plane을 활용하는 것이다.
먼저 Material을 하나 생성하여 Shader를 VR - SpparialMapping - Occlusion으로 설정한다.
다음 하이어라키 창에서 AR Default Plane을 생성하고
Plane의 Mesh Renderer에 생성한 Material을 넣어준 뒤 프리팹으로 만들어 준다.
마지막으로 XR Origin의 AR Plane Manager 컴포넌트에 생성한 프리팹을 넣어주고 빌드를 하면 된다.
이 경우 첫 번째 방법과 동일하게 Occlusion이 적용되지만, 가상의 오브젝트의 렌더링이 깨지지 않고 깔끔하게 경계선을 따라 가려지는 모습을 확인할 수 있다.