@zephyr3d/scene 0.9.27 → 0.10.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 (502) hide show
  1. package/README.md +60 -27
  2. package/dist/animation/animation_bank.js +634 -0
  3. package/dist/animation/animation_bank.js.map +1 -0
  4. package/dist/animation/animation_bank_gpu.js +256 -0
  5. package/dist/animation/animation_bank_gpu.js.map +1 -0
  6. package/dist/animation/animationset.js +54 -0
  7. package/dist/animation/animationset.js.map +1 -1
  8. package/dist/animation/cloth/gpu_cloth_component.js +406 -0
  9. package/dist/animation/cloth/gpu_cloth_component.js.map +1 -0
  10. package/dist/animation/cloth/gpu_cloth_system.js +332 -202
  11. package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
  12. package/dist/animation/gpu_animation_driver.js +289 -0
  13. package/dist/animation/gpu_animation_driver.js.map +1 -0
  14. package/dist/animation/joint_dynamics/collision.js +112 -1
  15. package/dist/animation/joint_dynamics/collision.js.map +1 -1
  16. package/dist/animation/joint_dynamics/controller.js +6 -0
  17. package/dist/animation/joint_dynamics/controller.js.map +1 -1
  18. package/dist/animation/joint_dynamics/joint_dynamics_system.js +11 -0
  19. package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
  20. package/dist/animation/joint_dynamics/solver.js +50 -12
  21. package/dist/animation/joint_dynamics/solver.js.map +1 -1
  22. package/dist/animation/joint_dynamics/types.js.map +1 -1
  23. package/dist/animation/skeleton.js +279 -55
  24. package/dist/animation/skeleton.js.map +1 -1
  25. package/dist/animation/skin_palette_atlas.js +252 -0
  26. package/dist/animation/skin_palette_atlas.js.map +1 -0
  27. package/dist/animation/spring/multi_chain_spring_system.js +298 -38
  28. package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
  29. package/dist/animation/spring/spring_chain.js +2 -0
  30. package/dist/animation/spring/spring_chain.js.map +1 -1
  31. package/dist/animation/spring/spring_collider.js +159 -21
  32. package/dist/animation/spring/spring_collider.js.map +1 -1
  33. package/dist/animation/spring/spring_particle.js +1 -0
  34. package/dist/animation/spring/spring_particle.js.map +1 -1
  35. package/dist/animation/spring/spring_solver.js +173 -0
  36. package/dist/animation/spring/spring_solver.js.map +1 -0
  37. package/dist/animation/spring/spring_system.js +249 -24
  38. package/dist/animation/spring/spring_system.js.map +1 -1
  39. package/dist/animation/spring_modifier.js +32 -1
  40. package/dist/animation/spring_modifier.js.map +1 -1
  41. package/dist/app/app.js +26 -0
  42. package/dist/app/app.js.map +1 -1
  43. package/dist/app/engine.js +86 -15
  44. package/dist/app/engine.js.map +1 -1
  45. package/dist/app/gamepad.js +191 -0
  46. package/dist/app/gamepad.js.map +1 -0
  47. package/dist/app/inputactions.js +271 -0
  48. package/dist/app/inputactions.js.map +1 -0
  49. package/dist/app/inputmgr.js +331 -22
  50. package/dist/app/inputmgr.js.map +1 -1
  51. package/dist/app/loading.js +138 -0
  52. package/dist/app/loading.js.map +1 -0
  53. package/dist/app/pipelinecache.js +209 -0
  54. package/dist/app/pipelinecache.js.map +1 -0
  55. package/dist/app/runtimescript.js +25 -0
  56. package/dist/app/runtimescript.js.map +1 -1
  57. package/dist/app/scriptingsystem.js +54 -0
  58. package/dist/app/scriptingsystem.js.map +1 -1
  59. package/dist/app/scriptregistry.js +7 -2
  60. package/dist/app/scriptregistry.js.map +1 -1
  61. package/dist/asset/asset_manifest.js +59 -0
  62. package/dist/asset/asset_manifest.js.map +1 -0
  63. package/dist/asset/asset_preload.js +258 -0
  64. package/dist/asset/asset_preload.js.map +1 -0
  65. package/dist/asset/assetmanager.js +117 -65
  66. package/dist/asset/assetmanager.js.map +1 -1
  67. package/dist/asset/loaders/ktx2/basis/LICENSE +201 -0
  68. package/dist/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  69. package/dist/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  70. package/dist/asset/loaders/ktx2/basis_location.js +17 -0
  71. package/dist/asset/loaders/ktx2/basis_location.js.map +1 -0
  72. package/dist/asset/loaders/ktx2/ktx2_loader.js +88 -0
  73. package/dist/asset/loaders/ktx2/ktx2_loader.js.map +1 -0
  74. package/dist/asset/loaders/ktx2/ktx2_targets.js +118 -0
  75. package/dist/asset/loaders/ktx2/ktx2_targets.js.map +1 -0
  76. package/dist/asset/loaders/ktx2/transcoder_pool.js +259 -0
  77. package/dist/asset/loaders/ktx2/transcoder_pool.js.map +1 -0
  78. package/dist/asset/mesh_lod_builder.js +104 -0
  79. package/dist/asset/mesh_lod_builder.js.map +1 -0
  80. package/dist/asset/mesh_settings.js +111 -0
  81. package/dist/asset/mesh_settings.js.map +1 -0
  82. package/dist/asset/meshopt_decoder.js +18 -0
  83. package/dist/asset/meshopt_decoder.js.map +1 -0
  84. package/dist/asset/meshopt_simplifier.js +26 -0
  85. package/dist/asset/meshopt_simplifier.js.map +1 -0
  86. package/dist/asset/model.js +171 -1
  87. package/dist/asset/model.js.map +1 -1
  88. package/dist/asset/texture_settings.js +231 -0
  89. package/dist/asset/texture_settings.js.map +1 -0
  90. package/dist/asset/zmsh_binary.js +131 -0
  91. package/dist/asset/zmsh_binary.js.map +1 -0
  92. package/dist/asset/zsdf_binary.js +111 -0
  93. package/dist/asset/zsdf_binary.js.map +1 -0
  94. package/dist/blitter/bilateralblur.js +1 -2
  95. package/dist/blitter/bilateralblur.js.map +1 -1
  96. package/dist/blitter/gaussianblur.js +1 -6
  97. package/dist/blitter/gaussianblur.js.map +1 -1
  98. package/dist/camera/base.js +31 -10
  99. package/dist/camera/base.js.map +1 -1
  100. package/dist/camera/camera.js +104 -178
  101. package/dist/camera/camera.js.map +1 -1
  102. package/dist/camera/follow.js +342 -0
  103. package/dist/camera/follow.js.map +1 -0
  104. package/dist/camera/fps.js +9 -7
  105. package/dist/camera/fps.js.map +1 -1
  106. package/dist/camera/orbit.js +46 -19
  107. package/dist/camera/orbit.js.map +1 -1
  108. package/dist/index.d.ts +25436 -15990
  109. package/dist/index.js +65 -11
  110. package/dist/index.js.map +1 -1
  111. package/dist/material/blinn.js +3 -0
  112. package/dist/material/blinn.js.map +1 -1
  113. package/dist/material/eye.js +1 -1
  114. package/dist/material/eye.js.map +1 -1
  115. package/dist/material/hair.js +2 -3
  116. package/dist/material/hair.js.map +1 -1
  117. package/dist/material/lambert.js +4 -1
  118. package/dist/material/lambert.js.map +1 -1
  119. package/dist/material/material.js +66 -4
  120. package/dist/material/material.js.map +1 -1
  121. package/dist/material/meshmaterial.js +118 -45
  122. package/dist/material/meshmaterial.js.map +1 -1
  123. package/dist/material/mixins/lightmodel/blinnphong.js +1 -1
  124. package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
  125. package/dist/material/mixins/lightmodel/lambert.js +1 -1
  126. package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
  127. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +34 -61
  128. package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
  129. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +16 -2
  130. package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
  131. package/dist/material/mixins/lightmodel/pbrspecularglossness.js +2 -1
  132. package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
  133. package/dist/material/mixins/lit.js +191 -83
  134. package/dist/material/mixins/lit.js.map +1 -1
  135. package/dist/material/mixins/pbr/common.js +31 -206
  136. package/dist/material/mixins/pbr/common.js.map +1 -1
  137. package/dist/material/mtoon.js +1 -1
  138. package/dist/material/mtoon.js.map +1 -1
  139. package/dist/material/pbrmr.js +3 -0
  140. package/dist/material/pbrmr.js.map +1 -1
  141. package/dist/material/pbrsg.js +3 -0
  142. package/dist/material/pbrsg.js.map +1 -1
  143. package/dist/material/sdf_debug.js +78 -0
  144. package/dist/material/sdf_debug.js.map +1 -0
  145. package/dist/material/shader/helper.js +333 -191
  146. package/dist/material/shader/helper.js.map +1 -1
  147. package/dist/material/shader/terrain_blend.js +204 -43
  148. package/dist/material/shader/terrain_blend.js.map +1 -1
  149. package/dist/material/skin.js +331 -297
  150. package/dist/material/skin.js.map +1 -1
  151. package/dist/material/skinprofile.js +1058 -0
  152. package/dist/material/skinprofile.js.map +1 -0
  153. package/dist/material/sss.js +353 -0
  154. package/dist/material/sss.js.map +1 -0
  155. package/dist/material/sss_kernel.js +265 -0
  156. package/dist/material/sss_kernel.js.map +1 -0
  157. package/dist/material/sssprofile.js +879 -0
  158. package/dist/material/sssprofile.js.map +1 -0
  159. package/dist/material/subsurfaceprofile.js +4 -8
  160. package/dist/material/subsurfaceprofile.js.map +1 -1
  161. package/dist/material/terrain-cm.js +464 -188
  162. package/dist/material/terrain-cm.js.map +1 -1
  163. package/dist/material/unlit.js +3 -0
  164. package/dist/material/unlit.js.map +1 -1
  165. package/dist/material/water.js +1261 -1438
  166. package/dist/material/water.js.map +1 -1
  167. package/dist/node_modules/meshoptimizer/LICENSE +21 -0
  168. package/dist/node_modules/meshoptimizer/meshopt_decoder.js +197 -0
  169. package/dist/node_modules/meshoptimizer/meshopt_decoder.js.map +1 -0
  170. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js +677 -0
  171. package/dist/node_modules/meshoptimizer/meshopt_simplifier.js.map +1 -0
  172. package/dist/physics/character.js +226 -0
  173. package/dist/physics/character.js.map +1 -0
  174. package/dist/physics/collider.js +209 -0
  175. package/dist/physics/collider.js.map +1 -0
  176. package/dist/physics/events.js +79 -0
  177. package/dist/physics/events.js.map +1 -0
  178. package/dist/physics/joint.js +272 -0
  179. package/dist/physics/joint.js.map +1 -0
  180. package/dist/physics/node_physics.js +234 -0
  181. package/dist/physics/node_physics.js.map +1 -0
  182. package/dist/physics/part.js +91 -0
  183. package/dist/physics/part.js.map +1 -0
  184. package/dist/physics/rigid_body.js +379 -0
  185. package/dist/physics/rigid_body.js.map +1 -0
  186. package/dist/physics/vehicle.js +335 -0
  187. package/dist/physics/vehicle.js.map +1 -0
  188. package/dist/physics/world.js +25 -0
  189. package/dist/physics/world.js.map +1 -0
  190. package/dist/posteffect/bloom.js +49 -14
  191. package/dist/posteffect/bloom.js.map +1 -1
  192. package/dist/posteffect/motionblur.js +106 -106
  193. package/dist/posteffect/motionblur.js.map +1 -1
  194. package/dist/posteffect/postsss.js +572 -0
  195. package/dist/posteffect/postsss.js.map +1 -0
  196. package/dist/posteffect/sao.js +2 -6
  197. package/dist/posteffect/sao.js.map +1 -1
  198. package/dist/posteffect/skinsss.js +605 -355
  199. package/dist/posteffect/skinsss.js.map +1 -1
  200. package/dist/posteffect/ssgi.js +91 -162
  201. package/dist/posteffect/ssgi.js.map +1 -1
  202. package/dist/posteffect/ssr.js +3 -11
  203. package/dist/posteffect/ssr.js.map +1 -1
  204. package/dist/posteffect/sss.js +4 -13
  205. package/dist/posteffect/sss.js.map +1 -1
  206. package/dist/posteffect/taa.js +1 -0
  207. package/dist/posteffect/taa.js.map +1 -1
  208. package/dist/render/abuffer_oit.js +3 -2
  209. package/dist/render/abuffer_oit.js.map +1 -1
  210. package/dist/render/clipmap.js +179 -64
  211. package/dist/render/clipmap.js.map +1 -1
  212. package/dist/render/cluster_light.js +958 -224
  213. package/dist/render/cluster_light.js.map +1 -1
  214. package/dist/render/cull_visitor.js +25 -5
  215. package/dist/render/cull_visitor.js.map +1 -1
  216. package/dist/render/debug_views.js +37 -0
  217. package/dist/render/debug_views.js.map +1 -0
  218. package/dist/render/depthpass.js +5 -1
  219. package/dist/render/depthpass.js.map +1 -1
  220. package/dist/render/drawable_mixin.js +53 -6
  221. package/dist/render/drawable_mixin.js.map +1 -1
  222. package/dist/render/dualdepthpeeling_oit.js +5 -5
  223. package/dist/render/dualdepthpeeling_oit.js.map +1 -1
  224. package/dist/render/envlight.js +196 -113
  225. package/dist/render/envlight.js.map +1 -1
  226. package/dist/render/fbm_wavegenerator.js +5 -10
  227. package/dist/render/fbm_wavegenerator.js.map +1 -1
  228. package/dist/render/fft_wavegenerator.js +247 -157
  229. package/dist/render/fft_wavegenerator.js.map +1 -1
  230. package/dist/render/gerstner_wavegenerator.js +16 -38
  231. package/dist/render/gerstner_wavegenerator.js.map +1 -1
  232. package/dist/render/gi/probe_volume.js +1334 -0
  233. package/dist/render/gi/probe_volume.js.map +1 -0
  234. package/dist/render/gi/scene_gi.js +282 -0
  235. package/dist/render/gi/scene_gi.js.map +1 -0
  236. package/dist/render/gi/voxel_atlas.js +198 -0
  237. package/dist/render/gi/voxel_atlas.js.map +1 -0
  238. package/dist/render/gi/voxel_lighting.js +652 -0
  239. package/dist/render/gi/voxel_lighting.js.map +1 -0
  240. package/dist/render/gi/voxel_scene.js +642 -0
  241. package/dist/render/gi/voxel_scene.js.map +1 -0
  242. package/dist/render/gi/voxelize_pass.js +223 -0
  243. package/dist/render/gi/voxelize_pass.js.map +1 -0
  244. package/dist/render/globalbindgroup_allocator.js +3 -2
  245. package/dist/render/globalbindgroup_allocator.js.map +1 -1
  246. package/dist/render/gpu_picking.js +9 -36
  247. package/dist/render/gpu_picking.js.map +1 -1
  248. package/dist/render/instance_culling.js +499 -0
  249. package/dist/render/instance_culling.js.map +1 -0
  250. package/dist/render/lightpass.js +19 -8
  251. package/dist/render/lightpass.js.map +1 -1
  252. package/dist/render/lod.js +46 -0
  253. package/dist/render/lod.js.map +1 -0
  254. package/dist/render/primitive.js +301 -9
  255. package/dist/render/primitive.js.map +1 -1
  256. package/dist/render/primitive_readback.js +209 -0
  257. package/dist/render/primitive_readback.js.map +1 -0
  258. package/dist/render/render_queue.js +162 -11
  259. package/dist/render/render_queue.js.map +1 -1
  260. package/dist/render/renderer.js +10 -7
  261. package/dist/render/renderer.js.map +1 -1
  262. package/dist/render/rendergraph/blackboard.js +14 -1
  263. package/dist/render/rendergraph/blackboard.js.map +1 -1
  264. package/dist/render/rendergraph/executor.js +136 -0
  265. package/dist/render/rendergraph/executor.js.map +1 -1
  266. package/dist/render/rendergraph/forward_plus_builder.js +272 -55
  267. package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
  268. package/dist/render/rendergraph/frame_graph_context.js +41 -0
  269. package/dist/render/rendergraph/frame_graph_context.js.map +1 -0
  270. package/dist/render/rendergraph/scene_render_context.js +31 -2
  271. package/dist/render/rendergraph/scene_render_context.js.map +1 -1
  272. package/dist/render/rendergraph/types.js.map +1 -1
  273. package/dist/render/renderpass.js +28 -5
  274. package/dist/render/renderpass.js.map +1 -1
  275. package/dist/render/sdf/box_allocator.js +98 -0
  276. package/dist/render/sdf/box_allocator.js.map +1 -0
  277. package/dist/render/sdf/global_sdf.js +865 -0
  278. package/dist/render/sdf/global_sdf.js.map +1 -0
  279. package/dist/render/sdf/scene_sdf.js +562 -0
  280. package/dist/render/sdf/scene_sdf.js.map +1 -0
  281. package/dist/render/sdf/sdf_atlas.js +227 -0
  282. package/dist/render/sdf/sdf_atlas.js.map +1 -0
  283. package/dist/render/sdf/sdf_programs.js +42 -0
  284. package/dist/render/sdf/sdf_programs.js.map +1 -0
  285. package/dist/render/sdf/sdf_view.js +199 -0
  286. package/dist/render/sdf/sdf_view.js.map +1 -0
  287. package/dist/render/sdf/waterline.js +610 -0
  288. package/dist/render/sdf/waterline.js.map +1 -0
  289. package/dist/render/shadow_mask_pass.js +142 -25
  290. package/dist/render/shadow_mask_pass.js.map +1 -1
  291. package/dist/render/shore_wave_generator.js +1193 -0
  292. package/dist/render/shore_wave_generator.js.map +1 -0
  293. package/dist/render/sky.js +516 -86
  294. package/dist/render/sky.js.map +1 -1
  295. package/dist/render/transmission_thickness_pass.js +477 -0
  296. package/dist/render/transmission_thickness_pass.js.map +1 -0
  297. package/dist/render/underwater.js +58 -158
  298. package/dist/render/underwater.js.map +1 -1
  299. package/dist/render/virtualtexture/virtual_texture.js +1214 -0
  300. package/dist/render/virtualtexture/virtual_texture.js.map +1 -0
  301. package/dist/render/volumetric_cloud/cloud_common.js +472 -0
  302. package/dist/render/volumetric_cloud/cloud_common.js.map +1 -0
  303. package/dist/render/volumetric_cloud/cloud_noise.js +189 -0
  304. package/dist/render/volumetric_cloud/cloud_noise.js.map +1 -0
  305. package/dist/render/volumetric_cloud/debug_view.js +131 -0
  306. package/dist/render/volumetric_cloud/debug_view.js.map +1 -0
  307. package/dist/render/volumetric_cloud/resources.js +380 -0
  308. package/dist/render/volumetric_cloud/resources.js.map +1 -0
  309. package/dist/render/volumetric_cloud/sky_cache.js +380 -0
  310. package/dist/render/volumetric_cloud/sky_cache.js.map +1 -0
  311. package/dist/render/volumetric_cloud/volumetric_cloud.js +318 -0
  312. package/dist/render/volumetric_cloud/volumetric_cloud.js.map +1 -0
  313. package/dist/render/water_caustics.js +134 -319
  314. package/dist/render/water_caustics.js.map +1 -1
  315. package/dist/render/water_foam.js +627 -0
  316. package/dist/render/water_foam.js.map +1 -0
  317. package/dist/render/water_interaction.js +1795 -0
  318. package/dist/render/water_interaction.js.map +1 -0
  319. package/dist/render/weightedblended_oit.js +3 -3
  320. package/dist/render/weightedblended_oit.js.map +1 -1
  321. package/dist/scene/basesprite.js +9 -4
  322. package/dist/scene/basesprite.js.map +1 -1
  323. package/dist/scene/batchgroup.js +108 -12
  324. package/dist/scene/batchgroup.js.map +1 -1
  325. package/dist/scene/environment.js +28 -7
  326. package/dist/scene/environment.js.map +1 -1
  327. package/dist/scene/foliage.js +1020 -0
  328. package/dist/scene/foliage.js.map +1 -0
  329. package/dist/scene/foliage_buckets.js +147 -0
  330. package/dist/scene/foliage_buckets.js.map +1 -0
  331. package/dist/scene/foliage_mask.js +358 -0
  332. package/dist/scene/foliage_mask.js.map +1 -0
  333. package/dist/scene/hair.js +15 -4
  334. package/dist/scene/hair.js.map +1 -1
  335. package/dist/scene/light.js +179 -13
  336. package/dist/scene/light.js.map +1 -1
  337. package/dist/scene/mesh.js +327 -45
  338. package/dist/scene/mesh.js.map +1 -1
  339. package/dist/scene/meshdrawable.js +6 -0
  340. package/dist/scene/meshdrawable.js.map +1 -1
  341. package/dist/scene/msdftext.js +9 -3
  342. package/dist/scene/msdftext.js.map +1 -1
  343. package/dist/scene/msdftextsprite.js +9 -3
  344. package/dist/scene/msdftextsprite.js.map +1 -1
  345. package/dist/scene/particlesys.js +8 -2
  346. package/dist/scene/particlesys.js.map +1 -1
  347. package/dist/scene/physics_settings.js +157 -0
  348. package/dist/scene/physics_settings.js.map +1 -0
  349. package/dist/scene/scene.js +190 -44
  350. package/dist/scene/scene.js.map +1 -1
  351. package/dist/scene/scene_node.js +147 -6
  352. package/dist/scene/scene_node.js.map +1 -1
  353. package/dist/scene/terrain-cm/bladegrassmaterial.js +735 -0
  354. package/dist/scene/terrain-cm/bladegrassmaterial.js.map +1 -0
  355. package/dist/scene/terrain-cm/grass.js +881 -42
  356. package/dist/scene/terrain-cm/grass.js.map +1 -1
  357. package/dist/scene/terrain-cm/grass_gpu.js +929 -0
  358. package/dist/scene/terrain-cm/grass_gpu.js.map +1 -0
  359. package/dist/scene/terrain-cm/grassmaterial.js +180 -9
  360. package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
  361. package/dist/scene/terrain-cm/terrain-cm.js +465 -36
  362. package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
  363. package/dist/scene/terrain-cm/terrain_gi_albedo.js +257 -0
  364. package/dist/scene/terrain-cm/terrain_gi_albedo.js.map +1 -0
  365. package/dist/scene/terrain-cm/terrain_rvt.js +395 -0
  366. package/dist/scene/terrain-cm/terrain_rvt.js.map +1 -0
  367. package/dist/scene/update_queue.js +54 -0
  368. package/dist/scene/update_queue.js.map +1 -0
  369. package/dist/scene/water.js +633 -268
  370. package/dist/scene/water.js.map +1 -1
  371. package/dist/scene/water_surface_sampler.js +324 -0
  372. package/dist/scene/water_surface_sampler.js.map +1 -0
  373. package/dist/scene/wind.js +317 -0
  374. package/dist/scene/wind.js.map +1 -0
  375. package/dist/shaders/atmosphere.js +388 -166
  376. package/dist/shaders/atmosphere.js.map +1 -1
  377. package/dist/shaders/fog.js +100 -32
  378. package/dist/shaders/fog.js.map +1 -1
  379. package/dist/shaders/gi.js +365 -0
  380. package/dist/shaders/gi.js.map +1 -0
  381. package/dist/shaders/ltc_rect.js +202 -0
  382. package/dist/shaders/ltc_rect.js.map +1 -0
  383. package/dist/shaders/misc.js +1 -10
  384. package/dist/shaders/misc.js.map +1 -1
  385. package/dist/shaders/noise.js +5 -1
  386. package/dist/shaders/noise.js.map +1 -1
  387. package/dist/shaders/probes.js +309 -0
  388. package/dist/shaders/probes.js.map +1 -0
  389. package/dist/shaders/sdf.js +537 -0
  390. package/dist/shaders/sdf.js.map +1 -0
  391. package/dist/shaders/shadow.js +104 -70
  392. package/dist/shaders/shadow.js.map +1 -1
  393. package/dist/shaders/skin_brdf.js +243 -0
  394. package/dist/shaders/skin_brdf.js.map +1 -0
  395. package/dist/shaders/ssgi.js +63 -0
  396. package/dist/shaders/ssgi.js.map +1 -0
  397. package/dist/shaders/ssgi_reprojection.js +118 -0
  398. package/dist/shaders/ssgi_reprojection.js.map +1 -0
  399. package/dist/shaders/ssr.js +6 -159
  400. package/dist/shaders/ssr.js.map +1 -1
  401. package/dist/shaders/temporal.js +38 -27
  402. package/dist/shaders/temporal.js.map +1 -1
  403. package/dist/shaders/water.js +32 -82
  404. package/dist/shaders/water.js.map +1 -1
  405. package/dist/shaders/water_medium.js +7 -21
  406. package/dist/shaders/water_medium.js.map +1 -1
  407. package/dist/shadow/dom.js +110 -19
  408. package/dist/shadow/dom.js.map +1 -1
  409. package/dist/shadow/esm.js +3 -3
  410. package/dist/shadow/esm.js.map +1 -1
  411. package/dist/shadow/pcf_opt.js +15 -48
  412. package/dist/shadow/pcf_opt.js.map +1 -1
  413. package/dist/shadow/pcf_pd.js +15 -53
  414. package/dist/shadow/pcf_pd.js.map +1 -1
  415. package/dist/shadow/pcss.js +34 -9
  416. package/dist/shadow/pcss.js.map +1 -1
  417. package/dist/shadow/shadow_impl.js +3 -8
  418. package/dist/shadow/shadow_impl.js.map +1 -1
  419. package/dist/shadow/shadow_region.js +40 -2
  420. package/dist/shadow/shadow_region.js.map +1 -1
  421. package/dist/shadow/shadowmapper.js +93 -53
  422. package/dist/shadow/shadowmapper.js.map +1 -1
  423. package/dist/shadow/ssm.js +18 -72
  424. package/dist/shadow/ssm.js.map +1 -1
  425. package/dist/shadow/vsm.js +3 -3
  426. package/dist/shadow/vsm.js.map +1 -1
  427. package/dist/shapes/shape.js +44 -1
  428. package/dist/shapes/shape.js.map +1 -1
  429. package/dist/utility/buoyancy.js +287 -0
  430. package/dist/utility/buoyancy.js.map +1 -0
  431. package/dist/utility/physical.js +10 -1
  432. package/dist/utility/physical.js.map +1 -1
  433. package/dist/utility/pmrem.js +17 -43
  434. package/dist/utility/pmrem.js.map +1 -1
  435. package/dist/utility/sdf/bake.js +435 -0
  436. package/dist/utility/sdf/bake.js.map +1 -0
  437. package/dist/utility/sdf/bvh.js +576 -0
  438. package/dist/utility/sdf/bvh.js.map +1 -0
  439. package/dist/utility/serialization/manager.js +34 -6
  440. package/dist/utility/serialization/manager.js.map +1 -1
  441. package/dist/utility/serialization/scene/animation.js +46 -5
  442. package/dist/utility/serialization/scene/animation.js.map +1 -1
  443. package/dist/utility/serialization/scene/batch.js +11 -4
  444. package/dist/utility/serialization/scene/batch.js.map +1 -1
  445. package/dist/utility/serialization/scene/camera.js +87 -254
  446. package/dist/utility/serialization/scene/camera.js.map +1 -1
  447. package/dist/utility/serialization/scene/cloth.js +25 -0
  448. package/dist/utility/serialization/scene/cloth.js.map +1 -0
  449. package/dist/utility/serialization/scene/common.js +14 -6
  450. package/dist/utility/serialization/scene/common.js.map +1 -1
  451. package/dist/utility/serialization/scene/foliage.js +821 -0
  452. package/dist/utility/serialization/scene/foliage.js.map +1 -0
  453. package/dist/utility/serialization/scene/hair.js +11 -4
  454. package/dist/utility/serialization/scene/hair.js.map +1 -1
  455. package/dist/utility/serialization/scene/light.js +115 -7
  456. package/dist/utility/serialization/scene/light.js.map +1 -1
  457. package/dist/utility/serialization/scene/material.js +388 -220
  458. package/dist/utility/serialization/scene/material.js.map +1 -1
  459. package/dist/utility/serialization/scene/mesh.js +69 -4
  460. package/dist/utility/serialization/scene/mesh.js.map +1 -1
  461. package/dist/utility/serialization/scene/node.js +140 -5
  462. package/dist/utility/serialization/scene/node.js.map +1 -1
  463. package/dist/utility/serialization/scene/node_physics.js +1318 -0
  464. package/dist/utility/serialization/scene/node_physics.js.map +1 -0
  465. package/dist/utility/serialization/scene/particle.js +11 -4
  466. package/dist/utility/serialization/scene/particle.js.map +1 -1
  467. package/dist/utility/serialization/scene/physics.js +120 -0
  468. package/dist/utility/serialization/scene/physics.js.map +1 -0
  469. package/dist/utility/serialization/scene/primitive.js +124 -10
  470. package/dist/utility/serialization/scene/primitive.js.map +1 -1
  471. package/dist/utility/serialization/scene/scene.js +1687 -51
  472. package/dist/utility/serialization/scene/scene.js.map +1 -1
  473. package/dist/utility/serialization/scene/sprite.js +11 -4
  474. package/dist/utility/serialization/scene/sprite.js.map +1 -1
  475. package/dist/utility/serialization/scene/terrain.js +163 -33
  476. package/dist/utility/serialization/scene/terrain.js.map +1 -1
  477. package/dist/utility/serialization/scene/text.js +11 -4
  478. package/dist/utility/serialization/scene/text.js.map +1 -1
  479. package/dist/utility/serialization/scene/water.js +1543 -264
  480. package/dist/utility/serialization/scene/water.js.map +1 -1
  481. package/dist/utility/serialization/types.js.map +1 -1
  482. package/dist/utility/shprojector.js +10 -22
  483. package/dist/utility/shprojector.js.map +1 -1
  484. package/dist/utility/textures/foam.js +170 -0
  485. package/dist/utility/textures/foam.js.map +1 -0
  486. package/dist/utility/textures/ggxlut.js +17 -43
  487. package/dist/utility/textures/ggxlut.js.map +1 -1
  488. package/dist/utility/textures/ltcdata.js +4 -4
  489. package/dist/utility/textures/ltcdata.js.map +1 -1
  490. package/dist/utility/textures/ltclut.js +16 -6
  491. package/dist/utility/textures/ltclut.js.map +1 -1
  492. package/dist/utility/unsupported.js +24 -0
  493. package/dist/utility/unsupported.js.map +1 -0
  494. package/dist/values.js +13 -1
  495. package/dist/values.js.map +1 -1
  496. package/package.json +25 -12
  497. package/src/asset/loaders/ktx2/basis/LICENSE +201 -0
  498. package/src/asset/loaders/ktx2/basis/basis_transcoder.js +2 -0
  499. package/src/asset/loaders/ktx2/basis/basis_transcoder.wasm +0 -0
  500. package/src/asset/meshoptimizer/LICENSE +21 -0
  501. package/dist/animation/joint_dynamics/convex_collider.js +0 -320
  502. package/dist/animation/joint_dynamics/convex_collider.js.map +0 -1
@@ -1,24 +1,25 @@
1
- import { DWeakRef, DRef, ASSERT, base64ToUint8Array, Vector3, Vector4, guessMimeType, isPowerOf2, nextPowerOf2 } from '@zephyr3d/base';
1
+ import { isZmshBinary, readZmshBinary, decodeZmshBinary } from './zmsh_binary.js';
2
+ import { getMeshoptDecoder } from './meshopt_decoder.js';
3
+ import { DWeakRef, DRef, ASSERT, base64ToUint8Array, Vector3, Vector4, guessMimeType } from '@zephyr3d/base';
2
4
  import { WebImageLoader } from './loaders/image/webimage_loader.js';
3
5
  import { DDSLoader } from './loaders/dds/dds_loader.js';
4
6
  import { HDRLoader } from './loaders/hdr/hdr.js';
5
- import { Primitive } from '../render/primitive.js';
6
- import '@zephyr3d/device';
7
- import { getEngine, getDevice } from '../app/api.js';
8
- import { CopyBlitter } from '../blitter/copy.js';
9
7
  import { getSheenLutLoader } from './builtin.js';
10
8
  import { BUILTIN_ASSET_TEXTURE_SHEEN_LUT } from '../values.js';
11
9
  import { TGALoader } from './loaders/image/tga_Loader.js';
10
+ import { KTX2Loader } from './loaders/ktx2/ktx2_loader.js';
11
+ import { getEngine, getDevice } from '../app/api.js';
12
12
  import '../material/shader/helper.js';
13
13
  import '../material/lambert.js';
14
14
  import '../material/blinn.js';
15
15
  import '../material/unlit.js';
16
+ import '../material/meshmaterial.js';
16
17
  import '../material/particle.js';
17
18
  import '../material/subsurfaceprofile.js';
18
- import '../material/skin.js';
19
+ import '../material/sssprofile.js';
20
+ import '../material/sss.js';
19
21
  import '../material/eye.js';
20
22
  import { Material } from '../material/material.js';
21
- import '../material/meshmaterial.js';
22
23
  import '../material/hair.js';
23
24
  import '../material/hairstrand.js';
24
25
  import '../material/grassmaterial.js';
@@ -35,15 +36,23 @@ import { BoundingBox } from '../utility/bounding_volume.js';
35
36
  import { MaterialBlueprintIR } from '../utility/blueprint/material/ir.js';
36
37
  import { getDefaultTexture2D } from '../utility/blueprint/material/texture.js';
37
38
  import '../render/render_queue.js';
39
+ import { Primitive } from '../render/primitive.js';
40
+ import '@zephyr3d/device';
38
41
  import '../render/rendergraph/forward_plus_builder.js';
39
42
  import '../render/lightpass.js';
40
43
  import '../render/sky.js';
41
44
  import '../render/clipmap.js';
42
45
  import '../render/envlight.js';
46
+ import '../render/lod.js';
43
47
  import '../render/dualdepthpeeling_oit.js';
44
48
  import '../shaders/atmosphere.js';
49
+ import '../render/water_interaction.js';
45
50
  import '../render/rendergraph/scene_render_context.js';
51
+ import '../render/sdf/scene_sdf.js';
52
+ import '../render/sdf/global_sdf.js';
53
+ import '../render/gi/voxelize_pass.js';
46
54
  import { FontAsset } from '../text/font/font_asset.js';
55
+ import { getRecordableOptions } from './asset_preload.js';
47
56
 
48
57
  /**
49
58
  * Centralized asset manager for loading and caching resources.
@@ -60,6 +69,24 @@ import { FontAsset } from '../text/font/font_asset.js';
60
69
  *
61
70
  * @public
62
71
  */ class AssetManager {
72
+ /**
73
+ * Optional redirect consulted before a texture or primitive is read, see
74
+ * {@link AssetSourceResolver}. Scene objects keep what they already loaded; call
75
+ * invalidateAsset() on the path when the resolver's answer changes so later
76
+ * loads pick it up.
77
+ */ assetSourceResolver = null;
78
+ /** @internal */ async resolveAssetSource(url, kind, vfs) {
79
+ // An explicit VFS means the caller wants that file system's bytes, not a substitute
80
+ if (!this.assetSourceResolver || vfs) {
81
+ return null;
82
+ }
83
+ try {
84
+ return await this.assetSourceResolver(url, kind);
85
+ } catch (err) {
86
+ console.warn(`Asset source resolver failed for ${url}, loading the file itself: ${err}`);
87
+ return null;
88
+ }
89
+ }
63
90
  /** @internal */ static _builtinTextures = {};
64
91
  /** @internal */ static _builtinTextureLoaders = {
65
92
  [BUILTIN_ASSET_TEXTURE_SHEEN_LUT]: getSheenLutLoader(64)
@@ -68,7 +95,8 @@ import { FontAsset } from '../text/font/font_asset.js';
68
95
  new WebImageLoader(),
69
96
  new DDSLoader(),
70
97
  new HDRLoader(),
71
- new TGALoader()
98
+ new TGALoader(),
99
+ new KTX2Loader()
72
100
  ];
73
101
  /** @internal */ _modelLoaders = {};
74
102
  /** @internal */ _textures;
@@ -84,6 +112,7 @@ import { FontAsset } from '../text/font/font_asset.js';
84
112
  /** @internal */ _cacheKeysByPath;
85
113
  /** @internal */ _cachePathByKey;
86
114
  /** @internal */ _resourceManager;
115
+ /** @internal */ _requestListeners;
87
116
  /**
88
117
  * Creates an instance of AssetManager
89
118
  */ constructor(resourceManager){
@@ -100,6 +129,42 @@ import { FontAsset } from '../text/font/font_asset.js';
100
129
  this._jsonDatas = {};
101
130
  this._cacheKeysByPath = new Map();
102
131
  this._cachePathByKey = new Map();
132
+ this._requestListeners = new Set();
133
+ }
134
+ /**
135
+ * Watches the fetches made from now on, to record them for {@link AssetPreloader}.
136
+ *
137
+ * @remarks
138
+ * Only fetches that can be made again from a recording are reported: not those
139
+ * reading from another VFS, loading into an existing texture, or post-processing
140
+ * through a callback. Fetching is unchanged.
141
+ *
142
+ * @param listener - Called with each fetch as it is made, cached or not
143
+ */ addRequestListener(listener) {
144
+ this._requestListeners.add(listener);
145
+ }
146
+ /** Stops a listener added by {@link AssetManager.addRequestListener} */ removeRequestListener(listener) {
147
+ this._requestListeners.delete(listener);
148
+ }
149
+ /** @internal */ notifyRequest(type, url, options, replayable = true) {
150
+ if (this._requestListeners.size === 0 || !replayable) {
151
+ return;
152
+ }
153
+ const recordable = getRecordableOptions(options);
154
+ if (!recordable) {
155
+ return;
156
+ }
157
+ const request = Object.keys(recordable).length > 0 ? {
158
+ type,
159
+ url,
160
+ options: recordable
161
+ } : {
162
+ type,
163
+ url
164
+ };
165
+ for (const listener of this._requestListeners){
166
+ listener(request);
167
+ }
103
168
  }
104
169
  /**
105
170
  * VFS used to read resources (files, URLs, virtual mounts).
@@ -306,6 +371,7 @@ import { FontAsset } from '../text/font/font_asset.js';
306
371
  * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.
307
372
  * @returns A promise that resolves to the loaded (and optionally processed) text.
308
373
  */ async fetchTextData(url, postProcess, httpRequest, options) {
374
+ this.notifyRequest('text', url, options, !postProcess && !httpRequest);
309
375
  const hash = httpRequest?.urlResolver?.(url) ?? url;
310
376
  let P = this._textDatas[hash];
311
377
  if (!P) {
@@ -326,6 +392,7 @@ import { FontAsset } from '../text/font/font_asset.js';
326
392
  * @param httpRequest - Optional HttpRequest for custom URL resolution/headers.
327
393
  * @returns A promise that resolves to the loaded (and optionally processed) JSON value.
328
394
  */ async fetchJsonData(url, postProcess, httpRequest, options) {
395
+ this.notifyRequest('json', url, options, !postProcess && !httpRequest);
329
396
  const hash = httpRequest?.urlResolver?.(url) ?? url;
330
397
  let P = this._jsonDatas[hash];
331
398
  if (!P) {
@@ -346,6 +413,7 @@ import { FontAsset } from '../text/font/font_asset.js';
346
413
  * @param options - Optional fetch options
347
414
  * @returns A promise that resolves to the loaded (and optionally processed) ArrayBuffer.
348
415
  */ async fetchBinaryData(url, postProcess, httpRequest, options) {
416
+ this.notifyRequest('binary', url, options, !postProcess && !httpRequest);
349
417
  const hash = httpRequest?.urlResolver?.(url) ?? url;
350
418
  let P = this._binaryDatas[hash];
351
419
  if (!P) {
@@ -366,6 +434,7 @@ import { FontAsset } from '../text/font/font_asset.js';
366
434
  * @param options - Optional MSDF atlas settings bound to the loaded FontAsset.
367
435
  * @returns A promise that resolves to the loaded (and optionally processed) font asset.
368
436
  */ async fetchFontAsset(url, options) {
437
+ this.notifyRequest('font', url, options);
369
438
  const hash = url;
370
439
  let P = this._fontAssets[hash];
371
440
  if (!P) {
@@ -390,6 +459,7 @@ import { FontAsset } from '../text/font/font_asset.js';
390
459
  return this._fontAssets[hash] instanceof Promise ? null : this._fontAssets[hash] ?? null;
391
460
  }
392
461
  async fetchBluePrint(url, options) {
462
+ this.notifyRequest('blueprint', url, options);
393
463
  const hash = url;
394
464
  let P = this._bluePrints[hash];
395
465
  if (!P) {
@@ -406,6 +476,7 @@ import { FontAsset } from '../text/font/font_asset.js';
406
476
  * @param url - Resource URL or VFS path.
407
477
  * @returns A promise that resolves to the loaded material.
408
478
  */ async fetchMaterial(url, options) {
479
+ this.notifyRequest('material', url, options);
409
480
  const hash = url;
410
481
  let P = this._materials[hash];
411
482
  if (P instanceof DWeakRef && P.get() && !P.get().disposed) {
@@ -428,6 +499,7 @@ import { FontAsset } from '../text/font/font_asset.js';
428
499
  * @param url - Resource URL or VFS path.
429
500
  * @returns A promise that resolves to the loaded primitive.
430
501
  */ async fetchPrimitive(url, options) {
502
+ this.notifyRequest('primitive', url, options);
431
503
  const hash = url;
432
504
  let P = this._primitives[hash];
433
505
  if (P instanceof DWeakRef && P.get() && !P.get().disposed) {
@@ -457,6 +529,7 @@ import { FontAsset } from '../text/font/font_asset.js';
457
529
  * @param httpRequest - Optional HttpRequest (not used for binary read but may supply URL resolver for hashing).
458
530
  * @returns A promise that resolves to the loaded texture.
459
531
  */ async fetchTexture(url, options) {
532
+ this.notifyRequest('texture', url, options);
460
533
  if (options?.texture) {
461
534
  return this.loadTexture(url, options.mimeType ?? null, !options.linearColorSpace, options.samplerOptions, options.texture, options.overrideVFS);
462
535
  } else {
@@ -487,7 +560,9 @@ import { FontAsset } from '../text/font/font_asset.js';
487
560
  * @returns A promise that resolves to the SharedModel.
488
561
  * @internal
489
562
  */ async fetchModelData(url, options) {
490
- const hash = url;
563
+ this.notifyRequest('model', url, options);
564
+ // The same model with and without levels of detail are different models
565
+ const hash = options?.generateLods ? `${url}#lod:${JSON.stringify(options.generateLods)}` : url;
491
566
  let P = this._models[hash];
492
567
  if (P instanceof DWeakRef && P.get() && !P.get().disposed) {
493
568
  return P.get();
@@ -598,10 +673,13 @@ import { FontAsset } from '../text/font/font_asset.js';
598
673
  }
599
674
  async loadPrimitive(url, vfs) {
600
675
  try {
601
- const data = await this.readFileFromVFS(url, {
602
- encoding: 'utf8'
676
+ const raw = (await this.resolveAssetSource(url, 'primitive', vfs))?.data ?? await this.readFileFromVFS(url, {
677
+ encoding: 'binary'
603
678
  }, vfs);
604
- const content = JSON.parse(data);
679
+ if (isZmshBinary(raw)) {
680
+ return await this.createPrimitiveFromZmshBinary(raw);
681
+ }
682
+ const content = JSON.parse(new TextDecoder().decode(raw));
605
683
  ASSERT(content.type === 'Primitive' || content.type === 'Default', `Unsupported primitive type: ${content.type}`);
606
684
  if (content.type === 'Primitive') {
607
685
  const data = content.data;
@@ -639,6 +717,25 @@ import { FontAsset } from '../text/font/font_asset.js';
639
717
  return null;
640
718
  }
641
719
  }
720
+ /** @internal */ async createPrimitiveFromZmshBinary(raw) {
721
+ const meshopt = readZmshBinary(raw).header.encoding === 'meshopt';
722
+ const { header, vertexData, indexData } = decodeZmshBinary(raw, meshopt ? await getMeshoptDecoder() : null);
723
+ const primitive = new Primitive();
724
+ header.attributes.forEach((a, i)=>primitive.createAndSetVertexBuffer(a.format, vertexData[i]));
725
+ if (indexData) {
726
+ primitive.createAndSetIndexBuffer(indexData);
727
+ }
728
+ primitive.primitiveType = header.primitiveType;
729
+ if (header.lods && header.lods.length > 0) {
730
+ primitive.indexStart = header.lods[0].indexStart;
731
+ primitive.indexCount = header.lods[0].indexCount;
732
+ primitive.lods = header.lods.slice(1);
733
+ } else {
734
+ primitive.indexCount = header.indexCount;
735
+ }
736
+ primitive.setBoundingVolume(new BoundingBox(new Vector3(header.boxMin[0], header.boxMin[1], header.boxMin[2]), new Vector3(header.boxMax[0], header.boxMax[1], header.boxMax[2])));
737
+ return primitive;
738
+ }
642
739
  async reloadBluePrintMaterials(filter) {
643
740
  const promises = [];
644
741
  const paths = [];
@@ -1038,10 +1135,11 @@ import { FontAsset } from '../text/font/font_asset.js';
1038
1135
  * @returns A promise that resolves to the created or populated texture.
1039
1136
  * @internal
1040
1137
  */ async loadTexture(url, mimeType, srgb, samplerOptions, texture, vfs) {
1041
- const data = await this.readFileFromVFS(url, {
1138
+ const redirected = await this.resolveAssetSource(url, 'texture', vfs);
1139
+ const data = redirected?.data ?? await this.readFileFromVFS(url, {
1042
1140
  encoding: 'binary'
1043
1141
  }, vfs);
1044
- mimeType = mimeType ?? this.vfs.guessMIMEType(url);
1142
+ mimeType = redirected?.mimeType ?? mimeType ?? this.vfs.guessMIMEType(url);
1045
1143
  for (const loader of AssetManager._textureLoaders){
1046
1144
  if (!loader.supportMIMEType(mimeType)) {
1047
1145
  continue;
@@ -1055,8 +1153,7 @@ import { FontAsset } from '../text/font/font_asset.js';
1055
1153
  throw new Error(`Can not find loader for asset ${url}`);
1056
1154
  }
1057
1155
  /**
1058
- * Internal routine that executes the texture load using a specific loader and applies
1059
- * backend-specific compatibility steps (e.g., WebGL NPOT/sRGB rules).
1156
+ * Internal routine that executes the texture load using a specific loader.
1060
1157
  *
1061
1158
  * @param loader - Concrete loader to use for decoding/creation.
1062
1159
  * @param mimeType - Texture MIME type.
@@ -1067,54 +1164,7 @@ import { FontAsset } from '../text/font/font_asset.js';
1067
1164
  * @returns A promise that resolves to the created or populated texture.
1068
1165
  * @internal
1069
1166
  */ async doLoadTexture(loader, mimeType, data, srgb, samplerOptions, texture) {
1070
- const device = getDevice();
1071
- if (device.type !== 'webgl') {
1072
- return await loader.load(mimeType, data, srgb, samplerOptions, texture);
1073
- } else {
1074
- let tex = await loader.load(mimeType, data, srgb, samplerOptions);
1075
- if (tex) {
1076
- if (texture) {
1077
- const magFilter = tex.width !== texture.width || tex.height !== texture.height ? 'linear' : 'nearest';
1078
- const minFilter = magFilter;
1079
- const mipFilter = 'none';
1080
- const sampler = device.createSampler({
1081
- addressU: 'clamp',
1082
- addressV: 'clamp',
1083
- magFilter,
1084
- minFilter,
1085
- mipFilter
1086
- });
1087
- const blitter = new CopyBlitter();
1088
- blitter.blit(tex, texture, sampler);
1089
- tex = texture;
1090
- } else {
1091
- const po2_w = isPowerOf2(tex.width);
1092
- const po2_h = isPowerOf2(tex.height);
1093
- const srgb = tex.isSRGBFormat();
1094
- if (srgb || !po2_w || !po2_h) {
1095
- const newWidth = po2_w ? tex.width : nextPowerOf2(tex.width);
1096
- const newHeight = po2_h ? tex.height : nextPowerOf2(tex.height);
1097
- const magFilter = newWidth !== tex.width || newHeight !== tex.height ? 'linear' : 'nearest';
1098
- const minFilter = magFilter;
1099
- const mipFilter = 'none';
1100
- const sampler = device.createSampler({
1101
- addressU: 'clamp',
1102
- addressV: 'clamp',
1103
- magFilter,
1104
- minFilter,
1105
- mipFilter
1106
- });
1107
- const destFormat = srgb ? 'rgba8unorm' : tex.format;
1108
- const blitter = new CopyBlitter();
1109
- const newTexture = tex.isTexture2D() ? device.createTexture2D(destFormat, newWidth, newHeight) : device.createCubeTexture(destFormat, newWidth);
1110
- blitter.blit(tex, newTexture, sampler);
1111
- tex.dispose();
1112
- tex = newTexture;
1113
- }
1114
- }
1115
- }
1116
- return tex;
1117
- }
1167
+ return await loader.load(mimeType, data, srgb, samplerOptions, texture);
1118
1168
  }
1119
1169
  /**
1120
1170
  * Load a model via registered model loaders.
@@ -1131,7 +1181,9 @@ import { FontAsset } from '../text/font/font_asset.js';
1131
1181
  const mimeType = options?.mimeType || guessMimeType(url);
1132
1182
  const importer = this._modelLoaders[mimeType];
1133
1183
  if (importer) {
1134
- let model = await importer.loadModel(url, vfs);
1184
+ let model = await importer.loadModel(url, vfs, options?.generateLods ? {
1185
+ generateLods: options.generateLods
1186
+ } : undefined);
1135
1187
  if (!model) {
1136
1188
  throw new Error(`Load asset failed: ${url}`);
1137
1189
  }