15 Commits

Author SHA1 Message Date
jeremy 23fc4b378e docs(characters): brows went back to painted on 2026-08-12
Merging origin/main in ariki-game surfaced a product decision newer than this doc:
Ozan removed the mesh brows, lash cards and browless-face swap from the product path.
Brows are painted on the body texture again and keep their baked colour, so "brows
follow the hair swatch" and the generated-surface lane are both parked.

The tooling and the brow wiki page still describe the 3D lane, so the note now says to
read the code before the docs there.

Two consequences outlive the revert and are kept: painted brows are still atlas-bound,
so the v02 re-atlas has to carry the pigment (an albedo-fidelity job now, not three
artifacts to regenerate); and character_brow.gdshader is still the only mechanism that
could recolour a brow on a scanned face, since raised scan geometry cannot be erased
with a texture.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 17:47:00 -07:00
jeremy 760cf12788 feat(characters): hair-fit measurement + head-features contract
Ozan's hair system rebinds Quaternius styles (100% rigid to one Head bone) onto
whichever body loads, corrected by three hand-tuned constants in
CharacterBuildData.HeadFit. Those constants are only valid against the skull they
were tuned on, and nothing re-checks them when a body is rebaked. Both ship bodies
are currently wrong, in opposite directions.

tools/measure_head_shell.py:
  --fit     solve HeadScale/HairOffset from two cranium landmarks. A scale-about-
            pivot plus a translate has exactly two degrees of freedom per axis, so
            the crown + widest-cranium slice determine both outright -- no bed pass.
  --sweep   score every style against the clearance it was AUTHORED with on its own
            stock rig (a mohawk stands proud, a beard hangs at the chin -- absolute
            crown height is not the test).
  default   full Head-weighted shell AND the cranium band. The full shell is what
            MakoHeadFit quotes; it is inflated several cm by jaw/ear/neck weight
            bleed and is not the surface a cap sits on.

Measured against the shipped GLBs:
  Lena  cranium needs Y 0.960, carries 1.431 (+49%) -- every style floats 4.4-7.3cm
  Mako  cranium needs Y 1.186, carries 1.346 (+13%) -- every style sinks, buzz cut
        2.2cm into his skull, moustache 8.0cm low
Solved constants take Mako to 0.00cm worst error over 10 styles, Lena to 0.29cm mean.

docs/characters/head-features-contract.md records the system, the measurements, and
what a 3-constant fit still cannot reach: Lena needs 1.613 in X but 1.311 in Z, a
23% anisotropy that stretches an authored cap sideways and drags ear cutouts along a
diagonal. That is Ozan's logged residual and wants a per-body geometry bake. Mako's
anisotropy is only 3%, so constants alone should suffice for him.

Also noted: the whole hair set shares just two base textures, so "authored per-colour
hair textures" -- the fix the wiki writes off in favour of the /0.55 swatch hack --
is 16 PNGs.

Crown placement is rest-pose arithmetic; X/Z and the in-bed look are unverified.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 16:07:34 -07:00
jeremy a2fe8f334d Merge branch 'main' of https://tinqs.com/tinqs/animation 2026-08-11 16:16:49 -07:00
jeremy e08ad2f3e9 docs(animations): naming conventions, wiring audit, unwired catalogue + claude-desktop context brief
NAMING.md/AUDIT.md/UNWIRED.md are the conventions-doc pivot after the
mass-rename was killed; committing so the bridge repo tree is clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-11 16:07:41 -07:00
jeremy 3ba86b2ea8 feat: clothing lane, character sources, and DCC bridges
Bulk import of the working lanes that were living untracked on the PC.

Content:
- characters/  Lena/male body lanes, bakes, texture work, run logs
- clothing/    garment pipeline, configs, gates, contract docs
- garments/    MD-authored garment sources (.zprj/.zpac)
- UAL-Lib/     Universal Animation Library 2 source (.blend/.fbx/.glb)
- tools/       blender_bridge, iclone_bridge, md_bridge, tailor, glm_agent
- docs/, plans/, dev/, .agents/plans/

Repo hygiene:
- .gitattributes: LFS now covers .blend, .zprj, .zpac, .obj, .npy and the
  Reallusion .iAvatar/.ccAvatar/.ccRestore containers. Without this the
  ~3.8 GB in this commit would land as raw blobs. .png/.jpg are left out
  on purpose — ~250 are already tracked raw and converting them would
  rewrite every one without shrinking history.
- .gitignore: exclude /accurig/ (~1 GB AccuRig program files, redistributable
  from Reallusion, nothing authored here) and /dev/null/ (git-lfs hook copies
  dropped by a `>/dev/null` redirect on Windows).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-06 15:55:43 -07:00
jeremy 854dbb5ce4 chore(agents): migrate to agents.md protocol — .agents/ wiki/plans/rules/skills
Root AGENTS.md is now a thin entry point + knowledge map; the batch-workflow
detail it duplicated already lived in .claude/skills/animation/SKILL.md.
Folded docs/ (dances registry + iclone-bridge stub), root plans/, and
devops-reports/ into .agents/wiki/ and .agents/plans/ per the per-repo .agents/
convention. Added .agents/SOUL.md, .agents/AGENTS.md, wiki/ARCHITECTURE.md,
wiki/architecture/, and wiki/master-plan.md (derived from the closed plans +
the dance registry's live ceremony-slot table). Fixed doc-path references in
exchange/GUIDE.md, the animation skill, and the iclone-bridge stub. All moves
via mv (git detected as renames) — no content deleted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-24 15:02:47 -07:00
jeremy b4d962167f fix(audit): converge on the 2026-07-23 animation standard — tool sync, QuatSkin INBOX, registry corrections
From the conformance audit (ariki-game .agents/audits/animation-standard-assessment-2026-07-23.md):
- tools/: cc_retarget + mixamo_retarget re-synced from ariki-game (were stale forks
  missing --despike/--fingers/--map ual); kevin_retarget path now repo-relative;
  mirror rule documented in exchange/GUIDE.md
- INBOX/lena: add canonical Ariki_Female_QuatSkin.glb; README marks MixamoSkin superseded
- REGISTRY: tide_dance_01 flagged (no DanceType enum entry); rain_dance note corrected
  (RainDance IS in the enum); boat table notes live canoedismount1/run_to_dive; QC split
  (loop_qc pre-commit vs anim_qc post-ingest) documented
- docs/iclone-bridge.md: stub created (GUIDE referenced it but it never existed)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-23 15:37:55 -07:00
jeremy c79d23549a feat(dances): convert baraka1 → nd_01 (+ nd_01_pp loop)
Retarget baraka1.fbx (iClone, 1800f@60) to nd_01.glb (clip ND01) and bake
the ping-pong loop variant nd_01_pp.glb (clip ND01PP). _pp passes loop_qc.py
(0.00 seam pose/velocity gap). Provisional id per registry; awaiting ceremony
assignment.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 10:28:07 -07:00
jeremy f468d148bc feat(profiling): add dance motion profiler + beat-energy profiles for adopted dances
tools/dance_profile.py samples world-space bone positions per frame in
Blender headless and emits a per-beat motion-energy timeline (accents,
phrases, totals) at a given BPM. Profiles generated for war_dance_01,
fertility_dance_01, taming_dance_01.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-21 09:52:06 -07:00
jeremy 4d6a4f6006 feat(props): export game boat as iClone staging prop (boat_prop.fbx)
tools/export_boat_prop.py (GLM-implemented, 2 rounds): hull at game scale
(8.5 m, keel 0, no recenter) + placeholder mast/sail/steering oar + 5 seat
markers + waterline + 1.9 m ref figure; self-verify incl. right-side-up
gates added after round 1 shipped an upside-down hull with all checks
green. Registry: boat actions table (6 slots, direct names). README
carries CC BY 4.0 attribution + iClone import/filming notes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 10:40:37 -07:00
jeremy df2629af16 feat(naming): adopt war_dance_01, fertility_dance_01, taming_dance_01
hakadance1->war_dance_01, aloha1->fertility_dance_01, dance1->taming_dance_01,
each with a _pp loop variant (all SMOOTH per loop_qc). Loop rule: every
adopted dance ships base + _pp pair. GLM trim+blend loop variants archived
(ping-pong is the loop standard).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:48:52 -07:00
jeremy 9b190e742e docs(naming): ceremony codes follow game item-id convention (snake_case DanceType)
13 ceremony slots tabled in the registry (12 DanceType + rain_dance),
provisional ids now nd_##; codes like war_dance_01 / WarDance01.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:36:03 -07:00
jeremy 6a1290b1d1 docs(naming): dance codes are ceremony-based (<ceremony><NN>)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:28:35 -07:00
jeremy b918d8670f feat(naming): dance registry + two-stage naming system; archive non-keepers
Keep aloha1(+pp), dance1(+pp), hakadance1. Archive hakadance2, alohaOG,
firedance1, hakaOG (all variants) to archive/. New dances get provisional
nd## ids at conversion; rename to a dance code (haka01 etc.) only on
adoption via tools/rename_clip.py. Registry: docs/dances/REGISTRY.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 14:06:56 -07:00
jeremy da0567b79d docs(dances): dance1 motion description from Blender kinematic analysis
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 13:48:10 -07:00