--- id: P-REINFORCE-AUTO-71CA1F category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - Texture Atlas" --- # [[Texture Atlas]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > ν…μŠ€μ²˜ μ•„ν‹€λΌμŠ€(Texture Atlas)λŠ” μ—¬λŸ¬ 개의 κ°œλ³„ ν…μŠ€μ²˜ 이미지λ₯Ό ν•˜λ‚˜μ˜ μ»€λ‹€λž€ ν…μŠ€μ²˜ μ‹œνŠΈ(Texture Sheet)둜 λ³‘ν•©ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” λ Œλ”λ§ μ΅œμ ν™” 기법이닀. `InstancedMesh` ν™˜κ²½μ—μ„œ λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ λ™μΌν•œ μž¬μ§ˆμ„ κ³΅μœ ν•΄μ•Ό ν•˜λŠ” ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κ³ , κ°œλ³„ μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λ‹€λ₯Έ ν…μŠ€μ²˜λ₯Ό μ μš©ν•˜κΈ° μœ„ν•œ ν•„μˆ˜μ μΈ 우회 κΈ°λ²•μœΌλ‘œ ν™œμš©λœλ‹€. 이λ₯Ό 톡해 ν…μŠ€μ²˜ 바인딩 횟수λ₯Ό 쀄이고 λ“œλ‘œμš° 콜(Draw Call)을 μ΅œμ†Œν™”ν•˜μ—¬ μ„±λŠ₯을 크게 ν–₯μƒμ‹œν‚¬ 수 μžˆλ‹€. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) - **λ“œλ‘œμš° 콜 및 ν…μŠ€μ²˜ 바인딩 κ°μ†Œ:** 각기 λ‹€λ₯Έ ν…μŠ€μ²˜λ₯Ό μ‚¬μš©ν•˜λŠ” λ‹€μˆ˜μ˜ 객체듀을 κ°œλ³„μ μœΌλ‘œ λ Œλ”λ§ν•˜λ©΄ κ°μ²΄λ§ˆλ‹€ μƒˆλ‘œμš΄ λ“œλ‘œμš° 콜과 ν…μŠ€μ²˜ 바인딩 μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•œλ‹€ [1, 2]. ν…μŠ€μ²˜ μ•„ν‹€λΌμŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ μ—¬λŸ¬ 재질의 ν…μŠ€μ²˜λ₯Ό ν•˜λ‚˜μ˜ 큰 이미지(예: 4096x4096 해상도)둜 κ²°ν•©ν•˜μ—¬, 단일 λ“œλ‘œμš° 콜과 ν•œ 번의 ν…μŠ€μ²˜ λ°”μΈλ”©λ§ŒμœΌλ‘œ μˆ˜λ§Žμ€ 객체λ₯Ό λ Œλ”λ§ν•  수 μžˆλ‹€ [1, 3]. 이 기법은 ν…μŠ€μ²˜ μ „ν™˜ λΉ„μš©μ„ μ—†μ•  GPU μΊμ‹œ νš¨μœ¨μ„ 높이며 λ³΅μž‘ν•œ μ”¬μ—μ„œ λ Œλ”λ§ 속도λ₯Ό 30-40% ν–₯μƒμ‹œν‚¨λ‹€ [4]. - **InstancedMeshμ™€μ˜ 연동 방식:** `InstancedMesh`λŠ” 단일 λ“œλ‘œμš° 콜둜 μ—¬λŸ¬ 객체λ₯Ό κ·Έλ¦¬μ§€λ§Œ, ꡬ쑰적으둜 λͺ¨λ“  μΈμŠ€ν„΄μŠ€κ°€ λ™μΌν•œ 셰이더 ν”„λ‘œκ·Έλž¨κ³Ό ν…μŠ€μ²˜ μœ λ‹›μ„ κ³΅μœ ν•΄μ•Ό ν•œλ‹€λŠ” μ œμ•½μ΄ μžˆλ‹€ [5]. λ”°λΌμ„œ μΈμŠ€ν„΄μŠ€λ§ˆλ‹€ λ‹€λ₯Έ ν…μŠ€μ²˜λ₯Ό ν‘œν˜„ν•˜λ €λ©΄ ν…μŠ€μ²˜ μ•„ν‹€λΌμŠ€λ₯Ό μ μš©ν•œ λ’€, 각 μΈμŠ€ν„΄μŠ€ 속성(Instance Attribute)으둜 UV μ’Œν‘œ μ˜€ν”„μ…‹(UV Offset)을 μ „λ‹¬ν•˜μ—¬ μ•„ν‹€λΌμŠ€ λ‚΄μ˜ μ •ν™•ν•œ μ˜μ—­μ„ μ°Έμ‘°ν•˜λ„λ‘ 셰이더λ₯Ό ꡬ성해야 ν•œλ‹€ [5-7]. - **경계선 블리딩(Edge Bleeding) 및 ꡬ쑰적 ν•œκ³„μ :** ν…μŠ€μ²˜ μ•„ν‹€λΌμŠ€μ˜ κ°€μž₯ 큰 단점은 λ°‰λ§΅(Mipmap) μƒμ„±μ΄λ‚˜ ν…μŠ€μ²˜ 필터링 κ³Όμ •μ—μ„œ μΈμ ‘ν•œ ν…μŠ€μ²˜ μ΄λ―Έμ§€μ˜ 색상이 μ„œλ‘œ μ„žμ—¬λ²„λ¦¬λŠ” 경계선 블리딩 ν˜„μƒμ΄λ‹€ [2, 5]. 이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„ν‹€λΌμŠ€ λ‚΄ ν…μŠ€μ²˜λ“€ 사이에 νŒ¨λ”©(Padding) 여백을 두어야 ν•˜λŠ”λ°, μ΄λŠ” κ²°κ΅­ GPU λ©”λͺ¨λ¦¬μ˜ λ‚­λΉ„λ‘œ 이어진닀 [2]. λ”λΆˆμ–΄ 셰이더 λ‚΄μ—μ„œ λ³΅μž‘ν•œ UV μ˜€ν”„μ…‹ 계산 μ•Œκ³ λ¦¬μ¦˜μ„ μœ μ§€ν•΄μ•Ό ν•˜λŠ” 뢀담이 μˆ˜λ°˜λœλ‹€ [2, 5]. - **λŒ€μ•ˆ 기술: ν…μŠ€μ²˜ λ°°μ—΄ (Data Array Textures):** μ•„ν‹€λΌμŠ€μ˜ 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ ν˜„λŒ€μ μΈ λŒ€μ•ˆμœΌλ‘œ 데이터 λ°°μ—΄ ν…μŠ€μ²˜(Data Array Textures)κ°€ μ‚¬μš©λœλ‹€ [8]. μ΄λŠ” ν…μŠ€μ²˜λ₯Ό 2D λ ˆμ΄μ–΄λ“€μ΄ μŒ“μΈ ν˜•νƒœλ‘œ κ΄€λ¦¬ν•˜μ—¬ 경계선 블리딩 ν˜„μƒμ„ μ›μ²œ μ°¨λ‹¨ν•˜κ³ , λ„€μ΄ν‹°λΈŒ ν…μŠ€μ²˜ λž˜ν•‘κ³Ό 독립적인 λ°‰λ§΅ 생성을 μ§€μ›ν•œλ‹€ [8]. ν•˜μ§€λ§Œ λ°°μ—΄ ν…μŠ€μ²˜λŠ” ν¬ν•¨λœ λͺ¨λ“  λ ˆμ΄μ–΄μ˜ ν…μŠ€μ²˜ 해상도가 μ™„μ „νžˆ 동일해야 ν•œλ‹€λŠ” μ—„κ²©ν•œ μ œμ•½ 쑰건을 κ°–λŠ”λ‹€ [5, 9]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[InstancedMesh]], [[Draw Call]], [[UV Offset]], [[Edge Bleeding]], [[Data Array Textures]], [[BatchedMesh]] - **Projects/Contexts:** [[Three.js λ Œλ”λ§ μ΅œμ ν™”]], [[WebGL λͺ¨λ°”일 GPU μ„±λŠ₯ 관리]] - **Contradictions/Notes:** μ†ŒμŠ€ λ¬Έν—Œλ“€μ€ ν…μŠ€μ²˜ μ•„ν‹€λΌμŠ€κ°€ λ“œλ‘œμš° μ½œμ„ 획기적으둜 μ€„μ—¬μ£ΌλŠ” ν•„μˆ˜ μ΅œμ ν™” κΈ°λ²•μž„μ„ μΈμ •ν•˜λ©΄μ„œλ„, 경계선 블리딩(Edge Bleeding) λ°©μ§€λ₯Ό μœ„ν•œ νŒ¨λ”©μœΌλ‘œ μΈν•œ λ©”λͺ¨λ¦¬ 낭비와 UV μ—°μ‚° λ³΅μž‘μ„± μ¦κ°€λΌλŠ” λͺ…ν™•ν•œ 단점을 μ§€μ ν•œλ‹€. κ·Έ λŒ€μ•ˆμœΌλ‘œ λ°°μ—΄ ν…μŠ€μ²˜(Array Textures)κ°€ μΆ”μ²œλ˜μ§€λ§Œ, λ‹€μ–‘ν•œ ν•΄μƒλ„μ˜ ν…μŠ€μ²˜λ₯Ό ν˜Όν•©ν•΄ 써야 ν•  κ²½μš°μ—λŠ” μ—¬μ „νžˆ ν…μŠ€μ²˜ μ•„ν‹€λΌμŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λŠ” νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ μ‘΄μž¬ν•œλ‹€ [2, 5, 9]. --- *Last updated: 2026-04-19* - Raw Source: [[00_Raw/2026-04-20/Texture Atlas.md]] ---