Home 그래픽스 실전3
Post
Cancel

그래픽스 실전3

지난 포스트에서 이어집니다. Pixel shader의 경우 이번 포스트에서 먼저 Image Texturing에 대한 내용을 다루고, 다음 포스트에서 Lighting에 대하여 알아보도록 하겠습니다.
이 포스트는 경희대학교 게임 그래픽 프로그래밍 수업자료를 바탕으로 합니다.

6. Pixel Shader

rasterizer에 의해 생성된 각 픽셀은 일반적으로 법선 벡터와 텍스처 좌표를 포함한다. 이러한 특성을 사용하여 픽셀 셰이더는 각 픽셀의 색상을 결정한다.

6-1. Image textring

물체의 표면에 이미지를 붙여넣는 것으로 이해하면 된다.
▪ Image textring은 다양한 텍스처링 방법 중 가장 간단한 방법이다.
▪ 텍스처는 일반적으로 texels(텍스처 요소)의 2차원 배열로 표현된다.
▪ texel의 위치는 좌표의 중심으로 나타낼 수 있다.
• 예시로 아래 그림을 보자. 왼쪽 하단 모서리 texel은 (0.5, 0.5)에 있고 그 오른쪽의 texel은 (1.5, 0.5)에 있다.


텍스처링을 위해 모델링 단계에서 폴리곤 메쉬의 각 꼭짓점에 텍스처 좌표(s, t)를 할당한다.
▪ rasterizer는 픽셀에 대해 보간한다.
▪ 정규화된 텍스처 좌표(s, t)는 텍스처 공간에 투영된다.


s와 t가 0에서 1 사이가 되도록 텍스처 좌표를 정규화하는 것이 일반적이다. 정규화된 텍스처 좌표는 특정 텍스처 해상도에 의존하지 않으며, 다양한 텍스처에 자유롭게 연결할 수 있다.


또한 텍스처 좌표를 변경하지 않고 서로 다른 해상도의 여러 이미지를 표면에 붙일 수도 있다.

6-2. Parameterization

▪ 폴리곤 메쉬의 정점에 텍스처 좌표를 할당한다.
▪ 이 과정을 surface parameterization 또는 간단히 parameterization라고 한다. 일반적으로 parameterization는 3D표면을 2D평면 도메인으로 펼쳐야 하는 것을 필요로 하기에 사용된다.

6-3. Patch, Chart and Atlas

▪ 복잡한 폴리곤 메쉬는 일반적으로 패치가 개별적으로 펼쳐지도록 여러 패치로 세분화된다(예: 얼굴, 몸, 팔 등).
▪ 각 패치가 펼쳐지고 parameterization된다. 그런 다음 아티스트는 각 패치에 대한 이미지를 그린다. 이 패치의 이미지를 차트라고 한다.
▪ 여러 차트는 일반적으로 아틀라스라고 하는 텍스처로 패킹되고 배열된다.

6-4. Texture Wrapping

텍스처 좌표(s,t)가 반드시 [0,1] 범위에 있는 것은 아니다. 텍스처 래핑 모드는 범위를 벗어난 좌표(s,t)를 처리합니다.
▪ Clamp-to-Edge: 범위를 벗어난 좌표는 가장자리 색상으로 렌더링된다.
▪ Repeat: 텍스처가 모든 integer junction에서 타일링된다.
▪ Mirrored-Repaet: 텍스처가 모든 integer junction에서 미러링되거나 반사된다.

6-5. Texture Filtering

quad를 고려하자. 화면의 (x, y)에 있는 각 픽셀에 대해 텍스처 좌표(s, t)가 텍스처 공간의 (s’, t’)에 투영된다.
▪ (s’, t’)는 대부분의 경우 부동 소수점 값이다.
▪ 따라서 (s’, t’) 주변의 텍셀이 샘플링된다. 이 샘플링 프로세스를 텍스처 필터링이라고 한다.


Magnification
▪ 확대의 경우, 화면 공간 쿼드는 이미지 텍스처보다 크게 나타날 수 있으므로 텍스처가 쿼드에 맞도록 확대된다.
▪ 텍셀보다 픽셀이 많다.

Minification
▪ 축소의 경우, 화면 공간 쿼드는 이미지 텍스처보다 작게 나타날 수 있으며 텍스처가 축소된다.
▪ 텍셀보다 픽셀 수가 적다.


차례로 좀 더 자세히 살펴보자.

확대의 2가지 방법
옵션 1: 가장 가까운 점 샘플링 (Nearest point sampling)
▪ 픽셀 블록은 단일 텍셀에 매핑될 수 있다.
▪ 따라서 인접한 픽셀 블록이 한 텍셀에서 다음 텍셀로 갑자기 변경되어 뭉툭한 이미지가 생성되는 경우가 많다.


옵션 2: 쌍선형 보간 (Bilinear interpolation)
▪ 최근 접점 샘플링을 선호하는 이유는 최종 결과가 이미지의 뭉침 현상이 훨씬 덜할 뿐만 아니라 그래픽 하드웨어가 일반적으로 쌍선형 보간(bilinear interpolation)에 최적화되어 있기 때문이다.


다음은 축소의 방법이다.

Aliasing in minification
▪ minification의 경우 픽셀은 텍스처 공간에 드문드문 투영된다.
▪ checkerboard image texture를 생각해보자.
• 모든 픽셀이 짙은 회색 텍셀로 둘러싸여 있으면 질감이 있는 쿼드가 짙은 회색으로 나타난다.
• 모든 픽셀이 밝은 회색 텍셀로 둘러싸여 있으면 텍스처 쿼드가 밝은 회색으로 나타난다.
▪ 이 문제가 aliasing의 instance이다.


Mipmap
▪ minification에서 확인되는 aliasing 문제는 픽셀보다 텍셀이 더 많기 때문에 발생한다. 픽셀은 텍스처 공간에서 크게 점프하여 텍스처링에 관여하지 않는 많은 텍셀을 남긴다.
▪ 이에 대한 해결책은 텍셀 수가 픽셀 수에 최대한 가깝게 되도록 텍셀 수를 줄이는 것이다. 따라서 텍스처 크기를 줄이기 위해 다운 샘플링이 채택되었다.
▪ 2lx2l 해상도의 원본 텍스처가 주어지면 원본 텍스처가 레벨 0에 위치하는 (l+ 1) 레벨의 피라미드가 구성된다.
▪ 이 피라미드를 밉맵이라고 한다.
▪ 필터링할 정도를 level of detail(LOD)이라고 하며 λ로 표시한다. texelcount가 픽셀 수에 가까운 레벨을 찾는다.

레벨 1 예시
▪ 픽셀은 화면의 한 영역을 덮는다.
▪ 간단하게, 면적을 정사각형으로 둔다. 그러면 텍스처 공간에 대한 픽셀의 투영은 점이 아니라 (s’, t’)를 중심으로 하는 영역이 된다. 투영된 영역을 픽셀의 footprint라고 한다.
▪ 이 예에서, 쿼드와 레벨 1 텍스처는 동일한 크기를 갖는다. 픽셀의 footprint는 레벨 0에서 2 x 2 텍셀을 포함하지만 레벨 1에서 단일 텍셀을 덮는다.
▪ 픽셀 footprint가 레벨 0 텍스처의 m × m 텍셀을 덮을 때 λ는 log2m으로 설정된다.

레벨 2 예시
▪ 이 예에서는 screen-space quad와 level-2 texture의 크기가 동일하다. 픽셀의 footprint는 레벨 2 텍스처에서 단일 텍셀을 덮고 필터링된다.
▪ 이번 예제와 이전 예제에서 모든 텍셀이 필터링과 관련되어 있음을 기억하자.

레벨 1.585 예시
▪다음 예에서 λ = log23 ≒1.585이므로 레벨 1과 2를 확인할 수 있다. ▪ 옵션 1: 가장 가까운 레벨 선택. l = round(λ).
▪ 옵션 2: 두 레벨을 모두 취하고 필터링 결과를 선형으로 보간. (bilinear interpolation)

6-6. Pixel shader

픽셀 셰이더에 대한 입력
▪ pixel: vertex shader에 의해 생성된 per-vertex 출력 변수는 per-pixel 변수를 결정하기 위해 보간된다.
▪ Constant buffer : 픽셀 셰이더에서 사용할 전역 버퍼.

출력: 하나 이상의 픽셀 색상.
픽셀 셰이더는 각 픽셀에 대해 한 번 실행되며, 각 픽셀은 독립적으로 처리된다.



Pixel shader는 다음 포스트에서 Lighting으로 계속 이어집니다.

This post is licensed under CC BY 4.0 by the author.