Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 데이터분석
- std::vector
- 포워드 렌더링
- 어레이
- 힙
- c++
- Unity
- 디퍼드 렌더링
- Mipmap
- rasterization
- occlusion culling
- 이중우선순위큐
- Fetching
- DrawCall
- Page Fault
- 취준
- 외적
- bvh
- UnReal
- Stack
- im뱅크
- multiset
- Input Assembler
- 개발자면접
- Tesselation
- 스택
- 그래픽스 파이프라인
- Output Merge
- graphics rendering pipeline
- vertex shader
Archives
- Today
- Total
평생 배우는 개발자
Texture Fetch 본문
1. Texture Fetching이란?
Texture Fetching은 GPU가 메모리에 저장된 텍스처 데이터를 샘플링(Sampling)하여 셰이더에 제공하는 프로세스를 뜻합니다. 이 과정은 주로 Fragment Shader나 Compute Shader에서 수행되며, 실시간으로 픽셀 데이터를 계산하거나 후처리에 사용됩니다.
2. Texture Fetch의 동작 과정
- 텍스처 좌표(UV Coordinates) 제공
- 보통 2D 텍스처의 좌표는 (u, v)로 표현되며, 0~1의 정규화된 범위를 가집니다.
- 텍스처 좌표는 Vertex Shader에서 계산되고 일련의 과정을 거쳐 Fragment Shader로 전달됩니다.
- 샘플러(Sampler)를 통한 데이터 요청
- 텍스처는 sampler2D, samplerCube 등으로 GPU에 바인딩됩니다.
- texture() 함수가 텍스처 좌표를 입력받아 데이터를 샘플링합니다.
- 필터링 및 보간
- GPU는 지정된 필터링 방법(예: Nearest, Linear, Mipmapping)을 사용해 데이터를 보간합니다.
- 고해상도 텍스처의 성능을 최적화하고 왜곡을 줄이는 데 사용됩니다.
- 텍스처 캐시 활용
- GPU는 Texture Fetch를 가속하기 위해 텍스처 캐시를 사용하여 동일한 데이터를 반복 요청하지 않도록 최적화합니다.
3. 주요 텍스처 샘플링 방식
- Nearest-Neighbor Filtering
- 가장 가까운 텍셀의 값을 반환.
- 간단하지만 픽셀화(pixellation) 현상이 발생할 수 있음.
- Linear Filtering
- 인접한 텍셀 값을 선형 보간하여 부드러운 결과 제공.
- Mipmapping
- 텍스처의 여러 해상도를 사전에 생성하고 적절한 해상도를 선택해 샘플링.
- 텍스처의 멀리 있는 부분에서 발생하는 모아레(Moiré) 패턴을 줄임.
- Anisotropic Filtering
- 텍스처의 원근 왜곡을 보정하여 품질을 개선.
- 특히 경사진 표면에서 유용.
4. GPU에서 Texture Fetch의 성능 최적화
- 텍스처 캐싱 활용
- GPU는 텍스처 캐시를 통해 반복적인 Fetch 요청을 줄임.
- 캐시의 히트율(Cache Hit Rate)을 높이려면 UV 좌표의 로컬리티(Locality)를 유지하도록 설계.
- 텍스처 압축(Texture Compression)
- BCn/DXT 또는 ASTC와 같은 압축 기술로 메모리 대역폭과 공간을 절약.
- 텍스처 해상도와 크기 조정
- 필요한 해상도를 초과하는 텍스처는 성능에 영향을 미침.
- 다단계 해상도의 텍스처 사용(예: 4K 대신 2K 텍스처).
- Batching
- 동일한 텍스처를 사용하는 오브젝트들을 그룹화하여 드로우 호출(Draw Call)을 최소화.
- 비동기 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와 고급 그래픽 기술
- PBR(Material 모델링)
- 텍스처를 통해 노멀맵, 러프니스맵, 메탈릭맵 등 다양한 물리적 속성 표현.
- Texture Fetch는 실시간으로 다양한 맵 데이터를 가져와 픽셀 단위로 재질을 계산.
- Shadow Mapping
- 뎁스 텍스처(Depth Texture)를 Fetch하여 그림자 여부를 계산.
- Virtual Texturing
- 텍스처의 필요한 부분만 로드하여 메모리 사용을 효율화.
- 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 |