다이렉트X 든 opengl 이든.. 보통 3d 물체에 어떤 표면에는.. 텍스쳐를 입힌다. 물론 텍스쳐 없이 기본 빛 속성만 가지고도 색을 표현할 수도 있지만, 그 것은 간단한 물체일 때 가능한 이야기이고, 보통은 텍스쳐 맵핑을 한다.
 하지만 여기서 생각해 볼 수 있는 것이.. 텍스쳐는 멀리있으나, 가까이 있으나, 해상도가 같다... 미리 만들어 놓은 256x256이든, 512x512 이던 같다는 의미이다. 그렇다면.. 카메라의 위치에 따라 정말 가까이 있는 물체와 저 멀리 있는 물체의 실제 화면에 나타나는 면의 크기는 달라진다. ( 프로젝션 연산의 원근 비율로 인하여) 그렇다면, 같은 픽셀양의 해상도를 가진 텍스쳐가.. 넓게, 혹은 좁게 면안에 색을 채워야 하는데.. 그럴때 설정해 주는 것이 필터링이다.

 필터링에는 크게 4가지 종류가 있다. (물론 실제로는 6가지이지만, 보통 4가지만 쓴다. )



이렇게 4가지를 enum으로 정의해서, 현재 예제에서 값이 바뀔때 마다 넣어준다. 실제 D3D의 define 값은.. 6개 이다.


피라미드 형태와 가우시안 필터가 있지만, 보통은 잘 쓰지 않는다.
그럼 필터를 설정하는 부분을 보자..


loadTexture의 내부를 보면, 파일을 로드한 이후에 샘플러스테이트를 설정해준다. 거기서 3가지를 설정하는데, 현재는 모두 NONE 즉 아무 필터링 옵션 없이 라는 뜻이다. 저기서 MIN, MAG, MIP 필터가 있는데, MIN은 텍스쳐가 실제 해상도보다 축소되었을 때, MAG는 실제 해상도보다 확대 되었을 때, 그리고 MIP필터는, 밉맵인데, 이 필터는 나중에 따로 설명해야 하겠다.


그리고 랜더 함수에서 필터가 변했다면, 새로 옵션을을 설정하는 부분을 만들어뒀다. 그리고, 샘플러스테이트에서, 최대Anisotropy 값을 설정해 줄 수 있고, 밉맵의 수치도 설정해 줄 수 있다.


위의 사진은 각 부분 함수들의 모습이다..

그럼 실제로 화면을 보면서 어떻게 변하는지 보도록 하자...


이 것이 기본 실행 화면에, 아무 설정도 없는 상태이다.


위의 3장을 보면, MIN필터의 값을 계속 바꾸지만, 변화가 없다. 왜냐하면, 아직 해상도보다 줄어 들지 않았기 때문에, 바뀔 값이 없기 때문이다.


이제 mag 필터에서 point와 Linear로 설정해 보았다.

 


하지만 아직 까진 크게 바뀐거 같지 않다... 그래서...


확대를 해서 보았다...먼저 아무것도 없는 상태...


그리고 포인터..


그리고 Linear다. Anistropic 은 아직 수치 조절을 많이 하지 않으면, 거의 Linear와 흡사한 느낌이다. 먼가 Point와의 차이는.. 약간 뭉게진 듯한. .그런 느낌이 든다.. 그렇다.. 텍스쳐를 화면에 입히다 보면, 케릭터같이 디테일을 요하는 텍스쳐가 있는 반면에, 지면 같이 약간 뭉개진 흙바닥이 더 사실감있어보이는 경우가 있다.. 그럴 때 이런 필터 옵션을 주면 되는 것이다..


위의 3장은 Min필터의 None, Point, Linear 옵션이다. 사진상으로는 티가 잘 안나는데, 실제로 화면으로 보면, 역시나, Point는 각 픽셀이 선명하게, Linear는 뭉게져서 나온다..

머, 옵션이 별로 필요없어 보일 지도 모른다. 하지만 아까 들었던 예들처럼, 상황에 따라 어떤 필터링 옵션을 주고 안주고에 따라, 화면의 디테일이 더 살아난다는 점을 생각해야하겠다.
Posted by 바람처럼..
|