--- id: P-REINFORCE-AUTO-8E841B category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Threejs ๋Œ€๊ทœ๋ชจ ๋ Œ๋”๋ง ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ" --- # [[Threejs แ„ƒแ…ขแ„€แ…ฒแ„†แ…ฉ แ„…แ…ฆแ†ซแ„ƒแ…ฅแ„…แ…ตแ†ผ แ„Žแ…ฌแ„Œแ…ฅแ†จแ„’แ…ช แ„‘แ…กแ„‹แ…ตแ„‘แ…ณแ„…แ…กแ„‹แ…ตแ†ซ|Threejs ๋Œ€๊ทœ๋ชจ ๋ Œ๋”๋ง ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > Three.js ๋Œ€๊ทœ๋ชจ ๋ Œ๋”๋ง ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ์€ ์ˆ˜๋งŽ์€ 3D ๊ฐ์ฒด๋ฅผ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ๋งค๋„๋Ÿฝ๊ฒŒ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด CPU์™€ GPU ๊ฐ„์˜ ํ†ต์‹  ์˜ค๋ฒ„ํ—ค๋“œ, ์ฆ‰ ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ๊ทน๋ณตํ•˜๋Š” ์ผ๋ จ์˜ ๊ธฐ์ˆ ์  ์•„ํ‚คํ…์ฒ˜์ž…๋‹ˆ๋‹ค [1, 2]. ์ฃผ๋กœ InstancedMesh์™€ BatchedMesh๋ฅผ ํ†ตํ•œ ๋“œ๋กœ์šฐ ์ฝœ ์ตœ์†Œํ™”, Draco ๋ฐ KTX2 ๋“ฑ์„ ์ด์šฉํ•œ ์—์…‹ ์••์ถ•, ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling) ๋ฐ LOD ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•˜์—ฌ ๊ทธ๋ž˜ํ”ฝ ์ž์›์˜ ๋‚ญ๋น„๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค [3-6]. ์ตœ๊ทผ์—๋Š” WebGPU์™€ ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shader)๊ฐ€ ๋„์ž…๋˜์–ด ๋ Œ๋”๋ง ์ œ์–ด ๋ฐ ๊ฐ€์‹œ์„ฑ ํŒ๋‹จ ์—ฐ์‚ฐ์„ GPU๋กœ ๋Œ€๊ฑฐ ์ด๊ด€ํ•จ์œผ๋กœ์จ, ๋”์šฑ ๋ง‰๋Œ€ํ•œ ๊ทœ๋ชจ์˜ ์”ฌ์„ ์œ ์—ฐํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ฐจ์„ธ๋Œ€ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [7-9]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) - **๋“œ๋กœ์šฐ ์ฝœ(Draw Call) ์ตœ์†Œํ™” ์ „๋žต:** ์‹ค์‹œ๊ฐ„ ๋ Œ๋”๋ง ์„ฑ๋Šฅ์„ ์ €ํ•˜์‹œํ‚ค๋Š” ๊ฐ€์žฅ ๊ฒฐ์ •์ ์ธ ์š”์ธ์€ CPU๊ฐ€ ๋ Œ๋”๋ง ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  GPU์— ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๋“œ๋กœ์šฐ ์ฝœ์˜ ์˜ค๋ฒ„ํ—ค๋“œ์ž…๋‹ˆ๋‹ค [2, 10]. ์›ํ™œํ•œ 60fps๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ํ”„๋ ˆ์ž„๋‹น ๋“œ๋กœ์šฐ ์ฝœ์„ 100ํšŒ ๋ฏธ๋งŒ์œผ๋กœ ํƒ€๊ฒŸํŒ…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4, 11]. ์ด๋ฅผ ์œ„ํ•ด ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ์™€ ์žฌ์งˆ์„ ๊ณต์œ ํ•˜๋Š” ๊ฐ์ฒด๋Š” `InstancedMesh`๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ˆ˜์ฒœ ๊ฐœ๋ฅผ ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ [4, 5, 12], ์žฌ์งˆ์€ ๊ฐ™์œผ๋‚˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋“ค์€ `BatchedMesh`๋ฅผ ํ†ตํ•ด ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [13-15]. ์ •์ ์ธ ๋ฐฐ๊ฒฝ์ด๋‚˜ ํ™˜๊ฒฝ ๋ชจ๋ธ์€ `BufferGeometryUtils`๋ฅผ ์‚ฌ์šฉํ•ด ํ•˜๋‚˜์˜ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋กœ ๋ณ‘ํ•ฉ(Merging)ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [13, 16]. - **๊ฐ€์‹œ์„ฑ ํŒ๋‹จ(Culling) ๋ฐ ์ •๋ ฌ ํ•œ๊ณ„ ๊ทน๋ณต:** `InstancedMesh`๋Š” ์—”์ง„ ๋‚ด๋ถ€์—์„œ ๋‹จ์ผ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ๋ณธ ์ ˆ๋‘์ฒด ์ปฌ๋ง์ด ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” '์ „๋ถ€ ์•„๋‹ˆ๋ฉด ์ „๋ฌด' ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค [17]. ์ด๋กœ ์ธํ•ด ํ™”๋ฉด ๋ฐ–์˜ ๊ฐ์ฒด๊นŒ์ง€ ์ •์  ์—ฐ์‚ฐ์ด ๊ฐ•์ œ๋˜๊ณ , ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์ž๋™ ์ •๋ ฌ์˜ ๋ถ€์žฌ๋กœ ์ธํ•ด ๋ง‰๋Œ€ํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw) ํ˜„์ƒ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [18, 19]. ์ด์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด BVH(Bounding Volume Hierarchy)๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค ๋‹จ์œ„์˜ ๊ฐœ๋ณ„ ์ปฌ๋ง๊ณผ ์ •๋ ฌ์„ ์ง€์›ํ•˜๋Š” ํ™•์žฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: `InstancedMesh2`)๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ [20-22], ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๋ชจ๋ธ ํ•ด์ƒ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” LOD(Level of Detail) ๊ธฐ๋ฒ•์„ ํ•จ๊ป˜ ์ ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ๋Ÿ‰์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค [6, 11, 23]. - **๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ๋ฐ ์—์…‹ ์ตœ์ ํ™”:** ๋Œ€ํ˜• ์–ด์…ˆ๋ธ”๋ฆฌ ๋ชจ๋ธ์ด๋‚˜ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ์˜ VRAM ๊ณ ๊ฐˆ๊ณผ ๋Œ€์—ญํญ ํ•œ๊ณ„๋ฅผ ๋ง‰๋Š” ๊ฒƒ์€ ํŒŒ์ดํ”„๋ผ์ธ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. Draco ์••์ถ•์„ ํ†ตํ•ด ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ๋Œ€ 95%๊นŒ์ง€ ์ถ•์†Œ์‹œํ‚ค๊ณ  [3, 24], KTX2๋‚˜ Basis Universal ํฌ๋งท์„ ์ ์šฉํ•˜์—ฌ ํ…์Šค์ฒ˜๊ฐ€ ์••์ถ•๋œ ์ƒํƒœ๋กœ GPU ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์ฃผํ•˜๋„๋ก ๋งŒ๋“ค์–ด ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋น„๋ฅผ ์•ฝ 10๋ฐฐ ์ ˆ๊ฐํ•ฉ๋‹ˆ๋‹ค [3, 25]. ๋˜ํ•œ ๋‹ค์–‘ํ•œ ์žฌ์งˆ์˜ ํ…์Šค์ฒ˜๋ฅผ ํ•˜๋‚˜์˜ ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋‚˜ ๋ฐฐ์—ด ํ…์Šค์ฒ˜(Data Array Textures)๋กœ ๊ฒฐํ•ฉํ•˜๋ฉด ํ…์Šค์ฒ˜ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ์ธํ•œ ์ƒํƒœ ๋ณ€๊ฒฝ ๋น„์šฉ์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [26-29]. - **WebGPU ๊ธฐ๋ฐ˜ ์ฐจ์„ธ๋Œ€ ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ:** 2026๋…„ ๊ธฐ์ค€, Three.js(r171 ์ด์ƒ)์˜ `WebGPURenderer` ๋ฐ TSL(Three Shader Language) ๋„์ž…์œผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ Œ๋”๋ง ๊ตฌ์กฐ๊ฐ€ ํ˜์‹ ์ ์œผ๋กœ ๋ณ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค [7, 30]. ์ผ๋ฐ˜์ ์ธ CPU ํ•œ๊ณ„๋ฅผ ์ดˆ๊ณผํ•˜๋˜ 100๋งŒ ๊ฐœ ์ด์ƒ์˜ ํŒŒํ‹ฐํด ์—ฐ์‚ฐ, ๋ฌผ๋ฆฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜, ๋ณต์žกํ•œ ๊ตฐ์ค‘ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ์„ ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shader)๋ฅผ ํ†ตํ•œ GPU-driven Rendering์œผ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [31-34]. Native WebGPU ์ˆ˜์ค€์—์„œ๋Š” `GPURenderBundles` ๋ฐ Indirect Drawing ๊ธฐ์ˆ ์„ ํ†ตํ•ด 500MB ์ด์ƒ์˜ ์ดˆ๋Œ€ํ˜• ๊ฑด์„ค/BIM ๋ฐ์ดํ„ฐ์…‹์—์„œ๋„ ๊ฐ•๋ ฅํ•œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋Œ์–ด๋ƒ…๋‹ˆ๋‹ค [35, 36]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** `[[InstancedMesh|InstancedMesh]]`, `[[BatchedMesh|BatchedMesh]]`, `[[WebGPU|WebGPU]]`, `Draw Call (๋“œ๋กœ์šฐ ์ฝœ)`, `Frustum Culling (์ ˆ๋‘์ฒด ์ปฌ๋ง)`, `[[แ„€แ…กแ„‡แ…งแ†ซแ„Œแ…ฅแ†จ LOD(Level of Detail) แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท|LOD (Level of Detail)]]`, `Overdraw (์˜ค๋ฒ„๋“œ๋กœ์šฐ)`, `Compute Shader (์ปดํ“จํŠธ ์…ฐ์ด๋”)` - **Projects/Contexts:** `InstancedMesh2 (agargaro)`, `Three.js r171 WebGPURenderer`, `[[Segments.ai|Segments.ai]]`, `Fragment (IFC.js)` - **Contradictions/Notes:** - `InstancedMesh`๋Š” ๋“œ๋กœ์šฐ ์ฝœ์„ ์ค„์—ฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ค๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋‚˜, ๋ถˆํˆฌ๋ช…๋„ ๋ฐ ๋ณต์žกํ•œ ์…ฐ์ด๋” ํ™˜๊ฒฝ์—์„œ๋Š” ์ธ์Šคํ„ด์Šค ์ •๋ ฌ ๋ถ€์žฌ๋กœ ์ธํ•œ ์‹ฌ๊ฐํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw)๋ฅผ ์œ ๋ฐœํ•ด ์ผ๋ฐ˜ ๊ฐœ๋ณ„ Mesh(Shared attributes)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋ณด๋‹ค ํ”„๋ ˆ์ž„ ๋ ˆ์ดํŠธ(FPS)๊ฐ€ ์˜คํžˆ๋ ค ๋‚ฎ์•„์ง€๋Š” ์—ญ์„ค์ ์ธ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [18, 19]. - `BatchedMesh` ์—ญ์‹œ ๋‹ค์ˆ˜์˜ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ์œ ์šฉํ•œ ๊ธฐ์ˆ ์ด์ง€๋งŒ, ์•ฝ 20๋งŒ ๊ฐœ ์ˆ˜์ค€์˜ ๋Œ€๋Ÿ‰ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์— ์ ์šฉํ•  ์‹œ ๋ฒ„ํผ ๋ฐ์ดํ„ฐ ์—…๋กœ๋“œ ๋“ฑ์˜ ์ด์œ ๋กœ CPU ์‚ฌ์šฉ๋Ÿ‰์ด 30~50% ๊ธ‰์ฆํ•˜๋ฉฐ ๋ณ‘ํ•ฉ๋œ ๊ธฐํ•˜ํ•™(Merged Geometry)๋ณด๋‹ค ํ˜„์ €ํžˆ ์„ฑ๋Šฅ์ด ํ•˜๋ฝํ•˜๋Š” ๊ตฌ์กฐ์  ๋ณ‘๋ชฉ์ด ์ œ๊ธฐ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค [37-39]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Three.js ๋Œ€๊ทœ๋ชจ ๋ Œ๋”๋ง ์ตœ์ ํ™” ํŒŒ์ดํ”„๋ผ์ธ.md ---