Skip to content

Commit 795e897

Browse files
committed
feat(pipeline): consolidate master pipeline orchestration and remove legacy module
Refactor the master pipeline orchestration by integrating the functionality previously found in `pipeline_master.py` into `pipeline.py`. This update establishes a unified DAG for asset processing, enhancing clarity and maintainability. The legacy pipeline has been deprecated, and all references have been updated to reflect the new structure. Additionally, improvements to progress tracking and observability fields have been implemented, ensuring a more robust asset processing workflow.
1 parent 4ead91e commit 795e897

7 files changed

Lines changed: 738 additions & 756 deletions

File tree

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ VibeGame has its own CI workflow in `VibeGame/.github/workflows/` (Bun + TypeScr
394394

395395
- **Arquitetura de responsabilidades — mesh operations**: O **Text3D** é o único dono de operações de mesh (LOD, collision, simplify, remesh, remesh-textured, `topology-fix`, `bake-master`). O GameAssets NÃO deve conter código de mesh — apenas orquestra subprocessos `text3d`. Não usar `bpy` nem `trimesh` diretamente no GameAssets (o legado `bpy_simplify.py` foi removido). O `text3d lod` preserva armatures/animations — não é necessário um caminho separado para LOD rigged. Transferência de weights rigged HI → LODs é responsabilidade do `rigging3d transfer-weights` (não do Text3D).
396396

397-
- **Master pipeline (`gameassets batch`, agora default)**: DAG canónico em `GameAssets/src/gameassets/pipeline_master.py` com stages numeradas: (1) `text3d generate` (shape cru), (2) `text3d topology-fix` (clean, inclui `--export-origin feet|center|none` e `--fill-holes-sides N`), (3) paint, (4) `text3d bake-master` (LOD0 com bake de normais + KTX2/meshopt opcionais a partir do high-poly clean), (5–7) LOD1/LOD2/collision, (8) `rigging3d transfer-weights --source HI --target LOD0 --target LOD1 ...`, (9) animate por LOD, (10) `gamedev-lab check glb --category ...`. Intermediários (`shape`, `painted`, `rigged_hi`, `clean`, `normal_map`) são movidos para `_intermediate/` no fim — o `resume` do batch tem de procurar nesses caminhos para não regenerar do zero quando os intermediários já foram arquivados. `GameProfile` tem `master_pipeline`, `master_validate`, `master_bake_normais`; `--legacy-pipeline` força o pipeline antigo. Flag `text3d generate --no-topology-fix` mantém o Stage 1 cru. A correção de orientação/origem Hunyuan3D → OpenGL (rotação que põe o modelo de pé) tem de ser propagada por **todas** as stages; regressão típica é o mesh aparecer "de barriga para cima" já a partir do `_shape`.
397+
- **Master pipeline (`gameassets batch`, agora default)**: DAG canónico em `GameAssets/src/gameassets/pipeline.py` (`run_master_pipeline`) com stages numeradas: (1) `text3d generate` (shape cru), (2) `text3d topology-fix` (clean, inclui `--export-origin feet|center|none` e `--fill-holes-sides N`), (3) paint, (4) `text3d bake-master` (LOD0 com bake de normais + KTX2/meshopt opcionais a partir do high-poly clean), (5–7) LOD1/LOD2/collision, (8) `rigging3d transfer-weights --source HI --target LOD0 --target LOD1 ...`, (9) animate por LOD, (10) `gamedev-lab check glb --category ...`. Intermediários (`shape`, `painted`, `rigged_hi`, `clean`, `normal_map`) são movidos para `_intermediate/` no fim — o `resume` do batch tem de procurar nesses caminhos para não regenerar do zero quando os intermediários já foram arquivados. `GameProfile` tem `master_pipeline`, `master_validate`, `master_bake_normais`; `--legacy-pipeline` força o pipeline antigo. Flag `text3d generate --no-topology-fix` mantém o Stage 1 cru. A correção de orientação/origem Hunyuan3D → OpenGL (rotação que põe o modelo de pé) tem de ser propagada por **todas** as stages; regressão típica é o mesh aparecer "de barriga para cima" já a partir do `_shape`.
398398

399399
- **Validação GLB — `gamedev-lab check glb`**: usa `GameDevLab/src/gamedev_lab/glb_meta.py` (parser binário do GLB sem `bpy`) para extrair `attributes_present`, `extensions_used`, `texture_mime_types`, `v_per_tri`, `world_bounds_y_min`. Aceita `--category <lod0|lod1|lod2|rigged|collision>` (regras YAML em `GameAssets/src/gameassets/data/rules/*.yaml`) e `--no-bpy-inspect` para correr sem Blender. Regras suportam `mesh_totals.v_per_tri`, `attributes_required`, `texture_format`, `compression`, `origin.y_min`, `face_count.max_per_category`.
400400

0 commit comments

Comments
 (0)