--- id: [[P-Reinforce|P-Reinforce]]-AUTO-C71621 category: Unified confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - [[WebGL|WebGL]]_multi_draw" --- # [[WEBGL_multi_draw|WEBGL_multi_draw]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > `WEBGL_multi_draw`๋Š” ํ•œ ๋ฒˆ์˜ ๋“œ๋กœ์šฐ ์ฝœ([[Draw Call|Draw Call]])๋กœ ์ •๋ ฌ๋œ ๋‹ค์ˆ˜์˜ ๋“œ๋กœ์šฐ ์š”์ฒญ์„ ํ•œ๊บผ๋ฒˆ์— ์ œ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” WebGL ํ™•์žฅ ๊ธฐ๋Šฅ(Extension)์ž…๋‹ˆ๋‹ค [1, 2]. Three.js์—์„œ๋Š” `BatchedMesh`๊ฐ€ ์ด API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์žฌ์งˆ์„ ๊ณต์œ ํ•˜์ง€๋งŒ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ(Geometry)๋ฅผ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค์„ ๋ฌถ์–ด ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [3-5]. ๋‹ค์–‘ํ•œ ๊ณ ์œ  ๊ฐ์ฒด๋“ค์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๊ธฐ์กด์˜ ๊ฐœ๋ณ„ ํ˜ธ์ถœ ๋ฐฉ์‹์— ๋น„ํ•ด ์—„์ฒญ๋‚œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ์™€ ๋Œ€๊ทœ๋ชจ ์”ฌ์—์„œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ ํ•œ๊ณ„๋ฅผ ๋™์‹œ์— ์•ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **BatchedMesh์—์„œ์˜ ํ™œ์šฉ๊ณผ ์ตœ์ ํ™” ๊ธฐ๋Šฅ** Three.js์˜ `BatchedMesh` ํด๋ž˜์Šค๋Š” `WEBGL_multi_draw` (๊ตฌ์ฒด์ ์œผ๋กœ `multiDraw` API)๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ์ค‘๋ณต์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ๋„ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ณ„ ์ •๋ ฌ([[Sorting|Sorting]]), ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง([[Frustum Culling|Frustum Culling]]), ๊ฐ€์‹œ์„ฑ ์ „ํ™˜(Visibility Toggling), ์ธ์Šคํ„ด์‹ฑ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ ๋‚ด์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [2]. * **InstancedDraw์™€์˜ ์„ฑ๋Šฅ ๋น„๊ต** ์ˆ˜์‹ญ๋งŒ ๊ฐœ(์˜ˆ: 10๋งŒ ๊ฐœ ์ด์ƒ)์˜ ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ทธ๋ฆด ๋•Œ๋Š” `[[InstancedMesh|InstancedMesh]]`๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” `instancedDraw`๊ฐ€ ๋” ์šฐ์ˆ˜ํ•œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค [3]. ๋ฐ˜๋ฉด, 1,000๊ฐœ ์ด์ƒ์˜ ๊ฐ๊ธฐ ๋‹ค๋ฅธ '๊ณ ์œ ํ•œ(unique)' ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๊ฐ์ฒด๋“ค์„ ๊ทธ๋ ค์•ผ ํ•  ๋•Œ๋Š” `multiDrawElementsWEBGL`์ด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค [8]. 10๋งŒ ๊ฐœ์˜ ๊ณ ์œ  ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๊ธฐ์กด์˜ ๋ฐ”์ธ๋”ฉ ๋ฐ ๋ Œ๋”๋ง ํ˜ธ์ถœ(`bindVertexArray` + `drawElements`)๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜๋ฉด, `multiDraw` ๋ฐฉ์‹์ด ์ˆ˜์ฒœ ๋ฐฐ ๋” ๋น ๋ฅธ ์†๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [9]. * **์ธ์Šคํ„ด์‹ฑ ์ง€์› ๋ณ€ํ˜• (Instanced Variants)** ์ด ํ™•์žฅ ๊ธฐ๋Šฅ์—๋Š” `multiDrawArraysInstancedWEBGL` ๋ฐ `multiDrawElementsInstancedWEBGL`๊ณผ ๊ฐ™์€ ์ธ์Šคํ„ด์‹ฑ ์ง€์› ๋ณ€ํ˜• ํ•จ์ˆ˜๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค [10]. ์ด๋“ค์€ ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ณ ์œ  ๊ฐ์ฒด์™€ ๋‹ค์ˆ˜์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ˜ผํ•ฉ๋œ ๋ณต์žกํ•œ ํ™˜๊ฒฝ์—์„œ ๊ฐ์ฒด๋“ค์„ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ฌถ์–ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค [8]. * **๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ์ œ์•ฝ** Firefox ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ํ˜„์žฌ `WEBGL_multi_draw` ํ™•์žฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค [6, 11]. ์ด๋กœ ์ธํ•ด Three.js ํ™˜๊ฒฝ์—์„œ๋Š” Firefox ์ง€์›์„ ์œ„ํ•ด `gl_DrawID`๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๋Š” ์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ง€์›๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ฐ ๋ฉ”์‰ฌ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋“œ๋กœ์šฐ ์ฝœ์„ ์ƒ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๋Œ€์ฒด ์ˆ˜๋‹จ(Fallback)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [12]. * **์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ ๋ฐ ๊ธฐ์ˆ ์  ํ•œ๊ณ„** ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์ˆ˜๊ฐ€ 20๋งŒ ๊ฐœ์— ๋‹ฌํ•  ์ •๋„๋กœ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด `BatchedMesh` ์‚ฌ์šฉ ์‹œ ์˜คํžˆ๋ ค CPU ์ ์œ ์œจ์ด ์น˜์†Ÿ๊ณ  ํ”„๋ ˆ์ž„์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ๋–จ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [13, 14]. ์ด๋Š” ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ๋“œ๋กœ์šฐ "์‹œ์ž‘์ (st[[Arts|Arts]])"๊ณผ "์นด์šดํŠธ(counts)" ์ •๋ณด๋ฅผ ๋‹ด์€ ์•ฝ 1.6MB ๊ทœ๋ชจ์˜ ๋ฒ„ํผ ๋ฐ์ดํ„ฐ๋ฅผ GPU๋กœ ์—…๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ๋‚˜, ์ธ๋””๋ ‰ํŠธ ํ…์Šค์ฒ˜ ์—…๋ฐ์ดํŠธ ์ง€์—ฐ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ถ”์ •๋ฉ๋‹ˆ๋‹ค [7, 15]. ๋˜ํ•œ ์ธ์Šคํ„ด์Šค ๋ Œ๋”๋ง์„ ์ ์šฉํ•  ๋•Œ `multiDrawArraysInstancedWEBGL` ๋ฐฉ์‹์œผ๋กœ๋Š” ์…ฐ์ด๋” ๋‚ด์—์„œ ํŠน์ • ํ–‰๋ ฌ์ด๋‚˜ ์ƒ‰์ƒ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ธ์Šคํ„ด์Šค ID๋ฅผ ์ง์ ‘ ๊ฒ€์ƒ‰ํ•  ๋ฐฉ๋ฒ•์ด ์—†์–ด ๋ถ€๊ฐ€์ ์ธ ํ…์Šค์ฒ˜ ์šฐํšŒ ์ฒ˜๋ฆฌ๊ฐ€ ์š”๊ตฌ๋˜๋Š” ํ•œ๊ณ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค [16]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** BatchedMesh, [[InstancedMesh|InstancedMesh]], [[Draw Call|Draw Call]] - **Projects/Contexts:** Three.js, [[WebGL|WebGL]] - **Contradictions/Notes:** `WEBGL_multi_draw`๋Š” ๋‹ค์ˆ˜์˜ ๊ณ ์œ  ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆด ๋•Œ CPU์˜ ๋“œ๋กœ์šฐ ์ฝœ ๋ณ‘๋ชฉ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋‚˜ [1, 9], ์—ญ์„ค์ ์œผ๋กœ ํŠน์ • ์ž„๊ณ„์น˜(์˜ˆ: ์ˆ˜์‹ญ๋งŒ ๋‹จ์œ„)๋ฅผ ๋„˜์–ด์„œ๋ฉด ๊ด€๋ จ ๋ฒ„ํผ ์—…๋กœ๋“œ ๋ฐ GPU ํ…์Šค์ฒ˜ ์—…๋ฐ์ดํŠธ ๋น„์šฉ ๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ๋ณ‘ํ•ฉ๋œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ(Merged Geometry) ๋ฐฉ์‹๋ณด๋‹ค ์„ฑ๋Šฅ์ด 30~50% ๋” ์•…ํ™”๋˜๋Š” ์‹ค์ฆ์  ๋ชจ์ˆœ์ด ๊ด€์ฐฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [7, 17, 18]. --- *Last updated: 2026-04-19* ---