@zephyr3d/scene 0.9.5 → 0.9.7

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 (621) hide show
  1. package/dist/animation/joint_dynamics/controller.js +92 -32
  2. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  3. package/dist/animation/joint_dynamics/convex_collider.js +320 -0
  4. package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
  5. package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
  6. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  7. package/dist/animation/joint_dynamics/solver.js +71 -27
  8. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  9. package/dist/animation/joint_dynamics_modifier.js +21 -20
  10. package/dist/animation/joint_dynamics_modifier.js.map +1 -1
  11. package/dist/animation/skeleton.js +7 -10
  12. package/dist/animation/skeleton.js.map +1 -1
  13. package/dist/app/engine.js +134 -140
  14. package/dist/app/engine.js.map +1 -1
  15. package/dist/app/scriptregistry.js +47 -16
  16. package/dist/app/scriptregistry.js.map +1 -1
  17. package/dist/asset/assetmanager.js +3 -1
  18. package/dist/asset/assetmanager.js.map +1 -1
  19. package/dist/asset/model.js +346 -7
  20. package/dist/asset/model.js.map +1 -1
  21. package/dist/avatar/wardrobe.js +20 -16
  22. package/dist/avatar/wardrobe.js.map +1 -1
  23. package/dist/camera/camera.js +416 -210
  24. package/dist/camera/camera.js.map +1 -1
  25. package/dist/index.d.ts +1350 -621
  26. package/dist/index.js +6 -11
  27. package/dist/index.js.map +1 -1
  28. package/dist/material/blinn.js +1 -1
  29. package/dist/material/blinn.js.map +1 -1
  30. package/dist/material/lambert.js +1 -1
  31. package/dist/material/lambert.js.map +1 -1
  32. package/dist/material/material.js +23 -1
  33. package/dist/material/material.js.map +1 -1
  34. package/dist/material/meshmaterial.js +178 -23
  35. package/dist/material/meshmaterial.js.map +1 -1
  36. package/dist/material/mixins/albedocolor.js +4 -4
  37. package/dist/material/mixins/albedocolor.js.map +1 -1
  38. package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
  39. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  40. package/dist/material/mixins/lightmodel/lambert.js +2 -1
  41. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  42. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
  43. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  44. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
  45. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  46. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
  47. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  48. package/dist/material/mixins/lit.js +1 -1
  49. package/dist/material/mixins/lit.js.map +1 -1
  50. package/dist/material/mixins/pbr/common.js +276 -65
  51. package/dist/material/mixins/pbr/common.js.map +1 -1
  52. package/dist/material/mixins/texture.js +3 -3
  53. package/dist/material/mixins/texture.js.map +1 -1
  54. package/dist/material/mixins/vertexcolor.js +2 -2
  55. package/dist/material/mixins/vertexcolor.js.map +1 -1
  56. package/dist/material/msdf_text.js +3 -3
  57. package/dist/material/msdf_text.js.map +1 -1
  58. package/dist/material/mtoon.js +574 -0
  59. package/dist/material/mtoon.js.map +1 -0
  60. package/dist/material/pbrblueprint.js +499 -336
  61. package/dist/material/pbrblueprint.js.map +1 -1
  62. package/dist/material/pbrmr.js +118 -100
  63. package/dist/material/pbrmr.js.map +1 -1
  64. package/dist/material/pbrsg.js +1 -1
  65. package/dist/material/pbrsg.js.map +1 -1
  66. package/dist/material/shader/helper.js +324 -294
  67. package/dist/material/shader/helper.js.map +1 -1
  68. package/dist/material/subsurfaceprofile.js +812 -0
  69. package/dist/material/subsurfaceprofile.js.map +1 -0
  70. package/dist/material/unlit.js +1 -1
  71. package/dist/material/unlit.js.map +1 -1
  72. package/dist/posteffect/compositor.js +46 -11
  73. package/dist/posteffect/compositor.js.map +1 -1
  74. package/dist/posteffect/ssr.js +422 -96
  75. package/dist/posteffect/ssr.js.map +1 -1
  76. package/dist/posteffect/sss.js +1053 -0
  77. package/dist/posteffect/sss.js.map +1 -0
  78. package/dist/posteffect/taa.js +61 -60
  79. package/dist/posteffect/taa.js.map +1 -1
  80. package/dist/render/abuffer_oit.js +63 -12
  81. package/dist/render/abuffer_oit.js.map +1 -1
  82. package/dist/render/cluster_light.js +6 -5
  83. package/dist/render/cluster_light.js.map +1 -1
  84. package/dist/render/drawable.js +1 -5
  85. package/dist/render/drawable.js.map +1 -1
  86. package/dist/render/drawable_mixin.js +2 -1
  87. package/dist/render/drawable_mixin.js.map +1 -1
  88. package/dist/render/fbm_wavegenerator.js +2 -1
  89. package/dist/render/fbm_wavegenerator.js.map +1 -1
  90. package/dist/render/gerstner_wavegenerator.js +2 -1
  91. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  92. package/dist/render/globalbindgroup_allocator.js +2 -1
  93. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  94. package/dist/render/lightpass.js +110 -23
  95. package/dist/render/lightpass.js.map +1 -1
  96. package/dist/render/render_queue.js +51 -8
  97. package/dist/render/render_queue.js.map +1 -1
  98. package/dist/render/renderer.js +80 -66
  99. package/dist/render/renderer.js.map +1 -1
  100. package/dist/render/rendergraph/device_pool_allocator.js +8 -0
  101. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  102. package/dist/render/rendergraph/forward_plus_builder.js +481 -95
  103. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  104. package/dist/render/rendergraph/history_resource_manager.js +55 -0
  105. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  106. package/dist/render/rendergraph/history_resources.js +3 -1
  107. package/dist/render/rendergraph/history_resources.js.map +1 -1
  108. package/dist/render/rendergraph/types.js.map +1 -1
  109. package/dist/render/renderpass.js +10 -4
  110. package/dist/render/renderpass.js.map +1 -1
  111. package/dist/render/sky.js +31 -1
  112. package/dist/render/sky.js.map +1 -1
  113. package/dist/render/weightedblended_oit.js +23 -5
  114. package/dist/render/weightedblended_oit.js.map +1 -1
  115. package/dist/scene/basesprite.js +4 -2
  116. package/dist/scene/basesprite.js.map +1 -1
  117. package/dist/scene/batchgroup.js +3 -1
  118. package/dist/scene/batchgroup.js.map +1 -1
  119. package/dist/scene/environment.js +11 -1
  120. package/dist/scene/environment.js.map +1 -1
  121. package/dist/scene/light.js +21 -3
  122. package/dist/scene/light.js.map +1 -1
  123. package/dist/scene/mesh.js +29 -14
  124. package/dist/scene/mesh.js.map +1 -1
  125. package/dist/scene/meshdrawable.js +6 -0
  126. package/dist/scene/meshdrawable.js.map +1 -1
  127. package/dist/scene/msdftext.js +5 -2
  128. package/dist/scene/msdftext.js.map +1 -1
  129. package/dist/scene/msdftextsprite.js +5 -3
  130. package/dist/scene/msdftextsprite.js.map +1 -1
  131. package/dist/scene/particlesys.js +3 -1
  132. package/dist/scene/particlesys.js.map +1 -1
  133. package/dist/scene/scene.js +6 -5
  134. package/dist/scene/scene.js.map +1 -1
  135. package/dist/scene/terrain-cm/grass.js +4 -2
  136. package/dist/scene/terrain-cm/grass.js.map +1 -1
  137. package/dist/scene/terrain-cm/grassmaterial.js +2 -1
  138. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  139. package/dist/scene/terrain-cm/terrain-cm.js +4 -2
  140. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  141. package/dist/scene/water.js +4 -2
  142. package/dist/scene/water.js.map +1 -1
  143. package/dist/shaders/shadow.js +26 -393
  144. package/dist/shaders/shadow.js.map +1 -1
  145. package/dist/shadow/esm.js +112 -12
  146. package/dist/shadow/esm.js.map +1 -1
  147. package/dist/shadow/pcf_opt.js +2 -2
  148. package/dist/shadow/pcf_opt.js.map +1 -1
  149. package/dist/shadow/pcf_pd.js +19 -10
  150. package/dist/shadow/pcf_pd.js.map +1 -1
  151. package/dist/shadow/shader.js +58 -7
  152. package/dist/shadow/shader.js.map +1 -1
  153. package/dist/shadow/shadow_impl.js +6 -0
  154. package/dist/shadow/shadow_impl.js.map +1 -1
  155. package/dist/shadow/shadow_region.js +229 -0
  156. package/dist/shadow/shadow_region.js.map +1 -0
  157. package/dist/shadow/shadowmapper.js +67 -59
  158. package/dist/shadow/shadowmapper.js.map +1 -1
  159. package/dist/shadow/vsm.js +45 -19
  160. package/dist/shadow/vsm.js.map +1 -1
  161. package/dist/text/font/cff_font.js +890 -0
  162. package/dist/text/font/cff_font.js.map +1 -0
  163. package/dist/text/font/font_asset.js +17 -3
  164. package/dist/text/font/font_asset.js.map +1 -1
  165. package/dist/utility/blueprint/common/constants.js +8 -8
  166. package/dist/utility/blueprint/common/constants.js.map +1 -1
  167. package/dist/utility/blueprint/material/pbr.js +31 -4
  168. package/dist/utility/blueprint/material/pbr.js.map +1 -1
  169. package/dist/utility/blueprint/material/texture.js +1 -17
  170. package/dist/utility/blueprint/material/texture.js.map +1 -1
  171. package/dist/utility/serialization/manager.js +327 -359
  172. package/dist/utility/serialization/manager.js.map +1 -1
  173. package/dist/utility/serialization/scene/animation.js +5 -2
  174. package/dist/utility/serialization/scene/animation.js.map +1 -1
  175. package/dist/utility/serialization/scene/batch.js +4 -1
  176. package/dist/utility/serialization/scene/batch.js.map +1 -1
  177. package/dist/utility/serialization/scene/camera.js +249 -54
  178. package/dist/utility/serialization/scene/camera.js.map +1 -1
  179. package/dist/utility/serialization/scene/common.js +37 -1
  180. package/dist/utility/serialization/scene/common.js.map +1 -1
  181. package/dist/utility/serialization/scene/light.js +42 -3
  182. package/dist/utility/serialization/scene/light.js.map +1 -1
  183. package/dist/utility/serialization/scene/material.js +1112 -646
  184. package/dist/utility/serialization/scene/material.js.map +1 -1
  185. package/dist/utility/serialization/scene/mesh.js +7 -4
  186. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  187. package/dist/utility/serialization/scene/node.js +31 -12
  188. package/dist/utility/serialization/scene/node.js.map +1 -1
  189. package/dist/utility/serialization/scene/particle.js +4 -1
  190. package/dist/utility/serialization/scene/particle.js.map +1 -1
  191. package/dist/utility/serialization/scene/primitive.js +3 -1
  192. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  193. package/dist/utility/serialization/scene/scene.js +18 -0
  194. package/dist/utility/serialization/scene/scene.js.map +1 -1
  195. package/dist/utility/serialization/scene/sprite.js +6 -3
  196. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  197. package/dist/utility/serialization/scene/terrain.js +5 -2
  198. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  199. package/dist/utility/serialization/scene/text.js +3 -1
  200. package/dist/utility/serialization/scene/text.js.map +1 -1
  201. package/dist/utility/serialization/scene/water.js +4 -1
  202. package/dist/utility/serialization/scene/water.js.map +1 -1
  203. package/dist/utility/textures/ltcdata.js +6 -0
  204. package/dist/utility/textures/ltcdata.js.map +1 -0
  205. package/dist/utility/textures/ltclut.js +61 -0
  206. package/dist/utility/textures/ltclut.js.map +1 -0
  207. package/dist/values.js +9 -1
  208. package/dist/values.js.map +1 -1
  209. package/package.json +3 -3
  210. package/dist/animation/ik/ik_chain_builder.js +0 -68
  211. package/dist/animation/ik/ik_chain_builder.js.map +0 -1
  212. package/dist/animation/ik/ik_pole_constraint.js +0 -123
  213. package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
  214. package/dist/animation/ik/ik_track.js +0 -96
  215. package/dist/animation/ik/ik_track.js.map +0 -1
  216. package/dist/animation/ik_postprocessor.js +0 -71
  217. package/dist/animation/ik_postprocessor.js.map +0 -1
  218. package/dist/animation/joint_dynamics/math.js +0 -16
  219. package/dist/animation/joint_dynamics/math.js.map +0 -1
  220. package/dist/animation/manual_transform_processor.js +0 -156
  221. package/dist/animation/manual_transform_processor.js.map +0 -1
  222. package/dist/animation/skeleton_postprocessor.js +0 -50
  223. package/dist/animation/skeleton_postprocessor.js.map +0 -1
  224. package/dist/animation/spring2/collision.js +0 -469
  225. package/dist/animation/spring2/collision.js.map +0 -1
  226. package/dist/animation/spring2/constraints.js +0 -329
  227. package/dist/animation/spring2/constraints.js.map +0 -1
  228. package/dist/animation/spring2/controller.js +0 -434
  229. package/dist/animation/spring2/controller.js.map +0 -1
  230. package/dist/animation/spring2/math.js +0 -16
  231. package/dist/animation/spring2/math.js.map +0 -1
  232. package/dist/animation/spring2/solver.js +0 -624
  233. package/dist/animation/spring2/solver.js.map +0 -1
  234. package/dist/animation/spring2/spring_system.js +0 -118
  235. package/dist/animation/spring2/spring_system.js.map +0 -1
  236. package/dist/animation/spring2/types.js +0 -19
  237. package/dist/animation/spring2/types.js.map +0 -1
  238. package/dist/animation/spring_postprocessor.js +0 -54
  239. package/dist/animation/spring_postprocessor.js.map +0 -1
  240. package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
  241. package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
  242. package/dist/asset/loaders/gltf/helpers.js +0 -331
  243. package/dist/asset/loaders/gltf/helpers.js.map +0 -1
  244. package/dist/material/sprite3d.js +0 -301
  245. package/dist/material/sprite3d.js.map +0 -1
  246. package/dist/material/sprite3d_std.js +0 -116
  247. package/dist/material/sprite3d_std.js.map +0 -1
  248. package/dist/material/sprite3dblueprint.js +0 -235
  249. package/dist/material/sprite3dblueprint.js.map +0 -1
  250. package/dist/material/sprite_sdf.js +0 -106
  251. package/dist/material/sprite_sdf.js.map +0 -1
  252. package/dist/material/terrainmaterial.js +0 -368
  253. package/dist/material/terrainmaterial.js.map +0 -1
  254. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
  255. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
  256. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
  257. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
  258. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
  259. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
  260. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
  261. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
  262. package/dist/render/deferredlightpass.js +0 -510
  263. package/dist/render/deferredlightpass.js.map +0 -1
  264. package/dist/render/deferredshadowlightpass.js +0 -428
  265. package/dist/render/deferredshadowlightpass.js.map +0 -1
  266. package/dist/render/gbufferpass.js +0 -50
  267. package/dist/render/gbufferpass.js.map +0 -1
  268. package/dist/scene/sdftextsprite.js +0 -322
  269. package/dist/scene/sdftextsprite.js.map +0 -1
  270. package/dist/scene/sprite3d.js +0 -18
  271. package/dist/scene/sprite3d.js.map +0 -1
  272. package/dist/scene/terrain/grass.js +0 -280
  273. package/dist/scene/terrain/grass.js.map +0 -1
  274. package/dist/scene/terrain/heightfield.js +0 -475
  275. package/dist/scene/terrain/heightfield.js.map +0 -1
  276. package/dist/scene/terrain/patch.js +0 -532
  277. package/dist/scene/terrain/patch.js.map +0 -1
  278. package/dist/scene/terrain/quadtree.js +0 -461
  279. package/dist/scene/terrain/quadtree.js.map +0 -1
  280. package/dist/scene/terrain/terrain.js +0 -231
  281. package/dist/scene/terrain/terrain.js.map +0 -1
  282. package/dist/src/animation/animation.js +0 -127
  283. package/dist/src/animation/animation.js.map +0 -1
  284. package/dist/src/animation/animationset.js +0 -255
  285. package/dist/src/animation/animationset.js.map +0 -1
  286. package/dist/src/animation/animationtrack.js +0 -34
  287. package/dist/src/animation/animationtrack.js.map +0 -1
  288. package/dist/src/animation/eulerrotationtrack.js +0 -52
  289. package/dist/src/animation/eulerrotationtrack.js.map +0 -1
  290. package/dist/src/animation/morphtarget.js +0 -93
  291. package/dist/src/animation/morphtarget.js.map +0 -1
  292. package/dist/src/animation/morphtrack.js +0 -70
  293. package/dist/src/animation/morphtrack.js.map +0 -1
  294. package/dist/src/animation/proptrack.js +0 -161
  295. package/dist/src/animation/proptrack.js.map +0 -1
  296. package/dist/src/animation/rotationtrack.js +0 -51
  297. package/dist/src/animation/rotationtrack.js.map +0 -1
  298. package/dist/src/animation/scaletrack.js +0 -50
  299. package/dist/src/animation/scaletrack.js.map +0 -1
  300. package/dist/src/animation/skeleton.js +0 -204
  301. package/dist/src/animation/skeleton.js.map +0 -1
  302. package/dist/src/animation/translationtrack.js +0 -50
  303. package/dist/src/animation/translationtrack.js.map +0 -1
  304. package/dist/src/app/app.js +0 -129
  305. package/dist/src/app/app.js.map +0 -1
  306. package/dist/src/app/inputmgr.js +0 -267
  307. package/dist/src/app/inputmgr.js.map +0 -1
  308. package/dist/src/asset/assetmanager.js +0 -404
  309. package/dist/src/asset/assetmanager.js.map +0 -1
  310. package/dist/src/asset/builtin.js +0 -337
  311. package/dist/src/asset/builtin.js.map +0 -1
  312. package/dist/src/asset/loaders/dds/dds.js +0 -470
  313. package/dist/src/asset/loaders/dds/dds.js.map +0 -1
  314. package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
  315. package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
  316. package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
  317. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
  318. package/dist/src/asset/loaders/gltf/helpers.js +0 -327
  319. package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
  320. package/dist/src/asset/loaders/hdr/hdr.js +0 -180
  321. package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
  322. package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
  323. package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
  324. package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
  325. package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
  326. package/dist/src/asset/loaders/loader.js +0 -45
  327. package/dist/src/asset/loaders/loader.js.map +0 -1
  328. package/dist/src/asset/model.js +0 -414
  329. package/dist/src/asset/model.js.map +0 -1
  330. package/dist/src/blitter/bilateralblur.js +0 -221
  331. package/dist/src/blitter/bilateralblur.js.map +0 -1
  332. package/dist/src/blitter/blitter.js +0 -390
  333. package/dist/src/blitter/blitter.js.map +0 -1
  334. package/dist/src/blitter/box.js +0 -118
  335. package/dist/src/blitter/box.js.map +0 -1
  336. package/dist/src/blitter/copy.js +0 -22
  337. package/dist/src/blitter/copy.js.map +0 -1
  338. package/dist/src/blitter/gaussianblur.js +0 -228
  339. package/dist/src/blitter/gaussianblur.js.map +0 -1
  340. package/dist/src/camera/base.js +0 -92
  341. package/dist/src/camera/base.js.map +0 -1
  342. package/dist/src/camera/camera.js +0 -1005
  343. package/dist/src/camera/camera.js.map +0 -1
  344. package/dist/src/camera/fps.js +0 -238
  345. package/dist/src/camera/fps.js.map +0 -1
  346. package/dist/src/camera/orbit.js +0 -245
  347. package/dist/src/camera/orbit.js.map +0 -1
  348. package/dist/src/camera/orthocamera.js +0 -167
  349. package/dist/src/camera/orthocamera.js.map +0 -1
  350. package/dist/src/camera/perspectivecamera.js +0 -141
  351. package/dist/src/camera/perspectivecamera.js.map +0 -1
  352. package/dist/src/index.js +0 -120
  353. package/dist/src/index.js.map +0 -1
  354. package/dist/src/material/blinn.js +0 -81
  355. package/dist/src/material/blinn.js.map +0 -1
  356. package/dist/src/material/grassmaterial.js +0 -113
  357. package/dist/src/material/grassmaterial.js.map +0 -1
  358. package/dist/src/material/lambert.js +0 -92
  359. package/dist/src/material/lambert.js.map +0 -1
  360. package/dist/src/material/material.js +0 -301
  361. package/dist/src/material/material.js.map +0 -1
  362. package/dist/src/material/meshmaterial.js +0 -704
  363. package/dist/src/material/meshmaterial.js.map +0 -1
  364. package/dist/src/material/mixins/albedocolor.js +0 -76
  365. package/dist/src/material/mixins/albedocolor.js.map +0 -1
  366. package/dist/src/material/mixins/foliage.js +0 -47
  367. package/dist/src/material/mixins/foliage.js.map +0 -1
  368. package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
  369. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
  370. package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
  371. package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
  372. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
  373. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
  374. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
  375. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
  376. package/dist/src/material/mixins/lit.js +0 -476
  377. package/dist/src/material/mixins/lit.js.map +0 -1
  378. package/dist/src/material/mixins/pbr/common.js +0 -918
  379. package/dist/src/material/mixins/pbr/common.js.map +0 -1
  380. package/dist/src/material/mixins/texture.js +0 -172
  381. package/dist/src/material/mixins/texture.js.map +0 -1
  382. package/dist/src/material/mixins/vertexcolor.js +0 -56
  383. package/dist/src/material/mixins/vertexcolor.js.map +0 -1
  384. package/dist/src/material/particle.js +0 -178
  385. package/dist/src/material/particle.js.map +0 -1
  386. package/dist/src/material/pbrmr.js +0 -97
  387. package/dist/src/material/pbrmr.js.map +0 -1
  388. package/dist/src/material/pbrsg.js +0 -97
  389. package/dist/src/material/pbrsg.js.map +0 -1
  390. package/dist/src/material/shader/helper.js +0 -1209
  391. package/dist/src/material/shader/helper.js.map +0 -1
  392. package/dist/src/material/terrain-cm.js +0 -606
  393. package/dist/src/material/terrain-cm.js.map +0 -1
  394. package/dist/src/material/terrainmaterial.js +0 -375
  395. package/dist/src/material/terrainmaterial.js.map +0 -1
  396. package/dist/src/material/unlit.js +0 -41
  397. package/dist/src/material/unlit.js.map +0 -1
  398. package/dist/src/material/water.js +0 -417
  399. package/dist/src/material/water.js.map +0 -1
  400. package/dist/src/posteffect/bloom.js +0 -361
  401. package/dist/src/posteffect/bloom.js.map +0 -1
  402. package/dist/src/posteffect/compositor.js +0 -226
  403. package/dist/src/posteffect/compositor.js.map +0 -1
  404. package/dist/src/posteffect/fxaa.js +0 -273
  405. package/dist/src/posteffect/fxaa.js.map +0 -1
  406. package/dist/src/posteffect/grayscale.js +0 -69
  407. package/dist/src/posteffect/grayscale.js.map +0 -1
  408. package/dist/src/posteffect/motionblur.js +0 -96
  409. package/dist/src/posteffect/motionblur.js.map +0 -1
  410. package/dist/src/posteffect/posteffect.js +0 -126
  411. package/dist/src/posteffect/posteffect.js.map +0 -1
  412. package/dist/src/posteffect/sao.js +0 -324
  413. package/dist/src/posteffect/sao.js.map +0 -1
  414. package/dist/src/posteffect/ssr.js +0 -489
  415. package/dist/src/posteffect/ssr.js.map +0 -1
  416. package/dist/src/posteffect/taa.js +0 -172
  417. package/dist/src/posteffect/taa.js.map +0 -1
  418. package/dist/src/posteffect/tonemap.js +0 -94
  419. package/dist/src/posteffect/tonemap.js.map +0 -1
  420. package/dist/src/render/abuffer_oit.js +0 -361
  421. package/dist/src/render/abuffer_oit.js.map +0 -1
  422. package/dist/src/render/clipmap.js +0 -851
  423. package/dist/src/render/clipmap.js.map +0 -1
  424. package/dist/src/render/cluster_light.js +0 -333
  425. package/dist/src/render/cluster_light.js.map +0 -1
  426. package/dist/src/render/cull_visitor.js +0 -187
  427. package/dist/src/render/cull_visitor.js.map +0 -1
  428. package/dist/src/render/depthpass.js +0 -68
  429. package/dist/src/render/depthpass.js.map +0 -1
  430. package/dist/src/render/drawable_mixin.js +0 -227
  431. package/dist/src/render/drawable_mixin.js.map +0 -1
  432. package/dist/src/render/envlight.js +0 -463
  433. package/dist/src/render/envlight.js.map +0 -1
  434. package/dist/src/render/fbm_wavegenerator.js +0 -251
  435. package/dist/src/render/fbm_wavegenerator.js.map +0 -1
  436. package/dist/src/render/fft_wavegenerator.js +0 -1006
  437. package/dist/src/render/fft_wavegenerator.js.map +0 -1
  438. package/dist/src/render/fullscreenquad.js +0 -38
  439. package/dist/src/render/fullscreenquad.js.map +0 -1
  440. package/dist/src/render/gerstner_wavegenerator.js +0 -314
  441. package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
  442. package/dist/src/render/globalbindgroup_allocator.js +0 -60
  443. package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
  444. package/dist/src/render/hzb.js +0 -273
  445. package/dist/src/render/hzb.js.map +0 -1
  446. package/dist/src/render/lightpass.js +0 -172
  447. package/dist/src/render/lightpass.js.map +0 -1
  448. package/dist/src/render/objectcolorpass.js +0 -51
  449. package/dist/src/render/objectcolorpass.js.map +0 -1
  450. package/dist/src/render/primitive.js +0 -364
  451. package/dist/src/render/primitive.js.map +0 -1
  452. package/dist/src/render/render_queue.js +0 -467
  453. package/dist/src/render/render_queue.js.map +0 -1
  454. package/dist/src/render/renderbundle_wrapper.js +0 -152
  455. package/dist/src/render/renderbundle_wrapper.js.map +0 -1
  456. package/dist/src/render/renderer.js +0 -455
  457. package/dist/src/render/renderer.js.map +0 -1
  458. package/dist/src/render/renderpass.js +0 -200
  459. package/dist/src/render/renderpass.js.map +0 -1
  460. package/dist/src/render/shadowmap_pass.js +0 -56
  461. package/dist/src/render/shadowmap_pass.js.map +0 -1
  462. package/dist/src/render/sky.js +0 -1103
  463. package/dist/src/render/sky.js.map +0 -1
  464. package/dist/src/render/weightedblended_oit.js +0 -168
  465. package/dist/src/render/weightedblended_oit.js.map +0 -1
  466. package/dist/src/scene/batchgroup.js +0 -162
  467. package/dist/src/scene/batchgroup.js.map +0 -1
  468. package/dist/src/scene/environment.js +0 -209
  469. package/dist/src/scene/environment.js.map +0 -1
  470. package/dist/src/scene/graph_node.js +0 -72
  471. package/dist/src/scene/graph_node.js.map +0 -1
  472. package/dist/src/scene/light.js +0 -416
  473. package/dist/src/scene/light.js.map +0 -1
  474. package/dist/src/scene/mesh.js +0 -341
  475. package/dist/src/scene/mesh.js.map +0 -1
  476. package/dist/src/scene/octree.js +0 -649
  477. package/dist/src/scene/octree.js.map +0 -1
  478. package/dist/src/scene/particlesys.js +0 -738
  479. package/dist/src/scene/particlesys.js.map +0 -1
  480. package/dist/src/scene/raycast_visitor.js +0 -103
  481. package/dist/src/scene/raycast_visitor.js.map +0 -1
  482. package/dist/src/scene/scene.js +0 -284
  483. package/dist/src/scene/scene.js.map +0 -1
  484. package/dist/src/scene/scene_node.js +0 -732
  485. package/dist/src/scene/scene_node.js.map +0 -1
  486. package/dist/src/scene/terrain/grass.js +0 -278
  487. package/dist/src/scene/terrain/grass.js.map +0 -1
  488. package/dist/src/scene/terrain/heightfield.js +0 -475
  489. package/dist/src/scene/terrain/heightfield.js.map +0 -1
  490. package/dist/src/scene/terrain/patch.js +0 -530
  491. package/dist/src/scene/terrain/patch.js.map +0 -1
  492. package/dist/src/scene/terrain/quadtree.js +0 -461
  493. package/dist/src/scene/terrain/quadtree.js.map +0 -1
  494. package/dist/src/scene/terrain/terrain.js +0 -246
  495. package/dist/src/scene/terrain/terrain.js.map +0 -1
  496. package/dist/src/scene/terrain-cm/grass.js +0 -594
  497. package/dist/src/scene/terrain-cm/grass.js.map +0 -1
  498. package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
  499. package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
  500. package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
  501. package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
  502. package/dist/src/scene/water.js +0 -374
  503. package/dist/src/scene/water.js.map +0 -1
  504. package/dist/src/shaders/atmosphere.js +0 -957
  505. package/dist/src/shaders/atmosphere.js.map +0 -1
  506. package/dist/src/shaders/fog.js +0 -112
  507. package/dist/src/shaders/fog.js.map +0 -1
  508. package/dist/src/shaders/misc.js +0 -266
  509. package/dist/src/shaders/misc.js.map +0 -1
  510. package/dist/src/shaders/noise.js +0 -222
  511. package/dist/src/shaders/noise.js.map +0 -1
  512. package/dist/src/shaders/pbr.js +0 -51
  513. package/dist/src/shaders/pbr.js.map +0 -1
  514. package/dist/src/shaders/shadow.js +0 -636
  515. package/dist/src/shaders/shadow.js.map +0 -1
  516. package/dist/src/shaders/ssr.js +0 -490
  517. package/dist/src/shaders/ssr.js.map +0 -1
  518. package/dist/src/shaders/temporal.js +0 -215
  519. package/dist/src/shaders/temporal.js.map +0 -1
  520. package/dist/src/shaders/water.js +0 -756
  521. package/dist/src/shaders/water.js.map +0 -1
  522. package/dist/src/shadow/esm.js +0 -237
  523. package/dist/src/shadow/esm.js.map +0 -1
  524. package/dist/src/shadow/pcf_opt.js +0 -181
  525. package/dist/src/shadow/pcf_opt.js.map +0 -1
  526. package/dist/src/shadow/pcf_pd.js +0 -189
  527. package/dist/src/shadow/pcf_pd.js.map +0 -1
  528. package/dist/src/shadow/shader.js +0 -37
  529. package/dist/src/shadow/shader.js.map +0 -1
  530. package/dist/src/shadow/shadow_impl.js +0 -15
  531. package/dist/src/shadow/shadow_impl.js.map +0 -1
  532. package/dist/src/shadow/shadowmapper.js +0 -790
  533. package/dist/src/shadow/shadowmapper.js.map +0 -1
  534. package/dist/src/shadow/ssm.js +0 -159
  535. package/dist/src/shadow/ssm.js.map +0 -1
  536. package/dist/src/shadow/vsm.js +0 -297
  537. package/dist/src/shadow/vsm.js.map +0 -1
  538. package/dist/src/shapes/box.js +0 -386
  539. package/dist/src/shapes/box.js.map +0 -1
  540. package/dist/src/shapes/cylinder.js +0 -125
  541. package/dist/src/shapes/cylinder.js.map +0 -1
  542. package/dist/src/shapes/plane.js +0 -88
  543. package/dist/src/shapes/plane.js.map +0 -1
  544. package/dist/src/shapes/shape.js +0 -87
  545. package/dist/src/shapes/shape.js.map +0 -1
  546. package/dist/src/shapes/sphere.js +0 -114
  547. package/dist/src/shapes/sphere.js.map +0 -1
  548. package/dist/src/shapes/tetrahedron.js +0 -188
  549. package/dist/src/shapes/tetrahedron.js.map +0 -1
  550. package/dist/src/shapes/torus.js +0 -111
  551. package/dist/src/shapes/torus.js.map +0 -1
  552. package/dist/src/utility/aabbtree.js +0 -400
  553. package/dist/src/utility/aabbtree.js.map +0 -1
  554. package/dist/src/utility/bounding_volume.js +0 -29
  555. package/dist/src/utility/bounding_volume.js.map +0 -1
  556. package/dist/src/utility/debug.js +0 -28
  557. package/dist/src/utility/debug.js.map +0 -1
  558. package/dist/src/utility/draco/decoder.js +0 -116
  559. package/dist/src/utility/draco/decoder.js.map +0 -1
  560. package/dist/src/utility/misc.js +0 -105
  561. package/dist/src/utility/misc.js.map +0 -1
  562. package/dist/src/utility/panorama.js +0 -163
  563. package/dist/src/utility/panorama.js.map +0 -1
  564. package/dist/src/utility/pmrem.js +0 -354
  565. package/dist/src/utility/pmrem.js.map +0 -1
  566. package/dist/src/utility/rendermipmap.js +0 -115
  567. package/dist/src/utility/rendermipmap.js.map +0 -1
  568. package/dist/src/utility/serialization/json.js +0 -402
  569. package/dist/src/utility/serialization/json.js.map +0 -1
  570. package/dist/src/utility/serialization/manager.js +0 -623
  571. package/dist/src/utility/serialization/manager.js.map +0 -1
  572. package/dist/src/utility/serialization/scene/animation.js +0 -248
  573. package/dist/src/utility/serialization/scene/animation.js.map +0 -1
  574. package/dist/src/utility/serialization/scene/batch.js +0 -59
  575. package/dist/src/utility/serialization/scene/batch.js.map +0 -1
  576. package/dist/src/utility/serialization/scene/camera.js +0 -790
  577. package/dist/src/utility/serialization/scene/camera.js.map +0 -1
  578. package/dist/src/utility/serialization/scene/common.js +0 -222
  579. package/dist/src/utility/serialization/scene/common.js.map +0 -1
  580. package/dist/src/utility/serialization/scene/light.js +0 -575
  581. package/dist/src/utility/serialization/scene/light.js.map +0 -1
  582. package/dist/src/utility/serialization/scene/material.js +0 -1111
  583. package/dist/src/utility/serialization/scene/material.js.map +0 -1
  584. package/dist/src/utility/serialization/scene/mesh.js +0 -148
  585. package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
  586. package/dist/src/utility/serialization/scene/misc.js +0 -39
  587. package/dist/src/utility/serialization/scene/misc.js.map +0 -1
  588. package/dist/src/utility/serialization/scene/node.js +0 -451
  589. package/dist/src/utility/serialization/scene/node.js.map +0 -1
  590. package/dist/src/utility/serialization/scene/particle.js +0 -425
  591. package/dist/src/utility/serialization/scene/particle.js.map +0 -1
  592. package/dist/src/utility/serialization/scene/primitive.js +0 -692
  593. package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
  594. package/dist/src/utility/serialization/scene/scene.js +0 -704
  595. package/dist/src/utility/serialization/scene/scene.js.map +0 -1
  596. package/dist/src/utility/serialization/scene/terrain.js +0 -488
  597. package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
  598. package/dist/src/utility/serialization/scene/water.js +0 -465
  599. package/dist/src/utility/serialization/scene/water.js.map +0 -1
  600. package/dist/src/utility/shprojector.js +0 -297
  601. package/dist/src/utility/shprojector.js.map +0 -1
  602. package/dist/src/utility/textures/ggxlut.js +0 -213
  603. package/dist/src/utility/textures/ggxlut.js.map +0 -1
  604. package/dist/src/utility/textures/gradientnoise.js +0 -62
  605. package/dist/src/utility/textures/gradientnoise.js.map +0 -1
  606. package/dist/src/utility/textures/randomnoise.js +0 -41
  607. package/dist/src/utility/textures/randomnoise.js.map +0 -1
  608. package/dist/src/values.js +0 -162
  609. package/dist/src/values.js.map +0 -1
  610. package/dist/utility/blueprint/material/common.js +0 -7
  611. package/dist/utility/blueprint/material/common.js.map +0 -1
  612. package/dist/utility/serialization/blueprint/constants.js +0 -255
  613. package/dist/utility/serialization/blueprint/constants.js.map +0 -1
  614. package/dist/utility/serialization/blueprint/material/constants.js +0 -203
  615. package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
  616. package/dist/utility/serialization/blueprint/material/texture.js +0 -165
  617. package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
  618. package/dist/utility/serialization/scene/cloth_script.js +0 -834
  619. package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
  620. package/dist/utility/serialization/scene/spring_script.js +0 -596
  621. 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 { 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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"}
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 PathUtils,\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 type { HumanoidJointMapping } from '../animation/skeleton';\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\nimport { MToonMaterial, type MToonOutlineWidthMode } from '../material/mtoon';\r\n\r\ntype ReimportResourcePools = Map<string, Set<string>>;\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 name?: string;\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 name?: string;\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 name?: string;\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 name?: string;\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 * MToon related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMToonMaterial extends AssetUnlitMaterial {\r\n shadeColorFactor?: Vector3;\r\n shadeMultiplyMap?: AssetTextureInfo;\r\n shadingShiftFactor?: number;\r\n shadingShiftMap?: AssetTextureInfo;\r\n shadingShiftTextureScale?: number;\r\n shadingToonyFactor?: number;\r\n giEqualizationFactor?: number;\r\n matcapFactor?: Vector3;\r\n matcapMap?: AssetTextureInfo;\r\n parametricRimColorFactor?: Vector3;\r\n parametricRimFresnelPowerFactor?: number;\r\n parametricRimLiftFactor?: number;\r\n rimMultiplyMap?: AssetTextureInfo;\r\n rimLightingMixFactor?: number;\r\n outlineWidthMode?: MToonOutlineWidthMode;\r\n outlineWidthFactor?: number;\r\n outlineWidthMultiplyMap?: AssetTextureInfo;\r\n outlineColorFactor?: Vector3;\r\n outlineLightingMixFactor?: number;\r\n outlineUsesTangentNormals?: boolean;\r\n uvAnimationMaskMap?: AssetTextureInfo;\r\n uvAnimationScrollXSpeedFactor?: number;\r\n uvAnimationScrollYSpeedFactor?: number;\r\n uvAnimationRotationSpeedFactor?: number;\r\n transparentWithZWrite?: boolean;\r\n renderQueueOffsetNumber?: number;\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 /** Explicit humanoid joint mapping, when supplied by the source asset. */\r\n humanoidJointMapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>;\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 this.humanoidJointMapping = null;\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 rebuildMaterial?: boolean;\r\n};\r\n\r\ntype PreprocessOptions = {\r\n rebuildMaterial?: boolean;\r\n};\r\n\r\ntype SharedModelWithPreprocessOptions = SharedModel & {\r\n _preprocessOptions?: PreprocessOptions;\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 private sanitizeResourceName(name: string, fallback: string) {\r\n let normalized = (name ?? '').trim();\r\n if (!normalized) {\r\n normalized = fallback;\r\n }\r\n normalized = normalized.replace(/[<>:\"/\\\\|?*\\u0000-\\u001f]/g, '_');\r\n normalized = normalized.replace(/\\s+/g, ' ').trim();\r\n normalized = normalized.replace(/[. ]+$/g, '');\r\n return normalized || fallback;\r\n }\r\n private getReimportPoolKey(baseName: string, ext: string) {\r\n return `${ext.toLowerCase()}|${baseName}`;\r\n }\r\n private getResourceBasename(path: string, ext: string) {\r\n return path ? PathUtils.basename(path, ext || PathUtils.extname(path)) : '';\r\n }\r\n private getResourceNumericSuffix(baseName: string, candidateBaseName: string) {\r\n if (candidateBaseName === baseName) {\r\n return 0;\r\n }\r\n const match = new RegExp(`^${baseName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}_([0-9]+)$`).exec(\r\n candidateBaseName\r\n );\r\n return match ? Number.parseInt(match[1], 10) : Number.MAX_SAFE_INTEGER;\r\n }\r\n private registerReusableResourcePath(pools: ReimportResourcePools, path: string) {\r\n const ext = PathUtils.extname(path).toLowerCase();\r\n const baseName = this.getResourceBasename(path, ext);\r\n const register = (keyBaseName: string) => {\r\n const key = this.getReimportPoolKey(keyBaseName, ext);\r\n let candidates = pools.get(key);\r\n if (!candidates) {\r\n candidates = new Set<string>();\r\n pools.set(key, candidates);\r\n }\r\n candidates.add(path);\r\n };\r\n register(baseName);\r\n const strippedBaseName = baseName.replace(/_[0-9]+$/u, '');\r\n if (strippedBaseName && strippedBaseName !== baseName) {\r\n register(strippedBaseName);\r\n }\r\n }\r\n private collectReferencedAssetPaths(\r\n value: unknown,\r\n destPath: string,\r\n extensions: Set<string>,\r\n out: Set<string>\r\n ) {\r\n if (typeof value === 'string') {\r\n const normalizedPath = PathUtils.normalize(value);\r\n const ext = PathUtils.extname(normalizedPath).toLowerCase();\r\n const normalizedDestPath = PathUtils.normalize(destPath);\r\n if (\r\n extensions.has(ext) &&\r\n (normalizedPath === normalizedDestPath ||\r\n normalizedPath.startsWith(\r\n normalizedDestPath.endsWith('/') ? normalizedDestPath : `${normalizedDestPath}/`\r\n ))\r\n ) {\r\n out.add(normalizedPath);\r\n }\r\n return;\r\n }\r\n if (Array.isArray(value)) {\r\n for (const item of value) {\r\n this.collectReferencedAssetPaths(item, destPath, extensions, out);\r\n }\r\n return;\r\n }\r\n if (value && typeof value === 'object') {\r\n for (const item of Object.values(value)) {\r\n this.collectReferencedAssetPaths(item, destPath, extensions, out);\r\n }\r\n }\r\n }\r\n private async collectReferencedAssetPathsFromJsonFile(\r\n destVFS: VFS,\r\n jsonPath: string,\r\n destPath: string,\r\n extensions: Set<string>\r\n ) {\r\n if (!(await destVFS.exists(jsonPath))) {\r\n return new Set<string>();\r\n }\r\n try {\r\n const content = (await destVFS.readFile(jsonPath, { encoding: 'utf8' })) as string;\r\n const json = JSON.parse(content) as unknown;\r\n const out = new Set<string>();\r\n this.collectReferencedAssetPaths(json, destPath, extensions, out);\r\n return out;\r\n } catch (err) {\r\n console.warn(`Read existing import manifest failed: ${jsonPath}: ${err}`);\r\n return new Set<string>();\r\n }\r\n }\r\n private async createReimportResourcePools(destVFS: VFS, destPath: string, prefabPath: string) {\r\n const pools: ReimportResourcePools = new Map();\r\n if (!(await destVFS.exists(prefabPath))) {\r\n return pools;\r\n }\r\n const materialAndMeshPaths = await this.collectReferencedAssetPathsFromJsonFile(\r\n destVFS,\r\n prefabPath,\r\n destPath,\r\n new Set(['.zmtl', '.zmsh'])\r\n );\r\n for (const path of materialAndMeshPaths) {\r\n this.registerReusableResourcePath(pools, path);\r\n }\r\n const materialPaths = Array.from(materialAndMeshPaths).filter(\r\n (path) => PathUtils.extname(path).toLowerCase() === '.zmtl'\r\n );\r\n const imageExtensions = new Set(['.jpg', '.jpeg', '.png', '.webp', '.tga', '.hdr', '.ktx', '.ktx2']);\r\n for (const materialPath of materialPaths) {\r\n const texturePaths = await this.collectReferencedAssetPathsFromJsonFile(\r\n destVFS,\r\n materialPath,\r\n destPath,\r\n imageExtensions\r\n );\r\n for (const texturePath of texturePaths) {\r\n this.registerReusableResourcePath(pools, texturePath);\r\n }\r\n }\r\n return pools;\r\n }\r\n private consumeReusableResourcePath(\r\n pools: ReimportResourcePools,\r\n baseName: string,\r\n ext: string,\r\n usedPaths: Set<string>\r\n ) {\r\n const candidates = pools.get(this.getReimportPoolKey(baseName, ext));\r\n if (!candidates || candidates.size === 0) {\r\n return null;\r\n }\r\n const sorted = Array.from(candidates)\r\n .filter((path) => !usedPaths.has(path))\r\n .sort((a, b) => {\r\n const aSuffix = this.getResourceNumericSuffix(baseName, this.getResourceBasename(a, ext));\r\n const bSuffix = this.getResourceNumericSuffix(baseName, this.getResourceBasename(b, ext));\r\n if (aSuffix !== bSuffix) {\r\n return aSuffix - bSuffix;\r\n }\r\n return a.localeCompare(b);\r\n });\r\n const selected = sorted[0] ?? null;\r\n if (selected) {\r\n usedPaths.add(selected);\r\n }\r\n return selected;\r\n }\r\n private async createUniqueResourcePath(\r\n destVFS: VFS,\r\n destPath: string,\r\n baseName: string,\r\n ext: string,\r\n usedPaths: Set<string>,\r\n fallback: string\r\n ) {\r\n const sanitizedBase = this.sanitizeResourceName(baseName, fallback);\r\n for (let suffix = 0; ; suffix++) {\r\n const candidateName = suffix > 0 ? `${sanitizedBase}_${suffix}` : sanitizedBase;\r\n const candidatePath = destVFS.join(destPath, `${candidateName}${ext}`);\r\n if (!usedPaths.has(candidatePath) && !(await destVFS.exists(candidatePath))) {\r\n usedPaths.add(candidatePath);\r\n return candidatePath;\r\n }\r\n }\r\n }\r\n private async tryReuseExactResourcePath(\r\n destVFS: VFS,\r\n destPath: string,\r\n baseName: string,\r\n ext: string,\r\n usedPaths: Set<string>,\r\n fallback: string\r\n ) {\r\n const sanitizedBase = this.sanitizeResourceName(baseName, fallback);\r\n const candidatePath = destVFS.join(destPath, `${sanitizedBase}${ext}`);\r\n if (!usedPaths.has(candidatePath) && (await destVFS.exists(candidatePath))) {\r\n usedPaths.add(candidatePath);\r\n return candidatePath;\r\n }\r\n return null;\r\n }\r\n private collapseCompositeTextureName(name: string) {\r\n const normalized = (name ?? '').trim();\r\n if (!normalized) {\r\n return normalized;\r\n }\r\n const separatorIndex = normalized.indexOf('-');\r\n if (separatorIndex <= 0 || separatorIndex >= normalized.length - 1) {\r\n return normalized;\r\n }\r\n const left = normalized.slice(0, separatorIndex).trim();\r\n const right = normalized.slice(separatorIndex + 1).trim();\r\n if (!left || !right) {\r\n return normalized;\r\n }\r\n const leftParts = left.split('_');\r\n const rightParts = right.split('_');\r\n let prefixLength = 0;\r\n while (\r\n prefixLength < leftParts.length - 1 &&\r\n prefixLength < rightParts.length - 1 &&\r\n leftParts[prefixLength] === rightParts[prefixLength]\r\n ) {\r\n prefixLength++;\r\n }\r\n if (prefixLength <= 0) {\r\n return normalized;\r\n }\r\n const prefix = leftParts.slice(0, prefixLength).join('_');\r\n const leftSuffix = leftParts.slice(prefixLength).join('_');\r\n const rightSuffix = rightParts.slice(prefixLength).join('_');\r\n if (!leftSuffix || !rightSuffix) {\r\n return normalized;\r\n }\r\n return `${prefix}_${leftSuffix}-${rightSuffix}`;\r\n }\r\n private getImageBaseName(img: AssetImageInfo, index: number, fallback: string) {\r\n if (img?.name?.trim()) {\r\n return this.collapseCompositeTextureName(img.name);\r\n }\r\n if (img?.uri) {\r\n return this.collapseCompositeTextureName(PathUtils.basename(img.uri, PathUtils.extname(img.uri)));\r\n }\r\n return `${fallback}_texture_${index}`;\r\n }\r\n private getMaterialBaseName(material: AssetMaterial, key: string, fallback: string) {\r\n return material?.name?.trim() || `${fallback}_material_${key}`;\r\n }\r\n private getPrimitiveBaseName(info: AssetPrimitiveInfo, index: number, fallback: string) {\r\n return info?.name?.trim() || `${fallback}_mesh_${index}`;\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 const usedPaths = new Set<string>();\r\n const rebuildMaterial =\r\n (this as SharedModelWithPreprocessOptions)._preprocessOptions?.rebuildMaterial ?? true;\r\n const prefabName = name.endsWith('.zprefab') ? name : `${name}.zprefab`;\r\n const prefabPath = dstVFS.join(destPath, prefabName);\r\n const reusableResourcePools = await this.createReimportResourcePools(dstVFS, destPath, prefabPath);\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 baseName = this.sanitizeResourceName(\r\n this.getImageBaseName(img, i, destName),\r\n `${destName}_texture_${i}`\r\n );\r\n const path =\r\n (await this.tryReuseExactResourcePath(\r\n dstVFS,\r\n destPath,\r\n baseName,\r\n ext,\r\n usedPaths,\r\n `${destName}_texture_${i}`\r\n )) ??\r\n this.consumeReusableResourcePath(reusableResourcePools, baseName, ext, usedPaths) ??\r\n (await this.createUniqueResourcePath(\r\n dstVFS,\r\n destPath,\r\n baseName,\r\n ext,\r\n usedPaths,\r\n `${destName}_texture_${i}`\r\n ));\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 material = this._materialList[k];\r\n const baseName = this.sanitizeResourceName(\r\n this.getMaterialBaseName(material, k, destName),\r\n `${destName}_material_${k}`\r\n );\r\n const path =\r\n (await this.tryReuseExactResourcePath(\r\n dstVFS,\r\n destPath,\r\n baseName,\r\n '.zmtl',\r\n usedPaths,\r\n `${destName}_material_${k}`\r\n )) ??\r\n this.consumeReusableResourcePath(reusableResourcePools, baseName, '.zmtl', usedPaths) ??\r\n (await this.createUniqueResourcePath(\r\n dstVFS,\r\n destPath,\r\n baseName,\r\n '.zmtl',\r\n usedPaths,\r\n `${destName}_material_${k}`\r\n ));\r\n if (!rebuildMaterial && (await dstVFS.exists(path))) {\r\n material.path = path;\r\n continue;\r\n }\r\n material.path = '';\r\n const m = await this.createMaterial(manager, material, dstVFS);\r\n material.path = path;\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 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 baseName = this.sanitizeResourceName(\r\n this.getPrimitiveBaseName(info, i, destName),\r\n `${destName}_mesh_${i}`\r\n );\r\n const path =\r\n (await this.tryReuseExactResourcePath(\r\n dstVFS,\r\n destPath,\r\n baseName,\r\n '.zmsh',\r\n usedPaths,\r\n `${destName}_mesh_${i}`\r\n )) ??\r\n this.consumeReusableResourcePath(reusableResourcePools, baseName, '.zmsh', usedPaths) ??\r\n (await this.createUniqueResourcePath(\r\n dstVFS,\r\n destPath,\r\n baseName,\r\n '.zmsh',\r\n usedPaths,\r\n `${destName}_mesh_${i}`\r\n ));\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 private remapHumanoidJointMapping(\r\n mapping: Nullable<HumanoidJointMapping<AssetHierarchyNode>>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>\r\n ): Nullable<HumanoidJointMapping<SceneNode>> {\r\n if (!mapping) {\r\n return null;\r\n }\r\n const remap = <T extends string>(\r\n source: Record<T, AssetHierarchyNode> | undefined\r\n ): Record<T, SceneNode> | undefined => {\r\n if (!source) {\r\n return undefined;\r\n }\r\n const result = {} as Partial<Record<T, SceneNode>>;\r\n for (const key of Object.keys(source) as T[]) {\r\n const node = nodeMap.get(source[key]);\r\n if (node) {\r\n result[key] = node;\r\n }\r\n }\r\n return Object.keys(result).length > 0 ? (result as Record<T, SceneNode>) : undefined;\r\n };\r\n const body = remap(mapping.body);\r\n return body\r\n ? {\r\n body,\r\n leftHand: remap(mapping.leftHand),\r\n rightHand: remap(mapping.rightHand)\r\n }\r\n : 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 const humanoidJointMapping = this.remapHumanoidJointMapping(sk.humanoidJointMapping, nodeMap);\r\n rig = new SkeletonRig(\r\n joints,\r\n sk.bindPose,\r\n humanoidJointMapping ? { rootJoint, humanoidJointMapping } : { rootJoint }\r\n );\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 async function setMaterialTexture(\r\n material: Record<string, unknown>,\r\n propertyPrefix: string,\r\n textureInfo?: AssetTextureInfo\r\n ): Promise<void> {\r\n if (!textureInfo) {\r\n return;\r\n }\r\n const info = await getTextureInfo(textureInfo);\r\n if (info) {\r\n material[`${propertyPrefix}Texture`] = info.texture;\r\n material[`${propertyPrefix}TextureSampler`] = info.sampler;\r\n material[`${propertyPrefix}TexCoordIndex`] = info.texCoord;\r\n material[`${propertyPrefix}TexCoordMatrix`] = info.transform;\r\n }\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 === 'mtoon') {\r\n const mtoonAssetMaterial = assetMaterial as AssetMToonMaterial;\r\n const mtoonMaterial = new MToonMaterial();\r\n const mtoonTextureTarget = mtoonMaterial as unknown as Record<string, unknown>;\r\n mtoonMaterial.albedoColor = mtoonAssetMaterial.diffuse ?? Vector4.one();\r\n await setMaterialTexture(mtoonTextureTarget, 'albedo', mtoonAssetMaterial.diffuseMap);\r\n await setMaterialTexture(mtoonTextureTarget, 'normal', mtoonAssetMaterial.common.normalMap);\r\n mtoonMaterial.normalScale = mtoonAssetMaterial.common.bumpScale ?? 1;\r\n await setMaterialTexture(mtoonTextureTarget, 'emissive', mtoonAssetMaterial.common.emissiveMap);\r\n mtoonMaterial.emissiveColor = mtoonAssetMaterial.common.emissiveColor ?? Vector3.zero();\r\n mtoonMaterial.emissiveStrength = mtoonAssetMaterial.common.emissiveStrength ?? 1;\r\n if (mtoonAssetMaterial.shadeColorFactor) {\r\n mtoonMaterial.shadeColorFactor = mtoonAssetMaterial.shadeColorFactor;\r\n }\r\n await setMaterialTexture(mtoonTextureTarget, 'shadeMultiply', mtoonAssetMaterial.shadeMultiplyMap);\r\n if (mtoonAssetMaterial.shadingShiftFactor !== undefined) {\r\n mtoonMaterial.shadingShiftFactor = mtoonAssetMaterial.shadingShiftFactor;\r\n }\r\n await setMaterialTexture(mtoonTextureTarget, 'shadingShift', mtoonAssetMaterial.shadingShiftMap);\r\n if (mtoonAssetMaterial.shadingShiftTextureScale !== undefined) {\r\n mtoonMaterial.shadingShiftTextureScale = mtoonAssetMaterial.shadingShiftTextureScale;\r\n }\r\n if (mtoonAssetMaterial.shadingToonyFactor !== undefined) {\r\n mtoonMaterial.shadingToonyFactor = mtoonAssetMaterial.shadingToonyFactor;\r\n }\r\n if (mtoonAssetMaterial.giEqualizationFactor !== undefined) {\r\n mtoonMaterial.giEqualizationFactor = mtoonAssetMaterial.giEqualizationFactor;\r\n }\r\n if (mtoonAssetMaterial.matcapFactor) {\r\n mtoonMaterial.matcapFactor = mtoonAssetMaterial.matcapFactor;\r\n }\r\n await setMaterialTexture(mtoonTextureTarget, 'matcap', mtoonAssetMaterial.matcapMap);\r\n if (mtoonAssetMaterial.parametricRimColorFactor) {\r\n mtoonMaterial.parametricRimColorFactor = mtoonAssetMaterial.parametricRimColorFactor;\r\n }\r\n if (mtoonAssetMaterial.parametricRimFresnelPowerFactor !== undefined) {\r\n mtoonMaterial.parametricRimFresnelPowerFactor = mtoonAssetMaterial.parametricRimFresnelPowerFactor;\r\n }\r\n if (mtoonAssetMaterial.parametricRimLiftFactor !== undefined) {\r\n mtoonMaterial.parametricRimLiftFactor = mtoonAssetMaterial.parametricRimLiftFactor;\r\n }\r\n await setMaterialTexture(mtoonTextureTarget, 'rimMultiply', mtoonAssetMaterial.rimMultiplyMap);\r\n if (mtoonAssetMaterial.rimLightingMixFactor !== undefined) {\r\n mtoonMaterial.rimLightingMixFactor = mtoonAssetMaterial.rimLightingMixFactor;\r\n }\r\n if (mtoonAssetMaterial.outlineWidthMode !== undefined) {\r\n mtoonMaterial.outlineWidthMode = mtoonAssetMaterial.outlineWidthMode;\r\n }\r\n if (mtoonAssetMaterial.outlineWidthFactor !== undefined) {\r\n mtoonMaterial.outlineWidthFactor = mtoonAssetMaterial.outlineWidthFactor;\r\n }\r\n await setMaterialTexture(\r\n mtoonTextureTarget,\r\n 'outlineWidthMultiply',\r\n mtoonAssetMaterial.outlineWidthMultiplyMap\r\n );\r\n if (mtoonAssetMaterial.outlineColorFactor) {\r\n mtoonMaterial.outlineColorFactor = mtoonAssetMaterial.outlineColorFactor;\r\n }\r\n if (mtoonAssetMaterial.outlineLightingMixFactor !== undefined) {\r\n mtoonMaterial.outlineLightingMixFactor = mtoonAssetMaterial.outlineLightingMixFactor;\r\n }\r\n if (mtoonAssetMaterial.outlineUsesTangentNormals !== undefined) {\r\n mtoonMaterial.outlineUsesTangentNormals = mtoonAssetMaterial.outlineUsesTangentNormals;\r\n }\r\n await setMaterialTexture(mtoonTextureTarget, 'uvAnimationMask', mtoonAssetMaterial.uvAnimationMaskMap);\r\n if (mtoonAssetMaterial.uvAnimationScrollXSpeedFactor !== undefined) {\r\n mtoonMaterial.uvAnimationScrollXSpeedFactor = mtoonAssetMaterial.uvAnimationScrollXSpeedFactor;\r\n }\r\n if (mtoonAssetMaterial.uvAnimationScrollYSpeedFactor !== undefined) {\r\n mtoonMaterial.uvAnimationScrollYSpeedFactor = mtoonAssetMaterial.uvAnimationScrollYSpeedFactor;\r\n }\r\n if (mtoonAssetMaterial.uvAnimationRotationSpeedFactor !== undefined) {\r\n mtoonMaterial.uvAnimationRotationSpeedFactor = mtoonAssetMaterial.uvAnimationRotationSpeedFactor;\r\n }\r\n if (mtoonAssetMaterial.transparentWithZWrite !== undefined) {\r\n mtoonMaterial.transparentWithZWrite = mtoonAssetMaterial.transparentWithZWrite;\r\n }\r\n if (mtoonAssetMaterial.renderQueueOffsetNumber !== undefined) {\r\n mtoonMaterial.renderQueueOffsetNumber = mtoonAssetMaterial.renderQueueOffsetNumber;\r\n }\r\n if (mtoonAssetMaterial.common.alphaMode === 'blend') {\r\n mtoonMaterial.blendMode = 'blend';\r\n } else if (mtoonAssetMaterial.common.alphaMode === 'mask') {\r\n mtoonMaterial.alphaCutoff = mtoonAssetMaterial.common.alphaCutoff!;\r\n }\r\n if (mtoonAssetMaterial.common.doubleSided) {\r\n mtoonMaterial.cullMode = 'none';\r\n }\r\n return mtoonMaterial;\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","humanoidJointMapping","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","sanitizeResourceName","fallback","normalized","trim","replace","getReimportPoolKey","baseName","ext","toLowerCase","getResourceBasename","path","PathUtils","basename","extname","getResourceNumericSuffix","candidateBaseName","match","RegExp","exec","Number","parseInt","MAX_SAFE_INTEGER","registerReusableResourcePath","pools","register","keyBaseName","key","candidates","get","set","strippedBaseName","collectReferencedAssetPaths","value","destPath","extensions","out","normalizedPath","normalize","normalizedDestPath","has","startsWith","endsWith","Array","isArray","item","Object","values","collectReferencedAssetPathsFromJsonFile","destVFS","jsonPath","exists","content","readFile","encoding","json","JSON","parse","err","console","warn","createReimportResourcePools","prefabPath","materialAndMeshPaths","materialPaths","from","filter","imageExtensions","materialPath","texturePaths","texturePath","consumeReusableResourcePath","usedPaths","size","sorted","sort","a","b","aSuffix","bSuffix","localeCompare","selected","createUniqueResourcePath","sanitizedBase","suffix","candidateName","candidatePath","join","tryReuseExactResourcePath","collapseCompositeTextureName","separatorIndex","left","slice","right","leftParts","split","rightParts","prefixLength","prefix","leftSuffix","rightSuffix","getImageBaseName","uri","getMaterialBaseName","getPrimitiveBaseName","info","addMorphTargetGroup","group","bindings","clearMorphTargetGroups","getMorphTargetGroup","find","buildMorphTargetGroupsByName","groups","meshes","node","count","getAssetMeshMorphTargetCount","targetName","getAssetMeshMorphTargetName","targetIndex","weight","addSkeleton","addAnimation","animation","writePrimitive","vfs","primitive","vertices","indices","uint8ArrayToBase64","Uint8Array","buffer","byteOffset","byteLength","indexType","Uint16Array","indexCount","type","boxMin","x","y","z","boxMax","k","v","format","stringify","writeFile","create","preprocess","manager","srcVFS","dstVFS","destName","rebuildMaterial","_preprocessOptions","prefabName","reusableResourcePools","mimeType","guessMIMEType","ASSERT","undefined","materialKeys","keys","m","createMaterial","serializeObject","dispose","createJointDynamics","rootNode","nodeMap","animationSet","rigs","jd","chains","map","chain","start","end","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","remapHumanoidJointMapping","mapping","remap","source","body","leftHand","rightHand","createSceneNode","instancing","saveMeshes","saveSkeletons","saveAnimations","saveJointDynamics","assetScene","skeletonMeshMap","setAssetNodeToSceneNode","sk","bounding","rigMap","jointTypeT","jointTypeS","jointTypeR","rootJoint","rigKey","SkeletonRig","getRigKey","DRef","SkinBinding","positions","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","animationData","getAnimationClip","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","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","geometryCachePositionKey","bucket","Uint32Array","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","expanded","sourceOffset","targetOffset","epsilon","offset","epsilonSquared","bestIndex","bestDistance","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","fetchPrimitive","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","setBoundingVolume","BoundingBox","assetMaterial","fetchMaterial","infoMap","that","getTextureInfo","setMaterialTexture","propertyPrefix","textureInfo","unlitAssetMaterial","unlitMaterial","UnlitMaterial","albedoColor","diffuse","Vector4","diffuseMap","albedoTexture","albedoTextureSampler","albedoTexCoordIndex","albedoTexCoordMatrix","vertexColor","common","alphaMode","blendMode","alphaCutoff","doubleSided","cullMode","mtoonAssetMaterial","mtoonMaterial","MToonMaterial","mtoonTextureTarget","normalMap","normalScale","bumpScale","emissiveMap","emissiveColor","emissiveStrength","shadeColorFactor","shadeMultiplyMap","shadingShiftFactor","shadingShiftMap","shadingShiftTextureScale","shadingToonyFactor","giEqualizationFactor","matcapFactor","matcapMap","parametricRimColorFactor","parametricRimFresnelPowerFactor","parametricRimLiftFactor","rimMultiplyMap","rimLightingMixFactor","outlineWidthMode","outlineWidthFactor","outlineWidthMultiplyMap","outlineColorFactor","outlineLightingMixFactor","outlineUsesTangentNormals","uvAnimationMaskMap","uvAnimationScrollXSpeedFactor","uvAnimationScrollYSpeedFactor","uvAnimationRotationSpeedFactor","transparentWithZWrite","renderQueueOffsetNumber","assetPBRMaterial","pbrMaterial","PBRSpecularGlossinessMaterial","ior","specularFactor","specular","glossinessFactor","glossness","normalTexture","normalTextureSampler","normalTexCoordIndex","normalTexCoordMatrix","emissiveTexture","emissiveTextureSampler","emissiveTexCoordIndex","emissiveTexCoordMatrix","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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"}