최근 수정 시각 : 2024-10-26 22:07:39

텍스처 필터링


1. 소개2. 텍스처 샘플링3. 텍스처 필터링4. 밉맵5. 종류
5.1. 최단입점 보간5.2. 쌍선형 보간5.3. 삼선형 보간5.4. 비등방성 필터링
6. 관련 문서

1. 소개

texture filtering. 컴퓨터 그래픽렌더링 단계에서 화면의 픽셀(또는 fragment)에, 해당하는 텍스처의 텍셀[1] 을 대응시키는 과정과 사용되는 기법.

2. 텍스처 샘플링

texture sampling.
렌더링의 단계 중 투영, 클리핑 등을 모두 거치고 나면 셰이딩/매핑을 처리해야 하는데, 이때 모델의 세부 사항(디테일, 즉 텍스처)를 알아야 하므로 텍스처의 정보를 읽어야 한다. 그러려면 투영 단계에서 화면 픽셀/프래그먼트(fragment)마다 해당하는 텍스처에서의 좌표값을 계산해 둘 필요가 있고, 이것은 모델에 텍스처 매핑을 해둔 정보를 바탕으로 투영을 거쳐서 이루어진다. 이 좌표값에 해당하는 텍셀의 정보를 읽어오는 과정을 텍스처 샘플링이라고 한다.

3. 텍스처 필터링

그러나 프래그먼트가 가지고 있는 텍스처의 좌표값은 픽셀의 중심을 가지고 계산한, 넓이가 없이 위치만 있는 수학적 이다. 보통의 경우 정수가 아닌 소수의 형태로 표현되어 있을 것이다.
반면 픽셀과 텍셀은 각각 넓이와 형태를 가지고 있고, 정수 좌표로 되어있기 때문에, 좌표값에 해당하는 텍셀을 곧바로 가져다 사용한다는 것은 불가능하다. 어떻게든 정수 좌표로 변환하거나, 아니면 보간을 통해 좌표값에 걸맞은 적절한 데이터를 만들어내서 프래그먼트 셰이더로 건네줄 필요가 있다. 이 방법들을 바로 텍스처 필터링이라고 부른다. 여러 보간법이 있으며 성능과 품질에 장단점이 있지만 요즘에는 대부분 품질이 좋은 비등방성 필터링을 쓰는 듯하다.

필터링의 경우를 간단히 나누면 텍셀이 픽셀보다 큰 경우 (모델이 카메라에 가까운 경우)와 텍셀이 픽셀보다 작은 경우가 있는데, 전자의 경우 필터링을 잘 해주지 않으면 텍셀 가장자리가 두드러지게 보일 것이고, 후자의 경우 텍스처가 띄엄띄엄 샘플링 되기 때문에 보기에 아주 안 좋다. 따라서 이러한 에일리어싱 현상을 최소화하는 필터링이 좋은 필터링이다.

4. 밉맵

mipmap, mipmapping.
원본 텍스처의 해상도를 줄인 작은 버전 여럿을 미리 만들어 저장해두고 필요할 때 꺼내다 쓰는 것. 커다란 원본 텍스처만 사용한다면 카메라에서 멀리 있는 텍스처의 경우 텍스처의 정보를 띄엄띄엄 읽게 되어서 보기에도 좋지 않고 메모리 캐시의 효율도 급격하게 떨어진다. 따라서 텍스처 단계에서 다운스케일링을 통한 안티에일리어싱을 해줄 필요가 있는데, 이것을 각 프래그먼트마다 하는 대신에 미리 해두는 것이 밉매핑, 그 텍스처 모음이 밉맵이다.

밉맵을 사용하기 위해서는 텍스처가 얼마나 축소되었는지, 다르게 말하면 모델이 얼마나 카메라에서 멀리 있는지 저장해두는 것이 필수이다. 이후 거리에 따라 계산한 텍셀의 크기가 픽셀의 크기의 1/2 정도라면 x1/2 버전의 텍스처를, 1/4 정도라면 x1/4 버전의 텍스처를 사용한다. 보통 밉맵은 x1, x1/2, x1/4,... 식으로 2배씩 작아지는 버전으로 만들어둔다.

비용에 비해 효과가 아주 좋기 때문에 어느 필터링 방식을 쓰든 기본적으로 쓰인다. 다운스케일한 버전을 저장해두는 것이기 때문에 텍셀이 작아지는 경우에만 의미가 있고, 텍셀이 커지는 경우에는 전혀 대응하지 않는다.

5. 종류

5.1. 최단입점 보간

Nearest-neighbor interpolation.
보간이라고는 하지만 사실 보간을 하지는 않고, 좌표값을 반올림한다고 생각하면 된다. 모델이 카메라에 가까이 있어서 텍셀이 크게 보이는 경우 도트 그래픽처럼 보일 것이라 생각할 수도 있지만, 사실은 3D 그래픽의 경우 표면이 회전해 있거나 시선과 비스듬한 경우가 많으므로 도트 그래픽이 아니라 미친듯한 에일리어싱으로 보이게 된다. 이 에일리어싱은 텍스처에서 나타나는 것이므로 보통 말하는 모델의 형태에 의해 나타나는 계단 현상과는 별개다.

모델이 멀리 있는 경우에는 밉맵을 쓰지 않으면 해당 문단에서 이미 설명한 것처럼 보기 좋지 못하다.

5.2. 쌍선형 보간

Bilinear interpolation.
두 차원에 대해 선형 보간을 하는 것. 보통 그 차원은 텍스처의 가로축과 세로축이다. 즉 X좌표가 2.5, Y좌표가 3.75라고 하면, (2,3), (3,3), (2,4), (3,4)에 있는 텍셀들을 읽어온 다음 비율을 맞춰서 (위의 예에서는 각각 1:1:3:3) 가중 평균을 구한다. 모델이 가까운 경우에 텍셀 가장자리에서도 색이 급격히 변하지 않고 부드럽게 이어지는 효과가 있다. 아주 가까운 경우 흐리게 보이기는 하겠지만 그건 텍스처 해상도 자체의 한계고, 깨지는 것처럼 보이는 최단입점 보간에 비해서는 훨씬 눈이 편하다.

그러나 좌표값에 가까운 텍셀 몇개만 사용하는 특성상 모델이 멀리 있는 경우에는 밉맵을 쓰지 않으면 최단입점 보간과 다를 게 없다.

5.3. 삼선형 보간

Trilinear interpolation.
텍스처 가로축, 텍스처 세로축에 더해 밉맵 축에 대해서도 선형 보간을 한다. 이중선형 보간에서는 밉맵을 사용하더라도 가장 가까운 밉맵 하나를 찾은 다음 그 위에서 이중선형 보간을 하는데, 삼선형에서는 가까운 두 밉맵에서 이중선형 보간을 각각 한 다음, 나온 두 결과를 다시 선형 보간하는 것이다.

이론적으론 이중선형보간보다 더 품질이 좋지만, 밉맵을 쓴 이중선형 보간하고 그렇게 차이가 나지는 않는다. 차이가 나는 부분은 한 밉맵에서 다른 밉맵으로 넘어가는 경계 부근에서 이중선형은 급격히 바뀌지만, 삼선형은 보간을 통해 부드럽게 넘어간다. 다만 이중선형 보간에 밉맵을 쓸 거면 삼선형을 쓰지 않을 이유도 없는 듯하다.

5.4. 비등방성 필터링

파일:상세 내용 아이콘.svg   자세한 내용은 비등방성 필터링 문서
번 문단을
부분을
참고하십시오.
anisotropic filtering.
위의 여러 보간법들은 모두 텍셀이 화면에서 정사각형 형태로 보인다고 근사하여 샘플링하지만, 실제 3D 그래픽에서는 카메라와 모델 사이의 각도가 다양하기 때문에 텍스처의 한 축이 다른 축보다 더 많이 축소/확대되는 경우가 많다. 그러나 위의 필터링 기법들은 하나의 값으로 밉맵을 골라 필터링 할 수밖에 없지만, 이등방성 필터링의 경우 가로축과 세로축에 대해 밉맵을 따로 저장하여 품질을 높인다.

6. 관련 문서


[1] 텍스처는 이미지이므로 보통 픽셀로 이루어져 있고, 이것을 텍셀(texel)이라 부른다. 픽셀로 이루어져 있지 않은 경우에는 최소 단위를 텍셀이라 부른다.