Image Texturing
rendering pipeline의 a to z
Created Jul 8, 2024 - Last updated: Jul 8, 2024
Texturing and Lighting
vertex shader와 rasterizer를 거치면서 pixel들의 좌표와 normal 벡터들을 얻어냈습니다. 그렇다면 이 정보들을 토대로 texture와 light를 입혀서 최종적으로 화면을 그려낼 수 있을 것입니다.
이번 글에서는 Texturing에 대해서 정리해보도록 하겠습니다.
Texturing
Texturing은 아래와 같이 물체에 texture를 씌우는 과정을 의미합니다.
이렇게 텍스쳐를 씌우는 것은 굉장히 간단하게 이루어지는데요. 우선 각 vertex에는 texture corrdinates(s,t)가 존재합니다. 그러므로 이 좌표를 통해 texture에서의 적당한 지점을 가져오게 되면 물체에 texture를 씌울 수 있습니다.
그렇다면 texture coordinate만 있으면 texturing은 쉽게 진행되는 것 같은데 이것은 언제 할당될까요?
이 좌표는 modeling 단계에서 할당되며 Surface parameterization이라고 불립니다.
Minification & Magnification
한편 이런 texturing을 할 때 몇가지 이슈가 있습니다.
이미지가 작을 때 우리의 fragment에 맞추기 위해 이미지를 키워야하는 magnification문제, 이미지가 클 때 이미지를 줄여야하는 minification문제가 있습니다.
Magnification문제의 경우 상식적으로 생각할 수 있는 두 가지 방법을 통해 해결할 수 있는데, 아래와 같습니다.
- Nearest point sampling
- Bilinear interpolation
Nearest point sampling이란 근처의 점들을 합한 색을 채워넣어 사진 크기를 키우는 것으로 아래와 같습니다.
Bilienar interpolation은 위치를 고려하여 주변의 점들을 적당히 섞는 것으로 1번과 비슷하지만 좀 더 정밀한 보간을 한 것입니다.
그런데 minification같은 경우 이런 식으로 할 경우 문제가 생길 수 있습니다. 다음의 그림을 보면 픽셀의 위치와 텍스처의 텍셀의 위치가 운이 안좋게 겹쳐서 실제 체커보드 이미지와 달리 아예 까맣거나 회색인 이미지가 나올 수 있습니다.
이를 위해 minification의 경우 Mipmap이라는 것을 사용합니다. 원래 이미지의 절반 크기에 해당하는 이미지를 만들고 또 절반에 해당하는 이미지를 만들어놔서 적당한 임지를 사용하는 것입니다.
이런 방식을 사용하게 되면 minification의 문제도 적절히 해결가능하며 textuing을 성공적으로 수행할 수 있게 됩니다.