--- id: P-REINFORCE-AUTO-4EE7A9 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 ๊ฐ„์˜ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์ค„์ด๊ณ  ํ•˜๋“œ์›จ์–ด ์ž์›์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์ผ๋ จ์˜ ๊ธฐ๋ฒ•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ๋ชฉํ‘œ๋Š” CPU ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๋“œ๋กœ์šฐ ์ฝœ(Draw Call) ํšŸ์ˆ˜๋ฅผ ํ”„๋ ˆ์ž„๋‹น 100ํšŒ ๋ฏธ๋งŒ์œผ๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด ์ธ์Šคํ„ด์‹ฑ(Instancing)๊ณผ ๋ฐฐ์นญ(Batching) ๊ฐ™์€ ๊ธฐ์ˆ ์ด ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [1-5]. ๋˜ํ•œ, ์—์…‹ ์••์ถ•, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์…ฐ์ด๋” ๋ฐ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง(Frustum Culling) ์กฐ์ •, WebGPU์™€ ์ปดํ“จํŠธ ์…ฐ์ด๋”์˜ ๋„์ž… ๋“ฑ์„ ํ†ตํ•ด ์ „๋ฐ˜์ ์ธ ์—ฐ์‚ฐ ๋ถ€ํ•˜๋ฅผ ๋‹ค๊ฐ๋„๋กœ ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค [1, 6-8]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **๋“œ๋กœ์šฐ ์ฝœ(Draw Call) ์ตœ์ ํ™”** * **InstancedMesh:** ๋™์ผํ•œ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ(Geometry)์™€ ์žฌ์งˆ(Material)์„ ๊ฐ€์ง„ ์ˆ˜์ฒœ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋‹จ ํ•œ ๋ฒˆ์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ Œ๋”๋งํ•˜์—ฌ CPU-GPU ๊ฐ„ ๋ช…๋ น ๋ฐœํ–‰ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋Œ€ํญ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค [2, 9-11]. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ๋‹จ์ผ ์‹œ์•ผ ์ ˆ๋‘์ฒด ์ปฌ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ํ™”๋ฉด ๋ฐ–์˜ ๊ฐ์ฒด๊นŒ์ง€ ์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊นŠ์ด ์ •๋ ฌ์ด ์ž๋™ ์ง€์›๋˜์ง€ ์•Š์•„ ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw)๋กœ ์ธํ•œ ํ”„๋ž˜๊ทธ๋จผํŠธ ์…ฐ์ด๋” ๋ณ‘๋ชฉ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [12-15]. * **BatchedMesh:** ์žฌ์งˆ์€ ๋™์ผํ•˜์ง€๋งŒ ๊ธฐํ•˜ํ•™์  ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ๋ฌถ์–ด ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค [16-19]. ๋ณต์žกํ•˜๊ณ  ์ด์งˆ์ ์ธ ๋ถ€ํ’ˆ์ด ๋งŽ์€ ๋ชจ๋ธ์— ์œ ์šฉํ•˜์ง€๋งŒ, ์ •๋ ฌ(Sorting) ๋ฐ ๊ฐœ๋ณ„ ๊ฐ์ฒด ์ปฌ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ณผ์ •๊ณผ ๋ฉ€ํ‹ฐ ๋“œ๋กœ์šฐ(`multiDrawElementsWEBGL`) API์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์ •์  ์ˆ˜๊ฐ€ ๋งค์šฐ ๋งŽ์€ ์ƒํ™ฉ์—์„œ๋Š” CPU ์ ์œ ์œจ์ด 40~60%๊นŒ์ง€ ์น˜์†Ÿ๊ณ  ํ”„๋ ˆ์ž„๋ฅ ์ด ๊ธ‰๋ฝํ•˜๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [19-22]. * **์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ (Geometry Merging):** ์›€์ง์ด์ง€ ์•Š๋Š” ์ •์ ์ธ ๊ฐ์ฒด๋“ค์€ ๋กœ๋”ฉ ์‹œ์ ์— `BufferGeometryUtils`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๋ฉ”์‰ฌ๋กœ ๋ณ‘ํ•ฉํ•จ์œผ๋กœ์จ ๋“œ๋กœ์šฐ ์ฝœ์„ 1ํšŒ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [16, 23-25]. ํ•˜์ง€๋งŒ ์ด๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ํฌ๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ๊ฐœ๋ณ„ ๊ฐ์ฒด์˜ ์ œ์–ด๋‚˜ ์ปฌ๋ง์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง€๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค [23-25]. * **์—์…‹ ์••์ถ• ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ** * ๋ชจ๋ธ์˜ ๊ธฐํ•˜ํ•™์  ์šฉ๋Ÿ‰์„ 90-95% ์ค„์—ฌ์ฃผ๋Š” Draco ์••์ถ•๊ณผ, VRAM ๋‚ด์—์„œ ์••์ถ• ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด ํ…์Šค์ฒ˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๋Œ€ํญ ์ค„์—ฌ์ฃผ๋Š” KTX2 ๋˜๋Š” Basis Universal ํ…์Šค์ฒ˜ ํฌ๋งท ์‚ฌ์šฉ์ด ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค [3, 26-29]. * Three.js๋Š” GPU ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํŠธํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌ์šฉ์ด ๋๋‚œ `geometry`, `material`, `texture` ๋ฐ ๋ Œ๋” ํƒ€๊ฒŸ์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ `.dispose()`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [30-33]. * **์‹œ๊ฐ์  ์ตœ์ ํ™” ๋ฐ ์…ฐ์ด๋” ๊ธฐ๋ฒ•** * **LOD (Level of Detail):** ์นด๋ฉ”๋ผ์™€์˜ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๊ฐ์ฒด๋ฅผ ๋‹จ์ˆœํ•œ ํด๋ฆฌ๊ณค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ž„ํฌ์Šคํ„ฐ(Billboard Impostor)๋กœ ๊ต์ฒดํ•˜์—ฌ ํ”„๋ž˜๊ทธ๋จผํŠธ ์—ฐ์‚ฐ ๋น„์šฉ๊ณผ ์‚ผ๊ฐํ˜• ์ˆ˜๋ฅผ ๊ทน์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [7, 34-37]. ๋‹จ, LOD๋Š” ๋“œ๋กœ์šฐ ์ฝœ ์ž์ฒด๋ฅผ ์ค„์—ฌ์ฃผ์ง€๋Š” ์•Š์œผ๋ฏ€๋กœ ๋ณ‘๋ชฉ์˜ ์›์ธ์— ๋งž์ถฐ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [38]. * ๋‹ค์ˆ˜์˜ ํ…์Šค์ฒ˜ ๋ฐ”์ธ๋”ฉ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ…์Šค์ฒ˜๋ฅผ ํ•œ ์ด๋ฏธ์ง€์— ๋‹ด๋Š” ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋‚˜ ์ตœ์‹ ์˜ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด ํ…์Šค์ฒ˜(Data Array Textures)๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒํƒœ ๋ณ€๊ฒฝ(State Change)์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค [39-42]. * ์—ฐ์‚ฐ๋Ÿ‰์ด ๋งŽ์€ ์กฐ๋ช…๊ณผ ๊ทธ๋ฆผ์ž๋Š” ์ •์  ์”ฌ์˜ ๊ฒฝ์šฐ ๋ผ์ดํŠธ๋งต์ด๋‚˜ ์ฃผ๋ณ€ ์ฐจํ ๋งต(AO Maps)์œผ๋กœ ์‚ฌ์ „์— ๊ตฌ์›Œ(Baking) ์—ฐ์‚ฐ์„ ์™„์ „ํžˆ ๋Œ€์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [43-45]. ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋Š” ์…ฐ์ด๋” ๋ณ€์ˆ˜ ์ •๋ฐ€๋„๋ฅผ `mediump`๋กœ ๋‚ฎ์ถฐ ์„ฑ๋Šฅ์„ 2๋ฐฐ๊ฐ€๋Ÿ‰ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [46]. * **WebGPU ์‹œ๋Œ€์˜ ๋„๋ž˜ (2026๋…„ ๊ธฐ์ค€)** * Three.js r171๋ถ€ํ„ฐ ๋„์ž…๋œ WebGPURenderer๋Š” ๋ฌด๊ฑฐ์šด ๋“œ๋กœ์šฐ ์ฝœ ํ™˜๊ฒฝ์ด๋‚˜ ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ํŒŒํ‹ฐํด ์—ฐ์‚ฐ์— ์ปดํ“จํŠธ ์…ฐ์ด๋”(Compute Shaders)๋ฅผ ์ ์šฉํ•˜์—ฌ CPU์˜ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ณ  100๋ฐฐ ์ด์ƒ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [8, 47-49]. * TSL (Three Shader Language)์„ ์‚ฌ์šฉํ•˜๋ฉด WGSL(WebGPU)๊ณผ GLSL(WebGL) ์–‘์ชฝ ๋ชจ๋‘์—์„œ ํ˜ธํ™˜๋˜๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ปค์Šคํ…€ ์…ฐ์ด๋”๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [50, 51]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** ๋“œ๋กœ์šฐ ์ฝœ (Draw Call), [[InstancedMesh|InstancedMesh]], [[BatchedMesh|BatchedMesh]], [[แ„€แ…กแ„‡แ…งแ†ซแ„Œแ…ฅแ†จ LOD(Level of Detail) แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท|LOD (Level of Detail)]], [[WebGPU|WebGPU]] - **Projects/Contexts:** Three.js r171 WebGPU ๋„์ž…, IFC.js Fragment ์•„ํ‚คํ…์ฒ˜, InstancedMesh2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - **Contradictions/Notes:** ๋‹ค์–‘ํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์— ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ˆ๋œ `BatchedMesh`๋Š” ๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™”์˜ ํ›Œ๋ฅญํ•œ ๋Œ€์•ˆ์œผ๋กœ ์†Œ๊ฐœ๋˜์ง€๋งŒ[18], ๋‹ค๋ฅธ ์†Œ์Šค์—์„œ๋Š” 1,000๋งŒ ๊ฐœ๊ฐ€ ๋„˜๋Š” ํŠธ๋ผ์ด์•ต๊ธ€ ํ™˜๊ฒฝ์—์„œ ์ธ์Šคํ„ด์‹ฑ ๋˜๋Š” ์ผ๋ฐ˜ `Merged Mesh`๋ณด๋‹ค CPU ์ ์œ ์œจ์„ ๋น„์ •์ƒ์ ์œผ๋กœ ๋†’์ด๊ณ  ํ”„๋ ˆ์ž„๋ฅ ์„ ํฌ๊ฒŒ ๋–จ์–ด๋œจ๋ฆฌ๋Š” ์‹ฌ๊ฐํ•œ ๊ตฌ์กฐ์  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ์Œ์„ ์ƒ๋ฐ˜๋˜๊ฒŒ ์ง€์ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค[19-22]. ๋˜ํ•œ `InstancedMesh` ์—ญ์‹œ ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋ฉฐ ์ •๋ ฌ์˜ ๋ถ€์žฌ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์‹ฌ๊ฐํ•œ ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw) ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ๋ฉ”์‰ฌ ๋ Œ๋”๋ง๋ณด๋‹ค ๋А๋ ค์ง€๋Š” ๋ณ‘๋ชฉ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค[13, 14]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Three.js ๋ Œ๋”๋ง ์„ฑ๋Šฅ ์ตœ์ ํ™”.md ---