[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,26 +1,26 @@
|
||||
---
|
||||
id: P-REINFORCE-AUTO-CE737D
|
||||
id: [[P-Reinforce]]-AUTO-CE737D
|
||||
category: "10_Wiki/💡 Topics/Graphics & Performance"
|
||||
confidence_score: 0.90
|
||||
tags: [auto-reinforced]
|
||||
last_reinforced: 2026-04-20
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 프래그먼트 셰이딩(Fragment Shading)"
|
||||
github_commit: "[P-Reinforce] Continuous Worker - 프래그먼트 셰이딩([[Fragment Shading]])"
|
||||
---
|
||||
|
||||
# [[프래그먼트 셰이딩(Fragment Shading)]]
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
> 프래그먼트 셰이딩(Fragment Shading)은 그래픽 렌더링 파이프라인의 후반부 단계로, 최종 색상 값을 결정하기 위해 픽셀 단위의 연산을 실행하는 과정이다 [1, 2]. 주로 텍스처 데이터 샘플링, 픽셀 단위 조명(per-pixel lighting), 알파(투명도) 값을 계산하여 표면의 디테일을 구현하는 역할을 수행한다 [1, 3, 4]. 화면에 보이는 픽셀에 대해 계산을 수행하므로, 픽셀이 중첩되어 여러 번 렌더링되는 오버드로우(Overdraw)가 발생하거나 복잡한 셰이더를 사용할 경우 GPU 성능 저하 및 프레임 지연의 주요 원인이 된다 [1, 2].
|
||||
> 프래그먼트 셰이딩(Fragment Shading)은 그래픽 렌더링 파이프라인의 후반부 단계로, 최종 색상 값을 결정하기 위해 픽셀 단위의 연산을 실행하는 과정이다 [1, 2]. 주로 텍스처 데이터 샘플링, 픽셀 단위 조명(per-pixel lighting), 알파(투명도) 값을 계산하여 표면의 디테일을 구현하는 역할을 수행한다 [1, 3, 4]. 화면에 보이는 픽셀에 대해 계산을 수행하므로, 픽셀이 중첩되어 여러 번 렌더링되는 오버드로우([[Overdraw]])가 발생하거나 복잡한 셰이더를 사용할 경우 GPU 성능 저하 및 프레임 지연의 주요 원인이 된다 [1, 2].
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
- **역할 및 데이터 처리:**
|
||||
프래그먼트 셰이더는 정점 셰이더(Vertex Shader)로부터 Varying 변수를 통해 데이터를 전달받아 픽셀 단위로 처리한다 [5]. 이 셰이더는 픽셀 셰이딩이라 불리는 조명 계산, 노멀 맵을 활용한 미세한 표면 디테일 모사, 그리고 텍스처에 따른 알파(Alpha) 값 연산 등을 담당한다 [3, 4]. 이 밖에도 폰트 벡터 데이터를 바탕으로 프래그먼트 셰이더 내에서 직접 텍스트를 재렌더링하는 기법도 존재한다 [6, 7].
|
||||
프래그먼트 셰이더는 정점 셰이더([[Vertex Shader]])로부터 Varying 변수를 통해 데이터를 전달받아 픽셀 단위로 처리한다 [5]. 이 셰이더는 픽셀 셰이딩이라 불리는 조명 계산, 노멀 맵을 활용한 미세한 표면 디테일 모사, 그리고 텍스처에 따른 알파(Alpha) 값 연산 등을 담당한다 [3, 4]. 이 밖에도 폰트 벡터 데이터를 바탕으로 프래그먼트 셰이더 내에서 직접 텍스트를 재렌더링하는 기법도 존재한다 [6, 7].
|
||||
|
||||
- **성능 병목과 오버드로우(Overdraw):**
|
||||
여러 개의 텍스처 샘플링과 복잡한 수학적 연산 및 조건문이 포함된 PBR(Physically Based Rendering) 재질 같은 복잡한 셰이더는 중간 사양 GPU의 필 레이트(Fill rate)를 50~70%까지 감소시킬 수 있다 [1]. 특히 동일한 픽셀 위치에 여러 번 쓰기 작업이 중첩되는 오버드로우(Overdraw) 현상이 발생하면 씬(Scene) 전체가 '프래그먼트 바운드(Fragment-bound)' 상태에 빠져 심각한 프레임 처리 지연이 발생한다 [2].
|
||||
여러 개의 텍스처 샘플링과 복잡한 수학적 연산 및 조건문이 포함된 PBR(Physically Based Rendering) 재질 같은 복잡한 셰이더는 중간 사양 GPU의 필 레이트([[Fill Rate]])를 50~70%까지 감소시킬 수 있다 [1]. 특히 동일한 픽셀 위치에 여러 번 쓰기 작업이 중첩되는 오버드로우(Overdraw) 현상이 발생하면 씬(Scene) 전체가 '프래그먼트 바운드([[Fragment-bound]])' 상태에 빠져 심각한 프레임 처리 지연이 발생한다 [2].
|
||||
|
||||
- **프래그먼트 셰이더 최적화 기법:**
|
||||
- **거리 기반 및 가시성 최적화:** 동적 LOD(Level of Detail) 전환을 활용하면 픽셀 레벨의 GPU 프래그먼트 처리 연산을 60~75%가량 줄일 수 있다 [8]. 또한 뎁스 프리패스(Depth Pre-Pass)를 구현하면 GPU가 값비싼 메인 셰이더 연산에 진입하기 전에 가려진 프래그먼트를 미리 폐기(Discard)하여 프래그먼트 셰이더의 부하를 최대 30%까지 감소시킨다 [9].
|
||||
- **거리 기반 및 가시성 최적화:** 동적 LOD(Level of Detail) 전환을 활용하면 픽셀 레벨의 GPU 프래그먼트 처리 연산을 60~75%가량 줄일 수 있다 [8]. 또한 뎁스 프리패스([[Depth Pre-Pass]])를 구현하면 GPU가 값비싼 메인 셰이더 연산에 진입하기 전에 가려진 프래그먼트를 미리 폐기(Discard)하여 프래그먼트 셰이더의 부하를 최대 30%까지 감소시킨다 [9].
|
||||
- **재질(Material) 모델 단순화:** 연산량이 많은 `MeshStandardMaterial`은 프래그먼트 프로세서를 포화 상태로 만들 수 있으므로, 하드웨어 성능이 제한적인 환경에서는 픽셀별 스펙큘러 하이라이트만 제공하는 `MeshPhongMaterial`이나 조명 연산을 배제한 플랫 셰이딩(Flat Shaded) 커스텀 셰이더를 사용하여 프래그먼트 연산 비용을 최소화해야 한다 [10, 11].
|
||||
- **절차적 렌더링(Procedural Rendering):** 엣지(Edge)나 와이어프레임을 그릴 때 별도의 기하학적 도형을 추가로 그리지 않고, 무게중심 좌표계(Barycentric Coordinate)를 이용해 프래그먼트 셰이더 내에서 절차적으로 엣지까지의 거리를 계산하여 렌더링하는 것이 훨씬 효율적이다 [12].
|
||||
|
||||
|
||||
Reference in New Issue
Block a user