--- id: P-REINFORCE-AUTO-F5A361 category: "10_Wiki/πŸ’‘ Topics/AI" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - InstancedMesh2 library" --- # [[InstancedMesh2 library|InstancedMesh2 library]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > InstancedMesh2λŠ” Three.js의 곡식 InstancedMeshκ°€ κ°€μ§„ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³  λŒ€κ·œλͺ¨ 객체 λ Œλ”λ§μ„ μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ agargaroκ°€ κ°œλ°œν•œ μ˜€ν”ˆ μ†ŒμŠ€ ν™•μž₯ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. 이 λΌμ΄λΈŒλŸ¬λ¦¬λŠ” κ°œλ³„ μΈμŠ€ν„΄μŠ€ λ‹¨μœ„μ˜ μ ˆλ‘μ²΄ 컬링(Frustum culling), μ •λ ¬(Sorting), κ°€μ‹œμ„± 관리(Visibility management), LOD(Level of Detail), BVHλ₯Ό ν™œμš©ν•œ λΉ λ₯Έ λ ˆμ΄μΊμŠ€νŒ… 및 μŠ€ν‚€λ‹(Skinning) κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€ [1-3]. 특히 수만 개의 μŠ€ν‚¨λ“œ λ©”μ‹œλ‚˜ κ°œλ³„ μ• λ‹ˆλ©”μ΄μ…˜μ„ κ°€μ§„ 객체듀을 μ΅œμ†Œν•œμ˜ λ“œλ‘œμš° 콜둜 λ Œλ”λ§ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ–΄ 높은 ν”„λ ˆμž„ 레이트 μœ μ§€λ₯Ό λ•μŠ΅λ‹ˆλ‹€ [1, 4, 5]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) * **효율적인 데이터 ꡬ쑰와 μ°Έμ‘° 방식 (Indirection):** InstancedMesh2λŠ” λ Œλ”λ§ν•  μΈμŠ€ν„΄μŠ€ 인덱슀λ₯Ό κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ `InstancedBufferAttribute`λ₯Ό ν†΅ν•œ κ°„μ ‘ μ°Έμ‘°(Indirection) 방식을 μ‚¬μš©ν•©λ‹ˆλ‹€ [6]. 이λ₯Ό 톡해 GPU둜 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μ „ 속성 버퍼 전체λ₯Ό μž¬μ •λ ¬ν•  ν•„μš” 없이, 선택적 λ Œλ”λ§κ³Ό 효율적인 컬링 및 정렬을 μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [6]. * **데이터 ν…μŠ€μ²˜μ™€ 객체 핸듀링 κ°œμ„ :** μΈμŠ€ν„΄μŠ€ λ³€ν™˜ ν–‰λ ¬κ³Ό 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ λΆ€λΆ„ μ—…λ°μ΄νŠΈ(Partial updates)λ₯Ό μ§€μ›ν•˜λŠ” `SquareDataTexture`λ₯Ό ν™œμš©ν•©λ‹ˆλ‹€ [1, 6]. λ˜ν•œ 전체 μΈμŠ€ν„΄μŠ€ κ°œμˆ˜μ— 맞좰 `Object3D`와 μœ μ‚¬ν•œ ν”„λ‘μ‹œ 객체λ₯Ό μƒμ„±ν•˜λ―€λ‘œ, μ‚¬μš©μžκ°€ λ°°μ—΄μ—μ„œ 직접 행렬을 μΆ”μΆœν•˜μ§€ μ•Šκ³ λ„ μœ„μΉ˜, νšŒμ „, 크기 λ“±μ˜ 연산을 μ‰½κ²Œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [7]. 객체λ₯Ό 숨길 λ•Œ(κ°€μ‹œμ„± 관리)λŠ” μΊμ‹œ 미슀(Cache miss)λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ ν•΄λ‹Ή 행렬을 λ°°μ—΄μ˜ 끝으둜 μ΄λ™μ‹œν‚€λŠ” 방식을 μ μš©ν•©λ‹ˆλ‹€ [7]. * **μŠ€ν‚€λ‹(Skinning) 및 μ• λ‹ˆλ©”μ΄μ…˜ μ΅œμ ν™”:** 각각의 μΈμŠ€ν„΄μŠ€κ°€ μ„œλ‘œ λ‹€λ₯Έ μ• λ‹ˆλ©”μ΄μ…˜κ³Ό 포즈λ₯Ό κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€ [8]. 카메라 μ ˆλ‘μ²΄ 내에 μœ„μΉ˜ν•œ μΈμŠ€ν„΄μŠ€μ˜ λΌˆλŒ€(Bones)만 μ—…λ°μ΄νŠΈν•˜λ©°, μΉ΄λ©”λΌμ™€μ˜ 거리에 따라 각 μΈμŠ€ν„΄μŠ€μ˜ μ• λ‹ˆλ©”μ΄μ…˜ FPS(0~60)λ₯Ό μ‘°μ ˆν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1]. λ˜ν•œ λ¨Ό 거리에 μžˆλŠ” μΈμŠ€ν„΄μŠ€λŠ” λΆˆν•„μš”ν•œ λΌˆλŒ€ 계산을 μƒλž΅ν•˜κ³  ν…μŠ€μ²˜ μ—…λ°μ΄νŠΈμ˜ λ Œλ”λ§ λΆ€ν•˜λ₯Ό 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€ [1]. * **LOD 및 λ ˆμ΄μΊμŠ€νŒ… 연동:** `meshoptimizer`와 μ—°κ³„ν•˜μ—¬ μ§€μ˜€λ©”νŠΈλ¦¬ LODλ₯Ό κ΄€λ¦¬ν•˜λ©°, κ·Έλ¦Όμžμ— λŒ€ν•œ LOD μ œμ–΄λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€ [1, 9]. λ˜ν•œ Three.js μƒνƒœκ³„μ˜ `three-mesh-bvh`λ₯Ό ν†΅ν•©ν•˜μ—¬ μˆ˜λ§Žμ€ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•΄μ„œλ„ λΉ λ₯΄κ³  μ •ν™•ν•œ 곡간 인덱슀(Spatial index) 기반 λ ˆμ΄μΊμŠ€νŒ…κ³Ό μ ˆλ‘μ²΄ 컬링을 μ§€μ›ν•©λ‹ˆλ‹€ [2, 10]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** AI λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[InstancedMesh|InstancedMesh]], [[Frustum Culling|Frustum Culling]], [[Level of Detail (LOD)|Level of Detail (LOD)]], [[SkinnedMesh|Skinned Mesh]], BVH (Bounding Volume Hierarchy) - **Projects/Contexts:** [[Three.js|Three.js]] - **Contradictions/Notes:** 라이브러리 λ‚΄μ—μ„œ μ§€μ›ν•˜λŠ” `SquareDataTexture`의 λΌˆλŒ€ ν…μŠ€μ²˜ λΆ€λΆ„ μ—…λ°μ΄νŠΈ(Partial texture updates) κΈ°λŠ₯은 λͺ¨λ°”일 κΈ°κΈ° 및 Mozilla Firefox λΈŒλΌμš°μ € ν™˜κ²½μ—μ„œ 속도가 느리게 μž‘λ™ν•  수 μžˆμ–΄, νŠΉμ • ν•˜λ“œμ›¨μ–΄λ‚˜ λΈŒλΌμš°μ €μ—μ„œλŠ” 이λ₯Ό λΉ„ν™œμ„±ν™”(λ˜λŠ” 이쀑 버퍼링 κ΅¬ν˜„ ν•„μš”)ν•΄μ•Ό μ„±λŠ₯을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [1, 11]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/InstancedMesh2 library.md ---