- pipeline/render_moves.py: headless Blender 5.x renderer — imports rigged FBX/GLB, remaps Mixamo bone namespaces (mixamorigN:), fixes FBX axis/scale, normalises height, centres ground pivot, renders transparent ortho sprites - engine: sprite_scale in manifest (scales sprite + all boxes), --p1/--p2 roster picks for testing - characters/trainer: woman_athleisure_01 (Mixamo, web-ok) rendered through the full pipeline as integration proof — idle/jab/hit from NPC clips, silhouette auto-hurtboxes, verified in-game vs alpha Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
34 lines
1.7 KiB
Markdown
34 lines
1.7 KiB
Markdown
# FOITIN asset pipeline (MODELBEAST)
|
||
|
||
New fighter = one pass through this pipeline. Target cost: hours, not weeks.
|
||
Steps 1–3 run as MODELBEAST jobs (queue on m3ultra `:8777` — see the fleet skill);
|
||
4–6 run locally.
|
||
|
||
```
|
||
1. IDENTITY FLUX + character LoRA → master portrait(s), costume locked
|
||
2. MESH Hunyuan3D-2.1 / TRELLIS → textured 3D mesh (GLB) from portrait
|
||
3. RIG+MOVES auto-rig → retarget the SHARED move library (~30 clips) onto the rig
|
||
(character-specific specials are extra clips, added per character)
|
||
4. RENDER render_moves.py (Blender headless, tested on Blender 5.1):
|
||
handles Mixamo namespace remap, axis fix, height normalisation,
|
||
first-frame pivot centring, transparent ortho side camera
|
||
→ renders/<char>/<move>/####.png
|
||
/Applications/Blender.app/Contents/MacOS/Blender -b \
|
||
--python pipeline/render_moves.py -- \
|
||
--char <rigged.fbx|.glb> --clips <dir_or_list> --out renders/<id> \
|
||
--rotz 155 --step 2
|
||
5. HITBOX autohitbox.py — DWPose over rendered frames → hurtbox rects per move
|
||
6. PACK pack_character.py — assemble characters/<char>/ per CHARACTER_SPEC.md
|
||
```
|
||
|
||
Timing/damage numbers still get tuned by hand in each move's `data.json` —
|
||
that's game feel, not asset work. Startup/active windows: see STUDY.md §2
|
||
(modern pacing, NOT BKB's 53-frame jab).
|
||
|
||
## Naming
|
||
|
||
Use the shared move vocabulary (`idle`, `walk_f`, `jab`, `kick`, `hit`,
|
||
`knockdown`, …, spec/CHARACTER_SPEC.md "Required move names") so every
|
||
character drops onto the same FSM with zero engine changes — the Mortal Kombat
|
||
uniform-mechanics doctrine, same reason BKB could ship 12 fighters on one exe.
|