달력

72019  이전 다음

  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
Filtering & MIPMAP의 이해
필터링의 개념은 오브젝트(폴리곤)에 입혀지는 텍스쳐(매핑소스)의 퀼리티를 높이기 위한 일반적인 기술들을 통칭해서 칭하는 말이다. 여러분들도 게임을 할 경우 3D 옵션에서 "Bi-linear filtering이나 Tri-linear filtering이라는 옵션을 자주 본적이 있을 것이다.

사실 대부분의 사람들도 당연히 성능적인 측면에서 Bi-linear filtering 과 Tri-linear filtering이라는 이중 구조를 가지고 있다는 것 쯤은 눈치를 채고 있고 실제로 눈으로 확인할 수 있는 부분이므로 Tri-linear filtering을 자주 사용한다. 그러나 최악의 경우 Tri-linear filtering은 Bi-linear filtering에 비해서 속도면에서 2배 가량의 부담이 걸리게 된다. 왜 그럴까? 이런 단순한 의문에서 오늘의 주제는 출발한다.

오늘은 주제는 Filtering이 무엇인지 알아보고 이와 관련된 MIP-MAP의 개념등을 정리하고 나아가 간단한 용어를 정리하는 기회를 갖도록 하겠다.

1. MIP-MAP

MIP 맵핑의 기본 개념은 여러가지 크기의 밉맵(MIP MAP-동일한 그림의 다양한 사이즈의 그림) 을 만들어 놓고 맵핑하고자 하는 폴리곤에 가장 근사한 크기를 갖는 밉맵을 이용하여 텍스쳐맵핑을 수행하는 것을 MIP 맵핑이라한다. 더 자세히 표현하면, 텍스쳐를 일단 각기 다른 크기로 세 개 또는 그이상의 개수를 제작한다. 그리고 원하는 폴리곤의 크기와 가장 비슷한 크기의 텍스쳐를 우선적으로 이용하여 텍스쳐 맵핑을 하는 방식이며, 이때 가장 가까운 정도에 따라 가중치를 두며 이 값을 MIP Level이라고 한다. 그림이 확대 될 때에는 interpolation 기법이 이용되지만 축소에 의해서는 그림의 화질 저하가 심하게 이루어 지며 또한 세밀한 그림의 경우에 실시간 계산에 의한 처리는 그림 자체의 모양이 변해버리기 때문에 상당히 고민이 되는 부분이다. 실제로 이 방식을 이용할때는 별도의 하드웨어적 지원없이, 프로그램을 만드는 사람이 미리 고해상도용과 저해상도용으로 별도의 텍스쳐를 만들어 놓고 이 텍스쳐를 사이즈에 맞게 필요에 따라 이용하면 된다. 이렇게 하는 작업은 실시간으로 하지 않고 미리 해도 되는 작업이다. 대부분의 2D용 게임에서 보면 고해상도용과 저해상도용의 두가지의 스프라이트를 모두 가지고 있는 경우가 많다.

그럼 MIP-MAP을 왜 사용하느냐? 텍스쳐를 축소할때 기계식 축소의 화질변화 를 막기 위해여 만들어진 것이다. 즉, 확대시에는 Linear 필터링을 이용하여 적절히 처리할 수 있지만 축소는 적절한 방법이 마땅치가 않다. 따라서 의외로 MIP-MAP을 사용하는 주요 이유는 이미지의 '확대'에서 일어나는 문제보다는 '축소'에서 일어나는 문제 때문에 대두 되었다고 봐야한다.

그럼 일단 이러한 밉맵을 사용하고 위해서는 여러벌(?)의 밉맵이 준비되어야 한다. 보통 밉맵은 5~8가지 정도의 동일한 그림, 다른 사이즈의 밉맵을 준비하게 되는데 밉맵 레벌 0번의 크기가 1이라고 하면 밉맵레벨 1번의 경우는 0번의 1/4의 크기가 되며 밉맵레벌 2는 다시 1번의 1/4크기의 형식으로 한변이 1/2 크기씩 계속 감소하게 되는 방식으로 미리 밉맵을 제작하게 된다. 또한 MIP Mapping을 위해서는 일반 경우보다 1.5배 이상의 텍스쳐 메모리를 사용하게 된다. 허나 단순하게 밉맵의 크기를 최대 8개까지 준비한다고 해도 모든 크기의 오브젝트에 대응할 수는 없다. 실제로 게임중의 오브젝트는 관찰자의 거리에 따라 거의 연속적으로 변하며 8벌이 아니라 80벌이 되어도 일일히 미세하게 변화하는 오브젝트에 자신이 100% 원하는 텍스쳐를 입히는 것이 원리적으로 불가능하다.

 

따라서 적절한 크기의 밉맵을 준비하고 그 나머지 부분은 일종의 이미지 보간 작업을 수행하게 되는데 그것이 Filtering인 것이다. 사실 요즘에 와서는 filtering이 MIP MAPPING과 다소 혼동되어서 쓰이기는 한다.

2. Filtering

필터링의 방식에는 현재로서는 크게 4종류가 있다고 보면된다. 그 4가지의 종류는 아래와 같다.

Tile-Based MIP Mapping - 이 경우는 단지, 위에서 만든 크기에 따른 텍스쳐 중에 새로 만들 폴리곤의 크기와 가장 유사한 텍스쳐를 이용하여 point sampling(피보나치, 브래함슨, 랜덤 알고리즘을 이용해서 택스쳐를 resampling 하는 방법 - 일단 더 이상 깊이 들어가지 말자. 밑천 바닥난다. --;)을 하게 된다. 다른 용어로 MIP Nearet(Direct3D), 또는 Point sampled filter 이라고 한다. 즉 가장 간단한 방식의 필터링 알고리즘이다.

Bi-linear MIP Miapping - 해당 점의 윗쪽 오른쪽 그리고 윗쪽과 오른쪽의 사이점 즉, 3개의 점을 참조점으로 이용하고 해당점의 가중치를 crossed linear interpolation 시켜서 새로운 점을 생성시키는 방식이다. 다른 용어로 MIP Linear(Direct3D), 또는 Bi-linear filtering 이라고 한다.(사실 계산방식은 상당히 복잡한 배열계산이 필요하며 실제로 수학을 전공하더라도 수치 알고리즘의 이해가 어려울 정도다. --;)

Per-Pixel MIP Mapping - 가령, 정육면체를 앞에서 보면 옆면은 마름모꼴을 하고 있다. 큰 부분의 라인에서는 큰 텍스쳐를 참조하고 작은쪽에서는 작은 텍스쳐를 이용하게 되면, 원래의 그림의 손실을 줄일수 있다. 하지만, 이것은 시스템으로 하여금 보다 향상된 하드웨어적인 처리가 요구가 된다. 또한, 텍스쳐를 off screen buffer(실제로 화면에 보이지 않는 내부 메모리 버퍼)에 로드하여 처리를 해야하고 상대적으로 텍스쳐의 양이 많아 지기 때문에 상당히 많은 메모리가 요구되는 방식이다. 다른 용어로 Linear MIP Nearet(Direct3D), 또는 Linear filtering 이라고 한다.

Tri-linear MIP Mapping - 해당 폴리곤의 크기보다 큰 텍스쳐와 작은 텍스쳐의 점을 모두 bi-linear interpolation 으로 처리하고 이 두점을 다시 linear interpolation으로하여 중간점 얻는 방식이다. 이 방식의 경우 두개의 텍스쳐를 동시에 읽어와서 처리가 되어 야 한다. 때문에, 일반적인 경우의 1.5-2.0배의 bandwidth를 요구하게 된다. 다른 용어로 Linear MIP Linear(Direct3D), 또는 Tri-linear filtering 이라고 하며 그것의 구체적인 방식은 아래와 같다.


[그림 2] Tri-linear filtering 된 퀘이크 화면 - 실제로 위의 그림과 비교하여 바닥면의 퀼리티가 보다 부드러워 진 것을 알 수 있다.(물론 바닥 뿐만 아니라 벽이나 모든 오브젝트의 퀼리티가 향상된다.)

3. Tri-linear filtering

오늘의 중심 주제인 Tri-linear filtering에 대해서 좀더 자세하게 소개한다. Tri-linear filtering의 핵심은 맵핑할 폴리곤의 크기에 매핑시킬 텍스쳐를 2개 이용한다는 것이 특징이다.

가령 매핑될 폴리곤의 면적이 100이라고 하자. 그리고 이 폴리곤의 크기가 120의 크기를 가진 MIP LEVEL 1과 80의 크기를 가진 MIP LEVEL 2의 사이에 위치한다고 하자. Bi-linear filtering의 경우는 여기서 MIP LEVEL 1 혹은 MIP LEVEL 2의 어느 하나만을 이용해서 적절하게 이미지를 보간한 후 텍스쳐링을 하게 된다. 그러나 Tri-linear filtering는 단 하나의 밉맵을 선택하는 것이 아니라, 100크기의 가진 폴리곤의 양쪽에 있는 두 레벨의 밉맵을 모두 사용하게 된다. 즉 크기가 상대적으로 큰 MIP LEVEL 1은 이미지를 축소하고 크기가 작은 MIP LEVEL 2는 확대해서 일단 두개의 밉레벨을 텍스쳐링 될 폴리곤(100)과 동일한 크기로 맞춘다.

이렇게 만들어진 LEVEL 1과 LEVEL 2를 다시 인터폴레이션 시켜 새로운 텍스쳐를 생성한다.(당연히 연산은 복잡해 진다.) 그리고 이 텍스쳐를 입힌다. 이것이 바로 Tri-linear filtering의 원리이다.


Posted by mrhoya