@zephyr3d/scene 0.9.3 → 0.9.5

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 (188) hide show
  1. package/dist/animation/animationmask.js +224 -0
  2. package/dist/animation/animationmask.js.map +1 -0
  3. package/dist/animation/animationset.js +268 -67
  4. package/dist/animation/animationset.js.map +1 -1
  5. package/dist/animation/animationtrack.js.map +1 -1
  6. package/dist/animation/eulerrotationtrack.js +3 -0
  7. package/dist/animation/eulerrotationtrack.js.map +1 -1
  8. package/dist/animation/fixed_geometry_cache_track.js +7 -0
  9. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  10. package/dist/animation/ik_modifier.js.map +1 -1
  11. package/dist/animation/joint_dynamics/collision.js +6 -4
  12. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  13. package/dist/animation/joint_dynamics/controller.js +390 -43
  14. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  15. package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
  16. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  17. package/dist/animation/joint_dynamics/solver.js +4 -3
  18. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  19. package/dist/animation/joint_dynamics/types.js.map +1 -1
  20. package/dist/animation/joint_dynamics_modifier.js +2 -0
  21. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  22. package/dist/animation/morphtarget.js +3 -72
  23. package/dist/animation/morphtarget.js.map +1 -1
  24. package/dist/animation/morphtrack.js +3 -0
  25. package/dist/animation/morphtrack.js.map +1 -1
  26. package/dist/animation/pca_geometry_cache_track.js +3 -0
  27. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  28. package/dist/animation/proptrack.js +3 -0
  29. package/dist/animation/proptrack.js.map +1 -1
  30. package/dist/animation/rotationtrack.js +3 -0
  31. package/dist/animation/rotationtrack.js.map +1 -1
  32. package/dist/animation/scaletrack.js +3 -0
  33. package/dist/animation/scaletrack.js.map +1 -1
  34. package/dist/animation/skeleton.js +254 -79
  35. package/dist/animation/skeleton.js.map +1 -1
  36. package/dist/animation/skeleton_modifier.js.map +1 -1
  37. package/dist/animation/spring/spring_particle.js +4 -4
  38. package/dist/animation/spring/spring_particle.js.map +1 -1
  39. package/dist/animation/spring_modifier.js.map +1 -1
  40. package/dist/animation/translationtrack.js +3 -0
  41. package/dist/animation/translationtrack.js.map +1 -1
  42. package/dist/app/engine.js +129 -17
  43. package/dist/app/engine.js.map +1 -1
  44. package/dist/app/scriptregistry.js +251 -80
  45. package/dist/app/scriptregistry.js.map +1 -1
  46. package/dist/asset/assetmanager.js +133 -102
  47. package/dist/asset/assetmanager.js.map +1 -1
  48. package/dist/asset/loaders/gltf/gltf_loader.js +18 -14
  49. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  50. package/dist/asset/loaders/loader.js +1 -6
  51. package/dist/asset/loaders/loader.js.map +1 -1
  52. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  53. package/dist/asset/model.js +1052 -183
  54. package/dist/asset/model.js.map +1 -1
  55. package/dist/avatar/wardrobe.js +474 -0
  56. package/dist/avatar/wardrobe.js.map +1 -0
  57. package/dist/index.d.ts +1810 -233
  58. package/dist/index.js +13 -3
  59. package/dist/index.js.map +1 -1
  60. package/dist/material/material.js +1 -1
  61. package/dist/material/material.js.map +1 -1
  62. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  63. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  64. package/dist/material/mixins/pbr/common.js +72 -15
  65. package/dist/material/mixins/pbr/common.js.map +1 -1
  66. package/dist/material/msdf_text.js +180 -0
  67. package/dist/material/msdf_text.js.map +1 -0
  68. package/dist/material/msdf_text_sprite.js +64 -0
  69. package/dist/material/msdf_text_sprite.js.map +1 -0
  70. package/dist/material/pbrblueprint.js +21 -6
  71. package/dist/material/pbrblueprint.js.map +1 -1
  72. package/dist/material/shader/helper.js +277 -277
  73. package/dist/material/shader/helper.js.map +1 -1
  74. package/dist/material/sprite_sdf.js +106 -0
  75. package/dist/material/sprite_sdf.js.map +1 -0
  76. package/dist/posteffect/ssr.js +1 -0
  77. package/dist/posteffect/ssr.js.map +1 -1
  78. package/dist/render/abuffer_oit.js +1 -0
  79. package/dist/render/abuffer_oit.js.map +1 -1
  80. package/dist/render/cluster_light.js.map +1 -1
  81. package/dist/render/cull_visitor.js +28 -0
  82. package/dist/render/cull_visitor.js.map +1 -1
  83. package/dist/render/drawable.js.map +1 -1
  84. package/dist/render/drawable_mixin.js +1 -0
  85. package/dist/render/drawable_mixin.js.map +1 -1
  86. package/dist/render/envlight.js +54 -1
  87. package/dist/render/envlight.js.map +1 -1
  88. package/dist/render/fbm_wavegenerator.js +1 -0
  89. package/dist/render/fbm_wavegenerator.js.map +1 -1
  90. package/dist/render/gerstner_wavegenerator.js +1 -0
  91. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  92. package/dist/render/globalbindgroup_allocator.js +1 -0
  93. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  94. package/dist/render/render_queue.js +1 -0
  95. package/dist/render/render_queue.js.map +1 -1
  96. package/dist/render/sky.js +9 -0
  97. package/dist/render/sky.js.map +1 -1
  98. package/dist/scene/basesprite.js +1 -5
  99. package/dist/scene/basesprite.js.map +1 -1
  100. package/dist/scene/batchgroup.js +18 -8
  101. package/dist/scene/batchgroup.js.map +1 -1
  102. package/dist/scene/environment.js +16 -2
  103. package/dist/scene/environment.js.map +1 -1
  104. package/dist/scene/mesh.js +164 -102
  105. package/dist/scene/mesh.js.map +1 -1
  106. package/dist/scene/meshdrawable.js +96 -0
  107. package/dist/scene/meshdrawable.js.map +1 -0
  108. package/dist/scene/msdftext.js +341 -0
  109. package/dist/scene/msdftext.js.map +1 -0
  110. package/dist/scene/msdftextsprite.js +349 -0
  111. package/dist/scene/msdftextsprite.js.map +1 -0
  112. package/dist/scene/particlesys.js +1 -0
  113. package/dist/scene/particlesys.js.map +1 -1
  114. package/dist/scene/scene.js +2 -0
  115. package/dist/scene/scene.js.map +1 -1
  116. package/dist/scene/scene_node.js +437 -230
  117. package/dist/scene/scene_node.js.map +1 -1
  118. package/dist/scene/sdftextsprite.js +322 -0
  119. package/dist/scene/sdftextsprite.js.map +1 -0
  120. package/dist/scene/terrain-cm/grass.js +1 -0
  121. package/dist/scene/terrain-cm/grass.js.map +1 -1
  122. package/dist/scene/terrain-cm/grassmaterial.js +1 -0
  123. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  124. package/dist/scene/terrain-cm/terrain-cm.js +1 -0
  125. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  126. package/dist/scene/textsprite.js +120 -0
  127. package/dist/scene/textsprite.js.map +1 -0
  128. package/dist/scene/water.js +1 -0
  129. package/dist/scene/water.js.map +1 -1
  130. package/dist/shadow/shader.js +1 -0
  131. package/dist/shadow/shader.js.map +1 -1
  132. package/dist/text/font/font_asset.js +884 -0
  133. package/dist/text/font/font_asset.js.map +1 -0
  134. package/dist/text/font/sfnt_reader.js +43 -0
  135. package/dist/text/font/sfnt_reader.js.map +1 -0
  136. package/dist/text/msdf/generator.js +417 -0
  137. package/dist/text/msdf/generator.js.map +1 -0
  138. package/dist/text/msdf/shape.js +146 -0
  139. package/dist/text/msdf/shape.js.map +1 -0
  140. package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
  141. package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
  142. package/dist/text/runtime/msdf_text_atlas_manager.js +50 -0
  143. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
  144. package/dist/text/runtime/text_layout.js +96 -0
  145. package/dist/text/runtime/text_layout.js.map +1 -0
  146. package/dist/utility/blueprint/material/inputs.js +188 -1
  147. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  148. package/dist/utility/blueprint/material/ir.js +16 -1
  149. package/dist/utility/blueprint/material/ir.js.map +1 -1
  150. package/dist/utility/blueprint/material/pbr.js +32 -0
  151. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  152. package/dist/utility/bounding_volume.js.map +1 -1
  153. package/dist/utility/pmrem.js +34 -8
  154. package/dist/utility/pmrem.js.map +1 -1
  155. package/dist/utility/serialization/manager.js +340 -283
  156. package/dist/utility/serialization/manager.js.map +1 -1
  157. package/dist/utility/serialization/scene/animation.js +702 -7
  158. package/dist/utility/serialization/scene/animation.js.map +1 -1
  159. package/dist/utility/serialization/scene/batch.js +2 -0
  160. package/dist/utility/serialization/scene/batch.js.map +1 -1
  161. package/dist/utility/serialization/scene/camera.js +2 -0
  162. package/dist/utility/serialization/scene/camera.js.map +1 -1
  163. package/dist/utility/serialization/scene/light.js +2 -0
  164. package/dist/utility/serialization/scene/light.js.map +1 -1
  165. package/dist/utility/serialization/scene/material.js +1 -0
  166. package/dist/utility/serialization/scene/material.js.map +1 -1
  167. package/dist/utility/serialization/scene/mesh.js +66 -4
  168. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  169. package/dist/utility/serialization/scene/node.js +189 -8
  170. package/dist/utility/serialization/scene/node.js.map +1 -1
  171. package/dist/utility/serialization/scene/particle.js +2 -0
  172. package/dist/utility/serialization/scene/particle.js.map +1 -1
  173. package/dist/utility/serialization/scene/primitive.js +1 -0
  174. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  175. package/dist/utility/serialization/scene/sprite.js +2 -0
  176. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  177. package/dist/utility/serialization/scene/terrain.js +2 -0
  178. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  179. package/dist/utility/serialization/scene/text.js +516 -0
  180. package/dist/utility/serialization/scene/text.js.map +1 -0
  181. package/dist/utility/serialization/scene/water.js +2 -0
  182. package/dist/utility/serialization/scene/water.js.map +1 -1
  183. package/dist/utility/serialization/types.js.map +1 -1
  184. package/dist/utility/textures/sheenlut.js +138 -0
  185. package/dist/utility/textures/sheenlut.js.map +1 -0
  186. package/dist/values.js +48 -48
  187. package/dist/values.js.map +1 -1
  188. package/package.json +3 -3
@@ -35,11 +35,6 @@
35
35
  * @public
36
36
  */ class AbstractTextureLoader extends LoaderBase {
37
37
  }
38
- /**
39
- * Base class for any kind of model loaders
40
- * @public
41
- */ class AbstractModelLoader extends LoaderBase {
42
- }
43
38
 
44
- export { AbstractModelLoader, AbstractTextureLoader, LoaderBase };
39
+ export { AbstractTextureLoader, LoaderBase };
45
40
  //# sourceMappingURL=loader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sources":["../../../src/asset/loaders/loader.ts"],"sourcesContent":["import type { BaseTexture, SamplerOptions } from '@zephyr3d/device';\r\nimport type { AssetManager } from '../assetmanager';\r\nimport type { SharedModel } from '../model';\r\nimport type { DecoderModule } from 'draco3d';\r\nimport type { Nullable, TypedArray, VFS } from '@zephyr3d/base';\r\n\r\n/**\r\n * Base interface for any kind loaders\r\n * @public\r\n */\r\nexport class LoaderBase {\r\n /** @internal */\r\n protected _urlResolver: Nullable<(url: string) => string>;\r\n /**\r\n * Creates an instance of LoaderBase\r\n */\r\n constructor() {\r\n this._urlResolver = null;\r\n }\r\n /**\r\n * URL resolver for the loader\r\n */\r\n get urlResolver() {\r\n return this._urlResolver;\r\n }\r\n set urlResolver(resolver) {\r\n this._urlResolver = resolver;\r\n }\r\n /**\r\n * Sends a GET request\r\n * @param url - The URL to get\r\n * @param headers - The headers for the request\r\n * @param crossOrigin - crossOrigin property for the request\r\n * @returns Response of the request\r\n */\r\n async request(url: string, headers: Record<string, string> = {}, crossOrigin = 'anonymous') {\r\n const s = this._urlResolver ? this._urlResolver(url) : null;\r\n return s\r\n ? fetch(s, {\r\n credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',\r\n headers: headers\r\n })\r\n : null;\r\n }\r\n}\r\n/**\r\n * Base class for any kind of texture loaders\r\n * @public\r\n */\r\nexport abstract class AbstractTextureLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a texture with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a texture\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the texture image data\r\n * @param data - The texture image data\r\n * @param srgb - true if the texture is of sRGB format\r\n * @param samplerOptions - Sampler options of the texture\r\n * @param texture - if not null, this is a texture restore operation\r\n * @returns The loaded texture\r\n */\r\n abstract load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: Nullable<BaseTexture>\r\n ): Promise<Nullable<BaseTexture>>;\r\n}\r\n\r\n/**\r\n * Base class for any kind of model loaders\r\n * @public\r\n */\r\nexport abstract class AbstractModelLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a model with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a model\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the model data\r\n * @param data - The model data\r\n * @returns The loaded model\r\n */\r\n abstract load(\r\n assetManager: AssetManager,\r\n url: string,\r\n mimeType: string,\r\n data: Blob,\r\n dracoDecoderModule?: DecoderModule,\r\n VFSs?: VFS[]\r\n ): Promise<Nullable<SharedModel>>;\r\n}\r\n"],"names":["LoaderBase","_urlResolver","urlResolver","resolver","request","url","headers","crossOrigin","s","fetch","credentials","AbstractTextureLoader","AbstractModelLoader"],"mappings":"AAMA;;;AAGC,IACM,MAAMA,UAAAA,CAAAA;qBAEX,YAA0D;AAC1D;;AAEC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,YAAY,GAAG,IAAA;AACtB;AACA;;AAEC,MACD,IAAIC,WAAc,GAAA;QAChB,OAAO,IAAI,CAACD,YAAY;AAC1B;IACA,IAAIC,WAAAA,CAAYC,QAAQ,EAAE;QACxB,IAAI,CAACF,YAAY,GAAGE,QAAAA;AACtB;AACA;;;;;;MAOA,MAAMC,OAAQC,CAAAA,GAAW,EAAEC,OAAAA,GAAkC,EAAE,EAAEC,WAAc,GAAA,WAAW,EAAE;QAC1F,MAAMC,CAAAA,GAAI,IAAI,CAACP,YAAY,GAAG,IAAI,CAACA,YAAY,CAACI,GAAO,CAAA,GAAA,IAAA;QACvD,OAAOG,CAAAA,GACHC,MAAMD,CAAG,EAAA;YACPE,WAAaH,EAAAA,WAAAA,KAAgB,cAAc,aAAgB,GAAA,SAAA;YAC3DD,OAASA,EAAAA;SAEX,CAAA,GAAA,IAAA;AACN;AACF;AACA;;;IAIO,MAAeK,qBAA8BX,SAAAA,UAAAA,CAAAA;AAyBpD;AAEA;;;IAIO,MAAeY,mBAA4BZ,SAAAA,UAAAA,CAAAA;AAuBlD;;;;"}
1
+ {"version":3,"file":"loader.js","sources":["../../../src/asset/loaders/loader.ts"],"sourcesContent":["import type { BaseTexture, SamplerOptions } from '@zephyr3d/device';\r\nimport type { Nullable, TypedArray } from '@zephyr3d/base';\r\n\r\n/**\r\n * Base interface for any kind loaders\r\n * @public\r\n */\r\nexport class LoaderBase {\r\n /** @internal */\r\n protected _urlResolver: Nullable<(url: string) => string>;\r\n /**\r\n * Creates an instance of LoaderBase\r\n */\r\n constructor() {\r\n this._urlResolver = null;\r\n }\r\n /**\r\n * URL resolver for the loader\r\n */\r\n get urlResolver() {\r\n return this._urlResolver;\r\n }\r\n set urlResolver(resolver) {\r\n this._urlResolver = resolver;\r\n }\r\n /**\r\n * Sends a GET request\r\n * @param url - The URL to get\r\n * @param headers - The headers for the request\r\n * @param crossOrigin - crossOrigin property for the request\r\n * @returns Response of the request\r\n */\r\n async request(url: string, headers: Record<string, string> = {}, crossOrigin = 'anonymous') {\r\n const s = this._urlResolver ? this._urlResolver(url) : null;\r\n return s\r\n ? fetch(s, {\r\n credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',\r\n headers: headers\r\n })\r\n : null;\r\n }\r\n}\r\n/**\r\n * Base class for any kind of texture loaders\r\n * @public\r\n */\r\nexport abstract class AbstractTextureLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a texture with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a texture\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the texture image data\r\n * @param data - The texture image data\r\n * @param srgb - true if the texture is of sRGB format\r\n * @param samplerOptions - Sampler options of the texture\r\n * @param texture - if not null, this is a texture restore operation\r\n * @returns The loaded texture\r\n */\r\n abstract load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: Nullable<BaseTexture>\r\n ): Promise<Nullable<BaseTexture>>;\r\n}\r\n"],"names":["LoaderBase","_urlResolver","urlResolver","resolver","request","url","headers","crossOrigin","s","fetch","credentials","AbstractTextureLoader"],"mappings":"AAGA;;;AAGC,IACM,MAAMA,UAAAA,CAAAA;qBAEX,YAA0D;AAC1D;;AAEC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,YAAY,GAAG,IAAA;AACtB;AACA;;AAEC,MACD,IAAIC,WAAc,GAAA;QAChB,OAAO,IAAI,CAACD,YAAY;AAC1B;IACA,IAAIC,WAAAA,CAAYC,QAAQ,EAAE;QACxB,IAAI,CAACF,YAAY,GAAGE,QAAAA;AACtB;AACA;;;;;;MAOA,MAAMC,OAAQC,CAAAA,GAAW,EAAEC,OAAAA,GAAkC,EAAE,EAAEC,WAAc,GAAA,WAAW,EAAE;QAC1F,MAAMC,CAAAA,GAAI,IAAI,CAACP,YAAY,GAAG,IAAI,CAACA,YAAY,CAACI,GAAO,CAAA,GAAA,IAAA;QACvD,OAAOG,CAAAA,GACHC,MAAMD,CAAG,EAAA;YACPE,WAAaH,EAAAA,WAAAA,KAAgB,cAAc,aAAgB,GAAA,SAAA;YAC3DD,OAASA,EAAAA;SAEX,CAAA,GAAA,IAAA;AACN;AACF;AACA;;;IAIO,MAAeK,qBAA8BX,SAAAA,UAAAA,CAAAA;AAyBpD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"zabc_loader.js","sources":["../../../../src/asset/loaders/zabc/zabc_loader.ts"],"sourcesContent":["import { base64ToUint8Array, Vector3 } from '@zephyr3d/base';\r\nimport { FixedGeometryCacheTrack } from '../../../animation/fixed_geometry_cache_track';\r\nimport {\r\n PCAGeometryCacheTrack,\r\n type PCAGeometryCacheTrackData\r\n} from '../../../animation/pca_geometry_cache_track';\r\nimport type { AssetSubMeshData } from '../../model';\r\nimport type { VertexBufferInfo } from '@zephyr3d/device';\r\nimport { BoundingBox } from '../../../utility/bounding_volume';\r\nimport type { SceneNode } from '../../../scene/scene_node';\r\nimport type { Mesh } from '../../../scene/mesh';\r\n\r\ntype ZABCBinaryBufferRef = {\r\n offset: number;\r\n length: number;\r\n count?: number;\r\n};\r\n\r\ntype ZABCCacheTrackJSON = {\r\n codec?: 'fixed' | 'pca';\r\n node?: number;\r\n nodePath?: string;\r\n nodeName?: string;\r\n subMeshIndex?: number;\r\n times?: string | ZABCBinaryBufferRef;\r\n sampleRate?: number;\r\n positionFrames: Array<string | ZABCBinaryBufferRef>;\r\n normalFrames?: Array<string | ZABCBinaryBufferRef>;\r\n bounds: [number, number, number, number, number, number][];\r\n vectorLength?: number;\r\n positionReference?: string | ZABCBinaryBufferRef;\r\n positionComponents?: number;\r\n positionMean?: string | ZABCBinaryBufferRef;\r\n positionBases?: string | ZABCBinaryBufferRef;\r\n positionCoefficients?: string | ZABCBinaryBufferRef;\r\n normalComponents?: number;\r\n normalMean?: string | ZABCBinaryBufferRef;\r\n normalBases?: string | ZABCBinaryBufferRef;\r\n normalCoefficients?: string | ZABCBinaryBufferRef;\r\n};\r\n\r\ntype ZABCAnimationJSON = {\r\n name: string;\r\n tracks: ZABCCacheTrackJSON[];\r\n};\r\n\r\ntype ZABCFileJSON = {\r\n version: number;\r\n baseModel?: string;\r\n animations: ZABCAnimationJSON[];\r\n};\r\n\r\nexport type ParsedZABC = {\r\n content: ZABCFileJSON;\r\n binaryPayload: ArrayBuffer | null;\r\n payloadOffset: number;\r\n};\r\n\r\nexport async function parseZABCBlob(data: Blob): Promise<ParsedZABC> {\r\n const arrayBuffer = await data.arrayBuffer();\r\n if (isBinaryZABC(arrayBuffer)) {\r\n return parseBinaryZABC(arrayBuffer);\r\n }\r\n return parseLegacyZABC(arrayBuffer);\r\n}\r\n\r\nexport async function attachZABCAnimationsToSceneNode(\r\n node: SceneNode,\r\n parsed: ParsedZABC,\r\n options?: {\r\n sourcePath?: string;\r\n autoPlay?: boolean;\r\n replaceAnimationNames?: string[];\r\n }\r\n) {\r\n if (options?.replaceAnimationNames) {\r\n for (const name of options.replaceAnimationNames) {\r\n node.animationSet.deleteAnimation(name);\r\n }\r\n }\r\n const addedAnimationNames: string[] = [];\r\n for (const animation of parsed.content.animations ?? []) {\r\n const animationName = buildAnimationName(options?.sourcePath, animation.name ?? 'GeometryCache');\r\n node.animationSet.deleteAnimation(animationName);\r\n const clip = node.animationSet.createAnimation(animationName, true);\r\n if (!clip) {\r\n continue;\r\n }\r\n clip.autoPlay = !!options?.autoPlay;\r\n for (const track of animation.tracks ?? []) {\r\n const targetNode = findTargetNode(node, track);\r\n if (!targetNode) {\r\n console.error(\r\n `zabc track target not found: node=${track.node}, nodePath=${track.nodePath}, nodeName=${track.nodeName}`\r\n );\r\n continue;\r\n }\r\n const targetMesh = await getTargetMesh(targetNode, track, parsed);\r\n if (!targetMesh) {\r\n const subMeshLabel =\r\n typeof track.subMeshIndex === 'number' && track.subMeshIndex >= 0\r\n ? `${track.subMeshIndex}`\r\n : 'auto';\r\n console.error(`zabc target mesh not found: node=${targetNode.name}, subMeshIndex=${subMeshLabel}`);\r\n continue;\r\n }\r\n const assetSubMesh = getTargetAssetSubMesh(node, track);\r\n if (track.codec === 'pca') {\r\n const remapped = assetSubMesh\r\n ? remapPCAGeometryCacheData(assetSubMesh, toPCATrackData(track, parsed))\r\n : await remapPCAGeometryCacheDataForMesh(targetMesh, toPCATrackData(track, parsed));\r\n clip.addTrack(targetMesh, new PCAGeometryCacheTrack(remapped, true));\r\n } else {\r\n const frames = assetSubMesh\r\n ? remapGeometryCacheFrames(\r\n assetSubMesh,\r\n track.positionFrames.map((positionsRef, index) => ({\r\n positions: decodeFloat32Array(positionsRef, parsed),\r\n normals: track.normalFrames?.[index]\r\n ? decodeFloat32Array(track.normalFrames[index], parsed)\r\n : null,\r\n boundingBox: decodeBoundingBox(track.bounds[index])\r\n }))\r\n )\r\n : await remapGeometryCacheFramesForMesh(\r\n targetMesh,\r\n track.positionFrames.map((positionsRef, index) => ({\r\n positions: decodeFloat32Array(positionsRef, parsed),\r\n normals: track.normalFrames?.[index]\r\n ? decodeFloat32Array(track.normalFrames[index], parsed)\r\n : null,\r\n boundingBox: decodeBoundingBox(track.bounds[index])\r\n }))\r\n );\r\n clip.addTrack(targetMesh, new FixedGeometryCacheTrack(decodeTimes(track, parsed), frames, true));\r\n }\r\n }\r\n if (clip.tracks.size > 0) {\r\n addedAnimationNames.push(animationName);\r\n } else {\r\n node.animationSet.deleteAnimation(animationName);\r\n }\r\n }\r\n if (options?.autoPlay) {\r\n for (const animationName of addedAnimationNames) {\r\n node.animationSet.playAnimation(animationName, { repeat: 0 });\r\n }\r\n }\r\n return {\r\n animationNames: addedAnimationNames\r\n };\r\n}\r\n\r\nfunction buildAnimationName(sourcePath: string | undefined, animationName: string) {\r\n const fileName = sourcePath\r\n ? (sourcePath.replace(/\\\\/g, '/').split('/').filter(Boolean).pop() ?? 'cache')\r\n : 'cache';\r\n return `Cache:${fileName}:${animationName}`;\r\n}\r\n\r\nasync function getTargetMesh(node: SceneNode, track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n const directMeshes = collectMeshChildren(node, false);\r\n const candidateMeshes = directMeshes.length > 0 ? directMeshes : collectMeshChildren(node, true);\r\n if (candidateMeshes.length === 0) {\r\n return null;\r\n }\r\n if (typeof track.subMeshIndex === 'number' && track.subMeshIndex >= 0) {\r\n return candidateMeshes[track.subMeshIndex] ?? null;\r\n }\r\n if (candidateMeshes.length === 1) {\r\n return candidateMeshes[0];\r\n }\r\n const sourceVertexCount = getTrackSourceVertexCount(track, parsed);\r\n if (sourceVertexCount > 0) {\r\n const matched: Mesh[] = [];\r\n for (const mesh of candidateMeshes) {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n const targetVertexCount = rawPositions ? (rawPositions.length / 3) >> 0 : -1;\r\n if (targetVertexCount === sourceVertexCount) {\r\n matched.push(mesh);\r\n }\r\n }\r\n if (matched.length === 1) {\r\n return matched[0];\r\n }\r\n if (matched.length > 1) {\r\n console.warn(\r\n `zabc subMesh auto-match is ambiguous under node=${node.name}, matched=${matched.length}, fallback=first`\r\n );\r\n }\r\n }\r\n return candidateMeshes[0];\r\n}\r\n\r\nfunction collectMeshChildren(root: SceneNode, recursive: boolean) {\r\n const meshes: Mesh[] = [];\r\n if (recursive) {\r\n root.iterate((child) => {\r\n if (child !== root && child.isMesh()) {\r\n meshes.push(child);\r\n }\r\n return false;\r\n });\r\n return meshes;\r\n }\r\n for (const child of root.children) {\r\n const sceneNode = child;\r\n if (sceneNode?.isMesh()) {\r\n meshes.push(sceneNode);\r\n }\r\n }\r\n return meshes;\r\n}\r\n\r\nfunction getTrackSourceVertexCount(track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n try {\r\n const first = track.positionFrames?.[0];\r\n if (!first) {\r\n return -1;\r\n }\r\n return (decodeFloat32Array(first, parsed).length / 3) >> 0;\r\n } catch {\r\n return -1;\r\n }\r\n}\r\n\r\nfunction getTargetAssetSubMesh(node: SceneNode, track: ZABCCacheTrackJSON) {\r\n const sharedModel = node.sharedModel;\r\n if (!sharedModel) {\r\n return null;\r\n }\r\n if (typeof track.subMeshIndex !== 'number' || track.subMeshIndex < 0) {\r\n return null;\r\n }\r\n const assetNode = findTargetAssetNode(node, track);\r\n return assetNode?.mesh?.subMeshes?.[track.subMeshIndex] ?? null;\r\n}\r\n\r\nfunction findTargetAssetNode(root: SceneNode, track: ZABCCacheTrackJSON) {\r\n const sharedModel = root.sharedModel;\r\n if (!sharedModel) {\r\n return null;\r\n }\r\n if (track.nodePath) {\r\n for (const candidatePath of getNodePathCandidates(track.nodePath)) {\r\n for (const scene of sharedModel.scenes) {\r\n for (const rootNode of scene.rootNodes) {\r\n const found = findAssetNodeByPath(rootNode, candidatePath);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (track.nodeName) {\r\n for (const candidateName of getNodeNameCandidates(track.nodeName)) {\r\n const found = sharedModel.nodes.find((item) => item?.name === candidateName);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction findAssetNodeByPath(\r\n node: { name: string; children: any[] },\r\n normalizedTrackPath: string,\r\n currentPath = ''\r\n): any {\r\n if (!node) {\r\n return null;\r\n }\r\n const path = currentPath ? `${currentPath}/${node.name || ''}` : node.name || '';\r\n const normalizedCurrent = normalizeNodePath(path);\r\n if (normalizedCurrent === normalizedTrackPath) {\r\n return node;\r\n }\r\n for (const child of node.children) {\r\n const found = findAssetNodeByPath(child, normalizedTrackPath, path);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction findTargetNode(root: SceneNode, track: ZABCCacheTrackJSON) {\r\n const hasExplicitTarget = !!track.nodePath || !!track.nodeName;\r\n if (track.nodePath) {\r\n for (const candidatePath of getNodePathCandidates(track.nodePath)) {\r\n for (const child of root.children) {\r\n const found = findSceneNodeByPath(child, candidatePath);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n }\r\n if (track.nodeName) {\r\n for (const candidateName of getNodeNameCandidates(track.nodeName)) {\r\n const found = root.findNodeByName(candidateName);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n if (hasExplicitTarget) {\r\n console.warn(\r\n `zabc track target fallback to attached node: nodePath=${track.nodePath ?? ''}, nodeName=${track.nodeName ?? ''}`\r\n );\r\n }\r\n return root;\r\n}\r\n\r\nfunction findSceneNodeByPath(\r\n node: SceneNode,\r\n normalizedTrackPath: string,\r\n currentPath = ''\r\n): SceneNode | null {\r\n if (!node || node.isMesh()) {\r\n return null;\r\n }\r\n const path = currentPath ? `${currentPath}/${node.name || ''}` : node.name || '';\r\n const normalizedCurrent = normalizeNodePath(path);\r\n if (normalizedCurrent === normalizedTrackPath) {\r\n return node;\r\n }\r\n for (const child of node.children) {\r\n const found = findSceneNodeByPath(child, normalizedTrackPath, path);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction getNodePathCandidates(path: string) {\r\n const normalized = normalizeNodePath(path);\r\n const candidates = [normalized];\r\n if (normalized.endsWith('Shape')) {\r\n candidates.push(normalized.slice(0, -'Shape'.length));\r\n }\r\n const parts = normalized.split('/');\r\n const last = parts.length > 0 ? parts[parts.length - 1] : '';\r\n if (last.endsWith('Shape') && parts.length > 1) {\r\n parts[parts.length - 1] = last.slice(0, -'Shape'.length);\r\n candidates.push(parts.join('/'));\r\n parts.pop();\r\n candidates.push(parts.join('/'));\r\n }\r\n return candidates.filter((value, index, array) => !!value && array.indexOf(value) === index);\r\n}\r\n\r\nfunction getNodeNameCandidates(name: string) {\r\n const candidates = [name];\r\n if (name.endsWith('Shape')) {\r\n candidates.push(name.slice(0, -'Shape'.length));\r\n }\r\n return candidates.filter((value, index, array) => !!value && array.indexOf(value) === index);\r\n}\r\n\r\nfunction normalizeNodePath(path: string) {\r\n return path.replace(/\\\\/g, '/').split('/').filter(Boolean).join('/');\r\n}\r\n\r\nfunction decodeFloat32Array(data: string | ZABCBinaryBufferRef, parsed: ParsedZABC) {\r\n if (typeof data === 'string') {\r\n const bytes = base64ToUint8Array(data);\r\n return new Float32Array(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength));\r\n }\r\n if (!parsed.binaryPayload) {\r\n throw new Error('Invalid binary zabc file: missing payload');\r\n }\r\n const start = parsed.payloadOffset + data.offset;\r\n const end = start + data.length;\r\n return new Float32Array(parsed.binaryPayload.slice(start, end));\r\n}\r\n\r\nfunction decodeTimes(track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n if (track.times) {\r\n return decodeFloat32Array(track.times, parsed);\r\n }\r\n const sampleRate = track.sampleRate && track.sampleRate > 0 ? track.sampleRate : 30;\r\n const times = new Float32Array(track.positionFrames.length);\r\n for (let i = 0; i < times.length; i++) {\r\n times[i] = i / sampleRate;\r\n }\r\n return times;\r\n}\r\n\r\nfunction decodeBoundingBox(values: [number, number, number, number, number, number]) {\r\n return new BoundingBox(\r\n new Vector3(values[0], values[1], values[2]),\r\n new Vector3(values[3], values[4], values[5])\r\n );\r\n}\r\n\r\nfunction decodePCAFrames(\r\n data: string | ZABCBinaryBufferRef,\r\n rows: number,\r\n columns: number,\r\n parsed: ParsedZABC\r\n) {\r\n const values = decodeFloat32Array(data, parsed);\r\n const result: Float32Array[] = [];\r\n if (rows <= 0 || columns <= 0) {\r\n return result;\r\n }\r\n for (let i = 0; i < rows; i++) {\r\n result.push(values.slice(i * columns, i * columns + columns));\r\n }\r\n return result;\r\n}\r\n\r\nfunction toPCATrackData(track: ZABCCacheTrackJSON, parsed: ParsedZABC): PCAGeometryCacheTrackData {\r\n return {\r\n times: decodeTimes(track, parsed),\r\n bounds: track.bounds ?? [],\r\n positionReference: track.positionReference ? decodeFloat32Array(track.positionReference, parsed) : null,\r\n positionMean: decodeFloat32Array(track.positionMean!, parsed),\r\n positionBases: decodePCAFrames(\r\n track.positionBases!,\r\n track.positionComponents ?? 0,\r\n track.vectorLength ?? 0,\r\n parsed\r\n ),\r\n positionCoefficients: decodePCAFrames(\r\n track.positionCoefficients!,\r\n track.bounds?.length ?? 0,\r\n track.positionComponents ?? 0,\r\n parsed\r\n ),\r\n normalMean: track.normalMean ? decodeFloat32Array(track.normalMean, parsed) : null,\r\n normalBases:\r\n track.normalBases && track.normalComponents\r\n ? decodePCAFrames(track.normalBases, track.normalComponents, track.vectorLength ?? 0, parsed)\r\n : null,\r\n normalCoefficients:\r\n track.normalCoefficients && track.normalComponents\r\n ? decodePCAFrames(track.normalCoefficients, track.bounds?.length ?? 0, track.normalComponents, parsed)\r\n : null\r\n };\r\n}\r\n\r\nfunction parseLegacyZABC(arrayBuffer: ArrayBuffer): ParsedZABC {\r\n const text = new TextDecoder().decode(arrayBuffer);\r\n return {\r\n content: JSON.parse(text) as ZABCFileJSON,\r\n binaryPayload: null,\r\n payloadOffset: 0\r\n };\r\n}\r\n\r\nfunction parseBinaryZABC(arrayBuffer: ArrayBuffer): ParsedZABC {\r\n const view = new DataView(arrayBuffer);\r\n const version = view.getUint32(4, true);\r\n if (version !== 2 && version !== 3) {\r\n throw new Error(`Unsupported binary zabc version: ${version}`);\r\n }\r\n const manifestLength = view.getUint32(8, true);\r\n const manifestOffset = 12;\r\n const payloadOffset = manifestOffset + manifestLength;\r\n const manifestText = new TextDecoder().decode(arrayBuffer.slice(manifestOffset, payloadOffset));\r\n return {\r\n content: JSON.parse(manifestText) as ZABCFileJSON,\r\n binaryPayload: arrayBuffer,\r\n payloadOffset\r\n };\r\n}\r\n\r\nfunction isBinaryZABC(arrayBuffer: ArrayBuffer) {\r\n if (arrayBuffer.byteLength < 12) {\r\n return false;\r\n }\r\n const magic = new Uint8Array(arrayBuffer, 0, 4);\r\n return magic[0] === 0x5a && magic[1] === 0x41 && magic[2] === 0x42 && magic[3] === 0x43;\r\n}\r\n\r\nfunction remapGeometryCacheFrames(\r\n subMesh: AssetSubMeshData,\r\n frames: { positions: Float32Array; normals: Float32Array | null; boundingBox: BoundingBox }[]\r\n) {\r\n if (!subMesh.rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n}\r\n\r\nasync function remapGeometryCacheFramesForMesh(\r\n mesh: Mesh,\r\n frames: { positions: Float32Array; normals: Float32Array | null; boundingBox: BoundingBox }[]\r\n) {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n if (!rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = buildGeometryCacheRemap(rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n}\r\n\r\nfunction remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: PCAGeometryCacheTrackData\r\n): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return track;\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return track;\r\n }\r\n const remap = buildGeometryCacheRemap(subMesh.rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return track;\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: expandGeometryCacheData(remapReference, remap),\r\n positionMean: expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n}\r\n\r\nasync function remapPCAGeometryCacheDataForMesh(\r\n mesh: Mesh,\r\n track: PCAGeometryCacheTrackData\r\n): Promise<PCAGeometryCacheTrackData> {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n const remapReference = track.positionReference ?? reconstructPCAGeometryCacheReference(track);\r\n if (!rawPositions || remapReference.length === 0) {\r\n return track;\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return track;\r\n }\r\n const remap = buildGeometryCacheRemap(rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return track;\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: expandGeometryCacheData(remapReference, remap),\r\n positionMean: expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n}\r\n\r\nasync function getMeshRawPositions(mesh: Mesh) {\r\n const primitive = mesh.primitive;\r\n const info = primitive?.getVertexBufferInfo('position');\r\n if (!primitive || !info) {\r\n return null;\r\n }\r\n const bytes = await info.buffer.getBufferSubData();\r\n return extractPositionArray(bytes, info);\r\n}\r\n\r\nfunction extractPositionArray(bytes: Uint8Array<ArrayBuffer>, info: VertexBufferInfo) {\r\n const componentSize =\r\n ((info.type as unknown as { getSize(): number }).getSize?.() ?? 0) / Math.max(1, info.type.cols);\r\n if (componentSize !== 4) {\r\n return null;\r\n }\r\n const drawOffset = info.drawOffset ?? 0;\r\n const byteOffset = bytes.byteOffset + drawOffset;\r\n const byteLength = bytes.byteLength - drawOffset;\r\n const vertexCount = Math.max(0, Math.floor(byteLength / info.stride));\r\n const positions = new Float32Array(vertexCount * 3);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const base = byteOffset + i * info.stride + info.offset;\r\n const values = new Float32Array(bytes.buffer, base, Math.max(3, info.type.cols));\r\n positions[i * 3] = values[0] ?? 0;\r\n positions[i * 3 + 1] = values[1] ?? 0;\r\n positions[i * 3 + 2] = values[2] ?? 0;\r\n }\r\n return positions;\r\n}\r\n\r\nfunction reconstructPCAGeometryCacheReference(track: PCAGeometryCacheTrackData) {\r\n const reference = new Float32Array(track.positionMean);\r\n const coefficients = track.positionCoefficients[0];\r\n if (!coefficients) {\r\n return reference;\r\n }\r\n const componentCount = Math.min(track.positionBases.length, coefficients.length);\r\n for (let component = 0; component < componentCount; component++) {\r\n const basis = track.positionBases[component];\r\n const coefficient = coefficients[component];\r\n if (!basis || coefficient === 0) {\r\n continue;\r\n }\r\n const count = Math.min(reference.length, basis.length);\r\n for (let i = 0; i < count; i++) {\r\n reference[i] += basis[i] * coefficient;\r\n }\r\n }\r\n return reference;\r\n}\r\n\r\nfunction buildGeometryCacheRemap(targetPositions: Float32Array, sourcePositions: Float32Array) {\r\n const sourceCount = (sourcePositions.length / 3) >> 0;\r\n const targetCount = (targetPositions.length / 3) >> 0;\r\n const buckets = new Map<string, number[]>();\r\n for (let i = 0; i < sourceCount; i++) {\r\n const key = geometryCachePositionKey(\r\n sourcePositions[i * 3],\r\n sourcePositions[i * 3 + 1],\r\n sourcePositions[i * 3 + 2]\r\n );\r\n const bucket = buckets.get(key);\r\n if (bucket) {\r\n bucket.push(i);\r\n } else {\r\n buckets.set(key, [i]);\r\n }\r\n }\r\n const remap = new Uint32Array(targetCount);\r\n for (let i = 0; i < targetCount; i++) {\r\n const x = targetPositions[i * 3];\r\n const y = targetPositions[i * 3 + 1];\r\n const z = targetPositions[i * 3 + 2];\r\n let sourceIndex = findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);\r\n }\r\n if (sourceIndex < 0) {\r\n return null;\r\n }\r\n remap[i] = sourceIndex;\r\n }\r\n return remap;\r\n}\r\n\r\nfunction expandGeometryCacheData(source: Float32Array, remap: Uint32Array) {\r\n const expanded = new Float32Array(remap.length * 3);\r\n for (let i = 0; i < remap.length; i++) {\r\n const sourceOffset = remap[i] * 3;\r\n const targetOffset = i * 3;\r\n expanded[targetOffset] = source[sourceOffset];\r\n expanded[targetOffset + 1] = source[sourceOffset + 1];\r\n expanded[targetOffset + 2] = source[sourceOffset + 2];\r\n }\r\n return expanded;\r\n}\r\n\r\nfunction findGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n buckets: Map<string, number[]>,\r\n x: number,\r\n y: number,\r\n z: number\r\n) {\r\n const bucket = buckets.get(geometryCachePositionKey(x, y, z));\r\n if (!bucket) {\r\n return -1;\r\n }\r\n const epsilon = 1e-5;\r\n for (const index of bucket) {\r\n const offset = index * 3;\r\n if (\r\n Math.abs(sourcePositions[offset] - x) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 1] - y) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 2] - z) <= epsilon\r\n ) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction findNearestGeometryCacheSourceIndex(sourcePositions: Float32Array, x: number, y: number, z: number) {\r\n const epsilonSquared = 1e-8;\r\n let bestIndex = -1;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n for (let i = 0; i < sourcePositions.length; i += 3) {\r\n const dx = sourcePositions[i] - x;\r\n const dy = sourcePositions[i + 1] - y;\r\n const dz = sourcePositions[i + 2] - z;\r\n const distance = dx * dx + dy * dy + dz * dz;\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestIndex = i / 3;\r\n }\r\n }\r\n return bestDistance <= epsilonSquared ? bestIndex : -1;\r\n}\r\n\r\nfunction geometryCachePositionKey(x: number, y: number, z: number) {\r\n return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;\r\n}\r\n"],"names":["parseZABCBlob","data","arrayBuffer","isBinaryZABC","parseBinaryZABC","parseLegacyZABC","attachZABCAnimationsToSceneNode","node","parsed","options","replaceAnimationNames","name","animationSet","deleteAnimation","addedAnimationNames","animation","content","animations","animationName","buildAnimationName","sourcePath","clip","createAnimation","autoPlay","track","tracks","targetNode","findTargetNode","console","error","nodePath","nodeName","targetMesh","getTargetMesh","subMeshLabel","subMeshIndex","assetSubMesh","getTargetAssetSubMesh","codec","remapped","remapPCAGeometryCacheData","toPCATrackData","remapPCAGeometryCacheDataForMesh","addTrack","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","positionFrames","map","positionsRef","index","positions","decodeFloat32Array","normals","normalFrames","boundingBox","decodeBoundingBox","bounds","remapGeometryCacheFramesForMesh","FixedGeometryCacheTrack","decodeTimes","size","push","playAnimation","repeat","animationNames","fileName","replace","split","filter","Boolean","pop","directMeshes","collectMeshChildren","candidateMeshes","length","sourceVertexCount","getTrackSourceVertexCount","matched","mesh","rawPositions","getMeshRawPositions","targetVertexCount","warn","root","recursive","meshes","iterate","child","isMesh","children","sceneNode","first","sharedModel","assetNode","findTargetAssetNode","subMeshes","candidatePath","getNodePathCandidates","scene","scenes","rootNode","rootNodes","found","findAssetNodeByPath","candidateName","getNodeNameCandidates","nodes","find","item","normalizedTrackPath","currentPath","path","normalizedCurrent","normalizeNodePath","hasExplicitTarget","findSceneNodeByPath","findNodeByName","normalized","candidates","endsWith","slice","parts","last","join","value","array","indexOf","bytes","base64ToUint8Array","Float32Array","buffer","byteOffset","byteLength","binaryPayload","Error","start","payloadOffset","offset","end","times","sampleRate","i","values","BoundingBox","Vector3","decodePCAFrames","rows","columns","result","positionReference","positionMean","positionBases","positionComponents","vectorLength","positionCoefficients","normalMean","normalBases","normalComponents","normalCoefficients","text","TextDecoder","decode","JSON","parse","view","DataView","version","getUint32","manifestLength","manifestOffset","manifestText","magic","Uint8Array","subMesh","sourcePositions","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","remapReference","reconstructPCAGeometryCacheReference","basis","primitive","info","getVertexBufferInfo","getBufferSubData","extractPositionArray","componentSize","type","getSize","Math","max","cols","drawOffset","vertexCount","floor","stride","base","reference","coefficients","componentCount","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","Map","key","geometryCachePositionKey","bucket","get","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round"],"mappings":"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"}
1
+ {"version":3,"file":"zabc_loader.js","sources":["../../../../src/asset/loaders/zabc/zabc_loader.ts"],"sourcesContent":["import { base64ToUint8Array, Vector3 } from '@zephyr3d/base';\r\nimport { FixedGeometryCacheTrack } from '../../../animation/fixed_geometry_cache_track';\r\nimport {\r\n PCAGeometryCacheTrack,\r\n type PCAGeometryCacheTrackData\r\n} from '../../../animation/pca_geometry_cache_track';\r\nimport type { VertexBufferInfo } from '@zephyr3d/device';\r\nimport { BoundingBox } from '../../../utility/bounding_volume';\r\nimport type { SceneNode } from '../../../scene/scene_node';\r\nimport type { Mesh } from '../../../scene/mesh';\r\nimport type { AssetSubMeshData } from '../../model';\r\n\r\ntype ZABCBinaryBufferRef = {\r\n offset: number;\r\n length: number;\r\n count?: number;\r\n};\r\n\r\ntype ZABCCacheTrackJSON = {\r\n codec?: 'fixed' | 'pca';\r\n node?: number;\r\n nodePath?: string;\r\n nodeName?: string;\r\n subMeshIndex?: number;\r\n times?: string | ZABCBinaryBufferRef;\r\n sampleRate?: number;\r\n positionFrames: Array<string | ZABCBinaryBufferRef>;\r\n normalFrames?: Array<string | ZABCBinaryBufferRef>;\r\n bounds: [number, number, number, number, number, number][];\r\n vectorLength?: number;\r\n positionReference?: string | ZABCBinaryBufferRef;\r\n positionComponents?: number;\r\n positionMean?: string | ZABCBinaryBufferRef;\r\n positionBases?: string | ZABCBinaryBufferRef;\r\n positionCoefficients?: string | ZABCBinaryBufferRef;\r\n normalComponents?: number;\r\n normalMean?: string | ZABCBinaryBufferRef;\r\n normalBases?: string | ZABCBinaryBufferRef;\r\n normalCoefficients?: string | ZABCBinaryBufferRef;\r\n};\r\n\r\ntype ZABCAnimationJSON = {\r\n name: string;\r\n tracks: ZABCCacheTrackJSON[];\r\n};\r\n\r\ntype ZABCFileJSON = {\r\n version: number;\r\n baseModel?: string;\r\n animations: ZABCAnimationJSON[];\r\n};\r\n\r\nexport type ParsedZABC = {\r\n content: ZABCFileJSON;\r\n binaryPayload: ArrayBuffer | null;\r\n payloadOffset: number;\r\n};\r\n\r\nexport async function parseZABCBlob(data: Blob): Promise<ParsedZABC> {\r\n const arrayBuffer = await data.arrayBuffer();\r\n if (isBinaryZABC(arrayBuffer)) {\r\n return parseBinaryZABC(arrayBuffer);\r\n }\r\n return parseLegacyZABC(arrayBuffer);\r\n}\r\n\r\nexport async function attachZABCAnimationsToSceneNode(\r\n node: SceneNode,\r\n parsed: ParsedZABC,\r\n options?: {\r\n sourcePath?: string;\r\n autoPlay?: boolean;\r\n replaceAnimationNames?: string[];\r\n }\r\n) {\r\n if (options?.replaceAnimationNames) {\r\n for (const name of options.replaceAnimationNames) {\r\n node.animationSet.deleteAnimation(name);\r\n }\r\n }\r\n const addedAnimationNames: string[] = [];\r\n for (const animation of parsed.content.animations ?? []) {\r\n const animationName = buildAnimationName(options?.sourcePath, animation.name ?? 'GeometryCache');\r\n node.animationSet.deleteAnimation(animationName);\r\n const clip = node.animationSet.createAnimation(animationName, true);\r\n if (!clip) {\r\n continue;\r\n }\r\n clip.autoPlay = !!options?.autoPlay;\r\n for (const track of animation.tracks ?? []) {\r\n const targetNode = findTargetNode(node, track);\r\n if (!targetNode) {\r\n console.error(\r\n `zabc track target not found: node=${track.node}, nodePath=${track.nodePath}, nodeName=${track.nodeName}`\r\n );\r\n continue;\r\n }\r\n const targetMesh = await getTargetMesh(targetNode, track, parsed);\r\n if (!targetMesh) {\r\n const subMeshLabel =\r\n typeof track.subMeshIndex === 'number' && track.subMeshIndex >= 0\r\n ? `${track.subMeshIndex}`\r\n : 'auto';\r\n console.error(`zabc target mesh not found: node=${targetNode.name}, subMeshIndex=${subMeshLabel}`);\r\n continue;\r\n }\r\n const assetSubMesh = getTargetAssetSubMesh(node, track);\r\n if (track.codec === 'pca') {\r\n const remapped = assetSubMesh\r\n ? remapPCAGeometryCacheData(assetSubMesh, toPCATrackData(track, parsed))\r\n : await remapPCAGeometryCacheDataForMesh(targetMesh, toPCATrackData(track, parsed));\r\n clip.addTrack(targetMesh, new PCAGeometryCacheTrack(remapped, true));\r\n } else {\r\n const frames = assetSubMesh\r\n ? remapGeometryCacheFrames(\r\n assetSubMesh,\r\n track.positionFrames.map((positionsRef, index) => ({\r\n positions: decodeFloat32Array(positionsRef, parsed),\r\n normals: track.normalFrames?.[index]\r\n ? decodeFloat32Array(track.normalFrames[index], parsed)\r\n : null,\r\n boundingBox: decodeBoundingBox(track.bounds[index])\r\n }))\r\n )\r\n : await remapGeometryCacheFramesForMesh(\r\n targetMesh,\r\n track.positionFrames.map((positionsRef, index) => ({\r\n positions: decodeFloat32Array(positionsRef, parsed),\r\n normals: track.normalFrames?.[index]\r\n ? decodeFloat32Array(track.normalFrames[index], parsed)\r\n : null,\r\n boundingBox: decodeBoundingBox(track.bounds[index])\r\n }))\r\n );\r\n clip.addTrack(targetMesh, new FixedGeometryCacheTrack(decodeTimes(track, parsed), frames, true));\r\n }\r\n }\r\n if (clip.tracks.size > 0) {\r\n addedAnimationNames.push(animationName);\r\n } else {\r\n node.animationSet.deleteAnimation(animationName);\r\n }\r\n }\r\n if (options?.autoPlay) {\r\n for (const animationName of addedAnimationNames) {\r\n node.animationSet.playAnimation(animationName, { repeat: 0 });\r\n }\r\n }\r\n return {\r\n animationNames: addedAnimationNames\r\n };\r\n}\r\n\r\nfunction buildAnimationName(sourcePath: string | undefined, animationName: string) {\r\n const fileName = sourcePath\r\n ? (sourcePath.replace(/\\\\/g, '/').split('/').filter(Boolean).pop() ?? 'cache')\r\n : 'cache';\r\n return `Cache:${fileName}:${animationName}`;\r\n}\r\n\r\nasync function getTargetMesh(node: SceneNode, track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n const directMeshes = collectMeshChildren(node, false);\r\n const candidateMeshes = directMeshes.length > 0 ? directMeshes : collectMeshChildren(node, true);\r\n if (candidateMeshes.length === 0) {\r\n return null;\r\n }\r\n if (typeof track.subMeshIndex === 'number' && track.subMeshIndex >= 0) {\r\n return candidateMeshes[track.subMeshIndex] ?? null;\r\n }\r\n if (candidateMeshes.length === 1) {\r\n return candidateMeshes[0];\r\n }\r\n const sourceVertexCount = getTrackSourceVertexCount(track, parsed);\r\n if (sourceVertexCount > 0) {\r\n const matched: Mesh[] = [];\r\n for (const mesh of candidateMeshes) {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n const targetVertexCount = rawPositions ? (rawPositions.length / 3) >> 0 : -1;\r\n if (targetVertexCount === sourceVertexCount) {\r\n matched.push(mesh);\r\n }\r\n }\r\n if (matched.length === 1) {\r\n return matched[0];\r\n }\r\n if (matched.length > 1) {\r\n console.warn(\r\n `zabc subMesh auto-match is ambiguous under node=${node.name}, matched=${matched.length}, fallback=first`\r\n );\r\n }\r\n }\r\n return candidateMeshes[0];\r\n}\r\n\r\nfunction collectMeshChildren(root: SceneNode, recursive: boolean) {\r\n const meshes: Mesh[] = [];\r\n if (recursive) {\r\n root.iterate((child) => {\r\n if (child !== root && child.isMesh()) {\r\n meshes.push(child);\r\n }\r\n return false;\r\n });\r\n return meshes;\r\n }\r\n for (const child of root.children) {\r\n const sceneNode = child;\r\n if (sceneNode?.isMesh()) {\r\n meshes.push(sceneNode);\r\n }\r\n }\r\n return meshes;\r\n}\r\n\r\nfunction getTrackSourceVertexCount(track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n try {\r\n const first = track.positionFrames?.[0];\r\n if (!first) {\r\n return -1;\r\n }\r\n return (decodeFloat32Array(first, parsed).length / 3) >> 0;\r\n } catch {\r\n return -1;\r\n }\r\n}\r\n\r\nfunction getTargetAssetSubMesh(node: SceneNode, track: ZABCCacheTrackJSON) {\r\n const sharedModel = node.sharedModel;\r\n if (!sharedModel) {\r\n return null;\r\n }\r\n if (typeof track.subMeshIndex !== 'number' || track.subMeshIndex < 0) {\r\n return null;\r\n }\r\n const assetNode = findTargetAssetNode(node, track);\r\n return assetNode?.mesh?.subMeshes?.[track.subMeshIndex] ?? null;\r\n}\r\n\r\nfunction findTargetAssetNode(root: SceneNode, track: ZABCCacheTrackJSON) {\r\n const sharedModel = root.sharedModel;\r\n if (!sharedModel) {\r\n return null;\r\n }\r\n if (track.nodePath) {\r\n for (const candidatePath of getNodePathCandidates(track.nodePath)) {\r\n for (const scene of sharedModel.scenes) {\r\n for (const rootNode of scene.rootNodes) {\r\n const found = findAssetNodeByPath(rootNode, candidatePath);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (track.nodeName) {\r\n for (const candidateName of getNodeNameCandidates(track.nodeName)) {\r\n const found = sharedModel.nodes.find((item) => item?.name === candidateName);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction findAssetNodeByPath(\r\n node: { name: string; children: any[] },\r\n normalizedTrackPath: string,\r\n currentPath = ''\r\n): any {\r\n if (!node) {\r\n return null;\r\n }\r\n const path = currentPath ? `${currentPath}/${node.name || ''}` : node.name || '';\r\n const normalizedCurrent = normalizeNodePath(path);\r\n if (normalizedCurrent === normalizedTrackPath) {\r\n return node;\r\n }\r\n for (const child of node.children) {\r\n const found = findAssetNodeByPath(child, normalizedTrackPath, path);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction findTargetNode(root: SceneNode, track: ZABCCacheTrackJSON) {\r\n const hasExplicitTarget = !!track.nodePath || !!track.nodeName;\r\n if (track.nodePath) {\r\n for (const candidatePath of getNodePathCandidates(track.nodePath)) {\r\n for (const child of root.children) {\r\n const found = findSceneNodeByPath(child, candidatePath);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n }\r\n if (track.nodeName) {\r\n for (const candidateName of getNodeNameCandidates(track.nodeName)) {\r\n const found = root.findNodeByName(candidateName);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n }\r\n if (hasExplicitTarget) {\r\n console.warn(\r\n `zabc track target fallback to attached node: nodePath=${track.nodePath ?? ''}, nodeName=${track.nodeName ?? ''}`\r\n );\r\n }\r\n return root;\r\n}\r\n\r\nfunction findSceneNodeByPath(\r\n node: SceneNode,\r\n normalizedTrackPath: string,\r\n currentPath = ''\r\n): SceneNode | null {\r\n if (!node || node.isMesh()) {\r\n return null;\r\n }\r\n const path = currentPath ? `${currentPath}/${node.name || ''}` : node.name || '';\r\n const normalizedCurrent = normalizeNodePath(path);\r\n if (normalizedCurrent === normalizedTrackPath) {\r\n return node;\r\n }\r\n for (const child of node.children) {\r\n const found = findSceneNodeByPath(child, normalizedTrackPath, path);\r\n if (found) {\r\n return found;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nfunction getNodePathCandidates(path: string) {\r\n const normalized = normalizeNodePath(path);\r\n const candidates = [normalized];\r\n if (normalized.endsWith('Shape')) {\r\n candidates.push(normalized.slice(0, -'Shape'.length));\r\n }\r\n const parts = normalized.split('/');\r\n const last = parts.length > 0 ? parts[parts.length - 1] : '';\r\n if (last.endsWith('Shape') && parts.length > 1) {\r\n parts[parts.length - 1] = last.slice(0, -'Shape'.length);\r\n candidates.push(parts.join('/'));\r\n parts.pop();\r\n candidates.push(parts.join('/'));\r\n }\r\n return candidates.filter((value, index, array) => !!value && array.indexOf(value) === index);\r\n}\r\n\r\nfunction getNodeNameCandidates(name: string) {\r\n const candidates = [name];\r\n if (name.endsWith('Shape')) {\r\n candidates.push(name.slice(0, -'Shape'.length));\r\n }\r\n return candidates.filter((value, index, array) => !!value && array.indexOf(value) === index);\r\n}\r\n\r\nfunction normalizeNodePath(path: string) {\r\n return path.replace(/\\\\/g, '/').split('/').filter(Boolean).join('/');\r\n}\r\n\r\nfunction decodeFloat32Array(data: string | ZABCBinaryBufferRef, parsed: ParsedZABC) {\r\n if (typeof data === 'string') {\r\n const bytes = base64ToUint8Array(data);\r\n return new Float32Array(bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength));\r\n }\r\n if (!parsed.binaryPayload) {\r\n throw new Error('Invalid binary zabc file: missing payload');\r\n }\r\n const start = parsed.payloadOffset + data.offset;\r\n const end = start + data.length;\r\n return new Float32Array(parsed.binaryPayload.slice(start, end));\r\n}\r\n\r\nfunction decodeTimes(track: ZABCCacheTrackJSON, parsed: ParsedZABC) {\r\n if (track.times) {\r\n return decodeFloat32Array(track.times, parsed);\r\n }\r\n const sampleRate = track.sampleRate && track.sampleRate > 0 ? track.sampleRate : 30;\r\n const times = new Float32Array(track.positionFrames.length);\r\n for (let i = 0; i < times.length; i++) {\r\n times[i] = i / sampleRate;\r\n }\r\n return times;\r\n}\r\n\r\nfunction decodeBoundingBox(values: [number, number, number, number, number, number]) {\r\n return new BoundingBox(\r\n new Vector3(values[0], values[1], values[2]),\r\n new Vector3(values[3], values[4], values[5])\r\n );\r\n}\r\n\r\nfunction decodePCAFrames(\r\n data: string | ZABCBinaryBufferRef,\r\n rows: number,\r\n columns: number,\r\n parsed: ParsedZABC\r\n) {\r\n const values = decodeFloat32Array(data, parsed);\r\n const result: Float32Array[] = [];\r\n if (rows <= 0 || columns <= 0) {\r\n return result;\r\n }\r\n for (let i = 0; i < rows; i++) {\r\n result.push(values.slice(i * columns, i * columns + columns));\r\n }\r\n return result;\r\n}\r\n\r\nfunction toPCATrackData(track: ZABCCacheTrackJSON, parsed: ParsedZABC): PCAGeometryCacheTrackData {\r\n return {\r\n times: decodeTimes(track, parsed),\r\n bounds: track.bounds ?? [],\r\n positionReference: track.positionReference ? decodeFloat32Array(track.positionReference, parsed) : null,\r\n positionMean: decodeFloat32Array(track.positionMean!, parsed),\r\n positionBases: decodePCAFrames(\r\n track.positionBases!,\r\n track.positionComponents ?? 0,\r\n track.vectorLength ?? 0,\r\n parsed\r\n ),\r\n positionCoefficients: decodePCAFrames(\r\n track.positionCoefficients!,\r\n track.bounds?.length ?? 0,\r\n track.positionComponents ?? 0,\r\n parsed\r\n ),\r\n normalMean: track.normalMean ? decodeFloat32Array(track.normalMean, parsed) : null,\r\n normalBases:\r\n track.normalBases && track.normalComponents\r\n ? decodePCAFrames(track.normalBases, track.normalComponents, track.vectorLength ?? 0, parsed)\r\n : null,\r\n normalCoefficients:\r\n track.normalCoefficients && track.normalComponents\r\n ? decodePCAFrames(track.normalCoefficients, track.bounds?.length ?? 0, track.normalComponents, parsed)\r\n : null\r\n };\r\n}\r\n\r\nfunction parseLegacyZABC(arrayBuffer: ArrayBuffer): ParsedZABC {\r\n const text = new TextDecoder().decode(arrayBuffer);\r\n return {\r\n content: JSON.parse(text) as ZABCFileJSON,\r\n binaryPayload: null,\r\n payloadOffset: 0\r\n };\r\n}\r\n\r\nfunction parseBinaryZABC(arrayBuffer: ArrayBuffer): ParsedZABC {\r\n const view = new DataView(arrayBuffer);\r\n const version = view.getUint32(4, true);\r\n if (version !== 2 && version !== 3) {\r\n throw new Error(`Unsupported binary zabc version: ${version}`);\r\n }\r\n const manifestLength = view.getUint32(8, true);\r\n const manifestOffset = 12;\r\n const payloadOffset = manifestOffset + manifestLength;\r\n const manifestText = new TextDecoder().decode(arrayBuffer.slice(manifestOffset, payloadOffset));\r\n return {\r\n content: JSON.parse(manifestText) as ZABCFileJSON,\r\n binaryPayload: arrayBuffer,\r\n payloadOffset\r\n };\r\n}\r\n\r\nfunction isBinaryZABC(arrayBuffer: ArrayBuffer) {\r\n if (arrayBuffer.byteLength < 12) {\r\n return false;\r\n }\r\n const magic = new Uint8Array(arrayBuffer, 0, 4);\r\n return magic[0] === 0x5a && magic[1] === 0x41 && magic[2] === 0x42 && magic[3] === 0x43;\r\n}\r\n\r\nfunction remapGeometryCacheFrames(\r\n subMesh: AssetSubMeshData,\r\n frames: { positions: Float32Array; normals: Float32Array | null; boundingBox: BoundingBox }[]\r\n) {\r\n if (!subMesh.rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n}\r\n\r\nasync function remapGeometryCacheFramesForMesh(\r\n mesh: Mesh,\r\n frames: { positions: Float32Array; normals: Float32Array | null; boundingBox: BoundingBox }[]\r\n) {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n if (!rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = buildGeometryCacheRemap(rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n}\r\n\r\nfunction remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: PCAGeometryCacheTrackData\r\n): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return track;\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return track;\r\n }\r\n const remap = buildGeometryCacheRemap(subMesh.rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return track;\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: expandGeometryCacheData(remapReference, remap),\r\n positionMean: expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n}\r\n\r\nasync function remapPCAGeometryCacheDataForMesh(\r\n mesh: Mesh,\r\n track: PCAGeometryCacheTrackData\r\n): Promise<PCAGeometryCacheTrackData> {\r\n const rawPositions = await getMeshRawPositions(mesh);\r\n const remapReference = track.positionReference ?? reconstructPCAGeometryCacheReference(track);\r\n if (!rawPositions || remapReference.length === 0) {\r\n return track;\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return track;\r\n }\r\n const remap = buildGeometryCacheRemap(rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return track;\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: expandGeometryCacheData(remapReference, remap),\r\n positionMean: expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n}\r\n\r\nasync function getMeshRawPositions(mesh: Mesh) {\r\n const primitive = mesh.primitive;\r\n const info = primitive?.getVertexBufferInfo('position');\r\n if (!primitive || !info) {\r\n return null;\r\n }\r\n const bytes = await info.buffer.getBufferSubData();\r\n return extractPositionArray(bytes, info);\r\n}\r\n\r\nfunction extractPositionArray(bytes: Uint8Array<ArrayBuffer>, info: VertexBufferInfo) {\r\n const componentSize =\r\n ((info.type as unknown as { getSize(): number }).getSize?.() ?? 0) / Math.max(1, info.type.cols);\r\n if (componentSize !== 4) {\r\n return null;\r\n }\r\n const drawOffset = info.drawOffset ?? 0;\r\n const byteOffset = bytes.byteOffset + drawOffset;\r\n const byteLength = bytes.byteLength - drawOffset;\r\n const vertexCount = Math.max(0, Math.floor(byteLength / info.stride));\r\n const positions = new Float32Array(vertexCount * 3);\r\n for (let i = 0; i < vertexCount; i++) {\r\n const base = byteOffset + i * info.stride + info.offset;\r\n const values = new Float32Array(bytes.buffer, base, Math.max(3, info.type.cols));\r\n positions[i * 3] = values[0] ?? 0;\r\n positions[i * 3 + 1] = values[1] ?? 0;\r\n positions[i * 3 + 2] = values[2] ?? 0;\r\n }\r\n return positions;\r\n}\r\n\r\nfunction reconstructPCAGeometryCacheReference(track: PCAGeometryCacheTrackData) {\r\n const reference = new Float32Array(track.positionMean);\r\n const coefficients = track.positionCoefficients[0];\r\n if (!coefficients) {\r\n return reference;\r\n }\r\n const componentCount = Math.min(track.positionBases.length, coefficients.length);\r\n for (let component = 0; component < componentCount; component++) {\r\n const basis = track.positionBases[component];\r\n const coefficient = coefficients[component];\r\n if (!basis || coefficient === 0) {\r\n continue;\r\n }\r\n const count = Math.min(reference.length, basis.length);\r\n for (let i = 0; i < count; i++) {\r\n reference[i] += basis[i] * coefficient;\r\n }\r\n }\r\n return reference;\r\n}\r\n\r\nfunction buildGeometryCacheRemap(targetPositions: Float32Array, sourcePositions: Float32Array) {\r\n const sourceCount = (sourcePositions.length / 3) >> 0;\r\n const targetCount = (targetPositions.length / 3) >> 0;\r\n const buckets = new Map<string, number[]>();\r\n for (let i = 0; i < sourceCount; i++) {\r\n const key = geometryCachePositionKey(\r\n sourcePositions[i * 3],\r\n sourcePositions[i * 3 + 1],\r\n sourcePositions[i * 3 + 2]\r\n );\r\n const bucket = buckets.get(key);\r\n if (bucket) {\r\n bucket.push(i);\r\n } else {\r\n buckets.set(key, [i]);\r\n }\r\n }\r\n const remap = new Uint32Array(targetCount);\r\n for (let i = 0; i < targetCount; i++) {\r\n const x = targetPositions[i * 3];\r\n const y = targetPositions[i * 3 + 1];\r\n const z = targetPositions[i * 3 + 2];\r\n let sourceIndex = findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);\r\n }\r\n if (sourceIndex < 0) {\r\n return null;\r\n }\r\n remap[i] = sourceIndex;\r\n }\r\n return remap;\r\n}\r\n\r\nfunction expandGeometryCacheData(source: Float32Array, remap: Uint32Array) {\r\n const expanded = new Float32Array(remap.length * 3);\r\n for (let i = 0; i < remap.length; i++) {\r\n const sourceOffset = remap[i] * 3;\r\n const targetOffset = i * 3;\r\n expanded[targetOffset] = source[sourceOffset];\r\n expanded[targetOffset + 1] = source[sourceOffset + 1];\r\n expanded[targetOffset + 2] = source[sourceOffset + 2];\r\n }\r\n return expanded;\r\n}\r\n\r\nfunction findGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n buckets: Map<string, number[]>,\r\n x: number,\r\n y: number,\r\n z: number\r\n) {\r\n const bucket = buckets.get(geometryCachePositionKey(x, y, z));\r\n if (!bucket) {\r\n return -1;\r\n }\r\n const epsilon = 1e-5;\r\n for (const index of bucket) {\r\n const offset = index * 3;\r\n if (\r\n Math.abs(sourcePositions[offset] - x) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 1] - y) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 2] - z) <= epsilon\r\n ) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n}\r\n\r\nfunction findNearestGeometryCacheSourceIndex(sourcePositions: Float32Array, x: number, y: number, z: number) {\r\n const epsilonSquared = 1e-8;\r\n let bestIndex = -1;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n for (let i = 0; i < sourcePositions.length; i += 3) {\r\n const dx = sourcePositions[i] - x;\r\n const dy = sourcePositions[i + 1] - y;\r\n const dz = sourcePositions[i + 2] - z;\r\n const distance = dx * dx + dy * dy + dz * dz;\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestIndex = i / 3;\r\n }\r\n }\r\n return bestDistance <= epsilonSquared ? bestIndex : -1;\r\n}\r\n\r\nfunction geometryCachePositionKey(x: number, y: number, z: number) {\r\n return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;\r\n}\r\n"],"names":["parseZABCBlob","data","arrayBuffer","isBinaryZABC","parseBinaryZABC","parseLegacyZABC","attachZABCAnimationsToSceneNode","node","parsed","options","replaceAnimationNames","name","animationSet","deleteAnimation","addedAnimationNames","animation","content","animations","animationName","buildAnimationName","sourcePath","clip","createAnimation","autoPlay","track","tracks","targetNode","findTargetNode","console","error","nodePath","nodeName","targetMesh","getTargetMesh","subMeshLabel","subMeshIndex","assetSubMesh","getTargetAssetSubMesh","codec","remapped","remapPCAGeometryCacheData","toPCATrackData","remapPCAGeometryCacheDataForMesh","addTrack","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","positionFrames","map","positionsRef","index","positions","decodeFloat32Array","normals","normalFrames","boundingBox","decodeBoundingBox","bounds","remapGeometryCacheFramesForMesh","FixedGeometryCacheTrack","decodeTimes","size","push","playAnimation","repeat","animationNames","fileName","replace","split","filter","Boolean","pop","directMeshes","collectMeshChildren","candidateMeshes","length","sourceVertexCount","getTrackSourceVertexCount","matched","mesh","rawPositions","getMeshRawPositions","targetVertexCount","warn","root","recursive","meshes","iterate","child","isMesh","children","sceneNode","first","sharedModel","assetNode","findTargetAssetNode","subMeshes","candidatePath","getNodePathCandidates","scene","scenes","rootNode","rootNodes","found","findAssetNodeByPath","candidateName","getNodeNameCandidates","nodes","find","item","normalizedTrackPath","currentPath","path","normalizedCurrent","normalizeNodePath","hasExplicitTarget","findSceneNodeByPath","findNodeByName","normalized","candidates","endsWith","slice","parts","last","join","value","array","indexOf","bytes","base64ToUint8Array","Float32Array","buffer","byteOffset","byteLength","binaryPayload","Error","start","payloadOffset","offset","end","times","sampleRate","i","values","BoundingBox","Vector3","decodePCAFrames","rows","columns","result","positionReference","positionMean","positionBases","positionComponents","vectorLength","positionCoefficients","normalMean","normalBases","normalComponents","normalCoefficients","text","TextDecoder","decode","JSON","parse","view","DataView","version","getUint32","manifestLength","manifestOffset","manifestText","magic","Uint8Array","subMesh","sourcePositions","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","remapReference","reconstructPCAGeometryCacheReference","basis","primitive","info","getVertexBufferInfo","getBufferSubData","extractPositionArray","componentSize","type","getSize","Math","max","cols","drawOffset","vertexCount","floor","stride","base","reference","coefficients","componentCount","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","Map","key","geometryCachePositionKey","bucket","get","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round"],"mappings":"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"}