--- id: P-REINFORCE-AUTO-6B3697 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - BatchedMesh ๋ฐ InstancedMesh ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ" --- # [[BatchedMesh แ„†แ…ตแ†พ InstancedMesh แ„‰แ…ฅแ†ผแ„‚แ…ณแ†ผ แ„‡แ…ฆแ†ซแ„Žแ…ตแ„†แ…กแ„แ…ณ|BatchedMesh ๋ฐ InstancedMesh ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > BatchedMesh์™€ InstancedMesh๋Š” Three.js ํ™˜๊ฒฝ์—์„œ ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)์„ ์ค„์—ฌ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๋Œ€ํญ ๊ฐœ์„ ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค [1, 2]. InstancedMesh๋Š” ๋™์ผํ•œ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ๊ทธ๋ฆด ๋•Œ ํƒ์›”ํ•œ ํšจ์œจ์„ ๋ณด์ด์ง€๋งŒ ๋‹ค์–‘ํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜๋Š” ์—†์œผ๋ฉฐ, BatchedMesh๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ๋†’์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [3, 4]. ํ•˜์ง€๋งŒ ๋ฒค์น˜๋งˆํฌ ์‚ฌ๋ก€ ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด, ๋Œ€๊ทœ๋ชจ ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ BatchedMesh๋Š” ๋‚ด๋ถ€์ ์ธ ๊ฐ์ฒด ์ •๋ ฌ ๋ฐ ๋ฒ„ํผ ์—…๋กœ๋“œ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์˜คํžˆ๋ ค ์‹ฌ๊ฐํ•œ CPU ๋ณ‘๋ชฉ ํ˜„์ƒ๊ณผ ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [5, 6]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) - **์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ ์šฉ ๊ธฐ์ค€** InstancedMesh๋Š” ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ(BufferGeometry)์™€ ์žฌ์งˆ(Material)์„ ๊ณต์œ ํ•˜๋Š” ์ˆ˜๋งŽ์€ ๋ณต์ œ๋ณธ์„ ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ๋กœ GPU์— ์ „๋‹ฌํ•ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค [7, 8]. ๊ณ ์œ ํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ 1,000๊ฐœ ๋ฏธ๋งŒ์ด๋ฉด์„œ ์ˆ˜๋งŒ ๊ฐœ์˜ ๋ณต์ œ๋ณธ์ด ์กด์žฌํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ตœ์ƒ์˜ ์„ฑ๋Šฅ(`drawElementsInstanced`)์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค [9, 10]. ๋ฐ˜๋ฉด BatchedMesh๋Š” ์žฌ์งˆ์€ ๊ฐ™์œผ๋‚˜ ํ˜•ํƒœ๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๋ฒ„ํผ์— ํ†ตํ•ฉ(`multiDrawElementsWEBGL` ํ™œ์šฉ)ํ•˜์—ฌ ํ•œ ๋ฒˆ์— ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ๋งค์šฐ ๋‹ค์–‘ํ•œ ์”ฌ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค [9, 11-13]. - **BatchedMesh์˜ ๋Œ€๊ทœ๋ชจ ์”ฌ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ** ์‹ค์ œ ๊ฑด์ถ• BIM ๋ชจ๋ธ์ด๋‚˜ ๋Œ€๊ทœ๋ชจ ์”ฌ(์˜ˆ: 1,200๋งŒ ๊ฐœ์˜ ์‚ผ๊ฐํ˜•, ์ˆ˜์‹ญ๋งŒ ๊ฐœ์˜ ๊ณ ์œ  ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ)์„ BatchedMesh๋กœ ๋ Œ๋”๋งํ•œ ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ์—์„œ ๋ง‰๋Œ€ํ•œ ์„ฑ๋Šฅ ํ•˜๋ฝ์ด ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [5, 14, 15]. ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉํ•œ Merged Mesh ๋ฐฉ์‹์ด 60 FPS(CPU 15%, GPU 90%)์˜ ์„ฑ๋Šฅ์„ ๋ณด์ธ ๋ฐ˜๋ฉด, BatchedMesh๋Š” ์•ฝ 20 FPS ์ดํ•˜(CPU 40~60%, GPU 30%)๋กœ ํ”„๋ ˆ์ž„์ด ๊ธ‰๋ฝํ•˜๋ฉฐ ๊ทน์‹ฌํ•œ CPU ๋ถ€ํ•˜๋ฅผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค [5, 15-17]. - **์„ฑ๋Šฅ ์ €ํ•˜์˜ ์ฃผ์š” ์›์ธ** BatchedMesh์˜ CPU ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค GPU๋กœ ๊ทธ๋ ค์•ผ ํ•  ๋ถ€๋ถ„์˜ '์‹œ์ž‘(starts)' ์ง€์ ๊ณผ '์นด์šดํŠธ(counts)' ๋ฐฐ์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์—…๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์—์„œ ๋น„๋กฏ๋  ํ™•๋ฅ ์ด ๋†’์Šต๋‹ˆ๋‹ค(์•ฝ 20๋งŒ ๊ฐœ ํ•ญ๋ชฉ ๊ธฐ์ค€ 1.6MB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค ํ”„๋ ˆ์ž„ ์ „์†ก) [6, 18, 19]. ๋”๋ถˆ์–ด ๊ฐœ๋ณ„ ๊ฐ์ฒด๋งˆ๋‹ค ๊ฐ€์‹œ์„ฑ์„ ํŒ๋ณ„ํ•˜๋Š” ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling) ๋ฐ ์‹ฌ๋„ ์ •๋ ฌ(Sorting) ์ž‘์—…์ด CPU ์ž์›์„ ํฌ๊ฒŒ ์†Œ๋ชจํ•˜๋ฉฐ, ํŠนํžˆ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ผค ๊ฒฝ์šฐ `texSubImage2D` ์ž‘์—… ๋ณ‘๋ชฉ์œผ๋กœ ์ธํ•ด FPS๊ฐ€ 30์—์„œ 9๋กœ ๋–จ์–ด์ง€๋Š” ํ˜„์ƒ๊นŒ์ง€ ๊ด€์ฐฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [20-22]. - **์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw)์™€ ์‹ฌ๋„ ์ •๋ ฌ์˜ ํ•œ๊ณ„** InstancedMesh๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ ฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ถˆํˆฌ๋ช… ๊ฐ์ฒด๋“ค์ด ๊ฒน์น  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„๋“œ๋กœ์šฐ ํ˜„์ƒ์œผ๋กœ ์ธํ•ด ํ”„๋ž˜๊ทธ๋จผํŠธ ๋ฐ”์šด๋“œ(Fragment-bound) ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [23-25]. BatchedMesh๋Š” ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ๋œ๊ธฐ ์œ„ํ•ด ์ž์ฒด์ ์ธ ์ •๋ ฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ์ˆ˜๋งŽ์€ ์š”์†Œ๋ฅผ CPU์—์„œ ์ •๋ ฌํ•˜๋Š” ์—ฐ์‚ฐ ์ž์ฒด๊ฐ€ ์ƒˆ๋กœ์šด ๋ Œ๋”๋ง ์ง€์—ฐ์˜ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค [22, 24]. - **์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ ๊ธฐ๋ฐ˜์˜ ์„ ํƒ ๊ฐ€์ด๋“œ๋ผ์ธ** ๋™์ ์ธ ์”ฌ์—์„œ ๊ฐ์ฒด์˜ ์ข…๋ฅ˜๊ฐ€ 1,000๊ฐœ ์ดํ•˜๋ผ๋ฉด InstancedMesh๊ฐ€ ์••๋„์ ์œผ๋กœ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค [10, 26]. ๋งŒ์ผ ๊ณ ์œ  ๊ฐ์ฒด๊ฐ€ 1,000๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด BatchedMesh๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ˆ˜๋งŒ~์ˆ˜์‹ญ๋งŒ ๊ฐœ์˜ ๊ทน๋Œ€๊ทœ๋ชจ ๊ฐ์ฒด ๋‹จ์œ„๋กœ ๋„˜์–ด๊ฐ€๋ฉด ํ•œ๊ณ„์— ๋ถ€๋”ชํž™๋‹ˆ๋‹ค [10, 27]. ์”ฌ์ด ์ •์ ์ด๋ผ๋ฉด ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฒ„ํผ๋กœ ์™„์ „ํžˆ ๋ณ‘ํ•ฉ(Merge)ํ•ด๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ์„ฑ๋Šฅ์— ํ›จ์”ฌ ์ด๋กœ์šฐ๋ฉฐ, ๋งค์šฐ ๋ฐฉ๋Œ€ํ•˜๊ณ  ๋™์ ์ธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์ˆ˜์ ์ด๋ผ๋ฉด WebGPU ๊ธฐ๋ฐ˜์˜ ์ปดํ“จํŠธ ์…ฐ์ด๋”์™€ ๊ฐ„์ ‘ ๋“œ๋กœ์šฐ(Indirect Draw) ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ž…๋‹ˆ๋‹ค [6, 28, 29]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** ๋“œ๋กœ์šฐ ์ฝœ (Draw Call), Frustum Culling (์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง), [[แ„‹แ…ฉแ„‡แ…ฅแ„ƒแ…ณแ„…แ…ฉแ„‹แ…ฎ(Overdraw)|์˜ค๋ฒ„๋“œ๋กœ์šฐ (Overdraw)]] - **Projects/Contexts:** Revit ๋ฐ BIM ๊ฑด์ถ• ๋ชจ๋ธ ๋ Œ๋”๋ง ์ตœ์ ํ™”, WebGPU ๋ฐ Indirect Draw - **Contradictions/Notes:** BatchedMesh๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๋ Œ๋”๋ง ์‹œ ๋ฐœ์ƒํ•˜๋Š” CPU์˜ ๋“œ๋กœ์šฐ ์ฝœ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋˜์—ˆ์œผ๋‚˜, ๋Œ€๊ทœ๋ชจ(10๋งŒ ๊ฐœ ์ด์ƒ) ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๋ฒค์น˜๋งˆํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‚ด๋ถ€ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋ฐ ๋ฒ„ํผ ๋ฐ์ดํ„ฐ ์ „์†ก ๋ถ€ํ•˜๋กœ ์ธํ•ด ๋„๋ฆฌ์–ด Merged Mesh ๋ฐฉ์‹๋ณด๋‹ค CPU ์‚ฌ์šฉ๋Ÿ‰์„ ์ตœ๋Œ€ 3๋ฐฐ ์ด์ƒ ํญ์ฆ์‹œํ‚ค๊ณ  FPS๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์—ญ์„ค์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ž…๋‹ˆ๋‹ค [5, 15, 30]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/BatchedMesh ๋ฐ InstancedMesh ์„ฑ๋Šฅ ๋ฒค์น˜๋งˆํฌ.md ---