평생 배우는 개발자

Texture Fetch 본문

개발면접준비

Texture Fetch

개발지식 블로그 2025. 1. 20. 18:28
1. Texture Fetching이란?

Texture Fetching은 GPU가 메모리에 저장된 텍스처 데이터를 샘플링(Sampling)하여 셰이더에 제공하는 프로세스를 뜻합니다. 이 과정은 주로 Fragment ShaderCompute Shader에서 수행되며, 실시간으로 픽셀 데이터를 계산하거나 후처리에 사용됩니다.


2. Texture Fetch의 동작 과정

  1. 텍스처 좌표(UV Coordinates) 제공
    • 보통 2D 텍스처의 좌표는 (u, v)로 표현되며, 0~1의 정규화된 범위를 가집니다.
    • 텍스처 좌표는 Vertex Shader에서 계산되고 일련의 과정을 거쳐 Fragment Shader로 전달됩니다.
  2. 샘플러(Sampler)를 통한 데이터 요청
    • 텍스처는 sampler2D, samplerCube 등으로 GPU에 바인딩됩니다.
    • texture() 함수가 텍스처 좌표를 입력받아 데이터를 샘플링합니다.
  3. 필터링 및 보간
    • GPU는 지정된 필터링 방법(예: Nearest, Linear, Mipmapping)을 사용해 데이터를 보간합니다.
    • 고해상도 텍스처의 성능을 최적화하고 왜곡을 줄이는 데 사용됩니다.
  4. 텍스처 캐시 활용
    • GPU는 Texture Fetch를 가속하기 위해 텍스처 캐시를 사용하여 동일한 데이터를 반복 요청하지 않도록 최적화합니다.

3. 주요 텍스처 샘플링 방식

  1. Nearest-Neighbor Filtering
    • 가장 가까운 텍셀의 값을 반환.
    • 간단하지만 픽셀화(pixellation) 현상이 발생할 수 있음.
  2. Linear Filtering
    • 인접한 텍셀 값을 선형 보간하여 부드러운 결과 제공.
  3. Mipmapping
    • 텍스처의 여러 해상도를 사전에 생성하고 적절한 해상도를 선택해 샘플링.
    • 텍스처의 멀리 있는 부분에서 발생하는 모아레(Moiré) 패턴을 줄임.
  4. Anisotropic Filtering
    • 텍스처의 원근 왜곡을 보정하여 품질을 개선.
    • 특히 경사진 표면에서 유용.

4. GPU에서 Texture Fetch의 성능 최적화

  1. 텍스처 캐싱 활용
    • GPU는 텍스처 캐시를 통해 반복적인 Fetch 요청을 줄임.
    • 캐시의 히트율(Cache Hit Rate)을 높이려면 UV 좌표의 로컬리티(Locality)를 유지하도록 설계.
  2. 텍스처 압축(Texture Compression)
    • BCn/DXT 또는 ASTC와 같은 압축 기술로 메모리 대역폭과 공간을 절약.
  3. 텍스처 해상도와 크기 조정
    • 필요한 해상도를 초과하는 텍스처는 성능에 영향을 미침.
    • 다단계 해상도의 텍스처 사용(예: 4K 대신 2K 텍스처).
  4. Batching
    • 동일한 텍스처를 사용하는 오브젝트들을 그룹화하여 드로우 호출(Draw Call)을 최소화.
  5. 비동기 Fetch
    • 일부 API에서는 비동기 Texture Fetch를 허용하여 GPU 스레드의 효율성을 높임.

5. GLSL에서 Texture Fetch 사용 예제

아래는 GLSL에서 Texture Fetch를 활용하는 코드 예제입니다:

#version 450 core

uniform sampler2D myTexture;  // 텍스처 샘플러
in vec2 fragTexCoord;         // 텍스처 좌표 입력
out vec4 fragColor;           // 출력 색상

void main() {
    // 텍스처 데이터를 Fetch하여 색상으로 출력
    fragColor = texture(myTexture, fragTexCoord);
}

6. Texture Fetch와 고급 그래픽 기술

  1. PBR(Material 모델링)
    • 텍스처를 통해 노멀맵, 러프니스맵, 메탈릭맵 등 다양한 물리적 속성 표현.
    • Texture Fetch는 실시간으로 다양한 맵 데이터를 가져와 픽셀 단위로 재질을 계산.
  2. Shadow Mapping
    • 뎁스 텍스처(Depth Texture)를 Fetch하여 그림자 여부를 계산.
  3. Virtual Texturing
    • 텍스처의 필요한 부분만 로드하여 메모리 사용을 효율화.
  4. Compute Shader 활용
    • 고급 물리 기반 시뮬레이션에서 텍스처 데이터를 Fetch하여 계산에 활용.

7. 주의할 점

  • Overfetch 방지: 불필요한 텍스처 데이터를 Fetch하면 성능에 악영향.
  • 정확한 필터링 선택: 게임의 품질과 성능 간의 균형을 맞추기 위해 적절한 필터링 방법 선택.
  • 텍스처 좌표 왜곡: UV 좌표를 잘못 계산하면 텍스처 왜곡 발생.

심화 질문

Q1: Texture Fetch 성능 병목을 해결하기 위해 그래픽 파이프라인에서 어떤 최적화 기법을 사용할 수 있을까요?

Q2: PBR 렌더링에서 다양한 텍스처 데이터를 효과적으로 관리하는 방법은 무엇인가요?

Q3: Virtual Texturing이 Texture Fetch 성능에 어떤 영향을 미치며, 이를 구현할 때 고려해야 할 점은 무엇인가요?

 

앞으로 할 것 : mipmap,brdf,pbr,ibl,ray tracing,clipmapping,shadow mapping,uv,clamping,illuminance,luminance,Backface Culling Occlusion Culling

'개발면접준비' 카테고리의 다른 글

Graphics Rendering PipeLine  (0) 2025.02.12
mipmap  (2) 2025.01.21
Graphics Rendering Pipeline  (6) 2025.01.18
내적과 외적  (3) 2025.01.11
참조 매개변수  (0) 2025.01.10