--- id: P-REINFORCE-AUTO-8CE1CE category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - μ˜€λ²„λ“œλ‘œμš°(Overdraw)" --- # [[μ˜€λ²„λ“œλ‘œμš°(Overdraw)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > μ˜€λ²„λ“œλ‘œμš°(Overdraw)λŠ” λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈμ˜ ν”„λž˜κ·Έλ¨ΌνŠΈ 셰이딩(Fragment Shading) λ‹¨κ³„μ—μ„œ λ™μΌν•œ ν”½μ…€ μœ„μΉ˜μ— λŒ€ν•΄ μ—¬λŸ¬ 번의 μ“°κΈ° μž‘μ—…μ΄ μ€‘μ²©λ˜μ–΄ λ°œμƒν•˜λŠ” ν˜„μƒμ΄λ‹€ [1]. 주둜 겹쳐진 투λͺ…ν•œ κΈ°ν•˜κ΅¬μ‘°λ‚˜ λΉ„νš¨μœ¨μ μΈ 깊이 μ •λ ¬(Depth Sorting)둜 인해 보이지 μ•ŠλŠ” ν”½μ…€ 연산에 GPU μžμ›μ„ λ‚­λΉ„ν•˜κ²Œ λ§Œλ“ λ‹€ [2]. μ΄λŠ” 결과적으둜 λΆˆν•„μš”ν•œ GPU ν”½μ…€ 처리 λΉ„μš©μ„ μœ λ°œν•˜μ—¬ μ‹¬κ°ν•œ ν”„λ ˆμž„ 속도 μ €ν•˜ 및 μ„±λŠ₯ 병λͺ©μ„ μ΄ˆλž˜ν•œλ‹€ [1, 3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (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]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (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* - Raw Source: [[00_Raw/2026-04-20/μ˜€λ²„λ“œλ‘œμš°(Overdraw).md]] ---