애니메이터

Alpha Blending & Alpha Test 본문

그래픽 일반

Alpha Blending & Alpha Test

욤마핫 2012. 5. 27. 11:02

출처 : http://blog.naver.com/PostView.nhn?blogId=xeoris&logNo=100045508141

 

<Alpha Test의 효용성에 대하여 (Alpha blend와의 비교)>


1. 연산을 절약할 수 있다.
  Alpha blending시 발생하게 되는 per pixel 연산인 color mixing 연산을 줄일 수 있다. 이미 값이 계산되어있는 Pixel 위에 B.alpha의 불투명도로 B를 겹쳐 그리는 경우,
    Pixel.color = Pixel.color * (1.0f - B.alpha) + B.color * B.alpha;
의 연산을 하게 되는데, 이 연산은 매 픽셀마다 이루어지게 된다. B.alpha가 0.0f인 경우, 값의 변화가 없음에도 불구하고 연산을 해야 한다. 따라서 투명한 공간이 많은 텍스쳐일 수록 많은 시간이 헛되이 소모되게 되며, alpha test를 사용함으로써 시간을 절약할 수 있다. (불투명한 곳만 모델링 한 오브젝트를 렌더하는 경우, alpha blending 에 비해서 alpha test가 더욱 적은 연산을 한다.)

 

2. Billboard 렌더 시 쉽게 정확한 렌더를 할 수 있다.
  Alpha blending의 경우, 정확한 값의 계산을 위해서는 z-buffering을 사용할 수 없었다. 빈 공간이 있는 물체의 경우, alpha값이 0인 부분에서도 z-buffer는 해당 z값을 저장해 둠으로 인해, z-buffer를 사용하게 되면 그려져야 할 물체가 그려지지 않는 상황이 발생할 수 있다. 이는 모든 transparent 한 물체들을 카메라의 view의 반대방향으로 정렬하여 차례대로 렌더함으로써 해결해야 한다.
  이 때, Alpha test를 사용하게 되면, 쉽게 z-buffering을 사용하여 문제를 해결할 수 있다. Alpha test는 pixel별로 render 여부를 결정하기 때문에, 그려지지 않는 pixel에 대해서는 아예 넘겨주지 않을 수 있고, 그에 따라서 그려지지 않는 픽셀(투명한 픽셀)에 대해서는 z 값이 update되지 않는다. 따라서 z-buffer를 사용하여 그림을 그리면, 특별한 정렬 없이도 원하는 결과를 만들어 낼 수 있다.

 

--------------------------------------------------------

참고로 짧게 설명하자면, alpha blending은 두 픽셀의 색을 섞는 것이고

alpha test는 어떤 픽셀을 특정 value와 비교하여 그 결과를 바탕으로

픽셀에 대한 렌더 여부를 결정하는 방식이다.

Stencil buffer를 추가로 사용하여 두 가지 방식을 모두 사용할 수도 있지만

3개의 스텝을 돌려 얻는 결과나, 잘 선택되어 1개의 스텝만 도는 결과가 거의 같기에

잘 선택해 돌리는 편이 훨씬 이익이라 하겠다.

(사실 2번의 문제가 크다.)

 

그에 따른(2번 문제) 테스트는 시험기간에 해 봤었지만, 본 아티클에는 귀찮아서 패스 -_-

혹시라도 나중에 생각이 잘 안나면, 본 글의 내용을 바탕으로 직접 돌려보자.