@aura3d/assets 1.1.0 → 1.3.1
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.
- package/dist/GLTFAnimationRuntime.d.ts +85 -0
- package/dist/GLTFAnimationRuntime.d.ts.map +1 -1
- package/dist/GLTFAnimationRuntime.js +143 -0
- package/dist/GLTFAnimationRuntime.js.map +1 -1
- package/dist/GLTFAutoFit.d.ts +61 -0
- package/dist/GLTFAutoFit.d.ts.map +1 -0
- package/dist/GLTFAutoFit.js +77 -0
- package/dist/GLTFAutoFit.js.map +1 -0
- package/dist/GLTFLoader.d.ts +21 -0
- package/dist/GLTFLoader.d.ts.map +1 -1
- package/dist/GLTFLoader.js +60 -15
- package/dist/GLTFLoader.js.map +1 -1
- package/dist/GLTFRenderResources.d.ts +9 -1
- package/dist/GLTFRenderResources.d.ts.map +1 -1
- package/dist/GLTFRenderResources.js +93 -4
- package/dist/GLTFRenderResources.js.map +1 -1
- package/dist/browser-index.d.ts +6 -4
- package/dist/browser-index.d.ts.map +1 -1
- package/dist/browser-index.js +3 -2
- package/dist/browser-index.js.map +1 -1
- package/dist/index.d.ts +7 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/GLTFAnimationRuntime.ts +195 -0
- package/src/GLTFAutoFit.ts +133 -0
- package/src/GLTFLoader.ts +74 -16
- package/src/GLTFRenderResources.ts +103 -4
- package/src/browser-index.ts +9 -4
- package/src/index.ts +12 -4
- package/tests/assets.test.ts +83 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-index.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/browser-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,gCAAgC,EACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-index.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/browser-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EACV,wBAAwB,EACxB,qBAAqB,EACrB,gCAAgC,EACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EACV,2BAA2B,EAC3B,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EACV,SAAS,EACT,eAAe,EACf,8BAA8B,EAC9B,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,4BAA4B,EAC5B,qBAAqB,EACrB,gCAAgC,EAChC,iBAAiB,EACjB,iBAAiB,EACjB,wBAAwB,EACxB,+BAA+B,EAC/B,aAAa,EACb,2BAA2B,EAC3B,kBAAkB,EAClB,0CAA0C,EAC1C,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,6BAA6B,EAC7B,gBAAgB,EAChB,iCAAiC,EACjC,2BAA2B,EAC3B,mBAAmB,EACnB,4BAA4B,EAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,qCAAqC,EACrC,oCAAoC,EACpC,6BAA6B,EAC7B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC1R,YAAY,EACV,uCAAuC,EACvC,wCAAwC,EACxC,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,gCAAgC,EAChC,6BAA6B,EAC7B,mCAAmC,EACnC,sCAAsC,EACtC,wCAAwC,EACxC,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,gCAAgC,EAChC,iCAAiC,EACjC,qCAAqC,EACrC,sCAAsC,EACtC,aAAa,EACb,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,iCAAiC,EACjC,gDAAgD,EAChD,uCAAuC,EACvC,oDAAoD,EACpD,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gCAAgC,EAChC,4BAA4B,EAC5B,sCAAsC,EACvC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,+BAA+B,EAC/B,6BAA6B,EAC7B,oCAAoC,EACpC,uCAAuC,EACvC,uBAAuB,EACvB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,sCAAsC,EACvC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,wCAAwC,EACxC,oCAAoC,EACrC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,6BAA6B,EAC7B,gCAAgC,EAChC,+BAA+B,EAC/B,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,0BAA0B,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9G,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EACjC,MAAM,6CAA6C,CAAC;AACrD,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,mCAAmC,EACpC,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACzB,MAAM,2BAA2B,CAAC"}
|
package/dist/browser-index.js
CHANGED
|
@@ -7,11 +7,12 @@ export { AssetRegistry } from "./AssetRegistry.js";
|
|
|
7
7
|
export { ImageLoader } from "./ImageLoader.js";
|
|
8
8
|
export { createAssetBundleCacheEvidence } from "./AssetBundleCacheFixtures.js";
|
|
9
9
|
export { createGLTFSceneAnalysisEvidence } from "./SceneAnalysisFixtures.js";
|
|
10
|
-
export { GLTFLoader } from "./GLTFLoader.js";
|
|
10
|
+
export { GLTFLoader, normalizeSkinWeights } from "./GLTFLoader.js";
|
|
11
|
+
export { autoFitGLTFScene, computeAutoFitTransform } from "./GLTFAutoFit.js";
|
|
11
12
|
export { inspectGLTFAsset } from "./AssetInspection.js";
|
|
12
13
|
export { OBJLoader } from "./OBJLoader.js";
|
|
13
14
|
export { GLTF_DECODER_REQUIRED_EXTENSION_NAMES, GLTF_DIAGNOSTIC_ONLY_EXTENSION_NAMES, GLTF_EXTENSION_SUPPORT_MATRIX, GLTF_PARSED_WITH_LIMITS_EXTENSION_NAMES, GLTF_REQUIRED_ACCEPTED_EXTENSION_NAMES, GLTF_RUNTIME_SUPPORTED_EXTENSION_NAMES, GLTF_SUPPORTED_EXTENSION_NAMES, evaluateGLTFExtensionSupport, getGLTFExtensionSupport } from "./GLTFExtensionSupport.js";
|
|
14
|
-
export { createGLTFSceneAnimationMixer, createGLTFSceneAnimationRuntime, GLTFImportedSkeletonIKController, GLTFSceneAnimationCloneSampler, GLTFSceneAnimationMixerBinding, GLTFSceneAnimationRuntime, GLTFSceneMorphTargetController } from "./GLTFAnimationRuntime.js";
|
|
15
|
+
export { createGLTFSceneAnimationMixer, createGLTFSceneAnimationRuntime, GLTFImportedSkeletonIKController, GLTFSceneAnimationCloneSampler, GLTFSceneAnimationMixerBinding, GLTFSceneAnimationRuntime, GLTFSceneMorphTargetController, resolveGLTFClipName } from "./GLTFAnimationRuntime.js";
|
|
15
16
|
export { DEFAULT_GLTF_RENDER_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_HDR_STUDIO_PREVIEW_POSTPROCESS, DEFAULT_GLTF_STUDIO_PREVIEW_FRAME, DEFAULT_GLTF_STUDIO_PREVIEW_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_STUDIO_PREVIEW_POSTPROCESS, createDefaultGLTFHdrStudioPreviewEnvironmentLighting, createGLTFRenderResourceDiagnostics, createGLTFRenderResources, createGLTFRenderSource } from "./GLTFRenderResources.js";
|
|
16
17
|
export { applyCarConceptMaterialStability, carConceptMaterialVisualRole, carConceptMaterialRenderStateOverrides } from "./CarConceptMaterialStability.js";
|
|
17
18
|
export { LoadContext } from "./LoadContext.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser-index.js","sourceRoot":"","sources":["../../../../packages/assets/src/browser-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAM5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"browser-index.js","sourceRoot":"","sources":["../../../../packages/assets/src/browser-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAM5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAoC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAYrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,qCAAqC,EACrC,oCAAoC,EACpC,6BAA6B,EAC7B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAuB1R,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,iCAAiC,EACjC,gDAAgD,EAChD,uCAAuC,EACvC,oDAAoD,EACpD,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gCAAgC,EAChC,4BAA4B,EAC5B,sCAAsC,EACvC,MAAM,+BAA+B,CAAC;AAqBvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AAevB,OAAO,EACL,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,wCAAwC,EACxC,oCAAoC,EACrC,MAAM,4BAA4B,CAAC;AASpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EACL,kCAAkC,EAClC,gCAAgC,EACjC,MAAM,6CAA6C,CAAC;AAOrD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ export { inspectGLTFAsset } from "./AssetInspection";
|
|
|
9
9
|
export type { GLTFAnimationInspection, GLTFAssetInspectionReport, GLTFDependencyInspection, GLTFMaterialInspection, GLTFMaterialTextureSlotInspection, GLTFMeshInspection, GLTFMorphTargetInspection, GLTFSceneHierarchyNodeInspection, GLTFSkinInspection, GLTFTextureInspection } from "./AssetInspection";
|
|
10
10
|
export { GLTF_DECODER_REQUIRED_EXTENSION_NAMES, GLTF_DIAGNOSTIC_ONLY_EXTENSION_NAMES, GLTF_EXTENSION_SUPPORT_MATRIX, GLTF_PARSED_WITH_LIMITS_EXTENSION_NAMES, GLTF_REQUIRED_ACCEPTED_EXTENSION_NAMES, GLTF_RUNTIME_SUPPORTED_EXTENSION_NAMES, GLTF_SUPPORTED_EXTENSION_NAMES, evaluateGLTFExtensionSupport, getGLTFExtensionSupport } from "./GLTFExtensionSupport";
|
|
11
11
|
export type { GLTFExtensionSupportEntry, GLTFExtensionSupportEvaluation, GLTFExtensionSupportFamily, GLTFExtensionSupportStatus } from "./GLTFExtensionSupport";
|
|
12
|
-
export { createGLTFSceneAnimationMixer, createGLTFSceneAnimationRuntime, GLTFImportedSkeletonIKController, GLTFSceneAnimationCloneSampler, GLTFSceneAnimationMixerBinding, GLTFSceneAnimationRuntime, GLTFSceneMorphTargetController } from "./GLTFAnimationRuntime";
|
|
13
|
-
export type { GLTFImportedSkeletonIKControllerOptions, GLTFImportedSkeletonIKControllerSnapshot, GLTFImportedSkeletonIKOptions, GLTFImportedSkeletonIKResult, GLTFSceneAnimationApplyResult, GLTFSceneAnimationActionSnapshot, GLTFSceneAnimationCloneSample, GLTFSceneAnimationCloneSampleResult, GLTFSceneAnimationCloneSamplerSnapshot, GLTFSceneAnimationClipBindingDiagnostics, GLTFSceneAnimationMixerOptions, GLTFSceneAnimationPlayOptions, GLTFSceneAnimationMixerSnapshot, GLTFSceneAnimationMixerUpdateResult, GLTFSceneAnimationRuntimeOptions, GLTFSceneAnimationRuntimeSnapshot, GLTFSceneMorphTargetControllerOptions, GLTFSceneMorphTargetControllerSnapshot } from "./GLTFAnimationRuntime";
|
|
12
|
+
export { createGLTFSceneAnimationMixer, createGLTFSceneAnimationRuntime, GLTFImportedSkeletonIKController, GLTFSceneAnimationCloneSampler, GLTFSceneAnimationMixerBinding, GLTFSceneAnimationRuntime, GLTFSceneMorphTargetController, resolveGLTFClipName } from "./GLTFAnimationRuntime";
|
|
13
|
+
export type { GLTFImportedSkeletonIKControllerOptions, GLTFImportedSkeletonIKControllerSnapshot, GLTFImportedSkeletonIKOptions, GLTFImportedSkeletonIKResult, GLTFSceneAnimationApplyResult, GLTFSceneAnimationClipSample, GLTFSceneAnimationClipBoneMask, GLTFSceneAnimationActionSnapshot, GLTFSceneAnimationCloneSample, GLTFSceneAnimationCloneSampleResult, GLTFSceneAnimationCloneSamplerSnapshot, GLTFSceneAnimationClipBindingDiagnostics, GLTFSceneAnimationMixerOptions, GLTFSceneAnimationPlayOptions, GLTFSceneAnimationMixerSnapshot, GLTFSceneAnimationMixerUpdateResult, GLTFSceneAnimationRuntimeOptions, GLTFSceneAnimationRuntimeSnapshot, GLTFSceneMorphTargetControllerOptions, GLTFSceneMorphTargetControllerSnapshot, GLTFScenePose, GLTFScenePoseBoneTransform } from "./GLTFAnimationRuntime";
|
|
14
14
|
export { AssetHandle } from "./AssetHandle";
|
|
15
15
|
export type { AssetHandleOptions, AssetHandleStatus } from "./AssetHandle";
|
|
16
16
|
export { AssetLoadError } from "./AssetLoader";
|
|
@@ -45,10 +45,12 @@ export { applyCarConceptMaterialStability, carConceptMaterialVisualRole, carConc
|
|
|
45
45
|
export type { CarConceptMaterialBaseline, CarConceptMaterialVisualRole, CarConceptMaterialStabilityOptions, CarConceptMaterialStabilityProfile } from "./CarConceptMaterialStability";
|
|
46
46
|
export { ImageLoader } from "./ImageLoader";
|
|
47
47
|
export type { ImageAsset } from "./ImageLoader";
|
|
48
|
-
export { GLTFLoader } from "./GLTFLoader";
|
|
49
|
-
export
|
|
48
|
+
export { GLTFLoader, normalizeSkinWeights } from "./GLTFLoader";
|
|
49
|
+
export { autoFitGLTFScene, computeAutoFitTransform } from "./GLTFAutoFit";
|
|
50
|
+
export type { AutoFitOptions, AutoFitTransform, GLTFUpAxis } from "./GLTFAutoFit";
|
|
51
|
+
export type { GLTFAsset, GLTFCameraAsset, GLTFClearcoatMaterialExtension, GLTFDracoDecodeDescriptor, GLTFDracoDecodedPrimitive, GLTFDracoDecoder, GLTFGeometryAsset, GLTFImageAsset, GLTFLightAsset, GLTFLoaderOptions, GLTFLoaderDiagnostics, SkinWeightNormalizationStats, GLTFMaterialAsset, GLTFMaterialVariantAsset, GLTFMaterialVariantMappingAsset, GLTFMeshAsset, GLTFMeshoptDecodeDescriptor, GLTFMeshoptDecoder, GLTFPBRSpecularGlossinessMaterialExtension, GLTFResolvedTextureInfo, GLTFSamplerAsset, GLTFSceneAsset, GLTFSceneCreateOptions, GLTFSheenMaterialExtension, GLTFSkinAsset, GLTFSpecularMaterialExtension, GLTFTextureAsset, GLTFTransmissionMaterialExtension, GLTFVolumeMaterialExtension, SerializedGLTFAsset } from "./GLTFLoader";
|
|
50
52
|
export { OBJLoader } from "./OBJLoader";
|
|
51
|
-
export { DEFAULT_GLTF_RENDER_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_HDR_STUDIO_PREVIEW_POSTPROCESS, DEFAULT_GLTF_STUDIO_PREVIEW_FRAME, DEFAULT_GLTF_STUDIO_PREVIEW_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_STUDIO_PREVIEW_POSTPROCESS, createDefaultGLTFHdrStudioPreviewEnvironmentLighting, createGLTFRenderResourceDiagnostics, createGLTFRenderResources, createGLTFRenderSource } from "./GLTFRenderResources";
|
|
53
|
+
export { DEFAULT_GLTF_RENDER_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_HDR_STUDIO_PREVIEW_POSTPROCESS, DEFAULT_GLTF_STUDIO_PREVIEW_FRAME, DEFAULT_GLTF_STUDIO_PREVIEW_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_STUDIO_PREVIEW_POSTPROCESS, createDefaultGLTFHdrStudioPreviewEnvironmentLighting, createGLTFRenderResourceDiagnostics, createGLTFRenderResources, createGLTFRenderSource, renderStateForGLTFMaterial } from "./GLTFRenderResources";
|
|
52
54
|
export type { DecodedGLTFImage, GLTFImageDecoder, GLTFMaterialRenderStateOverride, GLTFMaterialOverrideQuery, GLTFMaterialOverrideTarget, GLTFRenderableBinding, GLTFRenderResourceDiagnostics, GLTFRenderResourceDiagnosticsOptions, GLTFRenderResourceTextureSlotDiagnostic, GLTFRenderQualityPreset, GLTFRendererInput, GLTFRendererInputOptions, GLTFRenderResourceOptions, GLTFRenderSourceOptions, GLTFRenderResources } from "./GLTFRenderResources";
|
|
53
55
|
export { createAssetRenderDefaults, DEFAULT_ASSET_RENDER_VIEWPORT } from "./AssetRenderDefaults";
|
|
54
56
|
export type { AssetRenderDefaults, AssetRenderLightingPreset } from "./AssetRenderDefaults";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,qBAAqB,EACrB,gCAAgC,EACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qCAAqC,EACrC,oCAAoC,EACpC,6BAA6B,EAC7B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/assets/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,YAAY,EACV,8BAA8B,EAC9B,wBAAwB,EACxB,qBAAqB,EACrB,gCAAgC,EACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,YAAY,EACV,6BAA6B,EAC7B,2BAA2B,EAC3B,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACjC,kBAAkB,EAClB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qCAAqC,EACrC,oCAAoC,EACpC,6BAA6B,EAC7B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC1R,YAAY,EACV,uCAAuC,EACvC,wCAAwC,EACxC,6BAA6B,EAC7B,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,8BAA8B,EAC9B,gCAAgC,EAChC,6BAA6B,EAC7B,mCAAmC,EACnC,sCAAsC,EACtC,wCAAwC,EACxC,8BAA8B,EAC9B,6BAA6B,EAC7B,+BAA+B,EAC/B,mCAAmC,EACnC,gCAAgC,EAChC,iCAAiC,EACjC,qCAAqC,EACrC,sCAAsC,EACtC,aAAa,EACb,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gCAAgC,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnG,YAAY,EACV,0BAA0B,EAC1B,2BAA2B,EAC3B,2BAA2B,EAC3B,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,8BAA8B,EAC/B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,+BAA+B,EAC/B,wBAAwB,EACxB,8BAA8B,EAC9B,gCAAgC,EAChC,sCAAsC,EACvC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,iCAAiC,EACjC,6BAA6B,EAC7B,wCAAwC,EACxC,oCAAoC,EACrC,MAAM,4BAA4B,CAAC;AACpC,YAAY,EACV,6BAA6B,EAC7B,gCAAgC,EAChC,+BAA+B,EAC/B,yBAAyB,EACzB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,4BAA4B,EAC5B,4BAA4B,EAC5B,iCAAiC,EAClC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EACL,gCAAgC,EACjC,MAAM,oDAAoD,CAAC;AAC5D,YAAY,EACV,wBAAwB,EACxB,+BAA+B,EAChC,MAAM,kDAAkD,CAAC;AAC1D,YAAY,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,kCAAkC,EAClC,kCAAkC,EAClC,oBAAoB,EACpB,gCAAgC,EAChC,2BAA2B,EAC5B,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,oBAAoB,EACpB,iCAAiC,EACjC,4BAA4B,EAC5B,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,4BAA4B,EAC5B,2BAA2B,EAC3B,4BAA4B,EAC5B,mCAAmC,EACnC,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,gCAAgC,EAChC,uBAAuB,EACvB,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,+BAA+B,EAC/B,gCAAgC,EAChC,6BAA6B,EAC7B,qCAAqC,EACrC,sCAAsC,EACtC,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EAAE,uCAAuC,EAAE,mCAAmC,EAAE,MAAM,2BAA2B,CAAC;AACzH,YAAY,EACV,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,EAC5B,iCAAiC,EACjC,oCAAoC,EACpC,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACrF,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EACb,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACzB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,gCAAgC,EAChC,4BAA4B,EAC5B,sCAAsC,EACvC,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,0BAA0B,EAC1B,4BAA4B,EAC5B,kCAAkC,EAClC,kCAAkC,EACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC1E,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAClF,YAAY,EACV,SAAS,EACT,eAAe,EACf,8BAA8B,EAC9B,yBAAyB,EACzB,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,iBAAiB,EACjB,wBAAwB,EACxB,+BAA+B,EAC/B,aAAa,EACb,2BAA2B,EAC3B,kBAAkB,EAClB,0CAA0C,EAC1C,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,6BAA6B,EAC7B,gBAAgB,EAChB,iCAAiC,EACjC,2BAA2B,EAC3B,mBAAmB,EACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,wCAAwC,EACxC,2CAA2C,EAC3C,iCAAiC,EACjC,gDAAgD,EAChD,uCAAuC,EACvC,oDAAoD,EACpD,mCAAmC,EACnC,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,+BAA+B,EAC/B,yBAAyB,EACzB,0BAA0B,EAC1B,qBAAqB,EACrB,6BAA6B,EAC7B,oCAAoC,EACpC,uCAAuC,EACvC,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AACjG,YAAY,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,0BAA0B,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9G,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,4BAA4B,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,YAAY,EAAE,qBAAqB,EAAE,iCAAiC,EAAE,MAAM,8BAA8B,CAAC;AAC7G,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvE,YAAY,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACtI,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChF,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC1I,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,+BAA+B,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC7F,YAAY,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,gCAAgC,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClJ,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ export { createGLTFSceneAnalysisEvidence } from "./SceneAnalysisFixtures.js";
|
|
|
4
4
|
export { AssetDependencyGraph } from "./AssetDependencyGraph.js";
|
|
5
5
|
export { inspectGLTFAsset } from "./AssetInspection.js";
|
|
6
6
|
export { GLTF_DECODER_REQUIRED_EXTENSION_NAMES, GLTF_DIAGNOSTIC_ONLY_EXTENSION_NAMES, GLTF_EXTENSION_SUPPORT_MATRIX, GLTF_PARSED_WITH_LIMITS_EXTENSION_NAMES, GLTF_REQUIRED_ACCEPTED_EXTENSION_NAMES, GLTF_RUNTIME_SUPPORTED_EXTENSION_NAMES, GLTF_SUPPORTED_EXTENSION_NAMES, evaluateGLTFExtensionSupport, getGLTFExtensionSupport } from "./GLTFExtensionSupport.js";
|
|
7
|
-
export { createGLTFSceneAnimationMixer, createGLTFSceneAnimationRuntime, GLTFImportedSkeletonIKController, GLTFSceneAnimationCloneSampler, GLTFSceneAnimationMixerBinding, GLTFSceneAnimationRuntime, GLTFSceneMorphTargetController } from "./GLTFAnimationRuntime.js";
|
|
7
|
+
export { createGLTFSceneAnimationMixer, createGLTFSceneAnimationRuntime, GLTFImportedSkeletonIKController, GLTFSceneAnimationCloneSampler, GLTFSceneAnimationMixerBinding, GLTFSceneAnimationRuntime, GLTFSceneMorphTargetController, resolveGLTFClipName } from "./GLTFAnimationRuntime.js";
|
|
8
8
|
export { AssetHandle } from "./AssetHandle.js";
|
|
9
9
|
export { AssetLoadError } from "./AssetLoader.js";
|
|
10
10
|
export { AssetManager } from "./AssetManager.js";
|
|
@@ -23,9 +23,10 @@ export { assertValidBlenderExportFixtureManifest, createBlenderExportValidationR
|
|
|
23
23
|
export { createDracoDecoder, createMeshoptDecoder } from "./GLTFCompressionDecoders.js";
|
|
24
24
|
export { applyCarConceptMaterialStability, carConceptMaterialVisualRole, carConceptMaterialRenderStateOverrides } from "./CarConceptMaterialStability.js";
|
|
25
25
|
export { ImageLoader } from "./ImageLoader.js";
|
|
26
|
-
export { GLTFLoader } from "./GLTFLoader.js";
|
|
26
|
+
export { GLTFLoader, normalizeSkinWeights } from "./GLTFLoader.js";
|
|
27
|
+
export { autoFitGLTFScene, computeAutoFitTransform } from "./GLTFAutoFit.js";
|
|
27
28
|
export { OBJLoader } from "./OBJLoader.js";
|
|
28
|
-
export { DEFAULT_GLTF_RENDER_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_HDR_STUDIO_PREVIEW_POSTPROCESS, DEFAULT_GLTF_STUDIO_PREVIEW_FRAME, DEFAULT_GLTF_STUDIO_PREVIEW_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_STUDIO_PREVIEW_POSTPROCESS, createDefaultGLTFHdrStudioPreviewEnvironmentLighting, createGLTFRenderResourceDiagnostics, createGLTFRenderResources, createGLTFRenderSource } from "./GLTFRenderResources.js";
|
|
29
|
+
export { DEFAULT_GLTF_RENDER_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_HDR_STUDIO_PREVIEW_POSTPROCESS, DEFAULT_GLTF_STUDIO_PREVIEW_FRAME, DEFAULT_GLTF_STUDIO_PREVIEW_ENVIRONMENT_LIGHTING, DEFAULT_GLTF_STUDIO_PREVIEW_POSTPROCESS, createDefaultGLTFHdrStudioPreviewEnvironmentLighting, createGLTFRenderResourceDiagnostics, createGLTFRenderResources, createGLTFRenderSource, renderStateForGLTFMaterial } from "./GLTFRenderResources.js";
|
|
29
30
|
export { createAssetRenderDefaults, DEFAULT_ASSET_RENDER_VIEWPORT } from "./AssetRenderDefaults.js";
|
|
30
31
|
export { loadRenderableAsset } from "./loadRenderableAsset.js";
|
|
31
32
|
export { createRenderableScene } from "./createRenderableScene.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/assets/src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAO5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAW1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAarD,OAAO,EACL,qCAAqC,EACrC,oCAAoC,EACpC,6BAA6B,EAC7B,uCAAuC,EACvC,sCAAsC,EACtC,sCAAsC,EACtC,8BAA8B,EAC9B,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAAE,6BAA6B,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/assets/src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/assets",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"main": "./dist/index.js",
|
|
16
16
|
"types": "./dist/index.d.ts",
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@aura3d/animation": "
|
|
19
|
-
"@aura3d/
|
|
20
|
-
"@aura3d/
|
|
18
|
+
"@aura3d/animation": "workspace:*",
|
|
19
|
+
"@aura3d/rendering": "workspace:*",
|
|
20
|
+
"@aura3d/scene": "workspace:*"
|
|
21
21
|
},
|
|
22
22
|
"sideEffects": false
|
|
23
|
-
}
|
|
23
|
+
}
|
|
@@ -8,11 +8,114 @@ export interface GLTFSceneAnimationRuntimeOptions {
|
|
|
8
8
|
readonly asset?: Pick<GLTFAsset, "meshes" | "skins">;
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
/**
|
|
12
|
+
* Synonym groups for fuzzy clip-name matching. Real catalog assets label the same
|
|
13
|
+
* motion wildly differently ("Loops" vs "Idle", "Take 001" vs "Run", "sprint" vs
|
|
14
|
+
* "run"). Each inner array is a set of interchangeable canonical tokens.
|
|
15
|
+
*/
|
|
16
|
+
const GLTF_CLIP_SYNONYM_GROUPS: readonly (readonly string[])[] = [
|
|
17
|
+
["idle", "static", "rest", "loops", "loop", "tpose", "t-pose", "bind"],
|
|
18
|
+
["walk", "walking", "stroll"],
|
|
19
|
+
["run", "running", "sprint", "jog"],
|
|
20
|
+
["wave", "emote-yes", "emoteyes", "greet", "hello"],
|
|
21
|
+
["jump", "jumping", "hop"],
|
|
22
|
+
["attack", "punch", "hit", "strike"],
|
|
23
|
+
["death", "die", "dead"]
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
function normalizeClipToken(name: string): string {
|
|
27
|
+
return name.toLowerCase().replace(/[\s_.\-]+/g, "");
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Resolve a requested clip name to the best available clip name.
|
|
32
|
+
*
|
|
33
|
+
* Matching order:
|
|
34
|
+
* 1. Exact case-insensitive (ignoring whitespace/underscores/dots/dashes).
|
|
35
|
+
* 2. Synonym-group match: the requested name and an available name belong to
|
|
36
|
+
* the same synonym group (e.g. "run" resolves to "Sprint").
|
|
37
|
+
* 3. Substring match in either direction (e.g. "walk" -> "WalkCycle").
|
|
38
|
+
* 4. Fallback to the first available clip.
|
|
39
|
+
*
|
|
40
|
+
* Returns `undefined` only when there are no available clips.
|
|
41
|
+
*/
|
|
42
|
+
export function resolveGLTFClipName(
|
|
43
|
+
requested: string,
|
|
44
|
+
available: readonly string[]
|
|
45
|
+
): string | undefined {
|
|
46
|
+
if (available.length === 0) return undefined;
|
|
47
|
+
const requestedToken = normalizeClipToken(requested);
|
|
48
|
+
|
|
49
|
+
for (const name of available) {
|
|
50
|
+
if (normalizeClipToken(name) === requestedToken) return name;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const requestedGroup = GLTF_CLIP_SYNONYM_GROUPS.find((group) => group.includes(requestedToken));
|
|
54
|
+
if (requestedGroup) {
|
|
55
|
+
for (const name of available) {
|
|
56
|
+
if (requestedGroup.includes(normalizeClipToken(name))) return name;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
for (const name of available) {
|
|
61
|
+
const token = normalizeClipToken(name);
|
|
62
|
+
if (requestedToken.length > 0 && (token.includes(requestedToken) || requestedToken.includes(token))) {
|
|
63
|
+
return name;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return available[0];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface GLTFSceneAnimationClipBoneMask {
|
|
71
|
+
/** Only apply tracks whose node name matches one of these (substring match), if present. */
|
|
72
|
+
readonly include?: readonly string[];
|
|
73
|
+
/** Never apply tracks whose node name matches one of these (substring match). */
|
|
74
|
+
readonly exclude?: readonly string[];
|
|
75
|
+
}
|
|
76
|
+
|
|
11
77
|
export interface GLTFSceneAnimationClipSample {
|
|
12
78
|
readonly clipName: string;
|
|
13
79
|
readonly time: number;
|
|
14
80
|
readonly weight?: number;
|
|
15
81
|
readonly additive?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Optional per-clip bone mask for layered playback (e.g. an upper-body attack over a full-body
|
|
84
|
+
* locomotion base). When set, only matching node tracks from this clip are blended in. Default
|
|
85
|
+
* (undefined) applies the whole clip, preserving existing behavior.
|
|
86
|
+
*/
|
|
87
|
+
readonly mask?: GLTFSceneAnimationClipBoneMask;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function clipMaskAllowsNode(mask: GLTFSceneAnimationClipBoneMask | undefined, nodeName: string): boolean {
|
|
91
|
+
if (!mask) return true;
|
|
92
|
+
if (mask.exclude && mask.exclude.some((entry) => nodeName.includes(entry))) return false;
|
|
93
|
+
if (mask.include && mask.include.length > 0) return mask.include.some((entry) => nodeName.includes(entry));
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* A single bone's local transform inside a {@link GLTFScenePose}. Components are plain tuples in
|
|
99
|
+
* glTF/scene convention (translation/scale as `[x,y,z]`, rotation as a quaternion `[x,y,z,w]`). For
|
|
100
|
+
* convenience the bridge also accepts the object form (`{x,y,z}` / `{x,y,z,w}`) emitted directly by
|
|
101
|
+
* `@aura3d/animation`'s `retargetHumanoidPose`, so a retargeted `AnimationPose` can be handed in
|
|
102
|
+
* without re-shaping.
|
|
103
|
+
*/
|
|
104
|
+
export interface GLTFScenePoseBoneTransform {
|
|
105
|
+
readonly position?: readonly [number, number, number] | { readonly x: number; readonly y: number; readonly z: number };
|
|
106
|
+
readonly rotation?: readonly [number, number, number, number] | { readonly x: number; readonly y: number; readonly z: number; readonly w: number };
|
|
107
|
+
readonly scale?: readonly [number, number, number] | { readonly x: number; readonly y: number; readonly z: number };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* An externally-computed pose keyed directly by GLB **node names** (not semantic humanoid slots).
|
|
112
|
+
* This is the render-time bridge target for a retargeted `AnimationPose`: the keys of `bones` are
|
|
113
|
+
* the target rig's node names — exactly what `retargetHumanoidPose(...).bones` produces for a
|
|
114
|
+
* humanoid map (`binding.target.name`). `morphTargets` maps a node name to a single morph weight.
|
|
115
|
+
*/
|
|
116
|
+
export interface GLTFScenePose {
|
|
117
|
+
readonly bones: Record<string, GLTFScenePoseBoneTransform>;
|
|
118
|
+
readonly morphTargets?: Record<string, number>;
|
|
16
119
|
}
|
|
17
120
|
|
|
18
121
|
export interface GLTFSceneAnimationApplyResult {
|
|
@@ -403,6 +506,33 @@ export class GLTFSceneAnimationRuntime {
|
|
|
403
506
|
return this.applyClip(clip, time);
|
|
404
507
|
}
|
|
405
508
|
|
|
509
|
+
/** Names of every clip registered on this runtime, in declaration order. */
|
|
510
|
+
clipNames(): readonly string[] {
|
|
511
|
+
return [...this.clipsByName.keys()];
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* Resolve a requested clip name to the best available registered clip name
|
|
516
|
+
* using fuzzy matching (exact -> synonym group -> substring -> first clip).
|
|
517
|
+
* Returns `undefined` when the runtime has no clips.
|
|
518
|
+
*/
|
|
519
|
+
resolveClipName(name: string): string | undefined {
|
|
520
|
+
return resolveGLTFClipName(name, this.clipNames());
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
/**
|
|
524
|
+
* Apply a clip selected by fuzzy name resolution. Unlike {@link applyClipByName}
|
|
525
|
+
* this tolerates differing source clip names (e.g. requesting "idle" when the
|
|
526
|
+
* asset only ships "Loops"). Throws only when no clips exist at all.
|
|
527
|
+
*/
|
|
528
|
+
applyClipByNameFuzzy(name: string, time: number): GLTFSceneAnimationApplyResult {
|
|
529
|
+
const resolved = this.resolveClipName(name);
|
|
530
|
+
if (resolved === undefined) {
|
|
531
|
+
throw new Error("glTF animation runtime has no clips to resolve.");
|
|
532
|
+
}
|
|
533
|
+
return this.applyClipByName(resolved, time);
|
|
534
|
+
}
|
|
535
|
+
|
|
406
536
|
applyClip(clip: AnimationClip, time: number): GLTFSceneAnimationApplyResult {
|
|
407
537
|
if (!Number.isFinite(time) || time < 0) {
|
|
408
538
|
throw new Error("glTF animation runtime time must be finite and non-negative.");
|
|
@@ -443,6 +573,7 @@ export class GLTFSceneAnimationRuntime {
|
|
|
443
573
|
unsupportedTracks.push(track.target);
|
|
444
574
|
continue;
|
|
445
575
|
}
|
|
576
|
+
if (!clipMaskAllowsNode(sample.mask, target.nodeName)) continue;
|
|
446
577
|
blendInto(accumulators, track.target, track.valueType, track.sample(wrappedTime), weight, sample.additive === true);
|
|
447
578
|
}
|
|
448
579
|
}
|
|
@@ -480,6 +611,44 @@ export class GLTFSceneAnimationRuntime {
|
|
|
480
611
|
return this.lastApply;
|
|
481
612
|
}
|
|
482
613
|
|
|
614
|
+
/**
|
|
615
|
+
* Render-time bridge: drive the loaded GLB from an externally-computed pose whose keys are GLB
|
|
616
|
+
* **node names** (e.g. the output of `@aura3d/animation`'s `retargetHumanoidPose`, whose
|
|
617
|
+
* `bones` keys are the target rig node names). Each bone transform's `position`/`rotation`/`scale`
|
|
618
|
+
* is written onto the matching scene node's local transform, and each `morphTargets` entry sets
|
|
619
|
+
* that node's morph weight. This reuses the same {@link applyAnimationValues} / track-binding path
|
|
620
|
+
* as embedded clips (targets are emitted as `"<node>.translation|rotation|scale|weights"`), so
|
|
621
|
+
* skinning palettes and missing-target reporting behave identically. Additive to `applyClip*` —
|
|
622
|
+
* it does not touch the mixer or clip registry.
|
|
623
|
+
*/
|
|
624
|
+
applyPose(pose: GLTFScenePose, label = "retargeted-pose", time = 0): GLTFSceneAnimationApplyResult {
|
|
625
|
+
if (!pose || typeof pose !== "object" || typeof pose.bones !== "object" || pose.bones === null) {
|
|
626
|
+
throw new Error("glTF animation runtime applyPose requires a pose with a bones record.");
|
|
627
|
+
}
|
|
628
|
+
const values = new Map<string, AnimationValue>();
|
|
629
|
+
for (const [nodeName, transform] of Object.entries(pose.bones)) {
|
|
630
|
+
if (!transform) continue;
|
|
631
|
+
if (transform.position !== undefined) {
|
|
632
|
+
values.set(`${nodeName}.translation`, toVec3Tuple(transform.position, `${nodeName}.translation`));
|
|
633
|
+
}
|
|
634
|
+
if (transform.rotation !== undefined) {
|
|
635
|
+
values.set(`${nodeName}.rotation`, toQuatTuple(transform.rotation, `${nodeName}.rotation`));
|
|
636
|
+
}
|
|
637
|
+
if (transform.scale !== undefined) {
|
|
638
|
+
values.set(`${nodeName}.scale`, toVec3Tuple(transform.scale, `${nodeName}.scale`));
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
if (pose.morphTargets) {
|
|
642
|
+
for (const [nodeName, weight] of Object.entries(pose.morphTargets)) {
|
|
643
|
+
if (!Number.isFinite(weight)) {
|
|
644
|
+
throw new Error(`glTF animation runtime applyPose morph weight for "${nodeName}" must be finite.`);
|
|
645
|
+
}
|
|
646
|
+
values.set(`${nodeName}.weights`, [weight]);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
return this.applyAnimationValues(label, time, values);
|
|
650
|
+
}
|
|
651
|
+
|
|
483
652
|
solveImportedSkeletonTwoBoneIK(options: GLTFImportedSkeletonIKOptions): GLTFImportedSkeletonIKResult {
|
|
484
653
|
if (!this.options.asset || this.options.asset.skins.length === 0) {
|
|
485
654
|
throw new Error("glTF imported skeleton IK requires an asset with at least one skin.");
|
|
@@ -1052,6 +1221,32 @@ function asQuat(value: AnimationValue, target: string): [number, number, number,
|
|
|
1052
1221
|
return [value[0], value[1], value[2], value[3]];
|
|
1053
1222
|
}
|
|
1054
1223
|
|
|
1224
|
+
function toVec3Tuple(
|
|
1225
|
+
value: readonly [number, number, number] | { readonly x: number; readonly y: number; readonly z: number },
|
|
1226
|
+
target: string
|
|
1227
|
+
): [number, number, number] {
|
|
1228
|
+
const tuple = Array.isArray(value)
|
|
1229
|
+
? value
|
|
1230
|
+
: [(value as { x: number }).x, (value as { y: number }).y, (value as { z: number }).z];
|
|
1231
|
+
if (tuple.length !== 3 || tuple.some((component) => typeof component !== "number" || !Number.isFinite(component))) {
|
|
1232
|
+
throw new Error(`glTF pose "${target}" requires a finite vec3.`);
|
|
1233
|
+
}
|
|
1234
|
+
return [tuple[0]!, tuple[1]!, tuple[2]!];
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
function toQuatTuple(
|
|
1238
|
+
value: readonly [number, number, number, number] | { readonly x: number; readonly y: number; readonly z: number; readonly w: number },
|
|
1239
|
+
target: string
|
|
1240
|
+
): [number, number, number, number] {
|
|
1241
|
+
const tuple = Array.isArray(value)
|
|
1242
|
+
? value
|
|
1243
|
+
: [(value as { x: number }).x, (value as { y: number }).y, (value as { z: number }).z, (value as { w: number }).w];
|
|
1244
|
+
if (tuple.length !== 4 || tuple.some((component) => typeof component !== "number" || !Number.isFinite(component))) {
|
|
1245
|
+
throw new Error(`glTF pose "${target}" requires a finite quaternion.`);
|
|
1246
|
+
}
|
|
1247
|
+
return [tuple[0]!, tuple[1]!, tuple[2]!, tuple[3]!];
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1055
1250
|
function asNumberArray(value: AnimationValue): number[] {
|
|
1056
1251
|
if (!Array.isArray(value) || value.some((component) => typeof component !== "number" || !Number.isFinite(component))) {
|
|
1057
1252
|
throw new Error("glTF morph-weight animation sampled an invalid number array.");
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { CameraFrameBounds } from "@aura3d/rendering";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Up-axis of the source asset. Most glTF assets are Y-up (spec default), but
|
|
5
|
+
* many catalog exports (CAD/Blender Z-up pipelines) ship Z-up geometry.
|
|
6
|
+
*/
|
|
7
|
+
export type GLTFUpAxis = "y" | "z";
|
|
8
|
+
|
|
9
|
+
export interface AutoFitTransform {
|
|
10
|
+
/** Uniform scale to apply so the model reaches the target height. */
|
|
11
|
+
readonly scale: number;
|
|
12
|
+
/**
|
|
13
|
+
* Translation (post-scale) that recenters the model horizontally and places
|
|
14
|
+
* its lowest point ("feet") at y = 0.
|
|
15
|
+
*/
|
|
16
|
+
readonly translation: readonly [number, number, number];
|
|
17
|
+
/**
|
|
18
|
+
* Quaternion (x, y, z, w) that rotates source up-axis to Y-up, applied before
|
|
19
|
+
* scale/translation. Identity `[0, 0, 0, 1]` when no correction is needed.
|
|
20
|
+
*/
|
|
21
|
+
readonly rotation: readonly [number, number, number, number];
|
|
22
|
+
/** The up-axis correction that was applied (`"none"` when already Y-up). */
|
|
23
|
+
readonly upAxisCorrection: "none" | "z-to-y";
|
|
24
|
+
/** The largest source extent, useful for diagnostics/logging. */
|
|
25
|
+
readonly sourceExtent: number;
|
|
26
|
+
/** The resulting model height after the transform is applied. */
|
|
27
|
+
readonly fittedHeight: number;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export interface AutoFitOptions {
|
|
31
|
+
/** Target height (in world units) the model should occupy. Default 1.6. */
|
|
32
|
+
readonly targetHeight?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Source up-axis. When omitted, the loader keeps the asset as-authored
|
|
35
|
+
* (`"y"`); pass `"z"` for Z-up catalog exports to rotate them upright.
|
|
36
|
+
*/
|
|
37
|
+
readonly upAxis?: GLTFUpAxis;
|
|
38
|
+
/**
|
|
39
|
+
* Recenter the model on the ground plane (feet at y = 0, centered in X/Z).
|
|
40
|
+
* Default `true`. When `false`, only scale (and optional rotation) is returned.
|
|
41
|
+
*/
|
|
42
|
+
readonly recenter?: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const IDENTITY_ROTATION = [0, 0, 0, 1] as const;
|
|
46
|
+
// Quaternion for -90deg about X, which maps Z-up geometry to Y-up.
|
|
47
|
+
const Z_TO_Y_ROTATION = [-Math.SQRT1_2, 0, 0, Math.SQRT1_2] as const;
|
|
48
|
+
const DEFAULT_TARGET_HEIGHT = 1.6;
|
|
49
|
+
const MIN_EXTENT_EPSILON = 1e-6;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Compute a fit-to-height transform for a loaded glTF scene's bounds.
|
|
53
|
+
*
|
|
54
|
+
* Catalog models vary wildly in scale and orientation: one Sketchfab export had
|
|
55
|
+
* an extent of ~1821 units while a Kenney prop is ~1 unit, and Z-up CAD exports
|
|
56
|
+
* arrive lying on their side. This helper returns a single uniform scale +
|
|
57
|
+
* translation (and optional up-axis rotation) so any model fits a target height
|
|
58
|
+
* with its feet on the ground plane, independent of the renderer.
|
|
59
|
+
*
|
|
60
|
+
* The returned transform is meant to be applied in order: rotation, then scale,
|
|
61
|
+
* then translation.
|
|
62
|
+
*/
|
|
63
|
+
export function computeAutoFitTransform(
|
|
64
|
+
bounds: CameraFrameBounds,
|
|
65
|
+
options: AutoFitOptions = {}
|
|
66
|
+
): AutoFitTransform {
|
|
67
|
+
const targetHeight = options.targetHeight ?? DEFAULT_TARGET_HEIGHT;
|
|
68
|
+
if (!Number.isFinite(targetHeight) || targetHeight <= 0) {
|
|
69
|
+
throw new Error("computeAutoFitTransform targetHeight must be a positive finite number.");
|
|
70
|
+
}
|
|
71
|
+
const recenter = options.recenter ?? true;
|
|
72
|
+
const upAxisCorrection = options.upAxis === "z" ? "z-to-y" : "none";
|
|
73
|
+
const rotation = upAxisCorrection === "z-to-y" ? Z_TO_Y_ROTATION : IDENTITY_ROTATION;
|
|
74
|
+
|
|
75
|
+
// Reorient the AABB into the post-rotation (Y-up) frame before measuring height.
|
|
76
|
+
const oriented = upAxisCorrection === "z-to-y" ? rotateBoundsZtoY(bounds) : bounds;
|
|
77
|
+
|
|
78
|
+
const size: readonly [number, number, number] = [
|
|
79
|
+
Math.max(0, oriented.max[0] - oriented.min[0]),
|
|
80
|
+
Math.max(0, oriented.max[1] - oriented.min[1]),
|
|
81
|
+
Math.max(0, oriented.max[2] - oriented.min[2])
|
|
82
|
+
];
|
|
83
|
+
const sourceExtent = Math.max(size[0], size[1], size[2]);
|
|
84
|
+
const height = size[1];
|
|
85
|
+
const scale = height > MIN_EXTENT_EPSILON ? targetHeight / height : 1;
|
|
86
|
+
|
|
87
|
+
let translation: readonly [number, number, number] = [0, 0, 0];
|
|
88
|
+
if (recenter) {
|
|
89
|
+
const centerX = (oriented.min[0] + oriented.max[0]) / 2;
|
|
90
|
+
const centerZ = (oriented.min[2] + oriented.max[2]) / 2;
|
|
91
|
+
const floorY = oriented.min[1];
|
|
92
|
+
translation = [-centerX * scale, -floorY * scale, -centerZ * scale];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return {
|
|
96
|
+
scale,
|
|
97
|
+
translation,
|
|
98
|
+
rotation,
|
|
99
|
+
upAxisCorrection,
|
|
100
|
+
sourceExtent,
|
|
101
|
+
fittedHeight: height * scale
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Convenience wrapper that reads `.bounds` off an object (e.g. a
|
|
107
|
+
* `GLTFRenderResources` instance) and computes the fit transform.
|
|
108
|
+
*/
|
|
109
|
+
export function autoFitGLTFScene(
|
|
110
|
+
scene: { readonly bounds: CameraFrameBounds },
|
|
111
|
+
options: AutoFitOptions = {}
|
|
112
|
+
): AutoFitTransform {
|
|
113
|
+
return computeAutoFitTransform(scene.bounds, options);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Rotate an axis-aligned bounding box by the Z-up -> Y-up correction. Because the
|
|
118
|
+
* rotation is axis-aligned (-90deg about X), this maps each source axis to a
|
|
119
|
+
* destination axis exactly: x -> x, y -> z, z -> -y.
|
|
120
|
+
*/
|
|
121
|
+
function rotateBoundsZtoY(bounds: CameraFrameBounds): CameraFrameBounds {
|
|
122
|
+
const xs = [bounds.min[0], bounds.max[0]];
|
|
123
|
+
const ys = [bounds.min[1], bounds.max[1]];
|
|
124
|
+
const zs = [bounds.min[2], bounds.max[2]];
|
|
125
|
+
// mapped axes: newX = x, newY = z, newZ = -y
|
|
126
|
+
const newX = xs;
|
|
127
|
+
const newY = zs;
|
|
128
|
+
const newZ = ys.map((value) => -value);
|
|
129
|
+
return {
|
|
130
|
+
min: [Math.min(...newX), Math.min(...newY), Math.min(...newZ)],
|
|
131
|
+
max: [Math.max(...newX), Math.max(...newY), Math.max(...newZ)]
|
|
132
|
+
};
|
|
133
|
+
}
|