--- id: P-REINFORCE-AUTO-BD8B44 category: "10_Wiki/πŸ’‘ Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Raycasting" --- # [[Raycasting|Raycasting]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Raycasting(λ ˆμ΄μΊμŠ€νŒ…)은 κ°€μƒμ˜ κ΄‘μ„ (Ray)κ³Ό 3D ν™˜κ²½ λ‚΄ 객체듀 κ°„μ˜ ꡐ차점을 κ°μ§€ν•˜λŠ” 계산 κΈ°λ²•μž…λ‹ˆλ‹€ [1, 2]. 3D 씬 λ‚΄μ—μ„œ μ‚¬μš©μžκ°€ 화면을 ν΄λ¦­ν•˜μ—¬ νŠΉμ • 객체λ₯Ό 선택(Picking)ν•˜κ±°λ‚˜ λ“œλž˜κ·Έν•˜λŠ” λ“±μ˜ μ‚¬μš©μž μƒν˜Έμž‘μš©(Interaction)을 κ΅¬ν˜„ν•  λ•Œ ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€ [3-5]. Three.js ν™˜κ²½μ—μ„œλŠ” `THREE.Raycaster` 클래슀λ₯Ό 톡해 이 κΈ°λŠ₯을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [2, 3]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **κΈ°λ³Έ μž‘λ™ 원리** * RaycasterλŠ” μ‹œμž‘μ (주둜 카메라)μ—μ„œ νŠΉμ • λ°©ν–₯으둜 λ¬΄ν•œνžˆ λ»—μ–΄κ°€λŠ” 광선을 μ‚¬μš©ν•©λ‹ˆλ‹€ [2]. 카메라와 ν™”λ©΄ μ’Œν‘œ(마우슀 클릭 μœ„μΉ˜ λ“±)λ₯Ό 기반으둜 광선을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. * `intersectObjects` λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ κ΄‘μ„ κ³Ό κ΅μ°¨ν•˜λŠ” κ°μ²΄λ“€μ˜ 배열을 거리순으둜 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ°˜ν™˜λœ ν•­λͺ©μ—λŠ” ꡐ차된 λŒ€μƒ 객체(`item.object`)와 세계 μ’Œν‘œκ³„ κΈ°μ€€μ˜ μ •ν™•ν•œ ꡐ차 지점(`item.point`) 정보가 ν¬ν•¨λ©λ‹ˆλ‹€ [7-10]. * **μ„±λŠ₯ μ΅œμ ν™” 기법 (BVH λ„μž…)** * λ³΅μž‘ν•œ μ§€μ˜€λ©”νŠΈλ¦¬λ₯Ό μƒλŒ€λ‘œ 반볡적인 λ ˆμ΄μΊμŠ€νŒ…μ„ μˆ˜ν–‰ν•˜λ©΄ μ„±λŠ₯ μ €ν•˜κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. * 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 곡간 λΆ„ν•  ꡬ쑰인 `three-mesh-bvh`(Bounding Volume Hierarchy) 라이브러리λ₯Ό ν™œμš©ν•˜λ©΄, 80,000개 μ΄μƒμ˜ 폴리곀에 λŒ€ν•΄μ„œλ„ 60fps둜 맀우 λΉ λ₯Έ λ ˆμ΄μΊμŠ€νŒ…(Fast Raycasting) 쿼리λ₯Ό μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [11-13]. * **InstancedMesh ν™˜κ²½μ—μ„œμ˜ μ œμ•½ 및 고렀사항** * `InstancedMesh`λŠ” λ„€μ΄ν‹°λΈŒ λ ˆμ΄μΊμŠ€ν„°λ₯Ό μ§€μ›ν•˜μ§€λ§Œ, μ΄ˆκΈ°μ—λŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€ λ©€λ²„μ˜ λͺ¨λ“  μ‚Όκ°ν˜•μ„ 검사해야 ν•˜μ—¬ μ„±λŠ₯상 ν•œκ³„κ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€ [14, 15]. * Three.js r151 버전 μ΄ν›„λΆ€ν„°λŠ” λ°”μš΄λ”© λ³Όλ₯¨(Bounding Volume)을 ν†΅ν•œ λΉ λ₯Έ μ‘°κΈ° μ’…λ£Œ(Early-out) ν…ŒμŠ€νŠΈλ₯Ό μ§€μ›ν•˜μ—¬ 속도가 κ°œμ„ λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [16, 17]. κ·ΈλŸ¬λ‚˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ΄λ™μ‹œν‚€λŠ” λ“± λ³€ν™˜μ΄ λ°œμƒν•œ ν›„μ—λŠ” λ°˜λ“œμ‹œ `computeBoundingSphere()`와 `computeBoundingBox()`λ₯Ό μˆ˜λ™μœΌλ‘œ μž¬κ³„μ‚°ν•΄μ£Όμ–΄μ•Ό λ ˆμ΄μΊμŠ€νŒ…μ΄ 정상 μž‘λ™ν•©λ‹ˆλ‹€ [16, 18]. * 일뢀 μ»€μŠ€ν…€ κ΅¬ν˜„(예: A-Frame용 μ»΄ν¬λ„ŒνŠΈ)μ—μ„œλŠ” μœ μ—°μ„±κ³Ό μ„±λŠ₯ 확보λ₯Ό μœ„ν•΄ `InstancedMesh` μžμ²΄μ— λŒ€ν•œ 직접적인 λ ˆμ΄μΊμŠ€νŒ… λŒ€μ‹ , λ™μΌν•œ ν˜•νƒœμ˜ 보이지 μ•ŠλŠ” λ©”μ‹œ(Invisible Mesh)λ₯Ό λ©€λ²„λ³„λ‘œ μƒμ„±ν•˜μ—¬ λ ˆμ΄μΊμŠ€νŒ…μ˜ νƒ€κ²ŸμœΌλ‘œ μ‚ΌλŠ” μš°νšŒλ²•μ„ μ‚¬μš©ν•˜κΈ°λ„ ν•©λ‹ˆλ‹€ [15, 19, 20]. * **셰이더 μ• λ‹ˆλ©”μ΄μ…˜κ³Όμ˜ 좩돌** * μ• λ‹ˆλ©”μ΄μ…˜κ³Ό μœ„μΉ˜ λ³€ν™˜μ΄ CPUλ₯Ό κ±°μΉ˜μ§€ μ•Šκ³  GPU 셰이더 λ‚΄λΆ€μ—μ„œ λ…μžμ μœΌλ‘œ κ³„μ‚°λ˜λŠ” 경우, CPUλŠ” 객체의 μ΅œμ’… λ³€ν™˜ μƒνƒœλ₯Ό μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€. 이둜 인해 CPU 기반의 λ ˆμ΄μΊμŠ€νŒ… 연산이 λΆˆκ°€λŠ₯ν•΄μ§€κ±°λ‚˜ μ˜€μž‘λ™ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [14, 21]. * **λŒ€μ•ˆ 기술 (GPU Picking)** * λ³΅μž‘ν•œ 연산이 ν•„μš”ν•œ λ ˆμ΄μΊμŠ€νŒ…μ˜ λŒ€μ•ˆμœΌλ‘œ, 객체의 고유 IDλ₯Ό μƒ‰μƒμœΌλ‘œ ν™”λ©΄ λ°–(Off-screen) ν”½μ…€ 버퍼에 κ·Έλ¦° λ’€ λ Œλ”λ§λœ ν”½μ…€ 색상을 읽어 객체λ₯Ό μ‹λ³„ν•˜λŠ” 'GPU ν”Όν‚Ή(Color-based Picking)' κΈ°μˆ λ„ μ‘΄μž¬ν•©λ‹ˆλ‹€ [22, 23]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** THREE.Raycaster, [[Bounding Volume Hierarchy (BVH)|Bounding Volume Hierarchy (BVH)]], [[InstancedMesh|InstancedMesh]], GPU Picking - **Projects/Contexts:** 3D μ‚¬μš©μž μƒν˜Έμž‘μš© 및 마우슀 ν”Όν‚Ή (Picking) κ΅¬ν˜„, [[three-mesh-bvh|three-mesh-bvh]] 라이브러리 연동 - **Contradictions/Notes:** `InstancedMesh`λ₯Ό μ‚¬μš©ν•  λ•Œ GPU μ„±λŠ₯ 이점은 ν¬μ§€λ§Œ, 각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ CPU 기반 λ ˆμ΄μΊμŠ€νŒ…μ„ μ²˜λ¦¬ν•˜κ±°λ‚˜ κ°œλ³„ 정밀도λ₯Ό μ‘°μž‘ν•˜λŠ” λ°λŠ” μœ μ—°μ„±μ΄ λ–¨μ–΄μ§‘λ‹ˆλ‹€ [15]. λ˜ν•œ μ…°μ΄λ”λ‘œ μ§€μ˜€λ©”νŠΈλ¦¬λ₯Ό λ³€κ²½ν•˜λ©΄ CPU λ ˆμ΄μΊμŠ€νŒ…κ³Ό 데이터 λΆˆμΌμΉ˜κ°€ λ°œμƒν•˜λ―€λ‘œ 섀계 μ‹œ μ£Όμ˜κ°€ ν•„μš”ν•©λ‹ˆλ‹€ [21]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Raycasting.md ---