그래픽스 알파 테스트, 알파 블렌딩, 알파 소팅
알파 테스트, 알파 블렌딩, 알파 소팅에 대해 공부하도록 하겠습니다.
알파 테스트와 알파 블렌딩은 그래픽스 공부에서 매우 중요한 편입니다.
텍스쳐에는 알파채널값이 있는데, 보통 256단계 입니다.
이 256단계에서 알파 테스트와 알파 블렌딩은 어떻게 처리를 할것이며 또한 알파 소팅은 어떤형식인지 알아봅시다.
1. 알파 테스트
알파 테스트는 알파값이 얼마든간에 알파값이 있으면 1, 없으면 0으로 판단합니다.
그러므로 연산속도가 비교적 빠릅니다. 하지만 그만큼 퀄리티가 매우매우 안좋아집니다.
그럼에도 알파 테스트를 게임에서 많이 사용하는 이유는 게임에서는 대부분 속도가 매우 중요 하기 떄문입니다.
반투명은 없다고 생각하시는게 무방합니다.
2. 알파 블렌딩
알파 블렌딩은 모든 픽셀은 언제나 보일 수 있다. 라는 전제로 작동합니다.
반투명의 유리가 수십장 겹쳐져 있어도 전부 보이는 것처럼 말입니다.
따라서 깊이 테스트를 해야합니다.
그러면서 위치값을 재 정렬하고, 다시 찍으면서 모든 픽셀의 색상을 다 계산을 해줘야합니다.
그러므로 알파 테스트보다 현저히 느립니다.
여기서 궁금증 왜 대부분 알파테스트만 사용하는가?
이펙트가 대부분 알파 블렌딩으로만 처리되는 경우가 많습니다. 이로인해 게임에 부하가 많이 생기는 원인중
하나입니다
3. 알파 소팅
보통 알파값이 없는 오브젝트들은 화면 앞(z값이 작은것) 부터 멀리있는 순으로 정렬하여 렌더링을 합니다.
화면 앞의 오브젝트를 렌더링 하면 뒤에 가려진 오브젝트는 렌더링을 안하기 떄문입니다(backface culling)
하지만 알파값이 들어간다면?
오브젝트들은 알파블렌딩을 시도를 해야합니다. 앞에 그려진것에 의해서 가려져 렌더링을 건너뛰면 안되기때문에
뒤에서부터 겹쳐야됩니다.
즉 일단 알파값이 1인 불투명한 오브젝트들은 먼저(앞에서 뒤 순서로) (DirectX 기준 z값이 작은순 부터 큰순서로 오름차순) 그려줍니다 기존의 앞에서 뒤로 그려준다음 알파값이 있는 값들을 그려줍니다. 앞->뒤에서 뒤->앞 (DirectX 기준 z값이 큰 순서 부터 내림차순) 으로 다시 소팅을 해줘야합니다.
따라서 게임에서는 알파값이 있는것과 없는것을 따로 그리며, 알파값이 있는경우도 각 위치값에 따라서 분류를 합니다.