--- id: P-REINFORCE-AUTO-655682 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - WebGL Optimization" --- # [[WebGL Optimization|WebGL Optimization]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > WebGL ์ตœ์ ํ™”๋Š” ์›น ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ 3D ๊ทธ๋ž˜ํ”ฝ์Šค์˜ ๋ Œ๋”๋ง ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ฒด๊ณ„์ ์ธ ๊ธฐ์ˆ ๊ณผ ๋ฐฉ๋ฒ•๋ก ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ฃผ๋œ ๋ชฉ์ ์€ CPU์™€ GPU ๊ฐ„์˜ ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)์„ ์ตœ์†Œํ™”ํ•˜์—ฌ ์•ˆ์ •์ ์ธ 60 FPS ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [2, 3]. ์ด๋ฅผ ์œ„ํ•ด ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ ์ธ์Šคํ„ด์‹ฑ(Instancing), ํ…์Šค์ฒ˜ ์••์ถ•, ๋””ํ…Œ์ผ ์ˆ˜์ค€(LOD) ์ œ์–ด, ๊ทธ๋ฆฌ๊ณ  ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋ฅผ ๊ณ ๋ คํ•œ ์ž์› ํ•ด์ œ ๋“ฑ์˜ ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด ๋ณตํ•ฉ์ ์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [4-6]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™” (Draw Call Optimization):** CPU๊ฐ€ GPU์—๊ฒŒ ๋ Œ๋”๋ง์„ ๋ช…๋ นํ•˜๋Š” '๋“œ๋กœ์šฐ ์ฝœ'์€ WebGL ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ๊ฐ€์žฅ ํฐ ๋ณ‘๋ชฉ ํ˜„์ƒ์ž…๋‹ˆ๋‹ค [7, 8]. WebGL ํ™˜๊ฒฝ์—์„œ๋Š” CPU-GPU ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํ”„๋ ˆ์ž„๋‹น ๋“œ๋กœ์šฐ ์ฝœ์„ 100ํšŒ ๋ฏธ๋งŒ์œผ๋กœ ํƒ€๊ฒŸํŒ…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, 1,000~2,000ํšŒ์— ๋„๋‹ฌํ•˜๋ฉด ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [9, 10]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๋ฐ˜๋ณต ๋ Œ๋”๋งํ•˜๋Š” `InstancedMesh`, ๋‹ค์–‘ํ•œ ๊ตฌ์กฐ๋ผ๋„ ๋™์ผํ•œ ์žฌ์งˆ์ด๋ฉด ๋ณ‘ํ•ฉ ์ฒ˜๋ฆฌํ•˜๋Š” `BatchedMesh`, ๊ทธ๋ฆฌ๊ณ  ์ •์  ๊ฐ์ฒด์˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ(Geometry Merging) ๊ธฐ์ˆ ์„ ํ•„์ˆ˜์ ์œผ๋กœ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [9, 11-13]. * **์—์…‹ ๋ฐ ํ…์Šค์ฒ˜ ์••์ถ• (Asset & Texture Optimization):** ์›น ํ™˜๊ฒฝ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ์„ ๊ณ ๋ คํ•˜์—ฌ, ํด๋ฆฌ๊ณค ์ˆ˜๋Š” ๋ชจ๋ฐ”์ผ ๋ฐ ์›น ๋ทฐ์–ด ๊ธฐ์ค€ 10,000๊ฐœ์—์„œ 100,000๊ฐœ ์‚ฌ์ด๋กœ ์œ ์ง€(Decimation/Retopology)ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [14, 15]. ๋˜ํ•œ ์ผ๋ฐ˜ PNG ํ…์Šค์ฒ˜๋Š” GPU ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ ์œ ํ•˜๋ฏ€๋กœ KTX2๋‚˜ Basis Universal๊ณผ ๊ฐ™์ด GPU ์นœํ™”์ ์ธ ์••์ถ• ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ 75~90%๊ฐ€๋Ÿ‰ ์ค„์ด๊ณ , ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋กœ ์—ฌ๋Ÿฌ ํ…์Šค์ฒ˜๋ฅผ ํ•˜๋‚˜๋กœ ๋ณ‘ํ•ฉํ•ด ๋ฐ”์ธ๋”ฉ ํšŸ์ˆ˜๋ฅผ ๊ฐ์†Œ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค [16-18]. * **๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ ๊ด€๋ฆฌ (Memory Pipeline Management):** WebGL ์ปจํ…์ŠคํŠธ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ๋Œ€๊ฐœ 256MB~1GB์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ์–ด ํ•œ๊ณ„๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค [6]. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ, ์žฌ์งˆ, ํ…์Šค์ฒ˜๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ช…์‹œ์ ์œผ๋กœ `.dispose()`๋ฅผ ํ˜ธ์ถœํ•ด GPU ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [19, 20]. ๋˜ํ•œ ์นด๋ฉ”๋ผ ์‹œ์•ผ ๋ฒ”์œ„ ๋ฐ–์˜ ์—ฐ์‚ฐ์„ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ํ•˜๋Š” ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling), ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๊ฐ์ฒด ๋””ํ…Œ์ผ์„ ๋™์ ์œผ๋กœ ์ค„์ด๊ฑฐ๋‚˜ ๋นŒ๋ณด๋“œ ์ž„ํฌ์Šคํ„ฐ๋กœ ๋Œ€์ฒดํ•˜๋Š” LOD(Level of Detail) ์‹œ์Šคํ…œ ์ ์šฉ๋„ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค [21-24]. * **์…ฐ์ด๋” ์—ฐ์‚ฐ ๊ฐ„์†Œํ™” (Shader & Overdraw Optimization):** ๋ชจ๋ฐ”์ผ GPU์—์„œ๋Š” ์—ฐ์‚ฐ ์†๋„๋ฅผ 2๋ฐฐ ์ด์ƒ ๋†’์ผ ์ˆ˜ ์žˆ๋„๋ก `mediump` ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [25]. ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋” ๋‚ด์—์„œ ๋ถ„๊ธฐ๋ฌธ(Conditionals)์€ GPU ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๋ฐฉํ•ดํ•˜๋ฏ€๋กœ `mix()` ๋ฐ `step()` ํ•จ์ˆ˜๋กœ ๋Œ€์ฒดํ•˜๊ณ , ๋‹ค์ค‘ ํ…์Šค์ฒ˜ ์กฐํšŒ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ PBR ๋ฐ์ดํ„ฐ๋ฅผ RGBA ์ฑ„๋„์— ์••์ถ•(Packing)ํ•ด์•ผ ๋Œ€์—ญํญ์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [26, 27]. ๋˜ํ•œ ๋ณด์ด์ง€ ์•Š๋Š” ํˆฌ๋ช…ํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๊ฐ€ ๊ฒน์ณ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ Œ๋”๋ง ์—ฐ์‚ฐ์„ ๋ฐ˜๋ณตํ•˜๋Š” ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw)๋ฅผ ์ตœ์†Œํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [28]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Draw Call|Draw Call]], [[InstancedMesh|InstancedMesh]], [[BatchedMesh|BatchedMesh]], [[Frustum Culling|Frustum Culling]], [[Level of Detail (LOD)|Level of Detail (LOD)]] - **Projects/Contexts:** [[Three.js|Three.js]] - **Contradictions/Notes:** - `InstancedMesh`๋Š” ๋“œ๋กœ์šฐ ์ฝœ์„ 1ํšŒ๋กœ ์ค„์—ฌ์ฃผ์–ด ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ๋‹จ์ผ ์—”์ง„ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค ๊ฐ๊ฐ์— ๋Œ€ํ•œ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling)์ด ๊ฐœ๋ณ„ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [29]. ๋”ฐ๋ผ์„œ ํ™”๋ฉด์— ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ๊ฑธ์ณ ์žˆ์–ด๋„ ๋ณด์ด์ง€ ์•Š๋Š” ๋‚˜๋จธ์ง€ ์ธ์Šคํ„ด์Šค์˜ ์ •์  ์—ฐ์‚ฐ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” GPU ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [29]. - ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw) ๊ด€์ ์—์„œ๋„ `InstancedMesh`๋Š” ์ž๋™ ์ •๋ ฌ(Sorting) ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์•„ ๋’ค์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฎ์–ด ์”Œ์›Œ์ง€๋ฉด์„œ ํ”ฝ์…€ ์ฒ˜๋ฆฌ์— ๋ณ‘๋ชฉ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ๋Š” ์˜คํžˆ๋ ค ๊ฐœ๋ณ„ ๋ฉ”์‰ฌ๋‚˜ ์ •์  ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ(Merging)์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋†’์€ FPS๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ ํ•ฉ๋‹ˆ๋‹ค [30-32]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/WebGL Optimization.md ---