--- id: P-REINFORCE-AUTO-7B2955 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" --- # [[WebGL]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > **WebGL**์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ 2D ๋ฐ 3D ๊ทธ๋ž˜ํ”ฝ์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ์ €์ˆ˜์ค€(Low-level) JavaScript API์ž…๋‹ˆ๋‹ค. ์›์‹œ WebGL์€ ์ง์ ‘ ๋‹ค๋ฃจ๊ธฐ ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ์žฅํ™ฉํ•˜์ง€๋งŒ, **Three.js**๋‚˜ **React Three Fiber(R3F)** ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ถ”์ƒํ™”๋˜์–ด ํ˜„๋Œ€ ์›น์˜ ๊ณ ์„ฑ๋Šฅ 3D ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”ฝ๊ณผ ๊ฒŒ์ž„ ์—”์ง„์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **1. WebGL์˜ ๋ณต์žก์„ฑ๊ณผ Three.js์˜ ์—ญํ• ** WebGL ์ž์ฒด๋Š” ์…ฐ์ด๋” ์ฝ”๋“œ์™€ ๋ฒ„ํผ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃจ์–ด์•ผ ํ•˜๋Š” ๋งค์šฐ ์ €์ˆ˜์ค€(Low-level)์˜ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ ์ž ๊ฐœ๋ฐœ๋œ ๊ฒƒ์ด Three.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์”ฌ(Scene), ์นด๋ฉ”๋ผ, ๊ธฐํ•˜๊ตฌ์กฐ(Geometry), ์žฌ์งˆ(Material), ๋ Œ๋”๋Ÿฌ ๋“ฑ์˜ ์ถ”์ƒํ™”๋œ ๊ฐ์ฒด๋ฅผ ์ œ๊ณตํ•˜์—ฌ WebGL ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. **2. WebGL์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์ž์› ๊ด€๋ฆฌ (๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ํ•œ๊ณ„)** JavaScript์˜ ์ผ๋ฐ˜์ ์ธ ํž™ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ฌ๋ฆฌ, WebGL์ด ์‚ฌ์šฉํ•˜๋Š” GPU ์ž์›(VRAM์— ์˜ฌ๋ผ๊ฐ„ ํ…์Šค์ฒ˜, ๊ธฐํ•˜๊ตฌ์กฐ, ์žฌ์งˆ, ๋ Œ๋” ํƒ€๊ฒŸ ๋“ฑ)์€ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC)์— ์˜ํ•ด ์ž๋™์œผ๋กœ ํšŒ์ˆ˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ฌ๊ฐํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ GPU ํฌ๋ž˜์‹œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด, ์‚ฌ์šฉ์ด ๋๋‚œ ์ž์›์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ์ ์œผ๋กœ `.dispose()` ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. GLTF ๋ชจ๋ธ์—์„œ ๋กœ๋“œ๋œ `ImageBitmap` ํ…์Šค์ฒ˜์˜ ๊ฒฝ์šฐ `.close()` ํ˜ธ์ถœ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **3. ์„ฑ๋Šฅ ์ตœ์ ํ™”์™€ ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)** WebGL ๋ Œ๋”๋ง์˜ ์ฃผ๋œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์€ CPU๊ฐ€ GPU์—๊ฒŒ ๊ทธ๋ฆฌ๊ธฐ ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” **'๋“œ๋กœ์šฐ ์ฝœ(Draw Call)'**์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋“œ๋Ÿฌ์šด 60FPS๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ํ™ฉ๊ธˆ๋ฅ ์€ ํ”„๋ ˆ์ž„๋‹น ๋“œ๋กœ์šฐ ์ฝœ์„ 100ํšŒ ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๊ฐœ์˜ ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆด ๋•Œ๋Š” ๊ฐœ๋ณ„ ๋ฉ”์‹œ(Mesh)๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๋‹จ 1ํšŒ์˜ ๋“œ๋กœ์šฐ ์ฝœ๋งŒ์œผ๋กœ GPU ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด๋ฅผ ๋ณต์ œํ•˜๋Š” `InstancedMesh` ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ WebGL ํ™˜๊ฒฝ์˜ ์…ฐ์ด๋”์—์„œ๋Š” `mediump` ์ •๋ฐ€๋„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ ์„ฑ๋Šฅ์„ 2๋ฐฐ๊ฐ€๋Ÿ‰ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **4. OffscreenCanvas๋ฅผ ํ†ตํ•œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ถ„๋ฆฌ** ๋ณต์žกํ•œ WebGL 3D ์”ฌ ์—ฐ์‚ฐ์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ๋ธ”๋กœํ‚นํ•˜์—ฌ ์‚ฌ์šฉ์ž UI์˜ ๋ฐ˜์‘์„ฑ์„ ํฌ๊ฒŒ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `OffscreenCanvas` API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ WebGL ๋ Œ๋”๋ง ์ปจํ…์ŠคํŠธ๋ฅผ DOM์—์„œ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ , **์›น ์›Œ์ปค(Web Worker)**๋ผ๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ WebGL์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฌด๊ฑฐ์šด ๊ทธ๋ž˜ํ”ฝ ์—ฐ์‚ฐ ์ค‘์—๋„ UI๊ฐ€ ๋งค๋„๋Ÿฝ๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. **5. ์ฐจ์„ธ๋Œ€ WebGPU์™€์˜ ๊ณต์กด๊ณผ TSL** ํ˜„์žฌ WebGL 2๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ 97% ์ด์ƒ์„ ์ปค๋ฒ„ํ•˜๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ด๊ณ  ๋„๋ฆฌ ์“ฐ์ด๋Š” ํ‘œ์ค€์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜์‹ญ๋งŒ ๊ฐœ์˜ ์ž…์ž๋ฅผ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ๊ณ ์„ฑ๋Šฅ ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shaders) ๊ธฐ๋Šฅ์˜ ๋ถ€์žฌ๋กœ ์ธํ•ด, ์ฐจ์„ธ๋Œ€ ๊ทธ๋ž˜ํ”ฝ์Šค API์ธ **WebGPU**๋กœ ์ „ํ™˜๋˜๋Š” ์ถ”์„ธ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€์‘ํ•˜์—ฌ ์ตœ์‹  Three.js๋Š” **TSL (Three Shader Language)**์ด๋ผ๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์…ฐ์ด๋” ์‹œ์Šคํ…œ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. TSL๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” WebGPU์šฉ WGSL๊ณผ WebGL์šฉ GLSL๋กœ ๋™์‹œ ์ปดํŒŒ์ผ๋˜๋ฉฐ, WebGPU๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” **์ž๋™์œผ๋กœ WebGL 2๋กœ ํด๋ฐฑ(Fallback)**๋˜๋„๋ก ์„ค๊ณ„๋˜์–ด ํ˜ธํ™˜์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ๋ชจ๋‘ ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Three.js]], [[React Three Fiber (R3F)]], [[WebGPU Compute Shaders]], [[OffscreenCanvas]], [[InstancedMesh (๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™”)]], [[Memory Leak Prevention (๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€)]] - **Projects/Contexts:** [[๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜ 3D ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ๋””์ง€ํ„ธ ํŠธ์œˆ]], [[๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜ ๊ณ ์„ฑ๋Šฅ ์›น ๊ฒŒ์ž„ ์—”์ง„]] - **Contradictions/Notes:** WebGL ํŒŒ์ดํ”„๋ผ์ธ์—์„œ `EffectComposer` ๋“ฑ์„ ํ™œ์šฉํ•ด ์ปค์Šคํ…€ ํ›„์ฒ˜๋ฆฌ(Post-processing)๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ, WebGL์˜ ๋‚ด์žฅ ์•ˆํ‹ฐ์•จ๋ฆฌ์–ด์‹ฑ(AA) ๊ธฐ๋Šฅ์ด ๋ฌดํšจํ™”๋˜๋Š” ์ œ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ํŒŒ์ดํ”„๋ผ์ธ ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„์— SMAA๋‚˜ FXAA ํšจ๊ณผ ํŒจ์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ถ”๊ฐ€ํ•ด ์ฃผ์–ด์•ผ ์‹œ๊ฐ์  ํ’ˆ์งˆ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. - Raw Source: [[00_Raw/2026-04-20/WebGL.md]] ---