Asset Optimization
Asset Pipeline Overview
code
┌─────────────────────────────────────────────────────────────┐ │ ASSET PIPELINE FLOW │ ├─────────────────────────────────────────────────────────────┤ │ SOURCE ASSETS (Large, Editable): │ │ .psd, .fbx, .blend, .wav, .tga │ │ ↓ │ │ IMPORT SETTINGS: │ │ Compression, Format, Quality, Platform overrides │ │ ↓ │ │ PROCESSING: │ │ Compression, Mipmaps, LOD generation, Format conversion │ │ ↓ │ │ RUNTIME ASSETS (Optimized): │ │ .dds, .ktx, .ogg, engine-specific formats │ │ ↓ │ │ PACKAGING: │ │ Asset bundles, streaming chunks, platform builds │ └─────────────────────────────────────────────────────────────┘
Texture Optimization
code
TEXTURE COMPRESSION FORMATS: ┌─────────────────────────────────────────────────────────────┐ │ PLATFORM │ FORMAT │ QUALITY │ SIZE/PIXEL │ ├─────────────┼─────────────┼──────────┼────────────────────┤ │ PC/Console │ BC7 │ Best │ 1 byte │ │ PC/Console │ BC1 (DXT1) │ Good │ 0.5 byte │ │ iOS │ ASTC 6x6 │ Great │ 0.89 byte │ │ Android │ ETC2 │ Good │ 0.5-1 byte │ │ Mobile │ ASTC 8x8 │ Good │ 0.5 byte │ │ Uncompressed│ RGBA32 │ Perfect │ 4 bytes │ └─────────────┴─────────────┴──────────┴────────────────────┘ TEXTURE SIZE GUIDELINES: ┌─────────────────────────────────────────────────────────────┐ │ Character (main): 2048x2048 │ │ Character (NPC): 1024x1024 │ │ Props (large): 1024x1024 │ │ Props (small): 512x512 or 256x256 │ │ UI elements: Power of 2, vary by size │ │ Environment: 2048x2048 (tiling) │ │ Mobile maximum: 1024x1024 (prefer 512) │ └─────────────────────────────────────────────────────────────┘
Mesh Optimization
code
POLYGON BUDGET GUIDELINES: ┌─────────────────────────────────────────────────────────────┐ │ PLATFORM │ HERO CHAR │ NPC │ PROP │ SCENE │ ├─────────────┼───────────┼──────────┼──────────┼───────────┤ │ PC High │ 100K │ 30K │ 10K │ 10M │ │ PC Med │ 50K │ 15K │ 5K │ 5M │ │ Console │ 80K │ 25K │ 8K │ 8M │ │ Mobile │ 10K │ 3K │ 500 │ 500K │ │ VR │ 30K │ 10K │ 2K │ 2M │ └─────────────┴───────────┴──────────┴──────────┴───────────┘ LOD CONFIGURATION: ┌─────────────────────────────────────────────────────────────┐ │ LOD0: 100% triangles │ 0-10m │ Full detail │ │ LOD1: 50% triangles │ 10-30m │ Reduced │ │ LOD2: 25% triangles │ 30-60m │ Low detail │ │ LOD3: 10% triangles │ 60m+ │ Billboard/Impostor │ └─────────────────────────────────────────────────────────────┘
Audio Optimization
code
AUDIO COMPRESSION: ┌─────────────────────────────────────────────────────────────┐ │ TYPE │ FORMAT │ QUALITY │ STREAMING │ ├─────────────┼─────────┼───────────┼──────────────────────┤ │ Music │ Vorbis │ 128-192 │ Always stream │ │ SFX (short) │ ADPCM │ High │ Decompress on load │ │ SFX (long) │ Vorbis │ 128 │ Stream if > 1MB │ │ Voice │ Vorbis │ 96-128 │ Stream │ │ Ambient │ Vorbis │ 96 │ Stream │ └─────────────┴─────────┴───────────┴──────────────────────┘ AUDIO MEMORY BUDGET: • Mobile: 20-50 MB • Console: 100-200 MB • PC: 200-500 MB
Batch Processing Script
python
# ✅ Production-Ready: Asset Batch Processor
import subprocess
from pathlib import Path
from concurrent.futures import ThreadPoolExecutor
def process_textures(input_dir: Path, output_dir: Path, platform: str):
"""Batch process textures for target platform."""
settings = {
'pc': {'format': 'bc7', 'max_size': 4096},
'mobile': {'format': 'astc', 'max_size': 1024},
'console': {'format': 'bc7', 'max_size': 2048},
}
config = settings.get(platform, settings['pc'])
textures = list(input_dir.glob('**/*.png')) + list(input_dir.glob('**/*.tga'))
def process_single(texture: Path):
output_path = output_dir / texture.relative_to(input_dir)
output_path = output_path.with_suffix('.dds')
output_path.parent.mkdir(parents=True, exist_ok=True)
subprocess.run([
'texconv',
'-f', config['format'],
'-w', str(config['max_size']),
'-h', str(config['max_size']),
'-m', '0', # Generate all mipmaps
'-o', str(output_path.parent),
str(texture)
])
with ThreadPoolExecutor(max_workers=8) as executor:
executor.map(process_single, textures)
🔧 Troubleshooting
code
┌─────────────────────────────────────────────────────────────┐ │ PROBLEM: Build size too large │ ├─────────────────────────────────────────────────────────────┤ │ SOLUTIONS: │ │ → Audit unused assets │ │ → Increase texture compression │ │ → Enable mesh compression │ │ → Split into downloadable content │ │ → Use texture atlases │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ PROBLEM: Long import times │ ├─────────────────────────────────────────────────────────────┤ │ SOLUTIONS: │ │ → Use asset database caching │ │ → Import in batches │ │ → Use faster SSD storage │ │ → Pre-process assets in CI/CD │ └─────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────┐ │ PROBLEM: Assets look blurry │ ├─────────────────────────────────────────────────────────────┤ │ SOLUTIONS: │ │ → Reduce compression for important assets │ │ → Increase texture resolution │ │ → Check mipmap settings │ │ → Use appropriate filtering mode │ └─────────────────────────────────────────────────────────────┘
Memory Budgets
| Platform | Textures | Meshes | Audio | Total |
|---|---|---|---|---|
| Mobile Low | 100 MB | 50 MB | 30 MB | 200 MB |
| Mobile High | 500 MB | 200 MB | 100 MB | 1 GB |
| Console | 2 GB | 1 GB | 200 MB | 4 GB |
| PC | 4 GB | 2 GB | 500 MB | 8 GB |
Use this skill: When optimizing assets, managing memory, or streamlining pipelines.