@zephyr3d/scene 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (723) hide show
  1. package/README.md +1 -1
  2. package/dist/animation/animation.js +149 -27
  3. package/dist/animation/animation.js.map +1 -1
  4. package/dist/animation/animationset.js +173 -73
  5. package/dist/animation/animationset.js.map +1 -1
  6. package/dist/animation/animationtrack.js +65 -10
  7. package/dist/animation/animationtrack.js.map +1 -1
  8. package/dist/animation/eulerrotationtrack.js +41 -20
  9. package/dist/animation/eulerrotationtrack.js.map +1 -1
  10. package/dist/animation/morphtarget.js +14 -38
  11. package/dist/animation/morphtarget.js.map +1 -1
  12. package/dist/animation/morphtrack.js +59 -22
  13. package/dist/animation/morphtrack.js.map +1 -1
  14. package/dist/animation/proptrack.js +190 -0
  15. package/dist/animation/proptrack.js.map +1 -0
  16. package/dist/animation/rotationtrack.js +29 -11
  17. package/dist/animation/rotationtrack.js.map +1 -1
  18. package/dist/animation/scaletrack.js +29 -11
  19. package/dist/animation/scaletrack.js.map +1 -1
  20. package/dist/animation/skeleton.js +241 -78
  21. package/dist/animation/skeleton.js.map +1 -1
  22. package/dist/animation/translationtrack.js +30 -11
  23. package/dist/animation/translationtrack.js.map +1 -1
  24. package/dist/app/api.js +43 -0
  25. package/dist/app/api.js.map +1 -0
  26. package/dist/app/app.js +153 -0
  27. package/dist/app/app.js.map +1 -0
  28. package/dist/app/engine.js +312 -0
  29. package/dist/app/engine.js.map +1 -0
  30. package/dist/app/inputmgr.js +351 -0
  31. package/dist/app/inputmgr.js.map +1 -0
  32. package/dist/app/runtimescript.js +62 -0
  33. package/dist/app/runtimescript.js.map +1 -0
  34. package/dist/app/scriptingsystem.js +220 -0
  35. package/dist/app/scriptingsystem.js.map +1 -0
  36. package/dist/app/scriptregistry.js +432 -0
  37. package/dist/app/scriptregistry.js.map +1 -0
  38. package/dist/asset/assetmanager.js +772 -291
  39. package/dist/asset/assetmanager.js.map +1 -1
  40. package/dist/asset/builtin.js +7 -43
  41. package/dist/asset/builtin.js.map +1 -1
  42. package/dist/asset/loaders/dds/dds.js +17 -93
  43. package/dist/asset/loaders/dds/dds.js.map +1 -1
  44. package/dist/asset/loaders/dds/dds_loader.js +8 -18
  45. package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
  46. package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
  47. package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
  48. package/dist/asset/loaders/gltf/helpers.js +27 -14
  49. package/dist/asset/loaders/gltf/helpers.js.map +1 -1
  50. package/dist/asset/loaders/hdr/hdr.js +17 -12
  51. package/dist/asset/loaders/hdr/hdr.js.map +1 -1
  52. package/dist/asset/loaders/image/tga_Loader.js +13 -16
  53. package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
  54. package/dist/asset/loaders/image/webimage_loader.js +51 -50
  55. package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
  56. package/dist/asset/loaders/loader.js.map +1 -1
  57. package/dist/asset/model.js +158 -4
  58. package/dist/asset/model.js.map +1 -1
  59. package/dist/blitter/bilateralblur.js +0 -1
  60. package/dist/blitter/bilateralblur.js.map +1 -1
  61. package/dist/blitter/blitter.js +22 -23
  62. package/dist/blitter/blitter.js.map +1 -1
  63. package/dist/blitter/box.js.map +1 -1
  64. package/dist/blitter/copy.js.map +1 -1
  65. package/dist/blitter/gaussianblur.js +23 -23
  66. package/dist/blitter/gaussianblur.js.map +1 -1
  67. package/dist/camera/base.js +141 -34
  68. package/dist/camera/base.js.map +1 -1
  69. package/dist/camera/camera.js +653 -149
  70. package/dist/camera/camera.js.map +1 -1
  71. package/dist/camera/fps.js +2 -10
  72. package/dist/camera/fps.js.map +1 -1
  73. package/dist/camera/orbit.js +132 -59
  74. package/dist/camera/orbit.js.map +1 -1
  75. package/dist/camera/orthocamera.js +37 -12
  76. package/dist/camera/orthocamera.js.map +1 -1
  77. package/dist/camera/perspectivecamera.js +37 -20
  78. package/dist/camera/perspectivecamera.js.map +1 -1
  79. package/dist/index.d.ts +18268 -6982
  80. package/dist/index.js +49 -16
  81. package/dist/index.js.map +1 -1
  82. package/dist/material/blinn.js +5 -0
  83. package/dist/material/blinn.js.map +1 -1
  84. package/dist/material/grassmaterial.js +6 -1
  85. package/dist/material/grassmaterial.js.map +1 -1
  86. package/dist/material/lambert.js +6 -1
  87. package/dist/material/lambert.js.map +1 -1
  88. package/dist/material/material.js +346 -73
  89. package/dist/material/material.js.map +1 -1
  90. package/dist/material/meshmaterial.js +498 -156
  91. package/dist/material/meshmaterial.js.map +1 -1
  92. package/dist/material/mixins/albedocolor.js +5 -1
  93. package/dist/material/mixins/albedocolor.js.map +1 -1
  94. package/dist/material/mixins/foliage.js +3 -3
  95. package/dist/material/mixins/foliage.js.map +1 -1
  96. package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
  97. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  98. package/dist/material/mixins/lightmodel/lambert.js +6 -6
  99. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  100. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
  101. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
  102. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
  103. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  104. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
  105. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  106. package/dist/material/mixins/lit.js +16 -4
  107. package/dist/material/mixins/lit.js.map +1 -1
  108. package/dist/material/mixins/pbr/brdf.js +134 -0
  109. package/dist/material/mixins/pbr/brdf.js.map +1 -0
  110. package/dist/material/mixins/pbr/common.js +68 -85
  111. package/dist/material/mixins/pbr/common.js.map +1 -1
  112. package/dist/material/mixins/texture.js +98 -83
  113. package/dist/material/mixins/texture.js.map +1 -1
  114. package/dist/material/mixins/vertexcolor.js +6 -2
  115. package/dist/material/mixins/vertexcolor.js.map +1 -1
  116. package/dist/material/particle.js +272 -0
  117. package/dist/material/particle.js.map +1 -0
  118. package/dist/material/pbrblueprint.js +186 -0
  119. package/dist/material/pbrblueprint.js.map +1 -0
  120. package/dist/material/pbrmr.js +10 -0
  121. package/dist/material/pbrmr.js.map +1 -1
  122. package/dist/material/pbrsg.js +10 -0
  123. package/dist/material/pbrsg.js.map +1 -1
  124. package/dist/material/shader/helper.js +521 -287
  125. package/dist/material/shader/helper.js.map +1 -1
  126. package/dist/material/terrain-cm.js +607 -0
  127. package/dist/material/terrain-cm.js.map +1 -0
  128. package/dist/material/terrainmaterial.js +59 -54
  129. package/dist/material/terrainmaterial.js.map +1 -1
  130. package/dist/material/unlit.js +5 -0
  131. package/dist/material/unlit.js.map +1 -1
  132. package/dist/material/water.js +415 -0
  133. package/dist/material/water.js.map +1 -0
  134. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
  135. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
  136. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
  137. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
  138. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
  139. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
  140. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
  141. package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
  142. package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
  143. package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
  144. package/dist/posteffect/bloom.js +39 -54
  145. package/dist/posteffect/bloom.js.map +1 -1
  146. package/dist/posteffect/compositor.js +95 -128
  147. package/dist/posteffect/compositor.js.map +1 -1
  148. package/dist/posteffect/fxaa.js +10 -18
  149. package/dist/posteffect/fxaa.js.map +1 -1
  150. package/dist/posteffect/grayscale.js +9 -17
  151. package/dist/posteffect/grayscale.js.map +1 -1
  152. package/dist/posteffect/motionblur.js +105 -0
  153. package/dist/posteffect/motionblur.js.map +1 -0
  154. package/dist/posteffect/posteffect.js +66 -35
  155. package/dist/posteffect/posteffect.js.map +1 -1
  156. package/dist/posteffect/sao.js +13 -21
  157. package/dist/posteffect/sao.js.map +1 -1
  158. package/dist/posteffect/ssr.js +60 -100
  159. package/dist/posteffect/ssr.js.map +1 -1
  160. package/dist/posteffect/taa.js +175 -0
  161. package/dist/posteffect/taa.js.map +1 -0
  162. package/dist/posteffect/tonemap.js +12 -20
  163. package/dist/posteffect/tonemap.js.map +1 -1
  164. package/dist/render/abuffer_oit.js +30 -19
  165. package/dist/render/abuffer_oit.js.map +1 -1
  166. package/dist/render/clipmap.js +429 -101
  167. package/dist/render/clipmap.js.map +1 -1
  168. package/dist/render/cluster_light.js +7 -5
  169. package/dist/render/cluster_light.js.map +1 -1
  170. package/dist/render/cull_visitor.js +43 -3
  171. package/dist/render/cull_visitor.js.map +1 -1
  172. package/dist/render/depthpass.js +14 -5
  173. package/dist/render/depthpass.js.map +1 -1
  174. package/dist/render/drawable_mixin.js +113 -40
  175. package/dist/render/drawable_mixin.js.map +1 -1
  176. package/dist/render/envlight.js +86 -141
  177. package/dist/render/envlight.js.map +1 -1
  178. package/dist/render/fbm_wavegenerator.js +234 -0
  179. package/dist/render/fbm_wavegenerator.js.map +1 -0
  180. package/dist/render/fft_wavegenerator.js +64 -50
  181. package/dist/render/fft_wavegenerator.js.map +1 -1
  182. package/dist/render/fullscreenquad.js +2 -2
  183. package/dist/render/fullscreenquad.js.map +1 -1
  184. package/dist/render/gerstner_wavegenerator.js +98 -48
  185. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  186. package/dist/render/globalbindgroup_allocator.js +4 -2
  187. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  188. package/dist/render/hzb.js +6 -3
  189. package/dist/render/hzb.js.map +1 -1
  190. package/dist/render/lightpass.js +19 -18
  191. package/dist/render/lightpass.js.map +1 -1
  192. package/dist/render/objectcolorpass.js +4 -4
  193. package/dist/render/objectcolorpass.js.map +1 -1
  194. package/dist/render/primitive.js +213 -104
  195. package/dist/render/primitive.js.map +1 -1
  196. package/dist/render/render_queue.js +40 -20
  197. package/dist/render/render_queue.js.map +1 -1
  198. package/dist/render/renderbundle_wrapper.js +65 -15
  199. package/dist/render/renderbundle_wrapper.js.map +1 -1
  200. package/dist/render/renderer.js +326 -185
  201. package/dist/render/renderer.js.map +1 -1
  202. package/dist/render/renderpass.js +20 -36
  203. package/dist/render/renderpass.js.map +1 -1
  204. package/dist/render/shadowmap_pass.js +3 -3
  205. package/dist/render/shadowmap_pass.js.map +1 -1
  206. package/dist/render/sky.js +864 -541
  207. package/dist/render/sky.js.map +1 -1
  208. package/dist/render/weightedblended_oit.js +13 -15
  209. package/dist/render/weightedblended_oit.js.map +1 -1
  210. package/dist/scene/batchgroup.js +18 -5
  211. package/dist/scene/batchgroup.js.map +1 -1
  212. package/dist/scene/environment.js +78 -48
  213. package/dist/scene/environment.js.map +1 -1
  214. package/dist/scene/graph_node.js +2 -3
  215. package/dist/scene/graph_node.js.map +1 -1
  216. package/dist/scene/light.js +28 -89
  217. package/dist/scene/light.js.map +1 -1
  218. package/dist/scene/mesh.js +218 -87
  219. package/dist/scene/mesh.js.map +1 -1
  220. package/dist/scene/octree.js +371 -162
  221. package/dist/scene/octree.js.map +1 -1
  222. package/dist/scene/particlesys.js +684 -0
  223. package/dist/scene/particlesys.js.map +1 -0
  224. package/dist/scene/raycast_visitor.js +34 -5
  225. package/dist/scene/raycast_visitor.js.map +1 -1
  226. package/dist/scene/scene.js +309 -85
  227. package/dist/scene/scene.js.map +1 -1
  228. package/dist/scene/scene_node.js +675 -102
  229. package/dist/scene/scene_node.js.map +1 -1
  230. package/dist/scene/terrain/grass.js +48 -49
  231. package/dist/scene/terrain/grass.js.map +1 -1
  232. package/dist/scene/terrain/heightfield.js +46 -44
  233. package/dist/scene/terrain/heightfield.js.map +1 -1
  234. package/dist/scene/terrain/patch.js +20 -29
  235. package/dist/scene/terrain/patch.js.map +1 -1
  236. package/dist/scene/terrain/quadtree.js +58 -27
  237. package/dist/scene/terrain/quadtree.js.map +1 -1
  238. package/dist/scene/terrain/terrain.js +31 -45
  239. package/dist/scene/terrain/terrain.js.map +1 -1
  240. package/dist/scene/terrain-cm/grass.js +603 -0
  241. package/dist/scene/terrain-cm/grass.js.map +1 -0
  242. package/dist/scene/terrain-cm/grassmaterial.js +160 -0
  243. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
  244. package/dist/scene/terrain-cm/terrain-cm.js +533 -0
  245. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
  246. package/dist/scene/water.js +378 -0
  247. package/dist/scene/water.js.map +1 -0
  248. package/dist/shaders/atmosphere.js +957 -0
  249. package/dist/shaders/atmosphere.js.map +1 -0
  250. package/dist/shaders/fog.js +116 -0
  251. package/dist/shaders/fog.js.map +1 -0
  252. package/dist/shaders/misc.js.map +1 -1
  253. package/dist/shaders/noise.js +217 -8
  254. package/dist/shaders/noise.js.map +1 -1
  255. package/dist/shaders/pbr.js.map +1 -1
  256. package/dist/shaders/shadow.js +8 -8
  257. package/dist/shaders/shadow.js.map +1 -1
  258. package/dist/shaders/ssr.js +87 -39
  259. package/dist/shaders/ssr.js.map +1 -1
  260. package/dist/shaders/temporal.js +216 -0
  261. package/dist/shaders/temporal.js.map +1 -0
  262. package/dist/shaders/water.js +42 -20
  263. package/dist/shaders/water.js.map +1 -1
  264. package/dist/shadow/esm.js +31 -13
  265. package/dist/shadow/esm.js.map +1 -1
  266. package/dist/shadow/pcf_opt.js +12 -13
  267. package/dist/shadow/pcf_opt.js.map +1 -1
  268. package/dist/shadow/pcf_pd.js +12 -13
  269. package/dist/shadow/pcf_pd.js.map +1 -1
  270. package/dist/shadow/shader.js +38 -0
  271. package/dist/shadow/shader.js.map +1 -0
  272. package/dist/shadow/shadow_impl.js.map +1 -1
  273. package/dist/shadow/shadowmapper.js +67 -26
  274. package/dist/shadow/shadowmapper.js.map +1 -1
  275. package/dist/shadow/ssm.js +15 -16
  276. package/dist/shadow/ssm.js.map +1 -1
  277. package/dist/shadow/vsm.js +33 -16
  278. package/dist/shadow/vsm.js.map +1 -1
  279. package/dist/shapes/box.js +181 -83
  280. package/dist/shapes/box.js.map +1 -1
  281. package/dist/shapes/cylinder.js +101 -43
  282. package/dist/shapes/cylinder.js.map +1 -1
  283. package/dist/shapes/plane.js +70 -29
  284. package/dist/shapes/plane.js.map +1 -1
  285. package/dist/shapes/shape.js +120 -17
  286. package/dist/shapes/shape.js.map +1 -1
  287. package/dist/shapes/sphere.js +78 -44
  288. package/dist/shapes/sphere.js.map +1 -1
  289. package/dist/shapes/tetrahedron.js +256 -0
  290. package/dist/shapes/tetrahedron.js.map +1 -0
  291. package/dist/shapes/torus.js +76 -55
  292. package/dist/shapes/torus.js.map +1 -1
  293. package/dist/src/animation/animation.js +127 -0
  294. package/dist/src/animation/animation.js.map +1 -0
  295. package/dist/src/animation/animationset.js +255 -0
  296. package/dist/src/animation/animationset.js.map +1 -0
  297. package/dist/src/animation/animationtrack.js +34 -0
  298. package/dist/src/animation/animationtrack.js.map +1 -0
  299. package/dist/src/animation/eulerrotationtrack.js +52 -0
  300. package/dist/src/animation/eulerrotationtrack.js.map +1 -0
  301. package/dist/src/animation/morphtarget.js +93 -0
  302. package/dist/src/animation/morphtarget.js.map +1 -0
  303. package/dist/src/animation/morphtrack.js +70 -0
  304. package/dist/src/animation/morphtrack.js.map +1 -0
  305. package/dist/src/animation/proptrack.js +161 -0
  306. package/dist/src/animation/proptrack.js.map +1 -0
  307. package/dist/src/animation/rotationtrack.js +51 -0
  308. package/dist/src/animation/rotationtrack.js.map +1 -0
  309. package/dist/src/animation/scaletrack.js +50 -0
  310. package/dist/src/animation/scaletrack.js.map +1 -0
  311. package/dist/src/animation/skeleton.js +204 -0
  312. package/dist/src/animation/skeleton.js.map +1 -0
  313. package/dist/src/animation/translationtrack.js +50 -0
  314. package/dist/src/animation/translationtrack.js.map +1 -0
  315. package/dist/{app.js → src/app/app.js} +18 -40
  316. package/dist/src/app/app.js.map +1 -0
  317. package/dist/{input → src/app}/inputmgr.js +41 -16
  318. package/dist/src/app/inputmgr.js.map +1 -0
  319. package/dist/src/asset/assetmanager.js +404 -0
  320. package/dist/src/asset/assetmanager.js.map +1 -0
  321. package/dist/src/asset/builtin.js +337 -0
  322. package/dist/src/asset/builtin.js.map +1 -0
  323. package/dist/src/asset/loaders/dds/dds.js +470 -0
  324. package/dist/src/asset/loaders/dds/dds.js.map +1 -0
  325. package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
  326. package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
  327. package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
  328. package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
  329. package/dist/src/asset/loaders/gltf/helpers.js +327 -0
  330. package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
  331. package/dist/src/asset/loaders/hdr/hdr.js +180 -0
  332. package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
  333. package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
  334. package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
  335. package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
  336. package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
  337. package/dist/src/asset/loaders/loader.js +45 -0
  338. package/dist/src/asset/loaders/loader.js.map +1 -0
  339. package/dist/src/asset/model.js +414 -0
  340. package/dist/src/asset/model.js.map +1 -0
  341. package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
  342. package/dist/src/blitter/bilateralblur.js.map +1 -0
  343. package/dist/src/blitter/blitter.js +390 -0
  344. package/dist/src/blitter/blitter.js.map +1 -0
  345. package/dist/src/blitter/box.js +118 -0
  346. package/dist/src/blitter/box.js.map +1 -0
  347. package/dist/src/blitter/copy.js +22 -0
  348. package/dist/src/blitter/copy.js.map +1 -0
  349. package/dist/src/blitter/gaussianblur.js +228 -0
  350. package/dist/src/blitter/gaussianblur.js.map +1 -0
  351. package/dist/src/camera/base.js +92 -0
  352. package/dist/src/camera/base.js.map +1 -0
  353. package/dist/src/camera/camera.js +1005 -0
  354. package/dist/src/camera/camera.js.map +1 -0
  355. package/dist/src/camera/fps.js +238 -0
  356. package/dist/src/camera/fps.js.map +1 -0
  357. package/dist/src/camera/orbit.js +245 -0
  358. package/dist/src/camera/orbit.js.map +1 -0
  359. package/dist/src/camera/orthocamera.js +167 -0
  360. package/dist/src/camera/orthocamera.js.map +1 -0
  361. package/dist/src/camera/perspectivecamera.js +141 -0
  362. package/dist/src/camera/perspectivecamera.js.map +1 -0
  363. package/dist/src/index.js +120 -0
  364. package/dist/src/index.js.map +1 -0
  365. package/dist/src/material/blinn.js +81 -0
  366. package/dist/src/material/blinn.js.map +1 -0
  367. package/dist/src/material/grassmaterial.js +113 -0
  368. package/dist/src/material/grassmaterial.js.map +1 -0
  369. package/dist/src/material/lambert.js +92 -0
  370. package/dist/src/material/lambert.js.map +1 -0
  371. package/dist/src/material/material.js +301 -0
  372. package/dist/src/material/material.js.map +1 -0
  373. package/dist/src/material/meshmaterial.js +704 -0
  374. package/dist/src/material/meshmaterial.js.map +1 -0
  375. package/dist/src/material/mixins/albedocolor.js +76 -0
  376. package/dist/src/material/mixins/albedocolor.js.map +1 -0
  377. package/dist/src/material/mixins/foliage.js +47 -0
  378. package/dist/src/material/mixins/foliage.js.map +1 -0
  379. package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
  380. package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
  381. package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
  382. package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
  383. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
  384. package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
  385. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
  386. package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
  387. package/dist/src/material/mixins/lit.js +476 -0
  388. package/dist/src/material/mixins/lit.js.map +1 -0
  389. package/dist/src/material/mixins/pbr/common.js +918 -0
  390. package/dist/src/material/mixins/pbr/common.js.map +1 -0
  391. package/dist/src/material/mixins/texture.js +172 -0
  392. package/dist/src/material/mixins/texture.js.map +1 -0
  393. package/dist/src/material/mixins/vertexcolor.js +56 -0
  394. package/dist/src/material/mixins/vertexcolor.js.map +1 -0
  395. package/dist/src/material/particle.js +178 -0
  396. package/dist/src/material/particle.js.map +1 -0
  397. package/dist/src/material/pbrmr.js +97 -0
  398. package/dist/src/material/pbrmr.js.map +1 -0
  399. package/dist/src/material/pbrsg.js +97 -0
  400. package/dist/src/material/pbrsg.js.map +1 -0
  401. package/dist/src/material/shader/helper.js +1209 -0
  402. package/dist/src/material/shader/helper.js.map +1 -0
  403. package/dist/src/material/terrain-cm.js +606 -0
  404. package/dist/src/material/terrain-cm.js.map +1 -0
  405. package/dist/src/material/terrainmaterial.js +375 -0
  406. package/dist/src/material/terrainmaterial.js.map +1 -0
  407. package/dist/src/material/unlit.js +41 -0
  408. package/dist/src/material/unlit.js.map +1 -0
  409. package/dist/src/material/water.js +417 -0
  410. package/dist/src/material/water.js.map +1 -0
  411. package/dist/src/posteffect/bloom.js +361 -0
  412. package/dist/src/posteffect/bloom.js.map +1 -0
  413. package/dist/src/posteffect/compositor.js +226 -0
  414. package/dist/src/posteffect/compositor.js.map +1 -0
  415. package/dist/src/posteffect/fxaa.js +273 -0
  416. package/dist/src/posteffect/fxaa.js.map +1 -0
  417. package/dist/src/posteffect/grayscale.js +69 -0
  418. package/dist/src/posteffect/grayscale.js.map +1 -0
  419. package/dist/src/posteffect/motionblur.js +96 -0
  420. package/dist/src/posteffect/motionblur.js.map +1 -0
  421. package/dist/src/posteffect/posteffect.js +126 -0
  422. package/dist/src/posteffect/posteffect.js.map +1 -0
  423. package/dist/src/posteffect/sao.js +324 -0
  424. package/dist/src/posteffect/sao.js.map +1 -0
  425. package/dist/src/posteffect/ssr.js +489 -0
  426. package/dist/src/posteffect/ssr.js.map +1 -0
  427. package/dist/src/posteffect/taa.js +172 -0
  428. package/dist/src/posteffect/taa.js.map +1 -0
  429. package/dist/src/posteffect/tonemap.js +94 -0
  430. package/dist/src/posteffect/tonemap.js.map +1 -0
  431. package/dist/src/render/abuffer_oit.js +361 -0
  432. package/dist/src/render/abuffer_oit.js.map +1 -0
  433. package/dist/src/render/clipmap.js +851 -0
  434. package/dist/src/render/clipmap.js.map +1 -0
  435. package/dist/src/render/cluster_light.js +333 -0
  436. package/dist/src/render/cluster_light.js.map +1 -0
  437. package/dist/src/render/cull_visitor.js +187 -0
  438. package/dist/src/render/cull_visitor.js.map +1 -0
  439. package/dist/src/render/depthpass.js +68 -0
  440. package/dist/src/render/depthpass.js.map +1 -0
  441. package/dist/src/render/drawable_mixin.js +227 -0
  442. package/dist/src/render/drawable_mixin.js.map +1 -0
  443. package/dist/src/render/envlight.js +463 -0
  444. package/dist/src/render/envlight.js.map +1 -0
  445. package/dist/src/render/fbm_wavegenerator.js +251 -0
  446. package/dist/src/render/fbm_wavegenerator.js.map +1 -0
  447. package/dist/src/render/fft_wavegenerator.js +1006 -0
  448. package/dist/src/render/fft_wavegenerator.js.map +1 -0
  449. package/dist/src/render/fullscreenquad.js +38 -0
  450. package/dist/src/render/fullscreenquad.js.map +1 -0
  451. package/dist/src/render/gerstner_wavegenerator.js +314 -0
  452. package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
  453. package/dist/src/render/globalbindgroup_allocator.js +60 -0
  454. package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
  455. package/dist/src/render/hzb.js +273 -0
  456. package/dist/src/render/hzb.js.map +1 -0
  457. package/dist/src/render/lightpass.js +172 -0
  458. package/dist/src/render/lightpass.js.map +1 -0
  459. package/dist/src/render/objectcolorpass.js +51 -0
  460. package/dist/src/render/objectcolorpass.js.map +1 -0
  461. package/dist/src/render/primitive.js +364 -0
  462. package/dist/src/render/primitive.js.map +1 -0
  463. package/dist/src/render/render_queue.js +467 -0
  464. package/dist/src/render/render_queue.js.map +1 -0
  465. package/dist/src/render/renderbundle_wrapper.js +152 -0
  466. package/dist/src/render/renderbundle_wrapper.js.map +1 -0
  467. package/dist/src/render/renderer.js +455 -0
  468. package/dist/src/render/renderer.js.map +1 -0
  469. package/dist/src/render/renderpass.js +200 -0
  470. package/dist/src/render/renderpass.js.map +1 -0
  471. package/dist/src/render/shadowmap_pass.js +56 -0
  472. package/dist/src/render/shadowmap_pass.js.map +1 -0
  473. package/dist/src/render/sky.js +1103 -0
  474. package/dist/src/render/sky.js.map +1 -0
  475. package/dist/src/render/weightedblended_oit.js +168 -0
  476. package/dist/src/render/weightedblended_oit.js.map +1 -0
  477. package/dist/src/scene/batchgroup.js +162 -0
  478. package/dist/src/scene/batchgroup.js.map +1 -0
  479. package/dist/src/scene/environment.js +209 -0
  480. package/dist/src/scene/environment.js.map +1 -0
  481. package/dist/src/scene/graph_node.js +72 -0
  482. package/dist/src/scene/graph_node.js.map +1 -0
  483. package/dist/src/scene/light.js +416 -0
  484. package/dist/src/scene/light.js.map +1 -0
  485. package/dist/src/scene/mesh.js +341 -0
  486. package/dist/src/scene/mesh.js.map +1 -0
  487. package/dist/src/scene/octree.js +649 -0
  488. package/dist/src/scene/octree.js.map +1 -0
  489. package/dist/src/scene/particlesys.js +738 -0
  490. package/dist/src/scene/particlesys.js.map +1 -0
  491. package/dist/src/scene/raycast_visitor.js +103 -0
  492. package/dist/src/scene/raycast_visitor.js.map +1 -0
  493. package/dist/src/scene/scene.js +284 -0
  494. package/dist/src/scene/scene.js.map +1 -0
  495. package/dist/src/scene/scene_node.js +732 -0
  496. package/dist/src/scene/scene_node.js.map +1 -0
  497. package/dist/src/scene/terrain/grass.js +278 -0
  498. package/dist/src/scene/terrain/grass.js.map +1 -0
  499. package/dist/src/scene/terrain/heightfield.js +475 -0
  500. package/dist/src/scene/terrain/heightfield.js.map +1 -0
  501. package/dist/src/scene/terrain/patch.js +530 -0
  502. package/dist/src/scene/terrain/patch.js.map +1 -0
  503. package/dist/src/scene/terrain/quadtree.js +461 -0
  504. package/dist/src/scene/terrain/quadtree.js.map +1 -0
  505. package/dist/src/scene/terrain/terrain.js +246 -0
  506. package/dist/src/scene/terrain/terrain.js.map +1 -0
  507. package/dist/src/scene/terrain-cm/grass.js +594 -0
  508. package/dist/src/scene/terrain-cm/grass.js.map +1 -0
  509. package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
  510. package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
  511. package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
  512. package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
  513. package/dist/src/scene/water.js +374 -0
  514. package/dist/src/scene/water.js.map +1 -0
  515. package/dist/src/shaders/atmosphere.js +957 -0
  516. package/dist/src/shaders/atmosphere.js.map +1 -0
  517. package/dist/src/shaders/fog.js +112 -0
  518. package/dist/src/shaders/fog.js.map +1 -0
  519. package/dist/src/shaders/misc.js +266 -0
  520. package/dist/src/shaders/misc.js.map +1 -0
  521. package/dist/src/shaders/noise.js +222 -0
  522. package/dist/src/shaders/noise.js.map +1 -0
  523. package/dist/src/shaders/pbr.js +51 -0
  524. package/dist/src/shaders/pbr.js.map +1 -0
  525. package/dist/src/shaders/shadow.js +636 -0
  526. package/dist/src/shaders/shadow.js.map +1 -0
  527. package/dist/src/shaders/ssr.js +490 -0
  528. package/dist/src/shaders/ssr.js.map +1 -0
  529. package/dist/src/shaders/temporal.js +215 -0
  530. package/dist/src/shaders/temporal.js.map +1 -0
  531. package/dist/src/shaders/water.js +756 -0
  532. package/dist/src/shaders/water.js.map +1 -0
  533. package/dist/src/shadow/esm.js +237 -0
  534. package/dist/src/shadow/esm.js.map +1 -0
  535. package/dist/src/shadow/pcf_opt.js +181 -0
  536. package/dist/src/shadow/pcf_opt.js.map +1 -0
  537. package/dist/src/shadow/pcf_pd.js +189 -0
  538. package/dist/src/shadow/pcf_pd.js.map +1 -0
  539. package/dist/src/shadow/shader.js +37 -0
  540. package/dist/src/shadow/shader.js.map +1 -0
  541. package/dist/src/shadow/shadow_impl.js +15 -0
  542. package/dist/src/shadow/shadow_impl.js.map +1 -0
  543. package/dist/src/shadow/shadowmapper.js +790 -0
  544. package/dist/src/shadow/shadowmapper.js.map +1 -0
  545. package/dist/src/shadow/ssm.js +159 -0
  546. package/dist/src/shadow/ssm.js.map +1 -0
  547. package/dist/src/shadow/vsm.js +297 -0
  548. package/dist/src/shadow/vsm.js.map +1 -0
  549. package/dist/src/shapes/box.js +386 -0
  550. package/dist/src/shapes/box.js.map +1 -0
  551. package/dist/src/shapes/cylinder.js +125 -0
  552. package/dist/src/shapes/cylinder.js.map +1 -0
  553. package/dist/src/shapes/plane.js +88 -0
  554. package/dist/src/shapes/plane.js.map +1 -0
  555. package/dist/src/shapes/shape.js +87 -0
  556. package/dist/src/shapes/shape.js.map +1 -0
  557. package/dist/src/shapes/sphere.js +114 -0
  558. package/dist/src/shapes/sphere.js.map +1 -0
  559. package/dist/src/shapes/tetrahedron.js +188 -0
  560. package/dist/src/shapes/tetrahedron.js.map +1 -0
  561. package/dist/src/shapes/torus.js +111 -0
  562. package/dist/src/shapes/torus.js.map +1 -0
  563. package/dist/src/utility/aabbtree.js +400 -0
  564. package/dist/src/utility/aabbtree.js.map +1 -0
  565. package/dist/src/utility/bounding_volume.js +29 -0
  566. package/dist/src/utility/bounding_volume.js.map +1 -0
  567. package/dist/src/utility/debug.js +28 -0
  568. package/dist/src/utility/debug.js.map +1 -0
  569. package/dist/src/utility/draco/decoder.js +116 -0
  570. package/dist/src/utility/draco/decoder.js.map +1 -0
  571. package/dist/src/utility/misc.js +105 -0
  572. package/dist/src/utility/misc.js.map +1 -0
  573. package/dist/src/utility/panorama.js +163 -0
  574. package/dist/src/utility/panorama.js.map +1 -0
  575. package/dist/src/utility/pmrem.js +354 -0
  576. package/dist/src/utility/pmrem.js.map +1 -0
  577. package/dist/src/utility/rendermipmap.js +115 -0
  578. package/dist/src/utility/rendermipmap.js.map +1 -0
  579. package/dist/src/utility/serialization/json.js +402 -0
  580. package/dist/src/utility/serialization/json.js.map +1 -0
  581. package/dist/src/utility/serialization/manager.js +623 -0
  582. package/dist/src/utility/serialization/manager.js.map +1 -0
  583. package/dist/src/utility/serialization/scene/animation.js +248 -0
  584. package/dist/src/utility/serialization/scene/animation.js.map +1 -0
  585. package/dist/src/utility/serialization/scene/batch.js +59 -0
  586. package/dist/src/utility/serialization/scene/batch.js.map +1 -0
  587. package/dist/src/utility/serialization/scene/camera.js +790 -0
  588. package/dist/src/utility/serialization/scene/camera.js.map +1 -0
  589. package/dist/src/utility/serialization/scene/common.js +222 -0
  590. package/dist/src/utility/serialization/scene/common.js.map +1 -0
  591. package/dist/src/utility/serialization/scene/light.js +575 -0
  592. package/dist/src/utility/serialization/scene/light.js.map +1 -0
  593. package/dist/src/utility/serialization/scene/material.js +1111 -0
  594. package/dist/src/utility/serialization/scene/material.js.map +1 -0
  595. package/dist/src/utility/serialization/scene/mesh.js +148 -0
  596. package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
  597. package/dist/src/utility/serialization/scene/misc.js +39 -0
  598. package/dist/src/utility/serialization/scene/misc.js.map +1 -0
  599. package/dist/src/utility/serialization/scene/node.js +451 -0
  600. package/dist/src/utility/serialization/scene/node.js.map +1 -0
  601. package/dist/src/utility/serialization/scene/particle.js +425 -0
  602. package/dist/src/utility/serialization/scene/particle.js.map +1 -0
  603. package/dist/src/utility/serialization/scene/primitive.js +692 -0
  604. package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
  605. package/dist/src/utility/serialization/scene/scene.js +704 -0
  606. package/dist/src/utility/serialization/scene/scene.js.map +1 -0
  607. package/dist/src/utility/serialization/scene/terrain.js +488 -0
  608. package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
  609. package/dist/src/utility/serialization/scene/water.js +465 -0
  610. package/dist/src/utility/serialization/scene/water.js.map +1 -0
  611. package/dist/src/utility/shprojector.js +297 -0
  612. package/dist/src/utility/shprojector.js.map +1 -0
  613. package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
  614. package/dist/src/utility/textures/ggxlut.js.map +1 -0
  615. package/dist/src/utility/textures/gradientnoise.js +62 -0
  616. package/dist/src/utility/textures/gradientnoise.js.map +1 -0
  617. package/dist/src/utility/textures/randomnoise.js +41 -0
  618. package/dist/src/utility/textures/randomnoise.js.map +1 -0
  619. package/dist/src/values.js +162 -0
  620. package/dist/src/values.js.map +1 -0
  621. package/dist/utility/aabbtree.js +15 -5
  622. package/dist/utility/aabbtree.js.map +1 -1
  623. package/dist/utility/blueprint/common/constants.js +851 -0
  624. package/dist/utility/blueprint/common/constants.js.map +1 -0
  625. package/dist/utility/blueprint/common/math.js +2045 -0
  626. package/dist/utility/blueprint/common/math.js.map +1 -0
  627. package/dist/utility/blueprint/common.js +7 -0
  628. package/dist/utility/blueprint/common.js.map +1 -0
  629. package/dist/utility/blueprint/material/common.js +7 -0
  630. package/dist/utility/blueprint/material/common.js.map +1 -0
  631. package/dist/utility/blueprint/material/func.js +521 -0
  632. package/dist/utility/blueprint/material/func.js.map +1 -0
  633. package/dist/utility/blueprint/material/inputs.js +1659 -0
  634. package/dist/utility/blueprint/material/inputs.js.map +1 -0
  635. package/dist/utility/blueprint/material/ir.js +1311 -0
  636. package/dist/utility/blueprint/material/ir.js.map +1 -0
  637. package/dist/utility/blueprint/material/pbr.js +362 -0
  638. package/dist/utility/blueprint/material/pbr.js.map +1 -0
  639. package/dist/utility/blueprint/material/texture.js +1099 -0
  640. package/dist/utility/blueprint/material/texture.js.map +1 -0
  641. package/dist/utility/blueprint/node.js +187 -0
  642. package/dist/utility/blueprint/node.js.map +1 -0
  643. package/dist/utility/bounding_volume.js +0 -1
  644. package/dist/utility/bounding_volume.js.map +1 -1
  645. package/dist/utility/debug.js +26 -0
  646. package/dist/utility/debug.js.map +1 -0
  647. package/dist/utility/draco/decoder.js +1 -1
  648. package/dist/utility/draco/decoder.js.map +1 -1
  649. package/dist/utility/misc.js +18 -6
  650. package/dist/utility/misc.js.map +1 -1
  651. package/dist/utility/panorama.js +8 -6
  652. package/dist/utility/panorama.js.map +1 -1
  653. package/dist/utility/pmrem.js +30 -18
  654. package/dist/utility/pmrem.js.map +1 -1
  655. package/dist/utility/rendermipmap.js +116 -0
  656. package/dist/utility/rendermipmap.js.map +1 -0
  657. package/dist/utility/serialization/blueprint/constants.js +255 -0
  658. package/dist/utility/serialization/blueprint/constants.js.map +1 -0
  659. package/dist/utility/serialization/blueprint/material/constants.js +203 -0
  660. package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
  661. package/dist/utility/serialization/blueprint/material/texture.js +165 -0
  662. package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
  663. package/dist/utility/serialization/json.js +402 -0
  664. package/dist/utility/serialization/json.js.map +1 -0
  665. package/dist/utility/serialization/manager.js +1176 -0
  666. package/dist/utility/serialization/manager.js.map +1 -0
  667. package/dist/utility/serialization/scene/animation.js +699 -0
  668. package/dist/utility/serialization/scene/animation.js.map +1 -0
  669. package/dist/utility/serialization/scene/batch.js +53 -0
  670. package/dist/utility/serialization/scene/batch.js.map +1 -0
  671. package/dist/utility/serialization/scene/camera.js +808 -0
  672. package/dist/utility/serialization/scene/camera.js.map +1 -0
  673. package/dist/utility/serialization/scene/common.js +224 -0
  674. package/dist/utility/serialization/scene/common.js.map +1 -0
  675. package/dist/utility/serialization/scene/light.js +589 -0
  676. package/dist/utility/serialization/scene/light.js.map +1 -0
  677. package/dist/utility/serialization/scene/material.js +942 -0
  678. package/dist/utility/serialization/scene/material.js.map +1 -0
  679. package/dist/utility/serialization/scene/mesh.js +374 -0
  680. package/dist/utility/serialization/scene/mesh.js.map +1 -0
  681. package/dist/utility/serialization/scene/misc.js +39 -0
  682. package/dist/utility/serialization/scene/misc.js.map +1 -0
  683. package/dist/utility/serialization/scene/node.js +391 -0
  684. package/dist/utility/serialization/scene/node.js.map +1 -0
  685. package/dist/utility/serialization/scene/particle.js +425 -0
  686. package/dist/utility/serialization/scene/particle.js.map +1 -0
  687. package/dist/utility/serialization/scene/primitive.js +582 -0
  688. package/dist/utility/serialization/scene/primitive.js.map +1 -0
  689. package/dist/utility/serialization/scene/scene.js +763 -0
  690. package/dist/utility/serialization/scene/scene.js.map +1 -0
  691. package/dist/utility/serialization/scene/terrain.js +495 -0
  692. package/dist/utility/serialization/scene/terrain.js.map +1 -0
  693. package/dist/utility/serialization/scene/water.js +465 -0
  694. package/dist/utility/serialization/scene/water.js.map +1 -0
  695. package/dist/utility/shprojector.js +313 -0
  696. package/dist/utility/shprojector.js.map +1 -0
  697. package/dist/utility/textures/ggxlut.js +4 -5
  698. package/dist/utility/textures/ggxlut.js.map +1 -1
  699. package/dist/utility/textures/gradientnoise.js +2 -1
  700. package/dist/utility/textures/gradientnoise.js.map +1 -1
  701. package/dist/utility/textures/randomnoise.js +1 -0
  702. package/dist/utility/textures/randomnoise.js.map +1 -1
  703. package/dist/values.js +91 -4
  704. package/dist/values.js.map +1 -1
  705. package/package.json +29 -15
  706. package/dist/app.js.map +0 -1
  707. package/dist/blitter/depthlimitedgaussion.js.map +0 -1
  708. package/dist/input/inputmgr.js.map +0 -1
  709. package/dist/material/mixins/ggxlut.js.map +0 -1
  710. package/dist/posteffect/water.js +0 -508
  711. package/dist/posteffect/water.js.map +0 -1
  712. package/dist/render/oit.js +0 -16
  713. package/dist/render/oit.js.map +0 -1
  714. package/dist/render/scatteringlut.js +0 -634
  715. package/dist/render/scatteringlut.js.map +0 -1
  716. package/dist/render/watermesh.js +0 -193
  717. package/dist/render/watermesh.js.map +0 -1
  718. package/dist/render/wavegenerator.js +0 -8
  719. package/dist/render/wavegenerator.js.map +0 -1
  720. package/dist/scene/xform.js +0 -247
  721. package/dist/scene/xform.js.map +0 -1
  722. package/dist/utility/shprojection.js +0 -442
  723. package/dist/utility/shprojection.js.map +0 -1
@@ -1,35 +1,34 @@
1
1
  import { AbstractTextureLoader } from '../loader.js';
2
- import { Application } from '../../../app.js';
2
+ import { getDevice } from '../../../app/api.js';
3
3
 
4
4
  /**
5
5
  * TGA image loader
6
6
  * @internal
7
7
  */ class TGALoader extends AbstractTextureLoader {
8
- supportExtension(ext) {
9
- return ext === '.tga';
10
- }
11
8
  supportMIMEType(mimeType) {
12
9
  return mimeType === 'image/tga' || mimeType === 'image/x-tga';
13
10
  }
14
11
  parseTGA(content, sRGB, noMipmap, texture) {
15
- const dataView = new DataView(content);
12
+ const arrayBuffer = content instanceof ArrayBuffer ? content : content.buffer;
13
+ const offset = content instanceof ArrayBuffer ? 0 : content.byteOffset;
14
+ const dataView = new DataView(arrayBuffer, offset);
16
15
  const p = [
17
16
  0,
18
17
  0,
19
18
  0,
20
19
  0
21
20
  ];
22
- do {
21
+ parse: {
23
22
  let skip = 0;
24
23
  const idLength = dataView.getUint8(0);
25
24
  skip += idLength;
26
25
  const colorMapType = dataView.getUint8(1);
27
26
  if (colorMapType !== 0 && colorMapType !== 1) {
28
- break;
27
+ break parse;
29
28
  }
30
29
  const dataTypeCode = dataView.getUint8(2);
31
30
  if (dataTypeCode !== 2 && dataTypeCode !== 10) {
32
- break;
31
+ break parse;
33
32
  }
34
33
  const colorMapLength = dataView.getUint16(5, true);
35
34
  skip += colorMapLength * colorMapType;
@@ -37,7 +36,7 @@ import { Application } from '../../../app.js';
37
36
  const height = dataView.getUint16(14, true);
38
37
  const bpp = dataView.getUint8(16);
39
38
  if (bpp !== 16 && bpp !== 24 && bpp !== 32) {
40
- break;
39
+ break parse;
41
40
  }
42
41
  let dataOffset = 18 + skip;
43
42
  const bytesPerPixel = bpp / 8;
@@ -78,14 +77,12 @@ import { Application } from '../../../app.js';
78
77
  texture
79
78
  };
80
79
  if (noMipmap) {
81
- opt.samplerOptions = {
82
- mipFilter: 'none'
83
- };
80
+ opt.mipmapping = false;
84
81
  }
85
- const tex = Application.instance.device.createTexture2D(sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm', width, height, opt);
82
+ const tex = getDevice().createTexture2D(sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm', width, height, opt);
86
83
  tex.update(pixels, 0, 0, width, height);
87
84
  return tex;
88
- }while (false)
85
+ }
89
86
  throw new Error(`Unsupported TGA file format`);
90
87
  }
91
88
  mergeBytes(dest, offset, pixel, numBytes) {
@@ -106,8 +103,8 @@ import { Application } from '../../../app.js';
106
103
  dest[offset + 3] = pixel[1] & 0x80;
107
104
  }
108
105
  }
109
- async load(assetManager, filename, mimeType, data, srgb, samplerOptions, texture) {
110
- return new Promise((resolve, reject)=>{
106
+ async load(mimeType, data, srgb, samplerOptions, texture) {
107
+ return new Promise((resolve)=>{
111
108
  resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));
112
109
  });
113
110
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tga_Loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"tga_Loader.js","sources":["../../../../src/asset/loaders/image/tga_Loader.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\r\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions } from '@zephyr3d/device';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport { getDevice } from '../../../app/api';\r\n\r\n/**\r\n * TGA image loader\r\n * @internal\r\n */\r\nexport class TGALoader extends AbstractTextureLoader {\r\n supportMIMEType(mimeType: string): boolean {\r\n return mimeType === 'image/tga' || mimeType === 'image/x-tga';\r\n }\r\n private parseTGA(\r\n content: ArrayBuffer | TypedArray,\r\n sRGB: boolean,\r\n noMipmap: boolean,\r\n texture: BaseTexture\r\n ) {\r\n const arrayBuffer = content instanceof ArrayBuffer ? content : content.buffer;\r\n const offset = content instanceof ArrayBuffer ? 0 : content.byteOffset;\r\n const dataView = new DataView(arrayBuffer, offset);\r\n const p: number[] = [0, 0, 0, 0];\r\n parse: {\r\n let skip = 0;\r\n const idLength = dataView.getUint8(0);\r\n skip += idLength;\r\n const colorMapType = dataView.getUint8(1);\r\n if (colorMapType !== 0 && colorMapType !== 1) {\r\n break parse;\r\n }\r\n const dataTypeCode = dataView.getUint8(2);\r\n if (dataTypeCode !== 2 && dataTypeCode !== 10) {\r\n break parse;\r\n }\r\n const colorMapLength = dataView.getUint16(5, true);\r\n skip += colorMapLength * colorMapType;\r\n const width = dataView.getUint16(12, true);\r\n const height = dataView.getUint16(14, true);\r\n const bpp = dataView.getUint8(16);\r\n if (bpp !== 16 && bpp !== 24 && bpp !== 32) {\r\n break parse;\r\n }\r\n let dataOffset = 18 + skip;\r\n const bytesPerPixel = bpp / 8;\r\n const pixels = new Uint8Array(width * height * 4);\r\n let n = 0;\r\n while (n < width * height) {\r\n if (dataTypeCode === 2) {\r\n for (let i = 0; i < bytesPerPixel; i++) {\r\n p[i] = dataView.getUint8(dataOffset++);\r\n }\r\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\r\n n++;\r\n } else {\r\n const t = dataView.getUint8(dataOffset++);\r\n for (let i = 0; i < bytesPerPixel; i++) {\r\n p[i] = dataView.getUint8(dataOffset++);\r\n }\r\n const j = t & 0x7f;\r\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\r\n n++;\r\n if (t & 0x80) {\r\n for (let i = 0; i < j; i++) {\r\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\r\n n++;\r\n }\r\n } else {\r\n for (let i = 0; i < j; i++) {\r\n for (let k = 0; k < bytesPerPixel; k++) {\r\n p[i] = dataView.getUint8(dataOffset++);\r\n }\r\n this.mergeBytes(pixels, n * 4, p, bytesPerPixel);\r\n n++;\r\n }\r\n }\r\n }\r\n }\r\n const opt: TextureCreationOptions = { texture };\r\n if (noMipmap) {\r\n opt.mipmapping = false;\r\n }\r\n const tex = getDevice().createTexture2D(sRGB ? 'rgba8unorm-srgb' : 'rgba8unorm', width, height, opt);\r\n tex.update(pixels, 0, 0, width, height);\r\n return tex;\r\n }\r\n throw new Error(`Unsupported TGA file format`);\r\n }\r\n private mergeBytes(dest: Uint8Array<ArrayBuffer>, offset: number, pixel: number[], numBytes: number) {\r\n if (numBytes === 4) {\r\n dest[offset + 0] = pixel[2];\r\n dest[offset + 1] = pixel[1];\r\n dest[offset + 2] = pixel[0];\r\n dest[offset + 3] = pixel[3];\r\n } else if (numBytes === 3) {\r\n dest[offset + 0] = pixel[2];\r\n dest[offset + 1] = pixel[1];\r\n dest[offset + 2] = pixel[0];\r\n dest[offset + 3] = 255;\r\n } else if (numBytes === 2) {\r\n dest[offset + 0] = (pixel[1] & 0x7c) << 1;\r\n dest[offset + 1] = ((pixel[1] & 0x03) << 6) | ((pixel[0] & 0xe0) >> 2);\r\n dest[offset + 2] = (pixel[0] & 0x1f) << 3;\r\n dest[offset + 3] = pixel[1] & 0x80;\r\n }\r\n }\r\n async load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture> {\r\n return new Promise<BaseTexture>((resolve) => {\r\n resolve(this.parseTGA(data, srgb, samplerOptions?.mipFilter === 'none', texture));\r\n });\r\n }\r\n}\r\n"],"names":["TGALoader","AbstractTextureLoader","supportMIMEType","mimeType","parseTGA","content","sRGB","noMipmap","texture","arrayBuffer","ArrayBuffer","buffer","offset","byteOffset","dataView","DataView","p","parse","skip","idLength","getUint8","colorMapType","dataTypeCode","colorMapLength","getUint16","width","height","bpp","dataOffset","bytesPerPixel","pixels","Uint8Array","n","i","mergeBytes","t","j","k","opt","mipmapping","tex","getDevice","createTexture2D","update","Error","dest","pixel","numBytes","load","data","srgb","samplerOptions","Promise","resolve","mipFilter"],"mappings":"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"}
@@ -1,63 +1,64 @@
1
1
  import { AbstractTextureLoader } from '../loader.js';
2
- import { Application } from '../../../app.js';
2
+ import { getDevice } from '../../../app/api.js';
3
3
 
4
4
  /**
5
5
  * Web image loader
6
6
  * @internal
7
7
  */ class WebImageLoader extends AbstractTextureLoader {
8
- supportExtension(ext) {
9
- return ext === '.jpg' || ext === '.jpeg' || ext === '.png';
10
- }
11
8
  supportMIMEType(mimeType) {
12
- return mimeType === 'image/jpg' || mimeType === 'image/jpeg' || mimeType === 'image/png';
9
+ return mimeType === 'image/jpeg' || mimeType === 'image/png' || mimeType === 'image/webp';
13
10
  }
14
- async load(assetManager, filename, mimeType, data, srgb, samplerOptions, texture) {
15
- return new Promise((resolve, reject)=>{
16
- if (!mimeType) {
17
- reject('unknown image file type');
11
+ async load(mimeType, data, srgb, samplerOptions, texture) {
12
+ if (!mimeType) {
13
+ throw new Error('unknown image file type');
14
+ }
15
+ const blob = new Blob([
16
+ data
17
+ ], {
18
+ type: mimeType
19
+ });
20
+ const options = {
21
+ texture,
22
+ samplerOptions
23
+ };
24
+ try {
25
+ const bm = await createImageBitmap(blob, {
26
+ premultiplyAlpha: 'none'
27
+ });
28
+ const tex = getDevice().createTexture2DFromImage(bm, srgb, options);
29
+ if (!tex) {
30
+ throw new Error('create texture from ImageBitmap failed');
18
31
  }
19
- const src = URL.createObjectURL(new Blob([
20
- data
21
- ], {
22
- type: mimeType
23
- }));
24
- const img = document.createElement('img');
32
+ bm.close?.();
33
+ return tex;
34
+ } catch {
35
+ const src = URL.createObjectURL(blob);
36
+ try {
37
+ const img = await this.loadHTMLImage(src);
38
+ const cvs = document.createElement('canvas');
39
+ cvs.width = img.naturalWidth || img.width;
40
+ cvs.height = img.naturalHeight || img.height;
41
+ const ctx = cvs.getContext('2d');
42
+ if (!ctx) {
43
+ throw new Error('2D context not available');
44
+ }
45
+ ctx.drawImage(img, 0, 0);
46
+ const tex = getDevice().createTexture2DFromImage(cvs, srgb, options);
47
+ if (!tex) {
48
+ throw new Error('create texture from canvas failed');
49
+ }
50
+ return tex;
51
+ } finally{
52
+ URL.revokeObjectURL(src);
53
+ }
54
+ }
55
+ }
56
+ async loadHTMLImage(src) {
57
+ return new Promise((resolve, reject)=>{
58
+ const img = new Image();
59
+ img.onload = ()=>resolve(img);
60
+ img.onerror = (err)=>reject(err);
25
61
  img.src = src;
26
- img.onload = function() {
27
- createImageBitmap(img, {
28
- premultiplyAlpha: 'none'
29
- }).then((bm)=>{
30
- const options = {
31
- texture: texture,
32
- samplerOptions
33
- };
34
- const tex = Application.instance.device.createTexture2DFromImage(bm, srgb, options);
35
- if (tex) {
36
- resolve(tex);
37
- } else {
38
- reject('create texture from image element failed');
39
- }
40
- }).catch((reason)=>{
41
- const cvs = document.createElement('canvas');
42
- cvs.width = img.width;
43
- cvs.height = img.height;
44
- const ctx = cvs.getContext('2d');
45
- ctx.drawImage(img, 0, 0);
46
- const options = {
47
- texture: texture,
48
- samplerOptions
49
- };
50
- const tex = Application.instance.device.createTexture2DFromImage(cvs, srgb, options);
51
- if (tex) {
52
- resolve(tex);
53
- } else {
54
- reject('create texture from image element failed');
55
- }
56
- });
57
- };
58
- img.onerror = (err)=>{
59
- reject(err);
60
- };
61
62
  });
62
63
  }
63
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webimage_loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"webimage_loader.js","sources":["../../../../src/asset/loaders/image/webimage_loader.ts"],"sourcesContent":["import { AbstractTextureLoader } from '../loader';\r\nimport type { BaseTexture, SamplerOptions, TextureCreationOptions } from '@zephyr3d/device';\r\nimport type { TypedArray } from '@zephyr3d/base';\r\nimport { getDevice } from '../../../app/api';\r\n\r\n/**\r\n * Web image loader\r\n * @internal\r\n */\r\nexport class WebImageLoader extends AbstractTextureLoader {\r\n supportMIMEType(mimeType: string): boolean {\r\n return mimeType === 'image/jpeg' || mimeType === 'image/png' || mimeType === 'image/webp';\r\n }\r\n async load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture> {\r\n if (!mimeType) {\r\n throw new Error('unknown image file type');\r\n }\r\n\r\n const blob = new Blob([data], { type: mimeType });\r\n const options: TextureCreationOptions = { texture, samplerOptions };\r\n\r\n try {\r\n const bm = await createImageBitmap(blob, { premultiplyAlpha: 'none' });\r\n const tex = getDevice().createTexture2DFromImage(bm, srgb, options);\r\n if (!tex) {\r\n throw new Error('create texture from ImageBitmap failed');\r\n }\r\n bm.close?.();\r\n return tex;\r\n } catch {\r\n const src = URL.createObjectURL(blob);\r\n try {\r\n const img = await this.loadHTMLImage(src);\r\n const cvs = document.createElement('canvas');\r\n cvs.width = img.naturalWidth || img.width;\r\n cvs.height = img.naturalHeight || img.height;\r\n const ctx = cvs.getContext('2d');\r\n if (!ctx) {\r\n throw new Error('2D context not available');\r\n }\r\n ctx.drawImage(img, 0, 0);\r\n const tex = getDevice().createTexture2DFromImage(cvs, srgb, options);\r\n if (!tex) {\r\n throw new Error('create texture from canvas failed');\r\n }\r\n return tex;\r\n } finally {\r\n URL.revokeObjectURL(src);\r\n }\r\n }\r\n }\r\n\r\n private async loadHTMLImage(src: string): Promise<HTMLImageElement> {\r\n return new Promise((resolve, reject) => {\r\n const img = new Image();\r\n img.onload = () => resolve(img);\r\n img.onerror = (err) => reject(err);\r\n img.src = src;\r\n });\r\n }\r\n}\r\n"],"names":["WebImageLoader","AbstractTextureLoader","supportMIMEType","mimeType","load","data","srgb","samplerOptions","texture","Error","blob","Blob","type","options","bm","createImageBitmap","premultiplyAlpha","tex","getDevice","createTexture2DFromImage","close","src","URL","createObjectURL","img","loadHTMLImage","cvs","document","createElement","width","naturalWidth","height","naturalHeight","ctx","getContext","drawImage","revokeObjectURL","Promise","resolve","reject","Image","onload","onerror","err"],"mappings":";;;AAKA;;;IAIO,MAAMA,cAAuBC,SAAAA,qBAAAA,CAAAA;AAClCC,IAAAA,eAAAA,CAAgBC,QAAgB,EAAW;AACzC,QAAA,OAAOA,QAAa,KAAA,YAAA,IAAgBA,QAAa,KAAA,WAAA,IAAeA,QAAa,KAAA,YAAA;AAC/E;IACA,MAAMC,IAAAA,CACJD,QAAgB,EAChBE,IAA8B,EAC9BC,IAAa,EACbC,cAA+B,EAC/BC,OAAqB,EACC;AACtB,QAAA,IAAI,CAACL,QAAU,EAAA;AACb,YAAA,MAAM,IAAIM,KAAM,CAAA,yBAAA,CAAA;AAClB;QAEA,MAAMC,IAAAA,GAAO,IAAIC,IAAK,CAAA;AAACN,YAAAA;SAAK,EAAE;YAAEO,IAAMT,EAAAA;AAAS,SAAA,CAAA;AAC/C,QAAA,MAAMU,OAAkC,GAAA;AAAEL,YAAAA,OAAAA;AAASD,YAAAA;AAAe,SAAA;QAElE,IAAI;YACF,MAAMO,EAAAA,GAAK,MAAMC,iBAAAA,CAAkBL,IAAM,EAAA;gBAAEM,gBAAkB,EAAA;AAAO,aAAA,CAAA;AACpE,YAAA,MAAMC,GAAMC,GAAAA,SAAAA,EAAAA,CAAYC,wBAAwB,CAACL,IAAIR,IAAMO,EAAAA,OAAAA,CAAAA;AAC3D,YAAA,IAAI,CAACI,GAAK,EAAA;AACR,gBAAA,MAAM,IAAIR,KAAM,CAAA,wCAAA,CAAA;AAClB;AACAK,YAAAA,EAAAA,CAAGM,KAAK,IAAA;YACR,OAAOH,GAAAA;AACT,SAAA,CAAE,OAAM;YACN,MAAMI,GAAAA,GAAMC,GAAIC,CAAAA,eAAe,CAACb,IAAAA,CAAAA;YAChC,IAAI;AACF,gBAAA,MAAMc,GAAM,GAAA,MAAM,IAAI,CAACC,aAAa,CAACJ,GAAAA,CAAAA;gBACrC,MAAMK,GAAAA,GAAMC,QAASC,CAAAA,aAAa,CAAC,QAAA,CAAA;AACnCF,gBAAAA,GAAAA,CAAIG,KAAK,GAAGL,GAAAA,CAAIM,YAAY,IAAIN,IAAIK,KAAK;AACzCH,gBAAAA,GAAAA,CAAIK,MAAM,GAAGP,GAAAA,CAAIQ,aAAa,IAAIR,IAAIO,MAAM;gBAC5C,MAAME,GAAAA,GAAMP,GAAIQ,CAAAA,UAAU,CAAC,IAAA,CAAA;AAC3B,gBAAA,IAAI,CAACD,GAAK,EAAA;AACR,oBAAA,MAAM,IAAIxB,KAAM,CAAA,0BAAA,CAAA;AAClB;gBACAwB,GAAIE,CAAAA,SAAS,CAACX,GAAAA,EAAK,CAAG,EAAA,CAAA,CAAA;AACtB,gBAAA,MAAMP,GAAMC,GAAAA,SAAAA,EAAAA,CAAYC,wBAAwB,CAACO,KAAKpB,IAAMO,EAAAA,OAAAA,CAAAA;AAC5D,gBAAA,IAAI,CAACI,GAAK,EAAA;AACR,oBAAA,MAAM,IAAIR,KAAM,CAAA,mCAAA,CAAA;AAClB;gBACA,OAAOQ,GAAAA;aACC,QAAA;AACRK,gBAAAA,GAAAA,CAAIc,eAAe,CAACf,GAAAA,CAAAA;AACtB;AACF;AACF;IAEA,MAAcI,aAAAA,CAAcJ,GAAW,EAA6B;QAClE,OAAO,IAAIgB,OAAQ,CAAA,CAACC,OAASC,EAAAA,MAAAA,GAAAA;AAC3B,YAAA,MAAMf,MAAM,IAAIgB,KAAAA,EAAAA;YAChBhB,GAAIiB,CAAAA,MAAM,GAAG,IAAMH,OAAQd,CAAAA,GAAAA,CAAAA;AAC3BA,YAAAA,GAAAA,CAAIkB,OAAO,GAAG,CAACC,GAAAA,GAAQJ,MAAOI,CAAAA,GAAAA,CAAAA;AAC9BnB,YAAAA,GAAAA,CAAIH,GAAG,GAAGA,GAAAA;AACZ,SAAA,CAAA;AACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"loader.js","sources":["../../../src/asset/loaders/loader.ts"],"sourcesContent":["import type { BaseTexture, SamplerOptions } from '@zephyr3d/device';\r\nimport type { AssetManager } from '../assetmanager';\r\nimport type { SharedModel } from '../model';\r\nimport type { DecoderModule } from 'draco3d';\r\nimport type { TypedArray, VFS } from '@zephyr3d/base';\r\n\r\n/**\r\n * Base interface for any kind loaders\r\n * @public\r\n */\r\nexport class LoaderBase {\r\n /** @internal */\r\n protected _urlResolver: (url: string) => string;\r\n /**\r\n * Creates an instance of LoaderBase\r\n */\r\n constructor() {\r\n this._urlResolver = null;\r\n }\r\n /**\r\n * URL resolver for the loader\r\n */\r\n get urlResolver(): (url: string) => string {\r\n return this._urlResolver;\r\n }\r\n set urlResolver(resolver: (url: string) => string) {\r\n this._urlResolver = resolver;\r\n }\r\n /**\r\n * Sends a GET request\r\n * @param url - The URL to get\r\n * @param headers - The headers for the request\r\n * @param crossOrigin - crossOrigin property for the request\r\n * @returns Response of the request\r\n */\r\n async request(\r\n url: string,\r\n headers: Record<string, string> = {},\r\n crossOrigin = 'anonymous'\r\n ): Promise<Response> {\r\n url = this._urlResolver ? this._urlResolver(url) : null;\r\n return url\r\n ? fetch(url, {\r\n credentials: crossOrigin === 'anonymous' ? 'same-origin' : 'include',\r\n headers: headers\r\n })\r\n : null;\r\n }\r\n}\r\n/**\r\n * Base class for any kind of texture loaders\r\n * @public\r\n */\r\nexport abstract class AbstractTextureLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a texture with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a texture\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the texture image data\r\n * @param data - The texture image data\r\n * @param srgb - true if the texture is of sRGB format\r\n * @param samplerOptions - Sampler options of the texture\r\n * @param texture - if not null, this is a texture restore operation\r\n * @returns The loaded texture\r\n */\r\n abstract load(\r\n mimeType: string,\r\n data: ArrayBuffer | TypedArray,\r\n srgb: boolean,\r\n samplerOptions?: SamplerOptions,\r\n texture?: BaseTexture\r\n ): Promise<BaseTexture>;\r\n}\r\n\r\n/**\r\n * Base class for any kind of model loaders\r\n * @public\r\n */\r\nexport abstract class AbstractModelLoader extends LoaderBase {\r\n /**\r\n * Tests whether the loader supports loading a model with given MIME type.\r\n * @param mimeType - The MIME type to test\r\n * @returns true if it supports\r\n */\r\n abstract supportMIMEType(mimeType: string): boolean;\r\n /**\r\n * Loads a model\r\n * @param assetManager - The instance of AssetManager\r\n * @param url - The request URL\r\n * @param mimeType - MIME type for the model data\r\n * @param data - The model data\r\n * @returns The loaded model\r\n */\r\n abstract load(\r\n assetManager: AssetManager,\r\n url: string,\r\n mimeType: string,\r\n data: Blob,\r\n dracoDecoderModule?: DecoderModule,\r\n VFSs?: VFS[]\r\n ): Promise<SharedModel>;\r\n}\r\n"],"names":["LoaderBase","_urlResolver","urlResolver","resolver","request","url","headers","crossOrigin","fetch","credentials","AbstractTextureLoader","AbstractModelLoader"],"mappings":"AAMA;;;AAGC,IACM,MAAMA,UAAAA,CAAAA;qBAEX,YAAgD;AAChD;;AAEC,MACD,WAAc,EAAA;QACZ,IAAI,CAACC,YAAY,GAAG,IAAA;AACtB;AACA;;AAEC,MACD,IAAIC,WAAuC,GAAA;QACzC,OAAO,IAAI,CAACD,YAAY;AAC1B;IACA,IAAIC,WAAAA,CAAYC,QAAiC,EAAE;QACjD,IAAI,CAACF,YAAY,GAAGE,QAAAA;AACtB;AACA;;;;;;MAOA,MAAMC,OACJC,CAAAA,GAAW,EACXC,OAAAA,GAAkC,EAAE,EACpCC,WAAc,GAAA,WAAW,EACN;QACnBF,GAAM,GAAA,IAAI,CAACJ,YAAY,GAAG,IAAI,CAACA,YAAY,CAACI,GAAO,CAAA,GAAA,IAAA;QACnD,OAAOA,GAAAA,GACHG,MAAMH,GAAK,EAAA;YACTI,WAAaF,EAAAA,WAAAA,KAAgB,cAAc,aAAgB,GAAA,SAAA;YAC3DD,OAASA,EAAAA;SAEX,CAAA,GAAA,IAAA;AACN;AACF;AACA;;;IAIO,MAAeI,qBAA8BV,SAAAA,UAAAA,CAAAA;AAyBpD;AAEA;;;IAIO,MAAeW,mBAA4BX,SAAAA,UAAAA,CAAAA;AAuBlD;;;;"}
@@ -1,4 +1,14 @@
1
- import { Vector3, Quaternion, Matrix4x4 } from '@zephyr3d/base';
1
+ import { Vector3, Quaternion, Matrix4x4, Disposable, DRef } from '@zephyr3d/base';
2
+ import { Mesh } from '../scene/mesh.js';
3
+ import { SceneNode } from '../scene/scene_node.js';
4
+ import { NodeTranslationTrack } from '../animation/translationtrack.js';
5
+ import { NodeRotationTrack } from '../animation/rotationtrack.js';
6
+ import '../animation/eulerrotationtrack.js';
7
+ import { NodeScaleTrack } from '../animation/scaletrack.js';
8
+ import { MorphTargetTrack } from '../animation/morphtrack.js';
9
+ import { Skeleton } from '../animation/skeleton.js';
10
+ import { processMorphData } from '../animation/morphtarget.js';
11
+ import { MAX_MORPH_TARGETS } from '../values.js';
2
12
 
3
13
  /**
4
14
  * Named object interface for model loading
@@ -143,7 +153,7 @@ import { Vector3, Quaternion, Matrix4x4 } from '@zephyr3d/base';
143
153
  * Attach this node to a skeleton
144
154
  * @param skeleton - The skeleton to which to node will attach
145
155
  * @param index - The joint index
146
- */ attachToSkeleton(skeleton, index) {
156
+ */ attachToSkeleton(skeleton) {
147
157
  if (!this._attachToSkeleton) {
148
158
  this._attachToSkeleton = new Set();
149
159
  }
@@ -178,7 +188,7 @@ import { Vector3, Quaternion, Matrix4x4 } from '@zephyr3d/base';
178
188
  * @param joint - The joint node
179
189
  * @param inverseBindMatrix - Inverse binding matrix of the joint
180
190
  */ addJoint(joint, inverseBindMatrix) {
181
- joint.attachToSkeleton(this, this.joints.length);
191
+ joint.attachToSkeleton(this);
182
192
  this.joints.push(joint);
183
193
  this.inverseBindMatrices.push(inverseBindMatrix);
184
194
  this.bindPoseMatrices.push(joint.worldMatrix);
@@ -200,7 +210,7 @@ import { Vector3, Quaternion, Matrix4x4 } from '@zephyr3d/base';
200
210
  /**
201
211
  * Model information that can be shared by multiple model nodes
202
212
  * @public
203
- */ class SharedModel {
213
+ */ class SharedModel extends Disposable {
204
214
  /** @internal */ _name;
205
215
  /** @internal */ _skeletons;
206
216
  /** @internal */ _nodes;
@@ -211,6 +221,7 @@ import { Vector3, Quaternion, Matrix4x4 } from '@zephyr3d/base';
211
221
  * Creates an instance of SharedModel
212
222
  * @param name - Name of the model
213
223
  */ constructor(name){
224
+ super();
214
225
  this._name = name || '';
215
226
  this._skeletons = [];
216
227
  this._nodes = [];
@@ -265,6 +276,149 @@ import { Vector3, Quaternion, Matrix4x4 } from '@zephyr3d/base';
265
276
  */ addAnimation(animation) {
266
277
  this._animations.push(animation);
267
278
  }
279
+ createSceneNode(scene, instancing) {
280
+ const group = new SceneNode(scene);
281
+ group.name = this.name;
282
+ const animationSet = group.animationSet;
283
+ for(let i = 0; i < this.scenes.length; i++){
284
+ const assetScene = this.scenes[i];
285
+ const skeletonMeshMap = new Map();
286
+ const nodeMap = new Map();
287
+ for(let k = 0; k < assetScene.rootNodes.length; k++){
288
+ this.setAssetNodeToSceneNode(scene, group, assetScene.rootNodes[k], skeletonMeshMap, nodeMap, instancing);
289
+ }
290
+ for (const animationData of this.animations){
291
+ let name = animationData.name ?? `_embbeded_animation`;
292
+ if (animationSet.getAnimationClip(name)) {
293
+ const baseName = name;
294
+ for(let t = 1;; t++){
295
+ name = `${baseName}_${t}`;
296
+ if (!animationSet.getAnimationClip(name)) {
297
+ break;
298
+ }
299
+ }
300
+ }
301
+ const animation = animationSet.createAnimation(name, true);
302
+ for (const track of animationData.tracks){
303
+ if (track.type === 'translation') {
304
+ animation.addTrack(nodeMap.get(track.node), new NodeTranslationTrack(track.interpolator, true));
305
+ } else if (track.type === 'scale') {
306
+ animation.addTrack(nodeMap.get(track.node), new NodeScaleTrack(track.interpolator, true));
307
+ } else if (track.type === 'rotation') {
308
+ animation.addTrack(nodeMap.get(track.node), new NodeRotationTrack(track.interpolator, true));
309
+ } else if (track.type === 'weights') {
310
+ for (const m of track.node.mesh.subMeshes){
311
+ if (track.interpolator.stride > MAX_MORPH_TARGETS) {
312
+ console.error(`Morph target too large: ${track.interpolator.stride}, the maximum is ${MAX_MORPH_TARGETS}`);
313
+ } else {
314
+ const morphTrack = new MorphTargetTrack(track.interpolator, track.defaultMorphWeights, m.targetBox, m.mesh.getBoundingVolume().toAABB(), true);
315
+ animation.addTrack(m.mesh, morphTrack);
316
+ }
317
+ }
318
+ } else {
319
+ console.error(`Invalid animation track type: ${track.type}`);
320
+ }
321
+ }
322
+ for (const sk of animationData.skeletons){
323
+ const nodes = skeletonMeshMap.get(sk);
324
+ if (nodes) {
325
+ if (!nodes.skeleton) {
326
+ nodes.skeleton = new Skeleton(sk.joints.map((val)=>nodeMap.get(val)), sk.inverseBindMatrices, sk.bindPoseMatrices);
327
+ for(let i = 0; i < nodes.mesh.length; i++){
328
+ const mesh = nodes.mesh[i];
329
+ const v = {
330
+ positions: nodes.bounding[i].rawPositions,
331
+ blendIndices: nodes.bounding[i].rawBlendIndices,
332
+ weights: nodes.bounding[i].rawJointWeights
333
+ };
334
+ mesh.setSkinnedBoundingInfo(nodes.skeleton.getBoundingInfo(v));
335
+ mesh.skeletonName = nodes.skeleton.persistentId;
336
+ }
337
+ animationSet.skeletons.push(new DRef(nodes.skeleton));
338
+ }
339
+ animation.addSkeleton(nodes.skeleton.persistentId);
340
+ }
341
+ }
342
+ }
343
+ }
344
+ group.iterate((child)=>{
345
+ if (child !== group) {
346
+ child.sealed = true;
347
+ }
348
+ });
349
+ group.sharedModel = this;
350
+ return group;
351
+ }
352
+ onDispose() {
353
+ super.onDispose();
354
+ const nodes = [
355
+ ...this._nodes
356
+ ];
357
+ while(nodes.length > 0){
358
+ const node = nodes.shift();
359
+ nodes.push(...node.children);
360
+ const mesh = node.mesh;
361
+ if (mesh) {
362
+ for (const subMesh of mesh.subMeshes){
363
+ subMesh.primitive?.dispose();
364
+ subMesh.material?.dispose();
365
+ }
366
+ }
367
+ }
368
+ this._nodes = [];
369
+ this._skeletons = [];
370
+ this._scenes = [];
371
+ this._animations = [];
372
+ }
373
+ setAssetNodeToSceneNode(scene, parent, assetNode, skeletonMeshMap, nodeMap, instancing) {
374
+ const node = new SceneNode(scene);
375
+ nodeMap.set(assetNode, node);
376
+ node.name = assetNode.name ?? '';
377
+ node.position.set(assetNode.position);
378
+ node.rotation.set(assetNode.rotation);
379
+ node.scale.set(assetNode.scaling);
380
+ if (assetNode.mesh) {
381
+ const meshData = assetNode.mesh;
382
+ const skeleton = assetNode.skeleton;
383
+ for (const subMesh of meshData.subMeshes){
384
+ for (const instance of assetNode.instances){
385
+ const meshNode = new Mesh(scene);
386
+ meshNode.position = instance.t;
387
+ meshNode.scale = instance.s;
388
+ meshNode.rotation = instance.r;
389
+ meshNode.name = subMesh.name;
390
+ meshNode.clipTestEnabled = true;
391
+ meshNode.showState = 'inherit';
392
+ meshNode.skinAnimation = !!skeleton;
393
+ meshNode.morphAnimation = subMesh.numTargets > 0;
394
+ meshNode.primitive = subMesh.primitive.get();
395
+ meshNode.material = instancing && !meshNode.skinAnimation && !meshNode.morphAnimation ? subMesh.material.get().createInstance() : subMesh.material.get().clone();
396
+ meshNode.parent = node;
397
+ subMesh.mesh = meshNode;
398
+ processMorphData(subMesh, meshData.morphWeights);
399
+ if (skeleton) {
400
+ if (!skeletonMeshMap.has(skeleton)) {
401
+ skeletonMeshMap.set(skeleton, {
402
+ mesh: [
403
+ meshNode
404
+ ],
405
+ bounding: [
406
+ subMesh
407
+ ]
408
+ });
409
+ } else {
410
+ skeletonMeshMap.get(skeleton).mesh.push(meshNode);
411
+ skeletonMeshMap.get(skeleton).bounding.push(subMesh);
412
+ }
413
+ }
414
+ }
415
+ }
416
+ }
417
+ node.parent = parent;
418
+ for (const child of assetNode.children){
419
+ this.setAssetNodeToSceneNode(scene, node, child, skeletonMeshMap, nodeMap, instancing);
420
+ }
421
+ }
268
422
  }
269
423
 
270
424
  export { AssetHierarchyNode, AssetScene, AssetSkeleton, NamedObject, SharedModel };
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"model.js","sources":["../../src/asset/model.ts"],"sourcesContent":["import type { Vector4, TypedArray, Interpolator } 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\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: Texture2D;\r\n sampler: TextureSampler;\r\n texCoord: number;\r\n transform: Matrix4x4;\r\n}\r\n\r\n/**\r\n * Common properties of material for model loading\r\n * @public\r\n */\r\nexport interface AssetMaterialCommon {\r\n vertexColor?: boolean;\r\n vertexNormal?: boolean;\r\n useTangent?: boolean;\r\n alphaMode?: 'blend' | 'mask';\r\n alphaCutoff?: number;\r\n doubleSided?: boolean;\r\n normalMap?: MaterialTextureInfo;\r\n bumpScale?: number;\r\n emissiveMap?: MaterialTextureInfo;\r\n emissiveColor?: Vector3;\r\n emissiveStrength?: number;\r\n occlusionMap?: 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?: 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?: MaterialTextureInfo;\r\n sheenRoughnessFactor?: number;\r\n sheenRoughnessMap?: 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?: MaterialTextureInfo;\r\n clearCoatRoughnessFactor?: number;\r\n clearCoatRoughnessMap?: MaterialTextureInfo;\r\n clearCoatNormalMap?: 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?: MaterialTextureInfo;\r\n thicknessFactor?: number;\r\n thicknessMap?: 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?: MaterialTextureInfo;\r\n iridescenceIor?: number;\r\n iridescenceThicknessMinimum?: number;\r\n iridescenceThicknessMaximum?: number;\r\n iridescenceThicknessMap?: 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?: MaterialTextureInfo;\r\n metallicIndex?: number;\r\n roughnessIndex?: number;\r\n specularMap?: MaterialTextureInfo;\r\n specularColorMap?: 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?: 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: Float32Array;\r\n rawBlendIndices: TypedArray;\r\n rawJointWeights: TypedArray;\r\n name: string;\r\n numTargets: number;\r\n targets?: Partial<Record<number, { numComponents: number; data: Float32Array[] }>>;\r\n targetBox?: BoundingBox[];\r\n morphAttribCount?: number;\r\n}\r\n\r\n/**\r\n * Mesh data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetMeshData {\r\n morphWeights?: number[];\r\n subMeshes: AssetSubMeshData[];\r\n}\r\n\r\n/**\r\n * Animation track interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationTrack {\r\n node: AssetHierarchyNode;\r\n type: 'translation' | 'scale' | 'rotation' | 'weights';\r\n interpolator: Interpolator;\r\n defaultMorphWeights?: number[];\r\n}\r\n\r\n/**\r\n * Animation data interface for model loading\r\n * @public\r\n */\r\nexport interface AssetAnimationData {\r\n name: string;\r\n tracks: AssetAnimationTrack[];\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: AssetHierarchyNode;\r\n private _position: Vector3;\r\n private _rotation: Quaternion;\r\n private _scaling: Vector3;\r\n private _mesh: AssetMeshData;\r\n private _skeleton: AssetSkeleton;\r\n private _attachToSkeleton: Set<AssetSkeleton>;\r\n private _meshAttached: boolean;\r\n private _matrix: Matrix4x4;\r\n private _worldMatrix: Matrix4x4;\r\n private _weights: 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?: 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(): AssetHierarchyNode {\r\n return this._parent;\r\n }\r\n /** Local transformation matrix of the node */\r\n get matrix(): Matrix4x4 {\r\n return this._matrix;\r\n }\r\n /** World transformation matrix of the node */\r\n get worldMatrix(): Matrix4x4 {\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(): AssetMeshData {\r\n return this._mesh;\r\n }\r\n set mesh(data: AssetMeshData) {\r\n this._mesh = data;\r\n this.setMeshAttached();\r\n }\r\n /** instances */\r\n get instances(): { t: Vector3; s: Vector3; r: Quaternion }[] {\r\n return this._instances;\r\n }\r\n /** Default morph target weights */\r\n get weights(): number[] {\r\n return this._weights;\r\n }\r\n set weights(val: number[]) {\r\n this._weights = val;\r\n }\r\n /** The skeleton used to control the node */\r\n get skeleton(): AssetSkeleton {\r\n return this._skeleton;\r\n }\r\n set skeleton(skeleton: AssetSkeleton) {\r\n this._skeleton = skeleton;\r\n }\r\n /** The translation of the node */\r\n get position(): Vector3 {\r\n return this._position;\r\n }\r\n set position(val: Vector3) {\r\n this._position = val;\r\n }\r\n /** The rotation of the node */\r\n get rotation(): Quaternion {\r\n return this._rotation;\r\n }\r\n set rotation(val: Quaternion) {\r\n this._rotation = val;\r\n }\r\n /** The scale of the node */\r\n get scaling(): Vector3 {\r\n return this._scaling;\r\n }\r\n set scaling(val: Vector3) {\r\n this._scaling = val;\r\n }\r\n /** true if the node is parent of a mesh node */\r\n get meshAttached(): boolean {\r\n return this._meshAttached;\r\n }\r\n /** Children of the node */\r\n get children(): AssetHierarchyNode[] {\r\n return this._children;\r\n }\r\n /** The skeleton to which the node belongs if this is a joint node */\r\n get skeletonAttached(): Set<AssetSkeleton> {\r\n return this._attachToSkeleton;\r\n }\r\n /** @internal */\r\n computeTransforms(parentTransform: 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: 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 bindPoseMatrices: Matrix4x4[];\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.bindPoseMatrices = [];\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.bindPoseMatrices.push(joint.worldMatrix);\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(): string {\r\n return this._name;\r\n }\r\n set name(val: string) {\r\n this._name = val;\r\n }\r\n /** All scenes that the model contains */\r\n get scenes(): AssetScene[] {\r\n return this._scenes;\r\n }\r\n /** All animations that the model contains */\r\n get animations(): AssetAnimationData[] {\r\n return this._animations;\r\n }\r\n /** All skeletons that the model contains */\r\n get skeletons(): AssetSkeleton[] {\r\n return this._skeletons;\r\n }\r\n /** All nodes that the model contains */\r\n get nodes(): AssetHierarchyNode[] {\r\n return this._nodes;\r\n }\r\n /** The active scene of the model */\r\n get activeScene(): number {\r\n return this._activeScene;\r\n }\r\n set activeScene(val: number) {\r\n this._activeScene = val;\r\n }\r\n /**\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: AssetHierarchyNode, index: number, name: string): AssetHierarchyNode {\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): SceneNode {\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 {\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.bindPoseMatrices\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 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","bindPoseMatrices","addJoint","joint","inverseBindMatrix","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","sk","Skeleton","map","v","positions","bounding","rawPositions","blendIndices","rawBlendIndices","rawJointWeights","setSkinnedBoundingInfo","getBoundingInfo","skeletonName","persistentId","DRef","iterate","sealed","sharedModel","onDispose","shift","subMesh","primitive","dispose","material","assetNode","set","scale","meshData","instance","meshNode","Mesh","s","r","clipTestEnabled","showState","skinAnimation","morphAnimation","numTargets","createInstance","clone","processMorphData","morphWeights","has"],"mappings":";;;;;;;;;;;;AAeA;;;AAGC,IACM,MAAMA,WAAAA,CAAAA;IACXC,IAAa;AACb;;;MAIA,WAAA,CAAYA,IAAY,CAAE;QACxB,IAAI,CAACA,IAAI,GAAGA,IAAAA;AACd;AACF;AA8NA;;;IAIO,MAAMC,kBAA2BF,SAAAA,WAAAA,CAAAA;IAC9BG,OAA4B;IAC5BC,SAAmB;IACnBC,SAAsB;IACtBC,QAAkB;IAClBC,KAAqB;IACrBC,SAAyB;IACzBC,iBAAsC;IACtCC,aAAuB;IACvBC,OAAmB;IACnBC,YAAwB;IACxBC,QAAmB;IACVC,SAAgC;IAChCC,UAAyD;AAC1E;;;;AAIC,MACD,WAAYd,CAAAA,IAAY,EAAEe,MAA2B,CAAE;AACrD,QAAA,KAAK,CAACf,IAAAA,CAAAA;QACN,IAAI,CAACE,OAAO,GAAG,IAAA;AACf,QAAA,IAAI,CAACC,SAAS,GAAGa,OAAAA,CAAQC,IAAI,EAAA;AAC7B,QAAA,IAAI,CAACb,SAAS,GAAGc,UAAAA,CAAWC,QAAQ,EAAA;AACpC,QAAA,IAAI,CAACd,QAAQ,GAAGW,OAAAA,CAAQI,GAAG,EAAA;QAC3B,IAAI,CAACP,SAAS,GAAG,EAAE;QACnB,IAAI,CAACP,KAAK,GAAG,IAAA;QACb,IAAI,CAACC,SAAS,GAAG,IAAA;QACjB,IAAI,CAACC,iBAAiB,GAAG,IAAA;QACzB,IAAI,CAACC,aAAa,GAAG,KAAA;QACrB,IAAI,CAACC,OAAO,GAAG,IAAA;QACf,IAAI,CAACE,QAAQ,GAAG,IAAA;QAChB,IAAI,CAACD,YAAY,GAAG,IAAA;QACpB,IAAI,CAACG,UAAU,GAAG,EAAE;AACpBC,QAAAA,MAAAA,EAAQM,SAAS,IAAI,CAAA;AACvB;8BAEA,IAAIN,MAA6B,GAAA;QAC/B,OAAO,IAAI,CAACb,OAAO;AACrB;mDAEA,IAAIoB,MAAoB,GAAA;QACtB,OAAO,IAAI,CAACZ,OAAO;AACrB;mDAEA,IAAIa,WAAyB,GAAA;QAC3B,OAAO,IAAI,CAACZ,YAAY;AAC1B;qEAEA,IAAIa,IAAsB,GAAA;QACxB,OAAO,IAAI,CAAClB,KAAK;AACnB;IACA,IAAIkB,IAAAA,CAAKC,IAAmB,EAAE;QAC5B,IAAI,CAACnB,KAAK,GAAGmB,IAAAA;AACb,QAAA,IAAI,CAACC,eAAe,EAAA;AACtB;qBAEA,IAAIC,SAAyD,GAAA;QAC3D,OAAO,IAAI,CAACb,UAAU;AACxB;wCAEA,IAAIc,OAAoB,GAAA;QACtB,OAAO,IAAI,CAAChB,QAAQ;AACtB;IACA,IAAIgB,OAAAA,CAAQC,GAAa,EAAE;QACzB,IAAI,CAACjB,QAAQ,GAAGiB,GAAAA;AAClB;iDAEA,IAAIC,QAA0B,GAAA;QAC5B,OAAO,IAAI,CAACvB,SAAS;AACvB;IACA,IAAIuB,QAAAA,CAASA,QAAuB,EAAE;QACpC,IAAI,CAACvB,SAAS,GAAGuB,QAAAA;AACnB;uCAEA,IAAIC,QAAoB,GAAA;QACtB,OAAO,IAAI,CAAC5B,SAAS;AACvB;IACA,IAAI4B,QAAAA,CAASF,GAAY,EAAE;QACzB,IAAI,CAAC1B,SAAS,GAAG0B,GAAAA;AACnB;oCAEA,IAAIG,QAAuB,GAAA;QACzB,OAAO,IAAI,CAAC5B,SAAS;AACvB;IACA,IAAI4B,QAAAA,CAASH,GAAe,EAAE;QAC5B,IAAI,CAACzB,SAAS,GAAGyB,GAAAA;AACnB;iCAEA,IAAII,OAAmB,GAAA;QACrB,OAAO,IAAI,CAAC5B,QAAQ;AACtB;IACA,IAAI4B,OAAAA,CAAQJ,GAAY,EAAE;QACxB,IAAI,CAACxB,QAAQ,GAAGwB,GAAAA;AAClB;qDAEA,IAAIK,YAAwB,GAAA;QAC1B,OAAO,IAAI,CAACzB,aAAa;AAC3B;gCAEA,IAAI0B,QAAiC,GAAA;QACnC,OAAO,IAAI,CAACtB,SAAS;AACvB;0EAEA,IAAIuB,gBAAuC,GAAA;QACzC,OAAO,IAAI,CAAC5B,iBAAiB;AAC/B;qBAEA6B,iBAAkBC,CAAAA,eAA0B,EAAE;QAC5C,IAAI,CAAC5B,OAAO,GAAG6B,SAAAA,CAAUN,OAAO,CAAC,IAAI,CAAC5B,QAAQ,CAAA,CAAEmC,UAAU,CAAC,IAAI,CAACpC,SAAS,CAAA,CAAEqC,aAAa,CAAC,IAAI,CAACtC,SAAS,CAAA;AACvG,QAAA,IAAI,CAACQ,YAAY,GAAG2B,eAChBC,GAAAA,SAAAA,CAAUG,QAAQ,CAACJ,eAAAA,EAAiB,IAAI,CAAC5B,OAAO,CAChD,GAAA,IAAI6B,SAAU,CAAA,IAAI,CAAC7B,OAAO,CAAA;AAC9B,QAAA,KAAK,MAAMiC,KAAAA,IAAS,IAAI,CAAC9B,SAAS,CAAE;AAClC8B,YAAAA,KAAAA,CAAMN,iBAAiB,CAAC,IAAI,CAAC1B,YAAY,CAAA;AAC3C;AACF;AACA;;;MAIAU,QAAAA,CAASsB,KAAyB,EAAE;AAClC,QAAA,IAAI,CAACA,KAAAA,IAASA,KAAM5B,CAAAA,MAAM,EAAE;AAC1B,YAAA,MAAM,IAAI6B,KAAM,CAAA,mDAAA,CAAA;AAClB;AACA,QAAA,IAAI,CAAC/B,SAAS,CAACgC,IAAI,CAACF,KAAAA,CAAAA;QACpBA,KAAMzC,CAAAA,OAAO,GAAG,IAAI;QACpB,IAAIyC,KAAAA,CAAMT,YAAY,EAAE;AACtB,YAAA,IAAI,CAACR,eAAe,EAAA;AACtB;AACF;AACA;;;MAIAoB,WAAAA,CAAYH,KAAyB,EAAE;AACrC,QAAA,MAAMI,QAAQ,IAAI,CAAClC,SAAS,CAACmC,OAAO,CAACL,KAAAA,CAAAA;AACrC,QAAA,IAAII,QAAQ,CAAG,EAAA;AACb,YAAA,MAAM,IAAIH,KAAM,CAAA,sDAAA,CAAA;AAClB;AACA,QAAA,IAAI,CAAC/B,SAAS,CAACkC,KAAM,CAAA,CAAC7C,OAAO,GAAG,IAAA;AAChC,QAAA,IAAI,CAACW,SAAS,CAACoC,MAAM,CAACF,KAAO,EAAA,CAAA,CAAA;AAC/B;AACA;;;;MAKAG,gBAAAA,CAAiBpB,QAAuB,EAAE;AACxC,QAAA,IAAI,CAAC,IAAI,CAACtB,iBAAiB,EAAE;YAC3B,IAAI,CAACA,iBAAiB,GAAG,IAAI2C,GAAAA,EAAAA;AAC/B;AACA,QAAA,IAAI,CAAC3C,iBAAiB,CAAC4C,GAAG,CAACtB,QAAAA,CAAAA;AAC7B;qBAEA,eAA0B,GAAA;QACxB,IAAI,CAACrB,aAAa,GAAG,IAAA;QACrB,IAAI,CAACP,OAAO,EAAEwB,eAAAA,EAAAA;AAChB;AACF;AAEA;;;IAIO,MAAM2B,aAAsBtD,SAAAA,WAAAA,CAAAA;AACjC,0BACAuD,KAA0B;AAC1B,kCACAC,MAA6B;AAC7B,yDACAC,mBAAiC;AACjC,+CACAC,gBAA8B;AAC9B;;;MAIA,WAAA,CAAYzD,IAAY,CAAE;AACxB,QAAA,KAAK,CAACA,IAAAA,CAAAA;QACN,IAAI,CAACA,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACsD,KAAK,GAAG,IAAA;QACb,IAAI,CAACC,MAAM,GAAG,EAAE;QAChB,IAAI,CAACC,mBAAmB,GAAG,EAAE;QAC7B,IAAI,CAACC,gBAAgB,GAAG,EAAE;AAC5B;AACA;;;;AAIC,MACDC,QAASC,CAAAA,KAAyB,EAAEC,iBAA4B,EAAE;QAChED,KAAMT,CAAAA,gBAAgB,CAAC,IAAI,CAAA;AAC3B,QAAA,IAAI,CAACK,MAAM,CAACV,IAAI,CAACc,KAAAA,CAAAA;AACjB,QAAA,IAAI,CAACH,mBAAmB,CAACX,IAAI,CAACe,iBAAAA,CAAAA;AAC9B,QAAA,IAAI,CAACH,gBAAgB,CAACZ,IAAI,CAACc,MAAMpC,WAAW,CAAA;AAC9C;AACF;AAEA;;;IAIO,MAAMsC,UAAmB9D,SAAAA,WAAAA,CAAAA;AAC9B,mCACA+D,SAAgC;AAChC;;;MAIA,WAAA,CAAY9D,IAAY,CAAE;AACxB,QAAA,KAAK,CAACA,IAAAA,CAAAA;QACN,IAAI,CAAC8D,SAAS,GAAG,EAAE;AACrB;AACF;AAEA;;;IAIO,MAAMC,WAAoBC,SAAAA,UAAAA,CAAAA;qBAE/B,KAAsB;qBAEtB,UAAoC;qBAEpC,MAAqC;qBAErC,WAA0C;qBAE1C,OAA8B;qBAE9B,YAA6B;AAC7B;;;MAIA,WAAA,CAAYhE,IAAa,CAAE;QACzB,KAAK,EAAA;QACL,IAAI,CAACiE,KAAK,GAAGjE,IAAQ,IAAA,EAAA;QACrB,IAAI,CAACkE,UAAU,GAAG,EAAE;QACpB,IAAI,CAACC,MAAM,GAAG,EAAE;QAChB,IAAI,CAACC,OAAO,GAAG,EAAE;QACjB,IAAI,CAACC,WAAW,GAAG,EAAE;QACrB,IAAI,CAACC,YAAY,GAAG,EAAC;AACvB;6BAEA,IAAItE,IAAe,GAAA;QACjB,OAAO,IAAI,CAACiE,KAAK;AACnB;IACA,IAAIjE,IAAAA,CAAK6B,GAAW,EAAE;QACpB,IAAI,CAACoC,KAAK,GAAGpC,GAAAA;AACf;8CAEA,IAAI0C,MAAuB,GAAA;QACzB,OAAO,IAAI,CAACH,OAAO;AACrB;kDAEA,IAAII,UAAmC,GAAA;QACrC,OAAO,IAAI,CAACH,WAAW;AACzB;iDAEA,IAAII,SAA6B,GAAA;QAC/B,OAAO,IAAI,CAACP,UAAU;AACxB;6CAEA,IAAIQ,KAA8B,GAAA;QAChC,OAAO,IAAI,CAACP,MAAM;AACpB;yCAEA,IAAIQ,WAAsB,GAAA;QACxB,OAAO,IAAI,CAACL,YAAY;AAC1B;IACA,IAAIK,WAAAA,CAAY9C,GAAW,EAAE;QAC3B,IAAI,CAACyC,YAAY,GAAGzC,GAAAA;AACtB;AACA;;;;;;AAMC,MACD+C,QAAQ7D,MAA0B,EAAEgC,KAAa,EAAE/C,IAAY,EAAsB;QACnF,MAAM6E,SAAAA,GAAY,IAAI5E,kBAAAA,CAAmBD,IAAMe,EAAAA,MAAAA,CAAAA;AAC/C,QAAA,IAAI,CAACoD,MAAM,CAACpB,KAAAA,CAAM,GAAG8B,SAAAA;QACrB,OAAOA,SAAAA;AACT;AACA;;;MAIAC,WAAAA,CAAYhD,QAAuB,EAAE;AACnC,QAAA,IAAI,CAACoC,UAAU,CAACrB,IAAI,CAACf,QAAAA,CAAAA;AACvB;AACA;;;MAIAiD,YAAAA,CAAaC,SAA6B,EAAE;AAC1C,QAAA,IAAI,CAACX,WAAW,CAACxB,IAAI,CAACmC,SAAAA,CAAAA;AACxB;IACAC,eAAgBC,CAAAA,KAAY,EAAEC,UAAmB,EAAa;QAC5D,MAAMC,KAAAA,GAAQ,IAAIC,SAAUH,CAAAA,KAAAA,CAAAA;AAC5BE,QAAAA,KAAAA,CAAMpF,IAAI,GAAG,IAAI,CAACA,IAAI;QACtB,MAAMsF,YAAAA,GAAeF,MAAME,YAAY;QACvC,IAAK,IAAIC,CAAI,GAAA,CAAA,EAAGA,CAAI,GAAA,IAAI,CAAChB,MAAM,CAACiB,MAAM,EAAED,CAAK,EAAA,CAAA;AAC3C,YAAA,MAAME,UAAa,GAAA,IAAI,CAAClB,MAAM,CAACgB,CAAE,CAAA;AACjC,YAAA,MAAMG,kBAGF,IAAIC,GAAAA,EAAAA;AACR,YAAA,MAAMC,UAA8C,IAAID,GAAAA,EAAAA;YACxD,IAAK,IAAIE,IAAI,CAAGA,EAAAA,CAAAA,GAAIJ,WAAW3B,SAAS,CAAC0B,MAAM,EAAEK,CAAK,EAAA,CAAA;gBACpD,IAAI,CAACC,uBAAuB,CAC1BZ,KACAE,EAAAA,KAAAA,EACAK,UAAW3B,CAAAA,SAAS,CAAC+B,CAAAA,CAAE,EACvBH,eAAAA,EACAE,OACAT,EAAAA,UAAAA,CAAAA;AAEJ;AACA,YAAA,KAAK,MAAMY,aAAAA,IAAiB,IAAI,CAACvB,UAAU,CAAE;AAC3C,gBAAA,IAAIxE,OAAO+F,aAAc/F,CAAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC;gBACtD,IAAIsF,YAAAA,CAAaU,gBAAgB,CAAChG,IAAO,CAAA,EAAA;AACvC,oBAAA,MAAMiG,QAAWjG,GAAAA,IAAAA;oBACjB,IAAK,IAAIkG,CAAI,GAAA,CAAA,GAAKA,CAAK,EAAA,CAAA;AACrBlG,wBAAAA,IAAAA,GAAO,CAAGiG,EAAAA,QAAAA,CAAS,CAAC,EAAEC,CAAG,CAAA,CAAA;AACzB,wBAAA,IAAI,CAACZ,YAAAA,CAAaU,gBAAgB,CAAChG,IAAO,CAAA,EAAA;AACxC,4BAAA;AACF;AACF;AACF;AACA,gBAAA,MAAMgF,SAAYM,GAAAA,YAAAA,CAAaa,eAAe,CAACnG,IAAM,EAAA,IAAA,CAAA;AACrD,gBAAA,KAAK,MAAMoG,KAAAA,IAASL,aAAcM,CAAAA,MAAM,CAAE;oBACxC,IAAID,KAAAA,CAAME,IAAI,KAAK,aAAe,EAAA;AAChCtB,wBAAAA,SAAAA,CAAUuB,QAAQ,CAACX,OAAQY,CAAAA,GAAG,CAACJ,KAAAA,CAAMK,IAAI,CAAA,EAAG,IAAIC,oBAAAA,CAAqBN,KAAMO,CAAAA,YAAY,EAAE,IAAA,CAAA,CAAA;AAC3F,qBAAA,MAAO,IAAIP,KAAAA,CAAME,IAAI,KAAK,OAAS,EAAA;AACjCtB,wBAAAA,SAAAA,CAAUuB,QAAQ,CAACX,OAAQY,CAAAA,GAAG,CAACJ,KAAAA,CAAMK,IAAI,CAAA,EAAG,IAAIG,cAAAA,CAAeR,KAAMO,CAAAA,YAAY,EAAE,IAAA,CAAA,CAAA;AACrF,qBAAA,MAAO,IAAIP,KAAAA,CAAME,IAAI,KAAK,UAAY,EAAA;AACpCtB,wBAAAA,SAAAA,CAAUuB,QAAQ,CAACX,OAAQY,CAAAA,GAAG,CAACJ,KAAAA,CAAMK,IAAI,CAAA,EAAG,IAAII,iBAAAA,CAAkBT,KAAMO,CAAAA,YAAY,EAAE,IAAA,CAAA,CAAA;AACxF,qBAAA,MAAO,IAAIP,KAAAA,CAAME,IAAI,KAAK,SAAW,EAAA;wBACnC,KAAK,MAAMQ,KAAKV,KAAMK,CAAAA,IAAI,CAACjF,IAAI,CAACuF,SAAS,CAAE;AACzC,4BAAA,IAAIX,KAAMO,CAAAA,YAAY,CAACK,MAAM,GAAGC,iBAAmB,EAAA;AACjDC,gCAAAA,OAAAA,CAAQC,KAAK,CACX,CAAC,wBAAwB,EAAEf,KAAAA,CAAMO,YAAY,CAACK,MAAM,CAAC,iBAAiB,EAAEC,iBAAmB,CAAA,CAAA,CAAA;6BAExF,MAAA;AACL,gCAAA,MAAMG,aAAa,IAAIC,gBAAAA,CACrBjB,MAAMO,YAAY,EAClBP,MAAMkB,mBAAmB,EACzBR,CAAES,CAAAA,SAAS,EACXT,CAAEtF,CAAAA,IAAI,CAACgG,iBAAiB,EAAA,CAAGC,MAAM,EACjC,EAAA,IAAA,CAAA;AAEFzC,gCAAAA,SAAAA,CAAUuB,QAAQ,CAACO,CAAEtF,CAAAA,IAAI,EAAE4F,UAAAA,CAAAA;AAC7B;AACF;qBACK,MAAA;AACLF,wBAAAA,OAAAA,CAAQC,KAAK,CAAC,CAAC,8BAA8B,EAAEf,KAAAA,CAAME,IAAI,CAAE,CAAA,CAAA;AAC7D;AACF;AACA,gBAAA,KAAK,MAAMoB,EAAAA,IAAM3B,aAActB,CAAAA,SAAS,CAAE;oBACxC,MAAMC,KAAAA,GAAQgB,eAAgBc,CAAAA,GAAG,CAACkB,EAAAA,CAAAA;AAClC,oBAAA,IAAIhD,KAAO,EAAA;wBACT,IAAI,CAACA,KAAM5C,CAAAA,QAAQ,EAAE;AACnB4C,4BAAAA,KAAAA,CAAM5C,QAAQ,GAAG,IAAI6F,SACnBD,EAAGnE,CAAAA,MAAM,CAACqE,GAAG,CAAC,CAAC/F,GAAQ+D,GAAAA,OAAAA,CAAQY,GAAG,CAAC3E,GAAAA,CAAAA,CAAAA,EACnC6F,GAAGlE,mBAAmB,EACtBkE,GAAGjE,gBAAgB,CAAA;4BAErB,IAAK,IAAI8B,IAAI,CAAGA,EAAAA,CAAAA,GAAIb,MAAMlD,IAAI,CAACgE,MAAM,EAAED,CAAK,EAAA,CAAA;AAC1C,gCAAA,MAAM/D,IAAOkD,GAAAA,KAAAA,CAAMlD,IAAI,CAAC+D,CAAE,CAAA;AAC1B,gCAAA,MAAMsC,CAAI,GAAA;AACRC,oCAAAA,SAAAA,EAAWpD,KAAMqD,CAAAA,QAAQ,CAACxC,CAAAA,CAAE,CAACyC,YAAY;AACzCC,oCAAAA,YAAAA,EAAcvD,KAAMqD,CAAAA,QAAQ,CAACxC,CAAAA,CAAE,CAAC2C,eAAe;AAC/CtG,oCAAAA,OAAAA,EAAS8C,KAAMqD,CAAAA,QAAQ,CAACxC,CAAAA,CAAE,CAAC4C;AAC7B,iCAAA;AACA3G,gCAAAA,IAAAA,CAAK4G,sBAAsB,CAAC1D,KAAAA,CAAM5C,QAAQ,CAACuG,eAAe,CAACR,CAAAA,CAAAA,CAAAA;AAC3DrG,gCAAAA,IAAAA,CAAK8G,YAAY,GAAG5D,KAAM5C,CAAAA,QAAQ,CAACyG,YAAY;AACjD;AACAjD,4BAAAA,YAAAA,CAAab,SAAS,CAAC5B,IAAI,CAAC,IAAI2F,IAAAA,CAAK9D,MAAM5C,QAAQ,CAAA,CAAA;AACrD;AACAkD,wBAAAA,SAAAA,CAAUF,WAAW,CAACJ,KAAM5C,CAAAA,QAAQ,CAACyG,YAAY,CAAA;AACnD;AACF;AACF;AACF;QACAnD,KAAMqD,CAAAA,OAAO,CAAC,CAAC9F,KAAAA,GAAAA;AACb,YAAA,IAAIA,UAAUyC,KAAO,EAAA;AACnBzC,gBAAAA,KAAAA,CAAM+F,MAAM,GAAG,IAAA;AACjB;AACF,SAAA,CAAA;QACAtD,KAAMuD,CAAAA,WAAW,GAAG,IAAI;QACxB,OAAOvD,KAAAA;AACT;IACUwD,SAAY,GAAA;AACpB,QAAA,KAAK,CAACA,SAAAA,EAAAA;AACN,QAAA,MAAMlE,KAAQ,GAAA;AAAI,YAAA,GAAA,IAAI,CAACP;AAAO,SAAA;QAC9B,MAAOO,KAAAA,CAAMc,MAAM,GAAG,CAAG,CAAA;YACvB,MAAMiB,IAAAA,GAAO/B,MAAMmE,KAAK,EAAA;YACxBnE,KAAM7B,CAAAA,IAAI,CAAI4D,GAAAA,IAAAA,CAAKtE,QAAQ,CAAA;YAC3B,MAAMX,IAAAA,GAAOiF,KAAKjF,IAAI;AACtB,YAAA,IAAIA,IAAM,EAAA;AACR,gBAAA,KAAK,MAAMsH,OAAAA,IAAWtH,IAAKuF,CAAAA,SAAS,CAAE;AACpC+B,oBAAAA,OAAAA,CAAQC,SAAS,EAAEC,OAAAA,EAAAA;AACnBF,oBAAAA,OAAAA,CAAQG,QAAQ,EAAED,OAAAA,EAAAA;AACpB;AACF;AACF;QACA,IAAI,CAAC7E,MAAM,GAAG,EAAE;QAChB,IAAI,CAACD,UAAU,GAAG,EAAE;QACpB,IAAI,CAACE,OAAO,GAAG,EAAE;QACjB,IAAI,CAACC,WAAW,GAAG,EAAE;AACvB;IACQyB,uBACNZ,CAAAA,KAAY,EACZnE,MAAiB,EACjBmI,SAA6B,EAC7BxD,eAAmF,EACnFE,OAA2C,EAC3CT,UAAmB,EACnB;QACA,MAAMsB,IAAAA,GAAkB,IAAIpB,SAAUH,CAAAA,KAAAA,CAAAA;QACtCU,OAAQuD,CAAAA,GAAG,CAACD,SAAWzC,EAAAA,IAAAA,CAAAA;AACvBA,QAAAA,IAAAA,CAAKzG,IAAI,GAAGkJ,SAAUlJ,CAAAA,IAAI,IAAI,EAAA;AAC9ByG,QAAAA,IAAAA,CAAK1E,QAAQ,CAACoH,GAAG,CAACD,UAAUnH,QAAQ,CAAA;AACpC0E,QAAAA,IAAAA,CAAKzE,QAAQ,CAACmH,GAAG,CAACD,UAAUlH,QAAQ,CAAA;AACpCyE,QAAAA,IAAAA,CAAK2C,KAAK,CAACD,GAAG,CAACD,UAAUjH,OAAO,CAAA;QAChC,IAAIiH,SAAAA,CAAU1H,IAAI,EAAE;YAClB,MAAM6H,QAAAA,GAAWH,UAAU1H,IAAI;YAC/B,MAAMM,QAAAA,GAAWoH,UAAUpH,QAAQ;AACnC,YAAA,KAAK,MAAMgH,OAAAA,IAAWO,QAAStC,CAAAA,SAAS,CAAE;AACxC,gBAAA,KAAK,MAAMuC,QAAAA,IAAYJ,SAAUvH,CAAAA,SAAS,CAAE;oBAC1C,MAAM4H,QAAAA,GAAW,IAAIC,IAAKtE,CAAAA,KAAAA,CAAAA;oBAC1BqE,QAASxH,CAAAA,QAAQ,GAAGuH,QAAAA,CAASpD,CAAC;oBAC9BqD,QAASH,CAAAA,KAAK,GAAGE,QAAAA,CAASG,CAAC;oBAC3BF,QAASvH,CAAAA,QAAQ,GAAGsH,QAAAA,CAASI,CAAC;oBAC9BH,QAASvJ,CAAAA,IAAI,GAAG8I,OAAAA,CAAQ9I,IAAI;AAC5BuJ,oBAAAA,QAAAA,CAASI,eAAe,GAAG,IAAA;AAC3BJ,oBAAAA,QAAAA,CAASK,SAAS,GAAG,SAAA;oBACrBL,QAASM,CAAAA,aAAa,GAAG,CAAC,CAAC/H,QAAAA;AAC3ByH,oBAAAA,QAAAA,CAASO,cAAc,GAAGhB,OAAQiB,CAAAA,UAAU,GAAG,CAAA;AAC/CR,oBAAAA,QAAAA,CAASR,SAAS,GAAGD,OAAQC,CAAAA,SAAS,CAACvC,GAAG,EAAA;oBAC1C+C,QAASN,CAAAA,QAAQ,GACf9D,UAAc,IAAA,CAACoE,SAASM,aAAa,IAAI,CAACN,QAAAA,CAASO,cAAc,GAC7DhB,QAAQG,QAAQ,CAACzC,GAAG,EAAA,CAAGwD,cAAc,EAAA,GACrClB,QAAQG,QAAQ,CAACzC,GAAG,EAAA,CAAGyD,KAAK,EAAA;AAClCV,oBAAAA,QAAAA,CAASxI,MAAM,GAAG0F,IAAAA;AAClBqC,oBAAAA,OAAAA,CAAQtH,IAAI,GAAG+H,QAAAA;oBACfW,gBAAiBpB,CAAAA,OAAAA,EAASO,SAASc,YAAY,CAAA;AAC/C,oBAAA,IAAIrI,QAAU,EAAA;AACZ,wBAAA,IAAI,CAAC4D,eAAAA,CAAgB0E,GAAG,CAACtI,QAAW,CAAA,EAAA;4BAClC4D,eAAgByD,CAAAA,GAAG,CAACrH,QAAU,EAAA;gCAAEN,IAAM,EAAA;AAAC+H,oCAAAA;AAAS,iCAAA;gCAAExB,QAAU,EAAA;AAACe,oCAAAA;AAAQ;AAAC,6BAAA,CAAA;yBACjE,MAAA;AACLpD,4BAAAA,eAAAA,CAAgBc,GAAG,CAAC1E,QAAAA,CAAAA,CAAUN,IAAI,CAACqB,IAAI,CAAC0G,QAAAA,CAAAA;AACxC7D,4BAAAA,eAAAA,CAAgBc,GAAG,CAAC1E,QAAAA,CAAAA,CAAUiG,QAAQ,CAAClF,IAAI,CAACiG,OAAAA,CAAAA;AAC9C;AACF;AACF;AACF;AACF;AACArC,QAAAA,IAAAA,CAAK1F,MAAM,GAAGA,MAAAA;AACd,QAAA,KAAK,MAAM4B,KAAAA,IAASuG,SAAU/G,CAAAA,QAAQ,CAAE;AACtC,YAAA,IAAI,CAAC2D,uBAAuB,CAACZ,OAAOuB,IAAM9D,EAAAA,KAAAA,EAAO+C,iBAAiBE,OAAST,EAAAA,UAAAA,CAAAA;AAC7E;AACF;AACF;;;;"}
@@ -1,6 +1,5 @@
1
1
  import { Blitter } from './blitter.js';
2
2
  import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
3
- import '../app.js';
4
3
  import { Vector2 } from '@zephyr3d/base';
5
4
  import { fetchSampler } from '../utility/misc.js';
6
5
 
@@ -1 +1 @@
1
- {"version":3,"file":"bilateralblur.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"bilateralblur.js","sources":["../../src/blitter/bilateralblur.ts"],"sourcesContent":["import type {\r\n BindGroup,\r\n PBShaderExp,\r\n PBInsideFunctionScope,\r\n PBGlobalScope,\r\n Texture2D,\r\n TextureSampler,\r\n BaseTexture\r\n} from '@zephyr3d/device';\r\nimport type { BlitType } from './blitter';\r\nimport { Blitter } from './blitter';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { Vector2 } from '@zephyr3d/base';\r\nimport { fetchSampler } from '../utility/misc';\r\n\r\n/**\r\n * Bilateral blur blitter\r\n * @public\r\n */\r\nexport class BilateralBlurBlitter extends Blitter {\r\n protected _depthTex: Texture2D;\r\n protected _sampler: TextureSampler;\r\n protected _blurSizeTex: Texture2D;\r\n protected _blurSizeScale: number;\r\n protected _blurSizeIndex: number;\r\n protected _kernelRadius: number;\r\n protected _cameraNearFar: Vector2;\r\n protected _depthCutoff: number;\r\n protected _stepSize: number;\r\n protected _uvStep: Vector2;\r\n protected _size: Vector2;\r\n protected _stdDev: number;\r\n protected _offsetsAndWeights: Float32Array<ArrayBuffer>;\r\n protected _finalPhase: boolean;\r\n constructor(finalPhase: boolean) {\r\n super();\r\n this._depthTex = null;\r\n this._depthCutoff = 2;\r\n this._blurSizeTex = null;\r\n this._blurSizeScale = 1;\r\n this._blurSizeIndex = 0;\r\n this._sampler = null;\r\n this._blurSizeTex = null;\r\n this._kernelRadius = 8;\r\n this._cameraNearFar = Vector2.zero();\r\n this._size = Vector2.zero();\r\n this._stdDev = 2;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this._finalPhase = !!finalPhase;\r\n this._stepSize = 1;\r\n this._uvStep = this._finalPhase ? new Vector2(1, 0) : new Vector2(0, 1);\r\n this.calcGaussion();\r\n }\r\n get depthTex(): Texture2D {\r\n return this._depthTex;\r\n }\r\n set depthTex(tex: Texture2D) {\r\n this._depthTex = tex;\r\n }\r\n get blurSizeTex(): Texture2D {\r\n return this._blurSizeTex;\r\n }\r\n set blurSizeTex(tex: Texture2D) {\r\n this._blurSizeTex = tex;\r\n }\r\n get blurSizeIndex(): number {\r\n return this._blurSizeIndex;\r\n }\r\n set blurSizeIndex(val: number) {\r\n this._blurSizeIndex = val;\r\n }\r\n get blurSizeScale(): number {\r\n return this._blurSizeScale;\r\n }\r\n set blurSizeScale(val: number) {\r\n this._blurSizeScale = val;\r\n }\r\n get sampler(): TextureSampler {\r\n return this._sampler;\r\n }\r\n set sampler(sampler: TextureSampler) {\r\n this._sampler = sampler;\r\n }\r\n get cameraNearFar(): Vector2 {\r\n return this._cameraNearFar;\r\n }\r\n set cameraNearFar(v: Vector2) {\r\n this._cameraNearFar.set(v);\r\n }\r\n get depthCutoff(): number {\r\n return this._depthCutoff;\r\n }\r\n set depthCutoff(val: number) {\r\n this._depthCutoff = val;\r\n }\r\n get size(): Vector2 {\r\n return this._size;\r\n }\r\n set size(val: Vector2) {\r\n this._size.set(val);\r\n }\r\n get stepSize(): number {\r\n return this._stepSize;\r\n }\r\n set stepSize(val: number) {\r\n if (val !== this._stepSize) {\r\n this._stepSize = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get stdDev(): number {\r\n return this._stdDev;\r\n }\r\n set stdDev(val: number) {\r\n if (val !== this._stdDev) {\r\n this._stdDev = val;\r\n this.calcGaussion();\r\n }\r\n }\r\n get kernelRadius(): number {\r\n return this._kernelRadius;\r\n }\r\n set kernelRadius(val: number) {\r\n val = Math.max(val, 0) >> 0;\r\n if (val !== this._kernelRadius) {\r\n this._kernelRadius = val;\r\n this._offsetsAndWeights = new Float32Array(4 * (this._kernelRadius + 1));\r\n this.calcGaussion();\r\n this.invalidateHash();\r\n }\r\n }\r\n protected calcHash(): string {\r\n return `${Number(!!this._blurSizeTex)}:${this._blurSizeIndex}:${this._kernelRadius}:${this._finalPhase}`;\r\n }\r\n private calcGaussion() {\r\n const kernel: number[] = [];\r\n const size = this.kernelRadius * 2 + 1;\r\n let sum = 0;\r\n for (let x = 0; x < size; x++) {\r\n const value =\r\n (1 / (Math.sqrt(2 * Math.PI) * this._stdDev)) *\r\n Math.exp(-((x - this.kernelRadius) ** 2) / (2 * this._stdDev ** 2));\r\n kernel.push(value);\r\n sum += value;\r\n }\r\n for (let i = 0; i <= this.kernelRadius; i++) {\r\n this._offsetsAndWeights[i * 4] = this._uvStep.x * i;\r\n this._offsetsAndWeights[i * 4 + 1] = this._uvStep.y * i;\r\n this._offsetsAndWeights[i * 4 + 2] = kernel[this.kernelRadius - i] / sum;\r\n this._offsetsAndWeights[i * 4 + 3] = this._stepSize;\r\n }\r\n }\r\n setup(scope: PBGlobalScope, type: BlitType) {\r\n super.setup(scope, type);\r\n const pb = scope.$builder;\r\n if (pb.shaderKind === 'fragment') {\r\n scope.depthTex = pb.tex2D().uniform(0);\r\n if (this._blurSizeTex) {\r\n scope.blurSizeTex = pb.tex2D().uniform(0);\r\n scope.blurSizeScale = pb.float().uniform(0);\r\n }\r\n scope.depthCutoff = pb.float().uniform(0);\r\n scope.offsetsAndWeights = pb.vec4[this._kernelRadius + 1]().uniform(0);\r\n scope.cameraNearFar = pb.vec2().uniform(0);\r\n scope.size = pb.vec2().uniform(0);\r\n }\r\n }\r\n setUniforms(bindGroup: BindGroup, sourceTex: BaseTexture) {\r\n super.setUniforms(bindGroup, sourceTex);\r\n bindGroup.setTexture('depthTex', this._depthTex, this._sampler ?? fetchSampler('clamp_nearest_nomip'));\r\n if (this._blurSizeTex) {\r\n bindGroup.setTexture('blurSizeTex', this._blurSizeTex, fetchSampler('clamp_linear_nomip'));\r\n bindGroup.setValue('blurSizeScale', this._blurSizeScale);\r\n }\r\n bindGroup.setValue('depthCutoff', this._depthCutoff);\r\n bindGroup.setValue('offsetsAndWeights', this._offsetsAndWeights);\r\n bindGroup.setValue('cameraNearFar', this._cameraNearFar);\r\n bindGroup.setValue('size', this._size);\r\n }\r\n filter(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n const that = this;\r\n const pb = scope.$builder;\r\n pb.func('getLinearDepth', [pb.vec2('uv')], function () {\r\n this.$l.depthValue = pb.textureSample(this.depthTex, this.uv);\r\n this.$l.depth01 =\r\n pb.getDevice().type === 'webgl'\r\n ? decodeNormalizedFloatFromRGBA(this, this.depthValue)\r\n : this.depthValue.r;\r\n this.$return(pb.mul(this.depth01, this.cameraNearFar.y));\r\n });\r\n pb.func('getLogDepth', [pb.float('linearDepth')], function () {\r\n this.$return(pb.log(pb.add(this.linearDepth, 1)));\r\n });\r\n scope.centerDepth = scope.getLogDepth(scope.getLinearDepth(srcUV));\r\n scope.depthDiff = pb.div(\r\n scope.depthCutoff,\r\n pb.sub(scope.getLogDepth(scope.cameraNearFar.y), scope.getLogDepth(scope.cameraNearFar.x))\r\n );\r\n scope.weightSum = scope.offsetsAndWeights[0].z;\r\n scope.srcTexel = that.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n scope.colorSum = pb.mul(scope.srcTexel, scope.weightSum);\r\n if (that._blurSizeTex) {\r\n scope.blurSize = pb.textureSample(scope.blurSizeTex, srcUV)['rgba'[this._blurSizeIndex]];\r\n }\r\n scope.$for(pb.int('i'), 0, that._kernelRadius, function () {\r\n this.$l.offsetAndWeight = this.offsetsAndWeights.at(pb.add(this.i, 1));\r\n this.$l.weight = this.offsetAndWeight.z;\r\n this.$l.offset = this.offsetAndWeight.xy;\r\n if (that._blurSizeTex) {\r\n this.offset = pb.mul(this.offset, this.blurSize, this.blurSizeScale);\r\n }\r\n this.$l.offset = pb.div(this.offset, this.size);\r\n this.$l.uvRight = pb.add(srcUV, this.offset);\r\n this.$l.depthRight = this.getLogDepth(this.getLinearDepth(this.uvRight));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthRight, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelRight = that.readTexel(this, type, srcTex, this.uvRight, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelRight.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelRight, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n this.$l.uvLeft = pb.sub(srcUV, this.offset);\r\n this.$l.depthLeft = this.getLogDepth(this.getLinearDepth(this.uvLeft));\r\n this.$if(pb.lessThan(pb.abs(pb.sub(this.depthLeft, this.centerDepth)), this.depthDiff), function () {\r\n this.$l.srcTexelLeft = that.readTexel(this, type, srcTex, this.uvLeft, srcLayer, sampleType);\r\n this.$l.colorWeight = pb.mul(\r\n this.weight,\r\n pb.exp(pb.neg(pb.distance(this.srcTexelLeft.rgb, this.srcTexel.rgb)))\r\n );\r\n this.colorSum = pb.add(this.colorSum, pb.mul(this.srcTexelLeft, this.colorWeight));\r\n this.weightSum = pb.add(this.weightSum, this.colorWeight);\r\n });\r\n });\r\n scope.colorSum = pb.div(scope.colorSum, scope.weightSum);\r\n return scope.colorSum;\r\n }\r\n}\r\n"],"names":["BilateralBlurBlitter","Blitter","_depthTex","_sampler","_blurSizeTex","_blurSizeScale","_blurSizeIndex","_kernelRadius","_cameraNearFar","_depthCutoff","_stepSize","_uvStep","_size","_stdDev","_offsetsAndWeights","_finalPhase","finalPhase","Vector2","zero","Float32Array","calcGaussion","depthTex","tex","blurSizeTex","blurSizeIndex","val","blurSizeScale","sampler","cameraNearFar","v","set","depthCutoff","size","stepSize","stdDev","kernelRadius","Math","max","invalidateHash","calcHash","Number","kernel","sum","x","value","sqrt","PI","exp","push","i","y","setup","scope","type","pb","$builder","shaderKind","tex2D","uniform","float","offsetsAndWeights","vec4","vec2","setUniforms","bindGroup","sourceTex","setTexture","fetchSampler","setValue","filter","srcTex","srcUV","srcLayer","sampleType","that","func","$l","depthValue","textureSample","uv","depth01","getDevice","decodeNormalizedFloatFromRGBA","r","$return","mul","log","add","linearDepth","centerDepth","getLogDepth","getLinearDepth","depthDiff","div","sub","weightSum","z","srcTexel","readTexel","colorSum","blurSize","$for","int","offsetAndWeight","at","weight","offset","xy","uvRight","depthRight","$if","lessThan","abs","srcTexelRight","colorWeight","neg","distance","rgb","uvLeft","depthLeft","srcTexelLeft"],"mappings":"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"}