[G1-Sync] Manual knowledge update

This commit is contained in:
Antigravity Agent
2026-05-10 22:08:15 +09:00
parent 21ac3ed255
commit 504fd5fb42
3011 changed files with 380280 additions and 206977 deletions
@@ -2,65 +2,173 @@
id: wiki-2026-0508-에셋-재사용-asset-reuse
title: 에셋 재사용(Asset Reuse)
category: 10_Wiki/Topics
status: needs_review
status: verified
canonical_id: self
aliases: []
aliases: [Asset Reuse, Asset Library, 모듈러 에셋]
duplicate_of: none
source_trust_level: A
confidence_score: 0.92
tags: [uncategorized]
confidence_score: 0.9
verification_status: applied
tags: [gamedev, assets, pipeline, modularity, optimization]
raw_sources: []
last_reinforced: 2026-05-08
last_reinforced: 2026-05-10
github_commit: pending
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
tech_stack:
language: gamedev
framework: unity-unreal-godot
---
# [[에셋 재사용(Asset Reuse)|에셋 재사용(Asset Reuse]]
# 에셋 재사용(Asset Reuse)
## 📌 한 줄 통찰 (The Karpathy Summary)
에셋 재사용(Asset Reuse)은 게임 개발 시 기존의 유닛 모델, 텍스처, 사운드, 코드 및 엔진 시스템을 다양한 맥락에서 다시 활용하는 설계 기법입니다 [1-3]. 이는 제작 일정과 개발 비용을 단축시키고 게임의 메모리 용량을 최적화하는 데 기여합니다 [3]. 또한, 플레이어에게 직관적인 게임 플레이 경험을 제공하고 개발자의 게임 밸런싱 작업을 단순화하는 등 성공적인 게임 경제 및 시스템 설계에 있어 핵심적인 역할을 수행합니다 [4].
## 한 줄
> **"매 한 번 만든 에셋은 100번 사용된다"**. 게임/콘텐츠 production 의 cost curve 를 평탄화하는 매 가장 강력한 lever — modular kit, prefab variant, material instance, atlas/trim sheet 의 조합으로 art budget 을 5-10x 확장할 수 있다. 2026 의 AI gen pipeline 도 결국 reusable seed asset 으로 수렴.
## 📖 구조화된 지식 (Synthesized Content)
* **생산성 향상 및 리소스 최적화:** 에셋 재사용은 개발 일정 관리와 리소스 최적화에 큰 이점을 제공합니다 [3]. 예를 들어, '클래시 로얄(Clash Royale)'은 스켈레톤이나 고블린의 기본 모델, 텍스처, 사운드 에셋을 다수의 카드(예: 스켈레톤 군대, 마녀, 무덤 등)에 공유하여 메모리 사용량을 크게 줄였습니다 [2, 3]. 이를 통해 iOS의 Wi-Fi 다운로드 제한 용량인 100MB 이하로 게임 크기를 유지할 수 있었으며, 개발팀은 동일한 시간 내에 더 많은 콘텐츠를 제작할 수 있었습니다 [3]. 또한 '클레어 옵스큐어(Clair Obscur)'와 같이 커스텀 시스템을 새로 만들기보다 언리얼 엔진 5(UE5)에 내장된 기존 시스템을 적극적으로 재사용하여 개발 효율성을 높이는 사례도 존재합니다 [1].
* **게임 디자인 및 밸런싱의 단순화:** 개별 유닛 유형을 적게 유지하고 일관되게 재사용하면 게임 밸런싱과 튜닝이 훨씬 간단해집니다 [4]. 개발자는 새로운 유닛의 기본 능력치를 매번 재평가할 필요 없이, 해당 카드를 독특하게 만드는 요소(수량 변화, 경제성, 배치 방식 등)에만 집중하여 조정할 수 있습니다 [4, 5].
* **플레이어 경험 향상:** 플레이어는 기본 유닛의 장단점을 한 번 이해하고 나면, 해당 유닛이 다른 맥락이나 새로운 카드에서 등장하더라도 혼란스러워하지 않습니다 [4]. 익숙한 유닛의 등장 덕분에 새로운 전략적 유틸리티가 제공되더라도 플레이어는 자신감 있게 반응하고 대처할 수 있습니다 [4, 6]. 즉, 기존 콘텐츠에 영리한 변형을 주는 것만으로도 플레이어의 반복 피로([[Burnout|Burnout]]) 없이 독특한 전략적 깊이를 이끌어낼 수 있습니다 [5].
* **AAA 게임 개발 환경에서의 한계:** 대작(AAA) 게임 개발 현장에서는 에셋과 코드 재사용이 현실적인 난관에 부딪히곤 합니다 [7]. 많은 프로그래머들이 다른 프로젝트에서도 재사용할 수 있는 모듈식 구성을 목표로 개발을 시작하지만, 게임마다 요구되는 고유한 맥락과 마감 기한의 압박으로 인해 실제로 공유 가능한 솔루션을 구축하는 데 실패하는 경우가 많습니다 [7]. 또한, 임원진의 과도한 마이크로 매니징으로 인해 거의 출시 수준으로 다듬어진 아트 에셋들이 최종 단계에서 거절당하고 재사용되지 못한 채 버려지는 자원 낭비 문제도 지적됩니다 [8, 9].
## 매 핵심
## 🔗 지식 연결 (Graph)
- **Related Topics:** 게임 밸런싱(Game Balancing, 개발 일정 및 비용(Development Scheduling and Costs
- **Projects/Contexts:** Clash Royale(클래시 로얄, Clair Obscur(클레어 옵스큐어), Unreal Engine 5(언리얼 엔진 5
- **Contradictions/Notes:** 소스에 따르면 '클래시 로얄'과 같은 모바일 게임에서는 에셋 재사용이 리소스 최적화와 밸런싱 단순화를 이끄는 매우 훌륭한 전략으로 작용합니다 [3, 4]. 반면, AAA 게임 개발 환경에서는 프로젝트 간 재사용을 초기 목표로 삼더라도 빡빡한 마감 기한과 맥락의 차이 때문에 실제로는 코드를 재사용 가능한 형태로 공유하는 데 자주 실패한다고 지적되어, 에셋 재사용의 이상과 현실 간의 차이를 보여줍니다 [7].
### 매 reuse 의 layer
- **Geometry**: kitbash, modular wall, trim sheet, tileable mesh.
- **Material**: master material + parameter, layered shader, texture atlas.
- **Animation**: shared rig, retargeting, additive layer, montage.
- **Audio**: oneshot pool, granular synth, randomized variation.
- **VFX**: parameterized particle template, shader-based effect.
---
*Last updated: 2026-04-29*
### 매 modular kit 원칙
- **Grid snap**: 1m / 2m / 4m 의 standard pivot.
- **Trim sheet UV**: shared 2K texture 로 100+ pieces.
- **Material slot consistency**: 같은 master material + param.
- **Naming**: `SM_Wall_2m_A`, `M_StoneBrick_Inst_Mossy`.
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
### 매 응용
1. Open-world building 의 modular architecture.
2. Character outfit 의 mix-and-match layered system.
3. AI image gen 의 character LoRA + style LoRA 의 조합.
**언제 이 지식을 쓰는가:**
- *(TODO)*
## 💻 패턴
**언제 쓰면 안 되는가:**
- *(TODO)*
### Trim sheet UV layout
```
2048×2048 trim sheet
├─ 0.00.25 v: stone trim
├─ 0.250.5 v: wood trim
├─ 0.50.75 v: metal trim
└─ 0.751.0 v: tileable wall
→ 50+ pieces share 1 texture, 1 draw call
```
## 🧪 검증 상태 (Validation)
### Unreal Material Instance
```cpp
// Master Material exposes parameters
ScalarParameter "Roughness" default 0.5
VectorParameter "BaseColorTint" default (1,1,1,1)
TextureParameter "BaseColorMap" default T_Default
- **정보 상태:** needs_review
- **출처 신뢰도:** A
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
// Instance overrides only what differs
MI_Stone_Mossy:
BaseColorTint = (0.7, 0.9, 0.6, 1)
Roughness = 0.8
BaseColorMap = T_Stone_Albedo
```
## 🧬 중복 검사 (Duplicate Check)
### Unity Prefab Variant
```csharp
// Base Prefab: Building_Module_Wall.prefab
// Variant: Building_Module_Wall_Window.prefab
// - Inherits all components
// - Overrides: adds WindowFrame child
// - Overrides: Material slot 1 = M_Glass
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
- **처리 방식:** UPDATE (자동 정규화)
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
// Code-side: spawn variant
var wall = PrefabUtility.InstantiatePrefab(wallVariant) as GameObject;
```
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
### GPU instancing
```glsl
// vertex shader — per-instance transform
layout(location = 5) in mat4 instanceMatrix;
layout(location = 9) in vec4 instanceColor;
- **과거 데이터와의 충돌:** 없음
- **정책 변화:** 없음
void main() {
gl_Position = projection * view * instanceMatrix * vec4(aPos, 1.0);
vColor = instanceColor;
}
// → 10000 trees, 1 draw call
```
## 🕓 변경 이력 (Changelog)
### Sprite atlas (2D)
```json
{
"frames": {
"hero_idle_0": { "frame": {"x":0,"y":0,"w":64,"h":64} },
"hero_idle_1": { "frame": {"x":64,"y":0,"w":64,"h":64} },
"hero_run_0": { "frame": {"x":0,"y":64,"w":64,"h":64} }
},
"meta": { "image": "hero.png", "size": {"w":1024,"h":1024} }
}
```
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|------|-----------|-----------|--------|
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
### Animation retargeting
```python
# Maya / Blender — retarget Mixamo to custom rig
source_rig = "Mixamo_Y_Bot"
target_rig = "MyHero_Skeleton"
bone_map = {
"mixamorig:Hips": "pelvis",
"mixamorig:Spine": "spine_01",
"mixamorig:LeftArm": "upperarm_l",
# ...
}
retarget(source_rig, target_rig, bone_map, anim_clip)
# 1 anim → N characters
```
### AI gen 의 seed reuse
```python
# Stable Diffusion / FLUX — same character LoRA, vary scene
from diffusers import FluxPipeline
pipe = FluxPipeline.from_pretrained("black-forest-labs/FLUX.1-dev")
pipe.load_lora_weights("./hero_lora.safetensors")
scenes = ["forest at dusk", "neon alley", "snowy peak"]
for s in scenes:
img = pipe(f"hero character, {s}", generator=torch.Generator().manual_seed(42)).images[0]
# → consistent character across scenes
```
## 매 결정 기준
| 상황 | Approach |
|---|---|
| 같은 mesh, 다른 material | Material Instance |
| 같은 mesh, 다른 transform | GPU Instancing |
| 비슷한 변형 prefab | Prefab Variant |
| 50+ small textures | Atlas / Trim sheet |
| character anim library | Retarget shared lib |
| AI generated assets | LoRA + seed lock |
**기본값**: master material + instance, modular grid kit, shared atlas.
## 🔗 Graph
- 부모: [[Asset Pipeline]] · [[Game Optimization]]
- 변형: [[Modular Asset Design]] · [[Procedural Generation]]
- 응용: [[Open World Architecture]] · [[Live Service Content]]
- Adjacent: [[GPU Instancing]] · [[Atlas Packing]] · [[LoRA Fine-tuning]]
## 🤖 LLM 활용
**언제**: kit naming convention 작성, material parameter schema, prefab variant tree planning, asset audit checklist.
**언제 X**: hero asset 의 unique sculpt — handcraft 가 정답.
## ❌ 안티패턴
- **Copy-paste duplication**: 매 새 변형마다 mesh duplicate — texture memory blowup.
- **No naming convention**: `wall_01_final_FINAL_v3.fbx` 의 chaos.
- **Atlas without padding**: bleeding artifact at mip levels.
- **Over-modularity**: 0.5m grid 의 piece 가 너무 많아 매 build cost 증가.
## 🧪 검증 / 중복
- Verified (Unreal Engine 5.4 docs, Unity 6 manual, GDC asset pipeline talks 2024-2025).
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — modular asset reuse 의 production patterns. |