테크노아
> 기획&벤치 > 강좌
Anisotropic Texture Filtering의 이용
테크노아  |  webmaster@technoa.co.kr
폰트키우기 폰트줄이기 프린트하기 메일보내기 신고하기
승인 2001.04.10  10:18:00
트위터 페이스북 미투데이 요즘 네이버 구글 msn

[강좌] Anisotropic Texture Filtering의 이용

현재 게임에서는 대부분 Isotropic 텍스처 필터링 방법을 쓰고 있다. 이 방법의 핵심은 쉽게 간단하며 빠르다는 것이다. 하지만 등방성 필터링의 경우 텍스처의 이미지가 심하게 왜곡되며 흐려진다는 문제가 있다. 이미 개발자들도 이 사실을 잘 알고 있긴 하지만, 하드웨어의 성능상의 문제로 혹은 프로그래밍의 방법상의 어려움으로 ATF가 자주 거론되지는 않았다. 오늘은 OpenGL을 이용한 ATF의 간단한 구현 방법을 알아보고 이것을 어떻게 프로그래밍에서 이용할 수 있는 가를 연구해 보는 시간이다.

GL_EXT_texture_filter_anisotropic를 이용한 OpenGL의 텍스처링 방법은 Anisotropic Texture Filtering에 대한 쉽고, 범용적인 방법을 제공해 준다. 그럼 그 쉽고 간단한 방법을 통해서 얻을 수 있는 장점이 무엇인지 알아보자. 아래의 그림은 anisotropic filtering의 방법을 썼을때 얻을 수 있는 장점을 잘 설명하고 있다.


[그림 1] Isotropic 와 anisotropic texture filtering 의 비교

Anisotropic Texture Filtering 기술의 배경

텍스처의 필터링은 픽셀의 작은 단위로 구성되는 텍스처 이미지를 특정한 오브젝트에 샘플링해서 가져다 바르는 작업이다. 언뜻 보면 간단해 보이는 이 작업은, 생각 보다 그렇게 쉬운 작업이 아니다. 텍스처 이미지를 단순히 바르는 작업이긴 하지만, 이것은 텍스처의 해상도와 이미지를 붙이고자 하는 일정한 대상의 크기, 또한 샘플링 할 정도에 따라서 다양한 기술들을 내포하고 있다. 이것은 공간 좌표와 텍스처가 적용될 평면의 좌표가 서로 독립적인 특성을 지니고 있기 때문이다. 즉, 쉽게 말한다면 텍스처는 단순히 평면 이미지일 뿐이며, 텍스처가 적용되는 오브젝트의 평면 상태는 글자그대로 "자기 마음대로"의 좌표 시스템을 가지고 있다. 즉, 사상하고자 하는 텍스처 이미지 보다 텍스처링되는 평면이 더 클수도 있고 작을 수도 있고, 혹은 같을 수도 있다. 물론 이런 경우를 대비해서 MIPMAP 같은 필터링이 존재하긴 하지만... 여하튼 이 문제의 핵심은 텍스처의 공간 크기와 텍스처가 적용될 부분의 공간 크기가 대부분 같지 않다는 것에서 출발한다(물론 똑 같이 할 수도 있겠지만, 이렇게 되면 단일한 장면에 동일하고 사이즈만 다른 텍스쳐가 수백 수천장이 필요하게 된다. 이 일을 누가 하겠는가?).

OpenGL 의 입장에서 본다면 화면에 찍히는 픽셀과 실제로 텍스처 위의 한 픽셀인 텍셀을 구분하는 관점에서 두가지의 경우가 발생하게 된다. 즉,


*화면을 구성하는 픽셀의 단일 화소속에 여러개의 텍셀이 들어가는 경우(GL_TEXTURE_MIN_FILTER)

*화면을 구성하는 픽셀의 단일 화소가 텍셀의 일부분 만을 담는 경우(GL_TEXTURE_MAG_FILTER)

위에 열거한 경우는 아래의 세 가지 그림에서 그 예를 관찰할 수 있다. 우선, 첫 번째 그림은 다행히도(?) 픽셀과 텍셀의 크기가 100% 맞아 떨어지는 경우이다. 물론 이런 경우는 매우 드물다. 두 번째 그림은 화면을 구성하는 픽셀의 단일 화소속에 여러개의 텍셀이 들어가는 경우의 예이며, 세 번째 그림은 화면을 구성하는 픽셀의 단일 화소가 텍셀의 일부분 만을 담는 경우로, 오히려 텍셀이 픽셀보다 더 큰 상황이다(이런 경우는 이미지를 확대할 때 일어난다).


[그림2] 픽셀과 텍셀의 크기가 100% 맞아 떨어지는 경우


[그림3] 화면을 구성하는 픽셀의 단일 화소속에 여러 개의 텍셀이 들어가는 경우(GL_TEXTURE_MIN_FILTER)


[그림4] 화면을 구성하는 픽셀의 단일 화소가 텍셀의 일부분 만을 담는 경우(GL_TEXTURE_MAG_FILTER)

우선 [그림2]를 살펴보자. 이런경우는 거의 일어나지 않기는 하지만 픽셀과 텍셀이 1:1로 대응되는 경우다. 이런 경우는 글자 그대로 텍셀의 한 픽셀을 따서 픽셀 영역에 가져다 붙이면 간단히 끝난다. 상대적인 크기 계산이나 필터링의 개념이 도입될 필요가 없다.

[그림3]의 경우는 화면을 구성하는 픽셀의 단일 화소속에 여러개의 텍셀이 들어가는 경우이다. 이 경우는 텍셀의 크기를 줄여야 하는 문제가 생긴다. 대부분의 MIPMAP 필터링은 이 경우에 발생하게 된다. 즉, 이미지를 아주 멀리서 관찰하는 경우의 예가 그것이다. 이 경우는 단일 픽셀에 들어가는 텍셀의 색 값들 중에 평균적인 값을 얻어서 단일 픽셀로 표현하는 필터링의 방법이 동원된다(MIPMAP 을 준비하지 않고 실시간으로 계산해서 텍스처링을 한다는 것은 시스템 자원을 너무 낭비하는 결과를 초래한다). MAIMAP 은 미리 준비된 절반짜리 크기의 사이즈 맵들로 구성되며, 이것은 2,4,8,16,32 등의 정수값으로 미리 이미지 피라미드를 이루며 준비되어 있다. 이러한 준비된 크기의 이미지는 λ(람다)라는 변수값을 통해서 제어되며, 각각 시점의 상대적인 거리에 따라 적절한 MIPMAP 이 텍스처링 되거나 보간되어 오브젝트에 올라 붙게 된다. 이러한 텍스처 필터링은 CPU 자원 요구량을 급격히 낮추며 메모리 대역 역시 절약할 수 있다.

[그림4]의 경우는 위에서 설명한 [그림3]의 경우에 대해서 정반대되는 상황이다. 즉, 단일 텍셀에 대해서 픽셀이 이미지를 오버 샘플링하고 있다(쉽게 이야기 하자면 아주 가까이 근접해서 물체를 관찰한다고 가정해보면 된다). OpenGL 에서는 이에 대해서 두가지의 옵션을 지원한다. 즉, GL_NEAREST 와 GL_LINEAR 의 두가지 옵션이다. GL_NEAREST 옵션의 경우 가장 작은 MIPMAP 텍스쳐를 리턴해서 최고 근접 이미지를 보여준다. GL_LINEAR 의 경우, 주변의 4개의 텍셀에 대한 평균값을 돌려준다.

[관련기사]

테크노아의 다른기사 보기  
폰트키우기 폰트줄이기 프린트하기 메일보내기 신고하기
트위터 페이스북 미투데이 요즘 네이버 구글 msn 뒤로가기 위로가기
이 기사에 대한 댓글 이야기 (0)
자동등록방지용 코드를 입력하세요!   
확인
- 200자까지 쓰실 수 있습니다. (현재 0 byte / 최대 400byte)
- 욕설등 인신공격성 글은 삭제 합니다. [운영원칙]
이 기사에 대한 댓글 이야기 (0)
e피플
[e피플] 꿈을 향해 날아가는 공군 하사 김종엽
[e피플] 꿈을 향해 날아가는 공군 하사 김종엽
20대라면 누구나 자신의 미래에 대한 불안감이 존재한다.하지만 걱정만 한다고 해서 해결되는 것은 아무것도 없다.이번 인물 인터뷰는 이런 걱정을 뒤로하고 20대의 패기로 꿈을 향해 ...
제호 : 테크노아  |  발행인 : 김필규  |  편집인 : 김필규  |  청소년보호책임자 : 박상규
서울지사 : 서울특별시 구로구 디지털로32가길 18, 7F | 제보 : it@technoa.co.kr
발행소 : 전라북도 전주시 완산구 전룡6길 6 3F | 등록번호 : 전라북도 아00057
등록일자 : 2008년 1월 14일  |  대표전화 : 070-8755-6291  |  FAX : 02-6280-9562
Copyright © 1999-2017 테크노아. All rights reserved. mail to technoa@technoa.co.kr