--- id: wiki-2026-0508-unity title: Unity category: 10_Wiki/Topics status: needs_review canonical_id: self aliases: [P-Reinforce-AUTO-6033D2] duplicate_of: none source_trust_level: A confidence_score: 0.9 tags: [auto-reinforced] raw_sources: [] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Unity" inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08) tech_stack: language: unspecified framework: unspecified --- # [[Unity|Unity]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > UnityλŠ” 2D 및 3D ν”„λ‘œμ νŠΈλ₯Ό κ°œλ°œν•  수 μžˆλŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ—”μ§„ 및 ν”Œλž«νΌμž…λ‹ˆλ‹€ [1]. κ·Έλž˜ν”½ λ Œλ”λ§ νŒŒμ΄ν”„λΌμΈ, 물리 μ‹œμŠ€ν…œ, 씬(Scene) 및 κ²Œμž„ 였브젝트(GameObject) ꡬ성을 μ§€μ›ν•˜λ©°, 높은 κ·Έλž˜ν”½ μ„±λŠ₯을 λ‹¬μ„±ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ 도ꡬλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€ [1, 2]. 특히 화면에 κΈ°ν•˜ν•™μ  ꡬ쑰λ₯Ό 그리기 μœ„ν•΄ κ·Έλž˜ν”½ API에 λͺ…령을 λ‚΄λ¦¬λŠ” λ“œλ‘œμš° 콜([[Draw Call|Draw Call]])κ³Ό λ Œλ” μƒνƒœ λ³€κ²½(Render-[[State|State]] changes)을 μ΅œμ ν™”ν•˜λŠ” μ•„ν‚€ν…μ²˜κ°€ ν•΅μ‹¬μ μœΌλ‘œ λ‹€λ€„μ§‘λ‹ˆλ‹€ [3, 4]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ“œλ‘œμš° 콜(Draw Calls) 및 μ„±λŠ₯ μ΅œμ ν™”** UnityλŠ” κΈ°ν•˜ν•™μ  ꡬ쑰, ν…μŠ€μ²˜, 셰이더 λ“±μ˜ 정보λ₯Ό κ·Έλž˜ν”½ API에 μ „λ‹¬ν•˜μ—¬ 화면을 그리기 μœ„ν•΄ λ“œλ‘œμš° μ½œμ„ λ°œμƒμ‹œν‚΅λ‹ˆλ‹€ [3]. μž¬μ§ˆμ„ λ³€κ²½ν•˜λŠ” λ“±μ˜ λ Œλ” μƒνƒœ([[Render State|Render State]]) λ³€κ²½ 과정은 CPU μžμ›μ„ 맀우 많이 μ†Œλͺ¨ν•˜λ―€λ‘œ, λ“œλ‘œμš° 콜의 총 횟수λ₯Ό 쀄이고 λ Œλ” μƒνƒœ 변경이 적게 μΌμ–΄λ‚˜λ„λ‘ ν˜ΈμΆœμ„ κ΅¬μ„±ν•˜λŠ” 것이 μ„±λŠ₯ μ΅œμ ν™”μ˜ ν•΅μ‹¬μž…λ‹ˆλ‹€ [4, 5]. - **λ“œλ‘œμš° 콜 μ΅œμ ν™” 기법** UnityλŠ” λ“œλ‘œμš° 콜과 λ Œλ” μƒνƒœ 변경을 μ΅œμ ν™”ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같은 λ‚΄μž₯ 방법듀을 μ œκ³΅ν•©λ‹ˆλ‹€ [2]. - **GPU μΈμŠ€ν„΄μ‹±(GPU [[Instancing|Instancing]]):** λ‚˜λ¬΄λ‚˜ 덀뢈처럼 씬에 반볡적으둜 λ‚˜νƒ€λ‚˜λŠ” λ™μΌν•œ λ©”μ‰¬μ˜ μ—¬λŸ¬ 볡사본을 λ™μ‹œμ— λ Œλ”λ§ν•©λ‹ˆλ‹€ [2]. - **λ“œλ‘œμš° 콜 λ°°μΉ­(Draw Call [[Batching|Batching]]):** 움직이지 μ•ŠλŠ” 정적 κ²Œμž„ μ˜€λΈŒμ νŠΈλ“€μ˜ 메쉬λ₯Ό 사전에 κ²°ν•©ν•˜λŠ” '정적 λ°°μΉ­(Static batching)'κ³Ό, CPUμ—μ„œ λ™μΌν•œ 속성을 κ°€μ§„ 정점듀을 κ·Έλ£Ήν™”ν•˜μ—¬ ν•œ 번의 λ“œλ‘œμš° 콜둜 λ Œλ”λ§ν•˜λŠ” '동적 λ°°μΉ­(Dynamic batching)'이 μžˆμŠ΅λ‹ˆλ‹€ [2]. - **μˆ˜λ™ 메쉬 κ²°ν•©:** `Mesh.CombineMeshes` ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μˆ˜μ˜ 메쉬λ₯Ό μˆ˜λ™μœΌλ‘œ 단일 λ©”μ‰¬λ‘œ 병합해 ν•œ 번의 호좜둜 λ Œλ”λ§ν•©λ‹ˆλ‹€ [2]. - **SRP 배처(SRP Batcher):** μŠ€ν¬λ¦½ν„°λΈ” λ Œλ” νŒŒμ΄ν”„λΌμΈ(SRP) ν™˜κ²½μ—μ„œ, λ™μΌν•œ 셰이더 λ³€ν˜•(Shader variant)을 μ‚¬μš©ν•˜λŠ” μž¬μ§ˆμ— λŒ€ν•΄ λ“œλ‘œμš° μ½œμ„ μ€€λΉ„ν•˜λŠ” CPU μ†Œμš” μ‹œκ°„μ„ μ€„μ—¬μ€λ‹ˆλ‹€ [2]. - **μ΅œμ ν™” 적용 μš°μ„ μˆœμœ„** μ—¬λŸ¬ μ΅œμ ν™” 기법이 μ€‘λ³΅μœΌλ‘œ 섀정될 경우, UnityλŠ” κ°€μž₯ 높은 μš°μ„ μˆœμœ„μ˜ 방법을 μ μš©ν•©λ‹ˆλ‹€. μš°μ„ μˆœμœ„λŠ” 1. SRP 배처 및 정적 λ°°μΉ­, 2. GPU μΈμŠ€ν„΄μ‹±, 3. 동적 λ°°μΉ­ μˆœμž…λ‹ˆλ‹€ [6, 7]. 예λ₯Ό λ“€μ–΄, 객체에 정적 배칭이 μ„±κ³΅μ μœΌλ‘œ 적용되면 ν•΄λ‹Ή 객체의 GPU μΈμŠ€ν„΄μ‹±μ€ λΉ„ν™œμ„±ν™”λ©λ‹ˆλ‹€ [7]. - **μ™ΈλΆ€ λ„κ΅¬μ™€μ˜ 연동** [[Needle Engine|Needle Engine]]κ³Ό 같은 도ꡬ와 ν•¨κ»˜ μ‚¬μš©λ  λ•Œ, μ„±λŠ₯ λ¬Έμ œλ‚˜ ν…μŠ€μ²˜ λˆ„λ½ 등을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ Unity ν™˜κ²½ λ‚΄μ—μ„œ "Copy Project Info Into [[CLIP|CLIP]]board" κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ„€μ • μƒνƒœλ₯Ό μ™ΈλΆ€λ‘œ λ³΅μ‚¬ν•˜κ³  디버깅할 수 μžˆμŠ΅λ‹ˆλ‹€ [8]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & Updates) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Graphics & Performance λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** GPU Instancing, Draw Call Batching, Scriptable Render Pipeline (SRP), GameObject - **Projects/Contexts:** [[Needle Engine|Needle Engine]], Optimizing draw calls - **Contradictions/Notes:** UnityλŠ” μ—¬λŸ¬ λ“œλ‘œμš° 콜 μ΅œμ ν™” μ˜΅μ…˜μ„ μ§€μ›ν•˜μ§€λ§Œ 기법 간에 좩돌이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ Œλ”λŸ¬κ°€ μΈμŠ€ν„΄μ‹± 셰이더λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ 정적 λ°°μΉ­(Static batching)이 μ μš©λ˜λŠ” 경우 UnityλŠ” μžλ™μœΌλ‘œ GPU μΈμŠ€ν„΄μ‹±μ„ λΉ„ν™œμ„±ν™”ν•˜λ©°, μΈμŠ€νŽ™ν„°(Inspector) 창에 정적 배칭을 λ„λΌλŠ” κ²½κ³  λ©”μ‹œμ§€λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€ [7]. --- *Last updated: 2026-04-19* --- ## πŸ€– LLM ν™œμš© 힌트 (How to Use This Knowledge) **μ–Έμ œ 이 지식을 μ“°λŠ”κ°€:** - *(TODO)* **μ–Έμ œ μ“°λ©΄ μ•ˆ λ˜λŠ”κ°€:** - *(TODO)* ## πŸ§ͺ 검증 μƒνƒœ (Validation) - **정보 μƒνƒœ:** needs_review - **좜처 신뒰도:** A - **κ²€ν†  이유:** *(P-Reinforce Phase 1 μžλ™ μ •κ·œν™”. λ³Έλ¬Έ 검증 ν•„μš”.)* ## 🧬 쀑볡 검사 (Duplicate Check) - **κΈ°μ‘΄ μœ μ‚¬ λ¬Έμ„œ:** *(TODO: μΈλ±μ„œ ν΄λŸ¬μŠ€ν„° 리포트 μ°Έμ‘°)* - **처리 방식:** UPDATE (μžλ™ μ •κ·œν™”) - **처리 이유:** Phase 1 μ •κ·œν™” β€” μ˜› ν…œν”Œλ¦Ώ/λˆ„λ½ ν•„λ“œ 보강. ## πŸ•“ λ³€κ²½ 이λ ₯ (Changelog) | λ‚ μ§œ | λ³€κ²½ λ‚΄μš© | 처리 방식 | 신뒰도 | |------|-----------|-----------|--------| | 2026-05-08 | P-Reinforce Phase 1 μ •κ·œν™” (frontmatter + 헀더 ν‘œμ€€ν™”) | UPDATE | A | ## πŸ’» μ½”λ“œ νŒ¨ν„΄ (Code Patterns) **νŒ¨ν„΄ 1:** *(TODO: 이 ν”„λ‘œμ νŠΈ μ»¨λ²€μ…˜ λ°˜μ˜ν•œ ꡬ쑰 μŠ€μΌˆλ ˆν†€)* ```text # TODO ``` ## πŸ€” μ˜μ‚¬κ²°μ • κΈ°μ€€ (Decision Criteria) **선택 Aλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **선택 Bλ₯Ό 써야 ν•  λ•Œ:** - *(TODO)* **κΈ°λ³Έκ°’:** > *(TODO)* ## ❌ μ•ˆν‹°νŒ¨ν„΄ (Anti-Patterns) - **[μ•ˆν‹°νŒ¨ν„΄]:** *(TODO: 무엇을 ν•˜λ©΄ μ•ˆ λ˜λŠ”κ°€ + 이유 + λŒ€μ‹  무엇을)*