@carbonenginejs/runtime-resource 0.1.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/FORMAT-PROVENANCE.md +155 -135
  2. package/LICENSE +21 -21
  3. package/NOTICE +29 -29
  4. package/README.md +548 -241
  5. package/dist/CjsMotherLode.js +1271 -56
  6. package/dist/CjsMotherLode.js.map +1 -1
  7. package/dist/CjsResMan.js +3005 -740
  8. package/dist/CjsResMan.js.map +1 -1
  9. package/dist/CjsResManQueue.js +214 -214
  10. package/dist/CjsResource.js +566 -366
  11. package/dist/CjsResource.js.map +1 -1
  12. package/dist/CjsResourceSource.js +59 -59
  13. package/dist/_virtual/_rollupPluginBabelHelpers.js +153 -153
  14. package/dist/format/CjsBlueReader.js +269 -0
  15. package/dist/format/CjsBlueReader.js.map +1 -0
  16. package/dist/format/CjsFormat.js +192 -178
  17. package/dist/format/CjsFormat.js.map +1 -1
  18. package/dist/format/CjsReader.js +18 -0
  19. package/dist/format/CjsReader.js.map +1 -0
  20. package/dist/format/CjsResourceProbe.js +277 -269
  21. package/dist/format/CjsResourceProbe.js.map +1 -1
  22. package/dist/format/payloadContract.js +173 -173
  23. package/dist/formats/black/CjsBlackFormat.js +278 -272
  24. package/dist/formats/black/CjsBlackFormat.js.map +1 -1
  25. package/dist/formats/black/core/CjsBlackBinaryReader.js +153 -153
  26. package/dist/formats/black/core/CjsBlackPropertyReaders.js +382 -382
  27. package/dist/formats/black/core/CjsBlackReader.js +639 -760
  28. package/dist/formats/black/core/CjsBlackReader.js.map +1 -1
  29. package/dist/formats/black/core/CjsBlackSchemaRegistry.js +433 -433
  30. package/dist/formats/black/core/black-schema-v1-2026-07-11.json.js +4 -4
  31. package/dist/formats/black/core/blackConstants.js +7 -7
  32. package/dist/formats/black/core/blackDefinitions.js +10 -10
  33. package/dist/formats/black/core/blackEnums.js +6 -6
  34. package/dist/formats/black/core/blackSchema.js +3 -3
  35. package/dist/formats/black/core/blackVersion.js +22 -22
  36. package/dist/formats/black/core/helpers.js +182 -182
  37. package/dist/formats/black/core/schema.js +4 -4
  38. package/dist/formats/black/index.js +2 -2
  39. package/dist/formats/bnk/CjsBnkFormat.js +238 -245
  40. package/dist/formats/bnk/CjsBnkFormat.js.map +1 -1
  41. package/dist/formats/bnk/core/graph.js +140 -0
  42. package/dist/formats/bnk/core/graph.js.map +1 -0
  43. package/dist/formats/bnk/core/helpers.js +409 -354
  44. package/dist/formats/bnk/core/helpers.js.map +1 -1
  45. package/dist/formats/bnk/core/musicNodes.js +521 -0
  46. package/dist/formats/bnk/core/musicNodes.js.map +1 -0
  47. package/dist/formats/bnk/core/soundbanksInfo.js +246 -246
  48. package/dist/formats/bnk/index.js +2 -3
  49. package/dist/formats/bnk/index.js.map +1 -1
  50. package/dist/formats/cmf/CjsCmfFormat.js +497 -491
  51. package/dist/formats/cmf/CjsCmfFormat.js.map +1 -1
  52. package/dist/formats/cmf/core/binary.js +118 -118
  53. package/dist/formats/cmf/core/buffers.js +233 -233
  54. package/dist/formats/cmf/core/constants.js +47 -47
  55. package/dist/formats/cmf/core/gr2Anim.js +453 -453
  56. package/dist/formats/cmf/core/helpers.js +287 -287
  57. package/dist/formats/cmf/core/pack.js +276 -276
  58. package/dist/formats/cmf/core/schema.js +364 -364
  59. package/dist/formats/cmf/core/shared.js +268 -268
  60. package/dist/formats/cmf/core/writer.js +517 -517
  61. package/dist/formats/cmf/index.js +2 -2
  62. package/dist/formats/dds/CjsDdsFormat.js +193 -187
  63. package/dist/formats/dds/CjsDdsFormat.js.map +1 -1
  64. package/dist/formats/dds/core/bc6h.js +288 -0
  65. package/dist/formats/dds/core/bc6h.js.map +1 -0
  66. package/dist/formats/dds/core/bc7.js +251 -0
  67. package/dist/formats/dds/core/bc7.js.map +1 -0
  68. package/dist/formats/dds/core/helpers.js +815 -812
  69. package/dist/formats/dds/core/helpers.js.map +1 -1
  70. package/dist/formats/dds/index.js +2 -2
  71. package/dist/formats/fbx/CjsFbxFormat.js +266 -260
  72. package/dist/formats/fbx/CjsFbxFormat.js.map +1 -1
  73. package/dist/formats/fbx/core/helpers.js +3901 -3901
  74. package/dist/formats/fbx/index.js +2 -2
  75. package/dist/formats/flac/CjsFlacFormat.js +87 -81
  76. package/dist/formats/flac/CjsFlacFormat.js.map +1 -1
  77. package/dist/formats/flac/core/helpers.js +295 -295
  78. package/dist/formats/flac/index.js +2 -2
  79. package/dist/formats/gif/CjsGifFormat.js +87 -81
  80. package/dist/formats/gif/CjsGifFormat.js.map +1 -1
  81. package/dist/formats/gif/core/helpers.js +360 -360
  82. package/dist/formats/gif/index.js +2 -2
  83. package/dist/formats/gltf/CjsGltfFormat.js +290 -284
  84. package/dist/formats/gltf/CjsGltfFormat.js.map +1 -1
  85. package/dist/formats/gltf/core/helpers.js +292 -292
  86. package/dist/formats/gltf/core/json.js +79 -79
  87. package/dist/formats/gltf/core/parser.js +666 -666
  88. package/dist/formats/gltf/core/targets.js +163 -163
  89. package/dist/formats/gltf/index.js +2 -2
  90. package/dist/formats/index.js +23 -23
  91. package/dist/formats/jpeg/CjsJpegFormat.js +206 -200
  92. package/dist/formats/jpeg/CjsJpegFormat.js.map +1 -1
  93. package/dist/formats/jpeg/core/helpers.js +350 -350
  94. package/dist/formats/jpeg/core/jpeg.js +377 -377
  95. package/dist/formats/jpeg/index.js +2 -2
  96. package/dist/formats/mp3/CjsMp3Format.js +192 -186
  97. package/dist/formats/mp3/CjsMp3Format.js.map +1 -1
  98. package/dist/formats/mp3/core/helpers.js +338 -338
  99. package/dist/formats/mp3/index.js +2 -2
  100. package/dist/formats/mp4/CjsMp4Format.js +191 -185
  101. package/dist/formats/mp4/CjsMp4Format.js.map +1 -1
  102. package/dist/formats/mp4/core/helpers.js +449 -449
  103. package/dist/formats/mp4/index.js +2 -2
  104. package/dist/formats/obj/CjsObjFormat.js +253 -247
  105. package/dist/formats/obj/CjsObjFormat.js.map +1 -1
  106. package/dist/formats/obj/core/helpers.js +573 -573
  107. package/dist/formats/obj/core/json.js +64 -64
  108. package/dist/formats/obj/core/parser.js +321 -321
  109. package/dist/formats/obj/index.js +2 -2
  110. package/dist/formats/ogg/CjsOggFormat.js +88 -82
  111. package/dist/formats/ogg/CjsOggFormat.js.map +1 -1
  112. package/dist/formats/ogg/core/helpers.js +387 -387
  113. package/dist/formats/ogg/core/imdct.js +178 -178
  114. package/dist/formats/ogg/core/vorbis.js +999 -999
  115. package/dist/formats/ogg/index.js +2 -2
  116. package/dist/formats/png/CjsPngFormat.js +195 -189
  117. package/dist/formats/png/CjsPngFormat.js.map +1 -1
  118. package/dist/formats/png/core/helpers.js +583 -583
  119. package/dist/formats/png/index.js +2 -2
  120. package/dist/formats/red/CjsRedFormat.js +261 -247
  121. package/dist/formats/red/CjsRedFormat.js.map +1 -1
  122. package/dist/formats/red/core/CjsRedReader.js +194 -201
  123. package/dist/formats/red/core/CjsRedReader.js.map +1 -1
  124. package/dist/formats/red/core/blackDefinitions.js +3 -3
  125. package/dist/formats/red/core/helpers.js +139 -136
  126. package/dist/formats/red/core/helpers.js.map +1 -1
  127. package/dist/formats/red/core/redGraph.js +68 -68
  128. package/dist/formats/red/core/schema.js +4 -4
  129. package/dist/formats/red/index.js +2 -2
  130. package/dist/formats/stl/CjsStlFormat.js +365 -304
  131. package/dist/formats/stl/CjsStlFormat.js.map +1 -1
  132. package/dist/formats/stl/core/helpers.js +261 -257
  133. package/dist/formats/stl/core/helpers.js.map +1 -1
  134. package/dist/formats/stl/core/json.js +51 -51
  135. package/dist/formats/stl/core/stl.js +629 -544
  136. package/dist/formats/stl/core/stl.js.map +1 -1
  137. package/dist/formats/stl/core/targets.js +163 -163
  138. package/dist/formats/stl/index.js +2 -2
  139. package/dist/formats/tga/CjsTgaFormat.js +192 -186
  140. package/dist/formats/tga/CjsTgaFormat.js.map +1 -1
  141. package/dist/formats/tga/core/helpers.js +446 -446
  142. package/dist/formats/tga/index.js +2 -2
  143. package/dist/formats/wav/CjsWavFormat.js +192 -186
  144. package/dist/formats/wav/CjsWavFormat.js.map +1 -1
  145. package/dist/formats/wav/core/helpers.js +328 -328
  146. package/dist/formats/wav/index.js +2 -2
  147. package/dist/formats/webm/CjsWebmFormat.js +191 -185
  148. package/dist/formats/webm/CjsWebmFormat.js.map +1 -1
  149. package/dist/formats/webm/core/helpers.js +537 -537
  150. package/dist/formats/webm/index.js +2 -2
  151. package/dist/formats/webp/CjsWebpFormat.js +86 -80
  152. package/dist/formats/webp/CjsWebpFormat.js.map +1 -1
  153. package/dist/formats/webp/core/helpers.js +214 -214
  154. package/dist/formats/webp/index.js +2 -2
  155. package/dist/formats/wem/CjsWemFormat.js +241 -197
  156. package/dist/formats/wem/CjsWemFormat.js.map +1 -1
  157. package/dist/formats/wem/core/bitStream.js +259 -259
  158. package/dist/formats/wem/core/codebookLibrary.js +164 -164
  159. package/dist/formats/wem/core/helpers.js +417 -336
  160. package/dist/formats/wem/core/helpers.js.map +1 -1
  161. package/dist/formats/wem/core/packedCodebooksAotuv603.js +30 -30
  162. package/dist/formats/wem/core/ptadpcm.js +77 -0
  163. package/dist/formats/wem/core/ptadpcm.js.map +1 -0
  164. package/dist/formats/wem/core/resolve.js +121 -0
  165. package/dist/formats/wem/core/resolve.js.map +1 -0
  166. package/dist/formats/wem/core/wemToOgg.js +485 -485
  167. package/dist/formats/wem/index.js +2 -2
  168. package/dist/formats/yaml/CjsYamlFormat.js +83 -77
  169. package/dist/formats/yaml/CjsYamlFormat.js.map +1 -1
  170. package/dist/formats/yaml/core/CjsYamlReader.js +305 -304
  171. package/dist/formats/yaml/core/CjsYamlReader.js.map +1 -1
  172. package/dist/formats/yaml/core/helpers.js +160 -160
  173. package/dist/formats/yaml/index.js +2 -2
  174. package/dist/index.js +48 -52
  175. package/dist/index.js.map +1 -1
  176. package/dist/resourcePath.js +18 -18
  177. package/dist/resourceStates.js +9 -9
  178. package/dist/{generated/resources → resources}/AudioGeometryResData.js +47 -47
  179. package/dist/resources/AudioGeometryResData.js.map +1 -0
  180. package/dist/{generated/resources → resources}/GStateBindingCallbackData.js +31 -31
  181. package/dist/resources/GStateBindingCallbackData.js.map +1 -0
  182. package/dist/{generated/resources → resources}/MeshDecalData.js +37 -37
  183. package/dist/resources/MeshDecalData.js.map +1 -0
  184. package/dist/{generated/resources → resources}/MeshDecalLodData.js +34 -34
  185. package/dist/resources/MeshDecalLodData.js.map +1 -0
  186. package/dist/resources/Tr2EffectRes.js +71 -71
  187. package/dist/resources/Tr2GrannyIntersectionResult.js +60 -0
  188. package/dist/resources/Tr2GrannyIntersectionResult.js.map +1 -0
  189. package/dist/resources/Tr2GrannyStateRes.js +44 -44
  190. package/dist/resources/Tr2ImageRes.js +114 -114
  191. package/dist/resources/Tr2LightProfileRes.js +40 -40
  192. package/dist/{generated/resources → resources}/Tr2MaterialArea.js +34 -34
  193. package/dist/resources/Tr2MaterialArea.js.map +1 -0
  194. package/dist/{generated/resources → resources}/Tr2MaterialMesh.js +31 -31
  195. package/dist/resources/Tr2MaterialMesh.js.map +1 -0
  196. package/dist/{generated/resources → resources}/Tr2MaterialRes.js +34 -34
  197. package/dist/resources/Tr2MaterialRes.js.map +1 -0
  198. package/dist/{generated/resources → resources}/Tr2ShaderPermutation.js +43 -43
  199. package/dist/resources/Tr2ShaderPermutation.js.map +1 -0
  200. package/dist/{generated/resources → resources}/Tr2TextureLodManager.js +100 -60
  201. package/dist/resources/Tr2TextureLodManager.js.map +1 -0
  202. package/dist/{generated/resources → resources}/Tr2TextureLodUpdateRequest.js +37 -37
  203. package/dist/resources/Tr2TextureLodUpdateRequest.js.map +1 -0
  204. package/dist/{generated/resources → resources}/Tr2TexturePackChannel.js +37 -37
  205. package/dist/resources/Tr2TexturePackChannel.js.map +1 -0
  206. package/dist/resources/Tr2TexturePipeline.js +68 -0
  207. package/dist/resources/Tr2TexturePipeline.js.map +1 -0
  208. package/dist/{generated/resources → resources}/Tr2TexturePipelineParams.js +34 -34
  209. package/dist/resources/Tr2TexturePipelineParams.js.map +1 -0
  210. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepCompress.js +40 -40
  211. package/dist/resources/Tr2TexturePipelineStepCompress.js.map +1 -0
  212. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepLimitSize.js +34 -34
  213. package/dist/resources/Tr2TexturePipelineStepLimitSize.js.map +1 -0
  214. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepLoad.js +31 -31
  215. package/dist/resources/Tr2TexturePipelineStepLoad.js.map +1 -0
  216. package/dist/{generated/resources → resources}/Tr2TexturePipelineStepPack.js +43 -43
  217. package/dist/resources/Tr2TexturePipelineStepPack.js.map +1 -0
  218. package/dist/resources/TriGeometryRes.js +239 -216
  219. package/dist/resources/TriGeometryRes.js.map +1 -1
  220. package/dist/{generated/resources → resources}/TriGeometryResAreaData.js +59 -59
  221. package/dist/resources/TriGeometryResAreaData.js.map +1 -0
  222. package/dist/{generated/resources → resources}/TriGeometryResJointData.js +38 -38
  223. package/dist/resources/TriGeometryResJointData.js.map +1 -0
  224. package/dist/{generated/resources → resources}/TriGeometryResLodData.js +88 -88
  225. package/dist/resources/TriGeometryResLodData.js.map +1 -0
  226. package/dist/{generated/resources → resources}/TriGeometryResMeshData.js +63 -63
  227. package/dist/resources/TriGeometryResMeshData.js.map +1 -0
  228. package/dist/{generated/resources → resources}/TriGeometryResSkeletonData.js +34 -34
  229. package/dist/resources/TriGeometryResSkeletonData.js.map +1 -0
  230. package/dist/resources/TriGrannyRes.js +43 -43
  231. package/dist/{generated/resources → resources}/TriJointBinding.js +38 -38
  232. package/dist/resources/TriJointBinding.js.map +1 -0
  233. package/dist/{generated/resources → resources}/TriMorphTargetGeometryConstants.js +46 -46
  234. package/dist/resources/TriMorphTargetGeometryConstants.js.map +1 -0
  235. package/dist/{generated/resources → resources}/TriRtGeometryConstants.js +88 -88
  236. package/dist/resources/TriRtGeometryConstants.js.map +1 -0
  237. package/dist/resources/TriTextureRes.js +304 -304
  238. package/dist/{generated/resources → resources}/enums.js +18 -18
  239. package/dist/resources/enums.js.map +1 -0
  240. package/dist/resources/resourceBoundary.js +47 -47
  241. package/dist/resources/texturePipelineBehavior.js +320 -0
  242. package/dist/resources/texturePipelineBehavior.js.map +1 -0
  243. package/dist/texture/CjsTextureArrayRes.js +406 -406
  244. package/dist/texture/CjsTextureParameterProxy.js +133 -133
  245. package/format-notices/black/LICENSE +21 -21
  246. package/format-notices/black/NOTICE +47 -47
  247. package/format-notices/bnk/LICENSE +21 -21
  248. package/format-notices/bnk/NOTICE +20 -17
  249. package/format-notices/cmf/LICENSE +21 -21
  250. package/format-notices/cmf/NOTICE +36 -36
  251. package/format-notices/dds/LICENSE +21 -21
  252. package/format-notices/dds/NOTICE +14 -14
  253. package/format-notices/fbx/LICENSE +21 -21
  254. package/format-notices/fbx/NOTICE +14 -14
  255. package/format-notices/flac/LICENSE +21 -21
  256. package/format-notices/flac/NOTICE +14 -14
  257. package/format-notices/gif/LICENSE +21 -21
  258. package/format-notices/gif/NOTICE +14 -14
  259. package/format-notices/gltf/LICENSE +21 -21
  260. package/format-notices/gltf/NOTICE +27 -27
  261. package/format-notices/jpeg/LICENSE +21 -21
  262. package/format-notices/jpeg/NOTICE +14 -14
  263. package/format-notices/mp3/LICENSE +21 -21
  264. package/format-notices/mp3/NOTICE +14 -14
  265. package/format-notices/mp4/LICENSE +21 -21
  266. package/format-notices/mp4/NOTICE +14 -14
  267. package/format-notices/obj/LICENSE +21 -21
  268. package/format-notices/obj/NOTICE +26 -26
  269. package/format-notices/ogg/LICENSE +21 -21
  270. package/format-notices/ogg/NOTICE +28 -28
  271. package/format-notices/png/LICENSE +21 -21
  272. package/format-notices/png/NOTICE +14 -14
  273. package/format-notices/red/LICENSE +21 -21
  274. package/format-notices/red/NOTICE +31 -31
  275. package/format-notices/stl/LICENSE +21 -21
  276. package/format-notices/stl/NOTICE +21 -21
  277. package/format-notices/tga/LICENSE +21 -21
  278. package/format-notices/tga/NOTICE +14 -14
  279. package/format-notices/wav/LICENSE +21 -21
  280. package/format-notices/wav/NOTICE +14 -14
  281. package/format-notices/webm/LICENSE +21 -21
  282. package/format-notices/webm/NOTICE +14 -14
  283. package/format-notices/webp/LICENSE +21 -21
  284. package/format-notices/webp/NOTICE +14 -14
  285. package/format-notices/wem/LICENSE +57 -57
  286. package/format-notices/wem/NOTICE +33 -33
  287. package/format-notices/yaml/LICENSE +21 -21
  288. package/format-notices/yaml/NOTICE +44 -44
  289. package/package.json +51 -51
  290. package/resource-lifecycle.md +679 -487
  291. package/dist/generated/resources/AudioGeometryResData.js.map +0 -1
  292. package/dist/generated/resources/CmfVertexReader.js +0 -46
  293. package/dist/generated/resources/CmfVertexReader.js.map +0 -1
  294. package/dist/generated/resources/GStateBindingCallbackData.js.map +0 -1
  295. package/dist/generated/resources/MeshDecalData.js.map +0 -1
  296. package/dist/generated/resources/MeshDecalLodData.js.map +0 -1
  297. package/dist/generated/resources/Tr2AsyncSave.js +0 -46
  298. package/dist/generated/resources/Tr2AsyncSave.js.map +0 -1
  299. package/dist/generated/resources/Tr2CmfContents.js +0 -37
  300. package/dist/generated/resources/Tr2CmfContents.js.map +0 -1
  301. package/dist/generated/resources/Tr2GrannyIntersectionResult.js +0 -58
  302. package/dist/generated/resources/Tr2GrannyIntersectionResult.js.map +0 -1
  303. package/dist/generated/resources/Tr2LoadPrepareFence.js +0 -37
  304. package/dist/generated/resources/Tr2LoadPrepareFence.js.map +0 -1
  305. package/dist/generated/resources/Tr2MaterialArea.js.map +0 -1
  306. package/dist/generated/resources/Tr2MaterialMesh.js.map +0 -1
  307. package/dist/generated/resources/Tr2MaterialRes.js.map +0 -1
  308. package/dist/generated/resources/Tr2ShaderPermutation.js.map +0 -1
  309. package/dist/generated/resources/Tr2TextureLodManager.js.map +0 -1
  310. package/dist/generated/resources/Tr2TextureLodUpdateRequest.js.map +0 -1
  311. package/dist/generated/resources/Tr2TexturePackChannel.js.map +0 -1
  312. package/dist/generated/resources/Tr2TexturePipeline.js +0 -44
  313. package/dist/generated/resources/Tr2TexturePipeline.js.map +0 -1
  314. package/dist/generated/resources/Tr2TexturePipelineParams.js.map +0 -1
  315. package/dist/generated/resources/Tr2TexturePipelineStepCompress.js.map +0 -1
  316. package/dist/generated/resources/Tr2TexturePipelineStepLimitSize.js.map +0 -1
  317. package/dist/generated/resources/Tr2TexturePipelineStepLoad.js.map +0 -1
  318. package/dist/generated/resources/Tr2TexturePipelineStepPack.js.map +0 -1
  319. package/dist/generated/resources/TriGeometryResAreaData.js.map +0 -1
  320. package/dist/generated/resources/TriGeometryResJointData.js.map +0 -1
  321. package/dist/generated/resources/TriGeometryResLodData.js.map +0 -1
  322. package/dist/generated/resources/TriGeometryResMeshData.js.map +0 -1
  323. package/dist/generated/resources/TriGeometryResSkeletonData.js.map +0 -1
  324. package/dist/generated/resources/TriJointBinding.js.map +0 -1
  325. package/dist/generated/resources/TriMorphTargetGeometryConstants.js.map +0 -1
  326. package/dist/generated/resources/TriRtGeometryConstants.js.map +0 -1
  327. package/dist/generated/resources/enums.js.map +0 -1
  328. package/dist/generated/resources/index.js +0 -32
  329. package/dist/generated/resources/index.js.map +0 -1
@@ -1,268 +1,268 @@
1
- function buildCmfFromShared(input) {
2
- const root = input && input.meshes ? input : {
3
- meshes: [input]
4
- };
5
- return {
6
- version: 1,
7
- metadata: normalizeMetadata(root.metadata),
8
- meshes: (root.meshes ?? []).map(mesh => buildMesh(mesh)),
9
- skeletons: root.skeletons ?? [],
10
- animations: root.animations ?? []
11
- };
12
- }
13
- function buildSharedFromCmf(raw, classes, hydrationOptions = {}) {
14
- const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
15
- return hydrate("Root", {
16
- cmfVersion: raw.version,
17
- metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,
18
- meshes: raw.meshes.map(mesh => hydrateSharedMesh(mesh, hydrationClasses)),
19
- skeletons: raw.skeletons.map(skeleton => hydrateSkeleton(skeleton, hydrationClasses)),
20
- animations: raw.animations.map(animation => hydrateAnimation(animation, hydrationClasses))
21
- }, hydrationClasses, hydrationOptions);
22
- }
23
- function buildMesh(mesh) {
24
- const vertex = mesh.vertex ?? {},
25
- position = vertex.position ?? [],
26
- boneBindings = (mesh.boneBindings ?? []).map(binding => buildBoneBinding(binding)),
27
- affectedByBones = boneBindings.length > 0,
28
- morphTargets = buildMorphTargets(mesh),
29
- affectedByMorphTargets = morphTargets.targets.length > 0,
30
- stride = estimateVertexStride(vertex),
31
- vertexCount = stride === 0 ? 0 : Math.floor(position.length / 3);
32
- return {
33
- name: mesh.name ?? "",
34
- decl: buildDecl(vertex),
35
- lods: [{
36
- vb: {
37
- index: 1,
38
- offset: 0,
39
- size: vertexCount * stride,
40
- stride
41
- },
42
- ib: {
43
- index: 2,
44
- offset: 0,
45
- size: totalIndexCount(mesh.indices) * bytesPerIndex(mesh.indices),
46
- stride: bytesPerIndex(mesh.indices)
47
- },
48
- areas: (mesh.indices ?? []).map((group, index) => ({
49
- firstElement: firstTriangle(mesh.indices, index),
50
- elementCount: Math.floor((group.faces ?? []).length / 3)
51
- })),
52
- morphTargets: morphTargets.lods,
53
- threshold: 0xffffffff,
54
- vertex,
55
- indices: mesh.indices ?? []
56
- }],
57
- areas: (mesh.indices ?? []).map(group => ({
58
- name: group.name ?? "",
59
- bounds: boundsFromShared(mesh),
60
- bones: [],
61
- affectedByBones,
62
- affectedByMorphTargets
63
- })),
64
- boneBindings,
65
- morphTargets: {
66
- decl: morphTargets.decl,
67
- targets: morphTargets.targets
68
- },
69
- uvDensities: [],
70
- bounds: boundsFromShared(mesh),
71
- audioOcclusionMesh: {
72
- vertices: [],
73
- indices: [],
74
- bounds: {
75
- min: [0, 0, 0],
76
- max: [0, 0, 0]
77
- }
78
- },
79
- topology: "TriangleList",
80
- skeleton: mesh.skeleton ?? null,
81
- vertex,
82
- indices: mesh.indices ?? []
83
- };
84
- }
85
- function buildMorphTargets(mesh) {
86
- const targets = mesh.morphTargets ?? [];
87
- if (!targets.length) {
88
- return {
89
- decl: [],
90
- targets: [],
91
- lods: []
92
- };
93
- }
94
- const firstVertex = targets.find(target => target.vertex)?.vertex ?? {},
95
- decl = buildDecl(firstVertex),
96
- stride = estimateStrideFromDecl(decl);
97
- return {
98
- decl,
99
- targets: targets.map(target => ({
100
- name: target.name ?? "",
101
- maxDisplacement: target.maxDisplacement ?? maxDisplacement(mesh.vertex?.position ?? [], target.vertex?.position ?? [])
102
- })),
103
- lods: targets.map(target => {
104
- const morphVertex = target.vertex ?? {},
105
- vertexCount = Math.floor((morphVertex.position ?? []).length / 3);
106
- return {
107
- vb: {
108
- index: 0,
109
- offset: 0,
110
- size: vertexCount * stride,
111
- stride
112
- },
113
- vertex: morphVertex
114
- };
115
- })
116
- };
117
- }
118
- function buildBoneBinding(binding) {
119
- return {
120
- name: binding.name ?? "",
121
- bounds: {
122
- min: binding.minBounds ?? binding.bounds?.min ?? [0, 0, 0],
123
- max: binding.maxBounds ?? binding.bounds?.max ?? [0, 0, 0]
124
- }
125
- };
126
- }
127
- function buildDecl(vertex) {
128
- const decl = [];
129
- let offset = 0;
130
- for (const channel of [["position", "Position", 3], ["normal", "Normal", 3], ["tangent", "Tangent", 3], ["binormal", "Binormal", 3], ["texcoord0", "TexCoord", 2, 0], ["texcoord1", "TexCoord", 2, 1], ["color0", "Color", 4, 0], ["blendIndice", "BoneIndices", 4, 0, "UInt16"], ["blendWeight", "BoneWeights", 4, 0], ["packedTangent", "PackedTangent", 4, 0, "Int16Norm"], ["packedTangentLegacy", "PackedTangentLegacy", 4, 0, "UInt16Norm"]]) {
131
- const [name, usage, count, usageIndex = 0, type = "Float32"] = channel;
132
- if (!Array.isArray(vertex[name]) || vertex[name].length === 0) {
133
- continue;
134
- }
135
- decl.push({
136
- usage,
137
- usageIndex,
138
- type,
139
- elementCount: count,
140
- offset
141
- });
142
- offset += count * elementTypeSize(type);
143
- }
144
- return decl;
145
- }
146
- function estimateVertexStride(vertex) {
147
- return estimateStrideFromDecl(buildDecl(vertex));
148
- }
149
- function estimateStrideFromDecl(decl) {
150
- return decl.reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);
151
- }
152
- function elementTypeSize(type) {
153
- return type === "Float32" ? 4 : type.includes("16") ? 2 : 1;
154
- }
155
- function totalIndexCount(indices = []) {
156
- return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);
157
- }
158
- function bytesPerIndex(indices = []) {
159
- return indices.some(group => group.bytesPerIndex === 4 || (group.faces ?? []).some(index => index > 0xffff)) ? 4 : 2;
160
- }
161
- function firstTriangle(indices = [], areaIndex) {
162
- let first = 0;
163
- for (let i = 0; i < areaIndex; i++) {
164
- first += Math.floor((indices[i].faces ?? []).length / 3);
165
- }
166
- return first;
167
- }
168
- function boundsFromShared(mesh) {
169
- return {
170
- min: mesh.minBounds ?? mesh.bounds?.min ?? [0, 0, 0],
171
- max: mesh.maxBounds ?? mesh.bounds?.max ?? [0, 0, 0]
172
- };
173
- }
174
- function maxDisplacement(basePositions, targetPositions) {
175
- let max = 0;
176
- for (let i = 0; i < Math.min(basePositions.length, targetPositions.length); i += 3) {
177
- max = Math.max(max, Math.hypot(targetPositions[i] - basePositions[i], targetPositions[i + 1] - basePositions[i + 1], targetPositions[i + 2] - basePositions[i + 2]));
178
- }
179
- return max;
180
- }
181
- function normalizeMetadata(metadata) {
182
- if (!metadata) return null;
183
- if (Array.isArray(metadata.entries)) return metadata;
184
- return {
185
- entries: Object.entries(metadata).map(([key, value]) => ({
186
- key,
187
- value: String(value)
188
- }))
189
- };
190
- }
191
- function hydrateSharedMesh(mesh, classes) {
192
- return hydrate("Mesh", {
193
- name: mesh.name,
194
- morphTargets: mesh.morphTargets.targets.map((target, index) => hydrate("MorphTarget", {
195
- ...target,
196
- vertex: mesh.lods[0]?.morphTargets[index]?.vertex ?? null
197
- }, classes)),
198
- minBounds: mesh.bounds.min,
199
- maxBounds: mesh.bounds.max,
200
- boneBindings: mesh.boneBindings.map(binding => hydrate("BoneBinding", {
201
- name: binding.name,
202
- minBounds: binding.bounds.min,
203
- maxBounds: binding.bounds.max
204
- }, classes)),
205
- vertex: mesh.vertex ?? emptyVertex(),
206
- indices: (mesh.indices ?? []).map(group => hydrate("IndexGroup", {
207
- name: group.name,
208
- bytesPerIndex: group.bytesPerIndex,
209
- faces: group.faces
210
- }, classes)),
211
- lods: mesh.lods,
212
- topology: mesh.topology,
213
- skeleton: mesh.skeleton
214
- }, classes);
215
- }
216
- function hydrateMetadata(metadata, classes) {
217
- return hydrate("Metadata", {
218
- entries: metadata.entries.map(entry => hydrate("MetadataEntry", entry, classes))
219
- }, classes);
220
- }
221
- function hydrateSkeleton(skeleton, classes) {
222
- return hydrate("Skeleton", skeleton, classes);
223
- }
224
- function hydrateAnimation(animation, classes) {
225
- return hydrate("Animation", animation, classes);
226
- }
227
- function emptyVertex() {
228
- return {
229
- position: [],
230
- normal: [],
231
- tangent: [],
232
- binormal: [],
233
- texcoord0: [],
234
- texcoord1: [],
235
- color0: [],
236
- blendIndice: [],
237
- blendWeight: [],
238
- packedTangent: [],
239
- packedTangentLegacy: []
240
- };
241
- }
242
- function hydrate(type, fields, classes, hydrationOptions = {}) {
243
- const Class = classes?.[type];
244
- const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};
245
- return Class ? populate(new Class(), fields, options) : fields;
246
- }
247
- function populate(instance, fields, hydrationOptions = {}) {
248
- if (!instance || typeof instance.SetValues !== "function") {
249
- throw new TypeError("CjsCmfFormat shared class population requires classes to implement SetValues(values)");
250
- }
251
- instance.SetValues(fields, {
252
- ...hydrationOptions,
253
- skipUpdate: true,
254
- skipEvents: true
255
- });
256
- return instance;
257
- }
258
- function createHydrationClasses(classes, hydrationOptions) {
259
- const map = Object.create(classes || null);
260
- Object.defineProperty(map, "__hydrationOptions", {
261
- value: hydrationOptions,
262
- enumerable: false
263
- });
264
- return map;
265
- }
266
-
267
- export { buildCmfFromShared, buildSharedFromCmf };
268
- //# sourceMappingURL=shared.js.map
1
+ function buildCmfFromShared(input) {
2
+ const root = input && input.meshes ? input : {
3
+ meshes: [input]
4
+ };
5
+ return {
6
+ version: 1,
7
+ metadata: normalizeMetadata(root.metadata),
8
+ meshes: (root.meshes ?? []).map(mesh => buildMesh(mesh)),
9
+ skeletons: root.skeletons ?? [],
10
+ animations: root.animations ?? []
11
+ };
12
+ }
13
+ function buildSharedFromCmf(raw, classes, hydrationOptions = {}) {
14
+ const hydrationClasses = createHydrationClasses(classes, hydrationOptions);
15
+ return hydrate("Root", {
16
+ cmfVersion: raw.version,
17
+ metadata: raw.metadata ? hydrateMetadata(raw.metadata, hydrationClasses) : null,
18
+ meshes: raw.meshes.map(mesh => hydrateSharedMesh(mesh, hydrationClasses)),
19
+ skeletons: raw.skeletons.map(skeleton => hydrateSkeleton(skeleton, hydrationClasses)),
20
+ animations: raw.animations.map(animation => hydrateAnimation(animation, hydrationClasses))
21
+ }, hydrationClasses, hydrationOptions);
22
+ }
23
+ function buildMesh(mesh) {
24
+ const vertex = mesh.vertex ?? {},
25
+ position = vertex.position ?? [],
26
+ boneBindings = (mesh.boneBindings ?? []).map(binding => buildBoneBinding(binding)),
27
+ affectedByBones = boneBindings.length > 0,
28
+ morphTargets = buildMorphTargets(mesh),
29
+ affectedByMorphTargets = morphTargets.targets.length > 0,
30
+ stride = estimateVertexStride(vertex),
31
+ vertexCount = stride === 0 ? 0 : Math.floor(position.length / 3);
32
+ return {
33
+ name: mesh.name ?? "",
34
+ decl: buildDecl(vertex),
35
+ lods: [{
36
+ vb: {
37
+ index: 1,
38
+ offset: 0,
39
+ size: vertexCount * stride,
40
+ stride
41
+ },
42
+ ib: {
43
+ index: 2,
44
+ offset: 0,
45
+ size: totalIndexCount(mesh.indices) * bytesPerIndex(mesh.indices),
46
+ stride: bytesPerIndex(mesh.indices)
47
+ },
48
+ areas: (mesh.indices ?? []).map((group, index) => ({
49
+ firstElement: firstTriangle(mesh.indices, index),
50
+ elementCount: Math.floor((group.faces ?? []).length / 3)
51
+ })),
52
+ morphTargets: morphTargets.lods,
53
+ threshold: 0xffffffff,
54
+ vertex,
55
+ indices: mesh.indices ?? []
56
+ }],
57
+ areas: (mesh.indices ?? []).map(group => ({
58
+ name: group.name ?? "",
59
+ bounds: boundsFromShared(mesh),
60
+ bones: [],
61
+ affectedByBones,
62
+ affectedByMorphTargets
63
+ })),
64
+ boneBindings,
65
+ morphTargets: {
66
+ decl: morphTargets.decl,
67
+ targets: morphTargets.targets
68
+ },
69
+ uvDensities: [],
70
+ bounds: boundsFromShared(mesh),
71
+ audioOcclusionMesh: {
72
+ vertices: [],
73
+ indices: [],
74
+ bounds: {
75
+ min: [0, 0, 0],
76
+ max: [0, 0, 0]
77
+ }
78
+ },
79
+ topology: "TriangleList",
80
+ skeleton: mesh.skeleton ?? null,
81
+ vertex,
82
+ indices: mesh.indices ?? []
83
+ };
84
+ }
85
+ function buildMorphTargets(mesh) {
86
+ const targets = mesh.morphTargets ?? [];
87
+ if (!targets.length) {
88
+ return {
89
+ decl: [],
90
+ targets: [],
91
+ lods: []
92
+ };
93
+ }
94
+ const firstVertex = targets.find(target => target.vertex)?.vertex ?? {},
95
+ decl = buildDecl(firstVertex),
96
+ stride = estimateStrideFromDecl(decl);
97
+ return {
98
+ decl,
99
+ targets: targets.map(target => ({
100
+ name: target.name ?? "",
101
+ maxDisplacement: target.maxDisplacement ?? maxDisplacement(mesh.vertex?.position ?? [], target.vertex?.position ?? [])
102
+ })),
103
+ lods: targets.map(target => {
104
+ const morphVertex = target.vertex ?? {},
105
+ vertexCount = Math.floor((morphVertex.position ?? []).length / 3);
106
+ return {
107
+ vb: {
108
+ index: 0,
109
+ offset: 0,
110
+ size: vertexCount * stride,
111
+ stride
112
+ },
113
+ vertex: morphVertex
114
+ };
115
+ })
116
+ };
117
+ }
118
+ function buildBoneBinding(binding) {
119
+ return {
120
+ name: binding.name ?? "",
121
+ bounds: {
122
+ min: binding.minBounds ?? binding.bounds?.min ?? [0, 0, 0],
123
+ max: binding.maxBounds ?? binding.bounds?.max ?? [0, 0, 0]
124
+ }
125
+ };
126
+ }
127
+ function buildDecl(vertex) {
128
+ const decl = [];
129
+ let offset = 0;
130
+ for (const channel of [["position", "Position", 3], ["normal", "Normal", 3], ["tangent", "Tangent", 3], ["binormal", "Binormal", 3], ["texcoord0", "TexCoord", 2, 0], ["texcoord1", "TexCoord", 2, 1], ["color0", "Color", 4, 0], ["blendIndice", "BoneIndices", 4, 0, "UInt16"], ["blendWeight", "BoneWeights", 4, 0], ["packedTangent", "PackedTangent", 4, 0, "Int16Norm"], ["packedTangentLegacy", "PackedTangentLegacy", 4, 0, "UInt16Norm"]]) {
131
+ const [name, usage, count, usageIndex = 0, type = "Float32"] = channel;
132
+ if (!Array.isArray(vertex[name]) || vertex[name].length === 0) {
133
+ continue;
134
+ }
135
+ decl.push({
136
+ usage,
137
+ usageIndex,
138
+ type,
139
+ elementCount: count,
140
+ offset
141
+ });
142
+ offset += count * elementTypeSize(type);
143
+ }
144
+ return decl;
145
+ }
146
+ function estimateVertexStride(vertex) {
147
+ return estimateStrideFromDecl(buildDecl(vertex));
148
+ }
149
+ function estimateStrideFromDecl(decl) {
150
+ return decl.reduce((stride, element) => Math.max(stride, element.offset + element.elementCount * elementTypeSize(element.type)), 0);
151
+ }
152
+ function elementTypeSize(type) {
153
+ return type === "Float32" ? 4 : type.includes("16") ? 2 : 1;
154
+ }
155
+ function totalIndexCount(indices = []) {
156
+ return indices.reduce((total, group) => total + (group.faces?.length ?? 0), 0);
157
+ }
158
+ function bytesPerIndex(indices = []) {
159
+ return indices.some(group => group.bytesPerIndex === 4 || (group.faces ?? []).some(index => index > 0xffff)) ? 4 : 2;
160
+ }
161
+ function firstTriangle(indices = [], areaIndex) {
162
+ let first = 0;
163
+ for (let i = 0; i < areaIndex; i++) {
164
+ first += Math.floor((indices[i].faces ?? []).length / 3);
165
+ }
166
+ return first;
167
+ }
168
+ function boundsFromShared(mesh) {
169
+ return {
170
+ min: mesh.minBounds ?? mesh.bounds?.min ?? [0, 0, 0],
171
+ max: mesh.maxBounds ?? mesh.bounds?.max ?? [0, 0, 0]
172
+ };
173
+ }
174
+ function maxDisplacement(basePositions, targetPositions) {
175
+ let max = 0;
176
+ for (let i = 0; i < Math.min(basePositions.length, targetPositions.length); i += 3) {
177
+ max = Math.max(max, Math.hypot(targetPositions[i] - basePositions[i], targetPositions[i + 1] - basePositions[i + 1], targetPositions[i + 2] - basePositions[i + 2]));
178
+ }
179
+ return max;
180
+ }
181
+ function normalizeMetadata(metadata) {
182
+ if (!metadata) return null;
183
+ if (Array.isArray(metadata.entries)) return metadata;
184
+ return {
185
+ entries: Object.entries(metadata).map(([key, value]) => ({
186
+ key,
187
+ value: String(value)
188
+ }))
189
+ };
190
+ }
191
+ function hydrateSharedMesh(mesh, classes) {
192
+ return hydrate("Mesh", {
193
+ name: mesh.name,
194
+ morphTargets: mesh.morphTargets.targets.map((target, index) => hydrate("MorphTarget", {
195
+ ...target,
196
+ vertex: mesh.lods[0]?.morphTargets[index]?.vertex ?? null
197
+ }, classes)),
198
+ minBounds: mesh.bounds.min,
199
+ maxBounds: mesh.bounds.max,
200
+ boneBindings: mesh.boneBindings.map(binding => hydrate("BoneBinding", {
201
+ name: binding.name,
202
+ minBounds: binding.bounds.min,
203
+ maxBounds: binding.bounds.max
204
+ }, classes)),
205
+ vertex: mesh.vertex ?? emptyVertex(),
206
+ indices: (mesh.indices ?? []).map(group => hydrate("IndexGroup", {
207
+ name: group.name,
208
+ bytesPerIndex: group.bytesPerIndex,
209
+ faces: group.faces
210
+ }, classes)),
211
+ lods: mesh.lods,
212
+ topology: mesh.topology,
213
+ skeleton: mesh.skeleton
214
+ }, classes);
215
+ }
216
+ function hydrateMetadata(metadata, classes) {
217
+ return hydrate("Metadata", {
218
+ entries: metadata.entries.map(entry => hydrate("MetadataEntry", entry, classes))
219
+ }, classes);
220
+ }
221
+ function hydrateSkeleton(skeleton, classes) {
222
+ return hydrate("Skeleton", skeleton, classes);
223
+ }
224
+ function hydrateAnimation(animation, classes) {
225
+ return hydrate("Animation", animation, classes);
226
+ }
227
+ function emptyVertex() {
228
+ return {
229
+ position: [],
230
+ normal: [],
231
+ tangent: [],
232
+ binormal: [],
233
+ texcoord0: [],
234
+ texcoord1: [],
235
+ color0: [],
236
+ blendIndice: [],
237
+ blendWeight: [],
238
+ packedTangent: [],
239
+ packedTangentLegacy: []
240
+ };
241
+ }
242
+ function hydrate(type, fields, classes, hydrationOptions = {}) {
243
+ const Class = classes?.[type];
244
+ const options = Object.keys(hydrationOptions).length > 0 ? hydrationOptions : classes?.__hydrationOptions || {};
245
+ return Class ? populate(new Class(), fields, options) : fields;
246
+ }
247
+ function populate(instance, fields, hydrationOptions = {}) {
248
+ if (!instance || typeof instance.SetValues !== "function") {
249
+ throw new TypeError("CjsCmfFormat shared class population requires classes to implement SetValues(values)");
250
+ }
251
+ instance.SetValues(fields, {
252
+ ...hydrationOptions,
253
+ skipUpdate: true,
254
+ skipEvents: true
255
+ });
256
+ return instance;
257
+ }
258
+ function createHydrationClasses(classes, hydrationOptions) {
259
+ const map = Object.create(classes || null);
260
+ Object.defineProperty(map, "__hydrationOptions", {
261
+ value: hydrationOptions,
262
+ enumerable: false
263
+ });
264
+ return map;
265
+ }
266
+
267
+ export { buildCmfFromShared, buildSharedFromCmf };
268
+ //# sourceMappingURL=shared.js.map