--- id: P-REINFORCE-AUTO-88CEC2 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 แ„‰แ…กแ„‹แ…ญแ†ผ แ„‰แ…ต แ„ƒแ…ณแ„…แ…ฉแ„‹แ…ฎ แ„แ…ฉแ†ฏ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ชแ„‹แ…ด แ„’แ…กแ†ซแ„€แ…จแ„Œแ…ฅแ†ท แ„‰แ…กแ„…แ…จ แ„‹แ…งแ†ซแ„€แ…ฎ|InstancedMesh ์‚ฌ์šฉ ์‹œ ๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™”์˜ ํ•œ๊ณ„์  ์‚ฌ๋ก€ ์—ฐ๊ตฌ]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > InstancedMesh๋Š” ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)๋กœ ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ์™€ ์žฌ์งˆ์„ ๊ฐ€์ง„ ์ˆ˜๋งŽ์€ ๊ฐ์ฒด๋ฅผ ๋ Œ๋”๋งํ•˜์—ฌ CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ด๋Š” ์ตœ์ ํ™” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค [1, 2]. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค๋ฌด ํ™˜๊ฒฝ์—์„œ๋Š” ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๋‹จ์ผ์„ฑ ์ œ์•ฝ, ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling)์˜ ๋น„ํšจ์œจ์„ฑ, ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw), ๋™์  ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ์‹œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ํฌํ™” ๋“ฑ ์—ฌ๋Ÿฌ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค [3-7]. ๋ณธ ์‚ฌ๋ก€ ์—ฐ๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋“ค๋กœ ์ธํ•ด ๋“œ๋กœ์šฐ ์ฝœ ํšŸ์ˆ˜์˜ ๊ฐ์†Œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ „๋ฐ˜์ ์ธ ๋ Œ๋”๋ง ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ(FPS) ์ƒ์Šน์œผ๋กœ ์ด์–ด์ง€์ง€๋Š” ์•Š์Œ์„ ์‹ค์ฆ์ ์œผ๋กœ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค [3]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™” ์›๋ฆฌ์™€ ๋งน์ ** InstancedMesh๋Š” GPU ๋ฉ”๋ชจ๋ฆฌ์— ๋‹จ์ผ ์ •์  ๋ฒ„ํผ๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค์˜ ๋ณ€ํ™˜ ํ–‰๋ ฌ๋งŒ์„ ์†์„ฑ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋ณ‘๋ ฌ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค [1, 2]. ํ•˜์ง€๋งŒ **๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๋ฐ์ดํ„ฐ(BufferGeometry)์™€ ์žฌ์งˆ(Material)์„ ๊ณต์œ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ž์‚ฐ์˜ ๋‹ค์–‘์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค** [4]. ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค์— ๋‹ค๋ฅธ ํ…์Šค์ฒ˜๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฒฝ๊ณ„์„  ๋ธ”๋ฆฌ๋”ฉ(Edge Bleeding)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ…์Šค์ฒ˜ ๋ฐฐ์—ด(Texture Array)์€ ํ•ด์ƒ๋„ ์ œ์•ฝ์„ ์ˆ˜๋ฐ˜ํ•ด ์…ฐ์ด๋” ๋ณต์žก๋„๋ฅผ ๋†’์ž…๋‹ˆ๋‹ค [8]. * **์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling)์˜ ๋น„ํšจ์œจ์„ฑ** InstancedMesh์˜ ์ปฌ๋ง์€ ์ „์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ์„ ๊ธฐ์ค€์œผ๋กœ ๋‹จ ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋Š” '์ „๋ถ€ ์•„๋‹ˆ๋ฉด ์ „๋ฌด' ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค [5]. ์ด๋กœ ์ธํ•ด **๋‹จ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ ์‹œ์•ผ์— ์žˆ์–ด๋„ ํ™”๋ฉด ๋ฐ–์˜ ์ˆ˜๋งŽ์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ •์  ๋ณ€ํ™˜ ์—ฐ์‚ฐ์ด ๊ฐ•์ œ๋˜์–ด GPU๋ฅผ ํฌ๊ฒŒ ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค** [5]. ์ด๋ฅผ ํ”ผํ•˜๊ณ ์ž ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ˆ˜์ค€์—์„œ CPU ๊ธฐ๋ฐ˜์˜ ์ˆ˜๋™ ๊ฐœ๋ณ„ ์ปฌ๋ง์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋Œ€๊ทœ๋ชจ ๋ฐฐ์—ด ์กฐ์ž‘์œผ๋กœ ์ธํ•ด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์— ๊ทน์‹ฌํ•œ ๋ณ‘๋ชฉ์ด ์œ ๋ฐœ๋ฉ๋‹ˆ๋‹ค [9]. * **์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw)์™€ ๋ Œ๋”๋ง ์ •๋ ฌ์˜ ๋ถ€์žฌ** InstancedMesh๋Š” ๋ฒ„ํผ์— ์ €์žฅ๋œ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ๋ Œ๋”๋ง๋˜๋ฉฐ, ๋ถˆํˆฌ๋ช… ๊ฐ์ฒด์˜ ์กฐ๊ธฐ ๊นŠ์ด ํŒ์ •(Early-Z)์„ ์œ„ํ•œ '์•ž์—์„œ ๋’ค๋กœ' ์ž๋™ ์ •๋ ฌ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค [6]. **๋“œ๋กœ์šฐ ์ฝœ์ด 1ํšŒ๋กœ ์ตœ์ ํ™”๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ๋ฌด์ž‘์œ„ ์ •๋ ฌ๋กœ ์ธํ•œ ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ ๋น„์šฉ ๋•Œ๋ฌธ์— GPU ํ”„๋ž˜๊ทธ๋จผํŠธ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•˜์—ฌ ์˜คํžˆ๋ ค ์ผ๋ฐ˜ ๋ฉ”์‰ฌ ๋ฐฉ์‹๋ณด๋‹ค FPS๊ฐ€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค** [6]. ํˆฌ๋ช…/๋ฐ˜ํˆฌ๋ช… ๊ฐ์ฒด๋Š” '๋’ค์—์„œ ์•ž์œผ๋กœ' ๋ Œ๋”๋ง๋˜์–ด์•ผ ์‹œ๊ฐ์  ์˜ค๋ฅ˜๊ฐ€ ์—†์œผ๋‚˜ ๋™์ ์ธ ์ˆœ์„œ ๋ณ€๊ฒฝ์ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ•์ œ๋กœ ์žฌ์ •๋ ฌ(Radix Sort ๋“ฑ)์„ ์ˆ˜ํ–‰ํ•˜๋ฉด CPU์— ์น˜๋ช…์ ์ธ ๋ถ€ํ•˜๋ฅผ ์ค๋‹ˆ๋‹ค [10]. * **๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ์ž„๊ณ„์ ๊ณผ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ณ‘๋ชฉ** ๊ฐ ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜ ๋ฐ ํšŒ์ „ ์ •๋ณด๋Š” 64๋ฐ”์ดํŠธ์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ–‰๋ ฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [7]. **๋Œ€๊ทœ๋ชจ ์”ฌ(์˜ˆ: 200๋งŒ ๊ฐœ ์ธ์Šคํ„ด์Šค)์—์„œ ๋งค ํ”„๋ ˆ์ž„ ๊ฐ์ฒด๋“ค์ด ๋™์ ์œผ๋กœ ์›€์ง์—ฌ ๋ฒ„ํผ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ˆ˜ GB/s ๋‹จ์œ„์˜ ๋ง‰๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ CPU์—์„œ GPU๋กœ ์ด๋™ํ•ด์•ผ ํ•˜๋ฏ€๋กœ PCIe ๋Œ€์—ญํญ์„ ํฌํ™”์‹œํ‚ต๋‹ˆ๋‹ค** [7]. ๋˜ํ•œ ํ• ๋‹น๋œ ๋ฒ„ํผ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•ด ์ƒˆ ๋ฒ„ํผ๋ฅผ ๋™์  ํ• ๋‹นํ•  ๋•Œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(GC)์ด ์ž‘๋™ํ•ด ์ˆœ๊ฐ„์ ์ธ ํ”„๋ ˆ์ž„ ์Šคํ„ฐํ„ฐ๋ง(Stuttering)์„ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค [11]. * **์ƒํ˜ธ์ž‘์šฉ(Picking) ๋ฐ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์—ฐ๋™์˜ ํ•œ๊ณ„** ๋Œ€๊ทœ๋ชจ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•˜๋Š” **CPU ๊ธฐ๋ฐ˜ ํ”ผํ‚น(Raycasting)์„ ์‹œ๋„ํ•˜๋ฉด ์ˆ˜๋งŒ ๋ฒˆ์˜ ํ–‰๋ ฌ ์—ญ์‚ฐ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์‘์„ฑ์ด ์ €ํ•ด๋ฉ๋‹ˆ๋‹ค** [12]. GPU ํ”ฝ์…€ ๊ธฐ๋ฐ˜ ํ”ผํ‚น์€ ํŒŒ์ดํ”„๋ผ์ธ ๋™๊ธฐํ™” ์ง€์—ฐ(Sync stall)๊ณผ ์˜คํด๋ฃจ์ „(Occlusion) ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [13]. ๋˜ํ•œ ๋ณธ(Bone) ํ–‰๋ ฌ ๊ธฐ๋ฐ˜์˜ **์Šคํ‚จ๋“œ ๋ฉ”์‰ฌ(Skinned Mesh) ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ธฐ๋ณธ ์ง€์›ํ•˜์ง€ ์•Š์•„**, ์ธ์Šคํ„ด์Šค๋งˆ๋‹ค ๊ณ ์œ ํ•œ ๋ณธ ํ–‰๋ ฌ์„ ์ „๋‹ฌํ•˜๋ ค ํ•˜๋ฉด ๋ฒ„ํผ ํฌ๊ธฐ ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค [14]. * **๋Œ€์•ˆ ๊ธฐ์ˆ  ๋ฐ ์ตœ์ ํ™” ์ „๋žต** InstancedMesh์˜ ํ•œ๊ณ„๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ์ˆ˜์šฉํ•˜๊ณ  ๊ฐœ๋ณ„ ์ปฌ๋ง/๊ฐ€์‹œ์„ฑ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ **`BatchedMesh`**๊ฐ€ ํ™œ์šฉ๋˜๊ณ  ์žˆ์œผ๋‚˜, ์ด ์—ญ์‹œ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ์‚ผ๊ฐํ˜•์„ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ๋ฒ„ํผ ํŒจํ‚น ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [15]. ๊ถ๊ทน์ ์œผ๋กœ๋Š” **WebGPU์˜ ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shader)๋ฅผ ๋„์ž…ํ•˜์—ฌ ๊ฐ€์‹œ์„ฑ ํŒ๋ณ„๊ณผ ์˜คํด๋ฃจ์ „ ์ฒ˜๋ฆฌ๋ฅผ GPU ๋‚ด๋ถ€์—์„œ ํ•ด๊ฒฐํ•˜๋Š” GPU ์ฃผ๋„ ๋ Œ๋”๋ง(Indirect Draw) ๋ฐฉ์‹**์ด ๊ฐ•๋ ฅํ•œ ๋Œ€์•ˆ์œผ๋กœ ๋ถ€์ƒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [16, 17]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Programming & Language ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Frustum Culling|Frustum Culling]], [[Overdraw|Overdraw]], [[BatchedMesh|BatchedMesh]], [[WebGPU Compute Shader|WebGPU Compute Shader]], [[Texture Atlas|Texture Atlas]], [[Garbage Collection (GC)|Garbage Collection (GC)]] - **Projects/Contexts:** [[แ„ƒแ…ขแ„€แ…ฒแ„†แ…ฉ แ„‹แ…ฐแ†ธ แ„€แ…ณแ„…แ…ขแ„‘แ…ตแ†จแ„‰แ…ณ แ„‘แ…ณแ„…แ…ฉแ„Œแ…ฆแ†จแ„แ…ณ|๋Œ€๊ทœ๋ชจ ์›น ๊ทธ๋ž˜ํ”ฝ์Šค ํ”„๋กœ์ ํŠธ]], [[CAD แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|CAD ๋ Œ๋”๋ง ์ตœ์ ํ™”]], [[BIM แ„†แ…ฉแ„ƒแ…ฆแ†ฏ แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ|BIM ๋ชจ๋ธ ๋ Œ๋”๋ง]] - **Contradictions/Notes:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด InstancedMesh ๊ธฐ์ˆ ์€ ๋“œ๋กœ์šฐ ์ฝœ์„ ํš๊ธฐ์ ์œผ๋กœ ์ค„์—ฌ CPU ๋ถ€๋‹ด์„ ์ตœ์†Œํ™”ํ•˜์ง€๋งŒ, ์ž์ฒด์ ์ธ ์ •๋ ฌ ๋ถ€์žฌ์™€ ์ปฌ๋ง์˜ ํ•œ๊ณ„๋กœ ์ธํ•ด ์กฐ๋ช… ์—ฐ์‚ฐ์ด ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ์˜ค๋ฒ„๋“œ๋กœ์šฐ๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ๊ฒฐ๊ณผ์ ์œผ๋กœ GPU ํ”ฝ์…€ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ์ƒํšŒํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ „์ฒด FPS๋ฅผ ํ•˜๋ฝ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ชจ์ˆœ๋œ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•จ์„ ๊ฐ•๋ ฅํžˆ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค [6]. ๋˜ํ•œ ๋Œ€์•ˆ์œผ๋กœ ์ œ์‹œ๋˜๋Š” BatchedMesh ์—ญ์‹œ ๋“œ๋กœ์šฐ ์ฝœ์„ ์ค„์ผ ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ๊ทนํ•œ์˜ ๋Œ€๊ทœ๋ชจ ์‚ผ๊ฐํ˜• ๋ Œ๋”๋ง ์‹œ์—๋Š” ๋ฒ„ํผ ํŒจํ‚น ๋น„์šฉ์ด ์˜คํžˆ๋ ค ์ผ๋ฐ˜ ๋ฉ”์‰ฌ ๋ Œ๋”๋ง๋ณด๋‹ค ๋‚ฎ์€ ์„ฑ๋Šฅ์„ ๋ณด์ด๋Š” ๋ณ‘๋ชฉ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค [15]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/InstancedMesh ์‚ฌ์šฉ ์‹œ ๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™”์˜ ํ•œ๊ณ„์  ์‚ฌ๋ก€ ์—ฐ๊ตฌ.md ---