@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.
- package/README.md +1 -1
- package/dist/animation/animation.js +149 -27
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +173 -73
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +65 -10
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +41 -20
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +14 -38
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +59 -22
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +190 -0
- package/dist/animation/proptrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +29 -11
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +29 -11
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +241 -78
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +30 -11
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +43 -0
- package/dist/app/api.js.map +1 -0
- package/dist/app/app.js +153 -0
- package/dist/app/app.js.map +1 -0
- package/dist/app/engine.js +312 -0
- package/dist/app/engine.js.map +1 -0
- package/dist/app/inputmgr.js +351 -0
- package/dist/app/inputmgr.js.map +1 -0
- package/dist/app/runtimescript.js +62 -0
- package/dist/app/runtimescript.js.map +1 -0
- package/dist/app/scriptingsystem.js +220 -0
- package/dist/app/scriptingsystem.js.map +1 -0
- package/dist/app/scriptregistry.js +432 -0
- package/dist/app/scriptregistry.js.map +1 -0
- package/dist/asset/assetmanager.js +772 -291
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +7 -43
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +17 -93
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +8 -18
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +36 -42
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +27 -14
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +17 -12
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +13 -16
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js +51 -50
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +158 -4
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +0 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +22 -23
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js +23 -23
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +141 -34
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +653 -149
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +2 -10
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +132 -59
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +37 -12
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +37 -20
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +18268 -6982
- package/dist/index.js +49 -16
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +5 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js +6 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js +6 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +346 -73
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +498 -156
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +5 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js +3 -3
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +6 -6
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +235 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +16 -4
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +134 -0
- package/dist/material/mixins/pbr/brdf.js.map +1 -0
- package/dist/material/mixins/pbr/common.js +68 -85
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +98 -83
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +6 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js +272 -0
- package/dist/material/particle.js.map +1 -0
- package/dist/material/pbrblueprint.js +186 -0
- package/dist/material/pbrblueprint.js.map +1 -0
- package/dist/material/pbrmr.js +10 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +10 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +521 -287
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/terrain-cm.js +607 -0
- package/dist/material/terrain-cm.js.map +1 -0
- package/dist/material/terrainmaterial.js +59 -54
- package/dist/material/terrainmaterial.js.map +1 -1
- package/dist/material/unlit.js +5 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +415 -0
- package/dist/material/water.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
- package/dist/posteffect/bloom.js +39 -54
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +95 -128
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +10 -18
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +9 -17
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +105 -0
- package/dist/posteffect/motionblur.js.map +1 -0
- package/dist/posteffect/posteffect.js +66 -35
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +13 -21
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +60 -100
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js +175 -0
- package/dist/posteffect/taa.js.map +1 -0
- package/dist/posteffect/tonemap.js +12 -20
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +30 -19
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +429 -101
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +7 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +43 -3
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +14 -5
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +113 -40
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +86 -141
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +234 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -0
- package/dist/render/fft_wavegenerator.js +64 -50
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js +2 -2
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +98 -48
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +4 -2
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +6 -3
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +19 -18
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +4 -4
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +213 -104
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +40 -20
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderbundle_wrapper.js +65 -15
- package/dist/render/renderbundle_wrapper.js.map +1 -1
- package/dist/render/renderer.js +326 -185
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +20 -36
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/shadowmap_pass.js +3 -3
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +864 -541
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +13 -15
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/batchgroup.js +18 -5
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +78 -48
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +2 -3
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +28 -89
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +218 -87
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js +371 -162
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +684 -0
- package/dist/scene/particlesys.js.map +1 -0
- package/dist/scene/raycast_visitor.js +34 -5
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +309 -85
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +675 -102
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain/grass.js +48 -49
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/heightfield.js +46 -44
- package/dist/scene/terrain/heightfield.js.map +1 -1
- package/dist/scene/terrain/patch.js +20 -29
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +58 -27
- package/dist/scene/terrain/quadtree.js.map +1 -1
- package/dist/scene/terrain/terrain.js +31 -45
- package/dist/scene/terrain/terrain.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +603 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +160 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js +533 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/scene/water.js +378 -0
- package/dist/scene/water.js.map +1 -0
- package/dist/shaders/atmosphere.js +957 -0
- package/dist/shaders/atmosphere.js.map +1 -0
- package/dist/shaders/fog.js +116 -0
- package/dist/shaders/fog.js.map +1 -0
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +217 -8
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js +8 -8
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js +87 -39
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +216 -0
- package/dist/shaders/temporal.js.map +1 -0
- package/dist/shaders/water.js +42 -20
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +31 -13
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -13
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -13
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +38 -0
- package/dist/shadow/shader.js.map +1 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +67 -26
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +15 -16
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +33 -16
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +181 -83
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +101 -43
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +70 -29
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +120 -17
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +78 -44
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +256 -0
- package/dist/shapes/tetrahedron.js.map +1 -0
- package/dist/shapes/torus.js +76 -55
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/{app.js → src/app/app.js} +18 -40
- package/dist/src/app/app.js.map +1 -0
- package/dist/{input → src/app}/inputmgr.js +41 -16
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/utility/aabbtree.js +15 -5
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +851 -0
- package/dist/utility/blueprint/common/constants.js.map +1 -0
- package/dist/utility/blueprint/common/math.js +2045 -0
- package/dist/utility/blueprint/common/math.js.map +1 -0
- package/dist/utility/blueprint/common.js +7 -0
- package/dist/utility/blueprint/common.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/func.js +521 -0
- package/dist/utility/blueprint/material/func.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1659 -0
- package/dist/utility/blueprint/material/inputs.js.map +1 -0
- package/dist/utility/blueprint/material/ir.js +1311 -0
- package/dist/utility/blueprint/material/ir.js.map +1 -0
- package/dist/utility/blueprint/material/pbr.js +362 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -0
- package/dist/utility/blueprint/material/texture.js +1099 -0
- package/dist/utility/blueprint/material/texture.js.map +1 -0
- package/dist/utility/blueprint/node.js +187 -0
- package/dist/utility/blueprint/node.js.map +1 -0
- package/dist/utility/bounding_volume.js +0 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js +26 -0
- package/dist/utility/debug.js.map +1 -0
- package/dist/utility/draco/decoder.js +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +18 -6
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js +8 -6
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js +30 -18
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js +116 -0
- package/dist/utility/rendermipmap.js.map +1 -0
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/json.js +402 -0
- package/dist/utility/serialization/json.js.map +1 -0
- package/dist/utility/serialization/manager.js +1176 -0
- package/dist/utility/serialization/manager.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +699 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -0
- package/dist/utility/serialization/scene/batch.js +53 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -0
- package/dist/utility/serialization/scene/camera.js +808 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +224 -0
- package/dist/utility/serialization/scene/common.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +589 -0
- package/dist/utility/serialization/scene/light.js.map +1 -0
- package/dist/utility/serialization/scene/material.js +942 -0
- package/dist/utility/serialization/scene/material.js.map +1 -0
- package/dist/utility/serialization/scene/mesh.js +374 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/utility/serialization/scene/misc.js +39 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -0
- package/dist/utility/serialization/scene/node.js +391 -0
- package/dist/utility/serialization/scene/node.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +425 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +582 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/utility/serialization/scene/scene.js +763 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +495 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +465 -0
- package/dist/utility/serialization/scene/water.js.map +1 -0
- package/dist/utility/shprojector.js +313 -0
- package/dist/utility/shprojector.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +4 -5
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js +2 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js +1 -0
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +91 -4
- package/dist/values.js.map +1 -1
- package/package.json +29 -15
- package/dist/app.js.map +0 -1
- package/dist/blitter/depthlimitedgaussion.js.map +0 -1
- package/dist/input/inputmgr.js.map +0 -1
- package/dist/material/mixins/ggxlut.js.map +0 -1
- package/dist/posteffect/water.js +0 -508
- package/dist/posteffect/water.js.map +0 -1
- package/dist/render/oit.js +0 -16
- package/dist/render/oit.js.map +0 -1
- package/dist/render/scatteringlut.js +0 -634
- package/dist/render/scatteringlut.js.map +0 -1
- package/dist/render/watermesh.js +0 -193
- package/dist/render/watermesh.js.map +0 -1
- package/dist/render/wavegenerator.js +0 -8
- package/dist/render/wavegenerator.js.map +0 -1
- package/dist/scene/xform.js +0 -247
- package/dist/scene/xform.js.map +0 -1
- package/dist/utility/shprojection.js +0 -442
- package/dist/utility/shprojection.js.map +0 -1
|
@@ -1,35 +1,34 @@
|
|
|
1
1
|
import { AbstractTextureLoader } from '../loader.js';
|
|
2
|
-
import {
|
|
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
|
|
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
|
-
|
|
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.
|
|
82
|
-
mipFilter: 'none'
|
|
83
|
-
};
|
|
80
|
+
opt.mipmapping = false;
|
|
84
81
|
}
|
|
85
|
-
const tex =
|
|
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
|
-
}
|
|
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(
|
|
110
|
-
return new Promise((resolve
|
|
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 {
|
|
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/
|
|
9
|
+
return mimeType === 'image/jpeg' || mimeType === 'image/png' || mimeType === 'image/webp';
|
|
13
10
|
}
|
|
14
|
-
async load(
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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;;;;"}
|
package/dist/asset/model.js
CHANGED
|
@@ -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
|
|
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
|
|
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 };
|
package/dist/asset/model.js.map
CHANGED
|
@@ -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":"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"}
|
|
@@ -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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"}
|