알파 블렌딩 이란 픽셀을 조합하는 기술이다.
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 |