OpenGL/공부

[OpenGL] Textures (2) - Mipmap

ciel45 2024. 6. 6. 18:11

이전 포스팅에서 Nearest Filtering, Linear Filtering을 다뤘었다.

 

Linear Filtering의 경우 Nearest Filtering보다 더 깨끗한 화면을 제공해주기는 하지만, 그래도 Minification 발생시 지저분해보이는 것은 여전하다.

 

원래 aliasing(왜곡)은 Minification에서 가장 두드러질 수밖에 없다. 한 픽셀 안에 정말 많은 텍셀이 우겨들어간다면, Linear Filtering도 의미가 없어지기 때문이다.

 

 

이렇게 골칫거리인 Minification 문제를 해결하기 위한 것이, Mipmap이다.

 

Mipmap이란, 미리 텍스쳐 이미지를 축소하여 모아놓은 것이다.

여기서 축소란, resolution을 줄였다고 생각하면 된다.

 

밉맵 텍스쳐 예시

 

원래 Minification이 문제였던 이유는 high resolution인 텍스쳐를 적은 양의 픽셀에 우겨넣어야 했기 때문이다.

 

Mipmap 텍스쳐는 미리 low resolution 텍스쳐들을 만들어놓는 것으로 이 문제를 해결한 것이다.

 

 

밉맵 텍스쳐를 사용하는 오브젝트가 월드에 놓여져 있고, 플레이어가 서서히 오브젝트로부터 멀어진다고 가정하자.

 

원래 방식대로라면 점점 한 픽셀 안에 여러 텍셀이 들어가면서 오브젝트의 표면이 지저분하게 보였겠지만, 밉맵을 사용한다면 그냥 미리 가지고있던 텍스쳐 중 작은 텍스쳐로 바꿔주기만 하면 된다.

 

필터링을 해주는 부담이 줄어드는 동시에, 더 깨끗한 화면을 만들어낸다.

 

 

LOD(Level of Details)의 한 종류라고 할 수 있다. (멀리 있는 물체일 수록 대충 보여주는 것)

 

 

 

저장해야 할 텍스쳐의 양이 많아진 것 같지만, 이미지의 크기가 빠르게 줄어들기 때문에, 비용이 그렇게 크지도 않다.

 

만드는 방법도 간단하다. 인접한 텍셀들을 뭉쳐가며 resolution을 계속 줄이면 되기 때문.

 

다만 부작용도 있는데, 이렇게 텍셀들을 뭉치는 과정에서 오브젝트의 엉뚱한 부위의 컬러가 블렌딩될 수도 있다.

예를 들면, 캐릭터의 어깨와 얼굴의 컬러가 블렌딩되어버리는 경우가 발생할 수 있겠다.

 

OpenGL 3.X 버전 이상에서는 자체적으로 Mipmap 텍스쳐를 만들어주는 함수 glGenerateMipmap을 제공한다.