threenative-asset-mcp 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +10 -0
  2. package/dist/tools/creature.d.ts +1 -1
  3. package/dist/tools/creature.d.ts.map +1 -1
  4. package/dist/tools/download-free-asset.d.ts +1 -1
  5. package/dist/tools/download-free-asset.d.ts.map +1 -1
  6. package/dist/unreal/animation-data.d.ts +342 -0
  7. package/dist/unreal/animation-data.d.ts.map +1 -0
  8. package/dist/unreal/animation-data.js +375 -0
  9. package/dist/unreal/animation-data.js.map +1 -0
  10. package/dist/unreal/contact-sheet.d.ts +17 -0
  11. package/dist/unreal/contact-sheet.d.ts.map +1 -1
  12. package/dist/unreal/contact-sheet.js +32 -5
  13. package/dist/unreal/contact-sheet.js.map +1 -1
  14. package/dist/unreal/cooking.d.ts +69 -0
  15. package/dist/unreal/cooking.d.ts.map +1 -1
  16. package/dist/unreal/cooking.js +272 -4
  17. package/dist/unreal/cooking.js.map +1 -1
  18. package/dist/unreal/cue4parse-adapter.d.ts +1 -1
  19. package/dist/unreal/cue4parse-adapter.d.ts.map +1 -1
  20. package/dist/unreal/cue4parse-adapter.js +1735 -41
  21. package/dist/unreal/cue4parse-adapter.js.map +1 -1
  22. package/dist/unreal/effects-dump.d.ts +81 -0
  23. package/dist/unreal/effects-dump.d.ts.map +1 -0
  24. package/dist/unreal/effects-dump.js +113 -0
  25. package/dist/unreal/effects-dump.js.map +1 -0
  26. package/dist/unreal/effects-preview.d.ts +76 -0
  27. package/dist/unreal/effects-preview.d.ts.map +1 -0
  28. package/dist/unreal/effects-preview.js +386 -0
  29. package/dist/unreal/effects-preview.js.map +1 -0
  30. package/dist/unreal/effects-schema.d.ts +1797 -0
  31. package/dist/unreal/effects-schema.d.ts.map +1 -0
  32. package/dist/unreal/effects-schema.js +1670 -0
  33. package/dist/unreal/effects-schema.js.map +1 -0
  34. package/dist/unreal/game-path.d.ts +7 -0
  35. package/dist/unreal/game-path.d.ts.map +1 -0
  36. package/dist/unreal/game-path.js +12 -0
  37. package/dist/unreal/game-path.js.map +1 -0
  38. package/dist/unreal/gameplay-data.d.ts +350 -0
  39. package/dist/unreal/gameplay-data.d.ts.map +1 -0
  40. package/dist/unreal/gameplay-data.js +534 -0
  41. package/dist/unreal/gameplay-data.js.map +1 -0
  42. package/dist/unreal/importer.d.ts +133 -4
  43. package/dist/unreal/importer.d.ts.map +1 -1
  44. package/dist/unreal/importer.js +889 -42
  45. package/dist/unreal/importer.js.map +1 -1
  46. package/dist/unreal/psa.d.ts +45 -1
  47. package/dist/unreal/psa.d.ts.map +1 -1
  48. package/dist/unreal/psa.js +95 -12
  49. package/dist/unreal/psa.js.map +1 -1
  50. package/dist/unreal/scenes.d.ts +12 -0
  51. package/dist/unreal/scenes.d.ts.map +1 -1
  52. package/dist/unreal/scenes.js +40 -2
  53. package/dist/unreal/scenes.js.map +1 -1
  54. package/dist/unreal/static-mesh-sections.d.ts +16 -0
  55. package/dist/unreal/static-mesh-sections.d.ts.map +1 -1
  56. package/dist/unreal/static-mesh-sections.js +108 -14
  57. package/dist/unreal/static-mesh-sections.js.map +1 -1
  58. package/package.json +1 -1
package/README.md CHANGED
@@ -145,6 +145,14 @@ Fab:
145
145
  flows.
146
146
  - `asset_import_unreal` — converts an already-downloaded Unreal directory to
147
147
  self-contained GLBs plus `import-report.json`; Unreal Engine is not required.
148
+ Cascade `ParticleSystem` and Niagara systems are exported as data-only
149
+ descriptors under `Effects/<system>-<hash>.<cascade|niagara>.json`, one per
150
+ canonical package and object path so two same-basename systems in different
151
+ folders stay distinct. No runtime plays them: each descriptor lists the
152
+ modules and inputs it does not carry, and a placed effect component points at
153
+ its descriptor through `import-report.json`. Effects with no exported
154
+ descriptor stay named in the report; the importer never reconstructs a
155
+ particle simulation.
148
156
  - `fab_import_asset` — downloads an owned listing through the user's existing
149
157
  FabCLI session, then runs the same Unreal importer. It never signs in, claims,
150
158
  or purchases an asset.
@@ -430,6 +438,7 @@ sweep's `--no-graph-bake` uses this to produce a baseline).
430
438
  | --- | --- |
431
439
  | Cooked loose UE4 static meshes and textures | GLB geometry, LOD sections, embedded textures, and common PBR reconstruction |
432
440
  | Cooked loose UE4 skeletal meshes and standalone animation packages | Standard skinned GLB; joints, weights, inverse-bind matrices, and existing clips are preserved; ActorX PSA clips are attached by case-insensitive bone name when at least 80% of tracks match, without duplicating an existing clip name |
441
+ | UE5 `AnimSequence`, blend spaces, aim offsets, montages and composites | UE5.0–5.5 cooked clips become glTF animations through CUE4Parse and attach by bone name; blend spaces, aim offsets, montages and composites become `Animation/<name>.json` with typed axes, mirror flags and resolved section starts, and each clip gets `<clip>.clip.json` notifies, curves and sync markers. A clip with no raw or compressed bone data is reported from its package's own evidence (a `DataModel` export, a `ControlRig` model, or `NumFrames`) instead of exporting a bind pose |
433
442
  | Uncooked UE4 `FMeshDescription` static meshes (object versions 517–522) | GLB geometry with centimetres converted to metres; verified on Fab Office Pack Vol.1 (47/47 meshes) |
434
443
  | Uncooked UE5 editor static meshes (source models only, no render data) | LOD0 of the `FMeshDescription` source model is decoded from the package trailer's Oodle payloads, with the cooked glTF writer's axes, scale, and material naming. Verified on Fab's Megascans Common Hazel and European Hornbeam UE5.1 artifacts: triangle counts match the UE4.27 decoder of the same scans exactly |
435
444
  | Uncooked UE4.0–4.20 static and skeletal meshes (object versions below 517) | Exported by UE Viewer from the editor source data, with materials, skins, and ActorX clips like cooked packages. Verified on Fab packs from UE4.10 to UE4.20: Modular Building Set (129 meshes), Animal Variety Pack (6 rigged animals, 146 clips), STF Landscape Pro 2.0 (61), Power Plant (65), and a UE4.19 fern pack (38) |
@@ -439,6 +448,7 @@ sweep's `--no-graph-bake` uses this to produce a baseline).
439
448
  | `Texture2DArray`, `TextureCubeArray`, and `VolumeTexture` | Collision-free RGBA8 slice data plus JSON dimensions under `textures3d/`; use `DataArrayTexture` for arrays and `Data3DTexture` for volumes. Cube-array faces remain ordered in groups of six for custom shaders. Floating-point/HDR stacks are rejected rather than reduced to RGBA8 |
440
449
  | Standalone `Material` and `MaterialInstanceConstant` packages | One directly loadable `Materials/UnrealMaterialLibrary.glb`; each source-relative swatch name is collision-free, follows parent instances, embeds resolved texture inputs, and applies common base-color/emissive vectors plus roughness/metallic/opacity scalars |
441
450
  | Standalone `SoundWave` packages | Collision-free WAV/Ogg/MP3/FLAC files under `audio/`; modern UE5 editor source WAVs and cooked formats exposed by CUE4Parse feed the same report path, verified through Three.js `AudioLoader` |
451
+ | Skeletal and static mesh sockets, static-mesh simple collision, `PhysicsAsset`, and `SoundCue` graphs | Socket nodes (`socket:<name>`) under the joint their bone names (or the mesh node for a static socket); simple collision on the mesh node's `extras.unrealCollision` and in `Collision/<package>.json`; physics bodies, constraints (limits, motions and drives) and collision-disabled pairs in metre-scale `Physics/<asset>.json`, referenced from the skinned mesh node; and each SoundCue graph in `Audio/<cue>.cue.json` with every `WavePlayer` leaf rewritten to the exported audio file or reported as a missing wave. A UE4 package that holds one of these classes routes to the CUE4Parse adapter, which UE Viewer cannot decode; an ordinary UE4 mesh whose only gameplay signal is a `BodySetup` or a cross-package PhysicsAsset/Skeleton reference joins the adapter run for its metadata while keeping its verified UE Viewer geometry route |
442
452
  | Runtime `Font` and inline `FontFace` packages | Validated TTF/OTF faces under collision-free `fonts/` paths; direct SFNT and legacy multi-block zlib `FontBulkData` are supported without Unreal Engine, with family/style/weight metadata for the browser `FontFace` API |
443
453
  | Offline `Font` packages | Pre-baked glyph pages and serialized `FontCharacter` rectangles become collision-safe atlas PNGs plus BMFont-compatible JSON under `bitmap-fonts/`; Unicode remaps, baseline metrics, kerning, page indices, and distance-field metadata are retained for Three.js bitmap/SDF text |
444
454
  | Paper2D `PaperSprite` and `PaperFlipbook` packages | Each sprite becomes a self-contained, unlit GLB with exact baked triangles and a cropped atlas region; flipbooks become JSON manifests preserving FPS and per-frame run lengths. Verified in Three.js on a real UE5.2 Paper2D project without Unreal Engine |
@@ -238,7 +238,6 @@ export declare const CreatureGuideOutputSchema: z.ZodObject<{
238
238
  export declare function activateCreatureCompilation(config: CreatureConfig, launchRoot: string): CreatureRunner;
239
239
  export declare function registerCreatureCompileTool(server: McpServer, runner: CreatureRunner): void;
240
240
  export declare function createCreatureCompileHandler(runner: CreatureRunner): (rawInput: z.input<typeof CreatureCompileInputSchema>, context: ServerContext) => Promise<{
241
- isError?: never;
242
241
  content: {
243
242
  type: "text";
244
243
  text: string;
@@ -281,6 +280,7 @@ export declare function createCreatureCompileHandler(runner: CreatureRunner): (r
281
280
  durationMs: number;
282
281
  unchanged: boolean;
283
282
  };
283
+ isError?: never;
284
284
  } | {
285
285
  isError: true;
286
286
  content: {
@@ -1 +1 @@
1
- {"version":3,"file":"creature.d.ts","sourceRoot":"","sources":["../../src/tools/creature.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAEL,cAAc,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AA4G9B,eAAO,MAAM,yBAAyB,iCAAwB,CAAC;AAC/D,eAAO,MAAM,wBAAwB;;;;;;;;;kBAE1B,CAAC;AAEZ,eAAO,MAAM,0BAA0B;;;;kBAM5B,CAAC;AA2DZ,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGtC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;kBAM5B,CAAC;AA0DZ,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGtC,CAAC;AA0BH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMpC,CAAC;AAwLH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,GACjB,cAAc,CAUhB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,IAAI,CAoDN;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,cAErD,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,WAC3C,aAAa;;;cAgBA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAON,MAAM;;;;;;;;;GAK/B;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,cAErD,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,WAC3C,aAAa;;;cAmBR,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAK/B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,cAEnD,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,WACzC,aAAa;;;cAOA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAON,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAK/B;AAeD,wBAAgB,2BAA2B,eACjB,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC;;;cAKzC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAMN,MAAM;;;GAI/B;AAED,wBAAgB,0BAA0B,eAChB,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC;;;cAKxC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;cAMN,MAAM;;;GAI/B"}
1
+ {"version":3,"file":"creature.d.ts","sourceRoot":"","sources":["../../src/tools/creature.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAEL,cAAc,EAEf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AA4G9B,eAAO,MAAM,yBAAyB,iCAAwB,CAAC;AAC/D,eAAO,MAAM,wBAAwB;;;;;;;;;kBAE1B,CAAC;AAEZ,eAAO,MAAM,0BAA0B;;;;kBAM5B,CAAC;AA2DZ,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGtC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;kBAM5B,CAAC;AA0DZ,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGtC,CAAC;AA0BH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBrC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAMpC,CAAC;AAwLH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,MAAM,GACjB,cAAc,CAUhB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,IAAI,CAoDN;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,cAErD,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,WAC3C,aAAa;;cAgBA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAON,MAAM;;;;;;;;;GAK/B;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,cAAc,cAErD,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,WAC3C,aAAa;;;cAmBR,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAK/B;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,cAEnD,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,WACzC,aAAa;;;cAOA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAON,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAK/B;AAeD,wBAAgB,2BAA2B,eACjB,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC;;;cAKzC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAMN,MAAM;;;GAI/B;AAED,wBAAgB,0BAA0B,eAChB,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC;;;cAKxC,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;cAMN,MAAM;;;GAI/B"}
@@ -45,6 +45,7 @@ export interface FreeAssetDownloadClient {
45
45
  }): Promise<FabDownloadResult>;
46
46
  }
47
47
  export declare function createDownloadFreeAssetHandler(client: FreeAssetDownloadClient): (rawInput: z.input<typeof DownloadFreeAssetInputSchema>) => Promise<{
48
+ isError?: never;
48
49
  content: {
49
50
  type: "text";
50
51
  text: string;
@@ -64,7 +65,6 @@ export declare function createDownloadFreeAssetHandler(client: FreeAssetDownload
64
65
  z: number;
65
66
  } | undefined;
66
67
  };
67
- isError?: never;
68
68
  } | {
69
69
  structuredContent?: never;
70
70
  isError: true;
@@ -1 +1 @@
1
- {"version":3,"file":"download-free-asset.d.ts","sourceRoot":"","sources":["../../src/tools/download-free-asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAGpC,eAAO,MAAM,4BAA4B;;;;;;;;;;;;iBAcvC,CAAC;AAQH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;iBAUxC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAC3C,OAAO,4BAA4B,CACpC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAC5C,OAAO,6BAA6B,CACrC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,OAAO,EAAE;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,cAGnB,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC;;cAYhC,MAAM;;;;;;;;;;;;;;;;;;;;;;;cAkBN,MAAM;;;GAI/B"}
1
+ {"version":3,"file":"download-free-asset.d.ts","sourceRoot":"","sources":["../../src/tools/download-free-asset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAGpC,eAAO,MAAM,4BAA4B;;;;;;;;;;;;iBAcvC,CAAC;AAQH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;iBAUxC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAC3C,OAAO,4BAA4B,CACpC,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAC5C,OAAO,6BAA6B,CACrC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,OAAO,EAAE;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,iBAAiB,CAAC;KAC3B,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAChC;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,uBAAuB,cAGnB,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC;;;cAYhC,MAAM;;;;;;;;;;;;;;;;;;;;;;cAkBN,MAAM;;;GAI/B"}
@@ -0,0 +1,342 @@
1
+ /**
2
+ * Animation logic descriptors for the Unreal importer (PRD-583).
3
+ *
4
+ * The CUE4Parse adapter writes one raw JSON document per logic asset (blend space, aim offset,
5
+ * montage, composite) and one sidecar per clip. This module turns those raw documents into the
6
+ * consumer contract: axis defaults restored, section starts resolved per `LinkMethod`, section and
7
+ * slot clip names resolved to exported glTF animation names, and every clip that does not resolve
8
+ * reported with its reason. It performs no I/O and no Unreal version branching, so it is testable
9
+ * on synthetic inputs.
10
+ */
11
+ /** The three axes a blend space always carries, as `UBlendSpaceBase.BlendParameters[3]`. */
12
+ export declare const BLEND_AXIS_COUNT = 3;
13
+ /** `FBlendParameter`'s defaults, which a serialized package omits when a field keeps its default. */
14
+ export declare const BLEND_AXIS_DEFAULTS: Readonly<{
15
+ min: 0;
16
+ max: 100;
17
+ gridNum: 4;
18
+ snap: false;
19
+ wrap: false;
20
+ }>;
21
+ export interface RawBlendAxis {
22
+ readonly displayName?: string;
23
+ readonly min?: number;
24
+ readonly max?: number;
25
+ readonly gridNum?: number;
26
+ readonly snapToGrid?: boolean;
27
+ readonly wrapInput?: boolean;
28
+ }
29
+ export interface RawBlendSample {
30
+ readonly animation?: string;
31
+ readonly sampleValue?: readonly [number, number, number];
32
+ readonly rateScale?: number;
33
+ /** `FBlendSample::bMirror`: the sample plays mirrored by the blend space's `MirrorDataTable`. */
34
+ readonly mirror?: boolean;
35
+ }
36
+ export interface RawBlendWindow {
37
+ readonly time?: number;
38
+ readonly value?: number;
39
+ readonly mode?: string;
40
+ }
41
+ export interface RawMontageSegment {
42
+ readonly animation?: string;
43
+ readonly startPos?: number;
44
+ readonly clipStart?: number;
45
+ readonly clipEnd?: number;
46
+ readonly playRate?: number;
47
+ readonly loopCount?: number;
48
+ }
49
+ export interface RawMontageSlot {
50
+ readonly name?: string;
51
+ readonly segments?: readonly RawMontageSegment[];
52
+ }
53
+ export interface RawMontageSection {
54
+ readonly name?: string;
55
+ readonly next?: string;
56
+ readonly linkMethod?: string;
57
+ readonly segmentBeginTime?: number;
58
+ readonly segmentLength?: number;
59
+ readonly linkValue?: number;
60
+ }
61
+ export interface RawNotify {
62
+ readonly name?: string;
63
+ readonly time?: number;
64
+ readonly duration?: number;
65
+ readonly track?: number;
66
+ readonly kind?: string;
67
+ readonly className?: string;
68
+ }
69
+ export interface RawCurveKey {
70
+ readonly time?: number;
71
+ readonly value?: number;
72
+ readonly arrive?: number;
73
+ readonly leave?: number;
74
+ readonly interp?: string;
75
+ }
76
+ export interface RawCurve {
77
+ readonly name?: string;
78
+ readonly keys?: readonly RawCurveKey[];
79
+ }
80
+ export interface RawAnimationAsset {
81
+ readonly format?: string;
82
+ readonly version?: number;
83
+ readonly name?: string;
84
+ readonly package?: string;
85
+ readonly className?: string;
86
+ readonly skeleton?: string | null;
87
+ readonly kind?: "blendSpace" | "montage" | "composite" | "clip";
88
+ readonly blendSpaceType?: "1D" | "2D" | "aimOffset";
89
+ readonly animLength?: number;
90
+ readonly loop?: boolean;
91
+ readonly additive?: boolean;
92
+ /** `UBlendSpaceBase::MirrorDataTable`, needed to realise any sample with `bMirror`. */
93
+ readonly mirrorDataTable?: string | null;
94
+ /** `UBlendSpace::PreviewBasePose`, the base pose an additive space blends against. */
95
+ readonly previewBasePose?: string | null;
96
+ readonly axes?: readonly RawBlendAxis[];
97
+ readonly samples?: readonly RawBlendSample[];
98
+ readonly interpolation?: readonly {
99
+ readonly time?: number;
100
+ readonly type?: string;
101
+ }[];
102
+ readonly length?: number;
103
+ readonly rateScale?: number;
104
+ readonly blendIn?: RawBlendWindow;
105
+ readonly blendOut?: RawBlendWindow;
106
+ readonly slots?: readonly RawMontageSlot[];
107
+ readonly sections?: readonly RawMontageSection[];
108
+ readonly notifies?: readonly RawNotify[];
109
+ readonly curves?: readonly RawCurve[];
110
+ readonly syncMarkers?: readonly {
111
+ readonly name?: string;
112
+ readonly time?: number;
113
+ }[];
114
+ readonly unsupportedReason?: string;
115
+ }
116
+ export interface NormalizedBlendAxis {
117
+ readonly name: string;
118
+ readonly min: number;
119
+ readonly max: number;
120
+ readonly gridNum: number;
121
+ readonly wrap: boolean;
122
+ readonly snap: boolean;
123
+ }
124
+ export interface NormalizedBlendSample {
125
+ readonly clip: string;
126
+ readonly pos: readonly [number, number, number];
127
+ readonly rateScale: number;
128
+ readonly mirror: boolean;
129
+ /** Set when `clip` could not be resolved to exactly one exported animation. */
130
+ readonly unresolved?: string;
131
+ }
132
+ export interface NormalizedBlendSpace {
133
+ readonly kind: "blendSpace";
134
+ readonly type: "1D" | "2D" | "aimOffset";
135
+ readonly axes: readonly NormalizedBlendAxis[];
136
+ readonly samples: readonly NormalizedBlendSample[];
137
+ readonly smoothing: readonly {
138
+ readonly time: number;
139
+ readonly type: string;
140
+ }[];
141
+ readonly loop: boolean;
142
+ readonly additive: boolean;
143
+ }
144
+ export interface NormalizedMontageSegment {
145
+ readonly clip: string;
146
+ readonly startPos: number;
147
+ readonly clipStart: number;
148
+ readonly clipEnd: number;
149
+ readonly playRate: number;
150
+ readonly loops: number;
151
+ readonly unresolved?: string;
152
+ }
153
+ export interface NormalizedMontageSlot {
154
+ readonly name: string;
155
+ readonly segments: readonly NormalizedMontageSegment[];
156
+ }
157
+ export interface NormalizedMontageSection {
158
+ readonly name: string;
159
+ readonly start: number;
160
+ readonly next: string;
161
+ }
162
+ export interface NormalizedNotify {
163
+ readonly name: string;
164
+ readonly time: number;
165
+ readonly duration: number;
166
+ readonly track: number;
167
+ readonly kind: string;
168
+ readonly class: string;
169
+ }
170
+ export interface NormalizedMontage {
171
+ readonly kind: "montage" | "composite";
172
+ readonly length: number;
173
+ readonly rateScale: number;
174
+ readonly blendIn: NormalizedBlendWindow;
175
+ readonly blendOut: NormalizedBlendWindow;
176
+ readonly slots: readonly NormalizedMontageSlot[];
177
+ readonly sections: readonly NormalizedMontageSection[];
178
+ readonly notifies: readonly NormalizedNotify[];
179
+ }
180
+ export interface NormalizedBlendWindow {
181
+ readonly time: number;
182
+ readonly value: number;
183
+ readonly mode: string;
184
+ }
185
+ export interface NormalizedClipKey {
186
+ readonly time: number;
187
+ readonly value: number;
188
+ readonly arrive: number;
189
+ readonly leave: number;
190
+ readonly interp: string;
191
+ }
192
+ export interface NormalizedClipCurve {
193
+ readonly name: string;
194
+ readonly keys: readonly NormalizedClipKey[];
195
+ }
196
+ export interface NormalizedClipSidecar {
197
+ readonly kind: "clip";
198
+ readonly notifies: readonly NormalizedNotify[];
199
+ readonly curves: readonly NormalizedClipCurve[];
200
+ readonly syncMarkers: readonly {
201
+ readonly name: string;
202
+ readonly time: number;
203
+ }[];
204
+ /** Set when the clip's bone tracks could not be exported, so the sidecar is metadata only. */
205
+ readonly unsupportedReason?: string;
206
+ }
207
+ export type NormalizedAnimationAsset = NormalizedBlendSpace | NormalizedMontage;
208
+ export interface AnimationLogicAsset {
209
+ readonly name: string;
210
+ readonly package: string;
211
+ readonly skeleton: string | undefined;
212
+ readonly value: NormalizedAnimationAsset;
213
+ }
214
+ export interface AnimationLogicIssue {
215
+ readonly package: string;
216
+ readonly asset: string;
217
+ readonly kind: string;
218
+ readonly clip: string;
219
+ readonly reason: string;
220
+ }
221
+ export interface AnimationLogicResult {
222
+ readonly assets: readonly AnimationLogicAsset[];
223
+ readonly sidecars: readonly {
224
+ readonly name: string;
225
+ readonly package: string;
226
+ /**
227
+ * The actual exported glTF animation name when the sidecar's clip resolved to one, so a consumer
228
+ * binds notifies to the disambiguated clip rather than to the source object name.
229
+ */
230
+ readonly clip?: string;
231
+ readonly value: NormalizedClipSidecar;
232
+ }[];
233
+ readonly unresolved: readonly AnimationLogicIssue[];
234
+ readonly unsupported: readonly {
235
+ readonly package: string;
236
+ readonly asset: string;
237
+ readonly reason: string;
238
+ }[];
239
+ }
240
+ /** The descriptor envelope every adapter animation JSON carries. */
241
+ export declare const ANIMATION_DESCRIPTOR_FORMAT = "threenative-unreal-animation";
242
+ export declare const ANIMATION_DESCRIPTOR_VERSION = 1;
243
+ export interface ParsedAnimationDescriptor {
244
+ readonly descriptor?: RawAnimationAsset;
245
+ /** A precise reason the document is not a usable descriptor, for the package report. */
246
+ readonly reason?: string;
247
+ }
248
+ /**
249
+ * Validates the minimal envelope of an adapter animation descriptor before the importer accepts it as
250
+ * produced. A converter that writes valid JSON of the wrong shape (or a truncated file) must be
251
+ * reported for its package, never silently pushed into `buildAnimationLogic` where an unknown `kind`
252
+ * is dropped without a trace.
253
+ */
254
+ export declare function parseAnimationDescriptor(value: unknown): ParsedAnimationDescriptor;
255
+ /**
256
+ * One exported glTF animation and the canonical package it came from, for clip-name resolution.
257
+ * `package` is the Unreal package path (`/Game/Dir/Asset`, no extension, no object suffix). The
258
+ * canonical object identity is `${package}.${name}`.
259
+ */
260
+ export interface ExportedClip {
261
+ /** The actual exported glTF animation name; this is what a resolver returns. */
262
+ readonly name: string;
263
+ /** The canonical package path (`/Game/Dir/Asset`, no extension) the clip was imported from. */
264
+ readonly package: string;
265
+ /**
266
+ * The Unreal object (sequence) name a reference matches on, when it differs from the actual glTF name
267
+ * (a same-basename clip whose glTF name was disambiguated). Defaults to `name` when omitted.
268
+ */
269
+ readonly object?: string;
270
+ }
271
+ /**
272
+ * A stable, package-distinct relative path for an animation artifact in the import output. The
273
+ * package path becomes directories, so `/Game/A/Walk` and `/Game/B/Walk` write different files and
274
+ * never overwrite each other. A traversal segment (`.` or `..`) is rejected rather than dropped, so
275
+ * `/Game/../../etc` never silently aliases to `/Game/etc`; the caller still validates containment.
276
+ */
277
+ export declare function animationArtifactPath(packagePath: string, name: string, extension: string): string;
278
+ /**
279
+ * The canonical package a nested animation artifact names, from its path relative to the `Animation`
280
+ * root (`A/Walk/Walk.psa` -> `/Game/A/Walk`). A flat legacy artifact has no directory and returns
281
+ * undefined, so the caller falls back to its package table. A traversal directory is rejected, not
282
+ * dropped, so a `..` never aliases one package onto another.
283
+ */
284
+ export declare function animationArtifactPackage(relativePath: string): string | undefined;
285
+ /** A parsed Unreal animation reference: a bare object name, or a canonical package-qualified path. */
286
+ export interface ParsedAnimationReference {
287
+ readonly name: string;
288
+ /** The package path when the reference is canonical (`/Game/Dir/Asset`), else undefined. */
289
+ readonly package?: string;
290
+ readonly canonical: boolean;
291
+ }
292
+ /**
293
+ * Normalizes a Unreal path the way the converter does: forward slashes, one separator, and no
294
+ * `.uasset`/`.umap` extension. A mounted `<root>/Content/...` path becomes `/Game/...`, so a
295
+ * filesystem mount and its Unreal name compare equal. The `Content` segment is found wherever it
296
+ * appears, so a bare `Content/A/Walk.uasset` (no leading root) maps like `D:/proj/Content/A/Walk`.
297
+ * Never mutates a bare object name.
298
+ */
299
+ export declare function canonicalAnimationPath(value: string): string;
300
+ /**
301
+ * A canonical package path: `canonicalAnimationPath` with any trailing `.Object` suffix removed, so
302
+ * `/Game/A/SK_Hero.SK_Hero` and `/Game/A/SK_Hero` name the same package. A dot inside a folder name
303
+ * (before the last slash) never splits the path.
304
+ */
305
+ export declare function canonicalPackagePath(value: string): string;
306
+ /**
307
+ * Parses an animation reference. A canonical reference is `<package>.<object>` (`/Game/A/Walk.Walk`)
308
+ * or a package path with no object (`/Game/A/Walk`, whose object is the last segment). A reference
309
+ * without a leading slash is a bare legacy name and carries no package. The object split is at the
310
+ * first dot after the last slash, so a dot inside a folder name never splits a package path.
311
+ */
312
+ export declare function parseAnimationReference(value: string): ParsedAnimationReference;
313
+ /**
314
+ * Resolves a section start for its `LinkMethod`. Absolute is the raw time, Relative offsets from the
315
+ * segment start, and Proportional scales the segment length — the same rule as Unreal's
316
+ * `FAnimLinkableElement::GetTime`.
317
+ */
318
+ export declare function sectionStart(section: RawMontageSection): number;
319
+ /** Exactly three axes, every omitted field restored to `FBlendParameter`'s default. */
320
+ export declare function blendAxes(axes: readonly RawBlendAxis[] | undefined): readonly NormalizedBlendAxis[];
321
+ export interface ClipResolution {
322
+ /** The exported animation name, or the raw name when unresolved. */
323
+ readonly clip: string;
324
+ readonly unresolved?: string;
325
+ }
326
+ /**
327
+ * Resolves a Unreal sequence reference to exactly one exported glTF animation. A canonical reference
328
+ * (`/Game/A/Walk.Walk`) matches only the clip whose canonical package equals the reference's package;
329
+ * it never falls back to a bare basename, so an explicit wrong package is reported instead of silently
330
+ * binding another package's clip. A bare reference resolves only when exactly one exported clip carries
331
+ * that name; a name two packages both export is ambiguous and reported. The resolved `clip` is always
332
+ * the actual exported animation name.
333
+ */
334
+ export declare function resolveClip(name: string | undefined, clips: readonly ExportedClip[]): ClipResolution;
335
+ /** A clip sidecar: notifies and float curves from either curve layout, with every key preserved. */
336
+ export declare function normalizeClipSidecar(raw: RawAnimationAsset): NormalizedClipSidecar;
337
+ /**
338
+ * Resolves every clip reference in the raw descriptors against the exported animations. A blend space
339
+ * or montage whose skeleton is absent from the import is reported, not bound to an unrelated rig.
340
+ */
341
+ export declare function buildAnimationLogic(rawAssets: readonly RawAnimationAsset[], clips: readonly ExportedClip[], skeletons: readonly string[] | undefined): AnimationLogicResult;
342
+ //# sourceMappingURL=animation-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-data.d.ts","sourceRoot":"","sources":["../../src/unreal/animation-data.ts"],"names":[],"mappings":"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"}