--- id: wiki-2026-0508-bounding-volume-hierarchy-bvh title: Bounding Volume Hierarchy (BVH) category: 10_Wiki/Topics_Art status: needs_review canonical_id: self aliases: [P-REINFORCE-AUTO-68A235] duplicate_of: none source_trust_level: A confidence_score: 0.9 tags: [auto-reinforced] raw_sources: [] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Bounding Volume Hierarchy (BVH)" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Bounding Volume Hierarchy (BVH)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 지식 μš”μ•½ 정보 μΆ”μΆœ 쀑... ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λΉ λ₯Έ λ ˆμ΄μΊμŠ€νŒ…κ³Ό 곡간 쿼리:** `three-mesh-bvh`와 같은 κ΅¬ν˜„μ²΄λŠ” Three.js ν™˜κ²½μ—μ„œ 8만 개 μ΄μƒμ˜ 폴리곀에 λŒ€ν•œ λ ˆμ΄μΊμŠ€νŒ…μ„ 60fps의 μ†λ„λ‘œ μ›ν™œν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€ [4]. μ΄λŠ” λ³΅μž‘ν•œ μ§€μ˜€λ©”νŠΈλ¦¬λ₯Ό κ°€μ§„ μΈν„°λž™ν‹°λΈŒ μ”¬μ΄λ‚˜ λ‹€μˆ˜μ˜ λ ˆμ΄μΊμŠ€νŠΈκ°€ λ°œμƒν•˜λŠ” μƒν™©μ—μ„œ μ„±λŠ₯ μ €ν•˜λ₯Ό λ°©μ§€ν•˜λŠ” κ°•λ ₯ν•œ μˆ˜λ‹¨μž…λ‹ˆλ‹€ [4, 7]. - **효율적인 곡간 λΆ„ν• κ³Ό 포괄적 μ΅œμ ν™”:** 잘 μ„€κ³„λœ BVH μŠ€ν‚€λ§ˆλŠ” 곡간을 효율적으둜 λΆ„ν• ν•˜κ³  μΈλ±μ‹±ν•˜μ—¬, λ Œλ”λ§λΏλ§Œ μ•„λ‹ˆλΌ μ‘°λͺ… 및 그림자 계산, 좩돌 감지(Collisions), 그리고 μ—μ…‹μ˜ λ‹€μš΄λ‘œλ“œμ™€ λ©”λͺ¨λ¦¬ λ‘œλ”© 및 폐기에 이λ₯΄λŠ” μ „λ°©μœ„μ μΈ μ΅œμ ν™”λ₯Ό 주도할 수 μžˆμŠ΅λ‹ˆλ‹€ [3]. 특히 정적인(static) 객체에 λŒ€ν•΄ μ΄ˆκΈ°ν™” μ‹œμ μ— BVHλ₯Ό 계산해두면, CPU μ—°μ‚° λ‹¨κ³„μ—μ„œ ν•΄λ‹Ή 객체듀을 화면에 그릴지(Culling) μ—¬λΆ€λ₯Ό κ·Ήλ„λ‘œ λΉ λ₯΄κ³  효율적으둜 νŒλ³„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6, 8]. - **InstancedMesh ν™˜κ²½μ—μ„œμ˜ 적용:** μΈμŠ€ν„΄μ‹± 기술(예: `InstancedMesh2` 라이브러리)에 BVH ν˜•νƒœμ˜ 곡간 인덱슀λ₯Ό κ²°ν•©ν•˜λ©΄ κ°œλ³„ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ 맀우 λΉ λ₯Έ λ ˆμ΄μΊμŠ€νŒ…κ³Ό ν”„λŸ¬μŠ€ν…€ 컬링을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [5, 9, 10]. κΈ°μ‘΄ `InstancedMesh` μžμ²΄μ— λŒ€ν•΄μ„œλŠ” 전체 μΈμŠ€ν„΄μŠ€ μ„ΈνŠΈκ°€ μ•„λ‹Œ λ‚΄λΆ€μ˜ κ°œλ³„ μ§€μ˜€λ©”νŠΈλ¦¬ λ‹¨μœ„λ‘œ BVH 기반 λ ˆμ΄μΊμŠ€νŒ…μ„ μˆ˜ν–‰ν•˜λ―€λ‘œ, μ§€μ˜€λ©”νŠΈλ¦¬μ— λŒ€ν•œ λ°”μš΄λ“œ 트리(bounds tree)λ₯Ό μƒμ„±ν•˜μ—¬ μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [11, 12]. - **λ„μž… μ‹œμ˜ 기술적 λ‚œμ œμ™€ νŠΈλ ˆμ΄λ“œμ˜€ν”„:** λŒ€κ·œλͺ¨ μΈμŠ€ν„΄μŠ€ μ”¬μ—μ„œ μ—¬λŸ¬ 객체가 겹쳐 μžˆκ±°λ‚˜ κ°€λ €μ§„ 객체λ₯Ό μ •λ°€ν•˜κ²Œ 선택(GPU Picking의 ν•œκ³„ 극볡)ν•˜κΈ° μœ„ν•΄μ„œλŠ” BVH와 같은 μ •κ΅ν•œ 곡간 λΆ„ν•  자료ꡬ쑰λ₯Ό λ³„λ„λ‘œ ꡬ좕해야 ν•©λ‹ˆλ‹€ [2]. ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ κ³ λ„ν™”λœ 자료ꡬ쑰λ₯Ό μΆ”κ°€λ‘œ κ΅¬μΆ•ν•˜λŠ” 과정은 `InstancedMesh`κ°€ 본래 μ œκ³΅ν•˜λŠ” 'μ‚¬μš©μ˜ λ‹¨μˆœν•¨'μ΄λΌλŠ” μž₯점을 ν‡΄μƒ‰μ‹œν‚¬ 수 μžˆλ‹€λŠ” ꡬ쑰적 ν•œκ³„λ₯Ό λ™λ°˜ν•©λ‹ˆλ‹€ [2]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Raycasting]], [[Frustum Culling]], [[InstancedMesh]], [[Spatial Partitioning]] - **Projects/Contexts:** [[three-mesh-bvh]], [[InstancedMesh2]] - **Contradictions/Notes:** BVH λͺ¨λΈμ„ μ”¬μ—μ„œ 직접 μ‹œκ°ν™”ν•˜μ—¬ ν™•μΈν•˜κ³ μž ν•  λ•Œ, μ΅œμ‹  라이브러리 ν™˜κ²½μ—μ„œλŠ” 기쑴에 μ‚¬μš©λ˜λ˜ `MeshBVHVisualizer`κ°€ 더 이상 μ§€μ›λ˜μ§€ μ•ŠμœΌλ―€λ‘œ(deprecated) λ°˜λ“œμ‹œ λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ—¬ `MeshBVHHelper`λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [12]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/Bounding Volume Hierarchy (BVH).md]] --- ## πŸ€– 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: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*