--- id: P-REINFORCE-AUTO-FE50FB category: "10_Wiki/๐Ÿ’ก Topics/AI" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Threejs WebGL ๋ Œ๋”๋ง ์ตœ์ ํ™”" --- # [[Threejs WebGL แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช|Threejs WebGL ๋ Œ๋”๋ง ์ตœ์ ํ™”]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > Three.js WebGL ๋ Œ๋”๋ง ์ตœ์ ํ™”๋Š” ์ฃผ๋กœ CPU์™€ GPU ๊ฐ„์˜ ํ†ต์‹  ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•˜๋Š” ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)์„ ์ค„์ด๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๋ Œ๋”๋ง ์—ฐ์‚ฐ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์ž…๋‹ˆ๋‹ค [1-6]. ์ด๋ฅผ ์œ„ํ•ด ์ธ์Šคํ„ด์‹ฑ(Instancing), ๋ฐฐ์นญ(Batching), ๊ธฐํ•˜ํ•™์  ๋ณ‘ํ•ฉ, ํ…์Šค์ฒ˜/๋ชจ๋ธ ์••์ถ• ๋ฐ LOD(Level of Detail)์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์ด ๋ณตํ•ฉ์ ์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [7-12]. ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ํ”„๋ ˆ์ž„ ์†๋„๋ฅผ ๋ฐฉ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ฐ ๊ธฐ๋ฒ•์€ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling) ์ •๋ฐ€๋„ ์ €ํ•˜๋‚˜ ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw) ์œ ๋ฐœ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์  ํ•œ๊ณ„์™€ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์”ฌ(Scene)์˜ ํŠน์„ฑ์— ๋งž๋Š” ์ „๋žต์  ์ ‘๊ทผ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค [13-17]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **๋“œ๋กœ์šฐ ์ฝœ(Draw Call) ์ตœ์†Œํ™” ์ „๋žต** * **๋“œ๋กœ์šฐ ์ฝœ์˜ ๋ณ‘๋ชฉ:** ๋“œ๋กœ์šฐ ์ฝœ์€ CPU๊ฐ€ GPU์— ๋ Œ๋”๋ง ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ธฐํ•˜ํ•™์  ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฆฌ๋„๋ก ์ง€์‹œํ•˜๋Š” ๋ช…๋ น์œผ๋กœ, ์›ํ™œํ•œ 60fps ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ๋Š” ํ”„๋ ˆ์ž„๋‹น 100๊ฐœ ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [3, 9, 18, 19]. ํด๋ฆฌ๊ณค ์ˆ˜๋ณด๋‹ค ๋“œ๋กœ์šฐ ์ฝœ์˜ ์ˆ˜๊ฐ€ CPU๋ฅผ ๋งˆ๋น„์‹œํ‚ค๋Š” ์ฃผ๋œ ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค [5]. * **InstancedMesh:** ๋™์ผํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์™€ ์žฌ์งˆ์„ ๊ณต์œ ํ•˜๋Š” ๋‹ค์ˆ˜์˜ ๊ฐ์ฒด๋ฅผ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค [9, 20]. ๋ Œ๋”๋ง ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ ํฌ๊ฒŒ ๋†’์ด์ง€๋งŒ, ์—”์ง„ ๋ ˆ๋ฒจ์—์„œ ์ „์ฒด ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋‹จ์ผ ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ณ„ ๊ฐ์ฒด์˜ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling)์ด ๋ถˆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค [13, 21]. ๋˜ํ•œ ๋ Œ๋”๋ง ์ˆœ์„œ ์ž๋™ ์ •๋ ฌ์ด ๋˜์ง€ ์•Š์•„ ํ”ฝ์…€ ์ค‘๋ณต ์—ฐ์‚ฐ(Overdraw)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์Šคํ‚จ๋“œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ์ด ๋งค์šฐ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค [15, 16, 22]. * **BatchedMesh:** ๋™์ผํ•œ ์žฌ์งˆ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค์„ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [10, 23-27]. ์ธ์Šคํ„ด์Šค๋ณ„ ์ปฌ๋ง ๋ฐ ๊ฐ€์‹œ์„ฑ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜์—ฌ ๋‹ค์–‘์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๋‚ด๋ถ€์ ์ธ ์ •๋ ฌ(Sorting)๊ณผ ์ปฌ๋ง ๊ณผ์ •์—์„œ ๋ง‰๋Œ€ํ•œ CPU ๋ถ€ํ•˜๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ์˜คํžˆ๋ ค ํ”„๋ ˆ์ž„์ด ํ•˜๋ฝํ•˜๋Š” ์‚ฌ๋ก€๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค [27-30]. * **Geometry ๋ณ‘ํ•ฉ(Merging):** ์›€์ง์ด์ง€ ์•Š๋Š” ์ •์ ์ธ ํ™˜๊ฒฝ ์š”์†Œ๋Š” `BufferGeometryUtils`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋กœ ๋ณ‘ํ•ฉํ•˜๋ฉด ๋“œ๋กœ์šฐ ์ฝœ์„ ํšจ๊ณผ์ ์œผ๋กœ 1ํšŒ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10, 31, 32]. **์—์…‹ ๋ฐ์ดํ„ฐ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ** * **๋ฐ์ดํ„ฐ ์••์ถ•:** Draco ์••์ถ•์„ ์ ์šฉํ•˜์—ฌ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ๋Œ€ 90-95% ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 12, 18]. ํ…์Šค์ฒ˜๋Š” KTX2 ๋ฐ Basis Universal ํ˜•์‹์œผ๋กœ ์••์ถ•ํ•˜์—ฌ VRAM ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ์œจ์„ PNG ๋Œ€๋น„ ์•ฝ 75~90% ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 18, 33, 34]. * **LOD (Level of Detail):** ์นด๋ฉ”๋ผ์™€์˜ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ํด๋ฆฌ๊ณค ์ˆ˜๊ฐ€ ์ ์€ ๋ฉ”์‰ฌ๋กœ ๊ต์ฒดํ•˜๊ฑฐ๋‚˜ ์›๊ฒฝ์˜ ๊ฐ์ฒด๋ฅผ ์ž„ํฌ์Šคํ„ฐ(Billboard Impostor)๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์—ฐ์‚ฐ๋Ÿ‰์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [8, 11, 19, 35, 36]. * **๋ช…์‹œ์  ๋ฆฌ์†Œ์Šค ํ•ด์ œ:** Three.js๋Š” GPU ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํŒ…ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌ์šฉ์ด ๋๋‚œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ, ์žฌ์งˆ, ํ…์Šค์ฒ˜, ๋ Œ๋” ํƒ€๊ฒŸ์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ `.dispose()`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ GPU ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [37-40]. **์…ฐ์ด๋”, ๋ผ์ดํŒ… ๋ฐ ํฌ์ŠคํŠธ ํ”„๋กœ์„ธ์‹ฑ ์ตœ์ ํ™”** * ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋‚˜ ๋ฐฐ์—ด ํ…์Šค์ฒ˜(Data Array Textures)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์žฌ์งˆ์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜๋ฉด, ์žฌ์งˆ ์Šค์œ„์นญ์œผ๋กœ ์ธํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [26, 41-44]. * ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ๋Š” ์…ฐ์ด๋” ์ •๋ฐ€๋„๋ฅผ `mediump`๋กœ ์„ค์ •ํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋†’์ด๊ณ , ๋ถ„๊ธฐ๋ฌธ(Branching/Conditionals) ๋Œ€์‹  `mix()` ๋ฐ `step()`์„ ํ™œ์šฉํ•˜๋ฉฐ, ๋™์  ๋ฃจํ”„๋ฅผ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [45, 46]. * ๋ณต์žกํ•œ ์”ฌ์—์„œ๋Š” Depth Pre-Pass ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•˜์—ฌ ๋ณด์ด์ง€ ์•Š๋Š” ํ”„๋ž˜๊ทธ๋จผํŠธ์— ๋Œ€ํ•œ ๋ฌด๊ฑฐ์šด ์…ฐ์ด๋” ์—ฐ์‚ฐ(์˜ค๋ฒ„๋“œ๋กœ์šฐ)์„ ์‚ฌ์ „์— ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [47, 48]. * ์ •์  ์”ฌ์—์„œ๋Š” ๋ผ์ดํŠธ๋งต๊ณผ ๊ทธ๋ฆผ์ž๋ฅผ ๋Ÿฐํƒ€์ž„ ์ด์ „์— ๋ฒ ์ดํฌ(Bake)ํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์—ฐ์‚ฐ์„ ํ”ผํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค [49]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** AI ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** ๋“œ๋กœ์šฐ ์ฝœ (Draw Call), [[InstancedMesh|InstancedMesh]], [[BatchedMesh|BatchedMesh]], [[แ„€แ…กแ„‡แ…งแ†ซแ„Œแ…ฅแ†จ LOD(Level of Detail) แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท|LOD (Level of Detail)]], [[Frustum Culling|Frustum Culling]], Draco ์••์ถ•, [[Texture Atlas|Texture Atlas]], [[WebGPU|WebGPU]] - **Projects/Contexts:** Utsubo Three.js Optimization Tips (2026), InstancedMesh2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Threedium Image-To-3D WebGL ํŒŒ์ดํ”„๋ผ์ธ, Three.js Roadmap: Draw Calls - **Contradictions/Notes:** - `InstancedMesh`๋Š” ๋“œ๋กœ์šฐ ์ฝœ์„ ํ˜์‹ ์ ์œผ๋กœ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ์ž๋™ ์ •๋ ฌ ๊ธฐ๋Šฅ์ด ์—†๊ณ  ์ „์ฒด๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์— ์”ฌ ๋‚ด ๊ฐ์ฒด๋“ค์ด ์ค‘์ฒฉ๋  ๊ฒฝ์šฐ ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜์—ฌ, 1ํšŒ ๋“œ๋กœ์šฐ ์ฝœ์ž„์—๋„ ๋‹ค์ˆ˜์˜ ๊ฐœ๋ณ„ ๋ฉ”์‰ฌ๋ฅผ ๋ Œ๋”๋งํ•  ๋•Œ๋ณด๋‹ค ์˜คํžˆ๋ ค ํ”„๋ ˆ์ž„๋ฅ (FPS)์ด ๋‚ฎ์•„์ง€๋Š” ๊ธฐํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13-16, 50]. - `BatchedMesh`๋Š” ์—ฌ๋Ÿฌ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ชจ์•„์ฃผ์–ด ํšจ์œจ์ ์ธ ๊ฒƒ์œผ๋กœ ์†Œ๊ฐœ๋˜๋‚˜, ๊ฐ์ฒด์˜ ๊ฐ€์‹œ์„ฑ์„ ํ™•์ธํ•˜๊ณ  ๋ Œ๋”๋ง ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์—ฐ์‚ฐ ๋น„์šฉ์ด ์ปค ํŠน์ • ๋‹ค๋Ÿ‰์˜ ๊ฐ์ฒด ๋ Œ๋”๋ง ์”ฌ์—์„œ๋Š” ๋ณ‘ํ•ฉ ๋ฉ”์‰ฌ(Merged Mesh)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค CPU ์‚ฌ์šฉ๋Ÿ‰์„ ์น˜์†Ÿ๊ฒŒ ๋งŒ๋“ค๊ณ  30~50% ๋” ๋‚ฎ์€ FPS๋ฅผ ๊ธฐ๋กํ•˜๋Š” ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ณด๊ณ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [28-30, 51, 52]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Three.js WebGL ๋ Œ๋”๋ง ์ตœ์ ํ™”.md ---