Asset Generation Pipeline
Generate → Validate → Convert → Import → Validate Again → Integrate
Every step must pass before proceeding to the next. No manual intervention.
3D Models
Meshy AI (Primary)
- REST API, outputs FBX/GLB/OBJ
- PBR textures included
- Adjustable polygon count: 1K–300K faces
- Native UE plugin available
- Best for: characters, vehicles, props
# Example API call (requires MESHY_API_KEY)
curl -X POST https://api.meshy.ai/v2/text-to-3d \
-H "Authorization: Bearer $MESHY_API_KEY" \
-d '{"prompt": "low poly cartoon frog character", "topology": "quad", "target_polycount": 1500}'
Blender Headless (Procedural Geometry)
- Full programmatic control via Python scripts
- Best for: lane markers, platforms, simple obstacles, tiling geometry
blender -b -P scripts/generate_road_tile.py -- --width 200 --length 100 --output road_tile.fbx
Validation
- trimesh: Verify mesh integrity (watertight, no degenerate faces, correct normals)
- Polycount check: Must be within budget (see Art Director specifications)
- Scale check: Must match UE unit scale (1 unit = 1 cm)
Textures
Scenario API (Primary)
- Purpose-built for game development
- Generates complete PBR map sets: albedo, normal, roughness, metallic, height, AO
- REST API with style consistency features
Poly Haven (CC0 Library)
- 100+ photoscanned PBR texture sets
- Public API, 8K+ resolution
- Best for: environmental surfaces, road, water, grass
Procedural (Python)
- Pillow/NumPy for simple patterns
- Best for: noise textures, gradients, color fills for blockmesh
Texture Standards
- Power-of-2 dimensions (256, 512, 1024, 2048)
- Albedo: RGB, no alpha unless transparency needed
- Normal: RGB, OpenGL format (convert from DirectX if needed)
- Roughness/Metallic: Grayscale
- Max resolution: 2048x2048 for props, 1024x1024 for tiling
Audio
ElevenLabs SFX V2
- Text-to-SFX generation
- 48kHz professional quality
- Supports looping and duration control (up to 30 seconds)
- Best for: realistic effects, ambient sounds
rFXGen (Retro/Arcade)
- Single CLI executable (~1.5MB)
- Presets: coin, explosion, powerup, hit, jump
- WAV output
- Best for: retro arcade sound effects
# Generate a jump sound
rfxgen -t jump -o hop_sound.wav
Audio Standards
- Source format: WAV 48kHz 16-bit
- Shipping format: OGG (compressed by UE on import)
- Naming: SW_ prefix for Sound Waves, SC_ for Sound Cues
- Import path: /Content/Audio/{Category}/
UE Import Automation
import unreal
def import_asset(filepath, destination, asset_type="mesh"):
task = unreal.AssetImportTask()
task.filename = filepath
task.destination_path = destination
task.automated = True
task.replace_existing = True
if asset_type == "mesh":
task.options = unreal.FbxImportUI()
task.options.import_materials = True
task.options.import_textures = True
unreal.AssetToolsHelpers.get_asset_tools().import_asset_tasks([task])
return task.imported_object_paths
Asset Budget (UnrealFrog)
| Category |
Per-Asset Budget |
Scene Budget |
| Frog character |
1000-2000 tris |
— |
| Vehicle |
300-1000 tris |
10K total |
| Log/platform |
200-500 tris |
5K total |
| Environment prop |
100-500 tris |
20K total |
| Road/water tile |
50-200 tris |
5K total |
| Total scene |
— |
< 100K tris |
1---2name: asset-generation3description: Pipeline for generating, validating, and importing 3D models, textures, and audio assets4---56## Asset Generation Pipeline78Generate → Validate → Convert → Import → Validate Again → Integrate910Every step must pass before proceeding to the next. No manual intervention.1112## 3D Models1314### Meshy AI (Primary)15- REST API, outputs FBX/GLB/OBJ16- PBR textures included17- Adjustable polygon count: 1K–300K faces18- Native UE plugin available19- Best for: characters, vehicles, props2021```bash22# Example API call (requires MESHY_API_KEY)23curl -X POST https://api.meshy.ai/v2/text-to-3d \24 -H "Authorization: Bearer $MESHY_API_KEY" \25 -d '{"prompt": "low poly cartoon frog character", "topology": "quad", "target_polycount": 1500}'26```2728### Blender Headless (Procedural Geometry)29- Full programmatic control via Python scripts30- Best for: lane markers, platforms, simple obstacles, tiling geometry3132```bash33blender -b -P scripts/generate_road_tile.py -- --width 200 --length 100 --output road_tile.fbx34```3536### Validation37- **trimesh**: Verify mesh integrity (watertight, no degenerate faces, correct normals)38- **Polycount check**: Must be within budget (see Art Director specifications)39- **Scale check**: Must match UE unit scale (1 unit = 1 cm)4041## Textures4243### Scenario API (Primary)44- Purpose-built for game development45- Generates complete PBR map sets: albedo, normal, roughness, metallic, height, AO46- REST API with style consistency features4748### Poly Haven (CC0 Library)49- 100+ photoscanned PBR texture sets50- Public API, 8K+ resolution51- Best for: environmental surfaces, road, water, grass5253### Procedural (Python)54- Pillow/NumPy for simple patterns55- Best for: noise textures, gradients, color fills for blockmesh5657### Texture Standards58- Power-of-2 dimensions (256, 512, 1024, 2048)59- Albedo: RGB, no alpha unless transparency needed60- Normal: RGB, OpenGL format (convert from DirectX if needed)61- Roughness/Metallic: Grayscale62- Max resolution: 2048x2048 for props, 1024x1024 for tiling6364## Audio6566### ElevenLabs SFX V267- Text-to-SFX generation68- 48kHz professional quality69- Supports looping and duration control (up to 30 seconds)70- Best for: realistic effects, ambient sounds7172### rFXGen (Retro/Arcade)73- Single CLI executable (~1.5MB)74- Presets: coin, explosion, powerup, hit, jump75- WAV output76- Best for: retro arcade sound effects7778```bash79# Generate a jump sound80rfxgen -t jump -o hop_sound.wav81```8283### Audio Standards84- Source format: WAV 48kHz 16-bit85- Shipping format: OGG (compressed by UE on import)86- Naming: SW_ prefix for Sound Waves, SC_ for Sound Cues87- Import path: /Content/Audio/{Category}/8889## UE Import Automation9091```python92import unreal9394def import_asset(filepath, destination, asset_type="mesh"):95 task = unreal.AssetImportTask()96 task.filename = filepath97 task.destination_path = destination98 task.automated = True99 task.replace_existing = True100101 if asset_type == "mesh":102 task.options = unreal.FbxImportUI()103 task.options.import_materials = True104 task.options.import_textures = True105106 unreal.AssetToolsHelpers.get_asset_tools().import_asset_tasks([task])107 return task.imported_object_paths108```109110## Asset Budget (UnrealFrog)111112| Category | Per-Asset Budget | Scene Budget |113|----------|-----------------|--------------|114| Frog character | 1000-2000 tris | — |115| Vehicle | 300-1000 tris | 10K total |116| Log/platform | 200-500 tris | 5K total |117| Environment prop | 100-500 tris | 20K total |118| Road/water tile | 50-200 tris | 5K total |119| **Total scene** | — | **< 100K tris** |