Game guide · source of truth
Ledger

CHR-WUKONG-20261005-01

Rig Wukong test model (body, antenna feathers, scarf, sashes), colour from owner turnaround, browser demo + clip

← Ledger

donestatus · art
4✓ tests passed / failed
315.44Mtokens · 302 min
12evidence files · 17.1 MB

Evidence

From logs/evidence/CHR-WUKONG-20261005-01/. Click a thumbnail for the full image.

Images (7)

texture_vs_artwork.png
texture_vs_artwork.png · 1.2 MB
camera_fit_overlays.jpg
camera_fit_overlays.jpg · 207 kB
clips_body_only.jpg
clips_body_only.jpg · 313 kB
deformation_poses.jpg
deformation_poses.jpg · 169 kB
poster_rig.png
poster_rig.png · 192 kB
poster_run.png
poster_run.png · 277 kB
poster_stop.png
poster_stop.png · 263 kB

Clips (2)

wukong_rig_view.mp4 · 7.5 MB
wukong_showcase.mp4 · 6.9 MB

Logs and data (3)

demo_test.json · 2 kB · open
{
  "pass": true,
  "checks": [
    {
      "name": "model loaded: 167 joints, 77 simulated spring bones in 16 chains",
      "ok": true,
      "detail": "{\"bones\":167,\"springBones\":77,\"chains\":16}"
    },
    {
      "name": "clips idle/walk/run/spin_jump present",
      "ok": true,
      "detail": "idle,run,spin_jump,walk"
    },
    {
      "name": "canvas shows the textured model (colour variety, red cloth and gold armour pixels)",
      "ok": true,
      "detail": "{\"colours\":239,\"red\":158,\"gold\":62}"
    },
    {
      "name": "idle: spring chains stay near the sculpted pose (max tip deviation < 0.6 m)",
      "ok": true,
      "detail": "0.243 m"
    },
    {
      "name": "running: cape/feathers/sashes trail the body (tip deviation > 1.0 m)",
      "ok": true,
      "detail": "1.327 m"
    },
    {
      "name": "after stopping the chains swing on, then settle again",
      "ok": true,
      "detail": "0.5 s: 1.26 m, 5 s: 0.11 m"
    },
    {
      "name": "all spring joints finite and in range",
      "ok": true
    },
    {
      "name": "spring physics off: every chain returns exactly to the rig pose",
      "ok": true,
…
glb_report.json · 1 kB · open
{
  "file": "art/3d/wukong/demo/wukong.glb",
  "sizeMB": 4.15,
  "verts": 49006,
  "tris": 53353,
  "joints": 167,
  "deformBonesWeighted": 129,
  "springChains": 16,
  "springBones": 77,
  "maxInfluences": 4,
  "texture": {
    "w": 2048,
    "h": 2048,
    "format": "jpeg"
  },
  "heightM": 1.949,
  "animations": [
    {
      "name": "idle",
      "duration": 3,
      "channels": 132
    },
    {
      "name": "run",
      "duration": 0.667,
      "channels": 132
    },
    {
      "name": "spin_jump",
      "duration": 1.2,
      "channels": 132
    },
    {
      "name": "walk",
      "duration": 1,
      "channels": 132
    }
  ],
  "pass": true,
  "fails": [],
…
rig_validation.json · 4 kB · open
{
 "pass_": true,
 "checks": [
  {
   "name": "Zoen skeleton: prefix-free Mixamo names, root and sockets present",
   "ok": true,
   "detail": ""
  },
  {
   "name": "Hips hangs under root",
   "ok": true,
   "detail": ""
  },
  {
   "name": "16 spring chains, all bones exist, every chain ends in a non-deforming tip",
   "ok": true,
   "detail": ""
  },
  {
   "name": "77 deforming spring bones (4 antenna x 8, cape 3 x 6, 9 sashes)",
   "ok": true,
   "detail": "77"
  },
  {
   "name": "every vertex weighted, weights sum to 1",
   "ok": true,
   "detail": "unweighted 0, not normalised 0"
  },
  {
   "name": "<= 4 influences per vertex (Zoen budget)",
   "ok": true,
   "detail": "0"
  },
  {
   "name": "no weights on non-deforming bones (tips, sockets, root)",
   "ok": true,
   "detail": "0"
  },
  {
   "name": "UVs inside 0..1",
…

Tests

pass rig validation in Blender: names, sockets, weights normalised <=4 influences, 16 spring chains / 77 spring bones, UVs, 8 extreme poses (cloth islands rigid, <=0.05% edges >4x) · 2.6 s · raw log$ /Users/king/Applications/Blender.app/Contents/MacOS/Blender -b art/3d/wukong/build/04_animated.blend -P tools/blender/wukong/wukong_validate_rig.py -- logs/evidence/CHR-WUKONG-20261005-01/rig_validation.json
pass glTF validation: 167 joints, spring config resolves to real bones, 4 influences, weights sum to 1, clips idle/walk/run/spin_jump, no keys on spring bones, 2048 JPEG albedo (wukong.glb) · 0.0 s · raw log$ node tools/blender/wukong/validate_glb.mjs art/3d/wukong/demo/wukong.glb logs/evidence/CHR-WUKONG-20261005-01/glb_report.json
pass browser demo (headless Chrome): loads, renders textured model, cape/feathers/sashes trail when running and settle after, springs on/off exact, spin-jump hands back to idle, no console errors · 19.3 s · raw log$ node tools/blender/wukong/demo_test.mjs logs/evidence/CHR-WUKONG-20261005-01/demo_test.json
pass browser demo re-run after final demo changes (clean mode, framing, 4K switch) · 18.9 s · raw log$ node tools/blender/wukong/demo_test.mjs logs/evidence/CHR-WUKONG-20261005-01/demo_test.json

Notes

2026-10-05 01:40 UTC · Evidence in logs/evidence/CHR-WUKONG-20261005-01/: wukong_showcase.mp4 (28 s scripted run/turn/stop/spin-jump, clean), wukong_rig_view.mp4 (same with bones overlay), texture_vs_artwork.png, deformation_poses.jpg, clips_body_only.jpg, camera_fit_overlays.jpg, rig_validation.json (18/18), glb_report.json, demo_test.json (12/12). Browser demo: art/3d/wukong/demo (python3 -m http.server 4320 --directory art/3d/wukong/demo; ?hq = 4K, ?auto = showcase, ?bones = overlay).

2026-10-05 01:40 UTC · Decisions: kept Tripo's 65-bone Mixamo body rig and its weights (cleaned to 4 influences, armour plates made rigid on their dominant bone); re-weighted cloth/feather islands by geodesic distance onto 77 new spring bones; colour = projection of the owner's four views onto a smart-UV atlas (per-part camera fit because the Tripo feathers/cape are larger than drawn); spring solver in JS mirrors VRM spring bones, config in wukong.springs.json + glTF extras. Fixes during the task: bone scale applied twice (connected bones), one-frame feedback delay made antenna chains unstable, damping model changed to VRM drag convention.

2026-10-05 01:40 UTC · Honest status: hero asset, over the Zoen player budget (53,353 tris vs 22,000; 129 weighted bones vs 80). Not rigged: face/jaw/eyes/ears, head fur, neck scarf (skinned), armour skirt spikes. Clips are procedural stand-ins. Texture carries baked light from the pictures; about 40% of covered texels have no direct view (filled by diffusion). Vendored three.js r185 (MIT) from a local npm copy; licence rows added. Test servers only on localhost, nothing deployed, no purchases.