--- id: P-REINFORCE-AUTO-0E2591 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - InstancedMesh2" --- # [[InstancedMesh2|InstancedMesh2]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > InstancedMesh2๋Š” Three.js์˜ ๊ธฐ๋ณธ `InstancedMesh`๋ฅผ ํ™•์žฅํ•˜์—ฌ ์„ฑ๋Šฅ๊ณผ ๊ธฐ๋Šฅ์„ ๋Œ€ํญ ๊ฐ•ํ™”ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค [1-3]. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum culling), ๊ณต๊ฐ„ ์ธ๋ฑ์Šค(BVH)๋ฅผ ์ด์šฉํ•œ ๋น ๋ฅธ ๋ ˆ์ด์บ์ŠคํŒ…, ์ •๋ ฌ(Sorting), ๊ฐœ๋ณ„ ๊ฐ€์‹œ์„ฑ ๊ด€๋ฆฌ ๋ฐ LOD ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [2-5]. ํŠนํžˆ ๊ธฐ์กด ์ธ์Šคํ„ด์‹ฑ ๊ธฐ์ˆ ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๊นŒ๋‹ค๋กœ์› ๋˜ ๊ฐœ๋ณ„ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง„ ์Šคํ‚จ๋“œ ๋ฉ”์‰ฌ(Skinned Mesh)์˜ ์ธ์Šคํ„ด์‹ฑ์„ ์ง€์›ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ 3D ํ™˜๊ฒฝ์„ ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋œ๋‹ค [1, 3, 6]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๋ฐ ์ตœ์ ํ™” ๊ธฐ๋ฒ•** * **์ธ์Šคํ„ด์Šค๋ณ„ ์ ˆ๋‘์ฒด ์ปฌ๋ง ๋ฐ ๊ฐ€์‹œ์„ฑ ์ œ์–ด:** ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค ๋‹จ์œ„๋กœ ๊ฐ€์‹œ์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ ˆ๋‘์ฒด ์ปฌ๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [2, 3, 5]. ์ด๋ฅผ ํ†ตํ•ด ์นด๋ฉ”๋ผ ๋ทฐ ๋‚ด๋ถ€์— ์กด์žฌํ•˜๋Š” ์ธ์Šคํ„ด์Šค์˜ ๋ผˆ๋Œ€(Bone) ๊ณ„์‚ฐ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๋“ฑ ์—ฐ์‚ฐ์„ ๊ทน๋„๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `onFrustumEnter`๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์Šคํ„ด์Šค ๋ Œ๋”๋ง ์—ฌ๋ถ€๋ฅผ ์ •๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค [1, 7]. * **BVH ๊ธฐ๋ฐ˜ ๋น ๋ฅธ ๋ ˆ์ด์บ์ŠคํŒ…:** `three-mesh-bvh` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค๊ณ„์— ์ฐฉ์•ˆํ•œ ๊ณต๊ฐ„ ์ธ๋ฑ์Šค(Spatial index)๋ฅผ ํฌํ•จํ•˜์—ฌ, ์ˆ˜๋งŽ์€ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐฐ์น˜๋œ ํ™˜๊ฒฝ์—์„œ๋„ ๋น ๋ฅธ ๋ ˆ์ด์บ์ŠคํŒ…๊ณผ ์ปฌ๋ง์„ ์ง€์›ํ•œ๋‹ค [3-5, 8]. * **LOD ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜(Skinning) ์ตœ์ ํ™”:** ๊ฐ์ฒด์˜ ๊ฑฐ๋ฆฌ(LOD)์— ๋”ฐ๋ผ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ(Geometry)๋ฟ ์•„๋‹ˆ๋ผ ๋ผˆ๋Œ€(Bones) ์—ฐ์‚ฐ๊นŒ์ง€ ์ถ•์†Œํ•˜๊ณ , ๊ฑฐ๋ฆฌ์— ๋น„๋ก€ํ•˜์—ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜ FPS๋ฅผ 0์—์„œ 60๊นŒ์ง€ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค [1, 6, 9, 10]. ์ด๋ฅผ ํ†ตํ•ด ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ๋„ 2๋งŒ ๊ฐœ ์ด์ƒ์˜ ์Šคํ‚จ๋“œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฌด๋ฆฌ ์—†์ด ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค [1]. * **์ •๋ ฌ(Sorting):** ๋ Œ๋”๋ง ์‹œ ํˆฌ๋ช…๋„ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ๋‚ด๋ถ€์ ์œผ๋กœ BatchedMesh์— ๊ธฐ๋ฐ˜ํ•œ ๊ธฐ์ˆ˜ ์ •๋ ฌ(Radix sort) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [11, 12]. * **๋‚ด๋ถ€ ์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ** * **๊ฐ„์ ‘ ์ฐธ์กฐ(Indirection) ๊ธฐ๋ฐ˜ ์ธ๋ฑ์‹ฑ:** ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ดˆ๊ธฐ ๋ฒ„์ „๊ณผ ๋‹ฌ๋ฆฌ, `InstancedBufferAttribute`๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ Œ๋”๋ง๋  ์ธ์Šคํ„ด์Šค ์ธ๋ฑ์Šค๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค [12]. ์ด๋Š” GPU๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๊ธฐ ์ „ ์ปฌ๋ง, ์„ ํƒ์  ๋ Œ๋”๋ง, ์ •๋ ฌ ์ž‘์—…์„ ๋ฐฐ์—ด์˜ ๋ฌผ๋ฆฌ์  ์žฌ์ •๋ ฌ ์—†์ด ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [12]. * **SquareDataTexture์˜ ํ™œ์šฉ:** ์ธ์Šคํ„ด์Šค์˜ ํ–‰๋ ฌ(Matrix) ๋ฐ ์ฃผ์š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ `DataTexture`์˜ ํ™•์žฅ ๋ฒ„์ „์ธ `SquareDataTexture`๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค [12]. ์ด ๋ฐฉ์‹์€ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธ(Partial Updates)๋ฅผ ์ง€์›ํ•˜์—ฌ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•  ํ•„์š” ์—†์ด ๋ณ€๊ฒฝ๋œ ์ผ๋ถ€ ์ธ์Šคํ„ด์Šค์˜ ์ •๋ณด๋งŒ ๊ฐฑ์‹ ํ•˜๋„๋ก ๋•๋Š”๋‹ค [8, 12]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[InstancedMesh|InstancedMesh]], [[Frustum Culling|Frustum culling]], [[BVH|BVH]], [[LOD|LOD]], [[SkinnedMesh|SkinnedMesh]], [[BatchedMesh|BatchedMesh]] - **Projects/Contexts:** [[agargaroแ„‹แ…ด แ„‹แ…ฉแ„‘แ…ณแ†ซ แ„‰แ…ฉแ„‰แ…ณ แ„…แ…กแ„‹แ…ตแ„‡แ…ณแ„…แ…ฅแ„…แ…ต|agargaro์˜ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ]], [[20k skinned instances demo|20k skinned instances demo]] - **Contradictions/Notes:** - `SquareDataTexture`๋ฅผ ํ™œ์šฉํ•œ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์ด ์—ฐ์†๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ๊ณผ ๋ถ€๊ฐ€์ ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ์ธํ•ด CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์šฐ๋ ค๊ฐ€ ์ œ๊ธฐ๋˜์—ˆ์œผ๋‚˜, ์†Œ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๋ณ€ํ•˜๋Š” ์ƒํ™ฉ์—์„œ๋Š” ์ƒ๋‹นํ•œ ๋Œ€์—ญํญ ์ ˆ์•ฝ ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ์ž(@agargaro)๊ฐ€ ๋ฐ˜๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค [8, 13, 14]. - ์ด๋Ÿฌํ•œ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ๋“ค์ด ์œ ์šฉํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , Three.js์˜ ๋ฉ”์ธ ์ฝ”์–ด์— ๋ณ‘ํ•ฉํ•˜๊ธฐ์—๋Š” ๋‚ด๋ถ€ ์…ฐ์ด๋” ๋ณ€๊ฒฝ๊ณผ ๊ธฐ์กด ์ฝ”๋“œ ํ˜ธํ™˜์„ฑ ํŒŒ๊ดด(Breaking changes) ๋“ฑ ์œ ์ง€๋ณด์ˆ˜ ๋ณต์žก์„ฑ์ด ๋„ˆ๋ฌด ์ปค์„œ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ถ„๋ฆฌ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/InstancedMesh2.md ---