Files
animation/plans/ual-to-iclone-handoff-2026-07-28.md
T
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

88 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Handoff: UAL animation library → iClone (2026-07-28 morning)
## Goal
Get all ~134 Universal Animation Library (Kevin Iglesias) clips into iClone as reusable
motions on a character, so they can be layered/blended into new animations.
## ▶ FIRST THING TO DO (5 min, everything is staged)
Import this file into iClone via the **motion import** flow (select Lena or any avatar first):
```
C:\Users\Jeremy\tinqs\animation\UAL-Lib\Universal Animation Library 2[Source]\Unity\UAL2_takes_fixed.fbx
```
Dialog settings:
- **Character profile:** browse to
`A:\Program Files (x86)\iClone 8\Program\Assets\Share\CharaterizeProfiles\UE4_Skeleton.3dxProfile`
(folder name really is "CharaterizeProfiles" — Reallusion typo)
- **Motion T-Pose:** leave EMPTY. If iClone refuses without one, use
`...\Universal Animation Library 2[Source]\Female Mannequin\Unity\Mannequin_F.fbx`
(verified: identical 66-bone skeleton to UAL2)
- **Auto gen to perform list:** checked
- Keep root motion: default (RL_BoneRoot n/a here — source root is `root`)
- Select ONLY this one file (multi-selecting mixed-skeleton files causes the
"same bone structure" error)
Then check: character upright? → **right-click avatar → Perform** (or Animation Player →
Motion dropdown → Perform → Perform List Editor). Expect up to **134 takes** listed.
## Why this should work now (last night's chain of fixes)
1. **Original vendor FBX imports upright** (user-verified as prop; measured upright via
bridge). All Blender re-exports lie down — never route UAL through Blender for iClone.
2. **"No applicable character profile"** → fixed: iClone ships `UE4_Skeleton.3dxProfile`,
exact match for UAL bone names (pelvis/spine_0103/neck_01/clavicle_l/ball_l...).
3. **"Not compatible with profile T-pose"** → cause: `CC_Base_TPose.fbx` (a CC-skeleton
leftover from dead experiments) was in the Motion T-Pose field. Wrong skeleton. Leave
field empty / use Mannequin_F.fbx.
4. **"Failed to save motion file" ×134** → ROOT CAUSE FOUND: every take is named
`Armature|Bow_Shoot` — the `|` is illegal in iClone motion names & Windows filenames.
The error dialog listing UAL2.fbx 134 times proves iClone DOES enumerate all takes.
→ Fixed by byte-safe patch (`|``_`, same length, structure untouched):
**UAL2_takes_fixed.fbx** (134 takes verified, names now `Armature_Bow_Shoot` etc.)
## If the import succeeds
- Do the same for library 1: patch takes the same way
(`UAL-Lib\Universal Animation Library[Pro]\Unity\UAL1.fbx``UAL1_takes_fixed.fbx`).
One-liner pattern lives in this chat; simplest: ask Claude to "patch UAL1 take names
like UAL2".
- Save the converted motions into a custom motion library folder so they persist
(drag from Perform list / save as .rlMotion into
`A:\Reallusion Content\Reallusion Custom\Animation\Motion\`).
- Optional: `_RM` variants of both files carry root-motion versions of the same clips.
## If it fails again
Note the EXACT error text + which file was in each dialog slot, then resume with Claude.
Fallback order: (a) Motion T-Pose = Mannequin_F.fbx; (b) import a handful of takes at a
time; (c) split the patched FBX into single-take files WITHOUT Blender rig changes.
## Dead ends — do NOT retry (all disproven with measurements, see memory)
- Blender-retargeted CC_Base FBX into iClone (characterizer always lays it down;
rotations/axis flags/T-pose/root-motion settings all disproven).
- `RFileIO.ConvertFbxFileToRLMotion` on any Blender-built FBX (needs native fbxKey).
- `RFileIO.LoadFbxFile` via bridge for characters (pops a modal that freezes iClone
AND the bridge until manually dismissed).
- Direct bone-keying via bridge (48/55 bones OK, but legs+hip are HIK/IK-locked, no
API toggle → full-body clips come out leg-broken).
## Useful assets/tools produced
- `UAL2_takes_fixed.fbx` — the deliverable input file (134 legal take names).
- Bridge: `python tools/iclone_bridge.py --ping|--exec|--file` (iClone must be running).
- Bone-orientation measurement snippet (paste-ready): read `CC_Base_Head` minus
`CC_Base_Hip` world positions via bridge; up should be +Z.
- Scratchpad (this session) has: `ual_to_cc.py` (Blender UE→CC retargeter — works for
Blender/GLB targets, NOT for iClone import), calibration data for iClone's per-bone
Euler FK API (order XYZ right-to-left), `dummy_cc_base.fbx` (CC_Base skeleton export).
- Old CC experiments quarantined in
`A:\Reallusion Content\Reallusion Custom\Animation\Motion\Tests\old_cc_experiments\`
— safe to delete once the new route works.
## Context worth remembering
- UAL clips are on the UE4-mannequin skeleton; the whole library lives as 134 takes
inside ONE FBX (Unity folders). GLB equivalents (Unreal-Godot folders) already have
all 134 clips separated — the GAME pipeline can consume those directly without iClone.
- iClone is only needed for AUTHORING new motions from these clips; for pure playback
in ariki-game, the GLBs are already usable.