--- id: P-REINFORCE-AUTO-13670A 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 κ°„μ˜ 병λͺ© ν˜„μƒμ„ ν•΄μ†Œν•˜λŠ” 일련의 기술적 κ³Όμ •μž…λ‹ˆλ‹€ [1-3]. 핡심 λͺ©ν‘œλŠ” μ΄ˆλ‹Ή ν”„λ ˆμž„ 수(FPS)λ₯Ό μ•ˆμ •μ μœΌλ‘œ μœ μ§€ν•˜κΈ° μœ„ν•΄ λ“œλ‘œμš° 콜(Draw Call) 횟수λ₯Ό μ΅œμ†Œν™”ν•˜κ³ , λ©”λͺ¨λ¦¬ λŒ€μ—­ν­μ„ 효율적으둜 κ΄€λ¦¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€ [4-7]. 이λ₯Ό μœ„ν•΄ μΈμŠ€ν„΄μ‹±(Instancing), λ°°μΉ­(Batching), 에셋 μ••μΆ•, λ””ν…ŒμΌ μˆ˜μ€€(LOD) 쑰절 및 μ΅œμ‹  WebGPU API의 λ„μž…μ΄ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λ©λ‹ˆλ‹€ [4, 8-10]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ“œλ‘œμš° 콜(Draw Call)의 μ΅œμ†Œν™”:** λ“œλ‘œμš° μ½œμ€ CPUκ°€ GPUμ—κ²Œ λ Œλ”λ§μ„ μ§€μ‹œν•˜λŠ” λͺ…λ ΉμœΌλ‘œ, κ³Όλ„ν•œ ν˜ΈμΆœμ— λ”°λ₯Έ μ˜€λ²„ν—€λ“œλŠ” μ„±λŠ₯을 μ €ν•˜μ‹œν‚€λŠ” κ°€μž₯ 큰 μ›μΈμž…λ‹ˆλ‹€ [3, 11, 12]. μ›ν™œν•œ 60fpsλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν”„λ ˆμž„λ‹Ή λ“œλ‘œμš° μ½œμ„ 100회 미만으둜 μœ μ§€ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [5, 8, 13]. - **InstancedMesh와 BatchedMesh ν™œμš©:** λ™μΌν•œ κΈ°ν•˜ν•™μ  ꡬ쑰와 μž¬μ§ˆμ„ κ°€μ§„ 반볡적인 객체(예: λ‚˜λ¬΄, ꡰ쀑)λ₯Ό λ Œλ”λ§ν•  λ•ŒλŠ” `InstancedMesh`λ₯Ό μ‚¬μš©ν•˜μ—¬ 단일 λ“œλ‘œμš° 콜둜 μˆ˜λ§Žμ€ 객체λ₯Ό λ Œλ”λ§ν•΄μ•Ό ν•©λ‹ˆλ‹€ [5, 14-16]. 반면, μž¬μ§ˆμ€ λ™μΌν•˜μ§€λ§Œ μ§€μ˜€λ©”νŠΈλ¦¬κ°€ μ„œλ‘œ λ‹€λ₯Έ 객체듀을 κ·Έλ£Ήν™”ν•˜μ—¬ λ Œλ”λ§ν•  λ•ŒλŠ” `BatchedMesh`λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 νš¨μœ¨μ μž…λ‹ˆλ‹€ [17-20]. - **에셋 및 λ©”λͺ¨λ¦¬ μ΅œμ ν™”:** μ§€μ˜€λ©”νŠΈλ¦¬ 파일 크기λ₯Ό μ΅œλŒ€ 95%κΉŒμ§€ μ€„μ—¬μ£ΌλŠ” Draco 압좕을 μ‚¬μš©ν•˜κ³ , VRAM μ‚¬μš©λŸ‰μ„ λŒ€ν­ κ°μ†Œμ‹œν‚€λ©° GPUμ—μ„œ 직접 압좕이 ν•΄μ œλ˜λŠ” KTX2 및 Basis Universal ν…μŠ€μ²˜ ν˜•μ‹μ„ μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€ [8, 21-23]. λ˜ν•œ μ‚¬μš©μ΄ λλ‚œ μ§€μ˜€λ©”νŠΈλ¦¬, 재질, ν…μŠ€μ²˜, λ Œλ” νƒ€κ²Ÿ 등은 λ°˜λ“œμ‹œ `.dispose()`λ₯Ό ν˜ΈμΆœν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ GPU λ©”λͺ¨λ¦¬λ₯Ό ν•΄μ œν•΄μ•Ό λˆ„μˆ˜λ₯Ό λ°©μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [24-27]. - **LOD(Level of Detail) 및 컬링:** μΉ΄λ©”λΌμ™€μ˜ 거리에 따라 폴리곀 μˆ˜κ°€ 적은 λͺ¨λΈμ΄λ‚˜ μž„ν¬μŠ€ν„°(Impostor)둜 κ΅μ²΄ν•˜μ—¬ λ Œλ”λ§ 연산을 μ€„μ΄λŠ” LOD μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€ [13, 28-31]. λ”λΆˆμ–΄ 보이지 μ•ŠλŠ” 객체λ₯Ό λ Œλ”λ§μ—μ„œ μ œμ™Έν•˜λŠ” μ ˆλ‘μ²΄ 컬링(Frustum Culling)이 μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λ„λ‘ λ°”μš΄λ”© λ°•μŠ€λ₯Ό 관리해야 ν•©λ‹ˆλ‹€ [32, 33]. - **WebGPU 및 TSL μ „ν™˜:** Three.js r171 버전뢀터 정식 μ§€μ›λ˜λŠ” `WebGPURenderer`λŠ” λŒ€κ·œλͺ¨ 데이터셋 μ²˜λ¦¬μ™€ μ»΄ν“¨νŠΈ 집약적인 효과(νŒŒν‹°ν΄, 물리 μ—°μ‚° λ“±)μ—μ„œ κΈ°μ‘΄ λŒ€λΉ„ 수 λ°°μ—μ„œ 100λ°° μ΄μƒμ˜ μ„±λŠ₯ ν–₯상을 μ œκ³΅ν•©λ‹ˆλ‹€ [34-37]. μƒˆλ‘œμš΄ TSL(Three Shader Language)을 μ‚¬μš©ν•˜λ©΄ 단일 μ½”λ“œλ‘œ μž‘μ„±λœ 셰이더λ₯Ό WebGPU와 WebGL λͺ¨λ‘μ— ν˜Έν™˜λ˜κ²Œ 배포할 수 μžˆμŠ΅λ‹ˆλ‹€ [38-40]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[Draw Call|Draw Call]], [[InstancedMesh|InstancedMesh]], [[BatchedMesh|BatchedMesh]], [[WebGPU|WebGPU]], [[Level of Detail (LOD)|Level of Detail (LOD)]], [[Texture Compression|Texture Compression]] - **Projects/Contexts:** [[Utsubo|Utsubo]], [[Segments.ai|Segments.ai]], [[InstancedMesh2 library|InstancedMesh2 library]] - **Contradictions/Notes:** `InstancedMesh`λŠ” λ“œλ‘œμš° μ½œμ„ 획기적으둜 μ€„μ—¬μ£Όμ§€λ§Œ, μ—”μ§„ μˆ˜μ€€μ—μ„œ κ°œλ³„ μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ μ ˆλ‘μ²΄ 컬링과 깊이 μ •λ ¬(Sorting)이 λΆˆκ°€λŠ₯ν•˜μ—¬ μ˜€λ²„λ“œλ‘œμš°(Overdraw)κ°€ μœ λ°œλ©λ‹ˆλ‹€. 이둜 인해 ν”½μ…€ 연산이 무거운 μ”¬μ—μ„œλŠ” 였히렀 일반 메쉬 방식보닀 ν”„λ ˆμž„ λ ˆμ΄νŠΈκ°€ ν•˜λ½ν•  수 μžˆλ‹€λŠ” ν•œκ³„κ°€ μ§€μ λ©λ‹ˆλ‹€ [41-44]. λŒ€μ•ˆμœΌλ‘œ κΌ½νžˆλŠ” `BatchedMesh` μ—­μ‹œ μˆ˜μ‹­λ§Œ 개 λ‹¨μœ„μ˜ λ³΅μž‘ν•œ κΈ°ν•˜ν•™μ  데이터와 μΈμŠ€ν„΄μŠ€λ₯Ό μ²˜λ¦¬ν•  λ•ŒλŠ” μ‹¬κ°ν•œ CPU 병λͺ© ν˜„μƒ 및 μ„±λŠ₯ μ €ν•˜λ₯Ό μ•ΌκΈ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [20, 45-48]. --- *Last updated: 2026-04-19* - Raw Source: 00_Raw/2026-04-20/Three.js λ Œλ”λ§ μ΅œμ ν™”.md ---