지금까지 텍스쳐를 쓰면서, 정말 중요하지만 사용하지 않았던 기능이 있다.
바로 알파다... 게임에서나 그래픽적으로나 알파의 표현은 중요하다.. 일단 알파가 뭔가 하면, 투명도를 말하는 것이다. 우리가 유리를 표현하고 싶을 때, 그 유리가 진한 불투명인지 거의 있는 듯 없는 듯한 투명인지를 표현할 때 바로 알파를 사용하는 것이다..

 일단 알파텍스쳐를 사용하려면, 말 그대로 알파 정보가 있어야된다. 그 것을 알파채널이라고 하는데, tga, png, dds 정도가 게임에서 많이 쓰는 알파용 텍스쳐 파일들이다. 다른 bmp, jpg 등은 알파를 표현할 채널이 없기 때문에, 알파를 쓰려면 저 3가지 중에 한가지를 쓴다. 

 그렇다면, 알파는 어떻게 표현이 될까.. 쉽게 생각하면.. 일단 알파로 표현될 부분의 뒷부분 픽셀의 색과 섞으면된다.. 그 것이 바로 알파 블랜딩이다. 쉽게 생각해 보면 된다.. 결국 반투명이라는 것은, 우리가 앞의 가린 물체 뒤의 물체가 보이는 것이다. 그런데 투명도가 높을수록, 거의 제 색에 가깝게 보이지만, 투명도가 점점 낮아질수록, 뒷 색이 선명도가 떨어지면서, 만약 그 유리가 색이 있는 색 유리라면, 그 색도 절반정도 보이는 형태가 될 것이다. 그것이 단순한 (픽셀 + 픽셀 ) / 2 연산으로 가능하다는 것이다.. 그럼 소스를 보자..


위의 텍스쳐가 바로 알파가 들어간 텍스쳐이다. 저 격자무늬부분이 빈공간을 나타내는데, 텍스쳐 가운데에 하늘색부분이 격자무늬가 절반정도 보이는 것을 알 수 있다. 이 텍스쳐는 tga 파일로 만들어졌다.


일단 기본적인 버텍스 정보나, 텍스쳐 로드는 다 똑같다. 랜더링 내에서만 조금 틀리다. 먼저 RenderState에서 알파블렌딩Enable을 True로 바꿔준다. 그리고 아래 2개도 똑같이 만든다.


그런데.. 조건에 sort어쩌고.. 라는 부분이 있다. 이 것이 무엇인고하니.. 알파가 아까 말했다시피 뒷색과 앞색을 섞는 것이라면... 뒷부분이 그려져야.. 제대로 알파색이 나오게 된다. 하지만.. 우리가 하는 랜더링은 사실.. 앞에서 부터 그린다.. 그러면 이미 결정나 버린 곳은 다른색을 칠할 필요가 없으니 연산량이 줄어들기 때문이다. 하지만 알파만은 반대로 그려야 하는데, 그래서 나온것이.. 알파 부분은 2번 그리면 된다.. 뒷면 한번, 앞면 한번.. 이 뒷면 앞면이 무엇인가 하면.. 컬링의 문제다.. 컬링이 화면에 보이지 않는 뒷면을 제거하는 것이긴한데.. 엄밀히 말하면.. 뒷면을 판단을 어떻게 할 것인가를 선택하는 것 뿐이다.. 우리가 만드는 3d 모형의 기본은 폴리곤. 즉 삼각형이다. 삼각형은 3개의 점을 가진다.. 하지만.. 그 3개의 점은... 순서가 없다.. (index버퍼를 순서라고 생각할 지 모르지만.. 그 것은 그냥 점 3개를 찍는 것일 뿐 여기의 순서와는 의미가 다르다.) 그래서 컬링 모드에 따라서.. 오른쪽으로 돌지, 왼쪽으로 돌지를 판단하여, 여기가 앞인지 뒤인지 결정한다.
 오른쪽으로 도는 것과 왼쪽으로 돌지가 무슨 상관이냐고 생각하겠지만, 그 방향에 따라 연산을 하면, 노멀방향이 반대가 되어, 앞 뒤를 판단할 수 있다.

 


그럼 위를 보면, D3DCULL_CW가 있다. 이 것이 우리가 현재 생각하는, 안보이는 뒷면을 그려준다. 그리고 CCW가 우리가 보는 부분을 그리고 뒷면을 컬링 시켜준다.


그리고 알파를 쓰더라도.. 컬모드를 NONE을 주면.. 좀 이상한? 현상을 확인할 수 있다.. 그 것은 잠시뒤에 실제로 보자..


그리고 모든 조건을 끄고 그리면.. 그냥 불투명텍스쳐가 된다.


이 것이 실행한 모습이다. 현재 제대로 알파값이 들어가서 나온다.

 

그리고 이 것이 알파 블랜딩을 끈 모습이다.. 그냥 자기만의 불투명 텍스쳐가 나온다...


그리고 이 것이 바로 아까 말했던 이상한 현상이다.. 분명히 지금.. 알파는 먹혔다. 하지만.. 뒷면이.. 없다.. 그 것이 바로 컬링으로 제거된 부분이 제대로 연산에 반영되지 못했기 때문이다. 이제 큐브를 돌려보자..


이 번에는 어떤 면은 보이고 어떤 면은 안보인다.


이 것이 돌릴 때 마다.. 계속 바뀐다. 이렇듯 뒷면의 유무에 따라서 알파 적용이 제대로 안될 수도 있는 것이다.
Posted by 바람처럼..
|