newhaneul

[Multimedia] Lecture 8. Texturing 본문

4. University Study/Multimedia

[Multimedia] Lecture 8. Texturing

뉴하늘 2026. 4. 3. 20:38
728x90

본 포스팅은 인하대학교 안남혁 교수님의 [202601-EEC4410-001] Multimedia을 수강하고 공부한 내용을 정리하기 위한 포스팅입니다.

 

 Texturing은 3D Graphics rendering pipeline 전체 흐름 속에서 'Fragment Shader'에 해당된다. Rasterizer를 거쳐 생성된 각 fragment는 표면의 방향을 나타내는 법선(Normal) 데이터와 텍스처 이미지의 어느 부분을 가져올지 알려주는 텍스처 좌표(Texture coordinates) 데이터를 가지게 된다.

 

 Fragment Shader에서는 전달받은 데이터를 바탕으로 화면에 그려질 각 fragment의 최종 색상을 결정한다.

 

1. Texture Mapping

 Texture의 가장 기본이 되는 Texture Mapping은 2D 이미지인 Texture map을 표면에 mapping 시키는 방법에 해당된다. 이 texture map은 Texel들의 2차원 배열로 구성되며, 각 texel은 고유한 중심 좌표를 갖는다.

 

  • 모델링 단계: Polygon mesh를 구성하는 각 정점(Vertex)에 텍스처 맵의 어느 부분을 가져올지 지시하는 $(s, t)$ 좌표를 할당하게 된다.
  • 렌더링 단계: rasterizer가 정점 사이의 공간을 수많은 fragment로 쪼갤 때, 할당된 $(s, t)$ 좌표들도 부드럽게 보간(Interpolation)하여 내부 fragment들에 채워 넣게 된다.

 

  • 이후 Fragment Shader는 이 $(s, t)$ 좌표에 텍스처 이미지의 실제 가로, 세로 해상도($r_x, r_y$)를 곱하여($s' = s \times r_x, t' = t \times r_y$) texture map 상의 실제 texel 위치를 찾아 색상을 결정하게 된다.
  • $(s, t)$ 좌표는 픽셀 단위의 절대적인 위치가 아니라, 항상 0과 1 사이의 상대적인 비율로 표현된다. 이렇게 정규화하면서 해상도가 달라지더라도 모델의 텍스처 좌표를 수정할 필요 없이 똑같은 위치에 정확히 mapping이 적용된다.

 

  • 1. Unfold & Parameterization: 3D 모델을 전개도처럼 펼치고, 각 정점에 정규화된 텍스처 좌표 $(s, t)$를 할당하여 Vertex array에 저장한다.
  • 2. Rasterization: Rasterizer가 3D polygon을 fragments로 쪼개면서 $(s, t)$ 좌표도 내부로 보간하여 전달한다.
  • 3. Projection & Texture Mapping: Fragment Shader가 이 $(s, t)$ 좌표를 실제 텍스처 공간(Atlas)에 투영하여 해당 위치의 정확한 RGB 색상을 가져오면, 비로소 3D 모델 표면에 화려한 텍스처가 입혀지게 된다.

 

2. Texture Wrapping

 

텍스처 좌표 $(s, t)$가 범위를 벗어났을 때 적용할 수 있는 세 가지 주요 래핑 모드를 보여준다.

  • Clamp-to-Edge: 좌표가 1을 넘거나 0보다 작아지면, 텍스처 이미지의 가장자리 픽셀 색상을 그대로 쭉 늘려서(연장해서) 칠하게 된다. 'J' 이미지가 끝부분에서 늘어난 것을 볼 수 있다.
  • Repeat: 타일처럼 텍스처 이미지를 정수 단위마다 계속 반복해서 이어 붙이게 된다.
  • Mirrored-Repeat: 타일처럼 반복하되, 이어 붙일 때마다 이미지를 거울에 반사하듯 뒤집어서 자연스럽게 연결되도록 처리한다.

 

 

  • 'GL_REPEAT', 'GL_MIRRORED_REPEAT', 'GL_CLAMP_TO_EDGE'의 차이가 확연히 드러난다. 'GL_CLAMP_TO_BORDER'는 가장자리를 지정된 단일 색상으로 채우는 또 다른 옵션이 된다.
  • 코드를 보면 glTexParameteri 함수를 사용하여 s축(가로)과 t축(세로)에 대해 개별적으로 래핑 모드를 설정할 수 있음을 알 수 있다.

 

 

3. Texture Filtering - Magnification 

 보통은 화면을 구성하는 pixel의 수와 텍스처 이미지를 구성하는 texel의 수는 거의 일치하지 않는다. 따라서 Magnification과 Minification이 필요하다.

 

  • 텍스처 확대 (Magnification): 화면상의 객체가 텍스처 맵의 해상도보다 더 크게 그려질 때 발생한다. 즉, pixel의 수가 texel의 수보다 많은 상황이 된다. 이 경우 하나의 texel 정보가 여러 pixel 에 걸쳐 사용되어야 하므로, 텍스처를 '늘려야' 한다.
  • 텍스처 축소 (Minification): 반대로, 화면상의 객체가 텍스처 맵보다 작게 그려질 때 발생한다. texel의 수가 pixel의 수보다 훨씬 많은 상황이 된다. 이 경우 pixel이 텍스처 공간에 듬성듬성 투영되어(Large jumps), 수많은 texel 정보가 무시되고 일부만 샘플링되므로 심각한 왜곡이나 지글거림(Aliasing)이 발생할 수 있다.

 

  •  Filtering for Magnification
    • Option 1: Nearest point sampling (최근접 샘플링):
      • fragment의 좌표 $(s, t)$가 텍스처 공간에 투영되었을 때, 그 좌표와 가장 가까운 중심점을 가진 단 하나의 texel 색상을 그대로 가져다 쓰는 방식에 해당된다.
      • 장점: 계산이 매우 빠르다.
      • 단점: 여러 픽셀이 동일한 texel 색상을 공유하게 되므로 결과적으로 텍스처가 모자이크처럼 픽셀화되어 보이는 블록 현상이 심하게 나타난다.
    • Option 2: Bilinear interpolation (이중선형 보간법):
      • 투영된 좌표 $(s, t)$를 둘러싸고 있는 가장 가까운 4개의 texel ($c_1, c_2, c_3, c_4$)을 찾는다. 이후 투영된 좌표가 이 4개의 texel 중심점들로부터 얼마나 떨어져 있는지 그 거리의 비율을 계산하여 4개 texel의 색상을 부드럽게 섞어 최종 색상을 결정한다.
      • 장점: 인접한 pixel들이 서로 다른 색상을 갖게 되어 블록 현상이 사라지고 훨씬 자연스러운 결과를 얻을 수 있다.

4. Texture Filtering - Minification 

Minification 상황에서 단순한 필터링 기법(Nearest point sampling, Bilinear interpolation)을 사용하면 심각한 Aliasing이 발생하게 된다.

  • Aliasing은 고주파 신호를 저해상도로 샘플링할 때 발생하는 오류를 의미한다. texture mapping에서는 화면의 pixel이 텍스처 공간을 듬성듬성 건너뛰며 색상을 샘플링하기 때문에 발생한다.

  • 원본 texture map은 체크무늬 패턴이지만, 화면상의 객체는 작게 축소되어 그려져야 하는 상황이다. 만약 여기서 단순 샘플링을 하게 되면, 객체 전체가 단색으로 표현되는 Aliasing이 발생하게 된다. 이를 해결하기 위해 Graphic pipeline에서는 원본 텍스처를 미리 여러 단계로 축소해둔 Mipmap 이라는 Anti-Aliasing 기법을 사용한다.

 

5. Mipmap Filtering

 

  • 밉맵(Mipmap)의 구조와 메모리 효율성
    • 밉맵은 원본 텍스처($256\times256$)를 가로세로 절반씩 줄여가며 미리 여러 해상도의 이미지(Level of Detail, LOD)를 만들어 둔 피라미드 형태의 데이터 구조를 말한다. 원본이 LOD 0이고, 크기가 작아질수록 LOD 번호가 올라가게 된다.
    • 미리 평균화된 축소 이미지를 준비해 두기 때문에 실시간 렌더링 연산 부하를 크게 줄일 수 있게 된다. 또한, 이 피라미드 구조를 저장하는 데 필요한 추가 메모리 용량은 무한 등비급수의 합에 의해 원본 텍스처의 약 33%($1/3$) 수준밖에 되지 않아 매우 효율적이게 된다.

 

  • 적절한 LOD($\lambda$)의 계산
    • 화면상의 픽셀 하나가 텍스처 공간에서 덮는 영역(Footprint)의 크기에 따라 어떤 밉맵 레벨을 사용할지 결정하게 된다.
    • 픽셀의 Footprint가 $2\times2$ 텍셀을 덮는다면 $\log_2 2 = 1$이므로 LOD 1을, $4\times4$ 텍셀을 덮는다면 $\log_2 4 = 2$이므로 LOD 2를 선택한다.
    • 하지만 $3\times3$ 텍셀을 덮는 경우처럼 정확히 정수로 떨어지지 않으면 $\log_2 3 \approx 1.585$ 와 같은 소수점 레벨($\lambda$) 값이 도출된다.

 

  • 밉맵 필터링과 삼선형 보간법 (Trilinear Interpolation)
    • 계산된 $\lambda$ 값이 1.585처럼 소수점일 때 어떻게 색상을 결정할지가 중요한 문제가 된다.
    • 가장 가까운 레벨 선택 (Nearest Level): 반올림하여 가장 가까운 LOD 2를 선택할 수 있다. 하지만 이 경우, 카메라와 3D 객체의 거리가 멀어짐에 따라 적용되는 밉맵 레벨이 툭툭 바뀌면서 화면 바닥에 뚜렷한 경계선(Crisp edges)이 생기는 치명적인 단점이 발생한다 (마지막 슬라이드의 'Bilinear' 예시).
    • 삼선형 보간법 (Trilinear Interpolation): 이 단절 현상을 해결하기 위해 인접한 두 레벨(LOD 1과 LOD 2)의 텍스처를 모두 가져와 각각 내부에서 이중선형 보간(Bilinear)을 수행한 후, 1.585라는 소수점 거리에 비례하여 두 결과값을 한 번 더 부드럽게 섞어주게 된다.
    • 결과적으로 가로, 세로, 그리고 밉맵 레벨(깊이)이라는 3차원에 대해 보간을 수행하므로 삼선형 보간법이라 부르며, 이를 통해 시야 거리에 따라 텍스처 해상도가 아주 자연스럽고 부드럽게 전환되는 고품질의 그래픽 결과물을 얻을 수 있게 된다.

 

** 2024-2 중간고사 **

  • 정답: 
    • 1. Nearest point sampling (최근접 샘플링):
      • 작동방식: 픽셀의 중심 위치에 가장 가까운 texel 색상을 찾아 그대로 적용한다.
      • 장점: 계산 과정이 단순하여 매우 빠르다.
      • 단점: 텍스처 공간에서 큰 간격으로 건너뛰며 샘플링하므로 블록 현상이 발생한다.
    • 2. Bilinear interpolation (이중선형 보간):
      • 작동방식: 픽셀 주변에 위치한 4개의 texel 값을 수집한 뒤, 거리에 따른 가중치를 적용하여 색상을 보간한다.
      • 장점: 인접한 픽셀 간의 색상 차이를 부드럽게 만들어 최근접 샘플링의 블록 현상을 줄여준다.
      • 단점: Minification 과정에서 나타나는 Aliasing을 완벽히 해결하지 못한다.
    • 3. Trilinear interpolation (삼선형 보간):
      • 작동방식: 사전에 여러 해상도로 축소해 둔 Mipmap을 사용한다. 픽셀의 투영 영역(footprint) 크기를 바탕으로 가장 적절한 두 개의 인접한 Mipmap level(LOD)을 선택하고, 각 레벨에서 이중선형 보간을 수행한 후 산출된 두 값을 다시 선형 보간하여 최종 색상을 결정한다.
      • 장점: Aliasing을 크게 줄여 부드러운 결과를 얻는다.
      • 단점: 기존 텍스처 대비 약 33%의 추가 메모리가 요구된다.

 

** 2025-1 중간고사 **

  • 정답: X

 

6. Anisotropic Filtering 

  • 등방성(Isotropic): 방향에 상관없이 성질이 일정하다.
  • 비등방성(Anisotropic): 방향에 따라 성질이 달라진다.

  • Limitation of Trilinear Mipmap Filtering
    • 기존의 Mipmap은 가로와 세로 비율이 항상 1:1인 정사각형 형태(Square-sized)로만 텍스처를 축소하였다. 하지만 대부분의 경우 가로축과 세로축에 필요한 축소 비율이 서로 다르다. (예: 바닥을 비스듬하게 바라보면, 화면의 픽셀 하나가 텍스처 공간에서 덮는 영역(Footprint)은 길쭉한 직사각형 형태가 된다.)
    • 즉, 삼선형 보간법은 방향을 고려하지 않는 등방성 필터링에 속하게 되므로, 멀리 있는 텍스처가 방향을 잃고 심하게 뭉개지며 흐릿해지는 (Blurry) 현상이 발생한다. 

 

  • 시야각에 의해 투영된 영역이 직사각형이라면, 텍스처 샘플링도 정사각형이 아닌 가로세로비(Aspect ratio)를 고려하여 수행해야 한다.
  • 비등방성 Mipmap은 가로로 긴 형태, 세로로 긴 형태 등 다양한 비율(Aspect ratio)로 텍스처를 샘플링할 수 있는 구조를 가진다. 따라서 시야각이 눕혀져 있는 먼 거리의 바닥 패턴도 원래의 디테일을 유지하며 아주 선명하게 렌더링된다.
728x90