알파 테스팅
알파 테스팅이란, 물체를 투명, 불투명으로만 처리하는 방식이다.
알파 값을 0 혹은 1로만 사용하며, 투명한 부분은 아예 클리핑하는 기법이다.
반투명 처리를 하지 않기 때문에, 처리 속도가 매우 빠른 편이라는 장점이 있지만 반투명을 처리하지 않는 만큼 그래픽 표현에 제약이 있는 방식이다.
또한, 오브젝트를 불투명으로만 렌더링하기 때문에 뒤에 가려지는 물체에 대한 렌더링을 할 필요가 없으며 깊이 테스트 또한 정확하게 실행할 수 있게 된다.
알파 블렌딩
반투명을 허용하며 겹쳐있는 물체들의 색을 보간하여 최종 색상을 결정하는 방식이다.
반투명을 처리하는 만큼, 하나의 픽셀에 대해 여러 번의 렌더링이 실행될 수 있다.
알파 테스팅에 비해 다양한 그래픽 표현을 할 수 있게 되지만, 그만큼 처리 속도가 느리다.
또한, 렌더링 순서에 따라 의도하지 않은 클리핑이 발생하는 경우도 있다.
위의 그림을 보자.
앞에 먼저 그려진 풀의 경우, 알파가 0인 부분도 클리핑하지 않고 렌더링을 실행하게 된다. 그 이후 뒤에 있는 풀을 그리게 되면 앞의 풀보다 뒤에 있는 부분이 깊이 테스트에서 걸러지기 때문에, 뒤의 풀이 그려져야 함에도 불구하고 일부분이 그려지지 않는 것을 확인할 수 있다.
알파 블렌딩은 이처럼 그려지는 순서나 위치에 따라 의도하지 않은 클리핑이 발생할 수 있다.
알파 소팅
위의 문제를 해결하기 위해선, 간단한 방법이 있다.
뒤에 있는 물체부터 그리는 것이다.
위의 경우, 붉은색 풀의 일부가 클리핑되는 이유는 초록색 풀이 그려진 부분에서 투명한 곳의 깊이보다 더 깊이가 크기 때문에, 깊이 테스트에서 걸러졌기 때문이다.
그렇다면, 가장 뒤의 오브젝트부터 순서대로 앞의 오브젝트를 렌더링하게 되면 기존의 깊이보다 깊이가 더 작은 경우에만 렌더링되기 때문에 위의 그림처럼 일부가 가려지는 경우가 발생하지 않을 것이다.
하지만, 알파 소팅을 사용한다고 하더라도 모든 상황에서 문제가 해결되는 것은 아니다.
알파 소팅은 기본적으로 CPU에서 카메라와 물체의 거리를 기준으로 오브젝트를 정렬한 뒤, 렌더링 순서를 정하는 방식이다. 즉, 거리가 더 먼 대상을 먼저 렌더링 한다는 것이다.
그렇다면, 아래의 그림을 보자.
위의 경우에 초록색 물체가 주황색 물체보다 더 앞에 있는 것을 볼 수 있다.
하지만, 카메라와의 거리를 기준으로 판단한다면 초록색 물체가 더 멀리 있다고 볼 수 있다.
이로 인해, 실제로는 주황색 물체가 먼저 그려져야 함에도 불구하고 초록색 물체가 먼저 그려지는 상황이 발생할 수 있다.
이러한 문제를 해결할 수 있는 가장 간단한 방법은 깊이 버퍼를 사용하지 않는 것이다.
새로 그려지는 물체가 항상 앞에 그려지도록 한다면, 위와 같은 문제 없이 간단하게 알파 소팅의 문제점을 해결할 수 있다.
하지만, 깊이 버퍼를 사용하지 않으면 또 다른 문제가 발생하게 된다.
위와 같이, 물체의 내부가 비치는 상황이 발생할 수 있다. 깊이 테스트를 하지 않고 렌더링하기 때문에 반투명한 모든 오브젝트가 섞여서 렌더링되는 것이다.
위와 같이 반투명한 물체들이 겹쳐서 렌더링 되는 경우에 내부가 비치지 않도록 하고 싶다면 2Pass 렌더링을 해야한다.
먼저, 1차적으로 오브젝트를 불투명 상태로 렌더링을 하며 렌더타겟에 깊이를 기록한다.
이후, 해당 깊이값을 이용하여 반투명으로 다시 렌더링하는 것이다. 1차적으로 저장했던 깊이 값보다 더 큰 깊이 값을 가지고 있다면 렌더링하지 않도록 하는 것이다. 이를 통해, 내부가 비치지 않도록 해결할 수 있다.
이 방식은 2번의 Draw Call이 발생하므로, 필요한 상황에만 적절하게 사용하는 것이 좋다. (오버헤드가 발생할 수 있음)
'그래픽스' 카테고리의 다른 글
컴퓨터 그래픽스 - Forward / Deffered / Forward+ Rendering (1) | 2024.10.30 |
---|---|
컴퓨터 그래픽스 - 우버 쉐이더 (Uber Shader) (1) | 2024.10.09 |
컴퓨터 그래픽스 - LOD (Level Of Detail) (0) | 2024.06.16 |
컴퓨터 그래픽스 - 드로우 콜(Draw Call)과 배칭(Batching) (1) | 2024.05.21 |
컴퓨터 그래픽스 - Rim Light (역광) (0) | 2024.05.14 |