Image Texturing

CuriHuS·2024년 6월 4일

Game Graphics

목록 보기
5/9

Pixel Shader

  • 각 픽셀의 color를 결정함
    • Texturing
    • Lighting

patch : 복잡한 polygon mesh를 여러 개로 분리하여 생성한 텍스쳐, 각 patch는 펼쳐지고 파라미터화됨.
chart : 각 패치에 색을 입혀 이미지화 한 것
atlas : 여러 chart를 하나로 묶은 것

Texture Wrapping

텍스쳐 좌표는 [0, 1] 사이에서 정의되지만 벗어나면 따로 처리함

  • 경계 고정 모드(Clamped-to-Edge Mode)

    • (c)
    • 가장 간단한 방법이다.
    • [0, 1] 범위의 경계(Edge)로 고정(Clamp)시킨다.
    • 1을 넘어선 값은 모두 1로 지정한다.
    • 별로 좋은 방법은 아니다.
  • Repeat

    • 텍스처는 정수 분기점마다 타일링된다
  • Mirrored-Repeat
    • 정수 분기점마다 반사되든가, 거꾸로 타일링 됨

Texture Filtering

  • 화면의 (x, y)에 위치한 각 픽셀에 대해 텍스처 좌표(s, t)가 texture space의 (s', t')에 투영된다
  • (s', t') 주변이 샘플링되고, 이 샘플링 과정을 texture filtering이라고 한다.

확대

  • screen space 사각형이 이미지 텍스처보다 크게 나타날 수 있으므로 텍스처가 사각형에 맞게 커진다.
  • texel 보다 pixel 수가 더 많아짐

확대 시 아래와 같은 옵션을 쓸 수 있음

1. 근접점 샘플링(Nearest point sampling)

  • pixel들을 묶은 한 블럭이 하나의 texel에 매핑됨
  • 같은 texel을 여러 pixel에 사용함.
  • 인접해있는 pixel block이 다음 texel로 갑자기 넘어갈 수도 있음
  • blocky한 이미지(도트처럼)가 생성될 수도 있음

2. 겹선형 보간(Bilinear interpolation)

  • 위 옵션보다 선호되는 이유는 blocky한 이미지로 발생하는 문제점이 줄어들고, 그래픽 하드웨어가 겹선형 보간 옵션에 최적화 되어 있다

축소

  • screen space가 이미지 텍스쳐보다 작을 때, 텍스쳐를 줄임
  • texture space위로 pixel이 듬성듬성 투영됨 -> large jump
  • pixel 보다 texel 수가 더 많음

Aliasing

  • 바둑판 이미지 텍스쳐에서 문제가 있음
  • 모든 픽셀이 어두운 회색이나 밝은 회색에만 존재하면, 이상한 결과가 나옴 -> 이 문제를 Aliasing이라고 함.

Mipmap

  • 축소를 할 때, texel이 pixel보다 많아서 문제가 된다. 픽셀들이 texture space에서 large jump를 하느라, 그래서 많은 texel이 텍스쳐링에 포함이 안 됨
  • 간단한 해결책은 texel 수를 pixel 수에 맞추는 거임, 텍스쳐 크기가 줄어들면서, down-sampling이 적용됨
  • 2^l x 2^l 크기의 텍스쳐는 l+1 단계의 피라미드 레벨이 생길 거고, 원본은 0레벨에 위치. -> 이 피라미드를 mipmap이라고 함
  • 필터링할 레벨을 LOD(level of detail), λ로 표기

Mipmapping

  • 픽셀은 텍스처 공간의 한 점인 (s', t')로 투영된다고 설명해 왔다. 하지만 실제로 픽셀은 스크린 공간의 작은 영역을 덮고 있다. 이 영역은 (s', t') 좌표를 중심으로 일정한 영역을 차지하게 된다. 이 영역을 픽셀의 발자국(Footprint)이라고 부른다.
  • 이 작위적인 예에서는 쿼드와 레벨 1 텍스처의 크기가 동일합니다. 픽셀의 풋프린트는 레벨 0에서는 2 × 2 텍셀로 구성되지만 레벨 1에서는 하나의 텍셀로 구성됩니다.
  • pixel의 footprint가 레벨 0 텍스처에서 m × m 텍셀을 차지하는 경우, λ는 log₂m으로 설정된다

  • 3개를 차지하는 경우는 다르게 볼 수 있음
  • log_2 (3)은 1.585임.
  • 옵션1: λ에 가장 가까운 레벨을 선택한다.
  • 옵션2: 두 레벨을 모두 선택해서, 각 레벨을 필터링한 결과를 선형 보간하는 것(bilinear interpolation)
profile
공부 노트

0개의 댓글