Files
2nd/10_Wiki/Topics/Architecture/Fragment-bound.md
T

61 lines
6.3 KiB
Markdown

---
category: Unified
tags: [auto-consolidated, technical-documentation]
title: [[Fragment-bound|Fragment-bound]]
last_updated: 2026-05-02
---
# [[Fragment-bound|Fragment-bound]]
## 📌 Brief Summary
> 'Fragment-bound(프래그먼트 바운드)'는 3D 그래픽스 렌더링 파이프라인에서 GPU의 프래그먼트 셰이딩(픽셀 처리) 용량이 한계에 도달하여 전체 시스템의 성능 병목이 되는 상태를 의미합니다 [1, 2]. 이 상태는 주로 객체들이 카메라 기준 깊이(Depth)에 따라 정렬되지 않은 채 렌더링될 때, 동일한 픽셀에 여러 번 그리기 연산이 수행되는 '오버드로우([[Overdraw|Overdraw]])' 현상으로 인해 촉발됩니다 [1, 2]. 특히 연산 비용이 높은 재질을 사용할 때 이 병목 현상은 더욱 극심해집니다 [2, 3].
---
> 프래그먼트 바운드(Fragment-bound)는 3D 렌더링 파이프라인에서 GPU의 프래그먼트(픽셀) 연산 부하가 극심해져 전체 렌더링 성능과 프레임 레이트(FPS)를 제한하는 병목 상태를 의미합니다. 주로 화면에 그려지는 객체들이 렌더링 순서대로 정렬되지 않아 동일한 픽셀 위치에 렌더링 계산이 여러 번 중첩되는 오버드로우([[Overdraw|Overdraw]]) 현상으로 인해 발생합니다. 무거운 조명 연산이 포함된 재질을 사용할 때 이 상태에 더욱 쉽게 빠지게 됩니다 [1, 2].
## 📖 Core Content
- **오버드로우(Overdraw)에 의한 연산 과부하:**
프래그먼트 바운드 상태는 화면의 동일한 픽셀 영역에 대해 셰이더 연산과 쓰기 작업이 여러 번 중첩되어 발생하는 오버드로우에 의해 야기됩니다 [1, 2]. GPU가 최종 화면에 보이지 않고 가려질 픽셀까지 모두 계산하게 되면서 픽셀 처리 성능을 상회하는 부하가 발생합니다 [2].
- **[[InstancedMesh|InstancedMesh]]의 정렬 부재와 병목:**
Three.js의 `InstancedMesh`는 단일 드로우 콜로 렌더링을 수행하지만 개별 인스턴스들의 렌더링 순서를 자동으로 정렬([[Sorting|Sorting]])하지 않습니다 [1, 2]. 만약 카메라와 가장 멀리 있는 인스턴스가 먼저 그려지고 가까운 인스턴스가 나중에 그려진다면 막대한 오버드로우 비용이 발생하게 되며, 이로 인해 씬(Scene)이 프래그먼트 바운드 상태에 빠지게 됩니다 [2].
- **재질(Material) 복잡도의 영향과 해결책:**
복잡한 조명 및 그림자 연산이 포함된 `MeshStandardMaterial`과 같은 셰이더를 사용할 경우 프래그먼트 바운드 현상은 훨씬 더 심화됩니다 [2, 3]. 이 문제를 완화하기 위해서는 오버드로우의 비용 자체를 줄일 수 있는 단순한 `MeshBasicMaterial`을 사용하여 비교하거나 [3], 자동으로 인스턴스 정렬을 지원하는 `BatchedMesh`로 전환하여 렌더링 효율을 높이는 것이 대안으로 제시됩니다 [1].
---
- **발생 원인과 오버드로우(Overdraw):** 프래그먼트 바운드 상태는 렌더링 파이프라인의 후반부인 프래그먼트 셰이딩([[Fragment Shading|Fragment Shading]]) 단계의 과부하로 발생합니다. 주된 원인은 오버드로우로, 불투명한 물체를 '앞에서 뒤로(Front-to-Back)' 정렬하지 않고 렌더링하여 뒤에 가려질 픽셀에 대해서도 GPU가 불필요한 계산을 중복해서 수행할 때 일어납니다 [2].
- **[[InstancedMesh|InstancedMesh]]의 구조적 한계:** `InstancedMesh` 기술은 드로우 콜([[Draw Call|Draw Call]])을 줄여 CPU 오버헤드를 낮추는 데 효과적이지만, 인스턴스들에 대한 자동 정렬 기능을 제공하지 않습니다 [1, 2]. 따라서 카메라에서 멀리 있는 인스턴스가 먼저 그려지고 가까운 인스턴스가 나중에 그려지는 배치가 발생하면, 오버드로우 비용이 GPU의 픽셀 처리 성능을 상회하게 되어 프래그먼트 바운드 상태를 유발합니다 [2].
- **재질(Material) 복잡도의 영향:** 오버드로우로 인한 프래그먼트 바운드 현상은 복잡한 조명 연산이 포함된 `MeshStandardMaterial`과 같은 무거운 재질을 사용할 때 그 심각성이 극대화됩니다 [1, 2].
- **성능 개선 대안:** 프래그먼트 바운드 병목을 해결하기 위한 대안 중 하나로 `BatchedMesh`를 사용할 수 있습니다. `InstancedMesh`와 달리 `BatchedMesh`는 인스턴스들의 정렬(sorted)을 지원하므로 오버드로우를 효과적으로 줄일 수 있습니다 [1].
## ⚖️ Trade-offs & Caveats
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Graphics & Performance 분야의 자동 자산화 수행.
---
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Graphics & Performance 분야의 자동 자산화 수행.
## 🔗 Knowledge Connections
- **Related Topics:** [[Overdraw|Overdraw]], [[InstancedMesh|InstancedMesh]], MeshStandardMaterial, BatchedMesh
- **Projects/Contexts:** Three.js 렌더링 성능 최적화
- **Contradictions/Notes:** 드로우 콜을 줄여 성능을 향상시키기 위해 고안된 `InstancedMesh`가, 정렬 기능의 부재로 인해 오히려 심각한 오버드로우와 프래그먼트 바운드를 유발하여 일반 `Mesh`를 여러 번 그릴 때보다 프레임 레이트(FPS)를 더 하락시킬 수 있다는 점이 주의사항으로 보고됩니다 [2, 4].
---
*Last updated: 2026-04-19*
---
---
- **Related Topics:** [[오버드로우(Overdraw)|오버드로우(Overdraw]], InstancedMesh, BatchedMesh, [[프래그먼트 셰이딩(Fragment Shading)|프래그먼트 셰이딩(Fragment Shading]]
- **Projects/Contexts:** Three.js 렌더링 성능 최적화, [[MeshStandardMaterial 조명 연산|MeshStandardMaterial 조명 연산]]
- **Contradictions/Notes:** 소스에 따르면 `InstancedMesh`는 CPU의 드로우 콜 병목을 해소하기 위해 도입되지만, 내부 정렬([[Sorting|Sorting]])의 부재로 인해 오히려 GPU 측에서 프래그먼트 바운드라는 새로운 형태의 성능 병목을 유발할 수 있는 구조적 트레이드오프를 지니고 있습니다 [1, 2].
---
*Last updated: 2026-04-19*
---