얼마전 포스팅에서 텍스쳐의 필터링 속성을 설정에 대해 적다가, 밉맵은 따로
설명하기로하고 건너뛰었는데, 그 이유가 바로 간단히 설명하기에는 너무 양이 많기 때문이였다.
 일단은 mipmap이 무엇인지에 대해서 부터 알아봐야 할 것이다. mipmap이란 이전에 texture가 실제 해상도에 비해 커지거나 작아졋을 때에 사용하는 필터링 옵션과 더불어 사용되면서, 역시나 확대 축소가 되었을 때 어떤식으로 동작하는지에 대해서 기본적으로 설정을 줄 수 있었다. 헷갈리지 않게 텍스쳐에서의 픽셀에 맵핑될 범위를 텍셀이라고 한다. 그렇다면, 텍셀의 크기가, 실제로 화면상의 픽셀과 맞아지면 상관없지만, 크기가 작거나 클수도있다. 텍셀보다 픽셀이 크면, 텍셀을 늘려서 픽셀을 채우면되고, 반대로 텍셀의 크기보다 픽셀이 작으면, 즉, 텍셀의 색 수보다 픽셀이 더 적어서 그 픽셀들에 맵핑되려하면 주변의 텍셀의 색들이 합쳐진 평균값으로 그 작아진 픽셀범위에 맵핑된다. 이것을 방지하기 위해서 사용되는 것이 바로 mipmap이다. 
 이렇게 설명만 들으면, 텍스쳐의 최소, 최대 시의 옵션과 무엇이 다르지.. 라고 생각 할 수 있다. 하지만 mipmap의 가장 큰 특징은 바로... 실제 텍스쳐크기가 512 라면 (가로x세로가 같다고 보면) 그것의 절반크기인 256, 128, 64 이런식으로 1x1이 될 때까지의 텍스쳐를 미리 가지고 있다가, 실제 텍셀보다 거리가 멀어져서 맵핑될 픽셀이 줄면, 더 해상도가 낮은 텍스쳐를, 그 보다 더 작아지면 더 작은 텍스쳐를 불러서 맵핑을 시켜준다..
 그럼 이렇게 생각할 수도 있다.. 그게 결국 최대, 최소 옵션과 뭐가 다르냐고... 머.. 그냥 보면 결과적으론 크게 다르지 않다. 하지만, 랜더링 시의 연산양으로 보면, 큰 차이가 있다. mipmap없이 확대 축소 옵션(물론 이렇게 텍스쳐를 가지지 않는 mipmap 옵션도 효과는 생긴다.) 으로 하는 것보다. 미리 줄여놓은 텍스쳐를 가지고 있으면, 실제 작은 크기에 맵핑을 할 때 아까 말했던, 평균을 구하는 연산을 생략할 수 있다.. 이 것이 바로 큰 연산의 이점을 가져오는 것이다.
 3d에서 그냥 기술만 있으면, 바로 구현하면 되지 머 라고 생각할 수 있지만, 사실 3d에서 가장 중요한 것은 부하를 줄이는 것이다. 오늘날에야 옛날에 비해서 하드웨어가 발전했기 때문에, 신경을 쓰지 않아도, 큰 차이가 없을지 모르지만, 지금도 무거운 연산량을 가진 연산을 2개 3개 합치면 30프레임 이하의 프레임이 나올 수도 있다. 이런 연산을 줄이기 위한 기법이 바로 mipmap인 것이다.

이제 mipmap이 무엇인지는 알았으니, 어떻게 사용되는지 알아봐야할 것이다..


이 것이 준비된 텍스쳐들이다..각자 크기별로 색이 다르다.


일단 예전에는 텍스쳐를 한장만 로드했지만, 현재는 보면, 256 부터 8까지 차례대로 6장을 로드한다. 물론 4, 2, 1 도 있어야하지만, 예제에서 없어서 생략이다. 그리고 베이스가 되는 256 싸이즈 텍스쳐를 로드하고,


텍스쳐의 levelCount를 얻어온다. 그러면 9라는 값이 리턴된다. 즉 현재 있는 6장 외에 아까있던, 4, 2, 1 의 장수를 다 얻어온것이다. 하지만 이번 예제에 테스트는 6장만 가지고 하기 때문에, 현재 얻어온 6장의 텍스쳐를 가지고, 각자 사이즈에 맞는 표면레벨에 8 까지, 텍스쳐 메모리를 복사한다.
 위의 색깔이 텍스쳐 크기이다.


이전에 확대 축소 옵션도 있고,

 


이것이 mipmap 옵션이다. mipmap 옵션에 따라 동작을 안할 수도, 눈에 띌수도, 부드럽게 연결 될 수도 있다..


랜더에서 들어오는 셋팅값을 변화 시켜줄수도 있다. 저기 mipmap용 변수값을 바꿔주면, 효과의 강도가 틀려진다. 어쨋든, 이상태로 컴파일하면, Linear 상태로..


이렇게 부드럽게 나온다.. 즉.. 거리에 따라서 각자 자기에 맞는 밉맵 레벨의 텍스쳐를 맵핑 한 것이다.

 

이 것은 None 상태로 mipmap이 적용이 안되었다.


이 것은 Point형으로 확실한 경계가 보이는 것을 알 수 있다..


카메라를 움직여서 가까이 가보면, 거리에 따라 색이 틀려지는 것을 볼 수 있다.


그리고 다시 뒤로 쭉 나오면, 거의 제일 작은 텍스쳐 색만이 나오는 것을 알 수 있다...

그리고 보통, D3d로 게임을 만들 때 쓰는 텍스쳐 포멧이 dds 이다. dds포멧이 편한 이유중에 하나가 이런 밉맵설정 부터, 아까 봤던 level을 쓸수있어서, 볼륨텍스쳐라는 것도 사용하기가 매우 용의하다. 그리고 메모리에 올라가는 속도상의 이득도 많다.

어쨋든 이번 예제는 mipmap이 어떻게 적용되는지 보기 위해서, 이렇게 색이 다른 텍스쳐를 썻지만, 실제는 쓸일이 없으니, 앞으로는 그냥 개념만 이해하고 사용하면 될 것이다..

 

 

Posted by 바람처럼..
|