Wire the skinned model from ADR-0013 into NpcAvatar: - _build_skinned_body() instantiates the imported npc_base.glb, binds the 14 armature bones, and keeps the procedural _build_body() as the offline fallback (use_skinned_model can force it in tests) - outfit_for()/layer_for() tint the five material slots through the new SurfaceMaterials.npc_slot(); accessories and hand items attach under Rig/Head - the existing limb pivots (Hip/Knee/Shoulder/Elbow/Hand + Head marker) keep the old animation math; _sync_skeleton() copies their rotations to bones. Bone pose rotation is absolute local orientation, so it is composed with the rest basis (otherwise the whole body snaps into a broken pose) - skinned rigs scale uniformly (non-uniform parent scale shears the skin) and keep Rig/Head for the focus cone, nametag, and reaction tag - commit the editable npc_base.blend plus a .gdignore: Godot's editor otherwise tries to import the blend and hangs during --import - npc_pipeline audit tests (contract, textures, clean GLB, committed source) Verification: headless 212/212, Python tooling 60/60, NPC budget 16 avatars = 144 meshes at ~6.9 ms, movement/focus/props smokes pass, compare 11 good / 0 bad. TODO Phases 0-3 checked; environment lift and release remain.
60 lines
898 B
Plaintext
60 lines
898 B
Plaintext
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*.pyo
|
|
*.pyd
|
|
*.pycache
|
|
*.pytest_cache
|
|
*.mypy_cache
|
|
*.coverage
|
|
coverage.xml
|
|
htmlcov/
|
|
dist/
|
|
build/
|
|
eggs/
|
|
*.egg-info/
|
|
.tox/
|
|
.nox/
|
|
*.venv/
|
|
venv/
|
|
ENV/
|
|
env/
|
|
env.bak/
|
|
venv.bak/
|
|
|
|
# Godot 4
|
|
.godot/
|
|
*.import
|
|
.android/
|
|
# export_presets.cfg is committed so builds are reproducible
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Editor
|
|
*.tmp
|
|
*.new
|
|
|
|
# Logs and temp
|
|
*.log
|
|
user://
|
|
# CI runner workflow logs (written into the checkout by the Gitea runner)
|
|
.gitea/logs/
|
|
build/
|
|
|
|
.env
|
|
|
|
# AI / asset-development outputs (regenerated by the tools; not shipped in the game)
|
|
assets/models/concepts/
|
|
assets/models/npc/*.blend1
|
|
assets/textures/npc/ai/
|
|
assets/textures/ai/*
|
|
!assets/textures/ai/game_ready/
|
|
# Godot extracts embedded glTF textures next to the source on import
|
|
assets/models/generated/npc_base_*_albedo.png
|
|
assets/models/generated/npc_base_*_normal.png
|
|
|
|
# Local AppImage extraction
|
|
squashfs-root/
|