개요

컴퓨터 그래픽스에서 안보이는 물체를 랜더링하지 않아서 자원을 절약하는 기법을 통칭한다. 컬링에는 View volume culling, Occlusion culling, Back-face culling 3가지 종류가 있다. 각각 카메라 밖의 물체, 오브젝트 뒤에 가려져서 안보이는 물체, 한 오브젝트 내에서 뒷면을 랜더링 하지 않아서 자원을 절약하는 방식으로 구현된다.

View volume culling

view volume밖의 물체를 렌더링 하지 않는 기법이다. Bounding Box를 통해서 물체가 화면 밖에 있는지 아닌지를 구분한다. Bounding box 는 원형, 박스, 축 정렬 박스 (axis-aligned bounding box AABB)등이 있으며, AABB 방식이 현재 빠르고 정확한 방식으로 알려져 있다. AABB 방식은 화면의 축과 Bounding box의 축을 정렬하는 직사각형으로 bounding box를 구현하는 방식을 말한다.

View volume Culling 은 3가지의 경우가 있다. 내부, 경계, 외부. 내부는 그대로 화면에 출력하며 경계의 물체는 Clipping을 이용해서 잘라내 출력해야 한다. 외부의 오브젝트는 랜더링 프로세스에서 탈락시켜서 출력시키지 않는다.

뷰 볼륨 컬링

위의 그림은 원을 바운딩 박스로 사용했을경우 처리되는 수식을 정리한 것이다. r은 원의 반지름이며, n은 면의 노말벡터, c는 원의 중심, a는 면위의 임의의 한 점을 말한다.

사실 [math] p(t) = n(t-a) [/math]는 노말벡터가 n이고 한 점이 a인 면의 방정식임으로 윗식은 면과 원과의 거리를 구한것으로 이를 생각하면 윗 표현은 자명하다.

Hierarchical Culling

바운딩 박스가 크면 일단 최소단위의 바운딩 박스로 쪼개어서 좀더 세밀하게 체크하는 기법을 말한다. 트리 구조를 이용한다.

문제점

만약 거울과 같은 상황이면 외부에 있는 물체도 처리해야 하는데 이 경우는 어떻게 처리하는 가?

즉 바운딩 박스 외부의 물체에 의한 효과를 내부의 물체에 반영할 수 없다는 문제가 있다.

Occlusion culling

Back-face culling

오브젝트 뒷면을 랜더링하지 않는 기법이다. 삼각형의 노말이 카메라를 향하는지 아니면 카메라 반대편을 향하는지 검사하여 구현한다.

백페이스 컬링

윗 식에서 e는 삼각형위의 어떤 정점이라 하고 n을 삼각형의 노말벡터라고 하자. 이경우 e와 n을 내적하면 e와 n의 기울기를 알 수 있다. 만약 이 기울기가 90도 이내이면 카메라가 검출할 수 있는 시야각안에 있는 것이고 아니면 뒷면일 것이다. 이를 이용하여 en의 부호를 계산해서 만약 음수이면 랜더링하지 않는 방식으로 자원을 절약한다.

문제점

만약 오브젝트에 구멍이 있어서 뒷면을 랜더링해야 한다면? 오브젝트가 투명하다면?

등과 같이 오브젝트의 뒷면을 랜더링해야 하는 상황에서 문제가 발생한다.