@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
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { ProgramBuilder } from '@zephyr3d/device';
|
|
2
|
+
import { QUEUE_OPAQUE } from '../values.js';
|
|
3
|
+
import { RenderBundleWrapper } from '../render/renderbundle_wrapper.js';
|
|
4
|
+
import { Disposable, DWeakRef } from '@zephyr3d/base';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Base class for any kind of materials
|
|
8
|
+
*
|
|
9
|
+
* @public
|
|
10
|
+
*/ class Material extends Disposable {
|
|
11
|
+
/** @internal */ static _registry = new Map();
|
|
12
|
+
/** @internal */ static _nextId = 0;
|
|
13
|
+
/** @internal */ static _programCache = {};
|
|
14
|
+
/** @internal */ _states;
|
|
15
|
+
/** @internal */ _numPasses;
|
|
16
|
+
/** @internal */ _hash;
|
|
17
|
+
/** @internal */ _optionTag;
|
|
18
|
+
/** @internal */ _id;
|
|
19
|
+
/** @internal */ _persistentId;
|
|
20
|
+
/** @internal */ _currentHash;
|
|
21
|
+
/** @internal */ _changeTag;
|
|
22
|
+
/**
|
|
23
|
+
* Creates an instance of material
|
|
24
|
+
*/ constructor(){
|
|
25
|
+
super();
|
|
26
|
+
this._id = ++Material._nextId;
|
|
27
|
+
this._persistentId = crypto.randomUUID();
|
|
28
|
+
this._states = {};
|
|
29
|
+
this._numPasses = 1;
|
|
30
|
+
this._hash = [
|
|
31
|
+
null
|
|
32
|
+
];
|
|
33
|
+
this._optionTag = 0;
|
|
34
|
+
this._changeTag = 0;
|
|
35
|
+
this._currentHash = [];
|
|
36
|
+
Material._registry.set(this._persistentId, new DWeakRef(this));
|
|
37
|
+
}
|
|
38
|
+
clone() {
|
|
39
|
+
const other = new Material();
|
|
40
|
+
other.copyFrom(this);
|
|
41
|
+
return other;
|
|
42
|
+
}
|
|
43
|
+
copyFrom(other) {
|
|
44
|
+
if (this._states) {
|
|
45
|
+
for(const k in this._states){
|
|
46
|
+
this._states[k]?.bindGroup?.dispose();
|
|
47
|
+
}
|
|
48
|
+
this._states = {};
|
|
49
|
+
}
|
|
50
|
+
this._numPasses = other._numPasses;
|
|
51
|
+
}
|
|
52
|
+
/** Material change tag */ get changeTag() {
|
|
53
|
+
return this._changeTag;
|
|
54
|
+
}
|
|
55
|
+
/** @internal */ static findMaterialById(id) {
|
|
56
|
+
const m = this._registry.get(id);
|
|
57
|
+
if (m && !m.get()) {
|
|
58
|
+
this._registry.delete(id);
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
return m ? m.get() : null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Persistent ID used in serialization
|
|
65
|
+
*/ get persistentId() {
|
|
66
|
+
return this._persistentId;
|
|
67
|
+
}
|
|
68
|
+
set persistentId(val) {
|
|
69
|
+
if (val !== this._persistentId) {
|
|
70
|
+
const m = Material._registry.get(this._persistentId);
|
|
71
|
+
if (!m || m.get() !== this) {
|
|
72
|
+
throw new Error('Registry material mismatch');
|
|
73
|
+
}
|
|
74
|
+
Material._registry.delete(this._persistentId);
|
|
75
|
+
this._persistentId = val;
|
|
76
|
+
Material._registry.set(this._persistentId, m);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/** Unique identifier of the material */ get instanceId() {
|
|
80
|
+
return this._id;
|
|
81
|
+
}
|
|
82
|
+
get numPasses() {
|
|
83
|
+
return this._numPasses;
|
|
84
|
+
}
|
|
85
|
+
set numPasses(val) {
|
|
86
|
+
while(this._hash.length < val){
|
|
87
|
+
this._hash.push(null);
|
|
88
|
+
}
|
|
89
|
+
this._numPasses = val;
|
|
90
|
+
}
|
|
91
|
+
/** @internal */ getHash(pass) {
|
|
92
|
+
if (this._hash[pass] === null) {
|
|
93
|
+
this._hash[pass] = this.createHash(pass);
|
|
94
|
+
}
|
|
95
|
+
return this._hash[pass];
|
|
96
|
+
}
|
|
97
|
+
getQueueType() {
|
|
98
|
+
return QUEUE_OPAQUE;
|
|
99
|
+
}
|
|
100
|
+
/** Returns true if given pass is transparent */ isTransparentPass(_pass) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
/** Returns true if shading of the material will be affected by lights */ supportLighting() {
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
/** Returns true if this material supports geometry instancing */ supportInstancing() {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
/** Returns true if this material supports geometry instancing */ isBatchable() {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
/** Return true if this material requires the scene color texture */ needSceneColor() {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
/** Return true if this material requires the linear scene depth texture */ needSceneDepth() {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
/** Create material instance */ createInstance() {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/** @internal */ get coreMaterial() {
|
|
122
|
+
return this;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Apply material
|
|
126
|
+
* @param ctx - Draw context
|
|
127
|
+
* @returns true if no error, otherwise false
|
|
128
|
+
*/ apply(ctx) {
|
|
129
|
+
for(let pass = 0; pass < this._numPasses; pass++){
|
|
130
|
+
const hash = this.calcGlobalHash(ctx, pass);
|
|
131
|
+
let state = this._states[hash];
|
|
132
|
+
if (!state) {
|
|
133
|
+
const programHash = `${this.constructor.name}:${hash}`;
|
|
134
|
+
let program = Material._programCache[programHash];
|
|
135
|
+
if (!program) {
|
|
136
|
+
program = this.createProgram(ctx, pass) ?? null;
|
|
137
|
+
Material._programCache[programHash] = program;
|
|
138
|
+
}
|
|
139
|
+
const bindGroup = program.bindGroupLayouts.length > 2 ? ctx.device.createBindGroup(program.bindGroupLayouts[2]) : null;
|
|
140
|
+
state = {
|
|
141
|
+
program,
|
|
142
|
+
bindGroup,
|
|
143
|
+
bindGroupTag: bindGroup?.getGPUId() ?? '',
|
|
144
|
+
renderStateSet: ctx.device.createRenderStateSet(),
|
|
145
|
+
materialTag: -1
|
|
146
|
+
};
|
|
147
|
+
this._states[hash] = state;
|
|
148
|
+
}
|
|
149
|
+
if (!state.program) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
this.applyUniforms(state.bindGroup, ctx, state.materialTag !== this._optionTag, pass);
|
|
153
|
+
state.materialTag = this._optionTag;
|
|
154
|
+
this.updateRenderStates(pass, state.renderStateSet, ctx);
|
|
155
|
+
this._currentHash[pass] = hash;
|
|
156
|
+
if (state.bindGroup) {
|
|
157
|
+
const id = state.bindGroup.getGPUId();
|
|
158
|
+
if (id !== state.bindGroupTag) {
|
|
159
|
+
state.bindGroupTag = id;
|
|
160
|
+
this._changeTag++;
|
|
161
|
+
RenderBundleWrapper.materialChanged(this.coreMaterial);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/** @internal */ bind(device, pass) {
|
|
167
|
+
const hash = this._currentHash[pass];
|
|
168
|
+
const state = this._states[hash];
|
|
169
|
+
if (!state) {
|
|
170
|
+
console.error('Material.bind() failed: state not found');
|
|
171
|
+
return false;
|
|
172
|
+
}
|
|
173
|
+
if (!state.program) {
|
|
174
|
+
return false;
|
|
175
|
+
}
|
|
176
|
+
device.setProgram(state.program);
|
|
177
|
+
device.setBindGroup(2, state.bindGroup);
|
|
178
|
+
device.setRenderStates(state.renderStateSet);
|
|
179
|
+
}
|
|
180
|
+
/** @internal */ calcGlobalHash(ctx, pass) {
|
|
181
|
+
return `${this.getHash(pass)}:${ctx.materialFlags}:${ctx.renderPassHash}`;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Draws a primitive using this material
|
|
185
|
+
* @internal
|
|
186
|
+
*
|
|
187
|
+
* @param primitive - The prmitive to be drawn
|
|
188
|
+
* @param ctx - The context of current drawing task
|
|
189
|
+
* @param numInstances - How many instances should be drawn. if zero, the instance count will be automatically detected.
|
|
190
|
+
*/ draw(primitive, ctx, numInstances = 0) {
|
|
191
|
+
for(let pass = 0; pass < this._numPasses; pass++){
|
|
192
|
+
this.bind(ctx.device, pass);
|
|
193
|
+
this.drawPrimitive(pass, primitive, ctx, numInstances);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Sets all uniform values to the bind group of the material if needed
|
|
198
|
+
* @param bindGroup - The bind group of the material
|
|
199
|
+
* @param ctx - The context of current drawing task
|
|
200
|
+
* @param needUpdate - true if the uniform values needs to update
|
|
201
|
+
*/ applyUniforms(bindGroup, ctx, needUpdate, pass) {
|
|
202
|
+
if (needUpdate) {
|
|
203
|
+
this._applyUniforms(bindGroup, ctx, pass);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/** @internal */ optionChanged(changeHash) {
|
|
207
|
+
this._optionTag++;
|
|
208
|
+
if (changeHash) {
|
|
209
|
+
for(let i = 0; i < this._numPasses; i++){
|
|
210
|
+
this._hash[i] = null;
|
|
211
|
+
}
|
|
212
|
+
this._changeTag++;
|
|
213
|
+
RenderBundleWrapper.materialChanged(this.coreMaterial);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Convert pass to hash
|
|
218
|
+
* @param pass - pass number
|
|
219
|
+
* @returns String hash
|
|
220
|
+
*/ passToHash(pass) {
|
|
221
|
+
return String(pass);
|
|
222
|
+
}
|
|
223
|
+
/** @internal */ createHash(pass) {
|
|
224
|
+
return `${this.constructor.name}|${pass}|${this._createHash()}`;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Draw primitve
|
|
228
|
+
*
|
|
229
|
+
* @param primitive - Primitive to be drawn
|
|
230
|
+
* @param ctx - Draw context
|
|
231
|
+
*/ drawPrimitive(pass, primitive, ctx, numInstances) {
|
|
232
|
+
if (numInstances > 0) {
|
|
233
|
+
primitive.drawInstanced(numInstances);
|
|
234
|
+
} else if (ctx.instanceData) {
|
|
235
|
+
primitive.drawInstanced(ctx.instanceData.numInstances);
|
|
236
|
+
} else {
|
|
237
|
+
primitive.draw();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Dispose material
|
|
242
|
+
*/ onDispose() {
|
|
243
|
+
super.onDispose();
|
|
244
|
+
const m = Material._registry.get(this.persistentId);
|
|
245
|
+
if (m?.get() === this) {
|
|
246
|
+
Material._registry.delete(this.persistentId);
|
|
247
|
+
m.dispose();
|
|
248
|
+
}
|
|
249
|
+
if (this._states) {
|
|
250
|
+
for(const k in this._states){
|
|
251
|
+
this._states[k]?.bindGroup?.dispose();
|
|
252
|
+
}
|
|
253
|
+
this._states = {};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** @internal */ createProgram(ctx, pass) {
|
|
257
|
+
const pb = new ProgramBuilder(ctx.device);
|
|
258
|
+
return this._createProgram(pb, ctx, pass);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Creates the shader program
|
|
262
|
+
* @param pb - The program builder
|
|
263
|
+
* @param ctx - The drawing context
|
|
264
|
+
* @param func - The material func
|
|
265
|
+
* @returns The created shader program
|
|
266
|
+
*/ _createProgram(_pb, _ctx, _pass) {
|
|
267
|
+
return null;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Applies uniform values
|
|
271
|
+
* @param bindGroup - The bind group
|
|
272
|
+
* @param ctx - The drawing context
|
|
273
|
+
*/ _applyUniforms(_bindGroup, _ctx, _pass) {}
|
|
274
|
+
/**
|
|
275
|
+
* Update render states according to draw context and current material pass
|
|
276
|
+
* @param pass - Current material pass
|
|
277
|
+
* @param renderStates - Render state set to be updated
|
|
278
|
+
* @param ctx - Draw context
|
|
279
|
+
*/ updateRenderStates(_pass, _renderStates, _ctx) {}
|
|
280
|
+
/**
|
|
281
|
+
* Calculates the hash code of the shader program
|
|
282
|
+
* @returns The hash code
|
|
283
|
+
*/ _createHash() {
|
|
284
|
+
return '';
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* True if this is a material instance
|
|
288
|
+
* @internal
|
|
289
|
+
**/ get $isInstance() {
|
|
290
|
+
return false;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Returns the instance uniforms if this is a material instance
|
|
294
|
+
* @internal
|
|
295
|
+
**/ get $instanceUniforms() {
|
|
296
|
+
return null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export { Material };
|
|
301
|
+
//# sourceMappingURL=material.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"material.js","sources":["../../../src/material/material.ts"],"sourcesContent":["import type { AbstractDevice, BindGroup, GPUProgram, RenderStateSet } from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { Primitive } from '../render/primitive';\r\nimport type { DrawContext } from '../render/drawable';\r\nimport { QUEUE_OPAQUE } from '../values';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport { DWeakRef, Disposable } from '@zephyr3d/base';\r\nimport type { Clonable, IDisposable } from '@zephyr3d/base';\r\n\r\ntype MaterialState = {\r\n program: GPUProgram;\r\n bindGroup: BindGroup;\r\n bindGroupTag: string;\r\n renderStateSet: RenderStateSet;\r\n materialTag: number;\r\n};\r\n\r\n/**\r\n * Base class for any kind of materials\r\n *\r\n * @public\r\n */\r\nexport class Material extends Disposable implements Clonable<Material>, IDisposable {\r\n /** @internal */\r\n protected static _registry: Map<string, DWeakRef<Material>> = new Map();\r\n /** @internal */\r\n private static _nextId = 0;\r\n /** @internal */\r\n private static _programCache: { [hash: string]: GPUProgram } = {};\r\n /** @internal */\r\n private _states: { [hash: string]: MaterialState };\r\n /** @internal */\r\n protected _numPasses: number;\r\n /** @internal */\r\n protected _hash: string[];\r\n /** @internal */\r\n private _optionTag: number;\r\n /** @internal */\r\n private readonly _id: number;\r\n /** @internal */\r\n private _persistentId: string;\r\n /** @internal */\r\n private _currentHash: string[];\r\n /** @internal */\r\n private _changeTag: number;\r\n /**\r\n * Creates an instance of material\r\n */\r\n constructor() {\r\n super();\r\n this._id = ++Material._nextId;\r\n this._persistentId = crypto.randomUUID();\r\n this._states = {};\r\n this._numPasses = 1;\r\n this._hash = [null];\r\n this._optionTag = 0;\r\n this._changeTag = 0;\r\n this._currentHash = [];\r\n Material._registry.set(this._persistentId, new DWeakRef(this));\r\n }\r\n clone(): Material {\r\n const other = new Material();\r\n other.copyFrom(this);\r\n return other;\r\n }\r\n copyFrom(other: this) {\r\n if (this._states) {\r\n for (const k in this._states) {\r\n this._states[k]?.bindGroup?.dispose();\r\n }\r\n this._states = {};\r\n }\r\n this._numPasses = other._numPasses;\r\n }\r\n /** Material change tag */\r\n get changeTag() {\r\n return this._changeTag;\r\n }\r\n /** @internal */\r\n static findMaterialById(id: string) {\r\n const m = this._registry.get(id);\r\n if (m && !m.get()) {\r\n this._registry.delete(id);\r\n return null;\r\n }\r\n return m ? m.get() : null;\r\n }\r\n /**\r\n * Persistent ID used in serialization\r\n */\r\n get persistentId() {\r\n return this._persistentId;\r\n }\r\n set persistentId(val) {\r\n if (val !== this._persistentId) {\r\n const m = Material._registry.get(this._persistentId);\r\n if (!m || m.get() !== this) {\r\n throw new Error('Registry material mismatch');\r\n }\r\n Material._registry.delete(this._persistentId);\r\n this._persistentId = val;\r\n Material._registry.set(this._persistentId, m);\r\n }\r\n }\r\n /** Unique identifier of the material */\r\n get instanceId(): number {\r\n return this._id;\r\n }\r\n get numPasses(): number {\r\n return this._numPasses;\r\n }\r\n set numPasses(val: number) {\r\n while (this._hash.length < val) {\r\n this._hash.push(null);\r\n }\r\n this._numPasses = val;\r\n }\r\n /** @internal */\r\n protected getHash(pass: number): string {\r\n if (this._hash[pass] === null) {\r\n this._hash[pass] = this.createHash(pass);\r\n }\r\n return this._hash[pass];\r\n }\r\n getQueueType(): number {\r\n return QUEUE_OPAQUE;\r\n }\r\n /** Returns true if given pass is transparent */\r\n isTransparentPass(_pass: number): boolean {\r\n return false;\r\n }\r\n /** Returns true if shading of the material will be affected by lights */\r\n supportLighting(): boolean {\r\n return true;\r\n }\r\n /** Returns true if this material supports geometry instancing */\r\n supportInstancing(): boolean {\r\n return true;\r\n }\r\n /** Returns true if this material supports geometry instancing */\r\n isBatchable(): boolean {\r\n return false;\r\n }\r\n /** Return true if this material requires the scene color texture */\r\n needSceneColor(): boolean {\r\n return false;\r\n }\r\n /** Return true if this material requires the linear scene depth texture */\r\n needSceneDepth(): boolean {\r\n return false;\r\n }\r\n /** Create material instance */\r\n createInstance(): this {\r\n return null;\r\n }\r\n /** @internal */\r\n get coreMaterial(): this {\r\n return this;\r\n }\r\n /**\r\n * Apply material\r\n * @param ctx - Draw context\r\n * @returns true if no error, otherwise false\r\n */\r\n apply(ctx: DrawContext): boolean {\r\n for (let pass = 0; pass < this._numPasses; pass++) {\r\n const hash = this.calcGlobalHash(ctx, pass);\r\n let state = this._states[hash];\r\n if (!state) {\r\n const programHash = `${this.constructor.name}:${hash}`;\r\n let program = Material._programCache[programHash];\r\n if (!program) {\r\n program = this.createProgram(ctx, pass) ?? null;\r\n Material._programCache[programHash] = program;\r\n }\r\n const bindGroup =\r\n program.bindGroupLayouts.length > 2\r\n ? ctx.device.createBindGroup(program.bindGroupLayouts[2])\r\n : null;\r\n state = {\r\n program,\r\n bindGroup,\r\n bindGroupTag: bindGroup?.getGPUId() ?? '',\r\n renderStateSet: ctx.device.createRenderStateSet(),\r\n materialTag: -1\r\n };\r\n this._states[hash] = state;\r\n }\r\n if (!state.program) {\r\n return false;\r\n }\r\n this.applyUniforms(state.bindGroup, ctx, state.materialTag !== this._optionTag, pass);\r\n state.materialTag = this._optionTag;\r\n this.updateRenderStates(pass, state.renderStateSet, ctx);\r\n this._currentHash[pass] = hash;\r\n if (state.bindGroup) {\r\n const id = state.bindGroup.getGPUId();\r\n if (id !== state.bindGroupTag) {\r\n state.bindGroupTag = id;\r\n this._changeTag++;\r\n RenderBundleWrapper.materialChanged(this.coreMaterial);\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n bind(device: AbstractDevice, pass: number): boolean {\r\n const hash = this._currentHash[pass];\r\n const state = this._states[hash];\r\n if (!state) {\r\n console.error('Material.bind() failed: state not found');\r\n return false;\r\n }\r\n if (!state.program) {\r\n return false;\r\n }\r\n device.setProgram(state.program);\r\n device.setBindGroup(2, state.bindGroup);\r\n device.setRenderStates(state.renderStateSet);\r\n }\r\n /** @internal */\r\n private calcGlobalHash(ctx: DrawContext, pass: number): string {\r\n return `${this.getHash(pass)}:${ctx.materialFlags}:${ctx.renderPassHash}`;\r\n }\r\n /**\r\n * Draws a primitive using this material\r\n * @internal\r\n *\r\n * @param primitive - The prmitive to be drawn\r\n * @param ctx - The context of current drawing task\r\n * @param numInstances - How many instances should be drawn. if zero, the instance count will be automatically detected.\r\n */\r\n draw(primitive: Primitive, ctx: DrawContext, numInstances = 0) {\r\n for (let pass = 0; pass < this._numPasses; pass++) {\r\n this.bind(ctx.device, pass);\r\n this.drawPrimitive(pass, primitive, ctx, numInstances);\r\n }\r\n }\r\n /**\r\n * Sets all uniform values to the bind group of the material if needed\r\n * @param bindGroup - The bind group of the material\r\n * @param ctx - The context of current drawing task\r\n * @param needUpdate - true if the uniform values needs to update\r\n */\r\n applyUniforms(bindGroup: BindGroup, ctx: DrawContext, needUpdate: boolean, pass: number): void {\r\n if (needUpdate) {\r\n this._applyUniforms(bindGroup, ctx, pass);\r\n }\r\n }\r\n /** @internal */\r\n optionChanged(changeHash: boolean) {\r\n this._optionTag++;\r\n if (changeHash) {\r\n for (let i = 0; i < this._numPasses; i++) {\r\n this._hash[i] = null;\r\n }\r\n this._changeTag++;\r\n RenderBundleWrapper.materialChanged(this.coreMaterial);\r\n }\r\n }\r\n /**\r\n * Convert pass to hash\r\n * @param pass - pass number\r\n * @returns String hash\r\n */\r\n passToHash(pass: number): string {\r\n return String(pass);\r\n }\r\n /** @internal */\r\n createHash(pass: number): string {\r\n return `${this.constructor.name}|${pass}|${this._createHash()}`;\r\n }\r\n /**\r\n * Draw primitve\r\n *\r\n * @param primitive - Primitive to be drawn\r\n * @param ctx - Draw context\r\n */\r\n drawPrimitive(pass: number, primitive: Primitive, ctx: DrawContext, numInstances: number): void {\r\n if (numInstances > 0) {\r\n primitive.drawInstanced(numInstances);\r\n } else if (ctx.instanceData) {\r\n primitive.drawInstanced(ctx.instanceData.numInstances);\r\n } else {\r\n primitive.draw();\r\n }\r\n }\r\n /**\r\n * Dispose material\r\n */\r\n protected onDispose() {\r\n super.onDispose();\r\n const m = Material._registry.get(this.persistentId);\r\n if (m?.get() === this) {\r\n Material._registry.delete(this.persistentId);\r\n m.dispose();\r\n }\r\n if (this._states) {\r\n for (const k in this._states) {\r\n this._states[k]?.bindGroup?.dispose();\r\n }\r\n this._states = {};\r\n }\r\n }\r\n /** @internal */\r\n protected createProgram(ctx: DrawContext, pass: number): GPUProgram {\r\n const pb = new ProgramBuilder(ctx.device);\r\n return this._createProgram(pb, ctx, pass);\r\n }\r\n /**\r\n * Creates the shader program\r\n * @param pb - The program builder\r\n * @param ctx - The drawing context\r\n * @param func - The material func\r\n * @returns The created shader program\r\n */\r\n protected _createProgram(_pb: ProgramBuilder, _ctx: DrawContext, _pass: number): GPUProgram {\r\n return null;\r\n }\r\n /**\r\n * Applies uniform values\r\n * @param bindGroup - The bind group\r\n * @param ctx - The drawing context\r\n */\r\n protected _applyUniforms(_bindGroup: BindGroup, _ctx: DrawContext, _pass: number) {}\r\n /**\r\n * Update render states according to draw context and current material pass\r\n * @param pass - Current material pass\r\n * @param renderStates - Render state set to be updated\r\n * @param ctx - Draw context\r\n */\r\n protected updateRenderStates(_pass: number, _renderStates: RenderStateSet, _ctx: DrawContext): void {}\r\n /**\r\n * Calculates the hash code of the shader program\r\n * @returns The hash code\r\n */\r\n protected _createHash(): string {\r\n return '';\r\n }\r\n /**\r\n * True if this is a material instance\r\n * @internal\r\n **/\r\n get $isInstance() {\r\n return false;\r\n }\r\n /**\r\n * Returns the instance uniforms if this is a material instance\r\n * @internal\r\n **/\r\n get $instanceUniforms(): Float32Array<ArrayBuffer> {\r\n return null;\r\n }\r\n}\r\n"],"names":["Material","Disposable","_registry","Map","_nextId","_programCache","_id","_persistentId","crypto","randomUUID","_states","_numPasses","_hash","_optionTag","_changeTag","_currentHash","set","DWeakRef","clone","other","copyFrom","k","bindGroup","dispose","changeTag","findMaterialById","id","m","get","delete","persistentId","val","Error","instanceId","numPasses","length","push","getHash","pass","createHash","getQueueType","QUEUE_OPAQUE","isTransparentPass","_pass","supportLighting","supportInstancing","isBatchable","needSceneColor","needSceneDepth","createInstance","coreMaterial","apply","ctx","hash","calcGlobalHash","state","programHash","name","program","createProgram","bindGroupLayouts","device","createBindGroup","bindGroupTag","getGPUId","renderStateSet","createRenderStateSet","materialTag","applyUniforms","updateRenderStates","RenderBundleWrapper","materialChanged","bind","console","error","setProgram","setBindGroup","setRenderStates","materialFlags","renderPassHash","draw","primitive","numInstances","drawPrimitive","needUpdate","_applyUniforms","optionChanged","changeHash","i","passToHash","String","_createHash","drawInstanced","instanceData","onDispose","pb","ProgramBuilder","_createProgram","_pb","_ctx","_bindGroup","_renderStates","$isInstance","$instanceUniforms"],"mappings":"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"}
|