@zephyr3d/scene 0.9.1 → 0.9.3

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 (522) hide show
  1. package/dist/animation/animationset.js +2 -0
  2. package/dist/animation/animationset.js.map +1 -1
  3. package/dist/animation/cloth/gpu_cloth_system.js +9 -1
  4. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  5. package/dist/animation/fixed_geometry_cache_track.js +5 -1
  6. package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
  7. package/dist/animation/geometry_cache_utils.js +20 -4
  8. package/dist/animation/geometry_cache_utils.js.map +1 -1
  9. package/dist/animation/ik/ik_angle_constraint.js +2 -6
  10. package/dist/animation/ik/ik_angle_constraint.js.map +1 -1
  11. package/dist/animation/ik/ik_chain_builder.js +68 -0
  12. package/dist/animation/ik/ik_chain_builder.js.map +1 -0
  13. package/dist/animation/ik/ik_pole_constraint.js +2 -7
  14. package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
  15. package/dist/animation/ik/two_bone_ik_solver.js +2 -6
  16. package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
  17. package/dist/animation/joint_dynamics/collision.js +60 -12
  18. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  19. package/dist/animation/joint_dynamics/constraints.js +20 -4
  20. package/dist/animation/joint_dynamics/constraints.js.map +1 -1
  21. package/dist/animation/joint_dynamics/controller.js +94 -46
  22. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  23. package/dist/animation/joint_dynamics/math.js +16 -0
  24. package/dist/animation/joint_dynamics/math.js.map +1 -0
  25. package/dist/animation/joint_dynamics/solver.js +21 -11
  26. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  27. package/dist/animation/joint_dynamics/types.js +15 -3
  28. package/dist/animation/joint_dynamics/types.js.map +1 -1
  29. package/dist/animation/pca_geometry_cache_track.js +5 -1
  30. package/dist/animation/pca_geometry_cache_track.js.map +1 -1
  31. package/dist/animation/skeleton.js +2 -2
  32. package/dist/animation/skeleton.js.map +1 -1
  33. package/dist/animation/skeleton_modifier.js +2 -6
  34. package/dist/animation/skeleton_modifier.js.map +1 -1
  35. package/dist/animation/spring/spring_particle.js +4 -4
  36. package/dist/animation/spring/spring_particle.js.map +1 -1
  37. package/dist/animation/spring/spring_system.js +13 -40
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring2/constraints.js.map +1 -1
  40. package/dist/animation/spring2/controller.js +64 -64
  41. package/dist/animation/spring2/controller.js.map +1 -1
  42. package/dist/animation/spring2/math.js.map +1 -1
  43. package/dist/animation/spring2/spring_system.js +8 -8
  44. package/dist/animation/spring2/spring_system.js.map +1 -1
  45. package/dist/app/app.js.map +1 -1
  46. package/dist/app/engine.js +1 -1
  47. package/dist/app/engine.js.map +1 -1
  48. package/dist/app/screen.js +4 -4
  49. package/dist/app/screen.js.map +1 -1
  50. package/dist/app/scriptingsystem.js +24 -1
  51. package/dist/app/scriptingsystem.js.map +1 -1
  52. package/dist/app/scriptregistry.js +22 -1
  53. package/dist/app/scriptregistry.js.map +1 -1
  54. package/dist/asset/assetmanager.js +2 -2
  55. package/dist/asset/assetmanager.js.map +1 -1
  56. package/dist/asset/model.js +60 -60
  57. package/dist/asset/model.js.map +1 -1
  58. package/dist/camera/camera.js +1 -1
  59. package/dist/camera/camera.js.map +1 -1
  60. package/dist/camera/orbit.js.map +1 -1
  61. package/dist/index.d.ts +795 -266
  62. package/dist/index.js +3 -2
  63. package/dist/index.js.map +1 -1
  64. package/dist/material/material.js +3 -1
  65. package/dist/material/material.js.map +1 -1
  66. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  67. package/dist/material/shader/helper.js +281 -278
  68. package/dist/material/shader/helper.js.map +1 -1
  69. package/dist/material/sprite.js +6 -6
  70. package/dist/material/sprite.js.map +1 -1
  71. package/dist/material/terrain-cm.js +2 -2
  72. package/dist/material/terrain-cm.js.map +1 -1
  73. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  74. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  75. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  76. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  77. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  78. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  79. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  80. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  81. package/dist/posteffect/taa.js +31 -39
  82. package/dist/posteffect/taa.js.map +1 -1
  83. package/dist/render/cluster_light.js +3 -4
  84. package/dist/render/cluster_light.js.map +1 -1
  85. package/dist/render/drawable.js +5 -1
  86. package/dist/render/drawable.js.map +1 -1
  87. package/dist/render/rendergraph/device_pool_allocator.js +29 -3
  88. package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
  89. package/dist/render/rendergraph/executor.js +283 -33
  90. package/dist/render/rendergraph/executor.js.map +1 -1
  91. package/dist/render/rendergraph/forward_plus_builder.js +338 -108
  92. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  93. package/dist/render/rendergraph/history_resource_manager.js +195 -115
  94. package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
  95. package/dist/render/rendergraph/history_resources.js +10 -0
  96. package/dist/render/rendergraph/history_resources.js.map +1 -0
  97. package/dist/render/rendergraph/rendergraph.js +162 -35
  98. package/dist/render/rendergraph/rendergraph.js.map +1 -1
  99. package/dist/render/rendergraph/types.js +25 -5
  100. package/dist/render/rendergraph/types.js.map +1 -1
  101. package/dist/render/rendertarget.js +5 -1
  102. package/dist/render/rendertarget.js.map +1 -1
  103. package/dist/render/screenrendertarget.js +5 -1
  104. package/dist/render/screenrendertarget.js.map +1 -1
  105. package/dist/render/sky.js +4 -4
  106. package/dist/render/sky.js.map +1 -1
  107. package/dist/scene/basesprite.js +2 -2
  108. package/dist/scene/basesprite.js.map +1 -1
  109. package/dist/scene/graph_node.js +1 -1
  110. package/dist/scene/graph_node.js.map +1 -1
  111. package/dist/scene/mesh.js +81 -97
  112. package/dist/scene/mesh.js.map +1 -1
  113. package/dist/scene/particlesys.js +1 -1
  114. package/dist/scene/particlesys.js.map +1 -1
  115. package/dist/scene/scene_node.js +228 -228
  116. package/dist/scene/scene_node.js.map +1 -1
  117. package/dist/scene/script_attachment.js +15 -3
  118. package/dist/scene/script_attachment.js.map +1 -1
  119. package/dist/scene/terrain-cm/terrain-cm.js +3 -3
  120. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  121. package/dist/shadow/shadowmapper.js.map +1 -1
  122. package/dist/shapes/box.js +1 -1
  123. package/dist/shapes/box.js.map +1 -1
  124. package/dist/shapes/capsule.js +0 -3
  125. package/dist/shapes/capsule.js.map +1 -1
  126. package/dist/shapes/cylinder.js +0 -3
  127. package/dist/shapes/cylinder.js.map +1 -1
  128. package/dist/shapes/plane.js +0 -3
  129. package/dist/shapes/plane.js.map +1 -1
  130. package/dist/shapes/tetrahedron.js +3 -9
  131. package/dist/shapes/tetrahedron.js.map +1 -1
  132. package/dist/shapes/torus.js +94 -66
  133. package/dist/shapes/torus.js.map +1 -1
  134. package/dist/src/animation/animation.js +127 -0
  135. package/dist/src/animation/animation.js.map +1 -0
  136. package/dist/src/animation/animationset.js +255 -0
  137. package/dist/src/animation/animationset.js.map +1 -0
  138. package/dist/src/animation/animationtrack.js +34 -0
  139. package/dist/src/animation/animationtrack.js.map +1 -0
  140. package/dist/src/animation/eulerrotationtrack.js +52 -0
  141. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  142. package/dist/src/animation/morphtarget.js +93 -0
  143. package/dist/src/animation/morphtarget.js.map +1 -0
  144. package/dist/src/animation/morphtrack.js +70 -0
  145. package/dist/src/animation/morphtrack.js.map +1 -0
  146. package/dist/src/animation/proptrack.js +161 -0
  147. package/dist/src/animation/proptrack.js.map +1 -0
  148. package/dist/src/animation/rotationtrack.js +51 -0
  149. package/dist/src/animation/rotationtrack.js.map +1 -0
  150. package/dist/src/animation/scaletrack.js +50 -0
  151. package/dist/src/animation/scaletrack.js.map +1 -0
  152. package/dist/src/animation/skeleton.js +204 -0
  153. package/dist/src/animation/skeleton.js.map +1 -0
  154. package/dist/src/animation/translationtrack.js +50 -0
  155. package/dist/src/animation/translationtrack.js.map +1 -0
  156. package/dist/src/app/app.js +129 -0
  157. package/dist/src/app/app.js.map +1 -0
  158. package/dist/src/app/inputmgr.js +267 -0
  159. package/dist/src/app/inputmgr.js.map +1 -0
  160. package/dist/src/asset/assetmanager.js +404 -0
  161. package/dist/src/asset/assetmanager.js.map +1 -0
  162. package/dist/src/asset/builtin.js +337 -0
  163. package/dist/src/asset/builtin.js.map +1 -0
  164. package/dist/src/asset/loaders/dds/dds.js +470 -0
  165. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  166. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  167. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  168. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  169. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  170. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  171. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  172. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  173. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  174. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  175. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  176. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  177. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  178. package/dist/src/asset/loaders/loader.js +45 -0
  179. package/dist/src/asset/loaders/loader.js.map +1 -0
  180. package/dist/src/asset/model.js +414 -0
  181. package/dist/src/asset/model.js.map +1 -0
  182. package/dist/src/blitter/bilateralblur.js +221 -0
  183. package/dist/src/blitter/bilateralblur.js.map +1 -0
  184. package/dist/src/blitter/blitter.js +390 -0
  185. package/dist/src/blitter/blitter.js.map +1 -0
  186. package/dist/src/blitter/box.js +118 -0
  187. package/dist/src/blitter/box.js.map +1 -0
  188. package/dist/src/blitter/copy.js +22 -0
  189. package/dist/src/blitter/copy.js.map +1 -0
  190. package/dist/src/blitter/gaussianblur.js +228 -0
  191. package/dist/src/blitter/gaussianblur.js.map +1 -0
  192. package/dist/src/camera/base.js +92 -0
  193. package/dist/src/camera/base.js.map +1 -0
  194. package/dist/src/camera/camera.js +1005 -0
  195. package/dist/src/camera/camera.js.map +1 -0
  196. package/dist/src/camera/fps.js +238 -0
  197. package/dist/src/camera/fps.js.map +1 -0
  198. package/dist/src/camera/orbit.js +245 -0
  199. package/dist/src/camera/orbit.js.map +1 -0
  200. package/dist/src/camera/orthocamera.js +167 -0
  201. package/dist/src/camera/orthocamera.js.map +1 -0
  202. package/dist/src/camera/perspectivecamera.js +141 -0
  203. package/dist/src/camera/perspectivecamera.js.map +1 -0
  204. package/dist/src/index.js +120 -0
  205. package/dist/src/index.js.map +1 -0
  206. package/dist/src/material/blinn.js +81 -0
  207. package/dist/src/material/blinn.js.map +1 -0
  208. package/dist/src/material/grassmaterial.js +113 -0
  209. package/dist/src/material/grassmaterial.js.map +1 -0
  210. package/dist/src/material/lambert.js +92 -0
  211. package/dist/src/material/lambert.js.map +1 -0
  212. package/dist/src/material/material.js +301 -0
  213. package/dist/src/material/material.js.map +1 -0
  214. package/dist/src/material/meshmaterial.js +704 -0
  215. package/dist/src/material/meshmaterial.js.map +1 -0
  216. package/dist/src/material/mixins/albedocolor.js +76 -0
  217. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  218. package/dist/src/material/mixins/foliage.js +47 -0
  219. package/dist/src/material/mixins/foliage.js.map +1 -0
  220. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  221. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  222. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  223. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  224. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  225. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  226. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  227. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  228. package/dist/src/material/mixins/lit.js +476 -0
  229. package/dist/src/material/mixins/lit.js.map +1 -0
  230. package/dist/src/material/mixins/pbr/common.js +918 -0
  231. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  232. package/dist/src/material/mixins/texture.js +172 -0
  233. package/dist/src/material/mixins/texture.js.map +1 -0
  234. package/dist/src/material/mixins/vertexcolor.js +56 -0
  235. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  236. package/dist/src/material/particle.js +178 -0
  237. package/dist/src/material/particle.js.map +1 -0
  238. package/dist/src/material/pbrmr.js +97 -0
  239. package/dist/src/material/pbrmr.js.map +1 -0
  240. package/dist/src/material/pbrsg.js +97 -0
  241. package/dist/src/material/pbrsg.js.map +1 -0
  242. package/dist/src/material/shader/helper.js +1209 -0
  243. package/dist/src/material/shader/helper.js.map +1 -0
  244. package/dist/src/material/terrain-cm.js +606 -0
  245. package/dist/src/material/terrain-cm.js.map +1 -0
  246. package/dist/src/material/terrainmaterial.js +375 -0
  247. package/dist/src/material/terrainmaterial.js.map +1 -0
  248. package/dist/src/material/unlit.js +41 -0
  249. package/dist/src/material/unlit.js.map +1 -0
  250. package/dist/src/material/water.js +417 -0
  251. package/dist/src/material/water.js.map +1 -0
  252. package/dist/src/posteffect/bloom.js +361 -0
  253. package/dist/src/posteffect/bloom.js.map +1 -0
  254. package/dist/src/posteffect/compositor.js +226 -0
  255. package/dist/src/posteffect/compositor.js.map +1 -0
  256. package/dist/src/posteffect/fxaa.js +273 -0
  257. package/dist/src/posteffect/fxaa.js.map +1 -0
  258. package/dist/src/posteffect/grayscale.js +69 -0
  259. package/dist/src/posteffect/grayscale.js.map +1 -0
  260. package/dist/src/posteffect/motionblur.js +96 -0
  261. package/dist/src/posteffect/motionblur.js.map +1 -0
  262. package/dist/src/posteffect/posteffect.js +126 -0
  263. package/dist/src/posteffect/posteffect.js.map +1 -0
  264. package/dist/src/posteffect/sao.js +324 -0
  265. package/dist/src/posteffect/sao.js.map +1 -0
  266. package/dist/src/posteffect/ssr.js +489 -0
  267. package/dist/src/posteffect/ssr.js.map +1 -0
  268. package/dist/src/posteffect/taa.js +172 -0
  269. package/dist/src/posteffect/taa.js.map +1 -0
  270. package/dist/src/posteffect/tonemap.js +94 -0
  271. package/dist/src/posteffect/tonemap.js.map +1 -0
  272. package/dist/src/render/abuffer_oit.js +361 -0
  273. package/dist/src/render/abuffer_oit.js.map +1 -0
  274. package/dist/src/render/clipmap.js +851 -0
  275. package/dist/src/render/clipmap.js.map +1 -0
  276. package/dist/src/render/cluster_light.js +333 -0
  277. package/dist/src/render/cluster_light.js.map +1 -0
  278. package/dist/src/render/cull_visitor.js +187 -0
  279. package/dist/src/render/cull_visitor.js.map +1 -0
  280. package/dist/src/render/depthpass.js +68 -0
  281. package/dist/src/render/depthpass.js.map +1 -0
  282. package/dist/src/render/drawable_mixin.js +227 -0
  283. package/dist/src/render/drawable_mixin.js.map +1 -0
  284. package/dist/src/render/envlight.js +463 -0
  285. package/dist/src/render/envlight.js.map +1 -0
  286. package/dist/src/render/fbm_wavegenerator.js +251 -0
  287. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  288. package/dist/src/render/fft_wavegenerator.js +1006 -0
  289. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  290. package/dist/src/render/fullscreenquad.js +38 -0
  291. package/dist/src/render/fullscreenquad.js.map +1 -0
  292. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  293. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  294. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  295. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  296. package/dist/src/render/hzb.js +273 -0
  297. package/dist/src/render/hzb.js.map +1 -0
  298. package/dist/src/render/lightpass.js +172 -0
  299. package/dist/src/render/lightpass.js.map +1 -0
  300. package/dist/src/render/objectcolorpass.js +51 -0
  301. package/dist/src/render/objectcolorpass.js.map +1 -0
  302. package/dist/src/render/primitive.js +364 -0
  303. package/dist/src/render/primitive.js.map +1 -0
  304. package/dist/src/render/render_queue.js +467 -0
  305. package/dist/src/render/render_queue.js.map +1 -0
  306. package/dist/src/render/renderbundle_wrapper.js +152 -0
  307. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  308. package/dist/src/render/renderer.js +455 -0
  309. package/dist/src/render/renderer.js.map +1 -0
  310. package/dist/src/render/renderpass.js +200 -0
  311. package/dist/src/render/renderpass.js.map +1 -0
  312. package/dist/src/render/shadowmap_pass.js +56 -0
  313. package/dist/src/render/shadowmap_pass.js.map +1 -0
  314. package/dist/src/render/sky.js +1103 -0
  315. package/dist/src/render/sky.js.map +1 -0
  316. package/dist/src/render/weightedblended_oit.js +168 -0
  317. package/dist/src/render/weightedblended_oit.js.map +1 -0
  318. package/dist/src/scene/batchgroup.js +162 -0
  319. package/dist/src/scene/batchgroup.js.map +1 -0
  320. package/dist/src/scene/environment.js +209 -0
  321. package/dist/src/scene/environment.js.map +1 -0
  322. package/dist/src/scene/graph_node.js +72 -0
  323. package/dist/src/scene/graph_node.js.map +1 -0
  324. package/dist/src/scene/light.js +416 -0
  325. package/dist/src/scene/light.js.map +1 -0
  326. package/dist/src/scene/mesh.js +341 -0
  327. package/dist/src/scene/mesh.js.map +1 -0
  328. package/dist/src/scene/octree.js +649 -0
  329. package/dist/src/scene/octree.js.map +1 -0
  330. package/dist/src/scene/particlesys.js +738 -0
  331. package/dist/src/scene/particlesys.js.map +1 -0
  332. package/dist/src/scene/raycast_visitor.js +103 -0
  333. package/dist/src/scene/raycast_visitor.js.map +1 -0
  334. package/dist/src/scene/scene.js +284 -0
  335. package/dist/src/scene/scene.js.map +1 -0
  336. package/dist/src/scene/scene_node.js +732 -0
  337. package/dist/src/scene/scene_node.js.map +1 -0
  338. package/dist/src/scene/terrain/grass.js +278 -0
  339. package/dist/src/scene/terrain/grass.js.map +1 -0
  340. package/dist/src/scene/terrain/heightfield.js +475 -0
  341. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  342. package/dist/src/scene/terrain/patch.js +530 -0
  343. package/dist/src/scene/terrain/patch.js.map +1 -0
  344. package/dist/src/scene/terrain/quadtree.js +461 -0
  345. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  346. package/dist/src/scene/terrain/terrain.js +246 -0
  347. package/dist/src/scene/terrain/terrain.js.map +1 -0
  348. package/dist/src/scene/terrain-cm/grass.js +594 -0
  349. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  350. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  351. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  352. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  353. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  354. package/dist/src/scene/water.js +374 -0
  355. package/dist/src/scene/water.js.map +1 -0
  356. package/dist/src/shaders/atmosphere.js +957 -0
  357. package/dist/src/shaders/atmosphere.js.map +1 -0
  358. package/dist/src/shaders/fog.js +112 -0
  359. package/dist/src/shaders/fog.js.map +1 -0
  360. package/dist/src/shaders/misc.js +266 -0
  361. package/dist/src/shaders/misc.js.map +1 -0
  362. package/dist/src/shaders/noise.js +222 -0
  363. package/dist/src/shaders/noise.js.map +1 -0
  364. package/dist/src/shaders/pbr.js +51 -0
  365. package/dist/src/shaders/pbr.js.map +1 -0
  366. package/dist/src/shaders/shadow.js +636 -0
  367. package/dist/src/shaders/shadow.js.map +1 -0
  368. package/dist/src/shaders/ssr.js +490 -0
  369. package/dist/src/shaders/ssr.js.map +1 -0
  370. package/dist/src/shaders/temporal.js +215 -0
  371. package/dist/src/shaders/temporal.js.map +1 -0
  372. package/dist/src/shaders/water.js +756 -0
  373. package/dist/src/shaders/water.js.map +1 -0
  374. package/dist/src/shadow/esm.js +237 -0
  375. package/dist/src/shadow/esm.js.map +1 -0
  376. package/dist/src/shadow/pcf_opt.js +181 -0
  377. package/dist/src/shadow/pcf_opt.js.map +1 -0
  378. package/dist/src/shadow/pcf_pd.js +189 -0
  379. package/dist/src/shadow/pcf_pd.js.map +1 -0
  380. package/dist/src/shadow/shader.js +37 -0
  381. package/dist/src/shadow/shader.js.map +1 -0
  382. package/dist/src/shadow/shadow_impl.js +15 -0
  383. package/dist/src/shadow/shadow_impl.js.map +1 -0
  384. package/dist/src/shadow/shadowmapper.js +790 -0
  385. package/dist/src/shadow/shadowmapper.js.map +1 -0
  386. package/dist/src/shadow/ssm.js +159 -0
  387. package/dist/src/shadow/ssm.js.map +1 -0
  388. package/dist/src/shadow/vsm.js +297 -0
  389. package/dist/src/shadow/vsm.js.map +1 -0
  390. package/dist/src/shapes/box.js +386 -0
  391. package/dist/src/shapes/box.js.map +1 -0
  392. package/dist/src/shapes/cylinder.js +125 -0
  393. package/dist/src/shapes/cylinder.js.map +1 -0
  394. package/dist/src/shapes/plane.js +88 -0
  395. package/dist/src/shapes/plane.js.map +1 -0
  396. package/dist/src/shapes/shape.js +87 -0
  397. package/dist/src/shapes/shape.js.map +1 -0
  398. package/dist/src/shapes/sphere.js +114 -0
  399. package/dist/src/shapes/sphere.js.map +1 -0
  400. package/dist/src/shapes/tetrahedron.js +188 -0
  401. package/dist/src/shapes/tetrahedron.js.map +1 -0
  402. package/dist/src/shapes/torus.js +111 -0
  403. package/dist/src/shapes/torus.js.map +1 -0
  404. package/dist/src/utility/aabbtree.js +400 -0
  405. package/dist/src/utility/aabbtree.js.map +1 -0
  406. package/dist/src/utility/bounding_volume.js +29 -0
  407. package/dist/src/utility/bounding_volume.js.map +1 -0
  408. package/dist/src/utility/debug.js +28 -0
  409. package/dist/src/utility/debug.js.map +1 -0
  410. package/dist/src/utility/draco/decoder.js +116 -0
  411. package/dist/src/utility/draco/decoder.js.map +1 -0
  412. package/dist/src/utility/misc.js +105 -0
  413. package/dist/src/utility/misc.js.map +1 -0
  414. package/dist/src/utility/panorama.js +163 -0
  415. package/dist/src/utility/panorama.js.map +1 -0
  416. package/dist/src/utility/pmrem.js +354 -0
  417. package/dist/src/utility/pmrem.js.map +1 -0
  418. package/dist/src/utility/rendermipmap.js +115 -0
  419. package/dist/src/utility/rendermipmap.js.map +1 -0
  420. package/dist/src/utility/serialization/json.js +402 -0
  421. package/dist/src/utility/serialization/json.js.map +1 -0
  422. package/dist/src/utility/serialization/manager.js +623 -0
  423. package/dist/src/utility/serialization/manager.js.map +1 -0
  424. package/dist/src/utility/serialization/scene/animation.js +248 -0
  425. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  426. package/dist/src/utility/serialization/scene/batch.js +59 -0
  427. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  428. package/dist/src/utility/serialization/scene/camera.js +790 -0
  429. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  430. package/dist/src/utility/serialization/scene/common.js +222 -0
  431. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  432. package/dist/src/utility/serialization/scene/light.js +575 -0
  433. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  434. package/dist/src/utility/serialization/scene/material.js +1111 -0
  435. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  436. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  437. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  438. package/dist/src/utility/serialization/scene/misc.js +39 -0
  439. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  440. package/dist/src/utility/serialization/scene/node.js +451 -0
  441. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  442. package/dist/src/utility/serialization/scene/particle.js +425 -0
  443. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  444. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  445. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  446. package/dist/src/utility/serialization/scene/scene.js +704 -0
  447. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  448. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  449. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  450. package/dist/src/utility/serialization/scene/water.js +465 -0
  451. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  452. package/dist/src/utility/shprojector.js +297 -0
  453. package/dist/src/utility/shprojector.js.map +1 -0
  454. package/dist/src/utility/textures/ggxlut.js +213 -0
  455. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  456. package/dist/src/utility/textures/gradientnoise.js +62 -0
  457. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  458. package/dist/src/utility/textures/randomnoise.js +41 -0
  459. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  460. package/dist/src/values.js +162 -0
  461. package/dist/src/values.js.map +1 -0
  462. package/dist/utility/blueprint/material/common.js +7 -0
  463. package/dist/utility/blueprint/material/common.js.map +1 -0
  464. package/dist/utility/blueprint/material/inputs.js +3 -3
  465. package/dist/utility/blueprint/material/inputs.js.map +1 -1
  466. package/dist/utility/blueprint/material/ir.js +4 -4
  467. package/dist/utility/blueprint/material/ir.js.map +1 -1
  468. package/dist/utility/serialization/blueprint/constants.js +255 -0
  469. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  470. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  471. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  472. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  473. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  474. package/dist/utility/serialization/manager.js +299 -268
  475. package/dist/utility/serialization/manager.js.map +1 -1
  476. package/dist/utility/serialization/scene/animation.js +45 -0
  477. package/dist/utility/serialization/scene/animation.js.map +1 -1
  478. package/dist/utility/serialization/scene/camera.js +53 -0
  479. package/dist/utility/serialization/scene/camera.js.map +1 -1
  480. package/dist/utility/serialization/scene/common.js +10 -0
  481. package/dist/utility/serialization/scene/common.js.map +1 -1
  482. package/dist/utility/serialization/scene/light.js +30 -0
  483. package/dist/utility/serialization/scene/light.js.map +1 -1
  484. package/dist/utility/serialization/scene/material.js +63 -0
  485. package/dist/utility/serialization/scene/material.js.map +1 -1
  486. package/dist/utility/serialization/scene/mesh.js +11 -0
  487. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  488. package/dist/utility/serialization/scene/misc.js +2 -0
  489. package/dist/utility/serialization/scene/misc.js.map +1 -1
  490. package/dist/utility/serialization/scene/node.js +19 -0
  491. package/dist/utility/serialization/scene/node.js.map +1 -1
  492. package/dist/utility/serialization/scene/particle.js +22 -0
  493. package/dist/utility/serialization/scene/particle.js.map +1 -1
  494. package/dist/utility/serialization/scene/primitive.js +33 -0
  495. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  496. package/dist/utility/serialization/scene/scene.js +39 -0
  497. package/dist/utility/serialization/scene/scene.js.map +1 -1
  498. package/dist/utility/serialization/scene/script.js +2 -0
  499. package/dist/utility/serialization/scene/script.js.map +1 -1
  500. package/dist/utility/serialization/scene/sprite.js +6 -0
  501. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  502. package/dist/utility/serialization/scene/terrain.js +9 -0
  503. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  504. package/dist/utility/serialization/scene/water.js +21 -0
  505. package/dist/utility/serialization/scene/water.js.map +1 -1
  506. package/dist/utility/serialization/types.js +5 -1
  507. package/dist/utility/serialization/types.js.map +1 -1
  508. package/dist/values.js +49 -53
  509. package/dist/values.js.map +1 -1
  510. package/package.json +2 -2
  511. package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
  512. package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
  513. package/dist/animation/spring/spring_bone.js +0 -240
  514. package/dist/animation/spring/spring_bone.js.map +0 -1
  515. package/dist/animation/spring/spring_bone_collider.js +0 -198
  516. package/dist/animation/spring/spring_bone_collider.js.map +0 -1
  517. package/dist/animation/spring/spring_bone_constraint.js +0 -170
  518. package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
  519. package/dist/animation/spring/spring_bone_system.js +0 -328
  520. package/dist/animation/spring/spring_bone_system.js.map +0 -1
  521. package/dist/render/sky_motion_vector.js +0 -85
  522. package/dist/render/sky_motion_vector.js.map +0 -1
@@ -16,21 +16,21 @@ import '../animation/joint_dynamics/joint_dynamics_system.js';
16
16
  import { processMorphData } from '../animation/morphtarget.js';
17
17
  import { MAX_MORPH_TARGETS } from '../values.js';
18
18
 
19
- /**
20
- * Named object interface for model loading
21
- * @public
19
+ /**
20
+ * Named object interface for model loading
21
+ * @public
22
22
  */ class NamedObject {
23
23
  name;
24
- /**
25
- * Creates an instance of NamedObject
26
- * @param name - Name of the object
24
+ /**
25
+ * Creates an instance of NamedObject
26
+ * @param name - Name of the object
27
27
  */ constructor(name){
28
28
  this.name = name;
29
29
  }
30
30
  }
31
- /**
32
- * Heirarchical node interface for model loading
33
- * @public
31
+ /**
32
+ * Heirarchical node interface for model loading
33
+ * @public
34
34
  */ class AssetHierarchyNode extends NamedObject {
35
35
  _parent;
36
36
  _position;
@@ -45,10 +45,10 @@ import { MAX_MORPH_TARGETS } from '../values.js';
45
45
  _weights;
46
46
  _children;
47
47
  _instances;
48
- /**
49
- * Creates an instance of AssetHierarchyNode
50
- * @param name - Name of the node
51
- * @param parent - Parent of the node
48
+ /**
49
+ * Creates an instance of AssetHierarchyNode
50
+ * @param name - Name of the node
51
+ * @param parent - Parent of the node
52
52
  */ constructor(name, parent){
53
53
  super(name);
54
54
  this._parent = null;
@@ -131,9 +131,9 @@ import { MAX_MORPH_TARGETS } from '../values.js';
131
131
  child.computeTransforms(this._worldMatrix);
132
132
  }
133
133
  }
134
- /**
135
- * Adds a child to this node
136
- * @param child - The child node to be added
134
+ /**
135
+ * Adds a child to this node
136
+ * @param child - The child node to be added
137
137
  */ addChild(child) {
138
138
  if (!child || child.parent) {
139
139
  throw new Error('AssetHierarchyNode.addChild(): invalid child node');
@@ -144,9 +144,9 @@ import { MAX_MORPH_TARGETS } from '../values.js';
144
144
  this.setMeshAttached();
145
145
  }
146
146
  }
147
- /**
148
- * Removes a child of this node
149
- * @param child - The child node to be removed
147
+ /**
148
+ * Removes a child of this node
149
+ * @param child - The child node to be removed
150
150
  */ removeChild(child) {
151
151
  const index = this._children.indexOf(child);
152
152
  if (index < 0) {
@@ -155,10 +155,10 @@ import { MAX_MORPH_TARGETS } from '../values.js';
155
155
  this._children[index]._parent = null;
156
156
  this._children.splice(index, 1);
157
157
  }
158
- /**
159
- * Attach this node to a skeleton
160
- * @param skeleton - The skeleton to which to node will attach
161
- * @param index - The joint index
158
+ /**
159
+ * Attach this node to a skeleton
160
+ * @param skeleton - The skeleton to which to node will attach
161
+ * @param index - The joint index
162
162
  */ attachToSkeleton(skeleton) {
163
163
  if (!this._attachToSkeleton) {
164
164
  this._attachToSkeleton = new Set();
@@ -170,17 +170,17 @@ import { MAX_MORPH_TARGETS } from '../values.js';
170
170
  this._parent?.setMeshAttached();
171
171
  }
172
172
  }
173
- /**
174
- * Skeleton information for model loading
175
- * @public
173
+ /**
174
+ * Skeleton information for model loading
175
+ * @public
176
176
  */ class AssetSkeleton extends NamedObject {
177
177
  /** The pivot node */ pivot;
178
178
  /** Joints of the skeleton */ joints;
179
179
  /** Inverse of the binding matrices of the joints */ inverseBindMatrices;
180
180
  /** Binding pose matrices of the joints */ bindPose;
181
- /**
182
- * Creates an instance of AssetSkeleton
183
- * @param name - Name of the skeleton
181
+ /**
182
+ * Creates an instance of AssetSkeleton
183
+ * @param name - Name of the skeleton
184
184
  */ constructor(name){
185
185
  super(name);
186
186
  this.name = name;
@@ -189,10 +189,10 @@ import { MAX_MORPH_TARGETS } from '../values.js';
189
189
  this.inverseBindMatrices = [];
190
190
  this.bindPose = [];
191
191
  }
192
- /**
193
- * Adds a joint to the skeleton
194
- * @param joint - The joint node
195
- * @param inverseBindMatrix - Inverse binding matrix of the joint
192
+ /**
193
+ * Adds a joint to the skeleton
194
+ * @param joint - The joint node
195
+ * @param inverseBindMatrix - Inverse binding matrix of the joint
196
196
  */ addJoint(joint, inverseBindMatrix) {
197
197
  joint.attachToSkeleton(this);
198
198
  this.joints.push(joint);
@@ -204,22 +204,22 @@ import { MAX_MORPH_TARGETS } from '../values.js';
204
204
  });
205
205
  }
206
206
  }
207
- /**
208
- * Scene for model loading
209
- * @public
207
+ /**
208
+ * Scene for model loading
209
+ * @public
210
210
  */ class AssetScene extends NamedObject {
211
211
  /** Root nodes of the scene */ rootNodes;
212
- /**
213
- * Creates an instance of AssetScene
214
- * @param name - Name of the scene
212
+ /**
213
+ * Creates an instance of AssetScene
214
+ * @param name - Name of the scene
215
215
  */ constructor(name){
216
216
  super(name);
217
217
  this.rootNodes = [];
218
218
  }
219
219
  }
220
- /**
221
- * Model information that can be shared by multiple model nodes
222
- * @public
220
+ /**
221
+ * Model information that can be shared by multiple model nodes
222
+ * @public
223
223
  */ class SharedModel extends Disposable {
224
224
  /** @internal */ _name;
225
225
  /** @internal */ _skeletons;
@@ -227,9 +227,9 @@ import { MAX_MORPH_TARGETS } from '../values.js';
227
227
  /** @internal */ _animations;
228
228
  /** @internal */ _scenes;
229
229
  /** @internal */ _activeScene;
230
- /**
231
- * Creates an instance of SharedModel
232
- * @param name - Name of the model
230
+ /**
231
+ * Creates an instance of SharedModel
232
+ * @param name - Name of the model
233
233
  */ constructor(name){
234
234
  super();
235
235
  this._name = name || '';
@@ -263,26 +263,26 @@ import { MAX_MORPH_TARGETS } from '../values.js';
263
263
  set activeScene(val) {
264
264
  this._activeScene = val;
265
265
  }
266
- /**
267
- * Adds a node to the scene
268
- * @param parent - Under which node the node should be added
269
- * @param index - Index of the node
270
- * @param name - Name of the node
271
- * @returns The added node
266
+ /**
267
+ * Adds a node to the scene
268
+ * @param parent - Under which node the node should be added
269
+ * @param index - Index of the node
270
+ * @param name - Name of the node
271
+ * @returns The added node
272
272
  */ addNode(parent, index, name) {
273
273
  const childNode = new AssetHierarchyNode(name, parent);
274
274
  this._nodes[index] = childNode;
275
275
  return childNode;
276
276
  }
277
- /**
278
- * Adds a skeleton to the scene
279
- * @param skeleton - The skeleton to be added
277
+ /**
278
+ * Adds a skeleton to the scene
279
+ * @param skeleton - The skeleton to be added
280
280
  */ addSkeleton(skeleton) {
281
281
  this._skeletons.push(skeleton);
282
282
  }
283
- /**
284
- * Adds an animation to the scene
285
- * @param animation - The animation to be added
283
+ /**
284
+ * Adds an animation to the scene
285
+ * @param animation - The animation to be added
286
286
  */ addAnimation(animation) {
287
287
  this._animations.push(animation);
288
288
  }
@@ -579,16 +579,16 @@ import { MAX_MORPH_TARGETS } from '../values.js';
579
579
  for (const subMesh of meshData.subMeshes){
580
580
  for (const instance of assetNode.instances){
581
581
  const meshNode = new Mesh(scene);
582
+ const skinAnimation = !!skeleton;
583
+ const morphAnimation = subMesh.numTargets > 0;
582
584
  meshNode.position = instance.t;
583
585
  meshNode.scale = instance.s;
584
586
  meshNode.rotation = instance.r;
585
587
  meshNode.name = subMesh.name;
586
588
  meshNode.clipTestEnabled = true;
587
589
  meshNode.showState = 'inherit';
588
- meshNode.skinAnimation = !!skeleton;
589
- meshNode.morphAnimation = subMesh.numTargets > 0;
590
590
  meshNode.primitive = subMesh.primitive.get();
591
- meshNode.material = instancing && !meshNode.skinAnimation && !meshNode.morphAnimation ? subMesh.material.get().createInstance() : subMesh.material.get().clone();
591
+ meshNode.material = instancing && !skinAnimation && !morphAnimation ? subMesh.material.get().createInstance() : subMesh.material.get().clone();
592
592
  meshNode.parent = node;
593
593
  subMesh.mesh = meshNode;
594
594
  processMorphData(subMesh, meshData.morphWeights);
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator, Nullable } from '@zephyr3d/base';\r\nimport { DRef } from '@zephyr3d/base';\r\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\r\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { MeshMaterial } from '../material/meshmaterial';\r\nimport { Mesh } from '../scene/mesh';\r\nimport type { BoundingBox } from '../utility';\r\nimport type { Scene } from '../scene';\r\nimport { SceneNode } from '../scene/scene_node';\r\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\r\nimport { processMorphData } from '../animation/morphtarget';\r\nimport { MAX_MORPH_TARGETS } from '../values';\r\nimport { MorphTargetTrack } from '../animation/morphtrack';\r\nimport {\r\n FixedGeometryCacheTrack,\r\n type FixedGeometryCacheFrame\r\n} from '../animation/fixed_geometry_cache_track';\r\nimport { PCAGeometryCacheTrack, type PCAGeometryCacheTrackData } from '../animation/pca_geometry_cache_track';\r\n\r\n/**\r\n * Named object interface for model loading\r\n * @public\r\n */\r\nexport class NamedObject {\r\n name: string;\r\n /**\r\n * Creates an instance of NamedObject\r\n * @param name - Name of the object\r\n */\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n}\r\n\r\n/**\r\n * Texture information for model loading\r\n * @public\r\n */\r\nexport interface MaterialTextureInfo {\r\n texture: Nullable<Texture2D>;\r\n sampler: Nullable<TextureSampler>;\r\n texCoord: number;\r\n transform: Nullable<Matrix4x4>;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: Nullable<MaterialTextureInfo>;\r\n bumpScale?: number;\r\n emissiveMap?: Nullable<MaterialTextureInfo>;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: Nullable<MaterialTextureInfo>;\r\n occlusionStrength?: number;\r\n}\r\n\r\n/**\r\n * Base material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterial {\r\n type: string;\r\n common: AssetMaterialCommon;\r\n}\r\n\r\n/**\r\n * Unlit related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetUnlitMaterial extends AssetMaterial {\r\n diffuseMap?: Nullable<MaterialTextureInfo>;\r\n diffuse?: Vector4;\r\n}\r\n\r\n/**\r\n * Sheen related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialSheen {\r\n sheenColorFactor?: Vector3;\r\n sheenColorMap?: Nullable<MaterialTextureInfo>;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Clearcoat related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialClearcoat {\r\n clearCoatFactor?: number;\r\n clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;\r\n clearCoatNormalMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Transmission related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialTransmission {\r\n transmissionFactor?: number;\r\n transmissionMap?: Nullable<MaterialTextureInfo>;\r\n thicknessFactor?: number;\r\n thicknessMap?: Nullable<MaterialTextureInfo>;\r\n attenuationColor?: Vector3;\r\n attenuationDistance?: number;\r\n}\r\n\r\n/**\r\n * Iridescence related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialIridescence {\r\n iridescenceFactor?: number;\r\n iridescenceMap?: Nullable<MaterialTextureInfo>;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * PBR related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\r\n ior?: number;\r\n}\r\n\r\n/**\r\n * PBR of Metallic-Roughness workflow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\r\n metallic?: number;\r\n roughness?: number;\r\n metallicMap?: Nullable<MaterialTextureInfo>;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: Nullable<MaterialTextureInfo>;\r\n specularColorMap?: Nullable<MaterialTextureInfo>;\r\n specularFactor?: Vector4;\r\n sheen?: AssetMaterialSheen;\r\n clearcoat?: AssetMaterialClearcoat;\r\n transmission?: AssetMaterialTransmission;\r\n iridescence?: AssetMaterialIridescence;\r\n}\r\n\r\n/**\r\n * PBR of Specular-Glossness workfow related material properties for model loading\r\n * @public\r\n */\r\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\r\n specular?: Vector3;\r\n glossness?: number;\r\n specularGlossnessMap?: Nullable<MaterialTextureInfo>;\r\n}\r\n\r\n/**\r\n * Sub mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSubMeshData {\r\n primitive: DRef<Primitive>;\r\n material: DRef<MeshMaterial>;\r\n mesh?: Mesh;\r\n rawPositions: Nullable<Float32Array>;\r\n rawBlendIndices: Nullable<TypedArray>;\r\n rawJointWeights: Nullable<TypedArray>;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: Nullable<number[]>;\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\nexport interface AssetFixedGeometryCacheAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'geometry-cache';\r\n codec?: 'fixed';\r\n subMeshIndex: number;\r\n times: Float32Array;\r\n frames: FixedGeometryCacheFrame[];\r\n}\r\n\r\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\nexport type AssetGeometryCacheAnimationTrack =\r\n | AssetFixedGeometryCacheAnimationTrack\r\n | AssetPCAGeometryCacheAnimationTrack;\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: (AssetAnimationTrack | AssetGeometryCacheAnimationTrack)[];\r\n skeletons: AssetSkeleton[];\r\n nodes: AssetHierarchyNode[];\r\n}\r\n\r\n/**\r\n * Skeletal animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\r\n skeleton: AssetSkeleton;\r\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\r\n}\r\n\r\n/**\r\n * Rotation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetRotationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Quaternion[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Translation track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Scale track of key frame animation interface for model loading\r\n * @public\r\n */\r\nexport interface AssetScaleTrack extends AssetAnimationTrack {\r\n keyFrames: Record<number, Vector3[]>;\r\n nodes: number[];\r\n}\r\n\r\n/**\r\n * Heirarchical node interface for model loading\r\n * @public\r\n */\r\nexport class AssetHierarchyNode extends NamedObject {\r\n private _parent: Nullable<AssetHierarchyNode>;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: Nullable<AssetMeshData>;\r\n private _skeleton: Nullable<AssetSkeleton>;\r\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\r\n private _meshAttached: boolean;\r\n private _matrix: Nullable<Matrix4x4>;\r\n private _worldMatrix: Nullable<Matrix4x4>;\r\n private _weights: Nullable<number[]>;\r\n private readonly _children: AssetHierarchyNode[];\r\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\r\n /**\r\n * Creates an instance of AssetHierarchyNode\r\n * @param name - Name of the node\r\n * @param parent - Parent of the node\r\n */\r\n constructor(name: string, parent?: Nullable<AssetHierarchyNode>) {\r\n super(name);\r\n this._parent = null;\r\n this._position = Vector3.zero();\r\n this._rotation = Quaternion.identity();\r\n this._scaling = Vector3.one();\r\n this._children = [];\r\n this._mesh = null;\r\n this._skeleton = null;\r\n this._attachToSkeleton = null;\r\n this._meshAttached = false;\r\n this._matrix = null;\r\n this._weights = null;\r\n this._worldMatrix = null;\r\n this._instances = [];\r\n parent?.addChild(this);\r\n }\r\n /** Parent of the node */\r\n get parent() {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix() {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix() {\r\n return this._worldMatrix;\r\n }\r\n /** Mesh data of the node, or null if this is not a mesh node */\r\n get mesh() {\r\n return this._mesh;\r\n }\r\n set mesh(data) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances() {\r\n return this._instances ?? null;\r\n }\r\n /** Default morph target weights */\r\n get weights() {\r\n return this._weights;\r\n }\r\n set weights(val) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton() {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position() {\r\n return this._position;\r\n }\r\n set position(val) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n set rotation(val) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n set scaling(val) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached() {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children() {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached() {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\r\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\r\n this._worldMatrix = parentTransform\r\n ? Matrix4x4.multiply(parentTransform, this._matrix)\r\n : new Matrix4x4(this._matrix);\r\n for (const child of this._children) {\r\n child.computeTransforms(this._worldMatrix);\r\n }\r\n }\r\n /**\r\n * Adds a child to this node\r\n * @param child - The child node to be added\r\n */\r\n addChild(child: AssetHierarchyNode) {\r\n if (!child || child.parent) {\r\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\r\n }\r\n this._children.push(child);\r\n child._parent = this;\r\n if (child.meshAttached) {\r\n this.setMeshAttached();\r\n }\r\n }\r\n /**\r\n * Removes a child of this node\r\n * @param child - The child node to be removed\r\n */\r\n removeChild(child: AssetHierarchyNode) {\r\n const index = this._children.indexOf(child);\r\n if (index < 0) {\r\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\r\n }\r\n this._children[index]._parent = null;\r\n this._children.splice(index, 1);\r\n }\r\n /**\r\n * Attach this node to a skeleton\r\n * @param skeleton - The skeleton to which to node will attach\r\n * @param index - The joint index\r\n */\r\n attachToSkeleton(skeleton: AssetSkeleton) {\r\n if (!this._attachToSkeleton) {\r\n this._attachToSkeleton = new Set();\r\n }\r\n this._attachToSkeleton.add(skeleton);\r\n }\r\n /** @internal */\r\n private setMeshAttached() {\r\n this._meshAttached = true;\r\n this._parent?.setMeshAttached();\r\n }\r\n}\r\n\r\n/**\r\n * Skeleton information for model loading\r\n * @public\r\n */\r\nexport class AssetSkeleton extends NamedObject {\r\n /** The pivot node */\r\n pivot: Nullable<AssetHierarchyNode>;\r\n /** Joints of the skeleton */\r\n joints: AssetHierarchyNode[];\r\n /** Inverse of the binding matrices of the joints */\r\n inverseBindMatrices: Matrix4x4[];\r\n /** Binding pose matrices of the joints */\r\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\r\n /**\r\n * Creates an instance of AssetSkeleton\r\n * @param name - Name of the skeleton\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.name = name;\r\n this.pivot = null;\r\n this.joints = [];\r\n this.inverseBindMatrices = [];\r\n this.bindPose = [];\r\n }\r\n /**\r\n * Adds a joint to the skeleton\r\n * @param joint - The joint node\r\n * @param inverseBindMatrix - Inverse binding matrix of the joint\r\n */\r\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\r\n joint.attachToSkeleton(this);\r\n this.joints.push(joint);\r\n this.inverseBindMatrices.push(inverseBindMatrix);\r\n this.bindPose.push({\r\n position: joint.position.clone(),\r\n rotation: joint.rotation.clone(),\r\n scale: joint.scaling.clone()\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Scene for model loading\r\n * @public\r\n */\r\nexport class AssetScene extends NamedObject {\r\n /** Root nodes of the scene */\r\n rootNodes: AssetHierarchyNode[];\r\n /**\r\n * Creates an instance of AssetScene\r\n * @param name - Name of the scene\r\n */\r\n constructor(name: string) {\r\n super(name);\r\n this.rootNodes = [];\r\n }\r\n}\r\n\r\n/**\r\n * Model information that can be shared by multiple model nodes\r\n * @public\r\n */\r\nexport class SharedModel extends Disposable {\r\n /** @internal */\r\n private _name: string;\r\n /** @internal */\r\n private _skeletons: AssetSkeleton[];\r\n /** @internal */\r\n private _nodes: AssetHierarchyNode[];\r\n /** @internal */\r\n private _animations: AssetAnimationData[];\r\n /** @internal */\r\n private _scenes: AssetScene[];\r\n /** @internal */\r\n private _activeScene: number;\r\n /**\r\n * Creates an instance of SharedModel\r\n * @param name - Name of the model\r\n */\r\n constructor(name?: string) {\r\n super();\r\n this._name = name || '';\r\n this._skeletons = [];\r\n this._nodes = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n this._activeScene = -1;\r\n }\r\n /** Name of the model */\r\n get name() {\r\n return this._name;\r\n }\r\n set name(val) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes() {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations() {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons() {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes() {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene() {\r\n return this._activeScene;\r\n }\r\n set activeScene(val) {\r\n this._activeScene = val;\r\n }\r\n /**\r\n * Adds a node to the scene\r\n * @param parent - Under which node the node should be added\r\n * @param index - Index of the node\r\n * @param name - Name of the node\r\n * @returns The added node\r\n */\r\n addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string) {\r\n const childNode = new AssetHierarchyNode(name, parent);\r\n this._nodes[index] = childNode;\r\n return childNode;\r\n }\r\n /**\r\n * Adds a skeleton to the scene\r\n * @param skeleton - The skeleton to be added\r\n */\r\n addSkeleton(skeleton: AssetSkeleton) {\r\n this._skeletons.push(skeleton);\r\n }\r\n /**\r\n * Adds an animation to the scene\r\n * @param animation - The animation to be added\r\n */\r\n addAnimation(animation: AssetAnimationData) {\r\n this._animations.push(animation);\r\n }\r\n createSceneNode(scene: Scene, instancing: boolean) {\r\n const group = new SceneNode(scene);\r\n group.name = this.name;\r\n const animationSet = group.animationSet;\r\n for (let i = 0; i < this.scenes.length; i++) {\r\n const assetScene = this.scenes[i];\r\n const skeletonMeshMap: Map<\r\n AssetSkeleton,\r\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\r\n > = new Map();\r\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\r\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\r\n this.setAssetNodeToSceneNode(\r\n scene,\r\n group,\r\n assetScene.rootNodes[k],\r\n skeletonMeshMap,\r\n nodeMap,\r\n instancing\r\n );\r\n }\r\n for (const animationData of this.animations) {\r\n let name = animationData.name ?? `_embbeded_animation`;\r\n if (animationSet.getAnimationClip(name)) {\r\n const baseName = name;\r\n for (let t = 1; ; t++) {\r\n name = `${baseName}_${t}`;\r\n if (!animationSet.getAnimationClip(name)) {\r\n break;\r\n }\r\n }\r\n }\r\n const animation = animationSet.createAnimation(name, true)!;\r\n for (const track of animationData.tracks) {\r\n if (track.type === 'translation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeTranslationTrack(track.interpolator, true));\r\n } else if (track.type === 'scale') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeScaleTrack(track.interpolator, true));\r\n } else if (track.type === 'rotation') {\r\n animation.addTrack(nodeMap.get(track.node)!, new NodeRotationTrack(track.interpolator, true));\r\n } else if (track.type === 'weights') {\r\n for (const m of track.node.mesh!.subMeshes) {\r\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\r\n console.error(\r\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\r\n );\r\n } else {\r\n const morphTrack = new MorphTargetTrack(\r\n track.interpolator,\r\n track.defaultMorphWeights,\r\n m.targetBox,\r\n m.mesh!.getBoundingVolume()!.toAABB(),\r\n true\r\n );\r\n animation.addTrack(m.mesh!, morphTrack);\r\n }\r\n }\r\n } else if (track.type === 'geometry-cache') {\r\n const subMesh = track.node.mesh?.subMeshes[track.subMeshIndex];\r\n if (!subMesh?.mesh) {\r\n console.error(`Invalid geometry cache sub mesh: ${track.subMeshIndex}`);\r\n } else {\r\n if (track.codec === 'pca') {\r\n const pcaData = this.remapPCAGeometryCacheData(subMesh, track);\r\n animation.addTrack(subMesh.mesh, new PCAGeometryCacheTrack(pcaData, true));\r\n } else {\r\n const frames = this.remapGeometryCacheFrames(subMesh, track.frames);\r\n animation.addTrack(subMesh.mesh, new FixedGeometryCacheTrack(track.times, frames, true));\r\n }\r\n }\r\n } else {\r\n console.error(`Invalid animation track type: ${track.type}`);\r\n }\r\n }\r\n for (const sk of animationData.skeletons) {\r\n const nodes = skeletonMeshMap.get(sk);\r\n if (nodes) {\r\n if (!nodes.skeleton) {\r\n nodes.skeleton = new Skeleton(\r\n sk.joints.map((val) => nodeMap.get(val)!),\r\n sk.inverseBindMatrices,\r\n sk.bindPose\r\n );\r\n for (let i = 0; i < nodes.mesh.length; i++) {\r\n const mesh = nodes.mesh[i];\r\n const v = {\r\n positions: nodes.bounding[i].rawPositions!,\r\n blendIndices: nodes.bounding[i].rawBlendIndices!,\r\n weights: nodes.bounding[i].rawJointWeights!\r\n };\r\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\r\n mesh.skeletonName = nodes.skeleton.persistentId;\r\n }\r\n animationSet.skeletons.push(new DRef(nodes.skeleton));\r\n }\r\n animation.addSkeleton(nodes.skeleton.persistentId);\r\n }\r\n }\r\n }\r\n }\r\n group.iterate((child) => {\r\n if (child !== group) {\r\n child.sealed = true;\r\n }\r\n });\r\n group.sharedModel = this;\r\n return group;\r\n }\r\n\r\n private remapGeometryCacheFrames(subMesh: AssetSubMeshData, frames: FixedGeometryCacheFrame[]) {\r\n if (!subMesh.rawPositions || frames.length === 0) {\r\n return frames;\r\n }\r\n const sourcePositions = frames[0].positions;\r\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return frames;\r\n }\r\n const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return frames;\r\n }\r\n return frames.map((frame) => ({\r\n positions: this.expandGeometryCacheData(frame.positions, remap),\r\n normals:\r\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(frame.normals, remap)\r\n : null,\r\n boundingBox: frame.boundingBox\r\n }));\r\n }\r\n\r\n private remapPCAGeometryCacheData(\r\n subMesh: AssetSubMeshData,\r\n track: AssetPCAGeometryCacheAnimationTrack\r\n ): PCAGeometryCacheTrackData {\r\n const remapReference = track.positionReference ?? this.reconstructPCAGeometryCacheReference(track);\r\n if (!subMesh.rawPositions || remapReference.length === 0) {\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n const sourceVertexCount = (remapReference.length / 3) >> 0;\r\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\r\n if (sourceVertexCount === targetVertexCount) {\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, remapReference);\r\n if (!remap) {\r\n console.error(\r\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\r\n `Export the base glb and zabc from the same final mesh layout.`\r\n );\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: track.positionReference ?? null,\r\n positionMean: track.positionMean,\r\n positionBases: track.positionBases,\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean: track.normalMean ?? null,\r\n normalBases: track.normalBases ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n return {\r\n times: track.times,\r\n bounds: track.bounds,\r\n positionReference: this.expandGeometryCacheData(remapReference, remap),\r\n positionMean: this.expandGeometryCacheData(track.positionMean, remap),\r\n positionBases: track.positionBases.map((basis) => this.expandGeometryCacheData(basis, remap)),\r\n positionCoefficients: track.positionCoefficients,\r\n normalMean:\r\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\r\n ? this.expandGeometryCacheData(track.normalMean, remap)\r\n : null,\r\n normalBases:\r\n track.normalBases?.map((basis) =>\r\n (basis.length / 3) >> 0 === sourceVertexCount ? this.expandGeometryCacheData(basis, remap) : basis\r\n ) ?? null,\r\n normalCoefficients: track.normalCoefficients ?? null\r\n };\r\n }\r\n\r\n private reconstructPCAGeometryCacheReference(track: AssetPCAGeometryCacheAnimationTrack) {\r\n const reference = new Float32Array(track.positionMean);\r\n const coefficients = track.positionCoefficients[0];\r\n if (!coefficients) {\r\n return reference;\r\n }\r\n const componentCount = Math.min(track.positionBases.length, coefficients.length);\r\n for (let component = 0; component < componentCount; component++) {\r\n const basis = track.positionBases[component];\r\n const coefficient = coefficients[component];\r\n if (!basis || coefficient === 0) {\r\n continue;\r\n }\r\n const count = Math.min(reference.length, basis.length);\r\n for (let i = 0; i < count; i++) {\r\n reference[i] += basis[i] * coefficient;\r\n }\r\n }\r\n return reference;\r\n }\r\n\r\n private buildGeometryCacheRemap(targetPositions: Float32Array, sourcePositions: Float32Array) {\r\n const sourceCount = (sourcePositions.length / 3) >> 0;\r\n const targetCount = (targetPositions.length / 3) >> 0;\r\n const buckets = new Map<string, number[]>();\r\n for (let i = 0; i < sourceCount; i++) {\r\n const key = this.geometryCachePositionKey(\r\n sourcePositions[i * 3],\r\n sourcePositions[i * 3 + 1],\r\n sourcePositions[i * 3 + 2]\r\n );\r\n const bucket = buckets.get(key);\r\n if (bucket) {\r\n bucket.push(i);\r\n } else {\r\n buckets.set(key, [i]);\r\n }\r\n }\r\n const remap = new Uint32Array(targetCount);\r\n for (let i = 0; i < targetCount; i++) {\r\n const x = targetPositions[i * 3];\r\n const y = targetPositions[i * 3 + 1];\r\n const z = targetPositions[i * 3 + 2];\r\n let sourceIndex = this.findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\r\n if (sourceIndex < 0) {\r\n sourceIndex = this.findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);\r\n }\r\n if (sourceIndex < 0) {\r\n return null;\r\n }\r\n remap[i] = sourceIndex;\r\n }\r\n return remap;\r\n }\r\n\r\n private expandGeometryCacheData(source: Float32Array, remap: Uint32Array) {\r\n const expanded = new Float32Array(remap.length * 3);\r\n for (let i = 0; i < remap.length; i++) {\r\n const sourceOffset = remap[i] * 3;\r\n const targetOffset = i * 3;\r\n expanded[targetOffset] = source[sourceOffset];\r\n expanded[targetOffset + 1] = source[sourceOffset + 1];\r\n expanded[targetOffset + 2] = source[sourceOffset + 2];\r\n }\r\n return expanded;\r\n }\r\n\r\n private findGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n buckets: Map<string, number[]>,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\r\n const bucket = buckets.get(this.geometryCachePositionKey(x, y, z));\r\n if (!bucket) {\r\n return -1;\r\n }\r\n const epsilon = 1e-5;\r\n for (const index of bucket) {\r\n const offset = index * 3;\r\n if (\r\n Math.abs(sourcePositions[offset] - x) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 1] - y) <= epsilon &&\r\n Math.abs(sourcePositions[offset + 2] - z) <= epsilon\r\n ) {\r\n return index;\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private findNearestGeometryCacheSourceIndex(\r\n sourcePositions: Float32Array,\r\n x: number,\r\n y: number,\r\n z: number\r\n ) {\r\n const epsilonSquared = 1e-8;\r\n let bestIndex = -1;\r\n let bestDistance = Number.POSITIVE_INFINITY;\r\n for (let i = 0; i < sourcePositions.length; i += 3) {\r\n const dx = sourcePositions[i] - x;\r\n const dy = sourcePositions[i + 1] - y;\r\n const dz = sourcePositions[i + 2] - z;\r\n const distance = dx * dx + dy * dy + dz * dz;\r\n if (distance < bestDistance) {\r\n bestDistance = distance;\r\n bestIndex = i / 3;\r\n }\r\n }\r\n return bestDistance <= epsilonSquared ? bestIndex : -1;\r\n }\r\n\r\n private geometryCachePositionKey(x: number, y: number, z: number) {\r\n return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;\r\n }\r\n\r\n protected onDispose() {\r\n super.onDispose();\r\n const nodes = [...this._nodes];\r\n while (nodes.length > 0) {\r\n const node = nodes.shift();\r\n nodes.push(...node!.children);\r\n const mesh = node!.mesh;\r\n if (mesh) {\r\n for (const subMesh of mesh.subMeshes) {\r\n subMesh.primitive?.dispose();\r\n subMesh.material?.dispose();\r\n }\r\n }\r\n }\r\n this._nodes = [];\r\n this._skeletons = [];\r\n this._scenes = [];\r\n this._animations = [];\r\n }\r\n private setAssetNodeToSceneNode(\r\n scene: Scene,\r\n parent: SceneNode,\r\n assetNode: AssetHierarchyNode,\r\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\r\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\r\n instancing: boolean\r\n ) {\r\n const node: SceneNode = new SceneNode(scene);\r\n nodeMap.set(assetNode, node);\r\n node.name = assetNode.name ?? '';\r\n node.position.set(assetNode.position);\r\n node.rotation.set(assetNode.rotation);\r\n node.scale.set(assetNode.scaling);\r\n if (assetNode.mesh) {\r\n const meshData = assetNode.mesh;\r\n const skeleton = assetNode.skeleton;\r\n for (const subMesh of meshData.subMeshes) {\r\n for (const instance of assetNode.instances!) {\r\n const meshNode = new Mesh(scene);\r\n meshNode.position = instance.t;\r\n meshNode.scale = instance.s;\r\n meshNode.rotation = instance.r;\r\n meshNode.name = subMesh.name;\r\n meshNode.clipTestEnabled = true;\r\n meshNode.showState = 'inherit';\r\n meshNode.skinAnimation = !!skeleton;\r\n meshNode.morphAnimation = subMesh.numTargets > 0;\r\n meshNode.primitive = subMesh.primitive.get()!;\r\n meshNode.material =\r\n instancing && !meshNode.skinAnimation && !meshNode.morphAnimation\r\n ? subMesh.material.get()!.createInstance()\r\n : subMesh.material.get()!.clone();\r\n meshNode.parent = node;\r\n subMesh.mesh = meshNode;\r\n processMorphData(subMesh, meshData.morphWeights!);\r\n if (skeleton) {\r\n if (!skeletonMeshMap.has(skeleton)) {\r\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\r\n } else {\r\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\r\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n node.parent = parent;\r\n for (const child of assetNode.children) {\r\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\r\n }\r\n }\r\n}\r\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","subMesh","subMeshIndex","codec","pcaData","remapPCAGeometryCacheData","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","FixedGeometryCacheTrack","times","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","sourcePositions","sourceVertexCount","targetVertexCount","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","normals","boundingBox","remapReference","positionReference","reconstructPCAGeometryCacheReference","bounds","positionMean","positionBases","positionCoefficients","normalMean","normalBases","normalCoefficients","basis","reference","Float32Array","coefficients","componentCount","Math","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","key","geometryCachePositionKey","bucket","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","offset","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round","onDispose","shift","primitive","dispose","material","assetNode","meshData","instance","meshNode","Mesh","s","r","clipTestEnabled","showState","skinAnimation","morphAnimation","numTargets","createInstance","processMorphData","morphWeights","has"],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator, Nullable } from '@zephyr3d/base';\nimport { DRef } from '@zephyr3d/base';\nimport { Disposable, Matrix4x4, Quaternion, Vector3 } from '@zephyr3d/base';\nimport { type Texture2D, type TextureSampler } from '@zephyr3d/device';\nimport type { Primitive } from '../render/primitive';\nimport type { MeshMaterial } from '../material/meshmaterial';\nimport { Mesh } from '../scene/mesh';\nimport type { BoundingBox } from '../utility';\nimport type { Scene } from '../scene';\nimport { SceneNode } from '../scene/scene_node';\nimport { NodeRotationTrack, NodeScaleTrack, Skeleton, NodeTranslationTrack } from '../animation';\nimport { processMorphData } from '../animation/morphtarget';\nimport { MAX_MORPH_TARGETS } from '../values';\nimport { MorphTargetTrack } from '../animation/morphtrack';\nimport {\n FixedGeometryCacheTrack,\n type FixedGeometryCacheFrame\n} from '../animation/fixed_geometry_cache_track';\nimport { PCAGeometryCacheTrack, type PCAGeometryCacheTrackData } from '../animation/pca_geometry_cache_track';\n\n/**\n * Named object interface for model loading\n * @public\n */\nexport class NamedObject {\n name: string;\n /**\n * Creates an instance of NamedObject\n * @param name - Name of the object\n */\n constructor(name: string) {\n this.name = name;\n }\n}\n\n/**\n * Texture information for model loading\n * @public\n */\nexport interface MaterialTextureInfo {\n texture: Nullable<Texture2D>;\n sampler: Nullable<TextureSampler>;\n texCoord: number;\n transform: Nullable<Matrix4x4>;\n}\n\n/**\n * Common properties of material for model loading\n * @public\n */\nexport interface AssetMaterialCommon {\n vertexColor?: boolean;\n vertexNormal?: boolean;\n useTangent?: boolean;\n alphaMode?: 'blend' | 'mask';\n alphaCutoff?: number;\n doubleSided?: boolean;\n normalMap?: Nullable<MaterialTextureInfo>;\n bumpScale?: number;\n emissiveMap?: Nullable<MaterialTextureInfo>;\n emissiveColor?: Vector3;\n emissiveStrength?: number;\n occlusionMap?: Nullable<MaterialTextureInfo>;\n occlusionStrength?: number;\n}\n\n/**\n * Base material properties for model loading\n * @public\n */\nexport interface AssetMaterial {\n type: string;\n common: AssetMaterialCommon;\n}\n\n/**\n * Unlit related material properties for model loading\n * @public\n */\nexport interface AssetUnlitMaterial extends AssetMaterial {\n diffuseMap?: Nullable<MaterialTextureInfo>;\n diffuse?: Vector4;\n}\n\n/**\n * Sheen related material properties for model loading\n * @public\n */\nexport interface AssetMaterialSheen {\n sheenColorFactor?: Vector3;\n sheenColorMap?: Nullable<MaterialTextureInfo>;\n sheenRoughnessFactor?: number;\n sheenRoughnessMap?: Nullable<MaterialTextureInfo>;\n}\n\n/**\n * Clearcoat related material properties for model loading\n * @public\n */\nexport interface AssetMaterialClearcoat {\n clearCoatFactor?: number;\n clearCoatIntensityMap?: Nullable<MaterialTextureInfo>;\n clearCoatRoughnessFactor?: number;\n clearCoatRoughnessMap?: Nullable<MaterialTextureInfo>;\n clearCoatNormalMap?: Nullable<MaterialTextureInfo>;\n}\n\n/**\n * Transmission related material properties for model loading\n * @public\n */\nexport interface AssetMaterialTransmission {\n transmissionFactor?: number;\n transmissionMap?: Nullable<MaterialTextureInfo>;\n thicknessFactor?: number;\n thicknessMap?: Nullable<MaterialTextureInfo>;\n attenuationColor?: Vector3;\n attenuationDistance?: number;\n}\n\n/**\n * Iridescence related material properties for model loading\n * @public\n */\nexport interface AssetMaterialIridescence {\n iridescenceFactor?: number;\n iridescenceMap?: Nullable<MaterialTextureInfo>;\n iridescenceIor?: number;\n iridescenceThicknessMinimum?: number;\n iridescenceThicknessMaximum?: number;\n iridescenceThicknessMap?: Nullable<MaterialTextureInfo>;\n}\n\n/**\n * PBR related material properties for model loading\n * @public\n */\nexport interface AssetPBRMaterialCommon extends AssetUnlitMaterial {\n ior?: number;\n}\n\n/**\n * PBR of Metallic-Roughness workflow related material properties for model loading\n * @public\n */\nexport interface AssetPBRMaterialMR extends AssetPBRMaterialCommon {\n metallic?: number;\n roughness?: number;\n metallicMap?: Nullable<MaterialTextureInfo>;\n metallicIndex?: number;\n roughnessIndex?: number;\n specularMap?: Nullable<MaterialTextureInfo>;\n specularColorMap?: Nullable<MaterialTextureInfo>;\n specularFactor?: Vector4;\n sheen?: AssetMaterialSheen;\n clearcoat?: AssetMaterialClearcoat;\n transmission?: AssetMaterialTransmission;\n iridescence?: AssetMaterialIridescence;\n}\n\n/**\n * PBR of Specular-Glossness workfow related material properties for model loading\n * @public\n */\nexport interface AssetPBRMaterialSG extends AssetPBRMaterialCommon {\n specular?: Vector3;\n glossness?: number;\n specularGlossnessMap?: Nullable<MaterialTextureInfo>;\n}\n\n/**\n * Sub mesh data interface for model loading\n * @public\n */\nexport interface AssetSubMeshData {\n primitive: DRef<Primitive>;\n material: DRef<MeshMaterial>;\n mesh?: Mesh;\n rawPositions: Nullable<Float32Array>;\n rawBlendIndices: Nullable<TypedArray>;\n rawJointWeights: Nullable<TypedArray>;\n name: string;\n numTargets: number;\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\n targetBox?: BoundingBox[];\n morphAttribCount?: number;\n}\n\n/**\n * Mesh data interface for model loading\n * @public\n */\nexport interface AssetMeshData {\n morphWeights?: Nullable<number[]>;\n subMeshes: AssetSubMeshData[];\n}\n\n/**\n * Animation track interface for model loading\n * @public\n */\nexport interface AssetAnimationTrack {\n node: AssetHierarchyNode;\n type: 'translation' | 'scale' | 'rotation' | 'weights';\n interpolator: Interpolator;\n defaultMorphWeights?: number[];\n}\n\n/**\n * Fixed-frame geometry cache animation track data.\n *\n * @public\n */\nexport interface AssetFixedGeometryCacheAnimationTrack {\n node: AssetHierarchyNode;\n type: 'geometry-cache';\n codec?: 'fixed';\n subMeshIndex: number;\n times: Float32Array;\n frames: FixedGeometryCacheFrame[];\n}\n\n/**\n * PCA-compressed geometry cache animation track data.\n *\n * @public\n */\nexport interface AssetPCAGeometryCacheAnimationTrack {\n node: AssetHierarchyNode;\n type: 'geometry-cache';\n codec: 'pca';\n subMeshIndex: number;\n times: Float32Array;\n bounds: [number, number, number, number, number, number][];\n positionReference?: Nullable<Float32Array>;\n positionMean: Float32Array;\n positionBases: Float32Array[];\n positionCoefficients: Float32Array[];\n normalMean?: Nullable<Float32Array>;\n normalBases?: Nullable<Float32Array[]>;\n normalCoefficients?: Nullable<Float32Array[]>;\n}\n\n/**\n * Geometry cache animation track data.\n *\n * @public\n */\nexport type AssetGeometryCacheAnimationTrack =\n | AssetFixedGeometryCacheAnimationTrack\n | AssetPCAGeometryCacheAnimationTrack;\n\n/**\n * Animation data interface for model loading\n * @public\n */\nexport interface AssetAnimationData {\n name: string;\n tracks: (AssetAnimationTrack | AssetGeometryCacheAnimationTrack)[];\n skeletons: AssetSkeleton[];\n nodes: AssetHierarchyNode[];\n}\n\n/**\n * Skeletal animation track interface for model loading\n * @public\n */\nexport interface AssetSkeletalAnimationTrack extends AssetAnimationTrack {\n skeleton: AssetSkeleton;\n keyFrames: Record<number, { translation: Vector3; rotation: Quaternion; scale: Vector3 }[]>;\n}\n\n/**\n * Rotation track of key frame animation interface for model loading\n * @public\n */\nexport interface AssetRotationTrack extends AssetAnimationTrack {\n keyFrames: Record<number, Quaternion[]>;\n nodes: number[];\n}\n\n/**\n * Translation track of key frame animation interface for model loading\n * @public\n */\nexport interface AssetTranslationTrack extends AssetAnimationTrack {\n keyFrames: Record<number, Vector3[]>;\n nodes: number[];\n}\n\n/**\n * Scale track of key frame animation interface for model loading\n * @public\n */\nexport interface AssetScaleTrack extends AssetAnimationTrack {\n keyFrames: Record<number, Vector3[]>;\n nodes: number[];\n}\n\n/**\n * Heirarchical node interface for model loading\n * @public\n */\nexport class AssetHierarchyNode extends NamedObject {\n private _parent: Nullable<AssetHierarchyNode>;\n private _position: Vector3;\n private _rotation: Quaternion;\n private _scaling: Vector3;\n private _mesh: Nullable<AssetMeshData>;\n private _skeleton: Nullable<AssetSkeleton>;\n private _attachToSkeleton: Nullable<Set<AssetSkeleton>>;\n private _meshAttached: boolean;\n private _matrix: Nullable<Matrix4x4>;\n private _worldMatrix: Nullable<Matrix4x4>;\n private _weights: Nullable<number[]>;\n private readonly _children: AssetHierarchyNode[];\n private readonly _instances?: { t: Vector3; s: Vector3; r: Quaternion }[];\n /**\n * Creates an instance of AssetHierarchyNode\n * @param name - Name of the node\n * @param parent - Parent of the node\n */\n constructor(name: string, parent?: Nullable<AssetHierarchyNode>) {\n super(name);\n this._parent = null;\n this._position = Vector3.zero();\n this._rotation = Quaternion.identity();\n this._scaling = Vector3.one();\n this._children = [];\n this._mesh = null;\n this._skeleton = null;\n this._attachToSkeleton = null;\n this._meshAttached = false;\n this._matrix = null;\n this._weights = null;\n this._worldMatrix = null;\n this._instances = [];\n parent?.addChild(this);\n }\n /** Parent of the node */\n get parent() {\n return this._parent;\n }\n /** Local transformation matrix of the node */\n get matrix() {\n return this._matrix;\n }\n /** World transformation matrix of the node */\n get worldMatrix() {\n return this._worldMatrix;\n }\n /** Mesh data of the node, or null if this is not a mesh node */\n get mesh() {\n return this._mesh;\n }\n set mesh(data) {\n this._mesh = data;\n this.setMeshAttached();\n }\n /** instances */\n get instances() {\n return this._instances ?? null;\n }\n /** Default morph target weights */\n get weights() {\n return this._weights;\n }\n set weights(val) {\n this._weights = val;\n }\n /** The skeleton used to control the node */\n get skeleton() {\n return this._skeleton;\n }\n set skeleton(skeleton) {\n this._skeleton = skeleton;\n }\n /** The translation of the node */\n get position() {\n return this._position;\n }\n set position(val) {\n this._position = val;\n }\n /** The rotation of the node */\n get rotation() {\n return this._rotation;\n }\n set rotation(val) {\n this._rotation = val;\n }\n /** The scale of the node */\n get scaling() {\n return this._scaling;\n }\n set scaling(val) {\n this._scaling = val;\n }\n /** true if the node is parent of a mesh node */\n get meshAttached() {\n return this._meshAttached;\n }\n /** Children of the node */\n get children() {\n return this._children;\n }\n /** The skeleton to which the node belongs if this is a joint node */\n get skeletonAttached() {\n return this._attachToSkeleton;\n }\n /** @internal */\n computeTransforms(parentTransform: Nullable<Matrix4x4>) {\n this._matrix = Matrix4x4.scaling(this._scaling).rotateLeft(this._rotation).translateLeft(this._position);\n this._worldMatrix = parentTransform\n ? Matrix4x4.multiply(parentTransform, this._matrix)\n : new Matrix4x4(this._matrix);\n for (const child of this._children) {\n child.computeTransforms(this._worldMatrix);\n }\n }\n /**\n * Adds a child to this node\n * @param child - The child node to be added\n */\n addChild(child: AssetHierarchyNode) {\n if (!child || child.parent) {\n throw new Error('AssetHierarchyNode.addChild(): invalid child node');\n }\n this._children.push(child);\n child._parent = this;\n if (child.meshAttached) {\n this.setMeshAttached();\n }\n }\n /**\n * Removes a child of this node\n * @param child - The child node to be removed\n */\n removeChild(child: AssetHierarchyNode) {\n const index = this._children.indexOf(child);\n if (index < 0) {\n throw new Error('AssetHierarchyNode.removeChild(): invalid child node');\n }\n this._children[index]._parent = null;\n this._children.splice(index, 1);\n }\n /**\n * Attach this node to a skeleton\n * @param skeleton - The skeleton to which to node will attach\n * @param index - The joint index\n */\n attachToSkeleton(skeleton: AssetSkeleton) {\n if (!this._attachToSkeleton) {\n this._attachToSkeleton = new Set();\n }\n this._attachToSkeleton.add(skeleton);\n }\n /** @internal */\n private setMeshAttached() {\n this._meshAttached = true;\n this._parent?.setMeshAttached();\n }\n}\n\n/**\n * Skeleton information for model loading\n * @public\n */\nexport class AssetSkeleton extends NamedObject {\n /** The pivot node */\n pivot: Nullable<AssetHierarchyNode>;\n /** Joints of the skeleton */\n joints: AssetHierarchyNode[];\n /** Inverse of the binding matrices of the joints */\n inverseBindMatrices: Matrix4x4[];\n /** Binding pose matrices of the joints */\n bindPose: { position: Vector3; rotation: Quaternion; scale: Vector3 }[];\n /**\n * Creates an instance of AssetSkeleton\n * @param name - Name of the skeleton\n */\n constructor(name: string) {\n super(name);\n this.name = name;\n this.pivot = null;\n this.joints = [];\n this.inverseBindMatrices = [];\n this.bindPose = [];\n }\n /**\n * Adds a joint to the skeleton\n * @param joint - The joint node\n * @param inverseBindMatrix - Inverse binding matrix of the joint\n */\n addJoint(joint: AssetHierarchyNode, inverseBindMatrix: Matrix4x4) {\n joint.attachToSkeleton(this);\n this.joints.push(joint);\n this.inverseBindMatrices.push(inverseBindMatrix);\n this.bindPose.push({\n position: joint.position.clone(),\n rotation: joint.rotation.clone(),\n scale: joint.scaling.clone()\n });\n }\n}\n\n/**\n * Scene for model loading\n * @public\n */\nexport class AssetScene extends NamedObject {\n /** Root nodes of the scene */\n rootNodes: AssetHierarchyNode[];\n /**\n * Creates an instance of AssetScene\n * @param name - Name of the scene\n */\n constructor(name: string) {\n super(name);\n this.rootNodes = [];\n }\n}\n\n/**\n * Model information that can be shared by multiple model nodes\n * @public\n */\nexport class SharedModel extends Disposable {\n /** @internal */\n private _name: string;\n /** @internal */\n private _skeletons: AssetSkeleton[];\n /** @internal */\n private _nodes: AssetHierarchyNode[];\n /** @internal */\n private _animations: AssetAnimationData[];\n /** @internal */\n private _scenes: AssetScene[];\n /** @internal */\n private _activeScene: number;\n /**\n * Creates an instance of SharedModel\n * @param name - Name of the model\n */\n constructor(name?: string) {\n super();\n this._name = name || '';\n this._skeletons = [];\n this._nodes = [];\n this._scenes = [];\n this._animations = [];\n this._activeScene = -1;\n }\n /** Name of the model */\n get name() {\n return this._name;\n }\n set name(val) {\n this._name = val;\n }\n /** All scenes that the model contains */\n get scenes() {\n return this._scenes;\n }\n /** All animations that the model contains */\n get animations() {\n return this._animations;\n }\n /** All skeletons that the model contains */\n get skeletons() {\n return this._skeletons;\n }\n /** All nodes that the model contains */\n get nodes() {\n return this._nodes;\n }\n /** The active scene of the model */\n get activeScene() {\n return this._activeScene;\n }\n set activeScene(val) {\n this._activeScene = val;\n }\n /**\n * Adds a node to the scene\n * @param parent - Under which node the node should be added\n * @param index - Index of the node\n * @param name - Name of the node\n * @returns The added node\n */\n addNode(parent: Nullable<AssetHierarchyNode>, index: number, name: string) {\n const childNode = new AssetHierarchyNode(name, parent);\n this._nodes[index] = childNode;\n return childNode;\n }\n /**\n * Adds a skeleton to the scene\n * @param skeleton - The skeleton to be added\n */\n addSkeleton(skeleton: AssetSkeleton) {\n this._skeletons.push(skeleton);\n }\n /**\n * Adds an animation to the scene\n * @param animation - The animation to be added\n */\n addAnimation(animation: AssetAnimationData) {\n this._animations.push(animation);\n }\n createSceneNode(scene: Scene, instancing: boolean) {\n const group = new SceneNode(scene);\n group.name = this.name;\n const animationSet = group.animationSet;\n for (let i = 0; i < this.scenes.length; i++) {\n const assetScene = this.scenes[i];\n const skeletonMeshMap: Map<\n AssetSkeleton,\n { mesh: Mesh[]; bounding: AssetSubMeshData[]; skeleton?: Skeleton }\n > = new Map();\n const nodeMap: Map<AssetHierarchyNode, SceneNode> = new Map();\n for (let k = 0; k < assetScene.rootNodes.length; k++) {\n this.setAssetNodeToSceneNode(\n scene,\n group,\n assetScene.rootNodes[k],\n skeletonMeshMap,\n nodeMap,\n instancing\n );\n }\n for (const animationData of this.animations) {\n let name = animationData.name ?? `_embbeded_animation`;\n if (animationSet.getAnimationClip(name)) {\n const baseName = name;\n for (let t = 1; ; t++) {\n name = `${baseName}_${t}`;\n if (!animationSet.getAnimationClip(name)) {\n break;\n }\n }\n }\n const animation = animationSet.createAnimation(name, true)!;\n for (const track of animationData.tracks) {\n if (track.type === 'translation') {\n animation.addTrack(nodeMap.get(track.node)!, new NodeTranslationTrack(track.interpolator, true));\n } else if (track.type === 'scale') {\n animation.addTrack(nodeMap.get(track.node)!, new NodeScaleTrack(track.interpolator, true));\n } else if (track.type === 'rotation') {\n animation.addTrack(nodeMap.get(track.node)!, new NodeRotationTrack(track.interpolator, true));\n } else if (track.type === 'weights') {\n for (const m of track.node.mesh!.subMeshes) {\n if (track.interpolator.stride > MAX_MORPH_TARGETS) {\n console.error(\n `Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`\n );\n } else {\n const morphTrack = new MorphTargetTrack(\n track.interpolator,\n track.defaultMorphWeights,\n m.targetBox,\n m.mesh!.getBoundingVolume()!.toAABB(),\n true\n );\n animation.addTrack(m.mesh!, morphTrack);\n }\n }\n } else if (track.type === 'geometry-cache') {\n const subMesh = track.node.mesh?.subMeshes[track.subMeshIndex];\n if (!subMesh?.mesh) {\n console.error(`Invalid geometry cache sub mesh: ${track.subMeshIndex}`);\n } else {\n if (track.codec === 'pca') {\n const pcaData = this.remapPCAGeometryCacheData(subMesh, track);\n animation.addTrack(subMesh.mesh, new PCAGeometryCacheTrack(pcaData, true));\n } else {\n const frames = this.remapGeometryCacheFrames(subMesh, track.frames);\n animation.addTrack(subMesh.mesh, new FixedGeometryCacheTrack(track.times, frames, true));\n }\n }\n } else {\n console.error(`Invalid animation track type: ${track.type}`);\n }\n }\n for (const sk of animationData.skeletons) {\n const nodes = skeletonMeshMap.get(sk);\n if (nodes) {\n if (!nodes.skeleton) {\n nodes.skeleton = new Skeleton(\n sk.joints.map((val) => nodeMap.get(val)!),\n sk.inverseBindMatrices,\n sk.bindPose\n );\n for (let i = 0; i < nodes.mesh.length; i++) {\n const mesh = nodes.mesh[i];\n const v = {\n positions: nodes.bounding[i].rawPositions!,\n blendIndices: nodes.bounding[i].rawBlendIndices!,\n weights: nodes.bounding[i].rawJointWeights!\n };\n mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));\n mesh.skeletonName = nodes.skeleton.persistentId;\n }\n animationSet.skeletons.push(new DRef(nodes.skeleton));\n }\n animation.addSkeleton(nodes.skeleton.persistentId);\n }\n }\n }\n }\n group.iterate((child) => {\n if (child !== group) {\n child.sealed = true;\n }\n });\n group.sharedModel = this;\n return group;\n }\n\n private remapGeometryCacheFrames(subMesh: AssetSubMeshData, frames: FixedGeometryCacheFrame[]) {\n if (!subMesh.rawPositions || frames.length === 0) {\n return frames;\n }\n const sourcePositions = frames[0].positions;\n const sourceVertexCount = (sourcePositions.length / 3) >> 0;\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\n if (sourceVertexCount === targetVertexCount) {\n return frames;\n }\n const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, sourcePositions);\n if (!remap) {\n console.error(\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\n `Export the base glb and zabc from the same final mesh layout.`\n );\n return frames;\n }\n return frames.map((frame) => ({\n positions: this.expandGeometryCacheData(frame.positions, remap),\n normals:\n frame.normals && (frame.normals.length / 3) >> 0 === sourceVertexCount\n ? this.expandGeometryCacheData(frame.normals, remap)\n : null,\n boundingBox: frame.boundingBox\n }));\n }\n\n private remapPCAGeometryCacheData(\n subMesh: AssetSubMeshData,\n track: AssetPCAGeometryCacheAnimationTrack\n ): PCAGeometryCacheTrackData {\n const remapReference = track.positionReference ?? this.reconstructPCAGeometryCacheReference(track);\n if (!subMesh.rawPositions || remapReference.length === 0) {\n return {\n times: track.times,\n bounds: track.bounds,\n positionReference: track.positionReference ?? null,\n positionMean: track.positionMean,\n positionBases: track.positionBases,\n positionCoefficients: track.positionCoefficients,\n normalMean: track.normalMean ?? null,\n normalBases: track.normalBases ?? null,\n normalCoefficients: track.normalCoefficients ?? null\n };\n }\n const sourceVertexCount = (remapReference.length / 3) >> 0;\n const targetVertexCount = (subMesh.rawPositions.length / 3) >> 0;\n if (sourceVertexCount === targetVertexCount) {\n return {\n times: track.times,\n bounds: track.bounds,\n positionReference: track.positionReference ?? null,\n positionMean: track.positionMean,\n positionBases: track.positionBases,\n positionCoefficients: track.positionCoefficients,\n normalMean: track.normalMean ?? null,\n normalBases: track.normalBases ?? null,\n normalCoefficients: track.normalCoefficients ?? null\n };\n }\n const remap = this.buildGeometryCacheRemap(subMesh.rawPositions, remapReference);\n if (!remap) {\n console.error(\n `Geometry cache vertex layout mismatch: source=${sourceVertexCount}, target=${targetVertexCount}. ` +\n `Export the base glb and zabc from the same final mesh layout.`\n );\n return {\n times: track.times,\n bounds: track.bounds,\n positionReference: track.positionReference ?? null,\n positionMean: track.positionMean,\n positionBases: track.positionBases,\n positionCoefficients: track.positionCoefficients,\n normalMean: track.normalMean ?? null,\n normalBases: track.normalBases ?? null,\n normalCoefficients: track.normalCoefficients ?? null\n };\n }\n return {\n times: track.times,\n bounds: track.bounds,\n positionReference: this.expandGeometryCacheData(remapReference, remap),\n positionMean: this.expandGeometryCacheData(track.positionMean, remap),\n positionBases: track.positionBases.map((basis) => this.expandGeometryCacheData(basis, remap)),\n positionCoefficients: track.positionCoefficients,\n normalMean:\n track.normalMean && (track.normalMean.length / 3) >> 0 === sourceVertexCount\n ? this.expandGeometryCacheData(track.normalMean, remap)\n : null,\n normalBases:\n track.normalBases?.map((basis) =>\n (basis.length / 3) >> 0 === sourceVertexCount ? this.expandGeometryCacheData(basis, remap) : basis\n ) ?? null,\n normalCoefficients: track.normalCoefficients ?? null\n };\n }\n\n private reconstructPCAGeometryCacheReference(track: AssetPCAGeometryCacheAnimationTrack) {\n const reference = new Float32Array(track.positionMean);\n const coefficients = track.positionCoefficients[0];\n if (!coefficients) {\n return reference;\n }\n const componentCount = Math.min(track.positionBases.length, coefficients.length);\n for (let component = 0; component < componentCount; component++) {\n const basis = track.positionBases[component];\n const coefficient = coefficients[component];\n if (!basis || coefficient === 0) {\n continue;\n }\n const count = Math.min(reference.length, basis.length);\n for (let i = 0; i < count; i++) {\n reference[i] += basis[i] * coefficient;\n }\n }\n return reference;\n }\n\n private buildGeometryCacheRemap(targetPositions: Float32Array, sourcePositions: Float32Array) {\n const sourceCount = (sourcePositions.length / 3) >> 0;\n const targetCount = (targetPositions.length / 3) >> 0;\n const buckets = new Map<string, number[]>();\n for (let i = 0; i < sourceCount; i++) {\n const key = this.geometryCachePositionKey(\n sourcePositions[i * 3],\n sourcePositions[i * 3 + 1],\n sourcePositions[i * 3 + 2]\n );\n const bucket = buckets.get(key);\n if (bucket) {\n bucket.push(i);\n } else {\n buckets.set(key, [i]);\n }\n }\n const remap = new Uint32Array(targetCount);\n for (let i = 0; i < targetCount; i++) {\n const x = targetPositions[i * 3];\n const y = targetPositions[i * 3 + 1];\n const z = targetPositions[i * 3 + 2];\n let sourceIndex = this.findGeometryCacheSourceIndex(sourcePositions, buckets, x, y, z);\n if (sourceIndex < 0) {\n sourceIndex = this.findNearestGeometryCacheSourceIndex(sourcePositions, x, y, z);\n }\n if (sourceIndex < 0) {\n return null;\n }\n remap[i] = sourceIndex;\n }\n return remap;\n }\n\n private expandGeometryCacheData(source: Float32Array, remap: Uint32Array) {\n const expanded = new Float32Array(remap.length * 3);\n for (let i = 0; i < remap.length; i++) {\n const sourceOffset = remap[i] * 3;\n const targetOffset = i * 3;\n expanded[targetOffset] = source[sourceOffset];\n expanded[targetOffset + 1] = source[sourceOffset + 1];\n expanded[targetOffset + 2] = source[sourceOffset + 2];\n }\n return expanded;\n }\n\n private findGeometryCacheSourceIndex(\n sourcePositions: Float32Array,\n buckets: Map<string, number[]>,\n x: number,\n y: number,\n z: number\n ) {\n const bucket = buckets.get(this.geometryCachePositionKey(x, y, z));\n if (!bucket) {\n return -1;\n }\n const epsilon = 1e-5;\n for (const index of bucket) {\n const offset = index * 3;\n if (\n Math.abs(sourcePositions[offset] - x) <= epsilon &&\n Math.abs(sourcePositions[offset + 1] - y) <= epsilon &&\n Math.abs(sourcePositions[offset + 2] - z) <= epsilon\n ) {\n return index;\n }\n }\n return -1;\n }\n\n private findNearestGeometryCacheSourceIndex(\n sourcePositions: Float32Array,\n x: number,\n y: number,\n z: number\n ) {\n const epsilonSquared = 1e-8;\n let bestIndex = -1;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (let i = 0; i < sourcePositions.length; i += 3) {\n const dx = sourcePositions[i] - x;\n const dy = sourcePositions[i + 1] - y;\n const dz = sourcePositions[i + 2] - z;\n const distance = dx * dx + dy * dy + dz * dz;\n if (distance < bestDistance) {\n bestDistance = distance;\n bestIndex = i / 3;\n }\n }\n return bestDistance <= epsilonSquared ? bestIndex : -1;\n }\n\n private geometryCachePositionKey(x: number, y: number, z: number) {\n return `${Math.round(x * 100000)}|${Math.round(y * 100000)}|${Math.round(z * 100000)}`;\n }\n\n protected onDispose() {\n super.onDispose();\n const nodes = [...this._nodes];\n while (nodes.length > 0) {\n const node = nodes.shift();\n nodes.push(...node!.children);\n const mesh = node!.mesh;\n if (mesh) {\n for (const subMesh of mesh.subMeshes) {\n subMesh.primitive?.dispose();\n subMesh.material?.dispose();\n }\n }\n }\n this._nodes = [];\n this._skeletons = [];\n this._scenes = [];\n this._animations = [];\n }\n private setAssetNodeToSceneNode(\n scene: Scene,\n parent: SceneNode,\n assetNode: AssetHierarchyNode,\n skeletonMeshMap: Map<AssetSkeleton, { mesh: Mesh[]; bounding: AssetSubMeshData[] }>,\n nodeMap: Map<AssetHierarchyNode, SceneNode>,\n instancing: boolean\n ) {\n const node: SceneNode = new SceneNode(scene);\n nodeMap.set(assetNode, node);\n node.name = assetNode.name ?? '';\n node.position.set(assetNode.position);\n node.rotation.set(assetNode.rotation);\n node.scale.set(assetNode.scaling);\n if (assetNode.mesh) {\n const meshData = assetNode.mesh;\n const skeleton = assetNode.skeleton;\n for (const subMesh of meshData.subMeshes) {\n for (const instance of assetNode.instances!) {\n const meshNode = new Mesh(scene);\n const skinAnimation = !!skeleton;\n const morphAnimation = subMesh.numTargets > 0;\n meshNode.position = instance.t;\n meshNode.scale = instance.s;\n meshNode.rotation = instance.r;\n meshNode.name = subMesh.name;\n meshNode.clipTestEnabled = true;\n meshNode.showState = 'inherit';\n meshNode.primitive = subMesh.primitive.get()!;\n meshNode.material =\n instancing && !skinAnimation && !morphAnimation\n ? subMesh.material.get()!.createInstance()\n : subMesh.material.get()!.clone();\n meshNode.parent = node;\n subMesh.mesh = meshNode;\n processMorphData(subMesh, meshData.morphWeights!);\n if (skeleton) {\n if (!skeletonMeshMap.has(skeleton)) {\n skeletonMeshMap.set(skeleton, { mesh: [meshNode], bounding: [subMesh] });\n } else {\n skeletonMeshMap.get(skeleton)!.mesh.push(meshNode);\n skeletonMeshMap.get(skeleton)!.bounding.push(subMesh);\n }\n }\n }\n }\n }\n node.parent = parent;\n for (const child of assetNode.children) {\n this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);\n }\n }\n}\n"],"names":["NamedObject","name","AssetHierarchyNode","_parent","_position","_rotation","_scaling","_mesh","_skeleton","_attachToSkeleton","_meshAttached","_matrix","_worldMatrix","_weights","_children","_instances","parent","Vector3","zero","Quaternion","identity","one","addChild","matrix","worldMatrix","mesh","data","setMeshAttached","instances","weights","val","skeleton","position","rotation","scaling","meshAttached","children","skeletonAttached","computeTransforms","parentTransform","Matrix4x4","rotateLeft","translateLeft","multiply","child","Error","push","removeChild","index","indexOf","splice","attachToSkeleton","Set","add","AssetSkeleton","pivot","joints","inverseBindMatrices","bindPose","addJoint","joint","inverseBindMatrix","clone","scale","AssetScene","rootNodes","SharedModel","Disposable","_name","_skeletons","_nodes","_scenes","_animations","_activeScene","scenes","animations","skeletons","nodes","activeScene","addNode","childNode","addSkeleton","addAnimation","animation","createSceneNode","scene","instancing","group","SceneNode","animationSet","i","length","assetScene","skeletonMeshMap","Map","nodeMap","k","setAssetNodeToSceneNode","animationData","getAnimationClip","baseName","t","createAnimation","track","tracks","type","addTrack","get","node","NodeTranslationTrack","interpolator","NodeScaleTrack","NodeRotationTrack","m","subMeshes","stride","MAX_MORPH_TARGETS","console","error","morphTrack","MorphTargetTrack","defaultMorphWeights","targetBox","getBoundingVolume","toAABB","subMesh","subMeshIndex","codec","pcaData","remapPCAGeometryCacheData","PCAGeometryCacheTrack","frames","remapGeometryCacheFrames","FixedGeometryCacheTrack","times","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","sourcePositions","sourceVertexCount","targetVertexCount","remap","buildGeometryCacheRemap","frame","expandGeometryCacheData","normals","boundingBox","remapReference","positionReference","reconstructPCAGeometryCacheReference","bounds","positionMean","positionBases","positionCoefficients","normalMean","normalBases","normalCoefficients","basis","reference","Float32Array","coefficients","componentCount","Math","min","component","coefficient","count","targetPositions","sourceCount","targetCount","buckets","key","geometryCachePositionKey","bucket","set","Uint32Array","x","y","z","sourceIndex","findGeometryCacheSourceIndex","findNearestGeometryCacheSourceIndex","source","expanded","sourceOffset","targetOffset","epsilon","offset","abs","epsilonSquared","bestIndex","bestDistance","Number","POSITIVE_INFINITY","dx","dy","dz","distance","round","onDispose","shift","primitive","dispose","material","assetNode","meshData","instance","meshNode","Mesh","skinAnimation","morphAnimation","numTargets","s","r","clipTestEnabled","showState","createInstance","processMorphData","morphWeights","has"],"mappings":"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"}
@@ -617,7 +617,7 @@ import { WeightedBlendedOIT } from '../render/weightedblended_oit.js';
617
617
  set commandBufferReuse(val) {
618
618
  this._commandBufferReuse = !!val;
619
619
  }
620
- /** Whether this camera is adapted to screen settins */ get adapted() {
620
+ /** Whether this camera is adapted to screen settings */ get adapted() {
621
621
  return this._adapted;
622
622
  }
623
623
  set adapted(val) {