--- id: wiki-2026-0508-raycaster title: Raycaster category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-D7A57A] 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 - Raycaster" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) --- # [[Raycaster|Raycaster]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > Raycaster(λ ˆμ΄μΊμŠ€ν„°)λŠ” κ°€μƒμ˜ κ΄‘μ„ (Ray)κ³Ό 3D μž₯λ©΄ λ‚΄ 객체 κ°„μ˜ ꡐ차점을 κ³„μ‚°ν•˜μ—¬ μΆ©λŒμ„ κ°μ§€ν•˜λŠ” κΈ°λ²•μ΄μž Three.js의 핡심 클래슀(`THREE.Raycaster`)μž…λ‹ˆλ‹€ [1-3]. 주둜 마우슀 클릭과 같은 μ‚¬μš©μž μƒν˜Έμž‘μš©(였브젝트 ν”Όν‚Ή)을 κ΅¬ν˜„ν•˜μ—¬ 카메라 μ‹œμ μ΄λ‚˜ νŠΉμ • μœ„μΉ˜μ—μ„œ μ–΄λ–€ 객체가 μ„ νƒλ˜μ—ˆλŠ”μ§€ νŒλ³„ν•˜λŠ” 데 ν•„μˆ˜μ μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€ [4-6]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ™μž‘ 원리 및 μ‚¬μš©λ²•:** RaycasterλŠ” μ‹œμž‘μ κ³Ό λ°©ν–₯을 λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•˜κ±°λ‚˜(`raycaster.set`), ν™”λ©΄μ˜ ν”½μ…€ μ’Œν‘œμ™€ 카메라λ₯Ό κΈ°μ€€μœΌλ‘œ 광선을 μ„€μ •(`raycaster.setFromCamera`)ν•˜μ—¬ μž‘λ™ν•©λ‹ˆλ‹€ [3, 5]. 이후 `intersectObjects` λ©”μ„œλ“œλ₯Ό 톡해 κ΄‘μ„ κ³Ό κ΅μ°¨ν•˜λŠ” λŒ€μƒλ“€μ„ 거리가 κ°€κΉŒμš΄ μˆœμ„œλŒ€λ‘œ μ •λ ¬λœ λ°°μ—΄ ν˜•νƒœλ‘œ λ°˜ν™˜λ°›μ„ 수 있으며, λ°˜ν™˜λœ λ°μ΄ν„°μ—λŠ” κ΅μ°¨ν•œ 객체(`.object`)와 μ›”λ“œ μ’Œν‘œκ³„ κΈ°μ€€μ˜ ꡐ차점(`.point`) 정보가 ν¬ν•¨λ©λ‹ˆλ‹€ [6, 7]. - **[[InstancedMesh|InstancedMesh]] 적용 μ‹œμ˜ ν•œκ³„μ™€ 병λͺ©:** 일반적인 λ©”μ‰¬μ˜ λ ˆμ΄μΊμŠ€νŒ…μ€ CPU λ‹¨μ—μ„œ μˆ˜ν–‰λ˜λŠ”λ°, `InstancedMesh`의 경우 μˆ˜λ§Žμ€ μΈμŠ€ν„΄μŠ€μ˜ λ³€ν™˜ 행렬을 CPUκ°€ κ°œλ³„μ μœΌλ‘œ μ—­μ‚°ν•˜μ—¬ ꡐ차 μ—¬λΆ€λ₯Ό νŒλ³„ν•΄μ•Ό ν•˜λ―€λ‘œ μΈμŠ€ν„΄μŠ€ μˆ˜μ— λΉ„λ‘€ν•˜μ—¬ λ§‰λŒ€ν•œ μ—°μ‚° 병λͺ©μ΄ λ°œμƒν•©λ‹ˆλ‹€ [8]. 특히 μ• λ‹ˆλ©”μ΄μ…˜μ΄λ‚˜ κΈ°ν•˜ν•™μ  λ³€ν™˜μ΄ GPU 셰이더 λ‚΄μ—μ„œλ§Œ μ—°μ‚°λœ 경우, CPU λ ˆμ΄μΊμŠ€ν„°λŠ” λ³€ν™˜λœ μœ„μΉ˜λ₯Ό μ•Œμ§€ λͺ»ν•΄ 객체의 초기 μœ„μΉ˜λ§Œ κ²€μ‚¬ν•˜κ²Œ 되며 μ΄λŠ” ν”Όν‚Ή λΆˆκ°€λŠ₯ μƒνƒœμΈ '데이터 뢈일치'λ₯Ό μœ λ°œν•©λ‹ˆλ‹€ [8, 9]. - **μΈμŠ€ν„΄μŠ€ λ³€ν™˜ μ‹œ λ°”μš΄λ”© λ³Όλ₯¨ μ—…λ°μ΄νŠΈ:** Three.js r151 버전 이후뢀터 `InstancedMesh`λŠ” λ°”μš΄λ”© λ³Όλ₯¨ 연산을 μ§€μ›ν•©λ‹ˆλ‹€ [10]. λŸ°νƒ€μž„μ— μΈμŠ€ν„΄μŠ€μ˜ μœ„μΉ˜λ‚˜ ν˜•νƒœλ₯Ό λ³€ν™˜ν•œ ν›„ λ ˆμ΄μΊμŠ€νŒ…μ΄ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜κ²Œ ν•˜λ €λ©΄, `computeBoundingSphere()` 및 `computeBoundingBox()`λ₯Ό λ°˜λ“œμ‹œ ν˜ΈμΆœν•΄μ•Ό ν•©λ‹ˆλ‹€ [10-12]. λ ˆμ΄μΊμŠ€ν„°κ°€ μ—°μ‚° μ΅œμ ν™”λ₯Ό μœ„ν•΄ λ°”μš΄λ”© λ³Όλ₯¨μ„ μ΄μš©ν•œ λΉ λ₯Έ 사전 ν…ŒμŠ€νŠΈ(early-out [[Testing|Testing]])λ₯Ό 거치기 λ•Œλ¬Έμž…λ‹ˆλ‹€ [12]. - **μ„±λŠ₯ μ΅œμ ν™” (BVH λ„μž…):** 80,000개 μ΄μƒμ˜ λ‹€κ°ν˜•μ„ κ°–λŠ” λ³΅μž‘ν•œ μž₯λ©΄μ΄λ‚˜ μž¦μ€ λ ˆμ΄μΊμŠ€νŒ…μ΄ ν•„μš”ν•œ ν™˜κ²½μ—μ„œλŠ” κΈ°λ³Έ Raycasterλ§ŒμœΌλ‘œλŠ” μ„±λŠ₯을 보μž₯ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€ [13, 14]. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 곡간 λΆ„ν•  트리 μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•œ `[[three-mesh-bvh|three-mesh-bvh]]` 라이브러리λ₯Ό μ‚¬μš©ν•˜λ©΄ λ ˆμ΄μΊμŠ€νŒ… 속도λ₯Ό λΉ„μ•½μ μœΌλ‘œ ν–₯μƒμ‹œν‚¬ 수 있으며, ν™•μž₯ 라이브러리인 `[[InstancedMesh2|InstancedMesh2]]`도 λΉ λ₯Έ λ ˆμ΄μΊμŠ€νŒ…μ„ μœ„ν•΄ BVHλ₯Ό 적극적으둜 ν™œμš©ν•©λ‹ˆλ‹€ [13, 15-17]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** Three.js, [[InstancedMesh|InstancedMesh]], [[three-mesh-bvh|three-mesh-bvh]], Bounding Volume - **Projects/Contexts:** 3D Object Picking, Interaction in [[WebGL|WebGL]] - **Contradictions/Notes:** μ†ŒμŠ€μ— λ”°λ₯΄λ©΄ λ ˆμ΄μΊμŠ€νŒ…μ€ CPU 기반 μ—°μ‚°μ΄λ―€λ‘œ, GPU 셰이더([[Compute Shader|Compute Shader]] λ“±)λ₯Ό 톡해 λ™μ μœΌλ‘œ μ• λ‹ˆλ©”μ΄μ…˜ 처리된 κΈ°ν•˜ν•™μ  ꡬ쑰에 λŒ€ν•΄μ„œλŠ” CPUκ°€ λ³€ν™˜μ„ μ•Œμ§€ λͺ»ν•΄ κΈ°λ³Έ λ ˆμ΄μΊμŠ€ν„°λ‘œ μ˜¬λ°”λ₯Έ 피킹을 μˆ˜ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€ [8, 9]. --- *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 |