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

4.9 KiB
Raw Blame History

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.fbxUAL1_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.