--- id: P-REINFORCE-AUTO-354B99 category: "[[10_Wiki/๐Ÿ’ก Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - InstancedMesh" --- # [[InstancedMesh]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > InstancedMesh๋Š” ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ(Geometry)์™€ ์žฌ์งˆ(Material)์„ ๊ณต์œ ํ•˜๋Š” ์ˆ˜๋งŽ์€ ๊ฐ์ฒด๋ฅผ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋“œ๋กœ์šฐ ์ฝœ(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์™€ Material์„ ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค [10, 11]. ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๋ Œ๋”๋งํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋‹ค์ˆ˜์˜ InstancedMesh๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” BatchedMesh๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [11-13]. * **์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling) ๋น„ํšจ์œจ์„ฑ:** ๊ธฐ๋ณธ์ ์œผ๋กœ ์—”์ง„ ์ˆ˜์ค€์—์„œ InstancedMesh ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋‹จ์ผ ๊ฐ์ฒด(๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ)๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ธ์Šคํ„ด์Šค ๊ฐœ๋ณ„ ๋‹จ์œ„์˜ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค [14, 15]. ๋”ฐ๋ผ์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์‹œ์•ผ์— ์žˆ์–ด๋„ ํ™”๋ฉด ๋ฐ–์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ •์  ์—ฐ์‚ฐ์„ GPU๊ฐ€ ๊ฐ•์ œ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [15, 16]. * **์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw) ๋ฐ ์ •๋ ฌ ๋ถ€์žฌ:** ์ธ์Šคํ„ด์Šค๋“ค์€ ๋ฒ„ํผ์— ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ Œ๋”๋ง๋˜๋ฉฐ ์นด๋ฉ”๋ผ์™€์˜ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ฅธ ์ž๋™ ๊นŠ์ด ์ •๋ ฌ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค [17, 18]. ์ด๋กœ ์ธํ•ด ํˆฌ๋ช…ํ•œ ๊ฐ์ฒด ๋ Œ๋”๋ง ์‹œ ์•ŒํŒŒ ๋ธ”๋ Œ๋”ฉ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ๋ถˆํˆฌ๋ช… ๊ฐ์ฒด์˜ ์‹ฌ๊ฐํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ๋ฅผ ์œ ๋ฐœํ•ด ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋” ์—ฐ์‚ฐ ๋ถ€ํ•˜๊ฐ€ ๊ธ‰์ฆํ•  ์ˆ˜ ์žˆ๋‹ค [17, 19-21]. * **์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋‚œ์ œ:** ๊ฐœ๋ณ„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ ˆ์ด์บ์ŠคํŒ…(Raycasting) ์‹œ CPU๊ฐ€ ๊ฐ ์ธ์Šคํ„ด์Šค์˜ ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๊ฐœ๋ณ„ ๊ณ„์‚ฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ์”ฌ์—์„œ๋Š” ๋™๊ธฐํ™” ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [22]. ๋˜ํ•œ ๋ณธ(Bone) ๊ธฐ๋ฐ˜์˜ ์Šคํ‚จ๋“œ ์• ๋‹ˆ๋ฉ”์ด์…˜(Skinned Mesh)์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š์•„ ๊ตฐ์ค‘ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ณต์žกํ•œ ์ปค์Šคํ…€ ํŒŒ์ดํ”„๋ผ์ธ์ด ์š”๊ตฌ๋œ๋‹ค [23]. * **ํ™œ์šฉ ๋ฐ ์ œ์–ด:** ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ์€ `setMatrixAt`, `setColorAt` ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ œ์–ดํ•˜๋ฉฐ, ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ ํ›„์—๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ์†์„ฑ(`instanceMatrix`, `instanceColor` ๋“ฑ)์˜ `needsUpdate` ํ”Œ๋ž˜๊ทธ๋ฅผ `true`๋กœ ์„ค์ •ํ•ด์•ผ ๋ Œ๋”๋ง์— ๋ฐ˜์˜๋œ๋‹ค [24]. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฐœ๋ณ„ ์ปฌ๋ง์ด๋‚˜ ์ •๋ ฌ ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด `InstancedMesh2` ๊ฐ™์€ ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ BVH(Bounding Volume Hierarchy)๋ฅผ ํ†ตํ•œ ๊ณต๊ฐ„ ๋ถ„ํ•  ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•˜๊ธฐ๋„ ํ•œ๋‹ค [25-27]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Draw Call]], [[BatchedMesh]], [[Frustum Culling]], [[BufferGeometry]], [[Overdraw]] - **Projects/Contexts:** [[Three.js]], [[WebGL]], [[InstancedMesh2]] - **Contradictions/Notes:** InstancedMesh๋Š” ๋“œ๋กœ์šฐ ์ฝœ ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์ง€๋งŒ, ์ž๋™ ์ •๋ ฌ์˜ ๋ถ€์žฌ ๋ฐ ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค ์ปฌ๋ง ๋ถˆ๊ฐ€ ๋ฌธ์ œ๋กœ ์ธํ•ด ๊ทน์‹ฌํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์ธ Mesh(๊ณต์œ  ์†์„ฑ ํ™œ์šฉ)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค ์˜คํžˆ๋ ค ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ(FPS)๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ €ํ•˜๋˜๋Š” ์—ญ์„ค์ ์ธ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์—ฌ๋Ÿฌ ์†Œ์Šค์—์„œ ๊ฒฝ๊ณ ํ•œ๋‹ค [15, 17, 28, 29]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/InstancedMesh.md]] ---