@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,17 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Vector3 } from '@zephyr3d/base';
|
|
1
|
+
import { Disposable, Vector3 } from '@zephyr3d/base';
|
|
3
2
|
import { QUEUE_TRANSPARENT } from '../values.js';
|
|
4
3
|
import { ProgramBuilder } from '@zephyr3d/device';
|
|
5
4
|
import { ShaderHelper } from '../material/shader/helper.js';
|
|
6
5
|
import '../material/lambert.js';
|
|
7
6
|
import '../material/blinn.js';
|
|
8
7
|
import '../material/unlit.js';
|
|
8
|
+
import '../material/particle.js';
|
|
9
9
|
import { RenderBundleWrapper } from './renderbundle_wrapper.js';
|
|
10
|
+
import { getDevice } from '../app/api.js';
|
|
10
11
|
import '../material/meshmaterial.js';
|
|
11
12
|
import '../material/grassmaterial.js';
|
|
12
13
|
import '../material/terrainmaterial.js';
|
|
14
|
+
import '../material/terrain-cm.js';
|
|
13
15
|
import '../material/pbrmr.js';
|
|
14
16
|
import '../material/pbrsg.js';
|
|
17
|
+
import '../material/pbrblueprint.js';
|
|
15
18
|
|
|
16
19
|
const maxBufferSizeInFloats = 65536 / 4;
|
|
17
20
|
/** @internal */ class InstanceBindGroupAllocator {
|
|
@@ -37,7 +40,7 @@ const maxBufferSizeInFloats = 65536 / 4;
|
|
|
37
40
|
}
|
|
38
41
|
}
|
|
39
42
|
if (!InstanceBindGroupAllocator._instanceBindGroupLayout) {
|
|
40
|
-
const buildInfo = new ProgramBuilder(
|
|
43
|
+
const buildInfo = new ProgramBuilder(getDevice()).buildRender({
|
|
41
44
|
vertex (pb) {
|
|
42
45
|
this[ShaderHelper.getInstanceDataUniformName()] = pb.vec4[65536 >> 4]().uniformBuffer(3);
|
|
43
46
|
pb.main(function() {});
|
|
@@ -49,7 +52,7 @@ const maxBufferSizeInFloats = 65536 / 4;
|
|
|
49
52
|
InstanceBindGroupAllocator._instanceBindGroupLayout = buildInfo[2][3];
|
|
50
53
|
}
|
|
51
54
|
const bindGroup = {
|
|
52
|
-
bindGroup:
|
|
55
|
+
bindGroup: getDevice().createBindGroup(InstanceBindGroupAllocator._instanceBindGroupLayout),
|
|
53
56
|
buffer: new Float32Array(maxBufferSizeInFloats),
|
|
54
57
|
offset: 0,
|
|
55
58
|
dirty: true
|
|
@@ -62,7 +65,7 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
62
65
|
/**
|
|
63
66
|
* A queue that contains the items to be rendered
|
|
64
67
|
* @public
|
|
65
|
-
*/ class RenderQueue {
|
|
68
|
+
*/ class RenderQueue extends Disposable {
|
|
66
69
|
/** @internal */ _itemList;
|
|
67
70
|
/** @internal */ _renderPass;
|
|
68
71
|
/** @internal */ _shadowedLightList;
|
|
@@ -72,12 +75,15 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
72
75
|
/** @internal */ _ref;
|
|
73
76
|
/** @internal */ _instanceInfo;
|
|
74
77
|
/** @internal */ _needSceneColor;
|
|
78
|
+
_needSceneDepth;
|
|
79
|
+
_needSceneColorWithDepth;
|
|
75
80
|
/** @internal */ _drawTransparent;
|
|
76
81
|
/** @internal */ _objectColorMaps;
|
|
77
82
|
/**
|
|
78
83
|
* Creates an instance of a render queue
|
|
79
84
|
* @param renderPass - The render pass to which the render queue belongs
|
|
80
85
|
*/ constructor(renderPass, bindGroupAllocator){
|
|
86
|
+
super();
|
|
81
87
|
this._bindGroupAllocator = bindGroupAllocator ?? defaultInstanceBindGroupAlloator;
|
|
82
88
|
this._itemList = null;
|
|
83
89
|
this._renderPass = renderPass;
|
|
@@ -89,6 +95,8 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
89
95
|
};
|
|
90
96
|
this._instanceInfo = new Map();
|
|
91
97
|
this._needSceneColor = false;
|
|
98
|
+
this._needSceneDepth = false;
|
|
99
|
+
this._needSceneColorWithDepth = false;
|
|
92
100
|
this._drawTransparent = false;
|
|
93
101
|
this._objectColorMaps = [
|
|
94
102
|
new Map()
|
|
@@ -100,9 +108,15 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
100
108
|
set sunLight(light) {
|
|
101
109
|
this._sunLight = light;
|
|
102
110
|
}
|
|
103
|
-
/**
|
|
111
|
+
/** @internal */ needSceneColor() {
|
|
104
112
|
return this._needSceneColor;
|
|
105
113
|
}
|
|
114
|
+
/** @internal */ needSceneDepth() {
|
|
115
|
+
return this._needSceneDepth;
|
|
116
|
+
}
|
|
117
|
+
/** @internal */ needSceneColorWithDepth() {
|
|
118
|
+
return this._needSceneColorWithDepth;
|
|
119
|
+
}
|
|
106
120
|
/** Whether this render queue has transparent objects to be drawn */ get drawTransparent() {
|
|
107
121
|
return this._drawTransparent;
|
|
108
122
|
}
|
|
@@ -142,7 +156,7 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
142
156
|
*
|
|
143
157
|
* @internal
|
|
144
158
|
*/ getMaxBatchSize() {
|
|
145
|
-
return
|
|
159
|
+
return getDevice().getDeviceCaps().shaderCaps.maxUniformBufferSize / 64;
|
|
146
160
|
}
|
|
147
161
|
/**
|
|
148
162
|
* Push a punctual light
|
|
@@ -177,6 +191,8 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
177
191
|
this._itemList.transmission_trans.lit.push(...newItemLists.transmission_trans.lit);
|
|
178
192
|
this._itemList.transmission_trans.unlit.push(...newItemLists.transmission_trans.unlit);
|
|
179
193
|
this._needSceneColor ||= queue._needSceneColor;
|
|
194
|
+
this._needSceneDepth ||= queue._needSceneDepth;
|
|
195
|
+
this._needSceneColorWithDepth ||= queue._needSceneColorWithDepth;
|
|
180
196
|
this._drawTransparent ||= queue._drawTransparent;
|
|
181
197
|
this._objectColorMaps.push(...queue._objectColorMaps);
|
|
182
198
|
}
|
|
@@ -186,17 +202,21 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
186
202
|
* @param drawable - The object to be drawn
|
|
187
203
|
*/ push(camera, drawable) {
|
|
188
204
|
if (drawable) {
|
|
205
|
+
drawable.pushRenderQueueRef(this._ref);
|
|
189
206
|
if (!this._itemList) {
|
|
190
207
|
this._itemList = this.newRenderItemList();
|
|
191
208
|
}
|
|
192
209
|
const trans = drawable.getQueueType() === QUEUE_TRANSPARENT;
|
|
193
210
|
const unlit = drawable.isUnlit();
|
|
194
|
-
const
|
|
211
|
+
const needDepth = !!drawable.needSceneDepth();
|
|
212
|
+
const transmission = !!drawable.needSceneColor() || needDepth;
|
|
195
213
|
this._needSceneColor ||= transmission;
|
|
214
|
+
this._needSceneDepth ||= drawable.needSceneDepth();
|
|
215
|
+
this._needSceneColorWithDepth ||= transmission && needDepth;
|
|
196
216
|
this._drawTransparent ||= trans;
|
|
197
|
-
if (camera.
|
|
217
|
+
if (camera.getPickResultResolveFunc()) {
|
|
198
218
|
drawable.getMaterial().objectColor = drawable.getObjectColor();
|
|
199
|
-
this._objectColorMaps[0].set(drawable.
|
|
219
|
+
this._objectColorMaps[0].set(drawable.getDrawableId(), drawable);
|
|
200
220
|
}
|
|
201
221
|
if (drawable.isBatchable()) {
|
|
202
222
|
const instanceList = trans ? transmission ? unlit ? this._itemList.transmission_trans.unlit[0].instanceList : this._itemList.transmission_trans.lit[0].instanceList : unlit ? this._itemList.transparent.unlit[0].instanceList : this._itemList.transparent.lit[0].instanceList : transmission ? unlit ? this._itemList.transmission.unlit[0].instanceList : this._itemList.transmission.lit[0].instanceList : unlit ? this._itemList.opaque.unlit[0].instanceList : this._itemList.opaque.lit[0].instanceList;
|
|
@@ -226,13 +246,12 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
226
246
|
sortDistance: drawable.getSortDistance(camera),
|
|
227
247
|
instanceData: null
|
|
228
248
|
});
|
|
229
|
-
drawable.applyTransformUniforms(this);
|
|
230
249
|
const mat = drawable.getMaterial();
|
|
231
250
|
if (mat) {
|
|
232
251
|
list.materialList.add(mat.coreMaterial);
|
|
233
252
|
}
|
|
253
|
+
drawable.applyTransformUniforms(this);
|
|
234
254
|
}
|
|
235
|
-
drawable.pushRenderQueueRef(this._ref);
|
|
236
255
|
}
|
|
237
256
|
}
|
|
238
257
|
/** @internal */ getDrawableByColor(c) {
|
|
@@ -281,15 +300,12 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
281
300
|
this._unshadowedLightList = [];
|
|
282
301
|
this._sunLight = null;
|
|
283
302
|
this._needSceneColor = false;
|
|
303
|
+
this._needSceneDepth = false;
|
|
304
|
+
this._needSceneColorWithDepth = false;
|
|
284
305
|
this._drawTransparent = false;
|
|
285
306
|
}
|
|
286
|
-
/** @internal */ dispose() {
|
|
287
|
-
this._ref.ref = null;
|
|
288
|
-
this._ref = null;
|
|
289
|
-
this.reset();
|
|
290
|
-
}
|
|
291
307
|
/** @internal */ end(camera, createRenderBundles) {
|
|
292
|
-
const frameCounter =
|
|
308
|
+
const frameCounter = getDevice().frameInfo.frameCounter;
|
|
293
309
|
const itemList = this._itemList;
|
|
294
310
|
if (!this.itemList) {
|
|
295
311
|
return this;
|
|
@@ -319,7 +335,7 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
319
335
|
const drawable = drawables[i];
|
|
320
336
|
const instanceUniforms = drawable.getInstanceUniforms();
|
|
321
337
|
const instanceUniformsSize = instanceUniforms?.length ?? 0;
|
|
322
|
-
const stride =
|
|
338
|
+
const stride = ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET * 4 + instanceUniformsSize;
|
|
323
339
|
if (!bindGroup || bindGroup.offset + stride > maxBufferSizeInFloats) {
|
|
324
340
|
bindGroup = this._bindGroupAllocator.allocateInstanceBindGroup(frameCounter, stride);
|
|
325
341
|
item = {
|
|
@@ -404,8 +420,12 @@ const defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();
|
|
|
404
420
|
this._itemList.transparent.unlit[0].skinAndMorphItemList.sort((a, b)=>this.drawableDistanceToCamera(b.drawable, cameraPos) - this.drawableDistanceToCamera(a.drawable, cameraPos));
|
|
405
421
|
}
|
|
406
422
|
}
|
|
423
|
+
/** Disposes the render queue */ onDispose() {
|
|
424
|
+
super.onDispose();
|
|
425
|
+
this.reset();
|
|
426
|
+
}
|
|
407
427
|
drawableDistanceToCamera(drawable, cameraPos) {
|
|
408
|
-
const drawablePos = drawable.
|
|
428
|
+
const drawablePos = drawable.getNode().position;
|
|
409
429
|
return Vector3.distanceSq(drawablePos, cameraPos);
|
|
410
430
|
}
|
|
411
431
|
newRenderItemListInfo() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render_queue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"render_queue.js","sources":["../../src/render/render_queue.ts"],"sourcesContent":["import type { Vector4 } from '@zephyr3d/base';\r\nimport { Disposable, Vector3 } from '@zephyr3d/base';\r\nimport type { Camera } from '../camera/camera';\r\nimport type { BatchDrawable, Drawable } from './drawable';\r\nimport type { DirectionalLight, PunctualLight } from '../scene/light';\r\nimport type { RenderPass } from '.';\r\nimport { QUEUE_TRANSPARENT } from '../values';\r\nimport type { BindGroup, BindGroupLayout } from '@zephyr3d/device';\r\nimport { ProgramBuilder } from '@zephyr3d/device';\r\nimport type { Material } from '../material';\r\nimport { ShaderHelper } from '../material';\r\nimport { RenderBundleWrapper } from './renderbundle_wrapper';\r\nimport { getDevice } from '../app/api';\r\n\r\n/** @internal */\r\nexport type CachedBindGroup = {\r\n bindGroup: BindGroup;\r\n buffer: Float32Array;\r\n offset: number;\r\n dirty: boolean;\r\n};\r\n\r\nconst maxBufferSizeInFloats = 65536 / 4;\r\n\r\n/** @internal */\r\nexport class InstanceBindGroupAllocator {\r\n private static _instanceBindGroupLayout: BindGroupLayout = null;\r\n _bindGroupList: CachedBindGroup[] = [];\r\n private _allocFrameStamp: number;\r\n constructor() {\r\n this._allocFrameStamp = -1;\r\n this._bindGroupList = [];\r\n }\r\n allocateInstanceBindGroup(framestamp: number, sizeInFloats: number): CachedBindGroup {\r\n // Reset if render frame changed\r\n if (this._allocFrameStamp !== framestamp) {\r\n this._allocFrameStamp = framestamp;\r\n for (const k of this._bindGroupList) {\r\n k.offset = 0;\r\n }\r\n }\r\n for (const k of this._bindGroupList) {\r\n if (k.offset + sizeInFloats <= maxBufferSizeInFloats) {\r\n k.dirty = true;\r\n return k;\r\n }\r\n }\r\n if (!InstanceBindGroupAllocator._instanceBindGroupLayout) {\r\n const buildInfo = new ProgramBuilder(getDevice()).buildRender({\r\n vertex(pb) {\r\n this[ShaderHelper.getInstanceDataUniformName()] = pb.vec4[65536 >> 4]().uniformBuffer(3);\r\n pb.main(function () {});\r\n },\r\n fragment(pb) {\r\n pb.main(function () {});\r\n }\r\n });\r\n InstanceBindGroupAllocator._instanceBindGroupLayout = buildInfo[2][3];\r\n }\r\n const bindGroup = {\r\n bindGroup: getDevice().createBindGroup(InstanceBindGroupAllocator._instanceBindGroupLayout),\r\n buffer: new Float32Array(maxBufferSizeInFloats),\r\n offset: 0,\r\n dirty: true\r\n };\r\n this._bindGroupList.push(bindGroup);\r\n return bindGroup;\r\n }\r\n}\r\n\r\nconst defaultInstanceBindGroupAlloator = new InstanceBindGroupAllocator();\r\n\r\n/**\r\n * Instance data\r\n * @public\r\n */\r\nexport interface InstanceData {\r\n bindGroup: CachedBindGroup;\r\n stride: number;\r\n offset: number;\r\n numInstances: number;\r\n}\r\n\r\n/**\r\n * Render queue item\r\n * @internal\r\n */\r\nexport interface RenderQueueItem {\r\n drawable: Drawable;\r\n sortDistance: number;\r\n instanceColor?: Vector4;\r\n instanceData: InstanceData;\r\n}\r\n\r\n/** @internal */\r\nexport interface RenderItemListInfo {\r\n itemList: RenderQueueItem[];\r\n renderBundle?: RenderBundleWrapper;\r\n skinItemList: RenderQueueItem[];\r\n skinRenderBundle?: RenderBundleWrapper;\r\n morphItemList: RenderQueueItem[];\r\n morphRenderBundle?: RenderBundleWrapper;\r\n skinAndMorphItemList: RenderQueueItem[];\r\n skinAndMorphRenderBundle?: RenderBundleWrapper;\r\n instanceItemList: RenderQueueItem[];\r\n instanceRenderBundle?: RenderBundleWrapper;\r\n instanceList: Record<string, BatchDrawable[]>;\r\n materialList: Set<Material>;\r\n renderQueue: RenderQueue;\r\n}\r\n\r\n/** @internal */\r\nexport interface RenderItemListBundle {\r\n lit: RenderItemListInfo[];\r\n unlit: RenderItemListInfo[];\r\n}\r\n\r\n/**\r\n * Item list of render queue\r\n * @internal\r\n */\r\nexport interface RenderItemList {\r\n opaque: RenderItemListBundle;\r\n transmission: RenderItemListBundle;\r\n transparent: RenderItemListBundle;\r\n transmission_trans: RenderItemListBundle;\r\n}\r\n\r\n/**\r\n * Render queue reference\r\n * @internal\r\n */\r\nexport interface RenderQueueRef {\r\n ref: RenderQueue;\r\n}\r\n\r\n/**\r\n * Drawable instance information\r\n * @internal\r\n */\r\nexport interface DrawableInstanceInfo {\r\n bindGroup: CachedBindGroup;\r\n offset: number;\r\n}\r\n\r\n/**\r\n * A queue that contains the items to be rendered\r\n * @public\r\n */\r\nexport class RenderQueue extends Disposable {\r\n /** @internal */\r\n private _itemList: RenderItemList;\r\n /** @internal */\r\n private readonly _renderPass: RenderPass;\r\n /** @internal */\r\n private _shadowedLightList: PunctualLight[];\r\n /** @internal */\r\n private _unshadowedLightList: PunctualLight[];\r\n /** @internal */\r\n private _sunLight: DirectionalLight;\r\n /** @internal */\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n /** @internal */\r\n private readonly _ref: RenderQueueRef;\r\n /** @internal */\r\n private readonly _instanceInfo: Map<Drawable, DrawableInstanceInfo>;\r\n /** @internal */\r\n private _needSceneColor: boolean;\r\n private _needSceneDepth: boolean;\r\n private _needSceneColorWithDepth: boolean;\r\n /** @internal */\r\n private _drawTransparent: boolean;\r\n /** @internal */\r\n private readonly _objectColorMaps: Map<number, Drawable>[];\r\n /**\r\n * Creates an instance of a render queue\r\n * @param renderPass - The render pass to which the render queue belongs\r\n */\r\n constructor(renderPass: RenderPass, bindGroupAllocator?: InstanceBindGroupAllocator) {\r\n super();\r\n this._bindGroupAllocator = bindGroupAllocator ?? defaultInstanceBindGroupAlloator;\r\n this._itemList = null;\r\n this._renderPass = renderPass;\r\n this._shadowedLightList = [];\r\n this._unshadowedLightList = [];\r\n this._sunLight = null;\r\n this._ref = { ref: this };\r\n this._instanceInfo = new Map();\r\n this._needSceneColor = false;\r\n this._needSceneDepth = false;\r\n this._needSceneColorWithDepth = false;\r\n this._drawTransparent = false;\r\n this._objectColorMaps = [new Map()];\r\n }\r\n /** The sun light */\r\n get sunLight(): DirectionalLight {\r\n return this._sunLight;\r\n }\r\n set sunLight(light: DirectionalLight) {\r\n this._sunLight = light;\r\n }\r\n /** @internal */\r\n needSceneColor(): boolean {\r\n return this._needSceneColor;\r\n }\r\n /** @internal */\r\n needSceneDepth(): boolean {\r\n return this._needSceneDepth;\r\n }\r\n /** @internal */\r\n needSceneColorWithDepth(): boolean {\r\n return this._needSceneColorWithDepth;\r\n }\r\n /** Whether this render queue has transparent objects to be drawn */\r\n get drawTransparent(): boolean {\r\n return this._drawTransparent;\r\n }\r\n /** The render pass to which the render queue belongs */\r\n get renderPass(): RenderPass {\r\n return this._renderPass;\r\n }\r\n /**\r\n * Gets the items of the render queue\r\n */\r\n get itemList() {\r\n return this._itemList;\r\n }\r\n /**\r\n * Gets the shadowed lights\r\n */\r\n get shadowedLights() {\r\n return this._shadowedLightList;\r\n }\r\n /**\r\n * Gets the unshadowed lights\r\n */\r\n get unshadowedLights() {\r\n return this._unshadowedLightList;\r\n }\r\n /**\r\n * Gets the indirect reference of this\r\n */\r\n get ref(): RenderQueueRef {\r\n return this._ref;\r\n }\r\n /**\r\n * Gets the instance information for given drawable object\r\n * @param drawable - The drawable object\r\n * @returns The instane information for given drawable object, null if no exists\r\n */\r\n getInstanceInfo(drawable: Drawable) {\r\n return this._instanceInfo.get(drawable);\r\n }\r\n /**\r\n * Gets the maximum batch size of a given device\r\n * @returns The maximum batch size of the device\r\n *\r\n * @internal\r\n */\r\n getMaxBatchSize() {\r\n return getDevice().getDeviceCaps().shaderCaps.maxUniformBufferSize / 64;\r\n }\r\n /**\r\n * Push a punctual light\r\n * @param light - The light to be pushed\r\n */\r\n pushLight(light: PunctualLight) {\r\n if (light.castShadow) {\r\n this._shadowedLightList.push(light);\r\n } else {\r\n this._unshadowedLightList.push(light);\r\n }\r\n if (light.isDirectionLight() && light.sunLight) {\r\n this.sunLight = light;\r\n }\r\n }\r\n /**\r\n * Push items from another render queue\r\n * @param queue - The render queue to be pushed\r\n */\r\n pushRenderQueue(queue: RenderQueue) {\r\n const newItemLists = queue._itemList;\r\n if (!newItemLists) {\r\n return;\r\n }\r\n if (!this._itemList) {\r\n this._itemList = this.newRenderItemList();\r\n }\r\n this._itemList.opaque.lit.push(...newItemLists.opaque.lit);\r\n this._itemList.opaque.unlit.push(...newItemLists.opaque.unlit);\r\n this._itemList.transmission.lit.push(...newItemLists.transmission.lit);\r\n this._itemList.transmission.unlit.push(...newItemLists.transmission.unlit);\r\n this._itemList.transparent.lit.push(...newItemLists.transparent.lit);\r\n this._itemList.transparent.unlit.push(...newItemLists.transparent.unlit);\r\n this._itemList.transmission_trans.lit.push(...newItemLists.transmission_trans.lit);\r\n this._itemList.transmission_trans.unlit.push(...newItemLists.transmission_trans.unlit);\r\n this._needSceneColor ||= queue._needSceneColor;\r\n this._needSceneDepth ||= queue._needSceneDepth;\r\n this._needSceneColorWithDepth ||= queue._needSceneColorWithDepth;\r\n this._drawTransparent ||= queue._drawTransparent;\r\n this._objectColorMaps.push(...queue._objectColorMaps);\r\n }\r\n /**\r\n * Push an item to the render queue\r\n * @param camera - The camera for drawing the item\r\n * @param drawable - The object to be drawn\r\n */\r\n push(camera: Camera, drawable: Drawable): void {\r\n if (drawable) {\r\n drawable.pushRenderQueueRef(this._ref);\r\n if (!this._itemList) {\r\n this._itemList = this.newRenderItemList();\r\n }\r\n const trans = drawable.getQueueType() === QUEUE_TRANSPARENT;\r\n const unlit = drawable.isUnlit();\r\n const needDepth = !!drawable.needSceneDepth();\r\n const transmission = !!drawable.needSceneColor() || needDepth;\r\n this._needSceneColor ||= transmission;\r\n this._needSceneDepth ||= drawable.needSceneDepth();\r\n this._needSceneColorWithDepth ||= transmission && needDepth;\r\n this._drawTransparent ||= trans;\r\n if (camera.getPickResultResolveFunc()) {\r\n drawable.getMaterial().objectColor = drawable.getObjectColor();\r\n this._objectColorMaps[0].set(drawable.getDrawableId(), drawable);\r\n }\r\n if (drawable.isBatchable()) {\r\n const instanceList = trans\r\n ? transmission\r\n ? unlit\r\n ? this._itemList.transmission_trans.unlit[0].instanceList\r\n : this._itemList.transmission_trans.lit[0].instanceList\r\n : unlit\r\n ? this._itemList.transparent.unlit[0].instanceList\r\n : this._itemList.transparent.lit[0].instanceList\r\n : transmission\r\n ? unlit\r\n ? this._itemList.transmission.unlit[0].instanceList\r\n : this._itemList.transmission.lit[0].instanceList\r\n : unlit\r\n ? this._itemList.opaque.unlit[0].instanceList\r\n : this._itemList.opaque.lit[0].instanceList;\r\n const hash = drawable.getInstanceId(this._renderPass);\r\n let drawableList = instanceList[hash];\r\n if (!drawableList) {\r\n drawableList = [];\r\n instanceList[hash] = drawableList;\r\n }\r\n drawableList.push(drawable);\r\n } else {\r\n const list = trans\r\n ? transmission\r\n ? unlit\r\n ? this._itemList.transmission_trans.unlit[0]\r\n : this._itemList.transmission_trans.lit[0]\r\n : unlit\r\n ? this._itemList.transparent.unlit[0]\r\n : this._itemList.transparent.lit[0]\r\n : transmission\r\n ? unlit\r\n ? this._itemList.transmission.unlit[0]\r\n : this._itemList.transmission.lit[0]\r\n : unlit\r\n ? this._itemList.opaque.unlit[0]\r\n : this._itemList.opaque.lit[0];\r\n const skinAnimation = !!drawable.getBoneMatrices();\r\n const morphAnimation = !!drawable.getMorphData();\r\n let queue: RenderQueueItem[];\r\n if (skinAnimation && morphAnimation) {\r\n queue = list.skinAndMorphItemList;\r\n } else if (skinAnimation) {\r\n queue = list.skinItemList;\r\n } else if (morphAnimation) {\r\n queue = list.morphItemList;\r\n } else {\r\n queue = list.itemList;\r\n }\r\n this.binaryInsert(queue, {\r\n drawable,\r\n sortDistance: drawable.getSortDistance(camera),\r\n instanceData: null\r\n });\r\n const mat = drawable.getMaterial();\r\n if (mat) {\r\n list.materialList.add(mat.coreMaterial);\r\n }\r\n drawable.applyTransformUniforms(this);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n getDrawableByColor(c: Uint8Array<ArrayBuffer>) {\r\n const id = (c[0] << 24) + (c[1] << 16) + (c[2] << 8) + c[3];\r\n for (const m of this._objectColorMaps) {\r\n const drawable = m.get(id);\r\n if (drawable) {\r\n return drawable;\r\n }\r\n }\r\n return null;\r\n }\r\n /**\r\n * Removes all items in the render queue\r\n */\r\n reset() {\r\n if (this._itemList) {\r\n // Release all render bundles\r\n for (const k in this._itemList) {\r\n const itemListBundle: RenderItemListBundle = this._itemList[k];\r\n for (const l in itemListBundle) {\r\n const listInfo: RenderItemListInfo[] = itemListBundle[l];\r\n for (const info of listInfo) {\r\n if (info.renderQueue === this) {\r\n if (info.renderBundle) {\r\n info.renderBundle.dispose();\r\n }\r\n if (info.skinRenderBundle) {\r\n info.skinRenderBundle.dispose();\r\n }\r\n if (info.morphRenderBundle) {\r\n info.morphRenderBundle.dispose();\r\n }\r\n if (info.skinAndMorphRenderBundle) {\r\n info.skinAndMorphRenderBundle.dispose();\r\n }\r\n if (info.instanceRenderBundle) {\r\n info.instanceRenderBundle.dispose();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n this._itemList = null;\r\n }\r\n this._shadowedLightList = [];\r\n this._unshadowedLightList = [];\r\n this._sunLight = null;\r\n this._needSceneColor = false;\r\n this._needSceneDepth = false;\r\n this._needSceneColorWithDepth = false;\r\n this._drawTransparent = false;\r\n }\r\n /** @internal */\r\n end(camera: Camera, createRenderBundles?: boolean): this {\r\n const frameCounter = getDevice().frameInfo.frameCounter;\r\n const itemList = this._itemList;\r\n if (!this.itemList) {\r\n return this;\r\n }\r\n const lists = [\r\n itemList.opaque.lit,\r\n itemList.opaque.unlit,\r\n itemList.transmission.lit,\r\n itemList.transmission.unlit,\r\n itemList.transparent.lit,\r\n itemList.transparent.unlit,\r\n itemList.transmission_trans.lit,\r\n itemList.transmission_trans.unlit\r\n ];\r\n for (let i = 0; i < lists.length; i++) {\r\n const list = lists[i];\r\n for (const info of list) {\r\n if (info.renderQueue !== this) {\r\n continue;\r\n }\r\n const instanceList = info.instanceList;\r\n for (const x in instanceList) {\r\n const drawables = instanceList[x];\r\n let bindGroup: CachedBindGroup = null;\r\n let item: RenderQueueItem = null;\r\n for (let i = 0; i < drawables.length; i++) {\r\n const drawable = drawables[i];\r\n const instanceUniforms = drawable.getInstanceUniforms();\r\n const instanceUniformsSize = instanceUniforms?.length ?? 0;\r\n const stride = ShaderHelper.MATERIAL_INSTANCE_DATA_OFFSET * 4 + instanceUniformsSize;\r\n if (!bindGroup || bindGroup.offset + stride > maxBufferSizeInFloats) {\r\n bindGroup = this._bindGroupAllocator.allocateInstanceBindGroup(frameCounter, stride);\r\n item = {\r\n drawable,\r\n sortDistance: drawable.getSortDistance(camera),\r\n instanceData: {\r\n bindGroup,\r\n offset: bindGroup.offset,\r\n numInstances: 0,\r\n stride\r\n }\r\n };\r\n this.binaryInsert(info.instanceItemList, item);\r\n drawable.applyInstanceOffsetAndStride(this, stride, bindGroup.offset);\r\n }\r\n const instanceInfo = { bindGroup, offset: bindGroup.offset };\r\n this._instanceInfo.set(drawable, instanceInfo);\r\n drawable.applyTransformUniforms(this);\r\n drawable.applyMaterialUniforms(instanceInfo);\r\n bindGroup.offset += stride;\r\n item.instanceData.numInstances++;\r\n const mat = drawable.getMaterial();\r\n if (mat) {\r\n info.materialList.add(mat.coreMaterial);\r\n }\r\n }\r\n }\r\n info.instanceList = {};\r\n if (createRenderBundles) {\r\n if (info.itemList.length > 0) {\r\n info.renderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.skinItemList.length > 0) {\r\n info.skinRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.morphItemList.length > 0) {\r\n info.morphRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.skinAndMorphItemList.length > 0) {\r\n info.skinAndMorphRenderBundle = new RenderBundleWrapper();\r\n }\r\n if (info.instanceItemList.length > 0) {\r\n info.instanceRenderBundle = new RenderBundleWrapper();\r\n }\r\n }\r\n }\r\n }\r\n return this;\r\n }\r\n binaryInsert(itemList: RenderQueueItem[], item: RenderQueueItem) {\r\n let left = 0;\r\n let right = itemList.length - 1;\r\n const newInstanceId = item.drawable.getMaterial().instanceId;\r\n while (left <= right) {\r\n const mid = Math.floor((left + right) / 2);\r\n const instanceId = itemList[mid].drawable.getMaterial().instanceId;\r\n if (instanceId === newInstanceId) {\r\n itemList.splice(mid + 1, 0, item);\r\n return;\r\n } else if (instanceId < newInstanceId) {\r\n left = mid + 1;\r\n } else {\r\n right = mid - 1;\r\n }\r\n }\r\n itemList.splice(left, 0, item);\r\n }\r\n /**\r\n * Sorts the items in the render queue for rendering\r\n */\r\n sortTransparentItems(cameraPos: Vector3) {\r\n if (this._itemList) {\r\n this._itemList.transparent.lit[0].itemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].skinItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].morphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.lit[0].skinAndMorphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].itemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].skinItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].morphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n this._itemList.transparent.unlit[0].skinAndMorphItemList.sort(\r\n (a, b) =>\r\n this.drawableDistanceToCamera(b.drawable, cameraPos) -\r\n this.drawableDistanceToCamera(a.drawable, cameraPos)\r\n );\r\n }\r\n }\r\n /** Disposes the render queue */\r\n protected onDispose() {\r\n super.onDispose();\r\n this.reset();\r\n }\r\n\r\n private drawableDistanceToCamera(drawable: Drawable, cameraPos: Vector3) {\r\n const drawablePos = drawable.getNode().position;\r\n return Vector3.distanceSq(drawablePos, cameraPos);\r\n }\r\n private newRenderItemListInfo(): RenderItemListInfo {\r\n return {\r\n itemList: [],\r\n skinItemList: [],\r\n morphItemList: [],\r\n skinAndMorphItemList: [],\r\n instanceItemList: [],\r\n materialList: new Set(),\r\n instanceList: {},\r\n renderQueue: this\r\n };\r\n }\r\n private newRenderItemListBundle(): RenderItemListBundle {\r\n return {\r\n lit: [this.newRenderItemListInfo()],\r\n unlit: [this.newRenderItemListInfo()]\r\n };\r\n }\r\n private newRenderItemList(): RenderItemList {\r\n return {\r\n opaque: this.newRenderItemListBundle(),\r\n transmission: this.newRenderItemListBundle(),\r\n transparent: this.newRenderItemListBundle(),\r\n transmission_trans: this.newRenderItemListBundle()\r\n };\r\n }\r\n}\r\n"],"names":["maxBufferSizeInFloats","InstanceBindGroupAllocator","_instanceBindGroupLayout","_bindGroupList","_allocFrameStamp","allocateInstanceBindGroup","framestamp","sizeInFloats","k","offset","dirty","buildInfo","ProgramBuilder","getDevice","buildRender","vertex","pb","ShaderHelper","getInstanceDataUniformName","vec4","uniformBuffer","main","fragment","bindGroup","createBindGroup","buffer","Float32Array","push","defaultInstanceBindGroupAlloator","RenderQueue","Disposable","_needSceneDepth","_needSceneColorWithDepth","renderPass","bindGroupAllocator","_bindGroupAllocator","_itemList","_renderPass","_shadowedLightList","_unshadowedLightList","_sunLight","_ref","ref","_instanceInfo","Map","_needSceneColor","_drawTransparent","_objectColorMaps","sunLight","light","needSceneColor","needSceneDepth","needSceneColorWithDepth","drawTransparent","itemList","shadowedLights","unshadowedLights","getInstanceInfo","drawable","get","getMaxBatchSize","getDeviceCaps","shaderCaps","maxUniformBufferSize","pushLight","castShadow","isDirectionLight","pushRenderQueue","queue","newItemLists","newRenderItemList","opaque","lit","unlit","transmission","transparent","transmission_trans","camera","pushRenderQueueRef","trans","getQueueType","QUEUE_TRANSPARENT","isUnlit","needDepth","getPickResultResolveFunc","getMaterial","objectColor","getObjectColor","set","getDrawableId","isBatchable","instanceList","hash","getInstanceId","drawableList","list","skinAnimation","getBoneMatrices","morphAnimation","getMorphData","skinAndMorphItemList","skinItemList","morphItemList","binaryInsert","sortDistance","getSortDistance","instanceData","mat","materialList","add","coreMaterial","applyTransformUniforms","getDrawableByColor","c","id","m","reset","itemListBundle","l","listInfo","info","renderQueue","renderBundle","dispose","skinRenderBundle","morphRenderBundle","skinAndMorphRenderBundle","instanceRenderBundle","end","createRenderBundles","frameCounter","frameInfo","lists","i","length","x","drawables","item","instanceUniforms","getInstanceUniforms","instanceUniformsSize","stride","MATERIAL_INSTANCE_DATA_OFFSET","numInstances","instanceItemList","applyInstanceOffsetAndStride","instanceInfo","applyMaterialUniforms","RenderBundleWrapper","left","right","newInstanceId","instanceId","mid","Math","floor","splice","sortTransparentItems","cameraPos","sort","a","b","drawableDistanceToCamera","onDispose","drawablePos","getNode","position","Vector3","distanceSq","newRenderItemListInfo","Set","newRenderItemListBundle"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Disposable } from '@zephyr3d/base';
|
|
2
|
+
import { getDevice } from '../app/api.js';
|
|
2
3
|
|
|
3
|
-
class RenderBundleWrapper {
|
|
4
|
+
class RenderBundleWrapper extends Disposable {
|
|
4
5
|
_renderBundles;
|
|
5
|
-
_disposed;
|
|
6
6
|
static _drawableContainer = new WeakMap();
|
|
7
7
|
static _materialContainer = new WeakMap();
|
|
8
|
-
|
|
8
|
+
static _primitiveContainer = new WeakMap();
|
|
9
|
+
/** @internal */ static addDrawable(drawable, material, primitive, wrapper, hash) {
|
|
9
10
|
let renderBundles = this._drawableContainer.get(drawable);
|
|
10
11
|
if (!renderBundles) {
|
|
11
12
|
renderBundles = [];
|
|
@@ -32,6 +33,14 @@ class RenderBundleWrapper {
|
|
|
32
33
|
}
|
|
33
34
|
ownDrawables.add(drawable);
|
|
34
35
|
}
|
|
36
|
+
if (primitive) {
|
|
37
|
+
let ownDrawables = this._primitiveContainer.get(primitive);
|
|
38
|
+
if (!ownDrawables) {
|
|
39
|
+
ownDrawables = new Set();
|
|
40
|
+
this._primitiveContainer.set(primitive, ownDrawables);
|
|
41
|
+
}
|
|
42
|
+
ownDrawables.add(drawable);
|
|
43
|
+
}
|
|
35
44
|
}
|
|
36
45
|
/** @internal */ static drawableChanged(drawable) {
|
|
37
46
|
const renderBundles = this._drawableContainer.get(drawable);
|
|
@@ -48,6 +57,34 @@ class RenderBundleWrapper {
|
|
|
48
57
|
}
|
|
49
58
|
}
|
|
50
59
|
}
|
|
60
|
+
/** @internal */ static primitiveChanged(primitive) {
|
|
61
|
+
const ownDrawables = this._primitiveContainer.get(primitive);
|
|
62
|
+
if (ownDrawables) {
|
|
63
|
+
for (const drawable of ownDrawables){
|
|
64
|
+
this.drawableChanged(drawable);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** @internal */ static primitiveAttached(primitive, drawable) {
|
|
69
|
+
if (this._drawableContainer.has(drawable)) {
|
|
70
|
+
const ownDrawables = this._primitiveContainer.get(primitive);
|
|
71
|
+
if (!ownDrawables) {
|
|
72
|
+
this._primitiveContainer.set(primitive, new Set([
|
|
73
|
+
drawable
|
|
74
|
+
]));
|
|
75
|
+
} else {
|
|
76
|
+
ownDrawables.add(drawable);
|
|
77
|
+
}
|
|
78
|
+
this.drawableChanged(drawable);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/** @internal */ static primitiveDetached(primitive, drawable) {
|
|
82
|
+
const ownDrawables = this._primitiveContainer.get(primitive);
|
|
83
|
+
if (ownDrawables && ownDrawables.has(drawable)) {
|
|
84
|
+
ownDrawables.delete(drawable);
|
|
85
|
+
this.drawableChanged(drawable);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
51
88
|
/** @internal */ static materialChanged(material) {
|
|
52
89
|
const ownDrawables = this._materialContainer.get(material);
|
|
53
90
|
if (ownDrawables) {
|
|
@@ -56,10 +93,26 @@ class RenderBundleWrapper {
|
|
|
56
93
|
}
|
|
57
94
|
}
|
|
58
95
|
}
|
|
59
|
-
/** @internal */ static
|
|
96
|
+
/** @internal */ static materialUniformsChanged(material) {
|
|
60
97
|
const ownDrawables = this._materialContainer.get(material);
|
|
61
|
-
if (ownDrawables
|
|
62
|
-
|
|
98
|
+
if (ownDrawables) {
|
|
99
|
+
for (const drawable of ownDrawables){
|
|
100
|
+
if (drawable.isBatchable()) {
|
|
101
|
+
drawable.applyMaterialUniformsAll();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/** @internal */ static materialAttached(material, drawable) {
|
|
107
|
+
if (this._drawableContainer.has(drawable)) {
|
|
108
|
+
const ownDrawables = this._materialContainer.get(material);
|
|
109
|
+
if (!ownDrawables) {
|
|
110
|
+
this._materialContainer.set(material, new Set([
|
|
111
|
+
drawable
|
|
112
|
+
]));
|
|
113
|
+
} else {
|
|
114
|
+
ownDrawables.add(drawable);
|
|
115
|
+
}
|
|
63
116
|
this.drawableChanged(drawable);
|
|
64
117
|
}
|
|
65
118
|
}
|
|
@@ -71,27 +124,24 @@ class RenderBundleWrapper {
|
|
|
71
124
|
}
|
|
72
125
|
}
|
|
73
126
|
constructor(){
|
|
127
|
+
super();
|
|
74
128
|
this._renderBundles = {};
|
|
75
|
-
this._disposed = false;
|
|
76
|
-
}
|
|
77
|
-
get disposed() {
|
|
78
|
-
return this._disposed;
|
|
79
129
|
}
|
|
80
130
|
getRenderBundle(hash) {
|
|
81
131
|
return this._renderBundles[hash] ?? null;
|
|
82
132
|
}
|
|
83
133
|
beginRenderBundle() {
|
|
84
|
-
|
|
134
|
+
getDevice().beginCapture();
|
|
85
135
|
}
|
|
86
136
|
endRenderBundle(hash) {
|
|
87
|
-
this._renderBundles[hash] =
|
|
137
|
+
this._renderBundles[hash] = getDevice().endCapture();
|
|
88
138
|
}
|
|
89
139
|
invalidate(hash) {
|
|
90
140
|
this._renderBundles[hash] = undefined;
|
|
91
141
|
}
|
|
92
|
-
|
|
142
|
+
onDispose() {
|
|
143
|
+
super.onDispose();
|
|
93
144
|
this._renderBundles = {};
|
|
94
|
-
this._disposed = true;
|
|
95
145
|
}
|
|
96
146
|
}
|
|
97
147
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderbundle_wrapper.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"renderbundle_wrapper.js","sources":["../../src/render/renderbundle_wrapper.ts"],"sourcesContent":["import type { RenderBundle } from '@zephyr3d/device';\r\nimport type { Material } from '../material';\r\nimport type { Drawable } from './drawable';\r\nimport type { Primitive } from './primitive';\r\nimport { Disposable } from '@zephyr3d/base';\r\nimport { getDevice } from '../app/api';\r\n\r\nexport class RenderBundleWrapper extends Disposable {\r\n private _renderBundles: Record<string, RenderBundle>;\r\n private static readonly _drawableContainer: WeakMap<\r\n Drawable,\r\n { wrapper: RenderBundleWrapper; hashes: string[] }[]\r\n > = new WeakMap();\r\n private static readonly _materialContainer: WeakMap<Material, Set<Drawable>> = new WeakMap();\r\n private static readonly _primitiveContainer: WeakMap<Primitive, Set<Drawable>> = new WeakMap();\r\n /** @internal */\r\n static addDrawable(\r\n drawable: Drawable,\r\n material: Material,\r\n primitive: Primitive,\r\n wrapper: RenderBundleWrapper,\r\n hash: string\r\n ) {\r\n let renderBundles = this._drawableContainer.get(drawable);\r\n if (!renderBundles) {\r\n renderBundles = [];\r\n this._drawableContainer.set(drawable, renderBundles);\r\n }\r\n const index = renderBundles.findIndex((rb) => rb.wrapper === wrapper);\r\n if (index < 0) {\r\n renderBundles.push({ wrapper: wrapper, hashes: [hash] });\r\n } else {\r\n if (!renderBundles[index].hashes.includes(hash)) {\r\n renderBundles[index].hashes.push(hash);\r\n }\r\n }\r\n if (material) {\r\n let ownDrawables = this._materialContainer.get(material);\r\n if (!ownDrawables) {\r\n ownDrawables = new Set();\r\n this._materialContainer.set(material, ownDrawables);\r\n }\r\n ownDrawables.add(drawable);\r\n }\r\n if (primitive) {\r\n let ownDrawables = this._primitiveContainer.get(primitive);\r\n if (!ownDrawables) {\r\n ownDrawables = new Set();\r\n this._primitiveContainer.set(primitive, ownDrawables);\r\n }\r\n ownDrawables.add(drawable);\r\n }\r\n }\r\n /** @internal */\r\n static drawableChanged(drawable: Drawable) {\r\n const renderBundles = this._drawableContainer.get(drawable);\r\n if (renderBundles) {\r\n for (let i = renderBundles.length - 1; i >= 0; i--) {\r\n const renderBundle = renderBundles[i].wrapper;\r\n if (renderBundle.disposed) {\r\n renderBundles.splice(i, 1);\r\n } else {\r\n for (const hash of renderBundles[i].hashes) {\r\n renderBundles[i].wrapper.invalidate(hash);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n static primitiveChanged(primitive: Primitive) {\r\n const ownDrawables = this._primitiveContainer.get(primitive);\r\n if (ownDrawables) {\r\n for (const drawable of ownDrawables) {\r\n this.drawableChanged(drawable);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n static primitiveAttached(primitive: Primitive, drawable: Drawable) {\r\n if (this._drawableContainer.has(drawable)) {\r\n const ownDrawables = this._primitiveContainer.get(primitive);\r\n if (!ownDrawables) {\r\n this._primitiveContainer.set(primitive, new Set([drawable]));\r\n } else {\r\n ownDrawables.add(drawable);\r\n }\r\n this.drawableChanged(drawable);\r\n }\r\n }\r\n /** @internal */\r\n static primitiveDetached(primitive: Primitive, drawable: Drawable) {\r\n const ownDrawables = this._primitiveContainer.get(primitive);\r\n if (ownDrawables && ownDrawables.has(drawable)) {\r\n ownDrawables.delete(drawable);\r\n this.drawableChanged(drawable);\r\n }\r\n }\r\n /** @internal */\r\n static materialChanged(material: Material) {\r\n const ownDrawables = this._materialContainer.get(material);\r\n if (ownDrawables) {\r\n for (const drawable of ownDrawables) {\r\n this.drawableChanged(drawable);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n static materialUniformsChanged(material: Material) {\r\n const ownDrawables = this._materialContainer.get(material);\r\n if (ownDrawables) {\r\n for (const drawable of ownDrawables) {\r\n if (drawable.isBatchable()) {\r\n drawable.applyMaterialUniformsAll();\r\n }\r\n }\r\n }\r\n }\r\n /** @internal */\r\n static materialAttached(material: Material, drawable: Drawable) {\r\n if (this._drawableContainer.has(drawable)) {\r\n const ownDrawables = this._materialContainer.get(material);\r\n if (!ownDrawables) {\r\n this._materialContainer.set(material, new Set([drawable]));\r\n } else {\r\n ownDrawables.add(drawable);\r\n }\r\n this.drawableChanged(drawable);\r\n }\r\n }\r\n /** @internal */\r\n static materialDetached(material: Material, drawable: Drawable) {\r\n const ownDrawables = this._materialContainer.get(material);\r\n if (ownDrawables && ownDrawables.has(drawable)) {\r\n ownDrawables.delete(drawable);\r\n this.drawableChanged(drawable);\r\n }\r\n }\r\n constructor() {\r\n super();\r\n this._renderBundles = {};\r\n }\r\n getRenderBundle(hash: string) {\r\n return this._renderBundles[hash] ?? null;\r\n }\r\n beginRenderBundle() {\r\n getDevice().beginCapture();\r\n }\r\n endRenderBundle(hash: string) {\r\n this._renderBundles[hash] = getDevice().endCapture();\r\n }\r\n invalidate(hash: string) {\r\n this._renderBundles[hash] = undefined;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._renderBundles = {};\r\n }\r\n}\r\n"],"names":["RenderBundleWrapper","Disposable","_renderBundles","_drawableContainer","WeakMap","_materialContainer","_primitiveContainer","addDrawable","drawable","material","primitive","wrapper","hash","renderBundles","get","set","index","findIndex","rb","push","hashes","includes","ownDrawables","Set","add","drawableChanged","i","length","renderBundle","disposed","splice","invalidate","primitiveChanged","primitiveAttached","has","primitiveDetached","delete","materialChanged","materialUniformsChanged","isBatchable","applyMaterialUniformsAll","materialAttached","materialDetached","getRenderBundle","beginRenderBundle","getDevice","beginCapture","endRenderBundle","endCapture","undefined","onDispose"],"mappings":"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"}
|