feat(skin): add skin system + Miku character skin

Skin System:
- PlayerSkin resource class (model_path, color_tint, etc.)
- SkinManager with default skins: Default, Red Team, Forest, Miku
- HumanoidModel.apply_skin() supports both GLB model replacement
  and procedural color tinting
- Procedural meshes auto-hide when GLB model is loaded

Miku Skin:
- 43-part procedural model generated in Blender (headless)
- Twin tails, headphones, thigh-high socks, idol outfit
- Teal/cyan color scheme with red accents
- Exported to assets/characters/skins/miku.glb
- Applied to player 1 in test level builder

Pipeline:
- Blender 5.0.1 + MCP addon installed
- Bridge script for socket-based Blender control
- docs/3D_ASSET_PIPELINE.md documents full workflow
This commit is contained in:
2026-06-22 13:53:17 -04:00
parent 671b36c20c
commit a55eaff279
6 changed files with 177 additions and 0 deletions
+52
View File
@@ -0,0 +1,52 @@
# 3D Asset Pipeline for Papaya-Shooter
## Blender Setup
- Blender 5.0.1 installed system-wide
- Blender MCP addon at ~/.config/blender/5.0/scripts/addons/blender_mcp/
- Bridge: ~/blender-mcp/blender_bridge.py (socket port 9876)
- Start: xvfb-run -a blender --python ~/blender-mcp/blender_server.py &
## Export Workflow
1. Write Blender Python script (generate model, rig, animate)
2. Run: blender --background --python script.py
3. Export as .glb to assets/ subdirectory
4. Godot auto-imports on editor open
## Directory Structure
- assets/characters/skins/ — player skin models
- assets/characters/animations/ — animation clips
- assets/weapons/models/ — weapon meshes
- assets/weapons/skins/ — weapon skin textures
- assets/props/ — level props
## Character System
- HumanoidModel: characters/humanoid_model.gd
- Procedural rig: torso, head, 4 arms, 4 legs with pivot nodes
- States: idle, run, crouch, slide, air, wall_run, wall_cling, grapple, dash, death
- Color: @export var color (StandardMaterial3D)
- shadows_only for local player (don't see own model)
- Weapon attach: set_weapon(script_path) → root_pivot child
## Loadout System
- LoadoutManager: globals/loadout_manager.gd (autoload)
- 5 slots, each: primary_1, primary_2, special, melee
- Save: user://loadouts.json
## Weapon System
- WeaponManager: weapons/weapon_manager.gd
- 1st person: SubViewport + vm_camera (layer 20)
- 3rd person: HumanoidModel.set_weapon()
## Skin System (NEW)
- Store skin metadata in loadout or player settings
- Each skin: display_name, model_path, texture_path, color_tint
- Apply by replacing HumanoidModel mesh nodes or swapping material
- For full model replacement: load GLB scene, reparent to player
## Godot 4.2.1 Compatibility
- absf() → abs()
- fog_sky_affinity → remove
- is not Type → not (x is Type)
- lerpf → lerp
- := from untyped arrays → explicit type
- preload() on parse-error scripts → load()