--- id: P-REINFORCE-AUTO-965BAB category: "10_Wiki/๐Ÿ’ก Topics/AI" 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 ์„ฑ๋Šฅ ์ตœ์ ํ™”๋Š” CPU์™€ GPU ๊ฐ„์˜ ํ†ต์‹  ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ์œ ๋ฐœํ•˜๋Š” ๋“œ๋กœ์šฐ ์ฝœ(Draw Call)์„ ์ค„์ด๊ณ  ๋ Œ๋”๋ง ํŒŒ์ดํ”„๋ผ์ธ์˜ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜์—ฌ ๋†’์€ ํ”„๋ ˆ์ž„ ์†๋„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [1-3]. ์ฃผ๋กœ `InstancedMesh` ๋ฐ `BatchedMesh`๋ฅผ ํ™œ์šฉํ•œ ์ธ์Šคํ„ด์‹ฑ/๋ฐฐ์นญ ๊ธฐ๋ฒ•, ํ…์Šค์ฒ˜์™€ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์••์ถ•, ํ”„๋Ÿฌ์Šคํ…€ ์ปฌ๋ง(Frustum Culling) ๋ฐ LOD(Level of Detail) ๊ธฐ๋ฒ•์ด ํ•ต์‹ฌ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [4-9]. ์ตœ๊ทผ์—๋Š” WebGL์˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด WebGPU์™€ ์ปดํ“จํŠธ ์…ฐ์ด๋”๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ GPU ์ฃผ๋„ ๋ Œ๋”๋ง(GPU-driven Rendering) ๊ธฐ์ˆ ๋กœ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ๋‹ค [10, 11]. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) * **๋“œ๋กœ์šฐ ์ฝœ ์ตœ์ ํ™” (Draw Call Optimization)** * ๋“œ๋กœ์šฐ ์ฝœ์€ CPU๊ฐ€ GPU์— ๋ Œ๋”๋ง ๋ช…๋ น์„ ๋‚ด๋ฆฌ๋Š” ๊ณผ์ •์œผ๋กœ, ํ”„๋ ˆ์ž„๋‹น 100๊ฐœ ์ดํ•˜๋กœ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ถ€ํ•˜๋ฅผ ๋ง‰๋Š” ํ•ต์‹ฌ ๊ทœ์น™์ด๋‹ค [1, 2, 4]. * ๋™์ผํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์™€ ์žฌ์งˆ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ Œ๋”๋งํ•  ๋•Œ๋Š” `InstancedMesh`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ๋“œ๋กœ์šฐ ์ฝœ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค [4, 6]. * ์žฌ์งˆ์€ ๊ฐ™์ง€๋งŒ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ์—๋Š” ์—ฌ๋Ÿฌ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ๋ Œ๋”๋ง ํ˜ธ์ถœ๋กœ ๋ฌถ์–ด์ฃผ๋Š” `BatchedMesh`๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค [12-14]. * ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์›€์ง์ผ ํ•„์š”๊ฐ€ ์—†๋Š” ์ •์ ์ธ ๋ฐฐ๊ฒฝ์ด๋‚˜ ํ™˜๊ฒฝ ๊ฐ์ฒด๋Š” `BufferGeometryUtils`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ ์‹œ์ ์— ํ•˜๋‚˜์˜ ๋ฉ”์‰ฌ๋กœ ๋ณ‘ํ•ฉ(Merge)ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค [12, 15]. * **์—์…‹ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ (Asset & Memory Management)** * ํ˜•์ƒ์„ ์œ ์ง€ํ•˜๋ฉฐ ํด๋ฆฌ๊ณค์„ ์ค„์ด๋Š” ๋ฐ์‹œ๋ฉ”์ด์…˜(Decimation) ์ž‘์—…์„ ๊ฑฐ์น˜๊ณ , Draco ํ™•์žฅ์„ ํ†ตํ•ด ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ตœ๋Œ€ 95%๊นŒ์ง€ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [16-18]. * ํ…์Šค์ฒ˜์˜ ๊ฒฝ์šฐ, GPU ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์••์ถ• ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” KTX2๋‚˜ Basis Universal ํฌ๋งท์„ ์‚ฌ์šฉํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋Œ€์—ญํญ ์ ์œ ์œจ์„ ํฌ๊ฒŒ ๋‚ฎ์ถฐ์•ผ ํ•œ๋‹ค [16, 19]. * ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํ…์Šค์ฒ˜๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” ๋ฐ”์ธ๋”ฉ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ํ…์Šค์ฒ˜ ์•„ํ‹€๋ผ์Šค(Texture Atlas)๋‚˜ ์—ฌ๋Ÿฌ ํ…์Šค์ฒ˜ ๋ ˆ์ด์–ด๋ฅผ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด ํ…์Šค์ฒ˜(Data Array Textures)๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค [7, 20, 21]. * Three.js๋Š” GPU ์ž์›์„ ์ž๋™์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์‚ฌ์šฉ์ด ๋๋‚œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ, ์žฌ์งˆ, ํ…์Šค์ฒ˜๋Š” ๋ฐ˜๋“œ์‹œ `.dispose()`๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค [22, 23]. * **๊ฐ€์‹œ์„ฑ ํŒ๋‹จ ๋ฐ LOD (Visibility & Level of Detail)** * ์นด๋ฉ”๋ผ์™€์˜ ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๊ณ ํ•ด์ƒ๋„ ๋ฉ”์‰ฌ๋ฅผ ์ €ํ•ด์ƒ๋„ ๋ฉ”์‰ฌ๋‚˜ ์ž„ํฌ์Šคํ„ฐ(Impostor)๋กœ ๊ต์ฒดํ•˜๋Š” LOD ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ํด๋ฆฌ๊ณค ๋ Œ๋”๋ง ๋น„์šฉ์„ ํฌ๊ฒŒ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค [8, 24-26]. * Three.js์˜ ํ”„๋Ÿฌ์Šคํ…€ ์ปฌ๋ง(Frustum Culling)์€ ํ™”๋ฉด ๋ฐ–์˜ ๊ฐ์ฒด๋ฅผ ๋ Œ๋”๋ง์—์„œ ์ œ์™ธํ•˜์ง€๋งŒ, `InstancedMesh`์˜ ๊ฒฝ์šฐ ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค๊ฐ€ ์•„๋‹Œ ์ „์ฒด ๋ฐ”์šด๋”ฉ ๋ณผ๋ฅจ์„ ๊ธฐ์ค€์œผ๋กœ ์ปฌ๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์ด์ง€ ์•Š๋Š” ๊ฐ์ฒด๊นŒ์ง€ GPU ์ •์  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [27]. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด BVH(Bounding Volume Hierarchy)์™€ ๊ฐ™์€ ๊ณต๊ฐ„ ๋ถ„ํ•  ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ GPU ์ปดํ“จํŠธ ์…ฐ์ด๋” ๊ธฐ๋ฐ˜์˜ ์ปฌ๋ง ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค [28, 29]. * **WebGPU ์ „ํ™˜ ๋ฐ GPU ์ฃผ๋„ ๋ Œ๋”๋ง (WebGPU & Compute Shaders)** * ์ „ํ†ต์ ์ธ `InstancedMesh`๋Š” ์ž๋™ ์ •๋ ฌ์˜ ๋ถ€์žฌ๋กœ ์ธํ•ด ๊นŠ์ด ์˜ค๋ฒ„๋“œ๋กœ์šฐ(Overdraw)๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ํˆฌ๋ช…๋„ ๋ธ”๋ Œ๋”ฉ ์˜ค๋ฅ˜๋ฅผ ์•ผ๊ธฐํ•˜๋ฉฐ, ๋ณธ(Bone) ๊ธฐ๋ฐ˜ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ์— ์ทจ์•ฝํ•˜๋‹ค๋Š” ๊ตฌ์กฐ์  ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค [30-32]. * ์ด๋Ÿฌํ•œ ๋ณ‘๋ชฉ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด Three.js๋Š” WebGPU ๋ Œ๋”๋Ÿฌ์™€ ๋‹จ์ผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌ๋˜๋Š” TSL(Three Shader Language)์„ ์ „๋ฉด ๋„์ž…ํ–ˆ๋‹ค [33, 34]. * ์ปดํ“จํŠธ ์…ฐ์ด๋”๋ฅผ ํ™œ์šฉํ•˜๋ฉด CPU์—์„œ ์ฒ˜๋ฆฌํ•˜๋˜ ์ถฉ๋Œ ๊ฐ์ง€, ์ง€ํ˜• ์ƒ์„ฑ, ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ํŒŒํ‹ฐํด ์—…๋ฐ์ดํŠธ ๋ฐ ์ปฌ๋ง์„ GPU์—์„œ ๋ณ‘๋ ฌ๋กœ ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด ๊ทน์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋‹ค [35-37]. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** AI ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[InstancedMesh|InstancedMesh]], [[BatchedMesh|BatchedMesh]], [[WebGPU|WebGPU]], ๋“œ๋กœ์šฐ ์ฝœ (Draw Call), [[แ„€แ…กแ„‡แ…งแ†ซแ„Œแ…ฅแ†จ LOD(Level of Detail) แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท|LOD (Level of Detail)]] - **Projects/Contexts:** Utsubo์˜ WebGPU ๋„์ž… (Segments.ai ๋“ฑ), InstancedMesh2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Three.js r171 WebGPURenderer - **Contradictions/Notes:** ๋“œ๋กœ์šฐ ์ฝœ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด `InstancedMesh`๋‚˜ `BatchedMesh`๋ฅผ ๋„์ž…ํ•˜๋”๋ผ๋„ ํ•ญ์ƒ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. `InstancedMesh`๋Š” ๊ฐœ๋ณ„ ์ปฌ๋ง์˜ ๋ถ€์žฌ์™€ ์˜ค๋ฒ„๋“œ๋กœ์šฐ๋กœ ์ธํ•ด ์˜คํžˆ๋ ค ๊ฐœ๋ณ„ ๋ Œ๋”๋ง๋ณด๋‹ค GPU FPS๋ฅผ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์ ๋œ๋‹ค [27, 30, 38]. ๋˜ํ•œ `BatchedMesh`์˜ ๊ฒฝ์šฐ์—๋„ ์ฒœ๋งŒ ๊ฐœ ์ด์ƒ์˜ ๋งŽ์€ ํด๋ฆฌ๊ณค๊ณผ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” ๋‚ด๋ถ€์ ์ธ ๋‹ค์ค‘ ๊ทธ๋ฆฌ๊ธฐ(multi-draw) ๋ฒ„ํผ ์—…๋กœ๋“œ ๋ฐ ํŒจํ‚น ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด CPU ์ ์œ ์œจ์ด 40~60%๊นŒ์ง€ ์น˜์†Ÿ๊ณ  ํ”„๋ ˆ์ž„์ด ๊ธ‰๊ฐํ•˜๋Š” ํ˜„์ƒ์ด ๋ณด๊ณ ๋˜์–ด, ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ๋ฒค์น˜๋งˆํ‚น์ด ํ•„์ˆ˜์ ์ด๋‹ค [39-43]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Three.js ์„ฑ๋Šฅ ์ตœ์ ํ™”.md ---