--- id: [[P-Reinforce|P-Reinforce]]-AUTO-354B99 category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - InstancedMesh" --- # [[InstancedMesh|InstancedMesh]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > InstancedMeshλŠ” λ™μΌν•œ κΈ°ν•˜ν•™μ  ꡬ쑰(Geometry)와 재질(Material)을 κ³΅μœ ν•˜λŠ” μˆ˜λ§Žμ€ 객체λ₯Ό 단 ν•œ 번의 λ“œλ‘œμš° 콜([[Draw Call|Draw Call]])둜 λ Œλ”λ§ν•  수 있게 ν•΄μ£ΌλŠ” 특수 메쉬이닀 [1, 2]. 각 μΈμŠ€ν„΄μŠ€λŠ” κ³ μœ ν•œ λ³€ν™˜ ν–‰λ ¬(μœ„μΉ˜, νšŒμ „, μΆ•μ²™)κ³Ό 색상을 κ°€μ§ˆ 수 있으며, 이λ₯Ό 톡해 CPU μ˜€λ²„ν—€λ“œλ₯Ό 획기적으둜 쀄이고 λ Œλ”λ§ μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨λ‹€ [2-4]. λ‚˜λ¬΄, ν’€, λ°”μœ„μ™€ 같이 ν˜•νƒœκ°€ λ™μΌν•œ λŒ€κ·œλͺ¨ 객체 ꡰ집을 λ Œλ”λ§ν•  λ•Œ 주둜 μ‚¬μš©λ˜λ©°, λ©”λͺ¨λ¦¬ μ†ŒλΉ„λ„ μ΅œμ†Œν™”ν•  수 μžˆλŠ” κ°•λ ₯ν•œ μ΅œμ ν™” 도ꡬ이닀 [5-7]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **μž‘λ™ 원리 및 μ„±λŠ₯ 이점:** InstancedMeshλŠ” GPU λ©”λͺ¨λ¦¬μ— 단 ν•˜λ‚˜μ˜ 정점 버퍼(Vertex Buffer)λ₯Ό μ—…λ‘œλ“œν•˜κ³ , 각 μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ 적용될 λ³€ν™˜ ν–‰λ ¬(Transformation Matrix)을 `instanceMatrix` μ†μ„±μœΌλ‘œ μ „λ‹¬ν•˜μ—¬ λ Œλ”λ§μ„ μˆ˜ν–‰ν•œλ‹€ [3, 8]. 이 방식을 μ‚¬μš©ν•˜λ©΄ μˆ˜λ§Žμ€ 객체λ₯Ό κ°œλ³„μ μœΌλ‘œ 그릴 λ•Œ λ°œμƒν•˜λŠ” μ—„μ²­λ‚œ 횟수의 λ“œλ‘œμš° μ½œμ„ 단 1회둜 묢을 수 μžˆμ–΄, CPU 병λͺ© ν˜„μƒκ³Ό CPU-GPU κ°„ 톡신 μ˜€λ²„ν—€λ“œλ₯Ό 크게 ν•΄μ†Œν•œλ‹€ [1, 5, 9]. κΈ°ν•˜ν•™μ  데이터λ₯Ό λ³΅μ œν•˜μ§€ μ•Šκ³  κ³΅μœ ν•˜λ―€λ‘œ λ©”λͺ¨λ¦¬ νš¨μœ¨μ„± μ—­μ‹œ 맀우 λ›°μ–΄λ‚˜λ‹€ [6, 9]. * **ꡬ쑰적 ν•œκ³„ 및 병λͺ© ν˜„μƒ:** * **μ§€μ˜€λ©”νŠΈλ¦¬ 및 재질의 단일성 μ œμ•½:** λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ λ°˜λ“œμ‹œ λ™μΌν•œ [[BufferGeometry|BufferGeometry]]와 Material을 κ³΅μœ ν•΄μ•Ό ν•œλ‹€ [10, 11]. μ—¬λŸ¬ μ’…λ₯˜μ˜ μ§€μ˜€λ©”νŠΈλ¦¬λ₯Ό λ Œλ”λ§ν•΄μ•Ό ν•œλ‹€λ©΄ λ‹€μˆ˜μ˜ InstancedMeshλ₯Ό μƒμ„±ν•˜κ±°λ‚˜, μ„œλ‘œ λ‹€λ₯Έ μ§€μ˜€λ©”νŠΈλ¦¬λ₯Ό 묢을 수 μžˆλŠ” BatchedMeshλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€ [11-13]. * **μ‹œμ•Ό μ ˆλ‘μ²΄ 컬링([[Frustum Culling|Frustum Culling]]) λΉ„νš¨μœ¨μ„±:** 기본적으둜 μ—”μ§„ μˆ˜μ€€μ—μ„œ InstancedMesh 전체λ₯Ό ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ 단일 객체(λ°”μš΄λ”© λ³Όλ₯¨)둜 μ·¨κΈ‰ν•˜κΈ° λ•Œλ¬Έμ—, μΈμŠ€ν„΄μŠ€ κ°œλ³„ λ‹¨μœ„μ˜ μ‹œμ•Ό μ ˆλ‘μ²΄ 컬링이 μž‘λ™ν•˜μ§€ μ•ŠλŠ”λ‹€ [14, 15]. λ”°λΌμ„œ 단 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œ μ‹œμ•Όμ— μžˆμ–΄λ„ ν™”λ©΄ λ°–μ˜ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ 정점 연산을 GPUκ°€ κ°•μ œλ‘œ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” λ‚­λΉ„κ°€ λ°œμƒν•œλ‹€ [15, 16]. * **μ˜€λ²„λ“œλ‘œμš°([[Overdraw|Overdraw]]) 및 μ •λ ¬ λΆ€μž¬:** μΈμŠ€ν„΄μŠ€λ“€μ€ 버퍼에 μ €μž₯된 μˆœμ„œλŒ€λ‘œ λ Œλ”λ§λ˜λ©° μΉ΄λ©”λΌμ™€μ˜ 거리에 λ”°λ₯Έ μžλ™ 깊이 정렬을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€ [17, 18]. 이둜 인해 투λͺ…ν•œ 객체 λ Œλ”λ§ μ‹œ μ•ŒνŒŒ λΈ”λ Œλ”© 였λ₯˜κ°€ λ°œμƒν•˜κ±°λ‚˜, 뢈투λͺ… 객체의 μ‹¬κ°ν•œ μ˜€λ²„λ“œλ‘œμš°λ₯Ό μœ λ°œν•΄ ν”„λž˜κ·Έλ¨ΌνŠΈ 셰이더 μ—°μ‚° λΆ€ν•˜κ°€ 급증할 수 μžˆλ‹€ [17, 19-21]. * **μƒν˜Έμž‘μš© 및 μ• λ‹ˆλ©”μ΄μ…˜ λ‚œμ œ:** κ°œλ³„ 객체에 λŒ€ν•œ λ ˆμ΄μΊμŠ€νŒ…([[Raycasting|Raycasting]]) μ‹œ CPUκ°€ 각 μΈμŠ€ν„΄μŠ€μ˜ λ³€ν™˜ 행렬을 κ°œλ³„ 계산해야 ν•˜λ―€λ‘œ λŒ€κ·œλͺ¨ μ”¬μ—μ„œλŠ” 동기화 병λͺ©μ΄ λ°œμƒν•  수 μžˆλ‹€ [22]. λ˜ν•œ λ³Έ(Bone) 기반의 μŠ€ν‚¨λ“œ μ• λ‹ˆλ©”μ΄μ…˜(Skinned Mesh)을 기본적으둜 μ§€μ›ν•˜μ§€ μ•Šμ•„ ꡰ쀑 μ• λ‹ˆλ©”μ΄μ…˜ 등을 κ΅¬ν˜„ν•˜λ €λ©΄ λ³΅μž‘ν•œ μ»€μŠ€ν…€ νŒŒμ΄ν”„λΌμΈμ΄ μš”κ΅¬λœλ‹€ [23]. * **ν™œμš© 및 μ œμ–΄:** κ°œλ³„ μΈμŠ€ν„΄μŠ€μ˜ 속성은 `setMatrixAt`, `setColorAt` λ“±μ˜ λ©”μ„œλ“œλ₯Ό 톡해 μ œμ–΄ν•˜λ©°, 값을 λ³€κ²½ν•œ ν›„μ—λŠ” λ°˜λ“œμ‹œ ν•΄λ‹Ή 속성(`instanceMatrix`, `instanceColor` λ“±)의 `needsUpdate` ν”Œλž˜κ·Έλ₯Ό `true`둜 μ„€μ •ν•΄μ•Ό λ Œλ”λ§μ— λ°˜μ˜λœλ‹€ [24]. μœ„μ—μ„œ μ–ΈκΈ‰ν•œ κ°œλ³„ μ»¬λ§μ΄λ‚˜ μ •λ ¬ 문제λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ `[[InstancedMesh2|InstancedMesh2]]` 같은 ν™•μž₯ 라이브러리λ₯Ό μ‚¬μš©ν•˜κ±°λ‚˜ BVH(Bounding Volume Hierarchy)λ₯Ό ν†΅ν•œ 곡간 λΆ„ν•  기법을 λ„μž…ν•˜κΈ°λ„ ν•œλ‹€ [25-27]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Draw Call|Draw Call]], BatchedMesh, Frustum Culling, BufferGeometry, [[Overdraw|Overdraw]] - **Projects/Contexts:** Three.js, [[WebGL|WebGL]], [[InstancedMesh2|InstancedMesh2]] - **Contradictions/Notes:** InstancedMeshλŠ” λ“œλ‘œμš° 콜 횟수λ₯Ό 쀄여 μ „λ°˜μ μΈ μ„±λŠ₯을 높이기 μœ„ν•΄ μ‚¬μš©λ˜μ§€λ§Œ, μžλ™ μ •λ ¬μ˜ λΆ€μž¬ 및 κ°œλ³„ μΈμŠ€ν„΄μŠ€ 컬링 λΆˆκ°€ 문제둜 인해 κ·Ήμ‹¬ν•œ μ˜€λ²„λ“œλ‘œμš°κ°€ λ°œμƒν•  경우, 일반적인 Mesh(곡유 속성 ν™œμš©)λ₯Ό μ‚¬μš©ν•  λ•Œλ³΄λ‹€ 였히렀 ν”„λ ˆμž„ 레이트(FPS)κ°€ κΈ‰κ²©νžˆ μ €ν•˜λ˜λŠ” 역섀적인 병λͺ© ν˜„μƒμ΄ λ°œμƒν•  수 μžˆλ‹€κ³  μ—¬λŸ¬ μ†ŒμŠ€μ—μ„œ κ²½κ³ ν•œλ‹€ [15, 17, 28, 29]. --- *Last updated: 2026-04-19* ---