@zephyr3d/scene 0.9.4 → 0.9.6

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 (517) 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_modifier.js.map +1 -1
  38. package/dist/animation/translationtrack.js +3 -0
  39. package/dist/animation/translationtrack.js.map +1 -1
  40. package/dist/app/engine.js +171 -107
  41. package/dist/app/engine.js.map +1 -1
  42. package/dist/app/scriptregistry.js +251 -80
  43. package/dist/app/scriptregistry.js.map +1 -1
  44. package/dist/asset/assetmanager.js +344 -365
  45. package/dist/asset/assetmanager.js.map +1 -1
  46. package/dist/asset/loaders/loader.js +1 -6
  47. package/dist/asset/loaders/loader.js.map +1 -1
  48. package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
  49. package/dist/asset/model.js +1000 -131
  50. package/dist/asset/model.js.map +1 -1
  51. package/dist/avatar/wardrobe.js +474 -0
  52. package/dist/avatar/wardrobe.js.map +1 -0
  53. package/dist/index.d.ts +1126 -199
  54. package/dist/index.js +3 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
  57. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  58. package/dist/material/mixins/pbr/common.js +72 -15
  59. package/dist/material/mixins/pbr/common.js.map +1 -1
  60. package/dist/material/msdf_text.js +3 -3
  61. package/dist/material/msdf_text.js.map +1 -1
  62. package/dist/material/msdf_text_sprite.js +4 -4
  63. package/dist/material/msdf_text_sprite.js.map +1 -1
  64. package/dist/material/pbrblueprint.js +102 -102
  65. package/dist/material/pbrblueprint.js.map +1 -1
  66. package/dist/render/envlight.js +54 -1
  67. package/dist/render/envlight.js.map +1 -1
  68. package/dist/render/sky.js +9 -0
  69. package/dist/render/sky.js.map +1 -1
  70. package/dist/scene/batchgroup.js +11 -13
  71. package/dist/scene/batchgroup.js.map +1 -1
  72. package/dist/scene/environment.js +15 -2
  73. package/dist/scene/environment.js.map +1 -1
  74. package/dist/scene/mesh.js +79 -16
  75. package/dist/scene/mesh.js.map +1 -1
  76. package/dist/scene/scene.js +1 -0
  77. package/dist/scene/scene.js.map +1 -1
  78. package/dist/scene/scene_node.js +203 -2
  79. package/dist/scene/scene_node.js.map +1 -1
  80. package/dist/text/font/cff_font.js +890 -0
  81. package/dist/text/font/cff_font.js.map +1 -0
  82. package/dist/text/font/font_asset.js +17 -3
  83. package/dist/text/font/font_asset.js.map +1 -1
  84. package/dist/text/msdf/generator.js.map +1 -1
  85. package/dist/text/msdf/shape.js +4 -1
  86. package/dist/text/msdf/shape.js.map +1 -1
  87. package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
  88. package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
  89. package/dist/utility/blueprint/material/inputs.js +1157 -1154
  90. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  91. package/dist/utility/bounding_volume.js.map +1 -1
  92. package/dist/utility/pmrem.js +34 -8
  93. package/dist/utility/pmrem.js.map +1 -1
  94. package/dist/utility/serialization/manager.js +22 -9
  95. package/dist/utility/serialization/manager.js.map +1 -1
  96. package/dist/utility/serialization/scene/animation.js +700 -7
  97. package/dist/utility/serialization/scene/animation.js.map +1 -1
  98. package/dist/utility/serialization/scene/mesh.js +64 -4
  99. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  100. package/dist/utility/serialization/scene/node.js +187 -8
  101. package/dist/utility/serialization/scene/node.js.map +1 -1
  102. package/dist/utility/serialization/types.js.map +1 -1
  103. package/dist/utility/textures/sheenlut.js +138 -0
  104. package/dist/utility/textures/sheenlut.js.map +1 -0
  105. package/package.json +2 -2
  106. package/dist/animation/ik/ik_chain_builder.js +0 -68
  107. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  108. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  109. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  110. package/dist/animation/ik/ik_track.js +0 -96
  111. package/dist/animation/ik/ik_track.js.map +0 -1
  112. package/dist/animation/ik_postprocessor.js +0 -71
  113. package/dist/animation/ik_postprocessor.js.map +0 -1
  114. package/dist/animation/joint_dynamics/math.js +0 -16
  115. package/dist/animation/joint_dynamics/math.js.map +0 -1
  116. package/dist/animation/manual_transform_processor.js +0 -156
  117. package/dist/animation/manual_transform_processor.js.map +0 -1
  118. package/dist/animation/skeleton_postprocessor.js +0 -50
  119. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  120. package/dist/animation/spring2/collision.js +0 -469
  121. package/dist/animation/spring2/collision.js.map +0 -1
  122. package/dist/animation/spring2/constraints.js +0 -329
  123. package/dist/animation/spring2/constraints.js.map +0 -1
  124. package/dist/animation/spring2/controller.js +0 -434
  125. package/dist/animation/spring2/controller.js.map +0 -1
  126. package/dist/animation/spring2/math.js +0 -16
  127. package/dist/animation/spring2/math.js.map +0 -1
  128. package/dist/animation/spring2/solver.js +0 -624
  129. package/dist/animation/spring2/solver.js.map +0 -1
  130. package/dist/animation/spring2/spring_system.js +0 -118
  131. package/dist/animation/spring2/spring_system.js.map +0 -1
  132. package/dist/animation/spring2/types.js +0 -19
  133. package/dist/animation/spring2/types.js.map +0 -1
  134. package/dist/animation/spring_postprocessor.js +0 -54
  135. package/dist/animation/spring_postprocessor.js.map +0 -1
  136. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1273
  137. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  138. package/dist/asset/loaders/gltf/helpers.js +0 -331
  139. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  140. package/dist/material/sprite3d.js +0 -301
  141. package/dist/material/sprite3d.js.map +0 -1
  142. package/dist/material/sprite3d_std.js +0 -116
  143. package/dist/material/sprite3d_std.js.map +0 -1
  144. package/dist/material/sprite3dblueprint.js +0 -235
  145. package/dist/material/sprite3dblueprint.js.map +0 -1
  146. package/dist/material/sprite_sdf.js +0 -106
  147. package/dist/material/sprite_sdf.js.map +0 -1
  148. package/dist/material/terrainmaterial.js +0 -368
  149. package/dist/material/terrainmaterial.js.map +0 -1
  150. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  151. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  152. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  153. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  154. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  155. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  156. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  157. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  158. package/dist/render/deferredlightpass.js +0 -510
  159. package/dist/render/deferredlightpass.js.map +0 -1
  160. package/dist/render/deferredshadowlightpass.js +0 -428
  161. package/dist/render/deferredshadowlightpass.js.map +0 -1
  162. package/dist/render/gbufferpass.js +0 -50
  163. package/dist/render/gbufferpass.js.map +0 -1
  164. package/dist/scene/sdftextsprite.js +0 -322
  165. package/dist/scene/sdftextsprite.js.map +0 -1
  166. package/dist/scene/sprite3d.js +0 -18
  167. package/dist/scene/sprite3d.js.map +0 -1
  168. package/dist/scene/terrain/grass.js +0 -280
  169. package/dist/scene/terrain/grass.js.map +0 -1
  170. package/dist/scene/terrain/heightfield.js +0 -475
  171. package/dist/scene/terrain/heightfield.js.map +0 -1
  172. package/dist/scene/terrain/patch.js +0 -532
  173. package/dist/scene/terrain/patch.js.map +0 -1
  174. package/dist/scene/terrain/quadtree.js +0 -461
  175. package/dist/scene/terrain/quadtree.js.map +0 -1
  176. package/dist/scene/terrain/terrain.js +0 -231
  177. package/dist/scene/terrain/terrain.js.map +0 -1
  178. package/dist/src/animation/animation.js +0 -127
  179. package/dist/src/animation/animation.js.map +0 -1
  180. package/dist/src/animation/animationset.js +0 -255
  181. package/dist/src/animation/animationset.js.map +0 -1
  182. package/dist/src/animation/animationtrack.js +0 -34
  183. package/dist/src/animation/animationtrack.js.map +0 -1
  184. package/dist/src/animation/eulerrotationtrack.js +0 -52
  185. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  186. package/dist/src/animation/morphtarget.js +0 -93
  187. package/dist/src/animation/morphtarget.js.map +0 -1
  188. package/dist/src/animation/morphtrack.js +0 -70
  189. package/dist/src/animation/morphtrack.js.map +0 -1
  190. package/dist/src/animation/proptrack.js +0 -161
  191. package/dist/src/animation/proptrack.js.map +0 -1
  192. package/dist/src/animation/rotationtrack.js +0 -51
  193. package/dist/src/animation/rotationtrack.js.map +0 -1
  194. package/dist/src/animation/scaletrack.js +0 -50
  195. package/dist/src/animation/scaletrack.js.map +0 -1
  196. package/dist/src/animation/skeleton.js +0 -204
  197. package/dist/src/animation/skeleton.js.map +0 -1
  198. package/dist/src/animation/translationtrack.js +0 -50
  199. package/dist/src/animation/translationtrack.js.map +0 -1
  200. package/dist/src/app/app.js +0 -129
  201. package/dist/src/app/app.js.map +0 -1
  202. package/dist/src/app/inputmgr.js +0 -267
  203. package/dist/src/app/inputmgr.js.map +0 -1
  204. package/dist/src/asset/assetmanager.js +0 -404
  205. package/dist/src/asset/assetmanager.js.map +0 -1
  206. package/dist/src/asset/builtin.js +0 -337
  207. package/dist/src/asset/builtin.js.map +0 -1
  208. package/dist/src/asset/loaders/dds/dds.js +0 -470
  209. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  210. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  211. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  212. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  213. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  214. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  215. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  216. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  217. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  218. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  219. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  220. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  221. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  222. package/dist/src/asset/loaders/loader.js +0 -45
  223. package/dist/src/asset/loaders/loader.js.map +0 -1
  224. package/dist/src/asset/model.js +0 -414
  225. package/dist/src/asset/model.js.map +0 -1
  226. package/dist/src/blitter/bilateralblur.js +0 -221
  227. package/dist/src/blitter/bilateralblur.js.map +0 -1
  228. package/dist/src/blitter/blitter.js +0 -390
  229. package/dist/src/blitter/blitter.js.map +0 -1
  230. package/dist/src/blitter/box.js +0 -118
  231. package/dist/src/blitter/box.js.map +0 -1
  232. package/dist/src/blitter/copy.js +0 -22
  233. package/dist/src/blitter/copy.js.map +0 -1
  234. package/dist/src/blitter/gaussianblur.js +0 -228
  235. package/dist/src/blitter/gaussianblur.js.map +0 -1
  236. package/dist/src/camera/base.js +0 -92
  237. package/dist/src/camera/base.js.map +0 -1
  238. package/dist/src/camera/camera.js +0 -1005
  239. package/dist/src/camera/camera.js.map +0 -1
  240. package/dist/src/camera/fps.js +0 -238
  241. package/dist/src/camera/fps.js.map +0 -1
  242. package/dist/src/camera/orbit.js +0 -245
  243. package/dist/src/camera/orbit.js.map +0 -1
  244. package/dist/src/camera/orthocamera.js +0 -167
  245. package/dist/src/camera/orthocamera.js.map +0 -1
  246. package/dist/src/camera/perspectivecamera.js +0 -141
  247. package/dist/src/camera/perspectivecamera.js.map +0 -1
  248. package/dist/src/index.js +0 -120
  249. package/dist/src/index.js.map +0 -1
  250. package/dist/src/material/blinn.js +0 -81
  251. package/dist/src/material/blinn.js.map +0 -1
  252. package/dist/src/material/grassmaterial.js +0 -113
  253. package/dist/src/material/grassmaterial.js.map +0 -1
  254. package/dist/src/material/lambert.js +0 -92
  255. package/dist/src/material/lambert.js.map +0 -1
  256. package/dist/src/material/material.js +0 -301
  257. package/dist/src/material/material.js.map +0 -1
  258. package/dist/src/material/meshmaterial.js +0 -704
  259. package/dist/src/material/meshmaterial.js.map +0 -1
  260. package/dist/src/material/mixins/albedocolor.js +0 -76
  261. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  262. package/dist/src/material/mixins/foliage.js +0 -47
  263. package/dist/src/material/mixins/foliage.js.map +0 -1
  264. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  265. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  266. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  267. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  268. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  269. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  270. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  271. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  272. package/dist/src/material/mixins/lit.js +0 -476
  273. package/dist/src/material/mixins/lit.js.map +0 -1
  274. package/dist/src/material/mixins/pbr/common.js +0 -918
  275. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  276. package/dist/src/material/mixins/texture.js +0 -172
  277. package/dist/src/material/mixins/texture.js.map +0 -1
  278. package/dist/src/material/mixins/vertexcolor.js +0 -56
  279. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  280. package/dist/src/material/particle.js +0 -178
  281. package/dist/src/material/particle.js.map +0 -1
  282. package/dist/src/material/pbrmr.js +0 -97
  283. package/dist/src/material/pbrmr.js.map +0 -1
  284. package/dist/src/material/pbrsg.js +0 -97
  285. package/dist/src/material/pbrsg.js.map +0 -1
  286. package/dist/src/material/shader/helper.js +0 -1209
  287. package/dist/src/material/shader/helper.js.map +0 -1
  288. package/dist/src/material/terrain-cm.js +0 -606
  289. package/dist/src/material/terrain-cm.js.map +0 -1
  290. package/dist/src/material/terrainmaterial.js +0 -375
  291. package/dist/src/material/terrainmaterial.js.map +0 -1
  292. package/dist/src/material/unlit.js +0 -41
  293. package/dist/src/material/unlit.js.map +0 -1
  294. package/dist/src/material/water.js +0 -417
  295. package/dist/src/material/water.js.map +0 -1
  296. package/dist/src/posteffect/bloom.js +0 -361
  297. package/dist/src/posteffect/bloom.js.map +0 -1
  298. package/dist/src/posteffect/compositor.js +0 -226
  299. package/dist/src/posteffect/compositor.js.map +0 -1
  300. package/dist/src/posteffect/fxaa.js +0 -273
  301. package/dist/src/posteffect/fxaa.js.map +0 -1
  302. package/dist/src/posteffect/grayscale.js +0 -69
  303. package/dist/src/posteffect/grayscale.js.map +0 -1
  304. package/dist/src/posteffect/motionblur.js +0 -96
  305. package/dist/src/posteffect/motionblur.js.map +0 -1
  306. package/dist/src/posteffect/posteffect.js +0 -126
  307. package/dist/src/posteffect/posteffect.js.map +0 -1
  308. package/dist/src/posteffect/sao.js +0 -324
  309. package/dist/src/posteffect/sao.js.map +0 -1
  310. package/dist/src/posteffect/ssr.js +0 -489
  311. package/dist/src/posteffect/ssr.js.map +0 -1
  312. package/dist/src/posteffect/taa.js +0 -172
  313. package/dist/src/posteffect/taa.js.map +0 -1
  314. package/dist/src/posteffect/tonemap.js +0 -94
  315. package/dist/src/posteffect/tonemap.js.map +0 -1
  316. package/dist/src/render/abuffer_oit.js +0 -361
  317. package/dist/src/render/abuffer_oit.js.map +0 -1
  318. package/dist/src/render/clipmap.js +0 -851
  319. package/dist/src/render/clipmap.js.map +0 -1
  320. package/dist/src/render/cluster_light.js +0 -333
  321. package/dist/src/render/cluster_light.js.map +0 -1
  322. package/dist/src/render/cull_visitor.js +0 -187
  323. package/dist/src/render/cull_visitor.js.map +0 -1
  324. package/dist/src/render/depthpass.js +0 -68
  325. package/dist/src/render/depthpass.js.map +0 -1
  326. package/dist/src/render/drawable_mixin.js +0 -227
  327. package/dist/src/render/drawable_mixin.js.map +0 -1
  328. package/dist/src/render/envlight.js +0 -463
  329. package/dist/src/render/envlight.js.map +0 -1
  330. package/dist/src/render/fbm_wavegenerator.js +0 -251
  331. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  332. package/dist/src/render/fft_wavegenerator.js +0 -1006
  333. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  334. package/dist/src/render/fullscreenquad.js +0 -38
  335. package/dist/src/render/fullscreenquad.js.map +0 -1
  336. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  337. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  338. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  339. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  340. package/dist/src/render/hzb.js +0 -273
  341. package/dist/src/render/hzb.js.map +0 -1
  342. package/dist/src/render/lightpass.js +0 -172
  343. package/dist/src/render/lightpass.js.map +0 -1
  344. package/dist/src/render/objectcolorpass.js +0 -51
  345. package/dist/src/render/objectcolorpass.js.map +0 -1
  346. package/dist/src/render/primitive.js +0 -364
  347. package/dist/src/render/primitive.js.map +0 -1
  348. package/dist/src/render/render_queue.js +0 -467
  349. package/dist/src/render/render_queue.js.map +0 -1
  350. package/dist/src/render/renderbundle_wrapper.js +0 -152
  351. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  352. package/dist/src/render/renderer.js +0 -455
  353. package/dist/src/render/renderer.js.map +0 -1
  354. package/dist/src/render/renderpass.js +0 -200
  355. package/dist/src/render/renderpass.js.map +0 -1
  356. package/dist/src/render/shadowmap_pass.js +0 -56
  357. package/dist/src/render/shadowmap_pass.js.map +0 -1
  358. package/dist/src/render/sky.js +0 -1103
  359. package/dist/src/render/sky.js.map +0 -1
  360. package/dist/src/render/weightedblended_oit.js +0 -168
  361. package/dist/src/render/weightedblended_oit.js.map +0 -1
  362. package/dist/src/scene/batchgroup.js +0 -162
  363. package/dist/src/scene/batchgroup.js.map +0 -1
  364. package/dist/src/scene/environment.js +0 -209
  365. package/dist/src/scene/environment.js.map +0 -1
  366. package/dist/src/scene/graph_node.js +0 -72
  367. package/dist/src/scene/graph_node.js.map +0 -1
  368. package/dist/src/scene/light.js +0 -416
  369. package/dist/src/scene/light.js.map +0 -1
  370. package/dist/src/scene/mesh.js +0 -341
  371. package/dist/src/scene/mesh.js.map +0 -1
  372. package/dist/src/scene/octree.js +0 -649
  373. package/dist/src/scene/octree.js.map +0 -1
  374. package/dist/src/scene/particlesys.js +0 -738
  375. package/dist/src/scene/particlesys.js.map +0 -1
  376. package/dist/src/scene/raycast_visitor.js +0 -103
  377. package/dist/src/scene/raycast_visitor.js.map +0 -1
  378. package/dist/src/scene/scene.js +0 -284
  379. package/dist/src/scene/scene.js.map +0 -1
  380. package/dist/src/scene/scene_node.js +0 -732
  381. package/dist/src/scene/scene_node.js.map +0 -1
  382. package/dist/src/scene/terrain/grass.js +0 -278
  383. package/dist/src/scene/terrain/grass.js.map +0 -1
  384. package/dist/src/scene/terrain/heightfield.js +0 -475
  385. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  386. package/dist/src/scene/terrain/patch.js +0 -530
  387. package/dist/src/scene/terrain/patch.js.map +0 -1
  388. package/dist/src/scene/terrain/quadtree.js +0 -461
  389. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  390. package/dist/src/scene/terrain/terrain.js +0 -246
  391. package/dist/src/scene/terrain/terrain.js.map +0 -1
  392. package/dist/src/scene/terrain-cm/grass.js +0 -594
  393. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  394. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  395. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  396. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  397. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  398. package/dist/src/scene/water.js +0 -374
  399. package/dist/src/scene/water.js.map +0 -1
  400. package/dist/src/shaders/atmosphere.js +0 -957
  401. package/dist/src/shaders/atmosphere.js.map +0 -1
  402. package/dist/src/shaders/fog.js +0 -112
  403. package/dist/src/shaders/fog.js.map +0 -1
  404. package/dist/src/shaders/misc.js +0 -266
  405. package/dist/src/shaders/misc.js.map +0 -1
  406. package/dist/src/shaders/noise.js +0 -222
  407. package/dist/src/shaders/noise.js.map +0 -1
  408. package/dist/src/shaders/pbr.js +0 -51
  409. package/dist/src/shaders/pbr.js.map +0 -1
  410. package/dist/src/shaders/shadow.js +0 -636
  411. package/dist/src/shaders/shadow.js.map +0 -1
  412. package/dist/src/shaders/ssr.js +0 -490
  413. package/dist/src/shaders/ssr.js.map +0 -1
  414. package/dist/src/shaders/temporal.js +0 -215
  415. package/dist/src/shaders/temporal.js.map +0 -1
  416. package/dist/src/shaders/water.js +0 -756
  417. package/dist/src/shaders/water.js.map +0 -1
  418. package/dist/src/shadow/esm.js +0 -237
  419. package/dist/src/shadow/esm.js.map +0 -1
  420. package/dist/src/shadow/pcf_opt.js +0 -181
  421. package/dist/src/shadow/pcf_opt.js.map +0 -1
  422. package/dist/src/shadow/pcf_pd.js +0 -189
  423. package/dist/src/shadow/pcf_pd.js.map +0 -1
  424. package/dist/src/shadow/shader.js +0 -37
  425. package/dist/src/shadow/shader.js.map +0 -1
  426. package/dist/src/shadow/shadow_impl.js +0 -15
  427. package/dist/src/shadow/shadow_impl.js.map +0 -1
  428. package/dist/src/shadow/shadowmapper.js +0 -790
  429. package/dist/src/shadow/shadowmapper.js.map +0 -1
  430. package/dist/src/shadow/ssm.js +0 -159
  431. package/dist/src/shadow/ssm.js.map +0 -1
  432. package/dist/src/shadow/vsm.js +0 -297
  433. package/dist/src/shadow/vsm.js.map +0 -1
  434. package/dist/src/shapes/box.js +0 -386
  435. package/dist/src/shapes/box.js.map +0 -1
  436. package/dist/src/shapes/cylinder.js +0 -125
  437. package/dist/src/shapes/cylinder.js.map +0 -1
  438. package/dist/src/shapes/plane.js +0 -88
  439. package/dist/src/shapes/plane.js.map +0 -1
  440. package/dist/src/shapes/shape.js +0 -87
  441. package/dist/src/shapes/shape.js.map +0 -1
  442. package/dist/src/shapes/sphere.js +0 -114
  443. package/dist/src/shapes/sphere.js.map +0 -1
  444. package/dist/src/shapes/tetrahedron.js +0 -188
  445. package/dist/src/shapes/tetrahedron.js.map +0 -1
  446. package/dist/src/shapes/torus.js +0 -111
  447. package/dist/src/shapes/torus.js.map +0 -1
  448. package/dist/src/utility/aabbtree.js +0 -400
  449. package/dist/src/utility/aabbtree.js.map +0 -1
  450. package/dist/src/utility/bounding_volume.js +0 -29
  451. package/dist/src/utility/bounding_volume.js.map +0 -1
  452. package/dist/src/utility/debug.js +0 -28
  453. package/dist/src/utility/debug.js.map +0 -1
  454. package/dist/src/utility/draco/decoder.js +0 -116
  455. package/dist/src/utility/draco/decoder.js.map +0 -1
  456. package/dist/src/utility/misc.js +0 -105
  457. package/dist/src/utility/misc.js.map +0 -1
  458. package/dist/src/utility/panorama.js +0 -163
  459. package/dist/src/utility/panorama.js.map +0 -1
  460. package/dist/src/utility/pmrem.js +0 -354
  461. package/dist/src/utility/pmrem.js.map +0 -1
  462. package/dist/src/utility/rendermipmap.js +0 -115
  463. package/dist/src/utility/rendermipmap.js.map +0 -1
  464. package/dist/src/utility/serialization/json.js +0 -402
  465. package/dist/src/utility/serialization/json.js.map +0 -1
  466. package/dist/src/utility/serialization/manager.js +0 -623
  467. package/dist/src/utility/serialization/manager.js.map +0 -1
  468. package/dist/src/utility/serialization/scene/animation.js +0 -248
  469. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  470. package/dist/src/utility/serialization/scene/batch.js +0 -59
  471. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  472. package/dist/src/utility/serialization/scene/camera.js +0 -790
  473. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  474. package/dist/src/utility/serialization/scene/common.js +0 -222
  475. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  476. package/dist/src/utility/serialization/scene/light.js +0 -575
  477. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  478. package/dist/src/utility/serialization/scene/material.js +0 -1111
  479. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  480. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  481. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  482. package/dist/src/utility/serialization/scene/misc.js +0 -39
  483. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  484. package/dist/src/utility/serialization/scene/node.js +0 -451
  485. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  486. package/dist/src/utility/serialization/scene/particle.js +0 -425
  487. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  488. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  489. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  490. package/dist/src/utility/serialization/scene/scene.js +0 -704
  491. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  492. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  493. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  494. package/dist/src/utility/serialization/scene/water.js +0 -465
  495. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  496. package/dist/src/utility/shprojector.js +0 -297
  497. package/dist/src/utility/shprojector.js.map +0 -1
  498. package/dist/src/utility/textures/ggxlut.js +0 -213
  499. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  500. package/dist/src/utility/textures/gradientnoise.js +0 -62
  501. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  502. package/dist/src/utility/textures/randomnoise.js +0 -41
  503. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  504. package/dist/src/values.js +0 -162
  505. package/dist/src/values.js.map +0 -1
  506. package/dist/utility/blueprint/material/common.js +0 -7
  507. package/dist/utility/blueprint/material/common.js.map +0 -1
  508. package/dist/utility/serialization/blueprint/constants.js +0 -255
  509. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  510. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  511. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  512. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  513. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  514. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  515. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  516. package/dist/utility/serialization/scene/spring_script.js +0 -596
  517. package/dist/utility/serialization/scene/spring_script.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator, Nullable } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { Mesh } from '../scene/mesh';\r\nimport type { BoundingBox } from '../utility';\r\nimport type { Scene } from '../scene';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\r\nimport { processMorphData } from '../animation/morphtarget';\r\nimport { MAX_MORPH_TARGETS } from '../values';\r\nimport { MorphTargetTrack } from '../animation/morphtrack';\r\nimport {\r\n FixedGeometryCacheTrack,\r\n type FixedGeometryCacheFrame\r\n} from '../animation/fixed_geometry_cache_track';\r\nimport { PCAGeometryCacheTrack, type PCAGeometryCacheTrackData } from '../animation/pca_geometry_cache_track';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Nullable<Texture2D>;\r\n sampler: Nullable<TextureSampler>;\r\n texCoord: number;\r\n transform: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: Nullable<MaterialTextureInfo>;\r\n bumpScale?: number;\r\n emissiveMap?: Nullable<MaterialTextureInfo>;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: Nullable<MaterialTextureInfo>;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: Nullable<MaterialTextureInfo>;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: Nullable<MaterialTextureInfo>;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatNormalMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: Nullable<MaterialTextureInfo>;\r\n thicknessFactor?: number;\r\n thicknessMap?: Nullable<MaterialTextureInfo>;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: Nullable<MaterialTextureInfo>;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: Nullable<MaterialTextureInfo>;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: Nullable<MaterialTextureInfo>;\r\n specularColorMap?: Nullable<MaterialTextureInfo>;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: DRef<Primitive>;\r\n material: DRef<MeshMaterial>;\r\n mesh?: Mesh;\r\n rawPositions: Nullable<Float32Array>;\r\n rawBlendIndices: Nullable<TypedArray>;\r\n rawJointWeights: Nullable<TypedArray>;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: Nullable<number[]>;\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\n/**\r\n * Fixed-frame geometry cache animation track data.\r\n *\r\n * @public\r\n */\r\nexport interface AssetFixedGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec?: 'fixed';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n frames: FixedGeometryCacheFrame[];\r\n}\r\n\r\n/**\r\n * PCA-compressed geometry cache animation track data.\r\n *\r\n * @public\r\n */\r\nexport interface AssetPCAGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec: 'pca';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n bounds: [number, number, number, number, number, number][];\r\n positionReference?: Nullable<Float32Array>;\r\n positionMean: Float32Array;\r\n positionBases: Float32Array[];\r\n positionCoefficients: Float32Array[];\r\n normalMean?: Nullable<Float32Array>;\r\n normalBases?: Nullable<Float32Array[]>;\r\n normalCoefficients?: Nullable<Float32Array[]>;\r\n}\r\n\r\n/**\r\n * Geometry cache animation track data.\r\n *\r\n * @public\r\n */\r\nexport type AssetGeometryCacheAnimationTrack =\r\n | AssetFixedGeometryCacheAnimationTrack\r\n | AssetPCAGeometryCacheAnimationTrack;\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: (AssetAnimationTrack | AssetGeometryCacheAnimationTrack)[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: Nullable<AssetHierarchyNode>;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: Nullable<AssetMeshData>;\r\n private _skeleton: Nullable<AssetSkeleton>;\r\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\r\n private _meshAttached: boolean;\r\n private _matrix: Nullable<Matrix4x4>;\r\n private _worldMatrix: Nullable<Matrix4x4>;\r\n private _weights: Nullable<number[]>;\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, parent?: Nullable<AssetHierarchyNode>) {\r\n super(name);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._meshAttached = false;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent() {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix() {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix() {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n set mesh(data) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances() {\r\n return this._instances ?? null;\r\n }\r\n /** Default morph target weights */\r\n get weights() {\r\n return this._weights;\r\n }\r\n set weights(val) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton() {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position() {\r\n return this._position;\r\n }\r\n set position(val) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(val) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n set scaling(val) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached() {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children() {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached() {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n if (child.meshAttached) {\r\n this.setMeshAttached();\r\n }\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n /** @internal */\r\n private setMeshAttached() {\r\n this._meshAttached = true;\r\n this._parent?.setMeshAttached();\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: Nullable<AssetHierarchyNode>;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPose = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPose.push({\r\n position: joint.position.clone(),\r\n rotation: joint.rotation.clone(),\r\n scale: joint.scaling.clone()\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /**\r\n * Creates an instance of SharedModel\r\n * @param name - Name of the model\r\n */\r\n constructor(name?: string) {\r\n super();\r\n this._name = name || '';\r\n this._skeletons = [];\r\n this._nodes = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._activeScene = -1;\r\n }\r\n /** Name of the model */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes() {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations() {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene() {\r\n return this._activeScene;\r\n }\r\n set activeScene(val) {\r\n this._activeScene = val;\r\n }\r\n /**\r\n * Adds a node to the scene\r\n * @param parent - Under which node the node should be added\r\n * @param index - Index of the node\r\n * @param name - Name of the node\r\n * @returns The added node\r\n */\r\n addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string) {\r\n const childNode = new AssetHierarchyNode(name, parent);\r\n this._nodes[index] = childNode;\r\n return childNode;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n createSceneNode(scene: Scene, instancing: boolean) {\r\n const group = new SceneNode(scene);\r\n group.name = this.name;\r\n const animationSet = group.animationSet;\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\r\n > = new Map();\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n this.setAssetNodeToSceneNode(\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n instancing\r\n );\r\n }\r\n for (const animationData of this.animations) {\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = animationSet.createAnimation(name, true)!;\r\n for (const track of animationData.tracks) {\r\n if (track.type === 'translation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeTranslationTrack(track.interpolator, true));\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeScaleTrack(track.interpolator, true));\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeRotationTrack(track.interpolator, true));\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh!.subMeshes) {\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n m.mesh!.getBoundingVolume()!.toAABB(),\r\n true\r\n );\r\n animation.addTrack(m.mesh!, morphTrack);\r\n }\r\n }\r\n } else if (track.type === 'geometry-cache') {\r\n const subMesh = track.node.mesh?.subMeshes[track.subMeshIndex];\r\n if (!subMesh?.mesh) {\r\n console.error(`Invalid geometry cache sub mesh: ${track.subMeshIndex}`);\r\n } else {\r\n if (track.codec === 'pca') {\r\n const pcaData = this.remapPCAGeometryCacheData(subMesh, track);\r\n animation.addTrack(subMesh.mesh, new PCAGeometryCacheTrack(pcaData, true));\r\n } else {\r\n const frames = this.remapGeometryCacheFrames(subMesh, track.frames);\r\n animation.addTrack(subMesh.mesh, new FixedGeometryCacheTrack(track.times, frames, true));\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.skeleton) {\r\n nodes.skeleton = new Skeleton(\r\n sk.joints.map((val) => nodeMap.get(val)!),\r\n sk.inverseBindMatrices,\r\n sk.bindPose\r\n );\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions!,\r\n blendIndices: nodes.bounding[i].rawBlendIndices!,\r\n weights: nodes.bounding[i].rawJointWeights!\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.skeleton.persistentId;\r\n }\r\n animationSet.skeletons.push(new DRef(nodes.skeleton));\r\n }\r\n animation.addSkeleton(nodes.skeleton.persistentId);\r\n }\r\n }\r\n }\r\n }\r\n group.iterate((child) => {\r\n if (child !== group) {\r\n child.sealed = true;\r\n }\r\n });\r\n group.sharedModel = this;\r\n return group;\r\n }\r\n\r\n private remapGeometryCacheFrames(subMesh: AssetSubMeshData, frames: FixedGeometryCacheFrame[]) {\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 = this.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: this.expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n }\r\n\r\n private remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: AssetPCAGeometryCacheAnimationTrack\r\n ): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? this.reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\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 {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n const remap = this.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 {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: this.expandGeometryCacheData(remapReference, remap),\r\n positionMean: this.expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => this.expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? this.expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n\r\n private reconstructPCAGeometryCacheReference(track: AssetPCAGeometryCacheAnimationTrack) {\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\n private 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 = this.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 = this.findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = this.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\n private 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\n private 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(this.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\n private findNearestGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\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\n private 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\r\n protected onDispose() {\r\n super.onDispose();\r\n const nodes = [...this._nodes];\r\n while (nodes.length > 0) {\r\n const node = nodes.shift();\r\n nodes.push(...node!.children);\r\n const mesh = node!.mesh;\r\n if (mesh) {\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh.primitive?.dispose();\r\n subMesh.material?.dispose();\r\n }\r\n }\r\n }\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private setAssetNodeToSceneNode(\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n instancing: boolean\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = assetNode.skeleton;\r\n for (const subMesh of meshData.subMeshes) {\r\n for (const instance of assetNode.instances!) {\r\n const meshNode = new Mesh(scene);\r\n const skinAnimation = !!skeleton;\r\n const morphAnimation = subMesh.numTargets > 0;\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n meshNode.primitive = subMesh.primitive.get()!;\r\n meshNode.material =\r\n instancing && !skinAnimation && !morphAnimation\r\n ? subMesh.material.get()!.createInstance()\r\n : subMesh.material.get()!.clone();\r\n meshNode.parent = node;\r\n subMesh.mesh = meshNode;\r\n processMorphData(subMesh, meshData.morphWeights!);\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\r\n }\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","subMesh","subMeshIndex","codec","pcaData","remapPCAGeometryCacheData","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","FixedGeometryCacheTrack","times","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","sourcePositions","sourceVertexCount","targetVertexCount","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","normals","boundingBox","remapReference","positionReference","reconstructPCAGeometryCacheReference","bounds","positionMean","positionBases","positionCoefficients","normalMean","normalBases","normalCoefficients","basis","reference","Float32Array","coefficients","componentCount","Math","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","key","geometryCachePositionKey","bucket","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","offset","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round","onDispose","shift","primitive","dispose","material","assetNode","meshData","instance","meshNode","Mesh","skinAnimation","morphAnimation","numTargets","s","r","clipTestEnabled","showState","createInstance","processMorphData","morphWeights","has"],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { TypedArray, Interpolator, Nullable, DeepPartial, VFS } from '@zephyr3d/base';\r\nimport {\r\n ASSERT,\r\n DRef,\r\n uint8ArrayToBase64,\r\n Vector4,\r\n Disposable,\r\n Matrix4x4,\r\n Quaternion,\r\n Vector3\r\n} from '@zephyr3d/base';\r\nimport type {\r\n PrimitiveType,\r\n Texture2D,\r\n TextureAddressMode,\r\n TextureFilterMode,\r\n TextureSampler,\r\n VertexAttribFormat,\r\n VertexSemantic\r\n} from '@zephyr3d/device';\r\nimport { getVertexFormatComponentCount } from '@zephyr3d/device';\r\nimport { Mesh } from '../scene/mesh';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport type { ColliderR } from '../animation/joint_dynamics/types';\r\nimport type { ControllerConfig } from '../animation/joint_dynamics/controller';\r\nimport type { ResourceManager } from '../utility/serialization/manager';\r\nimport type { Scene } from '../scene/scene';\r\nimport {\r\n SceneNode,\r\n setSceneMeshAssetBinding,\r\n type SceneMorphTargetBinding,\r\n type SceneMorphTargetGroup\r\n} from '../scene/scene_node';\r\nimport { SkeletonRig, SkinBinding } from '../animation/skeleton';\r\nimport type { FixedGeometryCacheFrame } from '../animation/fixed_geometry_cache_track';\r\nimport type { PCAGeometryCacheTrackData } from '../animation';\r\nimport {\r\n FixedGeometryCacheTrack,\r\n createTransformAccess,\r\n JointDynamicsModifier,\r\n JointDynamicsSystem,\r\n MorphTargetTrack,\r\n NodeRotationTrack,\r\n NodeScaleTrack,\r\n NodeTranslationTrack,\r\n PCAGeometryCacheTrack\r\n} from '../animation';\r\nimport { MAX_MORPH_ATTRIBUTES, MAX_MORPH_TARGETS } from '../values';\r\nimport { getDevice } from '../app/api';\r\nimport { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { UnlitMaterial } from '../material/unlit';\r\nimport { PBRSpecularGlossinessMaterial } from '../material/pbrsg';\r\nimport { PBRMetallicRoughnessMaterial } from '../material/pbrmr';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture sampler settings for model loading.\r\n * @public\r\n */\r\nexport interface AssetSamplerInfo {\r\n wrapS: TextureAddressMode;\r\n wrapT: TextureAddressMode;\r\n magFilter: TextureFilterMode;\r\n mipFilter: TextureFilterMode;\r\n minFilter: TextureFilterMode;\r\n}\r\n\r\n/**\r\n * Image payload information for model loading.\r\n * @public\r\n */\r\nexport interface AssetImageInfo {\r\n uri?: string;\r\n data?: Uint8Array<ArrayBuffer>;\r\n mimeType?: string;\r\n}\r\n\r\n/**\r\n * Vertex buffer payload information for model loading.\r\n * @public\r\n */\r\nexport interface AssetVertexBufferInfo {\r\n attrib: VertexAttribFormat;\r\n data: TypedArray;\r\n}\r\n\r\n/**\r\n * Primitive geometry information for model loading.\r\n * @public\r\n */\r\nexport interface AssetPrimitiveInfo {\r\n vertices: Record<VertexSemantic, { format: VertexAttribFormat; data: TypedArray }>;\r\n indices: Nullable<Uint16Array<ArrayBuffer> | Uint32Array<ArrayBuffer>>;\r\n indexCount: number;\r\n type: PrimitiveType;\r\n boxMin: Vector3;\r\n boxMax: Vector3;\r\n path?: string;\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface AssetTextureInfo {\r\n image: Nullable<AssetImageInfo>;\r\n sRGB?: boolean;\r\n sampler: Nullable<AssetSamplerInfo>;\r\n texCoord: number;\r\n transform: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Resolved material texture information.\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Texture2D;\r\n sampler: TextureSampler;\r\n texCoord: number;\r\n transform: Matrix4x4;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: AssetTextureInfo;\r\n bumpScale?: number;\r\n emissiveMap?: AssetTextureInfo;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: AssetTextureInfo;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n path?: string;\r\n material?: DRef<MeshMaterial>;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: AssetTextureInfo;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: AssetTextureInfo;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: AssetTextureInfo;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: AssetTextureInfo;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: AssetTextureInfo;\r\n clearCoatNormalMap?: AssetTextureInfo;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: AssetTextureInfo;\r\n thicknessFactor?: number;\r\n thicknessMap?: AssetTextureInfo;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: AssetTextureInfo;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: AssetTextureInfo;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: AssetTextureInfo;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: AssetTextureInfo;\r\n specularColorMap?: AssetTextureInfo;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: AssetTextureInfo;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: Nullable<AssetPrimitiveInfo>;\r\n material: Nullable<AssetMaterial>;\r\n rawPositions: Nullable<Float32Array>;\r\n rawBlendIndices: Nullable<TypedArray>;\r\n rawJointWeights: Nullable<TypedArray>;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: number[];\r\n morphNames?: string[];\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Morph target binding in a model-level expression/group.\r\n * @public\r\n */\r\nexport interface AssetMorphTargetBinding {\r\n /** Restrict this binding to runtime meshes created from this asset node. */\r\n node?: AssetHierarchyNode;\r\n /** Restrict this binding to runtime meshes created from this asset mesh. */\r\n mesh?: AssetMeshData;\r\n /** Morph target index in the source mesh. */\r\n targetIndex?: number;\r\n /** Morph target name in the source mesh. */\r\n targetName?: string;\r\n /** Weight contributed by this binding when the group weight is 1. */\r\n weight: number;\r\n}\r\n\r\n/**\r\n * Model-level morph target group, commonly used as a complete facial expression.\r\n * @public\r\n */\r\nexport interface AssetMorphTargetGroup {\r\n name: string;\r\n bindings: AssetMorphTargetBinding[];\r\n isBinary?: boolean;\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\n/**\r\n * A single geometry cache frame.\r\n * @public\r\n */\r\nexport interface AssetGeometryCacheFrame {\r\n positions: Float32Array;\r\n normals?: Nullable<Float32Array>;\r\n boundingBox: BoundingBox;\r\n}\r\n\r\n/**\r\n * Fixed-vertex geometry cache animation track information.\r\n * @public\r\n */\r\nexport interface AssetFixedGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec?: 'fixed';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n frames: AssetGeometryCacheFrame[];\r\n}\r\n\r\n/**\r\n * PCA-compressed geometry cache animation track information.\r\n * @public\r\n */\r\nexport interface AssetPCAGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec: 'pca';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n bounds: [number, number, number, number, number, number][];\r\n positionReference?: Nullable<Float32Array>;\r\n positionMean: Float32Array;\r\n positionBases: Float32Array[];\r\n positionCoefficients: Float32Array[];\r\n normalMean?: Nullable<Float32Array>;\r\n normalBases?: Nullable<Float32Array[]>;\r\n normalCoefficients?: Nullable<Float32Array[]>;\r\n}\r\n\r\n/**\r\n * Geometry cache animation track information.\r\n * @public\r\n */\r\nexport type AssetGeometryCacheAnimationTrack =\r\n | AssetFixedGeometryCacheAnimationTrack\r\n | AssetPCAGeometryCacheAnimationTrack;\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: (AssetAnimationTrack | AssetGeometryCacheAnimationTrack)[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: Nullable<AssetHierarchyNode>;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: Nullable<AssetMeshData>;\r\n private _skeleton: Nullable<AssetSkeleton>;\r\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\r\n private _matrix: Nullable<Matrix4x4>;\r\n private _worldMatrix: Nullable<Matrix4x4>;\r\n private _weights: Nullable<number[]>;\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, model: SharedModel, parent?: AssetHierarchyNode) {\r\n super(name);\r\n model.nodes.push(this);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent(): Nullable<AssetHierarchyNode> {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix() {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix() {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n set mesh(data) {\r\n this._mesh = data;\r\n }\r\n /** instances */\r\n get instances() {\r\n return this._instances;\r\n }\r\n /** Default morph target weights */\r\n get weights() {\r\n return this._weights;\r\n }\r\n set weights(val) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton() {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position(): Vector3 {\r\n return this._position;\r\n }\r\n set position(val: Vector3) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation(): Quaternion {\r\n return this._rotation;\r\n }\r\n set rotation(val: Quaternion) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling(): Vector3 {\r\n return this._scaling;\r\n }\r\n set scaling(val: Vector3) {\r\n this._scaling = val;\r\n }\r\n /** Children of the node */\r\n get children(): AssetHierarchyNode[] {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached() {\r\n return this._attachToSkeleton;\r\n }\r\n isParentOf(child: Nullable<AssetHierarchyNode>) {\r\n while (child && child !== this) {\r\n child = child.parent!;\r\n }\r\n return child === this;\r\n }\r\n getWorldPosition() {\r\n return new Vector3(this.worldMatrix!.m03, this.worldMatrix!.m13, this.worldMatrix!.m23);\r\n }\r\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: Nullable<AssetHierarchyNode>;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPose = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPose.push({\r\n position: joint.position.clone(),\r\n rotation: joint.rotation.clone(),\r\n scale: joint.scaling.clone()\r\n });\r\n }\r\n get root() {\r\n if (this.pivot) {\r\n return this.pivot;\r\n }\r\n let root = this.joints[0];\r\n for (let i = 1; i < this.joints.length; i++) {\r\n while (root && !root.isParentOf(this.joints[i])) {\r\n root = root.parent!;\r\n }\r\n }\r\n return root;\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Spring bone collider shape information.\r\n * @public\r\n */\r\nexport type AssetSpringBoneColliderShape =\r\n | {\r\n type: 'sphere';\r\n offset: Vector3;\r\n radius: number;\r\n inside?: boolean;\r\n }\r\n | {\r\n type: 'capsule';\r\n offset: Vector3;\r\n tail: Vector3;\r\n radius: number;\r\n inside?: boolean;\r\n }\r\n | {\r\n type: 'plane';\r\n offset: Vector3;\r\n normal: Vector3;\r\n };\r\n\r\n/**\r\n * Spring bone collider information.\r\n * @public\r\n */\r\nexport interface AssetSpringBoneCollider {\r\n name?: string;\r\n node: AssetHierarchyNode;\r\n shape: AssetSpringBoneColliderShape;\r\n}\r\n\r\n/**\r\n * Spring bone collider group information.\r\n * @public\r\n */\r\nexport interface AssetSpringBoneColliderGroup {\r\n name?: string;\r\n colliders: AssetSpringBoneCollider[];\r\n}\r\n\r\n/**\r\n * Spring bone joint information.\r\n * @public\r\n */\r\nexport interface AssetSpringBoneJoint {\r\n node: AssetHierarchyNode;\r\n hitRadius: number;\r\n stiffness: number;\r\n gravityPower: number;\r\n gravityDir: Vector3;\r\n dragForce: number;\r\n}\r\n\r\n/**\r\n * Spring bone chain information.\r\n * @public\r\n */\r\nexport interface AssetSpringBone {\r\n name?: string;\r\n center?: AssetHierarchyNode;\r\n joints: AssetSpringBoneJoint[];\r\n rootBones?: AssetHierarchyNode[];\r\n colliderGroups: AssetSpringBoneColliderGroup[];\r\n}\r\n\r\n/**\r\n * Joint dynamics collider information.\r\n * @public\r\n */\r\nexport interface AssetJointDynamicsCollider {\r\n name?: string;\r\n node: AssetHierarchyNode;\r\n localPosition: Vector3;\r\n localRotation: Quaternion;\r\n collider: ColliderR;\r\n}\r\n\r\n/**\r\n * Joint dynamics chain information.\r\n * @public\r\n */\r\nexport interface AssetJointDynamicsChain {\r\n start: AssetHierarchyNode;\r\n end: AssetHierarchyNode;\r\n}\r\n\r\n/**\r\n * Joint dynamics flat plane information.\r\n * @public\r\n */\r\nexport interface AssetJointDynamicsFlatPlane {\r\n node: AssetHierarchyNode;\r\n position: Vector3;\r\n up: Vector3;\r\n}\r\n\r\n/**\r\n * Joint dynamics spring bone information.\r\n * @public\r\n */\r\nexport interface AssetJointDynamicsSpringBone {\r\n name?: string;\r\n center?: AssetHierarchyNode;\r\n chains: AssetJointDynamicsChain[];\r\n controllerConfig: DeepPartial<ControllerConfig, 2>;\r\n colliders: AssetJointDynamicsCollider[];\r\n flatPlanes: AssetJointDynamicsFlatPlane[];\r\n}\r\n\r\n/**\r\n * Options controlling which model resources are persisted.\r\n * @public\r\n */\r\nexport type SaveOptions = {\r\n importMeshes: boolean;\r\n importSkeletons: boolean;\r\n importAnimations: boolean;\r\n};\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /** @internal */\r\n private _imageList: AssetImageInfo[];\r\n /** @internal */\r\n private _primitiveList: AssetPrimitiveInfo[];\r\n /** @internal */\r\n private _materialList: Record<string, AssetMaterial>;\r\n /** @internal */\r\n private _springBoneColliders: AssetSpringBoneCollider[];\r\n /** @internal */\r\n private _springBoneColliderGroups: AssetSpringBoneColliderGroup[];\r\n /** @internal */\r\n private _springBones: AssetSpringBone[];\r\n /** @internal */\r\n private _jointDynamicsColliders: AssetJointDynamicsCollider[];\r\n /** @internal */\r\n private _jointDynamicsSpringBones: AssetJointDynamicsSpringBone[];\r\n /** @internal */\r\n private _morphTargetGroups: AssetMorphTargetGroup[];\r\n /** @internal */\r\n private _textureMap: Map<AssetTextureInfo, DRef<Texture2D>>;\r\n /** @internal */\r\n private _primitiveMap: Map<AssetPrimitiveInfo, DRef<Primitive>>;\r\n\r\n /**\r\n * Creates an instance of SharedModel\r\n */\r\n constructor() {\r\n super();\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._imageList = [];\r\n this._primitiveList = [];\r\n this._materialList = {};\r\n this._springBoneColliders = [];\r\n this._springBoneColliderGroups = [];\r\n this._springBones = [];\r\n this._jointDynamicsColliders = [];\r\n this._jointDynamicsSpringBones = [];\r\n this._morphTargetGroups = [];\r\n this._activeScene = -1;\r\n this._textureMap = new Map();\r\n this._primitiveMap = new Map();\r\n }\r\n /** All scenes that the model contains */\r\n get scenes(): AssetScene[] {\r\n return this._scenes;\r\n }\r\n /** All Primitives that the model contains */\r\n get primitives(): AssetPrimitiveInfo[] {\r\n return this._primitiveList;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes(): AssetHierarchyNode[] {\r\n return this._nodes;\r\n }\r\n /** All animations that the model contains */\r\n get animations(): AssetAnimationData[] {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons(): AssetSkeleton[] {\r\n return this._skeletons;\r\n }\r\n /** All SpringBone colliders that the model contains */\r\n get springBoneColliders(): AssetSpringBoneCollider[] {\r\n return this._springBoneColliders;\r\n }\r\n /** All SpringBone collider groups that the model contains */\r\n get springBoneColliderGroups(): AssetSpringBoneColliderGroup[] {\r\n return this._springBoneColliderGroups;\r\n }\r\n /** All SpringBone springs that the model contains */\r\n get springBones(): AssetSpringBone[] {\r\n return this._springBones;\r\n }\r\n /** SpringBone colliders converted to Zephyr3D JointDynamics collider format */\r\n get jointDynamicsColliders(): AssetJointDynamicsCollider[] {\r\n return this._jointDynamicsColliders;\r\n }\r\n /** SpringBone springs converted to Zephyr3D JointDynamics system format */\r\n get jointDynamicsSpringBones(): AssetJointDynamicsSpringBone[] {\r\n return this._jointDynamicsSpringBones;\r\n }\r\n /** Model-level morph target groups, commonly facial expressions. */\r\n get morphTargetGroups(): AssetMorphTargetGroup[] {\r\n return this._morphTargetGroups;\r\n }\r\n /** The active scene of the model */\r\n get activeScene(): number {\r\n return this._activeScene;\r\n }\r\n set activeScene(val: number) {\r\n this._activeScene = val;\r\n }\r\n getImage(index: number) {\r\n return this._imageList[index];\r\n }\r\n setImage(index: number, img: AssetImageInfo) {\r\n this._imageList[index] = img;\r\n }\r\n getMaterial(hash: string) {\r\n return this._materialList[hash];\r\n }\r\n setMaterial(hash: string, material: AssetMaterial) {\r\n this._materialList[hash] = material;\r\n }\r\n addPrimitive(prim: AssetPrimitiveInfo) {\r\n this._primitiveList.push(prim);\r\n }\r\n /**\r\n * Adds a model-level morph target group.\r\n * @param group - Morph target group to add\r\n */\r\n addMorphTargetGroup(group: AssetMorphTargetGroup) {\r\n if (group?.name && group.bindings?.length > 0) {\r\n this._morphTargetGroups.push(group);\r\n }\r\n }\r\n /**\r\n * Removes all model-level morph target groups.\r\n */\r\n clearMorphTargetGroups() {\r\n this._morphTargetGroups = [];\r\n }\r\n /**\r\n * Finds a model-level morph target group by name.\r\n * @param name - Group name\r\n * @returns The matching group, or null if not found\r\n */\r\n getMorphTargetGroup(name: string): Nullable<AssetMorphTargetGroup> {\r\n return this._morphTargetGroups.find((group) => group.name === name) ?? null;\r\n }\r\n /**\r\n * Builds morph target groups by collecting morph target names from every mesh.\r\n * @returns Generated morph target groups\r\n */\r\n buildMorphTargetGroupsByName(): AssetMorphTargetGroup[] {\r\n this.clearMorphTargetGroups();\r\n const groups = new Map<string, AssetMorphTargetGroup>();\r\n const meshes = new Set<AssetMeshData>();\r\n for (const node of this._nodes) {\r\n if (node.mesh) {\r\n meshes.add(node.mesh);\r\n }\r\n }\r\n for (const mesh of meshes) {\r\n const count = getAssetMeshMorphTargetCount(mesh);\r\n for (let i = 0; i < count; i++) {\r\n const targetName = getAssetMeshMorphTargetName(mesh, i);\r\n let group = groups.get(targetName);\r\n if (!group) {\r\n group = { name: targetName, bindings: [] };\r\n groups.set(targetName, group);\r\n }\r\n group.bindings.push({\r\n mesh,\r\n targetIndex: i,\r\n targetName,\r\n weight: 1\r\n });\r\n }\r\n }\r\n this._morphTargetGroups = Array.from(groups.values());\r\n return this._morphTargetGroups;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n static async writePrimitive(vfs: VFS, primitive: AssetPrimitiveInfo, path: string) {\r\n const data = {\r\n vertices: {} as Record<VertexSemantic, { format: VertexAttribFormat; data: string }>,\r\n indices: primitive.indices\r\n ? uint8ArrayToBase64(\r\n new Uint8Array(\r\n primitive.indices.buffer,\r\n primitive.indices.byteOffset,\r\n primitive.indices.byteLength\r\n )\r\n )\r\n : null,\r\n indexType: primitive.indices ? (primitive.indices instanceof Uint16Array ? 'u16' : 'u32') : '',\r\n indexCount: primitive.indexCount,\r\n type: primitive.type,\r\n boxMin: [primitive.boxMin.x, primitive.boxMin.y, primitive.boxMin.z],\r\n boxMax: [primitive.boxMax.x, primitive.boxMax.y, primitive.boxMax.z]\r\n };\r\n for (const k in primitive.vertices) {\r\n const v = primitive.vertices[k as VertexSemantic];\r\n data.vertices[k as VertexSemantic] = {\r\n format: v.format,\r\n data: uint8ArrayToBase64(new Uint8Array(v.data.buffer, v.data.byteOffset, v.data.byteLength))\r\n };\r\n }\r\n const content = JSON.stringify({ type: 'Primitive', data }, null, 2);\r\n await vfs.writeFile(path, content, { encoding: 'utf8', create: true });\r\n }\r\n /** preprocess */\r\n async preprocess(\r\n manager: ResourceManager,\r\n name: string,\r\n destPath: string,\r\n srcVFS: VFS,\r\n dstVFS: VFS\r\n ): Promise<void> {\r\n const destName = name;\r\n if (this._imageList.length > 0) {\r\n console.info(`Importing ${this._imageList.length} textures`);\r\n for (let i = 0; i < this._imageList.length; i++) {\r\n const img = this._imageList[i];\r\n if (!img) {\r\n continue;\r\n }\r\n let ext: string = '';\r\n const mimeType = img.uri ? srcVFS.guessMIMEType(img.uri) : img.data ? img.mimeType : '';\r\n if (mimeType === 'image/jpeg') {\r\n ext = '.jpg';\r\n } else if (mimeType === 'image/png') {\r\n ext = '.png';\r\n } else if (mimeType === 'image/webp') {\r\n ext = '.webp';\r\n } else if (mimeType === 'image/tga') {\r\n ext = '.tga';\r\n } else if (mimeType === 'image/vnd.radiance') {\r\n ext = '.hdr';\r\n } else if (mimeType === 'image/ktx') {\r\n ext = '.ktx';\r\n } else if (mimeType === 'image/ktx2') {\r\n ext = '.ktx2';\r\n } else {\r\n continue;\r\n }\r\n ASSERT(!!ext, `Unknown image mime type: ${mimeType}`);\r\n const path = dstVFS.join(destPath, `${destName}_texture_${i}${ext}`);\r\n if (img.uri) {\r\n img.data = new Uint8Array((await srcVFS.readFile(img.uri, { encoding: 'binary' })) as ArrayBuffer);\r\n }\r\n await dstVFS.writeFile(\r\n path,\r\n img.data!.buffer.slice(img.data!.byteOffset, img.data!.byteOffset + img.data!.byteLength),\r\n { encoding: 'binary', create: true }\r\n );\r\n img.uri = path;\r\n img.data = undefined;\r\n img.mimeType = '';\r\n }\r\n }\r\n const materialKeys = Object.keys(this._materialList);\r\n if (materialKeys.length > 0) {\r\n console.info(`Importing ${materialKeys.length} materials`);\r\n for (const k of materialKeys) {\r\n const path = dstVFS.join(destPath, `${destName}_material_${k}.zmtl`);\r\n const m = await this.createMaterial(manager, this._materialList[k], dstVFS);\r\n const data = await manager.serializeObject(m);\r\n const content = JSON.stringify({ type: 'Default', data }, null, 2);\r\n await dstVFS.writeFile(path, content, { encoding: 'utf8', create: true });\r\n this._materialList[k].path = path;\r\n m!.dispose();\r\n }\r\n }\r\n if (this._primitiveList.length > 0) {\r\n console.info(`Importing ${this._primitiveList.length} meshes`);\r\n for (let i = 0; i < this._primitiveList.length; i++) {\r\n const info = this._primitiveList[i];\r\n if (!info) {\r\n continue;\r\n }\r\n const path = dstVFS.join(destPath, `${destName}_mesh_${i}.zmsh`);\r\n await SharedModel.writePrimitive(dstVFS, info, path);\r\n info.path = path;\r\n }\r\n }\r\n }\r\n createJointDynamics(rootNode: SceneNode, nodeMap: Map<AssetHierarchyNode, SceneNode>) {\r\n if (rootNode.animationSet.rigs.length === 0) {\r\n return;\r\n }\r\n for (const jd of this._jointDynamicsSpringBones) {\r\n const chains = jd.chains\r\n .map((chain) => {\r\n const start = nodeMap.get(chain.start)!;\r\n const end = nodeMap.get(chain.end)!;\r\n return { start, end };\r\n })\r\n .filter((chain) => {\r\n if (!chain.start || !chain.end) {\r\n return false;\r\n }\r\n return true;\r\n });\r\n const rigs = rootNode.animationSet.rigs.filter((ref) => {\r\n const joints = ref.get()!.joints;\r\n return chains.every((chain) => joints.includes(chain.start));\r\n });\r\n if (rigs.length === 0) {\r\n continue;\r\n }\r\n const colliders = jd.colliders\r\n .map((collider) => {\r\n const parent = nodeMap.get(collider.node);\r\n if (!parent) {\r\n return null;\r\n }\r\n const node = new SceneNode(parent.scene);\r\n node.name = collider.name ? `${collider.name}_JointDynamicsCollider` : 'JointDynamicsCollider';\r\n node.parent = parent;\r\n node.position.set(collider.localPosition);\r\n node.rotation.set(collider.localRotation);\r\n return {\r\n r: { ...collider.collider },\r\n transform: createTransformAccess(node)\r\n };\r\n })\r\n .filter(\r\n (collider): collider is { r: ColliderR; transform: ReturnType<typeof createTransformAccess> } => {\r\n return !!collider;\r\n }\r\n );\r\n const flatPlanes = jd.flatPlanes\r\n .map((flatPlane) => {\r\n const node = nodeMap.get(flatPlane.node);\r\n if (!node) {\r\n return null;\r\n }\r\n const up = node.worldMatrix.transformVectorAffine(flatPlane.up, new Vector3());\r\n if (up.magnitudeSq === 0) {\r\n return null;\r\n }\r\n return {\r\n up: up.inplaceNormalize(),\r\n position: node.worldMatrix.transformPointAffine(flatPlane.position, new Vector3())\r\n };\r\n })\r\n .filter((flatPlane): flatPlane is { up: Vector3; position: Vector3 } => {\r\n return !!flatPlane;\r\n });\r\n for (const rig of rigs) {\r\n const system = new JointDynamicsSystem(\r\n {\r\n chainConfig: {\r\n chains,\r\n systemRoot: rootNode\r\n },\r\n controllerConfig: jd.controllerConfig\r\n },\r\n colliders,\r\n [],\r\n flatPlanes\r\n );\r\n const modifier = new JointDynamicsModifier(system);\r\n rig.get()!.modifiers.push(modifier);\r\n }\r\n }\r\n }\r\n private createMorphTargetGroups(rootNode: SceneNode, meshMap: Map<AssetSubMeshData, Mesh>) {\r\n const runtimeGroups: SceneMorphTargetGroup[] = [];\r\n for (const group of this._morphTargetGroups) {\r\n const bindings: SceneMorphTargetBinding[] = [];\r\n for (const binding of group.bindings) {\r\n const assetMesh = binding.node?.mesh ?? binding.mesh ?? null;\r\n if (!assetMesh) {\r\n continue;\r\n }\r\n for (const subMesh of assetMesh.subMeshes) {\r\n const mesh = meshMap.get(subMesh);\r\n if (mesh) {\r\n bindings.push({\r\n mesh,\r\n targetIndex: binding.targetIndex,\r\n targetName: binding.targetName,\r\n weight: binding.weight\r\n });\r\n }\r\n }\r\n }\r\n if (bindings.length > 0) {\r\n runtimeGroups.push({\r\n name: group.name,\r\n bindings,\r\n isBinary: group.isBinary,\r\n weight: this.getInitialMorphTargetGroupWeight(bindings, group.isBinary)\r\n });\r\n }\r\n }\r\n rootNode.morphTargetGroups = runtimeGroups;\r\n }\r\n private getInitialMorphTargetGroupWeight(bindings: SceneMorphTargetBinding[], isBinary?: boolean): number {\r\n let result = 0;\r\n let found = false;\r\n for (const binding of bindings) {\r\n if (!binding.weight) {\r\n continue;\r\n }\r\n const targetWeight = this.getMorphTargetBindingWeight(binding);\r\n if (targetWeight === null) {\r\n continue;\r\n }\r\n const groupWeight = targetWeight / binding.weight;\r\n if (!found || Math.abs(groupWeight) > Math.abs(result)) {\r\n result = groupWeight;\r\n found = true;\r\n }\r\n }\r\n return isBinary ? (result > 0.5 ? 1 : 0) : result;\r\n }\r\n private getMorphTargetBindingWeight(binding: SceneMorphTargetBinding): Nullable<number> {\r\n const targetIndex = binding.targetIndex;\r\n if (\r\n typeof targetIndex === 'number' &&\r\n targetIndex >= 0 &&\r\n targetIndex < binding.mesh.getNumMorphTargets()\r\n ) {\r\n const targetName = binding.mesh.getMorphTargetName(targetIndex);\r\n if (targetName) {\r\n return binding.mesh.getMorphWeight(targetName);\r\n }\r\n }\r\n if (binding.targetName) {\r\n return binding.mesh.getMorphWeight(binding.targetName);\r\n }\r\n return null;\r\n }\r\n async createSceneNode(\r\n manager: ResourceManager,\r\n scene: Scene,\r\n instancing: boolean,\r\n saveMeshes: boolean,\r\n saveSkeletons: boolean,\r\n saveAnimations: boolean,\r\n saveJointDynamics: boolean,\r\n srcVFS: VFS\r\n ): Promise<SceneNode> {\r\n const group = new SceneNode(scene);\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n const meshMap: Map<AssetSubMeshData, Mesh> = new Map();\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; binding?: SkinBinding }\r\n > = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n await this.setAssetNodeToSceneNode(\r\n manager,\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n meshMap,\r\n instancing,\r\n saveMeshes,\r\n saveSkeletons,\r\n saveAnimations,\r\n srcVFS\r\n );\r\n }\r\n if (saveSkeletons) {\r\n for (const sk of this.skeletons) {\r\n if (!skeletonMeshMap.has(sk)) {\r\n skeletonMeshMap.set(sk, {\r\n mesh: [],\r\n bounding: []\r\n });\r\n }\r\n }\r\n const rigMap = new Map<string, SkeletonRig>();\r\n for (const v of skeletonMeshMap) {\r\n const sk = v[0];\r\n const joints = sk.joints.map((val) => {\r\n const node = nodeMap.get(val)!;\r\n node.jointTypeT = 'static';\r\n node.jointTypeS = 'static';\r\n node.jointTypeR = 'static';\r\n return node;\r\n });\r\n const rootJoint = sk.root ? (nodeMap.get(sk.root) ?? null) : null;\r\n const rigKey = SkeletonRig.getRigKey(joints, rootJoint);\r\n let rig = rigMap.get(rigKey);\r\n if (!rig) {\r\n rig = new SkeletonRig(joints, sk.bindPose, { rootJoint });\r\n rigMap.set(rigKey, rig);\r\n group.animationSet.rigs.push(new DRef(rig));\r\n }\r\n const binding = new SkinBinding(rig, sk.inverseBindMatrices, joints);\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.binding) {\r\n nodes.binding = binding;\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions!,\r\n blendIndices: nodes.bounding[i].rawBlendIndices!,\r\n weights: nodes.bounding[i].rawJointWeights!\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.binding.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.binding.persistentId;\r\n }\r\n }\r\n }\r\n group.animationSet.skeletons.push(new DRef(nodes!.binding));\r\n }\r\n }\r\n if (saveAnimations) {\r\n for (const animationData of this.animations) {\r\n if (animationData.skeletons.length > 0 && !saveSkeletons) {\r\n continue;\r\n }\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (group.animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!group.animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = group.animationSet.createAnimation(name, true)!;\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n animation.addSkeleton(nodes.binding!.rig.persistentId);\r\n }\r\n }\r\n for (const track of animationData.tracks) {\r\n const target = nodeMap.get(track.node)!;\r\n if (track.type === 'translation') {\r\n animation.addTrack(target, new NodeTranslationTrack(track.interpolator, true));\r\n target.jointTypeT = 'animated';\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(target, new NodeScaleTrack(track.interpolator, true));\r\n target.jointTypeS = 'animated';\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(target, new NodeRotationTrack(track.interpolator, true));\r\n target.jointTypeR = 'animated';\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh!.subMeshes) {\r\n const mesh = meshMap.get(m)!;\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n mesh.getBoundingVolume()!.toAABB(),\r\n true\r\n );\r\n animation.addTrack(mesh, morphTrack);\r\n }\r\n }\r\n } else if (track.type === 'geometry-cache') {\r\n const subMesh = track.node.mesh?.subMeshes[track.subMeshIndex];\r\n const mesh = subMesh ? meshMap.get(subMesh) : null;\r\n if (!subMesh || !mesh) {\r\n console.error(`Invalid geometry cache sub mesh: ${track.subMeshIndex}`);\r\n } else {\r\n if (track.codec === 'pca') {\r\n const pcaData = this.remapPCAGeometryCacheData(subMesh, track);\r\n animation.addTrack(mesh, new PCAGeometryCacheTrack(pcaData, true));\r\n } else {\r\n const frames = this.remapGeometryCacheFrames(subMesh, track.frames);\r\n animation.addTrack(mesh, new FixedGeometryCacheTrack(track.times, frames, true));\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (saveJointDynamics && saveSkeletons) {\r\n this.createJointDynamics(group, nodeMap);\r\n }\r\n this.createMorphTargetGroups(group, meshMap);\r\n return group;\r\n }\r\n\r\n private remapGeometryCacheFrames(subMesh: AssetSubMeshData, frames: FixedGeometryCacheFrame[]) {\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 = this.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: this.expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n }\r\n\r\n private remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: AssetPCAGeometryCacheAnimationTrack\r\n ): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? this.reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\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 {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n const remap = this.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 {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: this.expandGeometryCacheData(remapReference, remap),\r\n positionMean: this.expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => this.expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? this.expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n\r\n private reconstructPCAGeometryCacheReference(track: AssetPCAGeometryCacheAnimationTrack) {\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\n private 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 = this.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 = this.findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = this.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\n private 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\n private 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(this.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\n private findNearestGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\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\n private 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\r\n protected onDispose() {\r\n super.onDispose();\r\n for (const prim of this._primitiveMap.values()) {\r\n prim.dispose();\r\n }\r\n for (const tex of this._textureMap.values()) {\r\n tex.dispose();\r\n }\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private async setAssetNodeToSceneNode(\r\n manager: ResourceManager,\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n meshMap: Map<AssetSubMeshData, Mesh>,\r\n instancing: boolean,\r\n saveMeshes: boolean,\r\n saveSkeletons: boolean,\r\n saveAnimations: boolean,\r\n srcVFS: VFS\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (saveMeshes && assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = saveSkeletons ? assetNode.skeleton : null;\r\n for (const subMesh of meshData.subMeshes) {\r\n if (assetNode.instances.length === 0) {\r\n assetNode.instances.push({ t: Vector3.zero(), s: Vector3.one(), r: Quaternion.identity() });\r\n }\r\n for (const instance of assetNode.instances) {\r\n const meshNode = new Mesh(scene);\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n if (!this._primitiveMap.get(subMesh.primitive!)) {\r\n this._primitiveMap.set(\r\n subMesh.primitive!,\r\n new DRef((await this.createPrimitive(manager, subMesh.primitive!, srcVFS)) ?? undefined)\r\n );\r\n }\r\n meshNode.primitive = this._primitiveMap.get(subMesh.primitive!)!.get()!;\r\n if (!subMesh.material!.material) {\r\n subMesh.material!.material = new DRef(\r\n (await this.createMaterial(manager, subMesh.material!, srcVFS)) ?? undefined\r\n );\r\n }\r\n meshNode.material = subMesh.material!.material?.get() ?? null;\r\n if (instancing) {\r\n meshNode.material = meshNode.material!.createInstance();\r\n }\r\n meshNode.parent = node;\r\n meshMap.set(subMesh, meshNode);\r\n setSceneMeshAssetBinding(meshNode, { node: assetNode, mesh: meshData, subMesh });\r\n processMorphData(\r\n subMesh,\r\n meshNode,\r\n assetNode.weights ?? meshData.morphWeights,\r\n meshData.morphNames\r\n );\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n await this.setAssetNodeToSceneNode(\r\n manager,\r\n scene,\r\n node,\r\n child,\r\n skeletonMeshMap,\r\n nodeMap,\r\n meshMap,\r\n instancing,\r\n saveMeshes,\r\n saveSkeletons,\r\n saveAnimations,\r\n srcVFS\r\n );\r\n }\r\n return node;\r\n }\r\n private async image2Texture(\r\n manager: ResourceManager,\r\n info: AssetTextureInfo,\r\n srcVFS: VFS\r\n ): Promise<Nullable<Texture2D>> {\r\n if (info.image!.uri) {\r\n const texture = await manager.fetchTexture<Texture2D>(info.image!.uri, {\r\n linearColorSpace: !info.sRGB,\r\n overrideVFS: srcVFS\r\n });\r\n texture.name = info.image!.uri;\r\n return texture;\r\n } else if (info.image!.data && info.image!.mimeType) {\r\n const texture = await manager.loadTextureFromBuffer<Texture2D>(\r\n info.image!.data,\r\n info.image!.mimeType,\r\n !!info.sRGB\r\n );\r\n return texture;\r\n }\r\n return null;\r\n }\r\n private async createTexture(\r\n manager: ResourceManager,\r\n info: AssetTextureInfo,\r\n srcVFS: VFS\r\n ): Promise<Nullable<MaterialTextureInfo>> {\r\n try {\r\n let textureRef = this._textureMap.get(info);\r\n if (!textureRef) {\r\n textureRef = new DRef(await this.image2Texture(manager, info, srcVFS));\r\n this._textureMap.set(info, textureRef);\r\n }\r\n const sampler = getDevice().createSampler({\r\n addressU: info.sampler!.wrapS,\r\n addressV: info.sampler!.wrapT,\r\n magFilter: info.sampler!.magFilter,\r\n minFilter: info.sampler!.minFilter,\r\n mipFilter: info.sampler!.mipFilter\r\n });\r\n const transform = info.transform!;\r\n const texCoord = info.texCoord;\r\n return {\r\n texture: textureRef.get()!,\r\n sampler,\r\n texCoord,\r\n transform\r\n };\r\n } catch (err) {\r\n console.error(`Load asset texture failed: ${err}`);\r\n return null;\r\n }\r\n }\r\n\r\n private async createPrimitive(\r\n manager: ResourceManager,\r\n info: AssetPrimitiveInfo,\r\n srcVFS: VFS\r\n ): Promise<Nullable<Primitive>> {\r\n if (info.path) {\r\n return manager.fetchPrimitive(info.path, { overrideVFS: srcVFS });\r\n }\r\n const primitive = new Primitive();\r\n for (const k in info.vertices) {\r\n const v = info.vertices[k as VertexSemantic];\r\n primitive.createAndSetVertexBuffer(v.format, v.data);\r\n }\r\n if (info.indices) {\r\n primitive.createAndSetIndexBuffer(info.indices);\r\n }\r\n primitive.primitiveType = info.type;\r\n primitive.indexCount = info.indexCount;\r\n primitive.setBoundingVolume(new BoundingBox(info.boxMin, info.boxMax));\r\n return primitive;\r\n }\r\n private async createMaterial(\r\n manager: ResourceManager,\r\n assetMaterial: AssetMaterial,\r\n srcVFS: VFS\r\n ): Promise<Nullable<MeshMaterial>> {\r\n if (assetMaterial.path) {\r\n return manager.fetchMaterial<MeshMaterial>(assetMaterial.path, { overrideVFS: srcVFS });\r\n }\r\n const infoMap: Map<AssetTextureInfo, Nullable<MaterialTextureInfo>> = new Map();\r\n const that = this;\r\n async function getTextureInfo(info: AssetTextureInfo): Promise<Nullable<MaterialTextureInfo>> {\r\n let t = infoMap.get(info);\r\n if (t === undefined) {\r\n t = await that.createTexture(manager, info, srcVFS);\r\n infoMap.set(info, t);\r\n }\r\n return t;\r\n }\r\n if (assetMaterial.type === 'unlit') {\r\n const unlitAssetMaterial = assetMaterial as AssetUnlitMaterial;\r\n const unlitMaterial = new UnlitMaterial();\r\n unlitMaterial.albedoColor = unlitAssetMaterial.diffuse ?? Vector4.one();\r\n if (unlitAssetMaterial.diffuseMap) {\r\n const info = await getTextureInfo(unlitAssetMaterial.diffuseMap);\r\n if (info) {\r\n unlitMaterial.albedoTexture = info.texture;\r\n unlitMaterial.albedoTextureSampler = info.sampler;\r\n unlitMaterial.albedoTexCoordIndex = info.texCoord;\r\n unlitMaterial.albedoTexCoordMatrix = info.transform;\r\n }\r\n }\r\n unlitMaterial.vertexColor = unlitAssetMaterial.common.vertexColor!;\r\n if (assetMaterial.common.alphaMode === 'blend') {\r\n unlitMaterial.blendMode = 'blend';\r\n } else if (assetMaterial.common.alphaMode === 'mask') {\r\n unlitMaterial.alphaCutoff = assetMaterial.common.alphaCutoff!;\r\n }\r\n if (assetMaterial.common.doubleSided) {\r\n unlitMaterial.cullMode = 'none';\r\n }\r\n return unlitMaterial;\r\n } else if (assetMaterial.type === 'pbrSpecularGlossiness') {\r\n const assetPBRMaterial = assetMaterial as AssetPBRMaterialSG;\r\n const pbrMaterial = new PBRSpecularGlossinessMaterial();\r\n pbrMaterial.ior = assetPBRMaterial.ior!;\r\n pbrMaterial.albedoColor = assetPBRMaterial.diffuse!;\r\n pbrMaterial.specularFactor = new Vector3(\r\n assetPBRMaterial.specular!.x,\r\n assetPBRMaterial.specular!.y,\r\n assetPBRMaterial.specular!.z\r\n );\r\n pbrMaterial.glossinessFactor = assetPBRMaterial.glossness!;\r\n if (assetPBRMaterial.diffuseMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.diffuseMap);\r\n if (info) {\r\n pbrMaterial.albedoTexture = info.texture;\r\n pbrMaterial.albedoTextureSampler = info.sampler;\r\n pbrMaterial.albedoTexCoordIndex = info.texCoord;\r\n pbrMaterial.albedoTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.common.normalMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.common.normalMap);\r\n if (info) {\r\n pbrMaterial.normalTexture = info.texture;\r\n pbrMaterial.normalTextureSampler = info.sampler;\r\n pbrMaterial.normalTexCoordIndex = info.texCoord;\r\n pbrMaterial.normalTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale!;\r\n if (assetPBRMaterial.common.emissiveMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.common.emissiveMap);\r\n if (info) {\r\n pbrMaterial.emissiveTexture = info.texture;\r\n pbrMaterial.emissiveTextureSampler = info.sampler;\r\n pbrMaterial.emissiveTexCoordIndex = info.texCoord;\r\n pbrMaterial.emissiveTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor!;\r\n pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength!;\r\n if (assetPBRMaterial.common.occlusionMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.common.occlusionMap);\r\n if (info) {\r\n pbrMaterial.occlusionTexture = info.texture;\r\n pbrMaterial.occlusionTextureSampler = info.sampler;\r\n pbrMaterial.occlusionTexCoordIndex = info.texCoord;\r\n pbrMaterial.occlusionTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength!;\r\n if (assetPBRMaterial.specularGlossnessMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.specularGlossnessMap);\r\n if (info) {\r\n pbrMaterial.specularTexture = info.texture;\r\n pbrMaterial.specularTextureSampler = info.sampler;\r\n pbrMaterial.specularTexCoordIndex = info.texCoord;\r\n pbrMaterial.specularTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent!;\r\n pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor!;\r\n if (assetPBRMaterial.common.alphaMode === 'blend') {\r\n pbrMaterial.blendMode = 'blend';\r\n } else if (assetPBRMaterial.common.alphaMode === 'mask') {\r\n pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff!;\r\n }\r\n if (assetPBRMaterial.common.doubleSided) {\r\n pbrMaterial.cullMode = 'none';\r\n }\r\n pbrMaterial.vertexNormal = !!assetMaterial.common.vertexNormal;\r\n return pbrMaterial;\r\n } else if (assetMaterial.type === 'pbrMetallicRoughness') {\r\n const assetPBRMaterial = assetMaterial as AssetPBRMaterialMR;\r\n const pbrMaterial = new PBRMetallicRoughnessMaterial();\r\n pbrMaterial.ior = assetPBRMaterial.ior!;\r\n pbrMaterial.albedoColor = assetPBRMaterial.diffuse!;\r\n pbrMaterial.metallic = assetPBRMaterial.metallic!;\r\n pbrMaterial.roughness = assetPBRMaterial.roughness!;\r\n if (assetPBRMaterial.diffuseMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.diffuseMap);\r\n if (info) {\r\n pbrMaterial.albedoTexture = info.texture;\r\n pbrMaterial.albedoTextureSampler = info.sampler;\r\n pbrMaterial.albedoTexCoordIndex = info.texCoord;\r\n pbrMaterial.albedoTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.common.normalMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.common.normalMap);\r\n if (info) {\r\n pbrMaterial.normalTexture = info.texture;\r\n pbrMaterial.normalTextureSampler = info.sampler;\r\n pbrMaterial.normalTexCoordIndex = info.texCoord;\r\n pbrMaterial.normalTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.normalScale = assetPBRMaterial.common.bumpScale!;\r\n if (assetPBRMaterial.common.emissiveMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.common.emissiveMap);\r\n if (info) {\r\n pbrMaterial.emissiveTexture = info.texture;\r\n pbrMaterial.emissiveTextureSampler = info.sampler;\r\n pbrMaterial.emissiveTexCoordIndex = info.texCoord;\r\n pbrMaterial.emissiveTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.emissiveColor = assetPBRMaterial.common.emissiveColor!;\r\n pbrMaterial.emissiveStrength = assetPBRMaterial.common.emissiveStrength!;\r\n if (assetPBRMaterial.common.occlusionMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.common.occlusionMap);\r\n if (info) {\r\n pbrMaterial.occlusionTexture = info.texture;\r\n pbrMaterial.occlusionTextureSampler = info.sampler;\r\n pbrMaterial.occlusionTexCoordIndex = info.texCoord;\r\n pbrMaterial.occlusionTexCoordMatrix = info.transform;\r\n }\r\n pbrMaterial.occlusionStrength = assetPBRMaterial.common.occlusionStrength!;\r\n }\r\n if (assetPBRMaterial.metallicMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.metallicMap);\r\n if (info) {\r\n pbrMaterial.metallicRoughnessTexture = info.texture;\r\n pbrMaterial.metallicRoughnessTextureSampler = info.sampler;\r\n pbrMaterial.metallicRoughnessTexCoordIndex = info.texCoord;\r\n pbrMaterial.metallicRoughnessTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.specularFactor = assetPBRMaterial.specularFactor!;\r\n if (assetPBRMaterial.specularMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.specularMap);\r\n if (info) {\r\n pbrMaterial.specularTexture = info.texture;\r\n pbrMaterial.specularTextureSampler = info.sampler;\r\n pbrMaterial.specularTexCoordIndex = info.texCoord;\r\n pbrMaterial.specularTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.specularColorMap) {\r\n const info = await getTextureInfo(assetPBRMaterial.specularColorMap);\r\n if (info) {\r\n pbrMaterial.specularColorTexture = info.texture;\r\n pbrMaterial.specularColorTextureSampler = info.sampler;\r\n pbrMaterial.specularColorTexCoordIndex = info.texCoord;\r\n pbrMaterial.specularColorTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (assetPBRMaterial.sheen) {\r\n const sheen = assetPBRMaterial.sheen;\r\n pbrMaterial.sheen = true;\r\n pbrMaterial.sheenColorFactor = sheen.sheenColorFactor!;\r\n pbrMaterial.sheenRoughnessFactor = sheen.sheenRoughnessFactor!;\r\n if (sheen.sheenColorMap) {\r\n const info = await getTextureInfo(sheen.sheenColorMap);\r\n if (info) {\r\n pbrMaterial.sheenColorTexture = info.texture;\r\n pbrMaterial.sheenColorTextureSampler = info.sampler;\r\n pbrMaterial.sheenColorTexCoordIndex = info.texCoord;\r\n pbrMaterial.sheenColorTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (sheen.sheenRoughnessMap) {\r\n const info = await getTextureInfo(sheen.sheenRoughnessMap);\r\n if (info) {\r\n pbrMaterial.sheenRoughnessTexture = info.texture;\r\n pbrMaterial.sheenRoughnessTextureSampler = info.sampler;\r\n pbrMaterial.sheenRoughnessTexCoordIndex = info.texCoord;\r\n pbrMaterial.sheenRoughnessTexCoordMatrix = info.transform;\r\n }\r\n }\r\n }\r\n if (assetPBRMaterial.iridescence) {\r\n const iridescence = assetPBRMaterial.iridescence;\r\n pbrMaterial.iridescence = true;\r\n pbrMaterial.iridescenceFactor = iridescence.iridescenceFactor!;\r\n pbrMaterial.iridescenceIor = iridescence.iridescenceIor!;\r\n if (iridescence.iridescenceMap) {\r\n const info = await getTextureInfo(iridescence.iridescenceMap);\r\n if (info) {\r\n pbrMaterial.iridescenceTexture = info.texture;\r\n pbrMaterial.iridescenceTextureSampler = info.sampler;\r\n pbrMaterial.iridescenceTexCoordIndex = info.texCoord;\r\n pbrMaterial.iridescenceTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.iridescenceThicknessMin = iridescence.iridescenceThicknessMinimum!;\r\n pbrMaterial.iridescenceThicknessMax = iridescence.iridescenceThicknessMaximum!;\r\n if (iridescence.iridescenceThicknessMap) {\r\n const info = await getTextureInfo(iridescence.iridescenceThicknessMap);\r\n if (info) {\r\n pbrMaterial.iridescenceThicknessTexture = info.texture;\r\n pbrMaterial.iridescenceThicknessTextureSampler = info.sampler;\r\n pbrMaterial.iridescenceThicknessTexCoordIndex = info.texCoord;\r\n pbrMaterial.iridescenceThicknessTexCoordMatrix = info.transform;\r\n }\r\n }\r\n }\r\n if (assetPBRMaterial.transmission) {\r\n const transmission = assetPBRMaterial.transmission;\r\n pbrMaterial.transmission = true;\r\n pbrMaterial.transmissionFactor = transmission.transmissionFactor!;\r\n if (transmission.transmissionMap) {\r\n const info = await getTextureInfo(transmission.transmissionMap);\r\n if (info) {\r\n pbrMaterial.transmissionTexture = info.texture;\r\n pbrMaterial.transmissionTextureSampler = info.sampler;\r\n pbrMaterial.transmissionTexCoordIndex = info.texCoord;\r\n pbrMaterial.transmissionTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.thicknessFactor = transmission.thicknessFactor!;\r\n if (transmission.thicknessMap) {\r\n const info = await getTextureInfo(transmission.thicknessMap);\r\n if (info) {\r\n pbrMaterial.thicknessTexture = info.texture;\r\n pbrMaterial.thicknessTextureSampler = info.sampler;\r\n pbrMaterial.thicknessTexCoordIndex = info.texCoord;\r\n pbrMaterial.thicknessTexCoordMatrix = info.transform;\r\n }\r\n }\r\n pbrMaterial.attenuationDistance = transmission.attenuationDistance!;\r\n pbrMaterial.attenuationColor = transmission.attenuationColor!;\r\n }\r\n if (assetPBRMaterial.clearcoat) {\r\n const cc = assetPBRMaterial.clearcoat;\r\n pbrMaterial.clearcoat = true;\r\n pbrMaterial.clearcoatIntensity = cc.clearCoatFactor!;\r\n pbrMaterial.clearcoatRoughnessFactor = cc.clearCoatRoughnessFactor!;\r\n if (cc.clearCoatIntensityMap) {\r\n const info = await getTextureInfo(cc.clearCoatIntensityMap);\r\n if (info) {\r\n pbrMaterial.clearcoatIntensityTexture = info.texture;\r\n pbrMaterial.clearcoatIntensityTextureSampler = info.sampler;\r\n pbrMaterial.clearcoatIntensityTexCoordIndex = info.texCoord;\r\n pbrMaterial.clearcoatIntensityTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (cc.clearCoatRoughnessMap) {\r\n const info = await getTextureInfo(cc.clearCoatRoughnessMap);\r\n if (info) {\r\n pbrMaterial.clearcoatRoughnessTexture = info.texture;\r\n pbrMaterial.clearcoatRoughnessTextureSampler = info.sampler;\r\n pbrMaterial.clearcoatRoughnessTexCoordIndex = info.texCoord;\r\n pbrMaterial.clearcoatRoughnessTexCoordMatrix = info.transform;\r\n }\r\n }\r\n if (cc.clearCoatNormalMap) {\r\n const info = await getTextureInfo(cc.clearCoatNormalMap);\r\n if (info) {\r\n pbrMaterial.clearcoatNormalTexture = info.texture;\r\n pbrMaterial.clearcoatNormalTextureSampler = info.sampler;\r\n pbrMaterial.clearcoatNormalTexCoordIndex = info.texCoord;\r\n pbrMaterial.clearcoatNormalTexCoordMatrix = info.transform;\r\n }\r\n }\r\n }\r\n pbrMaterial.vertexTangent = assetPBRMaterial.common.useTangent!;\r\n pbrMaterial.vertexColor = assetPBRMaterial.common.vertexColor!;\r\n if (assetPBRMaterial.common.alphaMode === 'blend') {\r\n pbrMaterial.blendMode = 'blend';\r\n } else if (assetPBRMaterial.common.alphaMode === 'mask') {\r\n pbrMaterial.alphaCutoff = assetPBRMaterial.common.alphaCutoff!;\r\n }\r\n if (assetPBRMaterial.common.doubleSided) {\r\n pbrMaterial.cullMode = 'none';\r\n }\r\n pbrMaterial.vertexNormal = !!assetMaterial.common.vertexNormal;\r\n return pbrMaterial;\r\n }\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction processMorphData(\r\n subMesh: AssetSubMeshData,\r\n mesh: Mesh,\r\n morphWeights?: Nullable<number[]>,\r\n morphNames?: Nullable<string[]>\r\n) {\r\n const device = getDevice();\r\n const numTargets = subMesh.numTargets;\r\n if (numTargets === 0) {\r\n return;\r\n }\r\n const attributes = Object.getOwnPropertyNames(subMesh.targets);\r\n const positionInfo = subMesh.primitive!.vertices['position'];\r\n const numVertices = positionInfo\r\n ? (positionInfo.data.length / getVertexFormatComponentCount(positionInfo.format)) >> 0\r\n : 0;\r\n const weightsAndOffsets = new Float32Array(4 + MAX_MORPH_TARGETS + MAX_MORPH_ATTRIBUTES);\r\n for (let i = 0; i < numTargets; i++) {\r\n weightsAndOffsets[4 + i] = morphWeights?.[i] ?? 0;\r\n }\r\n const textureSize = Math.ceil(Math.sqrt(numVertices * attributes.length * numTargets));\r\n if (textureSize > device.getDeviceCaps().textureCaps.maxTextureSize) {\r\n // TODO: reduce morph attributes\r\n throw new Error(`Morph target data too large`);\r\n }\r\n weightsAndOffsets[0] = textureSize;\r\n weightsAndOffsets[1] = textureSize;\r\n weightsAndOffsets[2] = numVertices;\r\n weightsAndOffsets[3] = numTargets;\r\n let offset = 0;\r\n const textureData = new Float32Array(textureSize * textureSize * 4);\r\n for (let attrib = 0; attrib < MAX_MORPH_ATTRIBUTES; attrib++) {\r\n const index = attributes.indexOf(String(attrib));\r\n if (index < 0) {\r\n weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = -1;\r\n continue;\r\n }\r\n weightsAndOffsets[4 + MAX_MORPH_TARGETS + attrib] = offset >> 2;\r\n const info = subMesh.targets![attrib]!;\r\n if (info.data.length !== numTargets) {\r\n console.error(`Invalid morph target data`);\r\n return;\r\n }\r\n for (let t = 0; t < numTargets; t++) {\r\n const data = info.data[t];\r\n for (let i = 0; i < numVertices; i++) {\r\n for (let j = 0; j < 4; j++) {\r\n textureData[offset++] = j < info.numComponents ? data[i * info.numComponents + j] : 1;\r\n }\r\n }\r\n }\r\n }\r\n const morphBoundingBox = new BoundingBox();\r\n calculateMorphBoundingBox(\r\n morphBoundingBox,\r\n subMesh.targetBox!,\r\n weightsAndOffsets.subarray(4, 4 + MAX_MORPH_TARGETS),\r\n numTargets\r\n );\r\n const meshAABB = mesh.getBoundingVolume()!.toAABB();\r\n morphBoundingBox.minPoint.addBy(meshAABB.minPoint);\r\n morphBoundingBox.maxPoint.addBy(meshAABB.maxPoint);\r\n\r\n const names: Record<string, number> = {};\r\n for (let i = 0; i < numTargets; i++) {\r\n const name = morphNames?.[i] ?? `Target${i}`;\r\n names[name] = i;\r\n }\r\n mesh.setMorphData({ width: textureSize, height: textureSize, data: textureData });\r\n mesh.setMorphInfo({ data: weightsAndOffsets, names });\r\n mesh.setMorphBoundingInfo({ targetBoxes: subMesh.targetBox!, originBox: new BoundingBox(meshAABB) });\r\n mesh.setAnimatedBoundingBox(morphBoundingBox);\r\n}\r\n\r\n/** @internal */\r\nfunction getAssetMeshMorphTargetCount(mesh: AssetMeshData): number {\r\n let count = 0;\r\n for (const subMesh of mesh.subMeshes) {\r\n count = Math.max(count, subMesh.numTargets);\r\n }\r\n return count;\r\n}\r\n\r\n/** @internal */\r\nfunction getAssetMeshMorphTargetName(mesh: AssetMeshData, index: number): string {\r\n return mesh.morphNames?.[index] ?? `Target${index}`;\r\n}\r\n\r\n/** @internal */\r\nfunction calculateMorphBoundingBox(\r\n morphBoundingBox: BoundingBox,\r\n keyframeBoundingBox: BoundingBox[],\r\n weights: Float32Array,\r\n numTargets: number\r\n) {\r\n morphBoundingBox.minPoint.setXYZ(0, 0, 0);\r\n morphBoundingBox.maxPoint.setXYZ(0, 0, 0);\r\n for (let i = 0; i < numTargets; i++) {\r\n const weight = weights[i];\r\n const keyframeBox = keyframeBoundingBox[i];\r\n morphBoundingBox.minPoint.x += keyframeBox.minPoint.x * weight;\r\n morphBoundingBox.minPoint.y += keyframeBox.minPoint.y * weight;\r\n morphBoundingBox.minPoint.z += keyframeBox.minPoint.z * weight;\r\n morphBoundingBox.maxPoint.x += keyframeBox.maxPoint.x * weight;\r\n morphBoundingBox.maxPoint.y += keyframeBox.maxPoint.y * weight;\r\n morphBoundingBox.maxPoint.z += keyframeBox.maxPoint.z * weight;\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_matrix","_worldMatrix","_weights","_children","_instances","model","parent","nodes","push","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","instances","weights","val","skeleton","position","rotation","scaling","children","skeletonAttached","isParentOf","child","getWorldPosition","m03","m13","m23","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","Error","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","root","i","length","AssetScene","rootNodes","SharedModel","Disposable","_nodes","_skeletons","_scenes","_animations","_imageList","_primitiveList","_materialList","_springBoneColliders","_springBoneColliderGroups","_springBones","_jointDynamicsColliders","_jointDynamicsSpringBones","_morphTargetGroups","_activeScene","_textureMap","Map","_primitiveMap","scenes","primitives","animations","skeletons","springBoneColliders","springBoneColliderGroups","springBones","jointDynamicsColliders","jointDynamicsSpringBones","morphTargetGroups","activeScene","getImage","setImage","img","getMaterial","hash","setMaterial","material","addPrimitive","prim","addMorphTargetGroup","group","bindings","clearMorphTargetGroups","getMorphTargetGroup","find","buildMorphTargetGroupsByName","groups","meshes","node","count","getAssetMeshMorphTargetCount","targetName","getAssetMeshMorphTargetName","get","set","targetIndex","weight","Array","from","values","addSkeleton","addAnimation","animation","writePrimitive","vfs","primitive","path","vertices","indices","uint8ArrayToBase64","Uint8Array","buffer","byteOffset","byteLength","indexType","Uint16Array","indexCount","type","boxMin","x","y","z","boxMax","k","v","format","content","JSON","stringify","writeFile","encoding","create","preprocess","manager","destPath","srcVFS","dstVFS","destName","console","info","ext","mimeType","uri","guessMIMEType","ASSERT","join","readFile","slice","undefined","materialKeys","Object","keys","m","createMaterial","serializeObject","dispose","createJointDynamics","rootNode","nodeMap","animationSet","rigs","jd","chains","map","chain","start","end","filter","ref","every","includes","colliders","collider","SceneNode","scene","localPosition","localRotation","r","transform","createTransformAccess","flatPlanes","flatPlane","up","transformVectorAffine","magnitudeSq","inplaceNormalize","transformPointAffine","rig","system","JointDynamicsSystem","chainConfig","systemRoot","controllerConfig","modifier","JointDynamicsModifier","modifiers","createMorphTargetGroups","meshMap","runtimeGroups","binding","assetMesh","subMesh","subMeshes","isBinary","getInitialMorphTargetGroupWeight","result","found","targetWeight","getMorphTargetBindingWeight","groupWeight","Math","abs","getNumMorphTargets","getMorphTargetName","getMorphWeight","createSceneNode","instancing","saveMeshes","saveSkeletons","saveAnimations","saveJointDynamics","assetScene","skeletonMeshMap","setAssetNodeToSceneNode","sk","has","bounding","rigMap","jointTypeT","jointTypeS","jointTypeR","rootJoint","rigKey","SkeletonRig","getRigKey","DRef","SkinBinding","positions","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","target","addTrack","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","stride","MAX_MORPH_TARGETS","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","subMeshIndex","codec","pcaData","remapPCAGeometryCacheData","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","FixedGeometryCacheTrack","times","sourcePositions","sourceVertexCount","targetVertexCount","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","normals","boundingBox","remapReference","positionReference","reconstructPCAGeometryCacheReference","bounds","positionMean","positionBases","positionCoefficients","normalMean","normalBases","normalCoefficients","basis","reference","Float32Array","coefficients","componentCount","min","component","coefficient","targetPositions","sourceCount","targetCount","buckets","key","geometryCachePositionKey","bucket","Uint32Array","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","offset","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round","onDispose","tex","assetNode","meshData","s","instance","meshNode","Mesh","clipTestEnabled","showState","createPrimitive","createInstance","setSceneMeshAssetBinding","processMorphData","morphWeights","morphNames","image2Texture","image","texture","fetchTexture","linearColorSpace","sRGB","overrideVFS","loadTextureFromBuffer","createTexture","textureRef","sampler","getDevice","createSampler","addressU","wrapS","addressV","wrapT","magFilter","minFilter","mipFilter","texCoord","err","fetchPrimitive","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","setBoundingVolume","BoundingBox","assetMaterial","fetchMaterial","infoMap","that","getTextureInfo","unlitAssetMaterial","unlitMaterial","UnlitMaterial","albedoColor","diffuse","Vector4","diffuseMap","albedoTexture","albedoTextureSampler","albedoTexCoordIndex","albedoTexCoordMatrix","vertexColor","common","alphaMode","blendMode","alphaCutoff","doubleSided","cullMode","assetPBRMaterial","pbrMaterial","PBRSpecularGlossinessMaterial","ior","specularFactor","specular","glossinessFactor","glossness","normalMap","normalTexture","normalTextureSampler","normalTexCoordIndex","normalTexCoordMatrix","normalScale","bumpScale","emissiveMap","emissiveTexture","emissiveTextureSampler","emissiveTexCoordIndex","emissiveTexCoordMatrix","emissiveColor","emissiveStrength","occlusionMap","occlusionTexture","occlusionTextureSampler","occlusionTexCoordIndex","occlusionTexCoordMatrix","occlusionStrength","specularGlossnessMap","specularTexture","specularTextureSampler","specularTexCoordIndex","specularTexCoordMatrix","vertexTangent","useTangent","vertexNormal","PBRMetallicRoughnessMaterial","metallic","roughness","metallicMap","metallicRoughnessTexture","metallicRoughnessTextureSampler","metallicRoughnessTexCoordIndex","metallicRoughnessTexCoordMatrix","specularMap","specularColorMap","specularColorTexture","specularColorTextureSampler","specularColorTexCoordIndex","specularColorTexCoordMatrix","sheen","sheenColorFactor","sheenRoughnessFactor","sheenColorMap","sheenColorTexture","sheenColorTextureSampler","sheenColorTexCoordIndex","sheenColorTexCoordMatrix","sheenRoughnessMap","sheenRoughnessTexture","sheenRoughnessTextureSampler","sheenRoughnessTexCoordIndex","sheenRoughnessTexCoordMatrix","iridescence","iridescenceFactor","iridescenceIor","iridescenceMap","iridescenceTexture","iridescenceTextureSampler","iridescenceTexCoordIndex","iridescenceTexCoordMatrix","iridescenceThicknessMin","iridescenceThicknessMinimum","iridescenceThicknessMax","iridescenceThicknessMaximum","iridescenceThicknessMap","iridescenceThicknessTexture","iridescenceThicknessTextureSampler","iridescenceThicknessTexCoordIndex","iridescenceThicknessTexCoordMatrix","transmission","transmissionFactor","transmissionMap","transmissionTexture","transmissionTextureSampler","transmissionTexCoordIndex","transmissionTexCoordMatrix","thicknessFactor","thicknessMap","thicknessTexture","thicknessTextureSampler","thicknessTexCoordIndex","thicknessTexCoordMatrix","attenuationDistance","attenuationColor","clearcoat","cc","clearcoatIntensity","clearCoatFactor","clearcoatRoughnessFactor","clearCoatRoughnessFactor","clearCoatIntensityMap","clearcoatIntensityTexture","clearcoatIntensityTextureSampler","clearcoatIntensityTexCoordIndex","clearcoatIntensityTexCoordMatrix","clearCoatRoughnessMap","clearcoatRoughnessTexture","clearcoatRoughnessTextureSampler","clearcoatRoughnessTexCoordIndex","clearcoatRoughnessTexCoordMatrix","clearCoatNormalMap","clearcoatNormalTexture","clearcoatNormalTextureSampler","clearcoatNormalTexCoordIndex","clearcoatNormalTexCoordMatrix","device","numTargets","attributes","getOwnPropertyNames","targets","positionInfo","numVertices","getVertexFormatComponentCount","weightsAndOffsets","MAX_MORPH_ATTRIBUTES","textureSize","ceil","sqrt","getDeviceCaps","textureCaps","maxTextureSize","textureData","attrib","String","j","numComponents","morphBoundingBox","calculateMorphBoundingBox","subarray","meshAABB","minPoint","addBy","maxPoint","names","setMorphData","width","height","setMorphInfo","setMorphBoundingInfo","targetBoxes","originBox","setAnimatedBoundingBox","max","keyframeBoundingBox","setXYZ","keyframeBox"],"mappings":"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"}