본문 바로가기

예전/3D

[3D] 알파 블렌딩 (ALPHABLEND)


알파 블렌딩 이란 픽셀을 조합하는 기술이다.

Dest(대상)에 Src(원본) 을 변경 조합해서 픽셀 색을 조정한다.


알파 블렌딩을 할 때 주의 사항은 현재 그려져 있는 대상과 렌더링할 폴리곤의 색을 합성하는 것이기 때문에 불투명 오브젝트를 렌더링 해야한다.


알파 블렌딩을 할 때는 

1. 블렌딩을 하지 않는 물체를 먼저 그리고, 

2. 블렌딩을 할 물체를 카메라와의 거리에 따라 정렬한다.

3. 블렌딩을 이용하는 물체들을 뒤에서 앞 순서로 그려나간다.


알파 블렌딩은 부하가 심한 작업이므로 렌더링이 끝나면 꺼줘야 한다. 또한 블렌딩이 필요한 폴리곤들을 한번에 처리해 하나의 프레임에서 여러 번 블렌딩을 켜고 끄는 일은 피하는 것이 좋다.



키고 끄는 방법은


g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDANABLE,TRUE);         // 켠다.

g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDANABLE,FALSE);        // 끈다.



대상(D3DRS_DESTBLEND)과 원본(D3DRS_SRCBLEND)에 블렌드 인수를 다양하게 조합하면 여러가지 효과를 만들어 낼 수 있다.




1) 선형 합성

: 최종색 = (1 - a) * DEST + a * SRC




2) 덧셈 합성

: 최종색 = 1 * DEST + a * SRC


- 빛의 표현에 사용된다.



3) 뺄셈 합성

: 최종색 = 1 * DEST - a * SRC


- 간단한 그림자 표현에 사용된다.



4) 곱셈 합성

: 최종색 = DEST * SRC + 0 * SRC


- 한쪽이 검은색이면 최종색도 검은색이다.



5) 제곱 합성

: 최종색 = DEST * DEST + 0 * SRC


- 어두운 것은 더 어둡게, 밝은 것은 그대로 표시한다.



6) 네거티브, 포지티브 합성

: 최종색 = (1 - DEST) * SRC


- 검은색은 흰색으로 흰색은 검은색으로 보색 변환을 하게한다.



7) 불투명

: 최종색 = 0 * DEST + 1 * SRC



알파 성분은 픽셀의 투명도 단계를 지정하는데 이용된다. 

알파 성분의 유효 범위는 [0, 255] 이다. 이때 비율로는 [0%, 100%] 이다. 

즉, 검은색 알파 값(0)을 가진 픽셀은 완전히 투명하며, 흰색 알파 값(255)를 가진 픽셀은 완전히 불투명하다.





이 외에도 알파 블렌딩 설정에는 여러가지가 있다.


D3DRS_ALPHAFUNC 알파 채널이 섞인 텍스쳐를 화면에 출력할 것인가 에 대한 문제이다.


( http://telnet.or.kr/directx/graphics/reference/d3d/enums/d3dcmpfunc.htm )




D3DRS_ALPHAREF 는 D3DRS_ALPHAFUNC 에서 비교대상으로 사용할 값이다. 

예를들어 알파 채널이 100 이상인 부분만 출력하고 싶다면,


g_pd3dDevice->SetRenderState(D3DRS_ALPHAREF,100);

g_pd3dDevice->SetRenderState(D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL);



D3DRS_BLENDOP 텍스쳐가 그려질 때 DEST와 SRC를 어떻게 섞을 것인가에 대한 것이다.


( http://telnet.or.kr/directx/graphics/reference/d3d/enums/d3dblendop.htm )







[참고] 용책

http://blog.naver.com/phoogu/110018099415

http://blog.bab2min.pe.kr/103


'예전 > 3D' 카테고리의 다른 글

[3D] 높이 맵  (0) 2013.01.08
[3D] 픽킹 (Picking)  (3) 2013.01.08
[3D] 컬링 모드  (0) 2013.01.07
[3D] SetSamplerState  (0) 2013.01.07
[3D] 절두체 컬링의 종류  (1) 2012.12.28