# [[Three.js WebGL Rendering Optimization|Three.js WebGL Rendering Optimization]] ## ๐Ÿ“Œ Brief Summary Three.js WebGL ๋ Œ๋”๋ง ์ตœ์ ํ™”๋Š” 3D ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ”„๋ ˆ์ž„ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [1, 2]. ์ด ์ตœ์ ํ™”์˜ ํ•ต์‹ฌ์€ CPU์™€ GPU ๊ฐ„์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•˜๋Š” ๋“œ๋กœ์šฐ ์ฝœ(Draw Call) ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค [3, 4]. ์ด๋ฅผ ์œ„ํ•ด `InstancedMesh`, `BatchedMesh`, ๊ธฐํ•˜ํ•™ ๋ณ‘ํ•ฉ(Geometry Merging), ํ…์Šค์ฒ˜ ์••์ถ•, ๊ทธ๋ฆฌ๊ณ  ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling)๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•์ด ํ™œ์šฉ๋˜๋ฉฐ, 2026๋…„ ๋„์ž…๋œ WebGPU ๊ธฐ์ˆ ์€ ์ปดํ“จํŠธ ์…ฐ์ด๋”๋ฅผ ํ†ตํ•ด ๋ Œ๋”๋ง ํ•œ๊ณ„๋ฅผ ๋”์šฑ ํ™•์žฅ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค [3, 5-8]. ## ๐Ÿ“– Core Content **๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™” (Draw Call Optimization)** * CPU๊ฐ€ GPU์— ๋ Œ๋”๋ง ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋“œ๋กœ์šฐ ์ฝœ์€ ์ƒํƒœ ๋ณ€๊ฒฝ ๋ฐ ์ค€๋น„ ๊ณผ์ •์—์„œ ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [4, 9, 10]. ๋งค๋„๋Ÿฌ์šด 60fps ์„ฑ๋Šฅ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋ ˆ์ž„๋‹น ๋“œ๋กœ์šฐ ์ฝœ์„ 100ํšŒ ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [11-13]. * ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ์™€ ์žฌ์งˆ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๊ฐ€ ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๊ฐœ ๋ฐ˜๋ณต๋  ๋•Œ๋Š” ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ Œ๋”๋ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” `InstancedMesh`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค [11, 14, 15]. * ๋ฐ˜๋ฉด ์žฌ์งˆ์€ ๊ณต์œ ํ•˜์ง€๋งŒ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋“ค์„ ๋ Œ๋”๋งํ•  ๋•Œ๋Š” `BatchedMesh`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [5, 16, 17]. * ์ •์ ์ธ ํ™˜๊ฒฝ ๊ฐ์ฒด(๊ฑด๋ฌผ, ์ง€ํ˜• ๋“ฑ)๋Š” `BufferGeometryUtils`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ ์‹œ์ ์— ํ•˜๋‚˜์˜ ๊ธฐํ•˜ํ•™์œผ๋กœ ๋ณ‘ํ•ฉ(Merge)ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค [6, 16, 18]. ๋‹จ, ๋ณ‘ํ•ฉ๋œ ๊ฐ์ฒด๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์ฃผ๊ฑฐ๋‚˜ ๋…๋ฆฝ์ ์ธ ์ปฌ๋ง(Culling)์„ ์ ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [6, 18]. **๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์—์…‹ ๊ด€๋ฆฌ (Memory and Asset Management)** * Three.js๋Š” GPU ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collect)ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌ์šฉ์ด ๋๋‚œ ๊ธฐํ•˜ํ•™, ์žฌ์งˆ, ํ…์Šค์ฒ˜, ๋ Œ๋” ํƒ€๊ฒŸ์€ ๋ฐ˜๋“œ์‹œ `.dispose()`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ GPU ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์‚ญ์ œํ•ด์•ผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19-21]. * 3D ๋ชจ๋ธ์˜ ๊ธฐํ•˜ํ•™์  ๋ฐ์ดํ„ฐ๋ฅผ Draco๋กœ ์••์ถ•ํ•˜๋ฉด ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ 90~95%๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ, KTX2 (Basis Universal) ํ…์Šค์ฒ˜ ์••์ถ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ PNG ๋Œ€๋น„ GPU ๋ฉ”๋ชจ๋ฆฌ(VRAM) ์‚ฌ์šฉ๋Ÿ‰์„ ๋Œ€ํญ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12, 22-24]. * ์ˆ˜๋งŽ์€ ์ž‘์€ ํ…์Šค์ฒ˜๋“ค์€ ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋‚˜ ๋ฐฐ์—ด ํ…์Šค์ฒ˜(Data Array Texture)๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ํ…์Šค์ฒ˜ ๋ฐ”์ธ๋”ฉ ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค [25-27]. **InstancedMesh์˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„์™€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ** * **๋น„ํšจ์œจ์ ์ธ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling):** `InstancedMesh`๋Š” ๋‚ด๋ถ€์˜ ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ, ์ „์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ์„ ๊ธฐ์ค€์œผ๋กœ ์ปฌ๋ง์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [28]. ์ฆ‰, ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์‹œ์•ผ์— ์žˆ์–ด๋„ ํ™”๋ฉด ๋ฐ–์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๊ฐ•์ œ์ ์ธ ์ •์  ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜์—ฌ GPU ์ž์›์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [28, 29]. * **์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw) ๋ฐœ์ƒ:** `InstancedMesh` ๋‚ด์˜ ์ธ์Šคํ„ด์Šค๋“ค์€ ๋ Œ๋”๋ง ์ˆœ์„œ๊ฐ€ ์ž๋™ ์ •๋ ฌ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์•ž๋’ค ๊ฐ์ฒด ๊ฐ„ ์˜ค๋ฒ„๋“œ๋กœ์šฐ(๋™์ผ ํ”ฝ์…€ ์˜์—ญ์— ์ค‘๋ณต ๊ณ„์‚ฐ)๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค [30, 31]. ์ด๋Š” ๋ถˆํˆฌ๋ช… ๊ฐ์ฒด์˜ ํ”„๋ž˜๊ทธ๋จผํŠธ ๋ณ‘๋ชฉ์„ ์œ ๋ฐœํ•˜๊ณ  ํˆฌ๋ช…ํ•œ ๊ฐ์ฒด์—์„œ๋Š” ์‹ฌ๊ฐํ•œ ์‹œ๊ฐ์  ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค [31, 32]. * **๋ ˆ์ด์บ์ŠคํŒ…(Raycasting) ์ œ์•ฝ:** ์›€์ง์ด๋Š” ์ธ์Šคํ„ด์Šค๋“ค์— ๋Œ€ํ•ด ๋ ˆ์ด์บ์ŠคํŒ…์ด ์ •์ƒ ์ž‘๋™ํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค ํ–‰๋ ฌ์ด ๋ณ€๊ฒฝ๋œ ํ›„ ๋ฐ˜๋“œ์‹œ `computeBoundingSphere()`์™€ `computeBoundingBox()`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [33, 34]. **์…ฐ์ด๋”, LOD ๋ฐ WebGPU ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ** * ์นด๋ฉ”๋ผ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๊ณ ํ•ด์ƒ๋„ ๋ฉ”์‰ฌ๋ฅผ ์ €ํ•ด์ƒ๋„ ๋ฉ”์‰ฌ๋‚˜ ๋‹จ์ˆœํ•œ ์ž„ํฌ์Šคํ„ฐ(๋นŒ๋ณด๋“œ)๋กœ ๊ต์ฒดํ•˜๋Š” LOD (Level of Detail) ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋ฉด ํ”„๋ ˆ์ž„ ์†๋„๋ฅผ ํฌ๊ฒŒ ๋ฐฉ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [13, 35-37]. * ์ €์‚ฌ์–‘ ํ†ตํ•ฉ GPU ํ™˜๊ฒฝ์—์„œ๋Š” ์˜ค๋ฒ„๋“œ๋กœ์šฐ๋กœ ์ธํ•œ ํ”ฝ์…€ ์ฒ˜๋ฆฌ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋จผ์ € ๊นŠ์ด(Depth)๋งŒ ๋ Œ๋”๋งํ•œ ํ›„(์ƒ‰์ƒ ์“ฐ๊ธฐ ๋น„ํ™œ์„ฑํ™”), ์‹ค์ œ ๋ Œ๋”๋ง์—์„œ ๊นŠ์ด ํ…Œ์ŠคํŠธ๋ฅผ EQUAL๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฐ€๋ ค์ง„ ํ”ฝ์…€ ์—ฐ์‚ฐ์„ ์ƒ๋žตํ•˜๋Š” 'Depth Pre-Pass' ๊ธฐ๋ฒ•์ด ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค [38, 39]. ๋˜ํ•œ ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ Œ๋”๋ง์ธ `MeshStandardMaterial` ๋Œ€์‹  ๊ณ„์‚ฐ ๋น„์šฉ์ด ์ €๋ ดํ•œ `MeshPhongMaterial`์„ ํ™œ์šฉํ•˜๋ฉด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค [40, 41]. * 2026๋…„ ๊ธฐ์ค€, WebGL์—์„œ WebGPU(`WebGPURenderer`)๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shaders)๋ฅผ ํ™œ์šฉํ•˜์—ฌ CPU๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋˜ ๋Œ€๊ทœ๋ชจ ํŒŒํ‹ฐํด ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ, ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์—ฐ์‚ฐ ๋“ฑ์„ GPU ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ ๋„˜๊ฒจ ๋น„์•ฝ์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ(์ตœ๋Œ€ 100๋ฐฐ)์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 42-45]. ## ๐Ÿ”— Knowledge Connections - **Related Topics:** [[Draw Call|Draw Call]], [[InstancedMesh|InstancedMesh]], [[BatchedMesh|BatchedMesh]], [[Level of Detail (LOD)|Level of Detail (LOD)]], [[Frustum Culling|Frustum Culling]], [[WebGPU|WebGPU]] - **Projects/Contexts:** Segments.ai WebGPU Migration, [[InstancedMesh2 library|InstancedMesh2 Library]], Three.js WebGPURenderer (r171+) - **Contradictions/Notes:** - `BatchedMesh`๋Š” ๋‹ค์ˆ˜์˜ ๊ณ ์œ  ๊ธฐํ•˜ํ•™ ๊ฐ์ฒด๋ฅผ ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ํ›Œ๋ฅญํ•œ ์ตœ์ ํ™” ๋„๊ตฌ์ด์ง€๋งŒ [5, 16], 20๋งŒ ๊ฐœ๊ฐ€ ๋„˜๋Š” ์ˆ˜์ค€์˜ ๊ณผ๋„ํ•˜๊ฒŒ ๋งŽ์€ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์— ์ ์šฉํ•  ๊ฒฝ์šฐ ๋ฒ„ํผ์˜ draw "starts" ๋ฐ "counts" ๋ฐ์ดํ„ฐ๋ฅผ ๋งค ํ”„๋ ˆ์ž„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์˜คํžˆ๋ ค CPU ์‚ฌ์šฉ๋ฅ ์ด ํญ์ฆํ•˜๊ณ  ๊ธฐ์กด์˜ Merged Mesh ๋ฐฉ์‹๋ณด๋‹ค ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ์ €ํ•˜๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [46-49]. - `InstancedMesh`๋Š” ๋“œ๋กœ์šฐ ์ฝœ์„ ํ˜์‹ ์ ์œผ๋กœ ์ค„์—ฌ์ฃผ์ง€๋งŒ, ์ธ์Šคํ„ด์Šค๋“ค์ด ์ •๋ ฌ๋˜์ง€ ์•Š์•„ ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ๋ฅผ ์œ ๋ฐœํ•˜๋ฏ€๋กœ, ๊ฐ์ฒด๊ฐ€ ๊ฒน์น˜๋Š” ์”ฌ์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐœ๋ณ„ Mesh๋ฅผ ๊ณต์œ  ์†์„ฑ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜คํžˆ๋ ค ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ ๋” ๋–จ์–ด์ง€๋Š” ์—ญ์„ค์ ์ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [30, 31, 50]. --- *Last updated: 2026-04-19*