Texture mapping
3D 모델의 표면에 2D 이미지(텍스처)를 입혀서 더 현실감 있는 외관을 만들어주는 기술을 텍스쳐 매핑이라고 한다.
이 과정에서 각 3D 모델 표면의 픽셀(텍셀)에 텍스처 이미지의 특정 좌표가 매칭된다.
그림과 같이 모델의 표면에 사각형 이미지, 또는 원통, 구체 형태로 이미지를 입힐 수 있다.
아니면 모델의 면을 큐브 형태로 나눠서 각각 다른 이미지를 입힐 수도 있다.
그런데 위와 같이 unfold한 surface는 텍스처 매핑을 할 때 UV 좌표가 겹치는 문제 때문에 오류가 발생할 수 있다.
이러한 문제를 해결해기 위해서 아틀라스를 사용한다.
텍스처 아틀라스(Texture Atlas)는 여러 개의 3D 객체의 텍스처 조각을 하나의 큰 이미지(아틀라스)에 모아두고, 각 조각을 3D 모델의 서로 다른 부분에 매핑하는 방식이다.
여러 개의 텍스처나 이미지를 각각 별도로 불러오는 대신, 하나의 큰 이미지에 담아두면 렌더링 성능을 향상시킬 수 있다.
이 처럼 가까운 곳에는 큰 이미지를, 멀리 있는 곳에는 작은 이미지를 매핑하기 위해서 이미지의 확대 및 축소를 가능한 빠르게 해야 한다.
이를 보완하기 위해 나온 방법이 mip mapping이다.
Mip Mapping
mip mapping은 처음 텍스쳐 이미지를 저장할 때, 이미지의 크기를 반으로 줄여서 각 이미지 별 위치를 미리 계산하여 저장해둔다.
이를 통해 이미지 별 해상도를 미리 보간할 수 있다.
즉, 하나의 텍셀에 여러 해상도를 갖고 있는 상태이다.
texture filtering 방법에는
가장 가까운 텍셀과 서로 보간하는 방법과
Bilinear Interpolation, Trilinear Interpolation, Anisotropic filtering 등이 있다.
위 그림과 같이 mip mapping을 진행할 때는 3중 보간을 사용하여 이미지를 축소 및 확대시켜서 저장한다.
이렇게 객체가 화면에서 멀어지거나 카메라의 각도에 따라 텍스처가 작게 보일 때, 해당 객체의 크기에 맞는 텍스처 크기를 바로 선택하여 원근법에 따른 텍스처 왜곡을 방지하고,
적절한 해상도의 텍스처를 선택하여 텍스처 사이에서 부드러운 전환을 만든다.
Bump Mapping (Normal Mapping)
실제 모델은 울퉁불퉁하지만, 텍스쳐 매핑은 이와 상관없이 평평해 보인다는 단점이 있다.
이런 단점을 보완하기 위해서 bump mapping은 각 fragment마다 illumination을 사용한다.
그래서 이 방법은 mip mapping과는 다르게 노말 벡터를 알아야 한다.
bump mapping은 각 geometry 높이를 저장한다. 이것을 fragment shader에서 계산할 수 있다.
이를 이용하여 이미지는 그대로 사용하지만, 저장된 모델의 높이를 통해 각각 픽셀마다 노말 벡터를 계산한다.
(lighting 값 계산)
계산하고 나면 다음과 같이 모델링된다.
이 방식의 단점인 가장자리의 실루엣 부분은 여전히 평평하다는 것을 볼 수 있다.
그래서 이런 점을 보완하기 위해 Displacement Mapping이 있다.
Displacement Mapping
이 방식은 평평한 2d 이미지에 illumination만 적용시킨 것이 아니라,
높이를 사용해서 실제로 surface geometry를 바꾼다. (실제 표면의 모양을 바꿈)
모델의 실제 vertex 위치를 바꾸고, vertex shader에서 작업을 수행한다.
Bump Mapping은 실제 표면의 형태는 변하지 않았고, 표면의 빛 반사만 변경했다.
반면 Displacement Mapping은 실제로 표면의 기하학적 좌표를 수정하여 윤곽선(silhouette)까지 변경한다.
Environment Maps
모델의 주변을 둘러하고 있는 환경을 이미지 map으로 저장하는 방법이다.
각 vertex마다 texture 좌표를 매핑하여 물체를 볼 때 주변 빛이 주는 영향까지 고려해서 우리에게 보여준다.
이와같은 환경 map 이미지는 구 형태가 아니라 큐브 형태로 저장한다.
왜냐하면 구 환경의 경우, 위도와 경도로 인해 극지방 쪽으로 갈수록 실제 크기보다 크게 보이기 때문이다.
이렇게 되면 적도랑 극지방 해상도가 달라진다.
위와 같이 반사된 빛의 색깔 R을 계산하여 빛나는 물체의 env map을 계산할 수 있다.