[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
@@ -2,91 +2,33 @@
id: wiki-2026-0508-오버드로우-overdraw
title: 오버드로우(Overdraw)
category: 10_Wiki/Topics
status: needs_review
canonical_id: self
aliases: [P-Reinforce-AUTO-8CE1CE]
duplicate_of: none
status: duplicate
canonical_id: overdraw
duplicate_of: "[[Overdraw]]"
aliases: []
source_trust_level: A
confidence_score: 0.9
tags: [auto-reinforced]
raw_sources: []
last_reinforced: 2026-04-20
github_commit: "[P-Reinforce] Continuous Worker - 오버드로우([[Overdraw]])"
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: unspecified
framework: unspecified
verification_status: redirected
tags: [duplicate, rendering, gpu, performance]
last_reinforced: 2026-05-10
github_commit: pending
---
# [[오버드로우(Overdraw)]]
# 오버드로우(Overdraw)
## 📌 한 줄 통찰 (The Karpathy Summary)
> 오버드로우(Overdraw)는 렌더링 파이프라인의 프래그먼트 셰이딩([[Fragment Shading]]) 단계에서 동일한 픽셀 위치에 대해 여러 번의 쓰기 작업이 중첩되어 발생하는 현상이다 [1]. 주로 겹쳐진 투명한 기하구조나 비효율적인 깊이 정렬(Depth [[Sorting]])로 인해 보이지 않는 픽셀 연산에 GPU 자원을 낭비하게 만든다 [2]. 이는 결과적으로 불필요한 GPU 픽셀 처리 비용을 유발하여 심각한 프레임 속도 저하 및 성능 병목을 초래한다 [1, 3].
> **이 문서는 [[Overdraw]] 의 중복본입니다.** Canonical 문서로 redirect.
## 📖 구조화된 지식 (Synthesized Content)
- **오버드로우의 발생 원리:** 오버드로우는 GPU가 한 프레임 내에서 겹쳐진 기하구조로 인해 동일한 픽셀을 여러 번 렌더링할 때 발생한다 [2]. 불투명한 물체의 경우, 일반적으로 '앞에서 뒤로(Front-to-Back)' 정렬하여 렌더링함으로써 뒤에 가려진 픽셀 연산을 조기에 종료([[Early-Z]])할 수 있으나, 정렬되지 않은 상태로 카메라와 가장 멀리 있는 객체가 먼저 그려질 경우 GPU는 동일한 픽셀 영역에 중복된 계산을 수행하게 된다 [1]. 투명한 재질의 경우에는 올바른 알파 블렌딩을 위해 '뒤에서 앞으로(Back-to-Front)' 렌더링을 강제받으므로, 숨겨진 픽셀을 건너뛰는 초기 깊이 테스트(Early-Z) 최적화가 비활성화되어 오버드로우가 더욱 심화된다 [2, 4].
- **[[InstancedMesh]]와 오버드로우:** Three.js의 `InstancedMesh`는 단일 드로우 콜로 다수의 객체를 렌더링하지만 자동 정렬(Sorting) 기능을 제공하지 않아 내부 인스턴스들이 버퍼에 저장된 순서대로 렌더링된다 [1, 5, 6]. 이로 인해 드로우 콜 감소로 얻은 CPU 이득보다, 정렬되지 않은 인스턴스들이 유발하는 막대한 오버드로우 비용이 GPU의 픽셀 처리 성능을 상회하는 역전 현상이 일어날 수 있다 [1]. 특히 복잡한 조명 연산이 포함된 `MeshStandardMaterial` 등을 사용할 경우 씬(Scene)이 프래그먼트 바운드([[Fragment-bound]]) 상태에 빠져 치명적인 프레임 드랍을 유발한다 [1, 6].
- **오버드로우 최적화 및 해결 방안:** 투명도로 인한 오버드로우를 최소화하려면 알파 테스트 투명도(Alpha-tested transparency)를 가능한 한 불투명한 기하구조로 변환하거나, 가장자리 스무딩에 Alpha-to-coverage를 사용해야 한다 [2, 7]. 또한 투명한 객체 간의 겹침이 줄어들도록 렌더링 순서를 신중하게 정렬해야 한다 [7]. `InstancedMesh`의 정렬 부재 문제를 극복하기 위해서는 각 인스턴스들이 렌더링되는 방식을 카메라 기준으로 개별 정렬(Sorting)할 수 있는 대안적 기술(`BatchedMesh` 등)을 고려할 수 있다 [6, 8].
## 매 핵심 요약 (specialization)
- 매 같은 pixel 을 매 여러 번 draw — 매 GPU fillrate 의 waste.
- 매 measure: Android GPU Overdraw debug, 매 RenderDoc, 매 Chrome DevTools paint flashing.
- 매 modern (2026): 매 Vulkan/Metal 의 tiled rendering 의 mitigation, 매 z-prepass technique.
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
- **과거 데이터와의 충돌:** 자동화 엔진에 의해 매핑된 지식으로, 추후 정밀 검증 필요.
- **정책 변화:** Programming & Language 분야의 자동 자산화 수행.
## 🔗 Graph
- 부모: [[Overdraw]] (canonical)
- Adjacent: [[GPU Rendering]] · [[Fillrate]] · [[Z-Prepass]]
## 🔗 지식 연결 (Graph)
- **Related Topics:** [[프래그먼트 셰이딩(Fragment Shading)]], 깊이 정렬(Depth Sorting), Early-Z (초기 깊이 테스트), [[프래그먼트 바운드(Fragment-bound)]]
- **Projects/Contexts:** Three.js InstancedMesh 최적화, 투명도(Transparency) 렌더링 관리
- **Contradictions/Notes:** `InstancedMesh`는 드로우 콜([[Draw Call]])을 획기적으로 줄여 CPU 오버헤드를 감소시키는 최적화 기법으로 알려져 있으나, 자동 정렬 기능이 없어 오히려 막대한 오버드로우를 유발하고 GPU 픽셀 처리 성능을 크게 저하시킬 수 있다는 구조적인 모순(트레이드오프)을 지니고 있다 [1].
---
*Last updated: 2026-04-19*
---
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
**언제 이 지식을 쓰는가:**
- *(TODO)*
**언제 쓰면 안 되는가:**
- *(TODO)*
## 🧪 검증 상태 (Validation)
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
## 🧬 중복 검사 (Duplicate Check)
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
## 🕓 변경 이력 (Changelog)
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
## 💻 코드 패턴 (Code Patterns)
**패턴 1:** *(TODO: 이 프로젝트 컨벤션 반영한 구조 스켈레톤)*
```text
# TODO
```
## 🤔 의사결정 기준 (Decision Criteria)
**선택 A를 써야 할 때:**
- *(TODO)*
**선택 B를 써야 할 때:**
- *(TODO)*
**기본값:**
> *(TODO)*
## ❌ 안티패턴 (Anti-Patterns)
- **[안티패턴]:** *(TODO: 무엇을 하면 안 되는가 + 이유 + 대신 무엇을)*
## 🕓 변경 이력
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | 중복 처리 — canonical 문서로 redirect |