|
|
||
|---|---|---|
| .. | ||
| autohitbox.py | ||
| batch_roster.py | ||
| combat_clips.md | ||
| pack_character.py | ||
| README.md | ||
| render_geared.sh | ||
| render_moves.py | ||
| strip_skin.py | ||
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.