Direct3D 12 graphics Pipeline

Rasterizer를 통해 pixel이 생성되고, 일부 값들을 보간해서 채워줬다. 이제 Pixel shader에서는 그 위에 Texturing과 Lighting 작업을 해준다. 이번 포스팅에서는 그 중에서 Texturing에 대해 알아볼 예정이다.

 

 

 

 

Image Texturing

◇  rasterizer가 보간한 texture 좌표에 texture 해상도를 곱해서 실제 texture에서 rgb값을 꺼내오는 것

  • 1) 모델링 단계에서 polygon mesh의 각 정점마다 texture coordination가 설정되어야 한다. (s,t)
  • 2) 이후 rasterizer가 각 pixel에 따라 interpolation 해서 넘겨준다. 
  • 3) texture 좌표 (s,t)에 실제 texture의 해상도를 곱해서 (s', t')를 구한다.
  • 4) (s', t') = c의 좌표를 활용해서 실제 texture(c)에서 rgb 값을 가져온다. 

(a) 정점 별 texture 좌표 (b) 보간된 texture 좌표 (c) texture 해상도를 곱한 후

 

  • texture coordintate의 s와 t는 0과 1 사이로 nomalize 되어있어 다양한 텍스쳐에 적용될 수 있다.

 

 

 

 

Surface Parameterization

◇  복잡한 2D,3D 표면을 단순한 2D 좌표계 (s,t)로 표현하는 방법 

 

 

 

 

Chart and Atlas

복잡한 polygon mesh는 patch(ex.머리, 몸 , 팔)들로 나누어 관리한다.

  • 각 patch들로 나누어 surface parameterization을 수행한다.
  • chart : 각 patch들의 이미지
  • atlas : 여러 개의 chart들이 texture에 합쳐진 것

 

 

 

 

Texture Wrapping

range를 벗어난 (s,t)들을 처리해주는 방법

  • Clamp-to-Edge (c) : 벗어날 경우 edge color로 렌더링한다.
  • Repeat (d) : 반복으로 타일링하는 방식
  • Mirrored-Repeat (e),(f) : 그냥 Repeat을 하면 경계가 부자연스러울 수 있기 때문에 mirrored 방식을 사용할 수 있다.

 

 

 

 

Texture Filtering

텍셀(texel) → 화면 픽셀(pixel)로 맵핑할 때, 해상도 차이를 보정하는 기술 

  • 텍스처 해상도와 화면 해상도가 다를 경우 생기는 왜곡/노이즈 문제가 발생할 수 있다. 
  • Magnification (확대) : pixel > texel

 

  • Minification (축소) : pixel < texel

 

 

Filtering for Magnification

pixel이 texel보다 많은 경우 = 하나의 texel이 여러 pixel을 표현하게 된다.

  • Option 1: Nearest point sampling
    • 현재 픽셀에 가장 가까운 텍셀 하나의 값을 그대로 가져온다. 
    • 가장 간단하지만 같은 texture 값을 여러 번 가져오면서 block image 문제가 발생한다.

  • Option 2 : Bilinear interpolation
    • 주변 4개의 텍셀 값을 이용해 보간(Interpolation)하여 중간색을 계산
    • 수평/수직 방향으로 보간을 2번 해서 최종 c를 구한다.
    • 경계가 부드럽고 자연스러운 색 표현이 가능하지만, 연산량이 많은 단점이 있다.

 

 

 

Filtering for Minification

 pixel이 texel보다 적은 경우, texel의 숫자를 줄여야 한다! = 확대보다 심각한 문제 

  • Aliasing 문제 
    • 어떤 texel을 샘플링하느냐에 따라 결과가 달라지는 aliasing 문제가 발생한다.
    • 표현하고자 하는 texture와 전혀 다르게 표현될 수 있는 심각한 문제다! 
    • 이를 위해 Mipmapping을 활용할 예정 

 

 

 

Mipmapping

Aliasing 문제를 해결하기 위한 방법 - down sampling을 통해 minmap을 만들자!

  • 목표 : texel의 수를 줄여서 pixel 수에 최대한 가까워지게 할 것
  • mipmap : downsampling 한 level-λ texture의 모음
  • 원래 텍스처의 해상도가 인 경우, (l+1)개의 레벨로 구성된 피라미드(mipmap)를 구축한다.

  • 이때 각 pixel에 맞는 level-λ texture는 각 pixel이 차지하는 texel의 가로 or 세로 개수 m을 log_2(m)으로 표현하면 해당 level이 된다. 즉, λ = log_2(m) 이다. 
  • 로그 계산이 딱 떨어지면 좋겠지만, 아래 처럼 m=3인 예시에서만 봐도 문제가 발생한다.
  • Option 1) 가장 가까운 level 고르기.

m = 3인 경우

 

 

 

 

 

 

Reference KHU 강형엽 교수님 강의를 수강하며 정리한 내용입니다.

'그래픽스' 카테고리의 다른 글

[DirectX12] 5. Output Merger  (1) 2026.04.10
[DirectX12] 4. Pixel Shader - Lighting  (0) 2026.03.13
[DirectX12] 2. Rasterizer  (1) 2026.03.13
[DirectX12] 1. Input Assembler, Vertex Shader  (0) 2026.03.12

+ Recent posts