Rasterizer가 출력하는 fragment별 attribute는 대체로 normal과 texture coordinate을 포함한다.
framgnet shader는 이들을 이용해 fragment의 색상을 계산한다.
fragment shader가 만드는 최종 영상의 품질을 결정하는 핵심 알고리즘은 lighting과 texturing으로 구분된다.
texture는 texel들의 배열이다. (texel은 pixel과 동일한 개념)
이 배열이 색상 정보를 저장하고 있다면, 이를 image texture라고 부른다.
polygon mesh의 각 vertex마다 texture coordinate을 할당해야 한다.
2차원 texture coordinate은 보통 혹은 로 표현하는데,
각 좌표는 원칙적으로 [0, 1] 범위 안에 정규화 돼있다.
이는 vertex array에 기록되어, vertex shader에게 전달된다.
참고로, 복잡한 polygon mesh는 여러 개의 patch로 나눠져 각각 parameterization된다.
parameterization이 완료된 2차원 patch 포토샵 등을 이용해 이미지를 그린다,
이 이미지를 chart라고 부르며, 여러 chart를 하나의 커다란 texture에 모은 것을 atlas라고 부른다.
aliasing: high-frequency 신호를 낮은 frequency로 샘플링할 때에 발생하는 오류.
pixel에 비해 texel이 너무 많아서 texturing에 참여하지 못하는 texel이 발생하기 때문에 나타남.
ex) 모든 pixel이 검은색 texel에 둘러싸이게 되면, texturing 결과가 검은색으로 나타남.
따라서 anti-aliasing 기술이 필요함.
해결 방법은 texture를 작게 만들어서 texel 수를 pixel 수에 맞추면 된다.
Mipmapping
Mipmap Filtering
texture space에 projection된 pixel은 에 놓인 '점'이 아니라
를 중심으로 일정한 '영역'을 차지하게 된다.
이 영역을 pixel footprint라고 부른다.
0번 level texture 오른쪽 아래 구석 예시처럼 pixel footprint는 texel 영역을 차지한다.
(연두색:pixel, 노란색: texel)
texel이 pixel보다 너무 많다.
level을 올라가면서 (점점 texel 개수가 적어지겠지)
pixel과 texel의 개수가 같은 레벨을 선택한다.