# Character exports and compatibility

Verified 21 October 2026. Current → **Export character** offers Blender, Maya/other DCC, Unity, UE5 and generic glTF destinations. Select neutral/no animation, stepped walk, reach hold or panic hold. Every character export contains the chosen proportions, a neutral bind pose, 19 Ocean joints and a real skin binding. Each rigid piece has exactly one influence with weight 1.0; meshes do not bend.

The browser writes GLB for Blender/glTF tools and binary FBX 7.4 for Maya/Unity/UE. The FBX choices use the same centimeter, Y-up interchange data with destination-specific import guidance. They do not claim to create a Unity Humanoid avatar or an Epic Manny/Quinn rig.

## Native verification results

| Destination | What was tested | Result / limit |
|---|---|---|
| Blender 4.5.10 LTS | GLB: approved male, fitted female and a free body at 140% scale with longer torso/arms | 19 joints, 98 skinned pieces, single weights and held walk timing pass. Evaluated piece bounds match Ocean source vertices at multiple times. |
| Maya 2027, FBX plugin 2020.3.9 | FBX: the same three bodies | 19 joints, 98 skinClusters, single weights and held walk timing pass. Deformed vertex bounds match Ocean source geometry. |
| Unreal Engine 5.1.1 | FBX: native skeletal mesh, skeleton and animation import for all three bodies | Joint rotation samples preserve held poses after setting STEP interpolation. Female successfully reuses the male Skeleton asset; the free body creates its own. Engine skin vertices/weights were not independently inspected. |
| Unity 6000.1.2f1 | Attempted native batch import | **Blocked:** installed editor has no valid active license. The Generic-rig preset is available but is not qualified in Unity. |
| Other versions / software | None | Not certified by these tests. |

Fixtures, native reports and repeatable scripts live in `docs/compatibility-fixtures` and `scripts/compatibility`. The fixtures include a 0.68-second four-pose walk with 0.17-second holds. Automated JavaScript tests also reload skins/animations, compare every transformed vertex against source poses, and bind female meshes to the male skeleton.

## Import settings

**Blender:** use File → Import → glTF 2.0 for the Blender GLB. This route preserves STEP keys. Blender's FBX importer was also checked: geometry and skins load, but it replaces held interpolation with smooth movement. Use the dedicated Blender choice for animation fidelity.

**Maya:** enable `fbxmaya`, import the FBX with animation and skinning, and use the imported joints/bind pose. Data is centimeters, Y-up; the FBX declares its units. The tested imports retained constant animation tangents. This is a joint/deformation rig, not a control rig or automatic HumanIK characterization. Meshes remain individually editable rigid pieces.

**Unity:** import the FBX as **Generic**, create the Avatar from this model, preserve the hierarchy, disable **Resample Curves** and set animation compression **Off** for an initial timing check. Reuse an Avatar only for a matching hierarchy/rest setup. This guidance remains unverified locally because of the license blocker. Humanoid requires separate bone mapping and a suitable reference pose. See Unity's [animation import documentation](https://docs.unity.com/en-us/engine/6000.3/manual/animation-section/animation-mecanim/animation-clips/splittinganimations).

**UE5:** import as Skeletal Mesh with Import Animations enabled. For the first character create an Ocean skeleton; reuse it for a matching shared base. Disable the default 30 fps sampling and use **Custom Sample Rate = 100**, which represents the 170 ms holds exactly. Set the imported Animation Sequence's **Interpolation = Step**. Native UE import defaults to Linear even though the FBX curves are constant; the post-import setting is necessary. The tested clip length is 0.680000007 seconds. Existing Manny/Quinn animations require a separate IK Retargeter setup and pose/side mapping. Other UE5 versions need their own checks; Epic's current [FBX pipeline documentation](https://dev.epicgames.com/documentation/en-us/unreal-engine/fbx-skeletal-mesh-pipeline-in-unreal-engine) specifies its own SDK version requirements.

## What “interchangeable” means here

- Approved male/female bases have matching joint names, hierarchy and neutral rest transforms. Their surface dimensions differ. A single matching Ocean skeleton and its animations can drive both; this was tested in the shared core and with UE skeleton reuse.
- Free proportions may change bone lengths/origins. The exported mesh, its own bind matrices and its animation stay together and preserve that body. The tests include a substantially scaled/reshaped body. Do not force these meshes onto another body's bind matrices.
- Rotation clips can be applied across Ocean rigs with the same joint semantics while retaining each target's rest translations. Ground contact, reach, root motion and interactions may need retargeting/IK when lengths change. Foot sliding is not solved by sharing names alone.
- Arbitrary animation libraries are not imported by this release. The export menu carries the selected Ocean clip; it does not convert an existing game's entire animation set.

The neutral pose is arms down. Legacy Ocean side IDs label negative X as L and positive X as R; adapters must map this explicitly. Shoes currently follow knee joints and hands follow elbow joints; wrist/ankle/toe markers exist, but independent hand/foot articulation needs a later attachment revision.

## Limits and format notes

GLB contains standard glTF skins, inverse bind matrices and STEP animation samplers. Root scaling is baked into vertices/joint positions so exported joints have unit scale. Names use safe identifiers; original joint IDs and authored material assignment metadata remain in GLB extras. The [glTF animation specification tutorial](https://github.khronos.org/glTF-Tutorials/gltfTutorial/gltfTutorial_007_Animations.html) explains the interpolation modes.

FBX contains bones, skin clusters, bind pose, normals, UVs, simple materials and selected constant rotation curves. Its timestamp/FileId/footer tuple is fixed for FBX SDK compatibility; it is not the creation date. FBX material transport is a simple color/Phong fallback with additional roughness/metalness metadata, not a portable PBR shader guarantee. Engine-native material adapters remain necessary. UE reports absent smoothing groups; explicit polygon normals are present, so choose Import Normals for the intended hard surfaces.

Skeleton-only JSON/glTF and static posed GLB remain under **Skeleton only & static geometry**. Skeleton-only glTF nodes may appear as empties because that format has no mesh or skin references. See SKELETON_EXPORT.md.

Applied libraries are embedded in v3 character presets and compiled into static/skinned GLB. Native Blender 4.5.10 LTS material checks for both bases pass roughness, metalness, base colors, 19 joints, 98 skin meshes, single weights, held timing and posed geometry. Reports and fixtures: `docs/material-integration-fixtures`; repeat with `export-material-fixtures.mjs` and `check_blender_materials.py`. This does not extend FBX PBR fidelity or Unity qualification. See MATERIAL_INTEGRATION.md.
