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

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

- 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)