3D Character Pipeline¶
Skill ID: ivx-3d-character-pipeline
name: ivx-3d-character-pipeline description: >- AI-powered 3D character generation with mesh, rigging, animation, and FBX/GLB export. Outputs conform to IntelliVerseX SDK schemas (character-3d-meta-v1, skeleton-v1, state-machine-v1). Use when the user says "3D character", "generate 3D model", "rigged character", "FBX character", "3D to sprites", "mesh generation", "character rigging", "motion library", "skeletal animation", "blend shapes", "3D game character", or needs 3D character assets for any game engine. version: "1.0.0" author: "IntelliVerse-X team@intelli-verse-x.ai" allowed-tools: - Read - Write - Edit - Glob - Grep - Shell
Overview¶
The 3D Character Pipeline generates production-ready 3D game characters from text descriptions or 2D reference images. It produces rigged meshes, skeletal animations, blend shapes, and optionally renders 2D sprite sheets from 3D — all validated against IntelliVerseX SDK schemas (character-3d-meta-v1, skeleton-v1, state-machine-v1).
Input (text or image)
│
▼
┌── Content-Factory ──────────────────────────────────┐
│ Mesh Gen (Trellis/Meshy) → MeshRigger (skeleton) │
│ → AnimationApplicator (presets) → BlenderRenderer │
│ → IVX Schema Export → S3 Upload │
└──────────────────────┬──────────────────────────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
3D Mode Hybrid 2D-Only
GLB/FBX FBX + Sprite
+ anims sprites sheets
Modes¶
| Mode | Output | Best For |
|---|---|---|
3d | GLB mesh + rigged FBX + animation FBX clips | 3D games (Unity, Unreal, Godot 3D) |
hybrid | All of 3D mode + Blender-rendered 2D sprite sheets | Games needing both 3D assets and 2D fallbacks |
2d | 2D sprite sheets only (rendered from generated 3D) | 2D games wanting 3D consistency across views |
Content-Factory API¶
Trigger via MCP¶
trigger_pipeline character_3d --game_id my-game --mode hybrid --character "An armored knight with a glowing sword"
Trigger via REST¶
curl -X POST http://localhost:8001/pipelines/character_3d \
-H "Content-Type: application/json" \
-d '{
"game_id": "my-game",
"mode": "hybrid",
"characters": [
{
"name": "Knight",
"description": "An armored knight with a glowing sword and heavy shield"
}
],
"actions": ["idle", "walk", "run", "attack", "hurt", "death"],
"generate_expressions": true,
"ivx_export": true
}'
Generated Output¶
3D Mode¶
characters/Knight/
├── mesh/
│ ├── Knight.glb # Generated mesh
│ └── mesh_spec.json # Mesh generation metadata
├── rigged/
│ └── Knight_rigged.fbx # Rigged with skeletal hierarchy
├── animations/
│ ├── idle.fbx # Per-action animation clips
│ ├── walk.fbx
│ ├── run.fbx
│ ├── attack.fbx
│ ├── hurt.fbx
│ └── death.fbx
└── ivx/ # SDK-compliant exports
├── character_3d.json # Validates: character-3d-meta-v1
├── skeleton.json # Validates: skeleton-v1
├── state_machine.json # Validates: state-machine-v1
├── animations/
│ ├── idle.glb
│ ├── walk.glb
│ └── ...
└── textures/
├── T_Knight_Albedo.png
├── T_Knight_Normal.png
└── T_Knight_ARM.png
Hybrid Mode (adds sprites/)¶
characters/Knight/
├── ... (all 3D output above)
├── sprites/ # Blender-rendered 2D sheets
│ ├── idle.png # Horizontal strip from 3D render
│ ├── walk.png
│ └── ...
└── ivx/
├── ... (all 3D schemas above)
└── sprites/ # 2D sprite specs
├── idle_spec.json # Validates: sprite-spec-v1
└── ...
SDK Schema Compliance¶
character_3d.json (character-3d-meta-v1)¶
{
"id": "Knight",
"display_name": "Knight",
"type": "3d_rigged",
"rarity": "common",
"version": "1.0.0",
"mesh": {
"file": "Knight.glb",
"poly_count": 8500,
"vertex_count": 12000,
"material_count": 2,
"submeshes": ["body", "armor"]
},
"lods": [
{ "level": 0, "file": "Knight.glb", "poly_count": 8500, "screen_pct": 0.5 }
],
"skeleton": {
"file": "skeleton.json",
"bone_count": 65,
"root_bone": "Hips",
"humanoid_mapped": true,
"ik_chains": {
"left_foot": { "root": "LeftUpperLeg", "tip": "LeftFoot", "pole": "LeftKnee" },
"right_foot": { "root": "RightUpperLeg", "tip": "RightFoot", "pole": "RightKnee" }
},
"attachment_points": {
"right_hand_weapon": "RightHandSocket",
"left_hand_shield": "LeftHandSocket"
}
},
"textures": {
"albedo": { "file": "textures/T_Knight_Albedo.png", "size": [2048, 2048], "srgb": true },
"normal": { "file": "textures/T_Knight_Normal.png", "size": [2048, 2048], "srgb": false }
},
"materials": [
{ "name": "M_Knight_Body", "shader": "pbr_standard", "submesh": "body", "textures": ["albedo", "normal"] }
],
"animations": {
"idle": { "file": "animations/idle.glb", "duration_sec": 2.0, "loop": true, "layer": "base" },
"walk": { "file": "animations/walk.glb", "duration_sec": 1.0, "loop": true, "layer": "base", "root_motion": true },
"attack": { "file": "animations/attack.glb", "duration_sec": 0.8, "loop": false, "layer": "base" },
"hurt": { "file": "animations/hurt.glb", "duration_sec": 0.5, "loop": false, "layer": "base" },
"death": { "file": "animations/death.glb", "duration_sec": 1.8, "loop": false, "layer": "base" }
},
"state_machine": "state_machine.json",
"bounds": { "center": [0, 1.0, 0], "size": [1.0, 2.0, 1.0] },
"sounds": { "on_footstep": "sfx_footstep", "on_hurt": "sfx_character_hurt" },
"tags": ["humanoid", "armored"]
}
Mesh Generation Providers¶
| Provider | Model | Output | Strengths |
|---|---|---|---|
| Trellis (via PiAPI) | Image/text → 3D | GLB | Stylized characters, game-ready topology |
| Meshy (via PiAPI) | Image/text → 3D | GLB | Realistic characters, higher detail |
Rigging & Animation¶
| Stage | Tool | Input → Output |
|---|---|---|
| Mesh → Rig | MeshRigger | GLB → FBX with skeleton hierarchy |
| Rig → Animate | AnimationApplicator | Rigged FBX + preset → animated FBX per action |
| Text → Motion | HY-Motion | Text prompt → FBX/BVH clip |
| Video → Motion | VideoToMotionPipeline | Video reference → motion capture FBX |
| 3D → 2D | BlenderSpriteRenderer | Rigged model → 2D sprite sheet per action |
Motion Library¶
Generate a full library of motion clips categorized by game genre:
curl -X POST http://localhost:8001/pipelines/motion_library \
-d '{"game_id": "my-rpg", "game_type": "rpg", "ivx_export": true}'
Output: FBX clips + motion_library.json manifest with categories (idle, locomotion, combat, emote, interaction).
Engine Import¶
| Engine | 3D Import | Animation Import |
|---|---|---|
| Unity | FBX → Humanoid Rig → Avatar | FBX → AnimationClip → Animator Controller |
| Unreal | FBX → Skeletal Mesh → Skeleton | FBX → Animation Sequence → Anim Blueprint |
| Godot | GLB → MeshInstance3D → Skeleton3D | GLB → AnimationPlayer → AnimationTree |
| Roblox | GLB → MeshPart → Humanoid | Motor6D animation |
Platform Notes¶
VR¶
- Target 10K-15K polys for Quest standalone
- Include LOD1 at 5K polys for distance rendering
- Blend shapes critical for avatar expression in social VR
Console¶
- PS5/Xbox: up to 50K polys, full PBR textures at 4K
- Switch: 8K-12K polys, 1K textures, simplified shaders
Mobile¶
- 3K-8K polys depending on device tier
- Compress textures with ASTC (Android) / PVRTC (iOS)
Checklist¶
- Content-Factory API accessible
- Character description or reference image provided
- Mode selected (
3d,hybrid, or2d) - Pipeline triggered with
ivx_export: true -
character_3d.jsonvalidates againstcharacter-3d-meta-v1 -
skeleton.jsonvalidates againstskeleton-v1 -
state_machine.jsonvalidates againststate-machine-v1 - Mesh imported into target engine
- Rig mapped to engine's humanoid system
- Animation clips loaded and playing
- Blend shapes working (if applicable)
- Texture maps applied (albedo, normal, ARM)
- VR: poly count under budget, LODs generated
- Console: texture compression applied
- Mobile: mesh optimized for target poly budget