@zephyr3d/scene 0.9.5 → 0.9.7
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/dist/animation/joint_dynamics/controller.js +92 -32
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/convex_collider.js +320 -0
- package/dist/animation/joint_dynamics/convex_collider.js.map +1 -0
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +57 -19
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +71 -27
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +21 -20
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/skeleton.js +7 -10
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/app/engine.js +134 -140
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +47 -16
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +3 -1
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +346 -7
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +20 -16
- package/dist/avatar/wardrobe.js.map +1 -1
- package/dist/camera/camera.js +416 -210
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +1350 -621
- package/dist/index.js +6 -11
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +1 -1
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/lambert.js +1 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +23 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +178 -23
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +4 -4
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +2 -1
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +2 -1
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +63 -16
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +105 -32
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +16 -6
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +1 -1
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +276 -65
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +3 -3
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +2 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/msdf_text.js +3 -3
- package/dist/material/msdf_text.js.map +1 -1
- package/dist/material/mtoon.js +574 -0
- package/dist/material/mtoon.js.map +1 -0
- package/dist/material/pbrblueprint.js +499 -336
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrmr.js +118 -100
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +1 -1
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +324 -294
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +812 -0
- package/dist/material/subsurfaceprofile.js.map +1 -0
- package/dist/material/unlit.js +1 -1
- package/dist/material/unlit.js.map +1 -1
- package/dist/posteffect/compositor.js +46 -11
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/ssr.js +422 -96
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +1053 -0
- package/dist/posteffect/sss.js.map +1 -0
- package/dist/posteffect/taa.js +61 -60
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/abuffer_oit.js +63 -12
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +6 -5
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +1 -5
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +2 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +2 -1
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +2 -1
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +2 -1
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/lightpass.js +110 -23
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/render_queue.js +51 -8
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderer.js +80 -66
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +8 -0
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +481 -95
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +55 -0
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -1
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/renderpass.js +10 -4
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/sky.js +31 -1
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +23 -5
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +4 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -1
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +11 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/light.js +21 -3
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +29 -14
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +5 -2
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +5 -3
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +3 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +6 -5
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +4 -2
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +2 -1
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +4 -2
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/water.js +4 -2
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/shadow.js +26 -393
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shadow/esm.js +112 -12
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +2 -2
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +19 -10
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +58 -7
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +6 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +229 -0
- package/dist/shadow/shadow_region.js.map +1 -0
- package/dist/shadow/shadowmapper.js +67 -59
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/vsm.js +45 -19
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/text/font/cff_font.js +890 -0
- package/dist/text/font/cff_font.js.map +1 -0
- package/dist/text/font/font_asset.js +17 -3
- package/dist/text/font/font_asset.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +8 -8
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +31 -4
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +1 -17
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +327 -359
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +5 -2
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -1
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +249 -54
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +37 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +42 -3
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1112 -646
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +7 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +31 -12
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -1
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +3 -1
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +18 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -3
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +5 -2
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +3 -1
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -1
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/textures/ltcdata.js +6 -0
- package/dist/utility/textures/ltcdata.js.map +1 -0
- package/dist/utility/textures/ltclut.js +61 -0
- package/dist/utility/textures/ltclut.js.map +1 -0
- package/dist/values.js +9 -1
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/animation/ik/ik_chain_builder.js +0 -68
- package/dist/animation/ik/ik_chain_builder.js.map +0 -1
- package/dist/animation/ik/ik_pole_constraint.js +0 -123
- package/dist/animation/ik/ik_pole_constraint.js.map +0 -1
- package/dist/animation/ik/ik_track.js +0 -96
- package/dist/animation/ik/ik_track.js.map +0 -1
- package/dist/animation/ik_postprocessor.js +0 -71
- package/dist/animation/ik_postprocessor.js.map +0 -1
- package/dist/animation/joint_dynamics/math.js +0 -16
- package/dist/animation/joint_dynamics/math.js.map +0 -1
- package/dist/animation/manual_transform_processor.js +0 -156
- package/dist/animation/manual_transform_processor.js.map +0 -1
- package/dist/animation/skeleton_postprocessor.js +0 -50
- package/dist/animation/skeleton_postprocessor.js.map +0 -1
- package/dist/animation/spring2/collision.js +0 -469
- package/dist/animation/spring2/collision.js.map +0 -1
- package/dist/animation/spring2/constraints.js +0 -329
- package/dist/animation/spring2/constraints.js.map +0 -1
- package/dist/animation/spring2/controller.js +0 -434
- package/dist/animation/spring2/controller.js.map +0 -1
- package/dist/animation/spring2/math.js +0 -16
- package/dist/animation/spring2/math.js.map +0 -1
- package/dist/animation/spring2/solver.js +0 -624
- package/dist/animation/spring2/solver.js.map +0 -1
- package/dist/animation/spring2/spring_system.js +0 -118
- package/dist/animation/spring2/spring_system.js.map +0 -1
- package/dist/animation/spring2/types.js +0 -19
- package/dist/animation/spring2/types.js.map +0 -1
- package/dist/animation/spring_postprocessor.js +0 -54
- package/dist/animation/spring_postprocessor.js.map +0 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +0 -1276
- package/dist/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/asset/loaders/gltf/helpers.js +0 -331
- package/dist/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/material/sprite3d.js +0 -301
- package/dist/material/sprite3d.js.map +0 -1
- package/dist/material/sprite3d_std.js +0 -116
- package/dist/material/sprite3d_std.js.map +0 -1
- package/dist/material/sprite3dblueprint.js +0 -235
- package/dist/material/sprite3dblueprint.js.map +0 -1
- package/dist/material/sprite_sdf.js +0 -106
- package/dist/material/sprite_sdf.js.map +0 -1
- package/dist/material/terrainmaterial.js +0 -368
- package/dist/material/terrainmaterial.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +0 -38
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +0 -10
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +0 -127
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +0 -1
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +0 -263
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +0 -1
- package/dist/render/deferredlightpass.js +0 -510
- package/dist/render/deferredlightpass.js.map +0 -1
- package/dist/render/deferredshadowlightpass.js +0 -428
- package/dist/render/deferredshadowlightpass.js.map +0 -1
- package/dist/render/gbufferpass.js +0 -50
- package/dist/render/gbufferpass.js.map +0 -1
- package/dist/scene/sdftextsprite.js +0 -322
- package/dist/scene/sdftextsprite.js.map +0 -1
- package/dist/scene/sprite3d.js +0 -18
- package/dist/scene/sprite3d.js.map +0 -1
- package/dist/scene/terrain/grass.js +0 -280
- package/dist/scene/terrain/grass.js.map +0 -1
- package/dist/scene/terrain/heightfield.js +0 -475
- package/dist/scene/terrain/heightfield.js.map +0 -1
- package/dist/scene/terrain/patch.js +0 -532
- package/dist/scene/terrain/patch.js.map +0 -1
- package/dist/scene/terrain/quadtree.js +0 -461
- package/dist/scene/terrain/quadtree.js.map +0 -1
- package/dist/scene/terrain/terrain.js +0 -231
- package/dist/scene/terrain/terrain.js.map +0 -1
- package/dist/src/animation/animation.js +0 -127
- package/dist/src/animation/animation.js.map +0 -1
- package/dist/src/animation/animationset.js +0 -255
- package/dist/src/animation/animationset.js.map +0 -1
- package/dist/src/animation/animationtrack.js +0 -34
- package/dist/src/animation/animationtrack.js.map +0 -1
- package/dist/src/animation/eulerrotationtrack.js +0 -52
- package/dist/src/animation/eulerrotationtrack.js.map +0 -1
- package/dist/src/animation/morphtarget.js +0 -93
- package/dist/src/animation/morphtarget.js.map +0 -1
- package/dist/src/animation/morphtrack.js +0 -70
- package/dist/src/animation/morphtrack.js.map +0 -1
- package/dist/src/animation/proptrack.js +0 -161
- package/dist/src/animation/proptrack.js.map +0 -1
- package/dist/src/animation/rotationtrack.js +0 -51
- package/dist/src/animation/rotationtrack.js.map +0 -1
- package/dist/src/animation/scaletrack.js +0 -50
- package/dist/src/animation/scaletrack.js.map +0 -1
- package/dist/src/animation/skeleton.js +0 -204
- package/dist/src/animation/skeleton.js.map +0 -1
- package/dist/src/animation/translationtrack.js +0 -50
- package/dist/src/animation/translationtrack.js.map +0 -1
- package/dist/src/app/app.js +0 -129
- package/dist/src/app/app.js.map +0 -1
- package/dist/src/app/inputmgr.js +0 -267
- package/dist/src/app/inputmgr.js.map +0 -1
- package/dist/src/asset/assetmanager.js +0 -404
- package/dist/src/asset/assetmanager.js.map +0 -1
- package/dist/src/asset/builtin.js +0 -337
- package/dist/src/asset/builtin.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds.js +0 -470
- package/dist/src/asset/loaders/dds/dds.js.map +0 -1
- package/dist/src/asset/loaders/dds/dds_loader.js +0 -28
- package/dist/src/asset/loaders/dds/dds_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/gltf_loader.js +0 -1265
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +0 -1
- package/dist/src/asset/loaders/gltf/helpers.js +0 -327
- package/dist/src/asset/loaders/gltf/helpers.js.map +0 -1
- package/dist/src/asset/loaders/hdr/hdr.js +0 -180
- package/dist/src/asset/loaders/hdr/hdr.js.map +0 -1
- package/dist/src/asset/loaders/image/tga_Loader.js +0 -116
- package/dist/src/asset/loaders/image/tga_Loader.js.map +0 -1
- package/dist/src/asset/loaders/image/webimage_loader.js +0 -63
- package/dist/src/asset/loaders/image/webimage_loader.js.map +0 -1
- package/dist/src/asset/loaders/loader.js +0 -45
- package/dist/src/asset/loaders/loader.js.map +0 -1
- package/dist/src/asset/model.js +0 -414
- package/dist/src/asset/model.js.map +0 -1
- package/dist/src/blitter/bilateralblur.js +0 -221
- package/dist/src/blitter/bilateralblur.js.map +0 -1
- package/dist/src/blitter/blitter.js +0 -390
- package/dist/src/blitter/blitter.js.map +0 -1
- package/dist/src/blitter/box.js +0 -118
- package/dist/src/blitter/box.js.map +0 -1
- package/dist/src/blitter/copy.js +0 -22
- package/dist/src/blitter/copy.js.map +0 -1
- package/dist/src/blitter/gaussianblur.js +0 -228
- package/dist/src/blitter/gaussianblur.js.map +0 -1
- package/dist/src/camera/base.js +0 -92
- package/dist/src/camera/base.js.map +0 -1
- package/dist/src/camera/camera.js +0 -1005
- package/dist/src/camera/camera.js.map +0 -1
- package/dist/src/camera/fps.js +0 -238
- package/dist/src/camera/fps.js.map +0 -1
- package/dist/src/camera/orbit.js +0 -245
- package/dist/src/camera/orbit.js.map +0 -1
- package/dist/src/camera/orthocamera.js +0 -167
- package/dist/src/camera/orthocamera.js.map +0 -1
- package/dist/src/camera/perspectivecamera.js +0 -141
- package/dist/src/camera/perspectivecamera.js.map +0 -1
- package/dist/src/index.js +0 -120
- package/dist/src/index.js.map +0 -1
- package/dist/src/material/blinn.js +0 -81
- package/dist/src/material/blinn.js.map +0 -1
- package/dist/src/material/grassmaterial.js +0 -113
- package/dist/src/material/grassmaterial.js.map +0 -1
- package/dist/src/material/lambert.js +0 -92
- package/dist/src/material/lambert.js.map +0 -1
- package/dist/src/material/material.js +0 -301
- package/dist/src/material/material.js.map +0 -1
- package/dist/src/material/meshmaterial.js +0 -704
- package/dist/src/material/meshmaterial.js.map +0 -1
- package/dist/src/material/mixins/albedocolor.js +0 -76
- package/dist/src/material/mixins/albedocolor.js.map +0 -1
- package/dist/src/material/mixins/foliage.js +0 -47
- package/dist/src/material/mixins/foliage.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/blinnphong.js +0 -112
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/lambert.js +0 -58
- package/dist/src/material/mixins/lightmodel/lambert.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +0 -178
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +0 -1
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +0 -139
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +0 -1
- package/dist/src/material/mixins/lit.js +0 -476
- package/dist/src/material/mixins/lit.js.map +0 -1
- package/dist/src/material/mixins/pbr/common.js +0 -918
- package/dist/src/material/mixins/pbr/common.js.map +0 -1
- package/dist/src/material/mixins/texture.js +0 -172
- package/dist/src/material/mixins/texture.js.map +0 -1
- package/dist/src/material/mixins/vertexcolor.js +0 -56
- package/dist/src/material/mixins/vertexcolor.js.map +0 -1
- package/dist/src/material/particle.js +0 -178
- package/dist/src/material/particle.js.map +0 -1
- package/dist/src/material/pbrmr.js +0 -97
- package/dist/src/material/pbrmr.js.map +0 -1
- package/dist/src/material/pbrsg.js +0 -97
- package/dist/src/material/pbrsg.js.map +0 -1
- package/dist/src/material/shader/helper.js +0 -1209
- package/dist/src/material/shader/helper.js.map +0 -1
- package/dist/src/material/terrain-cm.js +0 -606
- package/dist/src/material/terrain-cm.js.map +0 -1
- package/dist/src/material/terrainmaterial.js +0 -375
- package/dist/src/material/terrainmaterial.js.map +0 -1
- package/dist/src/material/unlit.js +0 -41
- package/dist/src/material/unlit.js.map +0 -1
- package/dist/src/material/water.js +0 -417
- package/dist/src/material/water.js.map +0 -1
- package/dist/src/posteffect/bloom.js +0 -361
- package/dist/src/posteffect/bloom.js.map +0 -1
- package/dist/src/posteffect/compositor.js +0 -226
- package/dist/src/posteffect/compositor.js.map +0 -1
- package/dist/src/posteffect/fxaa.js +0 -273
- package/dist/src/posteffect/fxaa.js.map +0 -1
- package/dist/src/posteffect/grayscale.js +0 -69
- package/dist/src/posteffect/grayscale.js.map +0 -1
- package/dist/src/posteffect/motionblur.js +0 -96
- package/dist/src/posteffect/motionblur.js.map +0 -1
- package/dist/src/posteffect/posteffect.js +0 -126
- package/dist/src/posteffect/posteffect.js.map +0 -1
- package/dist/src/posteffect/sao.js +0 -324
- package/dist/src/posteffect/sao.js.map +0 -1
- package/dist/src/posteffect/ssr.js +0 -489
- package/dist/src/posteffect/ssr.js.map +0 -1
- package/dist/src/posteffect/taa.js +0 -172
- package/dist/src/posteffect/taa.js.map +0 -1
- package/dist/src/posteffect/tonemap.js +0 -94
- package/dist/src/posteffect/tonemap.js.map +0 -1
- package/dist/src/render/abuffer_oit.js +0 -361
- package/dist/src/render/abuffer_oit.js.map +0 -1
- package/dist/src/render/clipmap.js +0 -851
- package/dist/src/render/clipmap.js.map +0 -1
- package/dist/src/render/cluster_light.js +0 -333
- package/dist/src/render/cluster_light.js.map +0 -1
- package/dist/src/render/cull_visitor.js +0 -187
- package/dist/src/render/cull_visitor.js.map +0 -1
- package/dist/src/render/depthpass.js +0 -68
- package/dist/src/render/depthpass.js.map +0 -1
- package/dist/src/render/drawable_mixin.js +0 -227
- package/dist/src/render/drawable_mixin.js.map +0 -1
- package/dist/src/render/envlight.js +0 -463
- package/dist/src/render/envlight.js.map +0 -1
- package/dist/src/render/fbm_wavegenerator.js +0 -251
- package/dist/src/render/fbm_wavegenerator.js.map +0 -1
- package/dist/src/render/fft_wavegenerator.js +0 -1006
- package/dist/src/render/fft_wavegenerator.js.map +0 -1
- package/dist/src/render/fullscreenquad.js +0 -38
- package/dist/src/render/fullscreenquad.js.map +0 -1
- package/dist/src/render/gerstner_wavegenerator.js +0 -314
- package/dist/src/render/gerstner_wavegenerator.js.map +0 -1
- package/dist/src/render/globalbindgroup_allocator.js +0 -60
- package/dist/src/render/globalbindgroup_allocator.js.map +0 -1
- package/dist/src/render/hzb.js +0 -273
- package/dist/src/render/hzb.js.map +0 -1
- package/dist/src/render/lightpass.js +0 -172
- package/dist/src/render/lightpass.js.map +0 -1
- package/dist/src/render/objectcolorpass.js +0 -51
- package/dist/src/render/objectcolorpass.js.map +0 -1
- package/dist/src/render/primitive.js +0 -364
- package/dist/src/render/primitive.js.map +0 -1
- package/dist/src/render/render_queue.js +0 -467
- package/dist/src/render/render_queue.js.map +0 -1
- package/dist/src/render/renderbundle_wrapper.js +0 -152
- package/dist/src/render/renderbundle_wrapper.js.map +0 -1
- package/dist/src/render/renderer.js +0 -455
- package/dist/src/render/renderer.js.map +0 -1
- package/dist/src/render/renderpass.js +0 -200
- package/dist/src/render/renderpass.js.map +0 -1
- package/dist/src/render/shadowmap_pass.js +0 -56
- package/dist/src/render/shadowmap_pass.js.map +0 -1
- package/dist/src/render/sky.js +0 -1103
- package/dist/src/render/sky.js.map +0 -1
- package/dist/src/render/weightedblended_oit.js +0 -168
- package/dist/src/render/weightedblended_oit.js.map +0 -1
- package/dist/src/scene/batchgroup.js +0 -162
- package/dist/src/scene/batchgroup.js.map +0 -1
- package/dist/src/scene/environment.js +0 -209
- package/dist/src/scene/environment.js.map +0 -1
- package/dist/src/scene/graph_node.js +0 -72
- package/dist/src/scene/graph_node.js.map +0 -1
- package/dist/src/scene/light.js +0 -416
- package/dist/src/scene/light.js.map +0 -1
- package/dist/src/scene/mesh.js +0 -341
- package/dist/src/scene/mesh.js.map +0 -1
- package/dist/src/scene/octree.js +0 -649
- package/dist/src/scene/octree.js.map +0 -1
- package/dist/src/scene/particlesys.js +0 -738
- package/dist/src/scene/particlesys.js.map +0 -1
- package/dist/src/scene/raycast_visitor.js +0 -103
- package/dist/src/scene/raycast_visitor.js.map +0 -1
- package/dist/src/scene/scene.js +0 -284
- package/dist/src/scene/scene.js.map +0 -1
- package/dist/src/scene/scene_node.js +0 -732
- package/dist/src/scene/scene_node.js.map +0 -1
- package/dist/src/scene/terrain/grass.js +0 -278
- package/dist/src/scene/terrain/grass.js.map +0 -1
- package/dist/src/scene/terrain/heightfield.js +0 -475
- package/dist/src/scene/terrain/heightfield.js.map +0 -1
- package/dist/src/scene/terrain/patch.js +0 -530
- package/dist/src/scene/terrain/patch.js.map +0 -1
- package/dist/src/scene/terrain/quadtree.js +0 -461
- package/dist/src/scene/terrain/quadtree.js.map +0 -1
- package/dist/src/scene/terrain/terrain.js +0 -246
- package/dist/src/scene/terrain/terrain.js.map +0 -1
- package/dist/src/scene/terrain-cm/grass.js +0 -594
- package/dist/src/scene/terrain-cm/grass.js.map +0 -1
- package/dist/src/scene/terrain-cm/grassmaterial.js +0 -159
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +0 -1
- package/dist/src/scene/terrain-cm/terrain-cm.js +0 -538
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +0 -1
- package/dist/src/scene/water.js +0 -374
- package/dist/src/scene/water.js.map +0 -1
- package/dist/src/shaders/atmosphere.js +0 -957
- package/dist/src/shaders/atmosphere.js.map +0 -1
- package/dist/src/shaders/fog.js +0 -112
- package/dist/src/shaders/fog.js.map +0 -1
- package/dist/src/shaders/misc.js +0 -266
- package/dist/src/shaders/misc.js.map +0 -1
- package/dist/src/shaders/noise.js +0 -222
- package/dist/src/shaders/noise.js.map +0 -1
- package/dist/src/shaders/pbr.js +0 -51
- package/dist/src/shaders/pbr.js.map +0 -1
- package/dist/src/shaders/shadow.js +0 -636
- package/dist/src/shaders/shadow.js.map +0 -1
- package/dist/src/shaders/ssr.js +0 -490
- package/dist/src/shaders/ssr.js.map +0 -1
- package/dist/src/shaders/temporal.js +0 -215
- package/dist/src/shaders/temporal.js.map +0 -1
- package/dist/src/shaders/water.js +0 -756
- package/dist/src/shaders/water.js.map +0 -1
- package/dist/src/shadow/esm.js +0 -237
- package/dist/src/shadow/esm.js.map +0 -1
- package/dist/src/shadow/pcf_opt.js +0 -181
- package/dist/src/shadow/pcf_opt.js.map +0 -1
- package/dist/src/shadow/pcf_pd.js +0 -189
- package/dist/src/shadow/pcf_pd.js.map +0 -1
- package/dist/src/shadow/shader.js +0 -37
- package/dist/src/shadow/shader.js.map +0 -1
- package/dist/src/shadow/shadow_impl.js +0 -15
- package/dist/src/shadow/shadow_impl.js.map +0 -1
- package/dist/src/shadow/shadowmapper.js +0 -790
- package/dist/src/shadow/shadowmapper.js.map +0 -1
- package/dist/src/shadow/ssm.js +0 -159
- package/dist/src/shadow/ssm.js.map +0 -1
- package/dist/src/shadow/vsm.js +0 -297
- package/dist/src/shadow/vsm.js.map +0 -1
- package/dist/src/shapes/box.js +0 -386
- package/dist/src/shapes/box.js.map +0 -1
- package/dist/src/shapes/cylinder.js +0 -125
- package/dist/src/shapes/cylinder.js.map +0 -1
- package/dist/src/shapes/plane.js +0 -88
- package/dist/src/shapes/plane.js.map +0 -1
- package/dist/src/shapes/shape.js +0 -87
- package/dist/src/shapes/shape.js.map +0 -1
- package/dist/src/shapes/sphere.js +0 -114
- package/dist/src/shapes/sphere.js.map +0 -1
- package/dist/src/shapes/tetrahedron.js +0 -188
- package/dist/src/shapes/tetrahedron.js.map +0 -1
- package/dist/src/shapes/torus.js +0 -111
- package/dist/src/shapes/torus.js.map +0 -1
- package/dist/src/utility/aabbtree.js +0 -400
- package/dist/src/utility/aabbtree.js.map +0 -1
- package/dist/src/utility/bounding_volume.js +0 -29
- package/dist/src/utility/bounding_volume.js.map +0 -1
- package/dist/src/utility/debug.js +0 -28
- package/dist/src/utility/debug.js.map +0 -1
- package/dist/src/utility/draco/decoder.js +0 -116
- package/dist/src/utility/draco/decoder.js.map +0 -1
- package/dist/src/utility/misc.js +0 -105
- package/dist/src/utility/misc.js.map +0 -1
- package/dist/src/utility/panorama.js +0 -163
- package/dist/src/utility/panorama.js.map +0 -1
- package/dist/src/utility/pmrem.js +0 -354
- package/dist/src/utility/pmrem.js.map +0 -1
- package/dist/src/utility/rendermipmap.js +0 -115
- package/dist/src/utility/rendermipmap.js.map +0 -1
- package/dist/src/utility/serialization/json.js +0 -402
- package/dist/src/utility/serialization/json.js.map +0 -1
- package/dist/src/utility/serialization/manager.js +0 -623
- package/dist/src/utility/serialization/manager.js.map +0 -1
- package/dist/src/utility/serialization/scene/animation.js +0 -248
- package/dist/src/utility/serialization/scene/animation.js.map +0 -1
- package/dist/src/utility/serialization/scene/batch.js +0 -59
- package/dist/src/utility/serialization/scene/batch.js.map +0 -1
- package/dist/src/utility/serialization/scene/camera.js +0 -790
- package/dist/src/utility/serialization/scene/camera.js.map +0 -1
- package/dist/src/utility/serialization/scene/common.js +0 -222
- package/dist/src/utility/serialization/scene/common.js.map +0 -1
- package/dist/src/utility/serialization/scene/light.js +0 -575
- package/dist/src/utility/serialization/scene/light.js.map +0 -1
- package/dist/src/utility/serialization/scene/material.js +0 -1111
- package/dist/src/utility/serialization/scene/material.js.map +0 -1
- package/dist/src/utility/serialization/scene/mesh.js +0 -148
- package/dist/src/utility/serialization/scene/mesh.js.map +0 -1
- package/dist/src/utility/serialization/scene/misc.js +0 -39
- package/dist/src/utility/serialization/scene/misc.js.map +0 -1
- package/dist/src/utility/serialization/scene/node.js +0 -451
- package/dist/src/utility/serialization/scene/node.js.map +0 -1
- package/dist/src/utility/serialization/scene/particle.js +0 -425
- package/dist/src/utility/serialization/scene/particle.js.map +0 -1
- package/dist/src/utility/serialization/scene/primitive.js +0 -692
- package/dist/src/utility/serialization/scene/primitive.js.map +0 -1
- package/dist/src/utility/serialization/scene/scene.js +0 -704
- package/dist/src/utility/serialization/scene/scene.js.map +0 -1
- package/dist/src/utility/serialization/scene/terrain.js +0 -488
- package/dist/src/utility/serialization/scene/terrain.js.map +0 -1
- package/dist/src/utility/serialization/scene/water.js +0 -465
- package/dist/src/utility/serialization/scene/water.js.map +0 -1
- package/dist/src/utility/shprojector.js +0 -297
- package/dist/src/utility/shprojector.js.map +0 -1
- package/dist/src/utility/textures/ggxlut.js +0 -213
- package/dist/src/utility/textures/ggxlut.js.map +0 -1
- package/dist/src/utility/textures/gradientnoise.js +0 -62
- package/dist/src/utility/textures/gradientnoise.js.map +0 -1
- package/dist/src/utility/textures/randomnoise.js +0 -41
- package/dist/src/utility/textures/randomnoise.js.map +0 -1
- package/dist/src/values.js +0 -162
- package/dist/src/values.js.map +0 -1
- package/dist/utility/blueprint/material/common.js +0 -7
- package/dist/utility/blueprint/material/common.js.map +0 -1
- package/dist/utility/serialization/blueprint/constants.js +0 -255
- package/dist/utility/serialization/blueprint/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/constants.js +0 -203
- package/dist/utility/serialization/blueprint/material/constants.js.map +0 -1
- package/dist/utility/serialization/blueprint/material/texture.js +0 -165
- package/dist/utility/serialization/blueprint/material/texture.js.map +0 -1
- package/dist/utility/serialization/scene/cloth_script.js +0 -834
- package/dist/utility/serialization/scene/cloth_script.js.map +0 -1
- package/dist/utility/serialization/scene/spring_script.js +0 -596
- package/dist/utility/serialization/scene/spring_script.js.map +0 -1
|
@@ -109,11 +109,29 @@ import { Disposable, Vector4 } from '@zephyr3d/base';
|
|
|
109
109
|
depthState.enableWrite(false).enableTest(true);
|
|
110
110
|
}
|
|
111
111
|
/** @internal */ composite(ctx, device, accumColor, accumAlpha) {
|
|
112
|
-
device.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
112
|
+
const currentFramebuffer = device.getFramebuffer();
|
|
113
|
+
const colorAttachment = currentFramebuffer?.getColorAttachments()[0] ?? null;
|
|
114
|
+
const singleColorFramebuffer = currentFramebuffer && currentFramebuffer.getColorAttachments().length > 1 && colorAttachment ? device.pool.fetchTemporalFramebuffer(false, 0, 0, colorAttachment, currentFramebuffer.getDepthAttachment(), false) : null;
|
|
115
|
+
if (singleColorFramebuffer) {
|
|
116
|
+
const viewport = device.getViewport();
|
|
117
|
+
const scissor = device.getScissor();
|
|
118
|
+
device.pushDeviceStates();
|
|
119
|
+
device.setFramebuffer(singleColorFramebuffer);
|
|
120
|
+
device.setViewport(viewport);
|
|
121
|
+
device.setScissor(scissor);
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
device.setProgram(WeightedBlendedOIT.getCompositeProgram(device));
|
|
125
|
+
WeightedBlendedOIT._compositeBindGroup.setTexture('accumColorTex', accumColor);
|
|
126
|
+
WeightedBlendedOIT._compositeBindGroup.setTexture('accumAlphaTex', accumAlpha);
|
|
127
|
+
device.setBindGroup(0, WeightedBlendedOIT._compositeBindGroup);
|
|
128
|
+
drawFullscreenQuad(WeightedBlendedOIT._compositeRenderStates);
|
|
129
|
+
} finally{
|
|
130
|
+
if (singleColorFramebuffer) {
|
|
131
|
+
device.popDeviceStates();
|
|
132
|
+
device.pool.releaseFrameBuffer(singleColorFramebuffer);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
117
135
|
}
|
|
118
136
|
/** @internal */ getAccumFramebuffer(ctx, device) {
|
|
119
137
|
const width = ctx.depthTexture.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"weightedblended_oit.js","sources":["../../src/render/weightedblended_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { Disposable, Vector4 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Weighted-blended OIT renderer.\r\n *\r\n * @remarks\r\n * The weighed-blended OIT renderer supports both WebGL, WebGL2 and WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class WeightedBlendedOIT extends Disposable implements OIT {\r\n /** Type name of WeightedBlendedOIT */\r\n public static readonly type = 'wb';\r\n private static _compositeProgram: GPUProgram;\r\n private static _compositeBindGroup: BindGroup;\r\n private static _compositeRenderStates: RenderStateSet;\r\n\r\n constructor() {\r\n super();\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return WeightedBlendedOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(_deviceType: string) {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(_ctx: DrawContext) {\r\n return 1;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(_ctx: DrawContext) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.$outputs.outColor = pb.vec4();\r\n scope.$outputs.outAlpha = pb.getDevice().type === 'webgl' ? pb.vec4() : pb.float();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = this.getAccumFramebuffer(ctx, device);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(accumBuffer);\r\n device.clearFrameBuffer(new Vector4(0, 0, 0, 1), null, null);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = device.getFramebuffer()!;\r\n device.popDeviceStates();\r\n const accumTargets = accumBuffer.getColorAttachments();\r\n this.composite(ctx, device, accumTargets[0] as Texture2D, accumTargets[1] as Texture2D);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this.getType();\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(_ctx: DrawContext, _bindGroup: BindGroup) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('Z_WBOIT_depthWeight', [pb.float('z'), pb.float('a')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.mul(\r\n pb.pow(pb.add(pb.min(1, pb.mul(this.a, 10)), 0.01), 3),\r\n 1e8,\r\n pb.pow(pb.sub(1, pb.mul(this.z, 0.9)), 2)\r\n ),\r\n 1e-2,\r\n 3e3\r\n )\r\n );\r\n });\r\n pb.func('Z_WBOIT_output', [pb.vec4('color')], function () {\r\n this.$l.w = this.Z_WBOIT_depthWeight(this.$builtins.fragCoord.z, this.color.a);\r\n this.$outputs[0] = pb.vec4(pb.mul(this.color.rgb, this.w), this.color.a);\r\n this.$outputs[1] =\r\n pb.getDevice().type === 'webgl'\r\n ? pb.vec4(pb.mul(this.color.a, this.w))\r\n : pb.mul(this.color.a, this.w);\r\n });\r\n scope.Z_WBOIT_output(color);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const blendingState = rs.useBlendingState();\r\n blendingState.enable(true);\r\n blendingState.setBlendEquation('add', 'add');\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n blendingState.setBlendFuncAlpha('zero', 'inv-src-alpha');\r\n const depthState = rs.useDepthState();\r\n depthState.enableWrite(false).enableTest(true);\r\n }\r\n /** @internal */\r\n private composite(ctx: DrawContext, device: AbstractDevice, accumColor: Texture2D, accumAlpha: Texture2D) {\r\n device.setProgram(WeightedBlendedOIT.getCompositeProgram(device));\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumColorTex', accumColor);\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumAlphaTex', accumAlpha);\r\n device.setBindGroup(0, WeightedBlendedOIT._compositeBindGroup);\r\n drawFullscreenQuad(WeightedBlendedOIT._compositeRenderStates);\r\n }\r\n /** @internal */\r\n private getAccumFramebuffer(ctx: DrawContext, device: AbstractDevice) {\r\n const width = ctx.depthTexture!.width;\r\n const height = ctx.depthTexture!.height;\r\n const accumColor = device.pool.fetchTemporalTexture2D(false, 'rgba16f', width, height, false);\r\n const accumAlpha = device.pool.fetchTemporalTexture2D(\r\n false,\r\n device.type === 'webgl' ? 'rgba16f' : 'r16f',\r\n width,\r\n height,\r\n false\r\n );\r\n const fb = device.pool.createTemporalFramebuffer(true, [accumColor, accumAlpha], ctx.depthTexture);\r\n device.pool.releaseTexture(accumColor);\r\n device.pool.releaseTexture(accumAlpha);\r\n return fb;\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.accumColorTex = pb.tex2D().uniform(0);\r\n this.accumAlphaTex = pb.tex2D().uniform(0);\r\n pb.main(function () {\r\n this.$l.accumColor = pb.textureSample(this.accumColorTex, this.$inputs.uv);\r\n this.$l.accumAlpha = pb.textureSample(this.accumAlphaTex, this.$inputs.uv);\r\n this.$l.r = this.accumColor.a;\r\n this.accumColor.a = this.accumAlpha.r;\r\n this.$outputs.outColor = pb.vec4(\r\n pb.div(this.accumColor.rgb, pb.clamp(this.accumColor.a, 0.0001, 50000)),\r\n this.r\r\n );\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@WBOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('inv-src-alpha', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n return this._compositeProgram;\r\n }\r\n}\r\n"],"names":["WeightedBlendedOIT","Disposable","type","_compositeProgram","_compositeBindGroup","_compositeRenderStates","getType","supportDevice","_deviceType","wantsPremultipliedAlpha","begin","_ctx","end","setupFragmentOutput","scope","pb","$builder","$outputs","outColor","vec4","outAlpha","getDevice","float","beginPass","ctx","_pass","device","accumBuffer","getAccumFramebuffer","pushDeviceStates","setFramebuffer","clearFrameBuffer","Vector4","endPass","getFramebuffer","popDeviceStates","accumTargets","getColorAttachments","composite","calculateHash","applyUniforms","_bindGroup","outputFragmentColor","color","func","$return","clamp","mul","pow","add","min","a","sub","z","$l","w","Z_WBOIT_depthWeight","$builtins","fragCoord","rgb","Z_WBOIT_output","setRenderStates","rs","blendingState","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","depthState","useDepthState","enableWrite","enableTest","accumColor","accumAlpha","setProgram","getCompositeProgram","setTexture","setBindGroup","drawFullscreenQuad","width","depthTexture","height","pool","fetchTemporalTexture2D","fb","createTemporalFramebuffer","releaseTexture","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","xy","y","neg","fragment","accumColorTex","tex2D","uniform","accumAlphaTex","textureSample","r","div","name","createBindGroup","bindGroupLayouts","createRenderStateSet"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"weightedblended_oit.js","sources":["../../src/render/weightedblended_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { Disposable, Vector4 } from '@zephyr3d/base';\r\n\r\n/**\r\n * Weighted-blended OIT renderer.\r\n *\r\n * @remarks\r\n * The weighed-blended OIT renderer supports both WebGL, WebGL2 and WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class WeightedBlendedOIT extends Disposable implements OIT {\r\n /** Type name of WeightedBlendedOIT */\r\n public static readonly type = 'wb';\r\n private static _compositeProgram: GPUProgram;\r\n private static _compositeBindGroup: BindGroup;\r\n private static _compositeRenderStates: RenderStateSet;\r\n\r\n constructor() {\r\n super();\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return WeightedBlendedOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(_deviceType: string) {\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return false;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(_ctx: DrawContext) {\r\n return 1;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(_ctx: DrawContext) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.$outputs.outColor = pb.vec4();\r\n scope.$outputs.outAlpha = pb.getDevice().type === 'webgl' ? pb.vec4() : pb.float();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = this.getAccumFramebuffer(ctx, device);\r\n device.pushDeviceStates();\r\n device.setFramebuffer(accumBuffer);\r\n device.clearFrameBuffer(new Vector4(0, 0, 0, 1), null, null);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, _pass: number) {\r\n const device = ctx.device;\r\n const accumBuffer = device.getFramebuffer()!;\r\n device.popDeviceStates();\r\n const accumTargets = accumBuffer.getColorAttachments();\r\n this.composite(ctx, device, accumTargets[0] as Texture2D, accumTargets[1] as Texture2D);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this.getType();\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(_ctx: DrawContext, _bindGroup: BindGroup) {\r\n return;\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n pb.func('Z_WBOIT_depthWeight', [pb.float('z'), pb.float('a')], function () {\r\n this.$return(\r\n pb.clamp(\r\n pb.mul(\r\n pb.pow(pb.add(pb.min(1, pb.mul(this.a, 10)), 0.01), 3),\r\n 1e8,\r\n pb.pow(pb.sub(1, pb.mul(this.z, 0.9)), 2)\r\n ),\r\n 1e-2,\r\n 3e3\r\n )\r\n );\r\n });\r\n pb.func('Z_WBOIT_output', [pb.vec4('color')], function () {\r\n this.$l.w = this.Z_WBOIT_depthWeight(this.$builtins.fragCoord.z, this.color.a);\r\n this.$outputs[0] = pb.vec4(pb.mul(this.color.rgb, this.w), this.color.a);\r\n this.$outputs[1] =\r\n pb.getDevice().type === 'webgl'\r\n ? pb.vec4(pb.mul(this.color.a, this.w))\r\n : pb.mul(this.color.a, this.w);\r\n });\r\n scope.Z_WBOIT_output(color);\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const blendingState = rs.useBlendingState();\r\n blendingState.enable(true);\r\n blendingState.setBlendEquation('add', 'add');\r\n blendingState.setBlendFuncRGB('one', 'one');\r\n blendingState.setBlendFuncAlpha('zero', 'inv-src-alpha');\r\n const depthState = rs.useDepthState();\r\n depthState.enableWrite(false).enableTest(true);\r\n }\r\n /** @internal */\r\n private composite(ctx: DrawContext, device: AbstractDevice, accumColor: Texture2D, accumAlpha: Texture2D) {\r\n const currentFramebuffer = device.getFramebuffer();\r\n const colorAttachment = currentFramebuffer?.getColorAttachments()[0] ?? null;\r\n const singleColorFramebuffer =\r\n currentFramebuffer && currentFramebuffer.getColorAttachments().length > 1 && colorAttachment\r\n ? device.pool.fetchTemporalFramebuffer(\r\n false,\r\n 0,\r\n 0,\r\n colorAttachment,\r\n currentFramebuffer.getDepthAttachment(),\r\n false\r\n )\r\n : null;\r\n if (singleColorFramebuffer) {\r\n const viewport = device.getViewport();\r\n const scissor = device.getScissor();\r\n device.pushDeviceStates();\r\n device.setFramebuffer(singleColorFramebuffer);\r\n device.setViewport(viewport);\r\n device.setScissor(scissor);\r\n }\r\n try {\r\n device.setProgram(WeightedBlendedOIT.getCompositeProgram(device));\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumColorTex', accumColor);\r\n WeightedBlendedOIT._compositeBindGroup.setTexture('accumAlphaTex', accumAlpha);\r\n device.setBindGroup(0, WeightedBlendedOIT._compositeBindGroup);\r\n drawFullscreenQuad(WeightedBlendedOIT._compositeRenderStates);\r\n } finally {\r\n if (singleColorFramebuffer) {\r\n device.popDeviceStates();\r\n device.pool.releaseFrameBuffer(singleColorFramebuffer);\r\n }\r\n }\r\n }\r\n /** @internal */\r\n private getAccumFramebuffer(ctx: DrawContext, device: AbstractDevice) {\r\n const width = ctx.depthTexture!.width;\r\n const height = ctx.depthTexture!.height;\r\n const accumColor = device.pool.fetchTemporalTexture2D(false, 'rgba16f', width, height, false);\r\n const accumAlpha = device.pool.fetchTemporalTexture2D(\r\n false,\r\n device.type === 'webgl' ? 'rgba16f' : 'r16f',\r\n width,\r\n height,\r\n false\r\n );\r\n const fb = device.pool.createTemporalFramebuffer(true, [accumColor, accumAlpha], ctx.depthTexture);\r\n device.pool.releaseTexture(accumColor);\r\n device.pool.releaseTexture(accumAlpha);\r\n return fb;\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.accumColorTex = pb.tex2D().uniform(0);\r\n this.accumAlphaTex = pb.tex2D().uniform(0);\r\n pb.main(function () {\r\n this.$l.accumColor = pb.textureSample(this.accumColorTex, this.$inputs.uv);\r\n this.$l.accumAlpha = pb.textureSample(this.accumAlphaTex, this.$inputs.uv);\r\n this.$l.r = this.accumColor.a;\r\n this.accumColor.a = this.accumAlpha.r;\r\n this.$outputs.outColor = pb.vec4(\r\n pb.div(this.accumColor.rgb, pb.clamp(this.accumColor.a, 0.0001, 50000)),\r\n this.r\r\n );\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@WBOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('inv-src-alpha', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n return this._compositeProgram;\r\n }\r\n}\r\n"],"names":["WeightedBlendedOIT","Disposable","type","_compositeProgram","_compositeBindGroup","_compositeRenderStates","getType","supportDevice","_deviceType","wantsPremultipliedAlpha","begin","_ctx","end","setupFragmentOutput","scope","pb","$builder","$outputs","outColor","vec4","outAlpha","getDevice","float","beginPass","ctx","_pass","device","accumBuffer","getAccumFramebuffer","pushDeviceStates","setFramebuffer","clearFrameBuffer","Vector4","endPass","getFramebuffer","popDeviceStates","accumTargets","getColorAttachments","composite","calculateHash","applyUniforms","_bindGroup","outputFragmentColor","color","func","$return","clamp","mul","pow","add","min","a","sub","z","$l","w","Z_WBOIT_depthWeight","$builtins","fragCoord","rgb","Z_WBOIT_output","setRenderStates","rs","blendingState","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","depthState","useDepthState","enableWrite","enableTest","accumColor","accumAlpha","currentFramebuffer","colorAttachment","singleColorFramebuffer","length","pool","fetchTemporalFramebuffer","getDepthAttachment","viewport","getViewport","scissor","getScissor","setViewport","setScissor","setProgram","getCompositeProgram","setTexture","setBindGroup","drawFullscreenQuad","releaseFrameBuffer","width","depthTexture","height","fetchTemporalTexture2D","fb","createTemporalFramebuffer","releaseTexture","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","xy","y","neg","fragment","accumColorTex","tex2D","uniform","accumAlphaTex","textureSample","r","div","name","createBindGroup","bindGroupLayouts","createRenderStateSet"],"mappings":"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"}
|
package/dist/scene/basesprite.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { applyMixins, DRef, Vector2, Vector3, Quaternion } from '@zephyr3d/base';
|
|
2
2
|
import { GraphNode } from './graph_node.js';
|
|
3
|
-
import { getDevice } from '../app/api.js';
|
|
4
3
|
import { QUEUE_OPAQUE } from '../values.js';
|
|
5
4
|
import '../render/render_queue.js';
|
|
6
5
|
import { RenderBundleWrapper } from '../render/renderbundle_wrapper.js';
|
|
6
|
+
import { getDevice } from '../app/api.js';
|
|
7
7
|
import { Primitive } from '../render/primitive.js';
|
|
8
8
|
import '@zephyr3d/device';
|
|
9
9
|
import '../material/shader/helper.js';
|
|
@@ -11,17 +11,19 @@ import '../material/lambert.js';
|
|
|
11
11
|
import '../material/blinn.js';
|
|
12
12
|
import '../material/unlit.js';
|
|
13
13
|
import '../material/particle.js';
|
|
14
|
+
import '../material/subsurfaceprofile.js';
|
|
14
15
|
import '../material/meshmaterial.js';
|
|
15
16
|
import '../material/grassmaterial.js';
|
|
16
17
|
import '../material/terrain-cm.js';
|
|
17
18
|
import '../material/pbrmr.js';
|
|
18
19
|
import '../material/pbrsg.js';
|
|
20
|
+
import '../material/mtoon.js';
|
|
19
21
|
import '../material/pbrblueprint.js';
|
|
20
22
|
import { SpriteMaterial } from '../material/sprite.js';
|
|
21
23
|
import '../material/sprite_std.js';
|
|
22
|
-
import '../material/msdf_text.js';
|
|
23
24
|
import '../utility/blueprint/material/texture.js';
|
|
24
25
|
import '../render/rendergraph/forward_plus_builder.js';
|
|
26
|
+
import '../render/lightpass.js';
|
|
25
27
|
import '../render/sky.js';
|
|
26
28
|
import '../render/clipmap.js';
|
|
27
29
|
import '../shaders/atmosphere.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basesprite.js","sources":["../../src/scene/basesprite.ts"],"sourcesContent":["import type { Matrix4x4, Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, DRef, Quaternion, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport type { RenderPass, BatchDrawable, DrawContext, PickTarget, RenderQueue } from '../render';\r\nimport { Primitive } from '../render';\r\nimport type { RenderBundle } from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { QUEUE_OPAQUE } from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport { SpriteMaterial } from '../material/sprite';\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class BaseSprite<M extends SpriteMaterial>\r\n extends applyMixins(GraphNode, mixinDrawable)\r\n implements BatchDrawable\r\n{\r\n /** @internal */\r\n private static _primitive: DRef<Primitive> = new DRef();\r\n /** @internal */\r\n protected readonly _material: DRef<M>;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _renderBundle: Record<string, RenderBundle>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _anchor: Vector2;\r\n /** @internal */\r\n protected _rotateAngle: number;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._material = new DRef();\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = getDevice().type !== 'webgl';\r\n this._anchor = new Vector2(0.5, 0.5);\r\n this._rotateAngle = 0;\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n }\r\n /**\r\n * Returns the batch instance ID for the current render pass.\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n }\r\n /**\r\n * Returns the packed instance-uniform buffer used for batching.\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material.get()!;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m && m instanceof SpriteMaterial) {\r\n this._material.set(m);\r\n if (m) {\r\n this.onSetMaterial(m);\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash = m ? `${this.constructor.name}:${this._scene?.id ?? 0}:${m.instanceId}` : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n }\r\n }\r\n get anchorX() {\r\n return this._anchor.x;\r\n }\r\n set anchorX(value) {\r\n if (this._anchor.x !== value) {\r\n this._anchor.x = value;\r\n this.invalidateWorldBoundingVolume(false);\r\n const material = this._material.get();\r\n if (material) {\r\n material.anchorX = this._anchor.x;\r\n }\r\n }\r\n }\r\n get anchorY() {\r\n return this._anchor.y;\r\n }\r\n set anchorY(value) {\r\n if (this._anchor.y !== value) {\r\n this._anchor.y = value;\r\n this.invalidateWorldBoundingVolume(false);\r\n const material = this._material.get();\r\n if (material) {\r\n material.anchorY = this._anchor.y;\r\n }\r\n }\r\n }\r\n get uvTopLeft() {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n return new Vector2(uvinfo.x, uvinfo.y);\r\n }\r\n set uvTopLeft(value) {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n this._material.get()!.setUVInfo(value.x, value.y, uvinfo.z, uvinfo.w);\r\n }\r\n get uvBottomRight() {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n return new Vector2(uvinfo.z, uvinfo.w);\r\n }\r\n set uvBottomRight(value) {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n this._material.get()!.setUVInfo(uvinfo.x, uvinfo.y, value.x, value.y);\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return this._batchable && !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const material = this.material;\r\n const primitive = this.getPrimitive();\r\n if (material && primitive) {\r\n if (this._useRenderBundle && !ctx.instanceData && hash) {\r\n if (this._materialChangeTag !== material.changeTag) {\r\n this._renderBundle = {};\r\n this._materialChangeTag = material.changeTag;\r\n }\r\n const renderBundle = this._renderBundle[hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle[hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n let primitive = BaseSprite._primitive.get();\r\n if (!primitive) {\r\n primitive = new Primitive();\r\n primitive.createAndSetVertexBuffer('position_f32', new Float32Array([0, 1, 2, 3]));\r\n primitive.createAndSetIndexBuffer(new Uint16Array([0, 1, 2, 3]));\r\n primitive.primitiveType = 'triangle-strip';\r\n BaseSprite._primitive.set(primitive);\r\n }\r\n return primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeBoundingVolume}\r\n */\r\n computeBoundingVolume() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeWorldBoundingVolume}\r\n */\r\n computeWorldBoundingVolume() {\r\n const p = this.worldMatrix.transformPointAffine(Vector3.zero());\r\n const scaleX = Math.hypot(this.worldMatrix[0], this.worldMatrix[1], this.worldMatrix[2]);\r\n const scaleY = Math.hypot(this.worldMatrix[4], this.worldMatrix[5], this.worldMatrix[6]);\r\n const mat = this._material?.get();\r\n if (mat) {\r\n const boundingBox = new BoundingBox();\r\n const cx = Math.max(Math.abs(this._anchor.x), Math.abs(1 - this._anchor.x)) * scaleX;\r\n const cy = Math.max(Math.abs(this._anchor.y), Math.abs(1 - this._anchor.y)) * scaleY;\r\n const size = Math.max(cx, cy);\r\n boundingBox.minPoint.setXYZ(p.x - size, p.y - size, p.z - size);\r\n boundingBox.maxPoint.setXYZ(p.x + size, p.y + size, p.z + size);\r\n return boundingBox;\r\n }\r\n return null;\r\n }\r\n calculateLocalTransform(outMatrix: Matrix4x4) {\r\n const rot = this.rotation.toEulerAngles().z;\r\n const rotationZ = Quaternion.fromAxisAngle(Vector3.axisPZ(), rot);\r\n outMatrix.compose(this._scaling, rotationZ, this._position);\r\n if (this._material?.get()) {\r\n this._rotateAngle = -rot;\r\n this._material.get()!.rotation = this._rotateAngle;\r\n }\r\n\r\n //outMatrix.scaling(this.scale).translateLeft(this._position);\r\n }\r\n calculateWorldTransform(outMatrix: Matrix4x4) {\r\n outMatrix.set(this.localMatrix);\r\n if (this.parent) {\r\n outMatrix.m03 += this.parent.worldMatrix.m03;\r\n outMatrix.m13 += this.parent.worldMatrix.m13;\r\n outMatrix.m23 += this.parent.worldMatrix.m23;\r\n }\r\n }\r\n /** Called when new material is set */\r\n protected onSetMaterial(material: M) {\r\n material.anchor = this._anchor;\r\n material.rotation = this._rotateAngle;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n}\r\n"],"names":["BaseSprite","applyMixins","GraphNode","mixinDrawable","_primitive","DRef","scene","_material","_instanceHash","_pickTarget","node","_batchable","getDevice","type","_anchor","Vector2","_rotateAngle","_renderBundle","_useRenderBundle","_materialChangeTag","getInstanceId","_renderPass","worldMatrixDet","getInstanceUniforms","get","$instanceUniforms","getPickTarget","setPickTarget","label","material","m","SpriteMaterial","set","onSetMaterial","RenderBundleWrapper","materialAttached","coreMaterial","name","_scene","id","instanceId","drawableChanged","anchorX","x","value","invalidateWorldBoundingVolume","anchorY","y","uvTopLeft","uvinfo","setUVInfo","z","w","uvBottomRight","getMorphData","getMorphInfo","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","draw","ctx","renderQueue","hash","primitive","getPrimitive","instanceData","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","getMaterial","Primitive","createAndSetVertexBuffer","Float32Array","createAndSetIndexBuffer","Uint16Array","primitiveType","getBoneMatrices","getNode","computeBoundingVolume","computeWorldBoundingVolume","p","worldMatrix","transformPointAffine","Vector3","zero","scaleX","Math","hypot","scaleY","mat","boundingBox","BoundingBox","cx","max","abs","cy","size","minPoint","setXYZ","maxPoint","calculateLocalTransform","outMatrix","rot","rotation","toEulerAngles","rotationZ","Quaternion","fromAxisAngle","axisPZ","compose","_scaling","_position","calculateWorldTransform","localMatrix","parent","m03","m13","m23","anchor","onDispose","dispose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"basesprite.js","sources":["../../src/scene/basesprite.ts"],"sourcesContent":["import type { Matrix4x4, Nullable } from '@zephyr3d/base';\r\nimport { applyMixins, DRef, Quaternion, Vector2, Vector3 } from '@zephyr3d/base';\r\nimport { GraphNode } from './graph_node';\r\nimport type { RenderPass, BatchDrawable, DrawContext, PickTarget, RenderQueue } from '../render';\r\nimport { Primitive } from '../render';\r\nimport type { RenderBundle } from '@zephyr3d/device';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox } from '../utility/bounding_volume';\r\nimport { QUEUE_OPAQUE } from '../values';\r\nimport { mixinDrawable } from '../render/drawable_mixin';\r\nimport { RenderBundleWrapper } from '../render/renderbundle_wrapper';\r\nimport type { SceneNode } from './scene_node';\r\nimport { getDevice } from '../app/api';\r\nimport { SpriteMaterial } from '../material/sprite';\r\n\r\n/**\r\n * Mesh node\r\n * @public\r\n */\r\nexport class BaseSprite<M extends SpriteMaterial>\r\n extends applyMixins(GraphNode, mixinDrawable)\r\n implements BatchDrawable\r\n{\r\n /** @internal */\r\n private static _primitive: DRef<Primitive> = new DRef();\r\n /** @internal */\r\n protected readonly _material: DRef<M>;\r\n /** @internal */\r\n protected _instanceHash: Nullable<string>;\r\n /** @internal */\r\n protected _batchable: boolean;\r\n /** @internal */\r\n protected _pickTarget: PickTarget;\r\n /** @internal */\r\n protected _renderBundle: Record<string, RenderBundle>;\r\n /** @internal */\r\n protected _useRenderBundle: boolean;\r\n /** @internal */\r\n protected _materialChangeTag: Nullable<number>;\r\n /** @internal */\r\n protected _anchor: Vector2;\r\n /** @internal */\r\n protected _rotateAngle: number;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._material = new DRef();\r\n this._instanceHash = null;\r\n this._pickTarget = { node: this };\r\n this._batchable = getDevice().type !== 'webgl';\r\n this._anchor = new Vector2(0.5, 0.5);\r\n this._rotateAngle = 0;\r\n this._renderBundle = {};\r\n this._useRenderBundle = true;\r\n this._materialChangeTag = null;\r\n }\r\n /**\r\n * Returns the batch instance ID for the current render pass.\r\n */\r\n getInstanceId(_renderPass: RenderPass) {\r\n return `${this._instanceHash}:${this.worldMatrixDet >= 0}`;\r\n }\r\n /**\r\n * Returns the packed instance-uniform buffer used for batching.\r\n */\r\n getInstanceUniforms() {\r\n return this._material.get()!.$instanceUniforms;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPickTarget }\r\n */\r\n getPickTarget() {\r\n return this._pickTarget;\r\n }\r\n setPickTarget(node: SceneNode, label?: string) {\r\n this._pickTarget = { node, label };\r\n }\r\n /** Material of the mesh */\r\n get material() {\r\n return this._material.get()!;\r\n }\r\n set material(m) {\r\n if (this._material.get() !== m && m instanceof SpriteMaterial) {\r\n this._material.set(m);\r\n if (m) {\r\n this.onSetMaterial(m);\r\n RenderBundleWrapper.materialAttached(m.coreMaterial, this);\r\n }\r\n this._instanceHash = m ? `${this.constructor.name}:${this._scene?.id ?? 0}:${m.instanceId}` : null;\r\n RenderBundleWrapper.drawableChanged(this);\r\n this._materialChangeTag = null;\r\n }\r\n }\r\n get anchorX() {\r\n return this._anchor.x;\r\n }\r\n set anchorX(value) {\r\n if (this._anchor.x !== value) {\r\n this._anchor.x = value;\r\n this.invalidateWorldBoundingVolume(false);\r\n const material = this._material.get();\r\n if (material) {\r\n material.anchorX = this._anchor.x;\r\n }\r\n }\r\n }\r\n get anchorY() {\r\n return this._anchor.y;\r\n }\r\n set anchorY(value) {\r\n if (this._anchor.y !== value) {\r\n this._anchor.y = value;\r\n this.invalidateWorldBoundingVolume(false);\r\n const material = this._material.get();\r\n if (material) {\r\n material.anchorY = this._anchor.y;\r\n }\r\n }\r\n }\r\n get uvTopLeft() {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n return new Vector2(uvinfo.x, uvinfo.y);\r\n }\r\n set uvTopLeft(value) {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n this._material.get()!.setUVInfo(value.x, value.y, uvinfo.z, uvinfo.w);\r\n }\r\n get uvBottomRight() {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n return new Vector2(uvinfo.z, uvinfo.w);\r\n }\r\n set uvBottomRight(value) {\r\n const uvinfo = this._material.get()!.uvinfo;\r\n this._material.get()!.setUVInfo(uvinfo.x, uvinfo.y, value.x, value.y);\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphData}\r\n */\r\n getMorphData() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMorphInfo}\r\n */\r\n getMorphInfo() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isBatchable}\r\n */\r\n isBatchable(): this is BatchDrawable {\r\n return this._batchable && !!this._material.get() && this._material.get()!.isBatchable();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getQueueType}\r\n */\r\n getQueueType() {\r\n return this.material?.getQueueType() ?? QUEUE_OPAQUE;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.isUnlit}\r\n */\r\n isUnlit() {\r\n return !this.material?.supportLighting();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneColor}\r\n */\r\n needSceneColor() {\r\n return this.material?.needSceneColor();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.needSceneDepth}\r\n */\r\n needSceneDepth() {\r\n return this.material?.needSceneDepth();\r\n }\r\n /**\r\n * {@inheritDoc Drawable.draw}\r\n */\r\n draw(ctx: DrawContext, renderQueue: Nullable<RenderQueue>, hash?: string) {\r\n const material = this.material;\r\n const primitive = this.getPrimitive();\r\n if (material && primitive) {\r\n if (this._useRenderBundle && !ctx.instanceData && hash) {\r\n if (this._materialChangeTag !== material.changeTag) {\r\n this._renderBundle = {};\r\n this._materialChangeTag = material.changeTag;\r\n }\r\n const renderBundle = this._renderBundle[hash];\r\n if (!renderBundle) {\r\n ctx.device.beginCapture();\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n this._renderBundle[hash] = ctx.device.endCapture();\r\n } else {\r\n ctx.device.executeRenderBundle(renderBundle);\r\n }\r\n } else {\r\n this.bind(ctx, renderQueue);\r\n material.draw(primitive, ctx);\r\n }\r\n }\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getMaterial}\r\n */\r\n getMaterial() {\r\n return this.material;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getPrimitive}\r\n */\r\n getPrimitive() {\r\n let primitive = BaseSprite._primitive.get();\r\n if (!primitive) {\r\n primitive = new Primitive();\r\n primitive.createAndSetVertexBuffer('position_f32', new Float32Array([0, 1, 2, 3]));\r\n primitive.createAndSetIndexBuffer(new Uint16Array([0, 1, 2, 3]));\r\n primitive.primitiveType = 'triangle-strip';\r\n BaseSprite._primitive.set(primitive);\r\n }\r\n return primitive;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getBoneMatrices}\r\n */\r\n getBoneMatrices() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc Drawable.getNode}\r\n */\r\n getNode() {\r\n // mesh transform should be ignored when skinned\r\n return this;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeBoundingVolume}\r\n */\r\n computeBoundingVolume() {\r\n return null;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.computeWorldBoundingVolume}\r\n */\r\n computeWorldBoundingVolume() {\r\n const p = this.worldMatrix.transformPointAffine(Vector3.zero());\r\n const scaleX = Math.hypot(this.worldMatrix[0], this.worldMatrix[1], this.worldMatrix[2]);\r\n const scaleY = Math.hypot(this.worldMatrix[4], this.worldMatrix[5], this.worldMatrix[6]);\r\n const mat = this._material?.get();\r\n if (mat) {\r\n const boundingBox = new BoundingBox();\r\n const cx = Math.max(Math.abs(this._anchor.x), Math.abs(1 - this._anchor.x)) * scaleX;\r\n const cy = Math.max(Math.abs(this._anchor.y), Math.abs(1 - this._anchor.y)) * scaleY;\r\n const size = Math.max(cx, cy);\r\n boundingBox.minPoint.setXYZ(p.x - size, p.y - size, p.z - size);\r\n boundingBox.maxPoint.setXYZ(p.x + size, p.y + size, p.z + size);\r\n return boundingBox;\r\n }\r\n return null;\r\n }\r\n calculateLocalTransform(outMatrix: Matrix4x4) {\r\n const rot = this.rotation.toEulerAngles().z;\r\n const rotationZ = Quaternion.fromAxisAngle(Vector3.axisPZ(), rot);\r\n outMatrix.compose(this._scaling, rotationZ, this._position);\r\n if (this._material?.get()) {\r\n this._rotateAngle = -rot;\r\n this._material.get()!.rotation = this._rotateAngle;\r\n }\r\n\r\n //outMatrix.scaling(this.scale).translateLeft(this._position);\r\n }\r\n calculateWorldTransform(outMatrix: Matrix4x4) {\r\n outMatrix.set(this.localMatrix);\r\n if (this.parent) {\r\n outMatrix.m03 += this.parent.worldMatrix.m03;\r\n outMatrix.m13 += this.parent.worldMatrix.m13;\r\n outMatrix.m23 += this.parent.worldMatrix.m23;\r\n }\r\n }\r\n /** Called when new material is set */\r\n protected onSetMaterial(material: M) {\r\n material.anchor = this._anchor;\r\n material.rotation = this._rotateAngle;\r\n }\r\n /** Disposes the mesh node */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._material.dispose();\r\n RenderBundleWrapper.drawableChanged(this);\r\n }\r\n}\r\n"],"names":["BaseSprite","applyMixins","GraphNode","mixinDrawable","_primitive","DRef","scene","_material","_instanceHash","_pickTarget","node","_batchable","getDevice","type","_anchor","Vector2","_rotateAngle","_renderBundle","_useRenderBundle","_materialChangeTag","getInstanceId","_renderPass","worldMatrixDet","getInstanceUniforms","get","$instanceUniforms","getPickTarget","setPickTarget","label","material","m","SpriteMaterial","set","onSetMaterial","RenderBundleWrapper","materialAttached","coreMaterial","name","_scene","id","instanceId","drawableChanged","anchorX","x","value","invalidateWorldBoundingVolume","anchorY","y","uvTopLeft","uvinfo","setUVInfo","z","w","uvBottomRight","getMorphData","getMorphInfo","isBatchable","getQueueType","QUEUE_OPAQUE","isUnlit","supportLighting","needSceneColor","needSceneDepth","draw","ctx","renderQueue","hash","primitive","getPrimitive","instanceData","changeTag","renderBundle","device","beginCapture","bind","endCapture","executeRenderBundle","getMaterial","Primitive","createAndSetVertexBuffer","Float32Array","createAndSetIndexBuffer","Uint16Array","primitiveType","getBoneMatrices","getNode","computeBoundingVolume","computeWorldBoundingVolume","p","worldMatrix","transformPointAffine","Vector3","zero","scaleX","Math","hypot","scaleY","mat","boundingBox","BoundingBox","cx","max","abs","cy","size","minPoint","setXYZ","maxPoint","calculateLocalTransform","outMatrix","rot","rotation","toEulerAngles","rotationZ","Quaternion","fromAxisAngle","axisPZ","compose","_scaling","_position","calculateWorldTransform","localMatrix","parent","m03","m13","m23","anchor","onDispose","dispose"],"mappings":"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"}
|
package/dist/scene/batchgroup.js
CHANGED
|
@@ -9,17 +9,19 @@ import '../material/lambert.js';
|
|
|
9
9
|
import '../material/blinn.js';
|
|
10
10
|
import '../material/unlit.js';
|
|
11
11
|
import '../material/particle.js';
|
|
12
|
+
import '../material/subsurfaceprofile.js';
|
|
12
13
|
import '../material/meshmaterial.js';
|
|
13
14
|
import '../material/grassmaterial.js';
|
|
14
15
|
import '../material/terrain-cm.js';
|
|
15
16
|
import '../material/pbrmr.js';
|
|
16
17
|
import '../material/pbrsg.js';
|
|
18
|
+
import '../material/mtoon.js';
|
|
17
19
|
import '../material/pbrblueprint.js';
|
|
18
20
|
import '../material/sprite.js';
|
|
19
21
|
import '../material/sprite_std.js';
|
|
20
|
-
import '../material/msdf_text.js';
|
|
21
22
|
import '../utility/blueprint/material/texture.js';
|
|
22
23
|
import '../render/rendergraph/forward_plus_builder.js';
|
|
24
|
+
import '../render/lightpass.js';
|
|
23
25
|
import '../render/sky.js';
|
|
24
26
|
import '../render/clipmap.js';
|
|
25
27
|
import '../shaders/atmosphere.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batchgroup.js","sources":["../../src/scene/batchgroup.ts"],"sourcesContent":["import { GraphNode } from './graph_node';\r\nimport type { CullVisitor, RenderPass } from '../render';\r\nimport { RenderQueue, InstanceBindGroupAllocator } from '../render';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport { Matrix4x4 } from '@zephyr3d/base';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\n\r\n/**\r\n * Batch group node\r\n * @public\r\n */\r\nexport class BatchGroup extends GraphNode {\r\n private readonly _renderQueueMap: Map<\r\n RenderPass,\r\n {\r\n queue: RenderQueue;\r\n tag: number;\r\n }\r\n >;\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n private _changeTag: number;\r\n private _staticBV: boolean;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._renderQueueMap = new Map();\r\n this._changeTag = 0;\r\n this._bindGroupAllocator = new InstanceBindGroupAllocator();\r\n this._staticBV = false;\r\n const bvCallback = () => {\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n };\r\n const primitiveCallback = () => {\r\n bvCallback();\r\n this.invalidate();\r\n };\r\n const materialCallback = () => {\r\n this.invalidate();\r\n };\r\n this.on('visiblechanged', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n this.invalidate();\r\n return true;\r\n }\r\n return false;\r\n });\r\n });\r\n this.on('nodeattached', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = false;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.on('bvchanged', bvCallback);\r\n child.on('primitive_changed', primitiveCallback);\r\n child.on('material_changed', materialCallback);\r\n this.invalidate();\r\n }\r\n });\r\n });\r\n this.on('noderemoved', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = true;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.off('bvchanged', bvCallback);\r\n child.off('primitive_changed', primitiveCallback);\r\n child.off('material_changed', materialCallback);\r\n this.invalidate();\r\n }\r\n });\r\n });\r\n }\r\n /** Gets the batch group name. */\r\n getName() {\r\n return this._name;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isBatchGroup}\r\n */\r\n isBatchGroup(): this is BatchGroup {\r\n return true;\r\n }\r\n /**\r\n * Force the batch state to be rebuilt\r\n */\r\n invalidate() {\r\n this._changeTag++;\r\n }\r\n /** @internal */\r\n protected _onDetached() {\r\n super._onDetached();\r\n // Usually the node will be garbage collected after it is detached,\r\n // We should reset the render queue to release the render bundles.\r\n this._renderQueueMap.forEach((val) => {\r\n val.queue.reset();\r\n });\r\n this.invalidate();\r\n }\r\n /** @internal */\r\n protected _onAttached() {\r\n // Reset the render queue when attached to a new scene.\r\n this.invalidate();\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bv = new BoundingBox();\r\n const invWorldMatrix = Matrix4x4.invertAffine(this.worldMatrix);\r\n bv.beginExtend();\r\n this.iterate((node) => {\r\n if (node.isMesh()) {\r\n Matrix4x4.multiplyAffine(invWorldMatrix, node.worldMatrix, tmpMatrix);\r\n const wb = node.getBoundingVolume()!.transform(tmpMatrix).toAABB();\r\n bv.extend(wb.minPoint);\r\n bv.extend(wb.maxPoint);\r\n }\r\n });\r\n return bv.isValid() ? bv : null;\r\n }\r\n /** @internal */\r\n setBoundingVolume(bv: BoundingVolume) {\r\n this._staticBV = !!bv;\r\n super.setBoundingVolume(bv);\r\n }\r\n /** @internal */\r\n cull(cullVisitor: CullVisitor) {\r\n let queueInfo = this._renderQueueMap.get(cullVisitor.renderPass);\r\n if (!queueInfo) {\r\n queueInfo = {\r\n queue: new RenderQueue(cullVisitor.renderPass, this._bindGroupAllocator),\r\n tag: -1\r\n };\r\n this._renderQueueMap.set(cullVisitor.renderPass, queueInfo);\r\n }\r\n if (queueInfo.tag !== this._changeTag) {\r\n queueInfo.tag = this._changeTag;\r\n queueInfo.queue.reset();\r\n const frustumCulling = cullVisitor.frustumCulling;\r\n const renderQueue = cullVisitor.renderQueue;\r\n cullVisitor.frustumCulling = false;\r\n cullVisitor.renderQueue = queueInfo.queue;\r\n this.iterate((node) => {\r\n if (node.isMesh()) {\r\n cullVisitor.visit(node);\r\n }\r\n });\r\n queueInfo.queue.end(cullVisitor.camera, true);\r\n cullVisitor.frustumCulling = frustumCulling;\r\n cullVisitor.renderQueue = renderQueue;\r\n }\r\n cullVisitor.pushRenderQueue(queueInfo.queue);\r\n }\r\n}\r\n"],"names":["tmpMatrix","Matrix4x4","BatchGroup","GraphNode","_renderQueueMap","_bindGroupAllocator","_changeTag","_staticBV","scene","Map","InstanceBindGroupAllocator","bvCallback","invalidateBoundingVolume","primitiveCallback","invalidate","materialCallback","on","node","iterate","child","isMesh","placeToOctree","off","getName","_name","isBatchGroup","_onDetached","forEach","val","queue","reset","computeBoundingVolume","bv","BoundingBox","invWorldMatrix","invertAffine","worldMatrix","beginExtend","multiplyAffine","wb","getBoundingVolume","transform","toAABB","extend","minPoint","maxPoint","isValid","setBoundingVolume","cull","cullVisitor","queueInfo","get","renderPass","RenderQueue","tag","set","frustumCulling","renderQueue","visit","end","camera","pushRenderQueue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"batchgroup.js","sources":["../../src/scene/batchgroup.ts"],"sourcesContent":["import { GraphNode } from './graph_node';\r\nimport type { CullVisitor, RenderPass } from '../render';\r\nimport { RenderQueue, InstanceBindGroupAllocator } from '../render';\r\nimport type { Scene } from './scene';\r\nimport { BoundingBox, type BoundingVolume } from '../utility/bounding_volume';\r\nimport { Matrix4x4 } from '@zephyr3d/base';\r\n\r\nconst tmpMatrix = new Matrix4x4();\r\n\r\n/**\r\n * Batch group node\r\n * @public\r\n */\r\nexport class BatchGroup extends GraphNode {\r\n private readonly _renderQueueMap: Map<\r\n RenderPass,\r\n {\r\n queue: RenderQueue;\r\n tag: number;\r\n }\r\n >;\r\n private readonly _bindGroupAllocator: InstanceBindGroupAllocator;\r\n private _changeTag: number;\r\n private _staticBV: boolean;\r\n /**\r\n * Creates an instance of mesh node\r\n * @param scene - The scene to which the mesh node belongs\r\n */\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this._renderQueueMap = new Map();\r\n this._changeTag = 0;\r\n this._bindGroupAllocator = new InstanceBindGroupAllocator();\r\n this._staticBV = false;\r\n const bvCallback = () => {\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n };\r\n const primitiveCallback = () => {\r\n bvCallback();\r\n this.invalidate();\r\n };\r\n const materialCallback = () => {\r\n this.invalidate();\r\n };\r\n this.on('visiblechanged', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n this.invalidate();\r\n return true;\r\n }\r\n return false;\r\n });\r\n });\r\n this.on('nodeattached', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = false;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.on('bvchanged', bvCallback);\r\n child.on('primitive_changed', primitiveCallback);\r\n child.on('material_changed', materialCallback);\r\n this.invalidate();\r\n }\r\n });\r\n });\r\n this.on('noderemoved', (node) => {\r\n node.iterate((child) => {\r\n if (child.isMesh()) {\r\n child.placeToOctree = true;\r\n if (!this._staticBV) {\r\n this.invalidateBoundingVolume();\r\n }\r\n child.off('bvchanged', bvCallback);\r\n child.off('primitive_changed', primitiveCallback);\r\n child.off('material_changed', materialCallback);\r\n this.invalidate();\r\n }\r\n });\r\n });\r\n }\r\n /** Gets the batch group name. */\r\n getName() {\r\n return this._name;\r\n }\r\n /**\r\n * {@inheritDoc SceneNode.isBatchGroup}\r\n */\r\n isBatchGroup(): this is BatchGroup {\r\n return true;\r\n }\r\n /**\r\n * Force the batch state to be rebuilt\r\n */\r\n invalidate() {\r\n this._changeTag++;\r\n }\r\n /** @internal */\r\n protected _onDetached() {\r\n super._onDetached();\r\n // Usually the node will be garbage collected after it is detached,\r\n // We should reset the render queue to release the render bundles.\r\n this._renderQueueMap.forEach((val) => {\r\n val.queue.reset();\r\n });\r\n this.invalidate();\r\n }\r\n /** @internal */\r\n protected _onAttached() {\r\n // Reset the render queue when attached to a new scene.\r\n this.invalidate();\r\n }\r\n /** @internal */\r\n computeBoundingVolume() {\r\n const bv = new BoundingBox();\r\n const invWorldMatrix = Matrix4x4.invertAffine(this.worldMatrix);\r\n bv.beginExtend();\r\n this.iterate((node) => {\r\n if (node.isMesh()) {\r\n Matrix4x4.multiplyAffine(invWorldMatrix, node.worldMatrix, tmpMatrix);\r\n const wb = node.getBoundingVolume()!.transform(tmpMatrix).toAABB();\r\n bv.extend(wb.minPoint);\r\n bv.extend(wb.maxPoint);\r\n }\r\n });\r\n return bv.isValid() ? bv : null;\r\n }\r\n /** @internal */\r\n setBoundingVolume(bv: BoundingVolume) {\r\n this._staticBV = !!bv;\r\n super.setBoundingVolume(bv);\r\n }\r\n /** @internal */\r\n cull(cullVisitor: CullVisitor) {\r\n let queueInfo = this._renderQueueMap.get(cullVisitor.renderPass);\r\n if (!queueInfo) {\r\n queueInfo = {\r\n queue: new RenderQueue(cullVisitor.renderPass, this._bindGroupAllocator),\r\n tag: -1\r\n };\r\n this._renderQueueMap.set(cullVisitor.renderPass, queueInfo);\r\n }\r\n if (queueInfo.tag !== this._changeTag) {\r\n queueInfo.tag = this._changeTag;\r\n queueInfo.queue.reset();\r\n const frustumCulling = cullVisitor.frustumCulling;\r\n const renderQueue = cullVisitor.renderQueue;\r\n cullVisitor.frustumCulling = false;\r\n cullVisitor.renderQueue = queueInfo.queue;\r\n this.iterate((node) => {\r\n if (node.isMesh()) {\r\n cullVisitor.visit(node);\r\n }\r\n });\r\n queueInfo.queue.end(cullVisitor.camera, true);\r\n cullVisitor.frustumCulling = frustumCulling;\r\n cullVisitor.renderQueue = renderQueue;\r\n }\r\n cullVisitor.pushRenderQueue(queueInfo.queue);\r\n }\r\n}\r\n"],"names":["tmpMatrix","Matrix4x4","BatchGroup","GraphNode","_renderQueueMap","_bindGroupAllocator","_changeTag","_staticBV","scene","Map","InstanceBindGroupAllocator","bvCallback","invalidateBoundingVolume","primitiveCallback","invalidate","materialCallback","on","node","iterate","child","isMesh","placeToOctree","off","getName","_name","isBatchGroup","_onDetached","forEach","val","queue","reset","computeBoundingVolume","bv","BoundingBox","invWorldMatrix","invertAffine","worldMatrix","beginExtend","multiplyAffine","wb","getBoundingVolume","transform","toAABB","extend","minPoint","maxPoint","isValid","setBoundingVolume","cull","cullVisitor","queueInfo","get","renderPass","RenderQueue","tag","set","frustumCulling","renderQueue","visit","end","camera","pushRenderQueue"],"mappings":"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"}
|
|
@@ -8,17 +8,19 @@ import '../material/lambert.js';
|
|
|
8
8
|
import '../material/blinn.js';
|
|
9
9
|
import '../material/unlit.js';
|
|
10
10
|
import '../material/particle.js';
|
|
11
|
+
import '../material/subsurfaceprofile.js';
|
|
11
12
|
import '../material/meshmaterial.js';
|
|
12
13
|
import '../material/grassmaterial.js';
|
|
13
14
|
import '../material/terrain-cm.js';
|
|
14
15
|
import '../material/pbrmr.js';
|
|
15
16
|
import '../material/pbrsg.js';
|
|
17
|
+
import '../material/mtoon.js';
|
|
16
18
|
import '../material/pbrblueprint.js';
|
|
17
19
|
import '../material/sprite.js';
|
|
18
20
|
import '../material/sprite_std.js';
|
|
19
|
-
import '../material/msdf_text.js';
|
|
20
21
|
import '../utility/blueprint/material/texture.js';
|
|
21
22
|
import '../render/rendergraph/forward_plus_builder.js';
|
|
23
|
+
import '../render/lightpass.js';
|
|
22
24
|
import { SkyRenderer } from '../render/sky.js';
|
|
23
25
|
import '../render/clipmap.js';
|
|
24
26
|
import { EnvShIBL, EnvHemisphericAmbient, EnvConstantAmbient } from '../render/envlight.js';
|
|
@@ -39,6 +41,7 @@ import '../shaders/atmosphere.js';
|
|
|
39
41
|
_irradianceSHFB;
|
|
40
42
|
_irradianceWindow;
|
|
41
43
|
_strength;
|
|
44
|
+
_specularStrength;
|
|
42
45
|
/** @internal */ constructor(){
|
|
43
46
|
super();
|
|
44
47
|
this._envLight = new EnvShIBL();
|
|
@@ -64,6 +67,7 @@ import '../shaders/atmosphere.js';
|
|
|
64
67
|
this._irradianceSHFB = new DRef();
|
|
65
68
|
this._irradianceWindow = new Vector3();
|
|
66
69
|
this._strength = 1;
|
|
70
|
+
this._specularStrength = 1;
|
|
67
71
|
}
|
|
68
72
|
/** @internal */ getHash(ctx) {
|
|
69
73
|
const irradianceSource = this.type === 'ibl' ? this._irradianceSHFB.get() ? 'fb' : this._irradianceSH.get() ? 'buf' : 'none' : 'na';
|
|
@@ -78,6 +82,12 @@ import '../shaders/atmosphere.js';
|
|
|
78
82
|
set strength(val) {
|
|
79
83
|
this._strength = val;
|
|
80
84
|
}
|
|
85
|
+
/** The strength of environment specular lighting */ get specularStrength() {
|
|
86
|
+
return this._specularStrength;
|
|
87
|
+
}
|
|
88
|
+
set specularStrength(val) {
|
|
89
|
+
this._specularStrength = val;
|
|
90
|
+
}
|
|
81
91
|
/** Ambient light color for environment light type constant */ get ambientColor() {
|
|
82
92
|
return this._ambientColor;
|
|
83
93
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sources":["../../src/scene/environment.ts"],"sourcesContent":["import type { Immutable, Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { Vector3, DRef, Disposable } from '@zephyr3d/base';\r\nimport { ObservableVector4 } from '@zephyr3d/base';\r\nimport type { DrawContext, EnvironmentLighting } from '../render';\r\nimport { EnvShIBL } from '../render';\r\nimport { EnvConstantAmbient, EnvHemisphericAmbient } from '../render';\r\nimport { SkyRenderer } from '../render/sky';\r\nimport type { FrameBuffer, GPUDataBuffer, TextureCube } from '@zephyr3d/device';\r\n\r\n/**\r\n * Wrapper for environmant lighting\r\n * @public\r\n */\r\nexport class EnvLightWrapper extends Disposable {\r\n private _envLight: Nullable<EnvironmentLighting>;\r\n private readonly _ambientColor: ObservableVector4;\r\n private readonly _ambientDown: ObservableVector4;\r\n private readonly _ambientUp: ObservableVector4;\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n private readonly _sheenRadianceMap: DRef<TextureCube>;\r\n private readonly _irradianceMap: DRef<TextureCube>;\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n private readonly _irradianceWindow: Vector3;\r\n private _strength: number;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._envLight = new EnvShIBL();\r\n this._ambientColor = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(() => {\r\n if (this.type === 'constant') {\r\n (this._envLight as EnvConstantAmbient).ambientColor.set(this._ambientColor);\r\n }\r\n });\r\n this._ambientDown = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(() => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientDown.set(this._ambientDown);\r\n }\r\n });\r\n this._ambientUp = new ObservableVector4(0.3, 0.5, 0.8, 1).setCallback(() => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientUp.set(this._ambientUp);\r\n }\r\n });\r\n this._radianceMap = new DRef();\r\n this._sheenRadianceMap = new DRef();\r\n this._irradianceMap = new DRef();\r\n this._irradianceSH = new DRef();\r\n this._irradianceSHFB = new DRef();\r\n this._irradianceWindow = new Vector3();\r\n this._strength = 1;\r\n }\r\n /** @internal */\r\n getHash(ctx?: DrawContext) {\r\n const irradianceSource =\r\n this.type === 'ibl'\r\n ? this._irradianceSHFB.get()\r\n ? 'fb'\r\n : this._irradianceSH.get()\r\n ? 'buf'\r\n : 'none'\r\n : 'na';\r\n return !ctx || ctx.drawEnvLight\r\n ? `${this.type}:${this._envLight!.hasRadiance() ? '1' : '0'}:${\r\n this._envLight!.hasSheenRadiance() ? '1' : '0'\r\n }:${this._envLight!.hasIrradiance() ? '1' : '0'}:${irradianceSource}`\r\n : 'none';\r\n }\r\n /** @internal */\r\n get envLight() {\r\n return this._envLight!;\r\n }\r\n /** The strength of environment lighting */\r\n get strength() {\r\n return this._strength;\r\n }\r\n set strength(val) {\r\n this._strength = val;\r\n }\r\n /** Ambient light color for environment light type constant */\r\n get ambientColor(): Vector4 {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(val: Vector4) {\r\n this._ambientColor.set(val);\r\n }\r\n /** Up color for environment light type hemisphere */\r\n get ambientUp(): Vector4 {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(val: Vector4) {\r\n this._ambientUp.set(val);\r\n }\r\n /** Down color for environment light type hemisphere */\r\n get ambientDown(): Vector4 {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(val: Vector4) {\r\n this._ambientDown.set(val);\r\n }\r\n /** Radiance map for environment light type ibl */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n }\r\n }\r\n /** Charlie-filtered sheen radiance map for environment light type ibl */\r\n get sheenRadianceMap() {\r\n return this._sheenRadianceMap.get();\r\n }\r\n set sheenRadianceMap(tex) {\r\n this._sheenRadianceMap.set(tex);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).sheenRadianceMap = this.sheenRadianceMap;\r\n }\r\n }\r\n /** Irradiance SH buffer for environment light type ibl */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n }\r\n }\r\n /** Irradiance SH texture for environment light type ibl */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSHFB = this.irradianceSHFB;\r\n }\r\n }\r\n /** Irradiance SH window for environment light type ibl */\r\n get irradianceWindow(): Immutable<Vector3> {\r\n return this._irradianceWindow;\r\n }\r\n set irradianceWindow(value: Immutable<Vector3>) {\r\n this._irradianceWindow.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceWindow = this._irradianceWindow;\r\n }\r\n }\r\n /** The environment light type */\r\n get type() {\r\n return this._envLight?.getType() ?? 'none';\r\n }\r\n set type(val) {\r\n switch (val) {\r\n case 'none':\r\n this._envLight = null;\r\n break;\r\n case 'ibl':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvShIBL(\r\n this.radianceMap!,\r\n this.irradianceSH!,\r\n this.irradianceSHFB!,\r\n this.sheenRadianceMap!\r\n );\r\n }\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n (this._envLight as EnvShIBL).sheenRadianceMap = this.sheenRadianceMap;\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n (this._envLight as EnvShIBL).irradianceSHFB = this.irradianceSHFB;\r\n (this._envLight as EnvShIBL).irradianceWindow = this.irradianceWindow;\r\n break;\r\n case 'constant':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvConstantAmbient(this._ambientColor);\r\n }\r\n break;\r\n case 'hemisphere':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvHemisphericAmbient(this._ambientUp, this._ambientDown);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n /** Disposes the environment lighting wrapper */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._envLight?.dispose();\r\n this._radianceMap.dispose();\r\n this._sheenRadianceMap.dispose();\r\n this._irradianceMap.dispose();\r\n this._irradianceSHFB.dispose();\r\n this._irradianceSH.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Environment of scene\r\n * @public\r\n */\r\nexport class Environment extends Disposable {\r\n private readonly _sky: SkyRenderer;\r\n private readonly _light: EnvLightWrapper;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._sky = new SkyRenderer();\r\n this._light = new EnvLightWrapper();\r\n }\r\n /** The sky renderer */\r\n get sky() {\r\n return this._sky;\r\n }\r\n /** The environment lighting renderer */\r\n get light() {\r\n return this._light;\r\n }\r\n /** @internal */\r\n getHash(ctx: DrawContext) {\r\n return `${this.light?.getHash(ctx)}:${this._sky?.getHash(ctx)}`;\r\n }\r\n /** @internal */\r\n needSceneDepthTexture() {\r\n return this._sky.fogType !== 'none';\r\n }\r\n /** Disposes the environment object */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._sky.dispose();\r\n this._light.dispose();\r\n }\r\n}\r\n"],"names":["EnvLightWrapper","Disposable","_envLight","_ambientColor","_ambientDown","_ambientUp","_radianceMap","_sheenRadianceMap","_irradianceMap","_irradianceSH","_irradianceSHFB","_irradianceWindow","_strength","EnvShIBL","ObservableVector4","setCallback","type","ambientColor","set","ambientDown","ambientUp","DRef","Vector3","getHash","ctx","irradianceSource","get","drawEnvLight","hasRadiance","hasSheenRadiance","hasIrradiance","envLight","strength","val","radianceMap","tex","sheenRadianceMap","irradianceSH","value","irradianceSHFB","irradianceWindow","getType","EnvConstantAmbient","EnvHemisphericAmbient","onDispose","dispose","Environment","_sky","_light","SkyRenderer","sky","light","needSceneDepthTexture","fogType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"environment.js","sources":["../../src/scene/environment.ts"],"sourcesContent":["import type { Immutable, Nullable, Vector4 } from '@zephyr3d/base';\r\nimport { Vector3, DRef, Disposable } from '@zephyr3d/base';\r\nimport { ObservableVector4 } from '@zephyr3d/base';\r\nimport type { DrawContext, EnvironmentLighting } from '../render';\r\nimport { EnvShIBL } from '../render';\r\nimport { EnvConstantAmbient, EnvHemisphericAmbient } from '../render';\r\nimport { SkyRenderer } from '../render/sky';\r\nimport type { FrameBuffer, GPUDataBuffer, TextureCube } from '@zephyr3d/device';\r\n\r\n/**\r\n * Wrapper for environmant lighting\r\n * @public\r\n */\r\nexport class EnvLightWrapper extends Disposable {\r\n private _envLight: Nullable<EnvironmentLighting>;\r\n private readonly _ambientColor: ObservableVector4;\r\n private readonly _ambientDown: ObservableVector4;\r\n private readonly _ambientUp: ObservableVector4;\r\n private readonly _radianceMap: DRef<TextureCube>;\r\n private readonly _sheenRadianceMap: DRef<TextureCube>;\r\n private readonly _irradianceMap: DRef<TextureCube>;\r\n private readonly _irradianceSH: DRef<GPUDataBuffer>;\r\n private readonly _irradianceSHFB: DRef<FrameBuffer>;\r\n private readonly _irradianceWindow: Vector3;\r\n private _strength: number;\r\n private _specularStrength: number;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._envLight = new EnvShIBL();\r\n this._ambientColor = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(() => {\r\n if (this.type === 'constant') {\r\n (this._envLight as EnvConstantAmbient).ambientColor.set(this._ambientColor);\r\n }\r\n });\r\n this._ambientDown = new ObservableVector4(0.2, 0.2, 0.2, 1).setCallback(() => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientDown.set(this._ambientDown);\r\n }\r\n });\r\n this._ambientUp = new ObservableVector4(0.3, 0.5, 0.8, 1).setCallback(() => {\r\n if (this.type === 'hemisphere') {\r\n (this._envLight as EnvHemisphericAmbient).ambientUp.set(this._ambientUp);\r\n }\r\n });\r\n this._radianceMap = new DRef();\r\n this._sheenRadianceMap = new DRef();\r\n this._irradianceMap = new DRef();\r\n this._irradianceSH = new DRef();\r\n this._irradianceSHFB = new DRef();\r\n this._irradianceWindow = new Vector3();\r\n this._strength = 1;\r\n this._specularStrength = 1;\r\n }\r\n /** @internal */\r\n getHash(ctx?: DrawContext) {\r\n const irradianceSource =\r\n this.type === 'ibl'\r\n ? this._irradianceSHFB.get()\r\n ? 'fb'\r\n : this._irradianceSH.get()\r\n ? 'buf'\r\n : 'none'\r\n : 'na';\r\n return !ctx || ctx.drawEnvLight\r\n ? `${this.type}:${this._envLight!.hasRadiance() ? '1' : '0'}:${\r\n this._envLight!.hasSheenRadiance() ? '1' : '0'\r\n }:${this._envLight!.hasIrradiance() ? '1' : '0'}:${irradianceSource}`\r\n : 'none';\r\n }\r\n /** @internal */\r\n get envLight() {\r\n return this._envLight!;\r\n }\r\n /** The strength of environment lighting */\r\n get strength() {\r\n return this._strength;\r\n }\r\n set strength(val) {\r\n this._strength = val;\r\n }\r\n /** The strength of environment specular lighting */\r\n get specularStrength() {\r\n return this._specularStrength;\r\n }\r\n set specularStrength(val) {\r\n this._specularStrength = val;\r\n }\r\n /** Ambient light color for environment light type constant */\r\n get ambientColor(): Vector4 {\r\n return this._ambientColor;\r\n }\r\n set ambientColor(val: Vector4) {\r\n this._ambientColor.set(val);\r\n }\r\n /** Up color for environment light type hemisphere */\r\n get ambientUp(): Vector4 {\r\n return this._ambientUp;\r\n }\r\n set ambientUp(val: Vector4) {\r\n this._ambientUp.set(val);\r\n }\r\n /** Down color for environment light type hemisphere */\r\n get ambientDown(): Vector4 {\r\n return this._ambientDown;\r\n }\r\n set ambientDown(val: Vector4) {\r\n this._ambientDown.set(val);\r\n }\r\n /** Radiance map for environment light type ibl */\r\n get radianceMap() {\r\n return this._radianceMap.get();\r\n }\r\n set radianceMap(tex) {\r\n this._radianceMap.set(tex);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n }\r\n }\r\n /** Charlie-filtered sheen radiance map for environment light type ibl */\r\n get sheenRadianceMap() {\r\n return this._sheenRadianceMap.get();\r\n }\r\n set sheenRadianceMap(tex) {\r\n this._sheenRadianceMap.set(tex);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).sheenRadianceMap = this.sheenRadianceMap;\r\n }\r\n }\r\n /** Irradiance SH buffer for environment light type ibl */\r\n get irradianceSH() {\r\n return this._irradianceSH.get();\r\n }\r\n set irradianceSH(value) {\r\n this._irradianceSH.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n }\r\n }\r\n /** Irradiance SH texture for environment light type ibl */\r\n get irradianceSHFB() {\r\n return this._irradianceSHFB.get();\r\n }\r\n set irradianceSHFB(value) {\r\n this._irradianceSHFB.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceSHFB = this.irradianceSHFB;\r\n }\r\n }\r\n /** Irradiance SH window for environment light type ibl */\r\n get irradianceWindow(): Immutable<Vector3> {\r\n return this._irradianceWindow;\r\n }\r\n set irradianceWindow(value: Immutable<Vector3>) {\r\n this._irradianceWindow.set(value);\r\n if (this.type === 'ibl') {\r\n (this._envLight as EnvShIBL).irradianceWindow = this._irradianceWindow;\r\n }\r\n }\r\n /** The environment light type */\r\n get type() {\r\n return this._envLight?.getType() ?? 'none';\r\n }\r\n set type(val) {\r\n switch (val) {\r\n case 'none':\r\n this._envLight = null;\r\n break;\r\n case 'ibl':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvShIBL(\r\n this.radianceMap!,\r\n this.irradianceSH!,\r\n this.irradianceSHFB!,\r\n this.sheenRadianceMap!\r\n );\r\n }\r\n (this._envLight as EnvShIBL).radianceMap = this.radianceMap;\r\n (this._envLight as EnvShIBL).sheenRadianceMap = this.sheenRadianceMap;\r\n (this._envLight as EnvShIBL).irradianceSH = this.irradianceSH;\r\n (this._envLight as EnvShIBL).irradianceSHFB = this.irradianceSHFB;\r\n (this._envLight as EnvShIBL).irradianceWindow = this.irradianceWindow;\r\n break;\r\n case 'constant':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvConstantAmbient(this._ambientColor);\r\n }\r\n break;\r\n case 'hemisphere':\r\n if (this._envLight?.getType() !== val) {\r\n this._envLight = new EnvHemisphericAmbient(this._ambientUp, this._ambientDown);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n /** Disposes the environment lighting wrapper */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._envLight?.dispose();\r\n this._radianceMap.dispose();\r\n this._sheenRadianceMap.dispose();\r\n this._irradianceMap.dispose();\r\n this._irradianceSHFB.dispose();\r\n this._irradianceSH.dispose();\r\n }\r\n}\r\n\r\n/**\r\n * Environment of scene\r\n * @public\r\n */\r\nexport class Environment extends Disposable {\r\n private readonly _sky: SkyRenderer;\r\n private readonly _light: EnvLightWrapper;\r\n /** @internal */\r\n constructor() {\r\n super();\r\n this._sky = new SkyRenderer();\r\n this._light = new EnvLightWrapper();\r\n }\r\n /** The sky renderer */\r\n get sky() {\r\n return this._sky;\r\n }\r\n /** The environment lighting renderer */\r\n get light() {\r\n return this._light;\r\n }\r\n /** @internal */\r\n getHash(ctx: DrawContext) {\r\n return `${this.light?.getHash(ctx)}:${this._sky?.getHash(ctx)}`;\r\n }\r\n /** @internal */\r\n needSceneDepthTexture() {\r\n return this._sky.fogType !== 'none';\r\n }\r\n /** Disposes the environment object */\r\n protected onDispose() {\r\n super.onDispose();\r\n this._sky.dispose();\r\n this._light.dispose();\r\n }\r\n}\r\n"],"names":["EnvLightWrapper","Disposable","_envLight","_ambientColor","_ambientDown","_ambientUp","_radianceMap","_sheenRadianceMap","_irradianceMap","_irradianceSH","_irradianceSHFB","_irradianceWindow","_strength","_specularStrength","EnvShIBL","ObservableVector4","setCallback","type","ambientColor","set","ambientDown","ambientUp","DRef","Vector3","getHash","ctx","irradianceSource","get","drawEnvLight","hasRadiance","hasSheenRadiance","hasIrradiance","envLight","strength","val","specularStrength","radianceMap","tex","sheenRadianceMap","irradianceSH","value","irradianceSHFB","irradianceWindow","getType","EnvConstantAmbient","EnvHemisphericAmbient","onDispose","dispose","Environment","_sky","_light","SkyRenderer","sky","light","needSceneDepthTexture","fogType"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;;;IAIO,MAAMA,eAAwBC,SAAAA,UAAAA,CAAAA;IAC3BC,SAAyC;IAChCC,aAAiC;IACjCC,YAAgC;IAChCC,UAA8B;IAC9BC,YAAgC;IAChCC,iBAAqC;IACrCC,cAAkC;IAClCC,aAAmC;IACnCC,eAAmC;IACnCC,iBAA2B;IACpCC,SAAkB;IAClBC,iBAA0B;AAClC,qBACA,WAAc,EAAA;QACZ,KAAK,EAAA;QACL,IAAI,CAACX,SAAS,GAAG,IAAIY,QAAAA,EAAAA;QACrB,IAAI,CAACX,aAAa,GAAG,IAAIY,iBAAAA,CAAkB,KAAK,GAAK,EAAA,GAAA,EAAK,CAAGC,CAAAA,CAAAA,WAAW,CAAC,IAAA;AACvE,YAAA,IAAI,IAAI,CAACC,IAAI,KAAK,UAAY,EAAA;gBAC3B,IAAI,CAACf,SAAS,CAAwBgB,YAAY,CAACC,GAAG,CAAC,IAAI,CAAChB,aAAa,CAAA;AAC5E;AACF,SAAA,CAAA;QACA,IAAI,CAACC,YAAY,GAAG,IAAIW,iBAAAA,CAAkB,KAAK,GAAK,EAAA,GAAA,EAAK,CAAGC,CAAAA,CAAAA,WAAW,CAAC,IAAA;AACtE,YAAA,IAAI,IAAI,CAACC,IAAI,KAAK,YAAc,EAAA;gBAC7B,IAAI,CAACf,SAAS,CAA2BkB,WAAW,CAACD,GAAG,CAAC,IAAI,CAACf,YAAY,CAAA;AAC7E;AACF,SAAA,CAAA;QACA,IAAI,CAACC,UAAU,GAAG,IAAIU,iBAAAA,CAAkB,KAAK,GAAK,EAAA,GAAA,EAAK,CAAGC,CAAAA,CAAAA,WAAW,CAAC,IAAA;AACpE,YAAA,IAAI,IAAI,CAACC,IAAI,KAAK,YAAc,EAAA;gBAC7B,IAAI,CAACf,SAAS,CAA2BmB,SAAS,CAACF,GAAG,CAAC,IAAI,CAACd,UAAU,CAAA;AACzE;AACF,SAAA,CAAA;QACA,IAAI,CAACC,YAAY,GAAG,IAAIgB,IAAAA,EAAAA;QACxB,IAAI,CAACf,iBAAiB,GAAG,IAAIe,IAAAA,EAAAA;QAC7B,IAAI,CAACd,cAAc,GAAG,IAAIc,IAAAA,EAAAA;QAC1B,IAAI,CAACb,aAAa,GAAG,IAAIa,IAAAA,EAAAA;QACzB,IAAI,CAACZ,eAAe,GAAG,IAAIY,IAAAA,EAAAA;QAC3B,IAAI,CAACX,iBAAiB,GAAG,IAAIY,OAAAA,EAAAA;QAC7B,IAAI,CAACX,SAAS,GAAG,CAAA;QACjB,IAAI,CAACC,iBAAiB,GAAG,CAAA;AAC3B;qBAEAW,OAAQC,CAAAA,GAAiB,EAAE;QACzB,MAAMC,gBAAAA,GACJ,IAAI,CAACT,IAAI,KAAK,KACV,GAAA,IAAI,CAACP,eAAe,CAACiB,GAAG,EACtB,GAAA,IAAA,GACA,IAAI,CAAClB,aAAa,CAACkB,GAAG,EAAA,GACpB,QACA,MACJ,GAAA,IAAA;AACN,QAAA,OAAO,CAACF,GAAOA,IAAAA,GAAAA,CAAIG,YAAY,GAC3B,CAAA,EAAG,IAAI,CAACX,IAAI,CAAC,CAAC,EAAE,IAAI,CAACf,SAAS,CAAE2B,WAAW,EAAA,GAAK,MAAM,GAAI,CAAA,CAAC,EACzD,IAAI,CAAC3B,SAAS,CAAE4B,gBAAgB,KAAK,GAAM,GAAA,GAAA,CAC5C,CAAC,EAAE,IAAI,CAAC5B,SAAS,CAAE6B,aAAa,EAAK,GAAA,GAAA,GAAM,IAAI,CAAC,EAAEL,kBAAkB,GACrE,MAAA;AACN;qBAEA,IAAIM,QAAW,GAAA;QACb,OAAO,IAAI,CAAC9B,SAAS;AACvB;gDAEA,IAAI+B,QAAW,GAAA;QACb,OAAO,IAAI,CAACrB,SAAS;AACvB;IACA,IAAIqB,QAAAA,CAASC,GAAG,EAAE;QAChB,IAAI,CAACtB,SAAS,GAAGsB,GAAAA;AACnB;yDAEA,IAAIC,gBAAmB,GAAA;QACrB,OAAO,IAAI,CAACtB,iBAAiB;AAC/B;IACA,IAAIsB,gBAAAA,CAAiBD,GAAG,EAAE;QACxB,IAAI,CAACrB,iBAAiB,GAAGqB,GAAAA;AAC3B;mEAEA,IAAIhB,YAAwB,GAAA;QAC1B,OAAO,IAAI,CAACf,aAAa;AAC3B;IACA,IAAIe,YAAAA,CAAagB,GAAY,EAAE;AAC7B,QAAA,IAAI,CAAC/B,aAAa,CAACgB,GAAG,CAACe,GAAAA,CAAAA;AACzB;0DAEA,IAAIb,SAAqB,GAAA;QACvB,OAAO,IAAI,CAAChB,UAAU;AACxB;IACA,IAAIgB,SAAAA,CAAUa,GAAY,EAAE;AAC1B,QAAA,IAAI,CAAC7B,UAAU,CAACc,GAAG,CAACe,GAAAA,CAAAA;AACtB;4DAEA,IAAId,WAAuB,GAAA;QACzB,OAAO,IAAI,CAAChB,YAAY;AAC1B;IACA,IAAIgB,WAAAA,CAAYc,GAAY,EAAE;AAC5B,QAAA,IAAI,CAAC9B,YAAY,CAACe,GAAG,CAACe,GAAAA,CAAAA;AACxB;uDAEA,IAAIE,WAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC9B,YAAY,CAACqB,GAAG,EAAA;AAC9B;IACA,IAAIS,WAAAA,CAAYC,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC/B,YAAY,CAACa,GAAG,CAACkB,GAAAA,CAAAA;AACtB,QAAA,IAAI,IAAI,CAACpB,IAAI,KAAK,KAAO,EAAA;AACtB,YAAA,IAAI,CAACf,SAAS,CAAckC,WAAW,GAAG,IAAI,CAACA,WAAW;AAC7D;AACF;8EAEA,IAAIE,gBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC/B,iBAAiB,CAACoB,GAAG,EAAA;AACnC;IACA,IAAIW,gBAAAA,CAAiBD,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC9B,iBAAiB,CAACY,GAAG,CAACkB,GAAAA,CAAAA;AAC3B,QAAA,IAAI,IAAI,CAACpB,IAAI,KAAK,KAAO,EAAA;AACtB,YAAA,IAAI,CAACf,SAAS,CAAcoC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB;AACvE;AACF;+DAEA,IAAIC,YAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC9B,aAAa,CAACkB,GAAG,EAAA;AAC/B;IACA,IAAIY,YAAAA,CAAaC,KAAK,EAAE;AACtB,QAAA,IAAI,CAAC/B,aAAa,CAACU,GAAG,CAACqB,KAAAA,CAAAA;AACvB,QAAA,IAAI,IAAI,CAACvB,IAAI,KAAK,KAAO,EAAA;AACtB,YAAA,IAAI,CAACf,SAAS,CAAcqC,YAAY,GAAG,IAAI,CAACA,YAAY;AAC/D;AACF;gEAEA,IAAIE,cAAiB,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC/B,eAAe,CAACiB,GAAG,EAAA;AACjC;IACA,IAAIc,cAAAA,CAAeD,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC9B,eAAe,CAACS,GAAG,CAACqB,KAAAA,CAAAA;AACzB,QAAA,IAAI,IAAI,CAACvB,IAAI,KAAK,KAAO,EAAA;AACtB,YAAA,IAAI,CAACf,SAAS,CAAcuC,cAAc,GAAG,IAAI,CAACA,cAAc;AACnE;AACF;+DAEA,IAAIC,gBAAuC,GAAA;QACzC,OAAO,IAAI,CAAC/B,iBAAiB;AAC/B;IACA,IAAI+B,gBAAAA,CAAiBF,KAAyB,EAAE;AAC9C,QAAA,IAAI,CAAC7B,iBAAiB,CAACQ,GAAG,CAACqB,KAAAA,CAAAA;AAC3B,QAAA,IAAI,IAAI,CAACvB,IAAI,KAAK,KAAO,EAAA;AACtB,YAAA,IAAI,CAACf,SAAS,CAAcwC,gBAAgB,GAAG,IAAI,CAAC/B,iBAAiB;AACxE;AACF;sCAEA,IAAIM,IAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAACf,SAAS,EAAEyC,OAAa,EAAA,IAAA,MAAA;AACtC;IACA,IAAI1B,IAAAA,CAAKiB,GAAG,EAAE;QACZ,OAAQA,GAAAA;YACN,KAAK,MAAA;gBACH,IAAI,CAAChC,SAAS,GAAG,IAAA;AACjB,gBAAA;YACF,KAAK,KAAA;AACH,gBAAA,IAAI,IAAI,CAACA,SAAS,EAAEyC,cAAcT,GAAK,EAAA;AACrC,oBAAA,IAAI,CAAChC,SAAS,GAAG,IAAIY,QACnB,CAAA,IAAI,CAACsB,WAAW,EAChB,IAAI,CAACG,YAAY,EACjB,IAAI,CAACE,cAAc,EACnB,IAAI,CAACH,gBAAgB,CAAA;AAEzB;AACC,gBAAA,IAAI,CAACpC,SAAS,CAAckC,WAAW,GAAG,IAAI,CAACA,WAAW;AAC1D,gBAAA,IAAI,CAAClC,SAAS,CAAcoC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB;AACpE,gBAAA,IAAI,CAACpC,SAAS,CAAcqC,YAAY,GAAG,IAAI,CAACA,YAAY;AAC5D,gBAAA,IAAI,CAACrC,SAAS,CAAcuC,cAAc,GAAG,IAAI,CAACA,cAAc;AAChE,gBAAA,IAAI,CAACvC,SAAS,CAAcwC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB;AACrE,gBAAA;YACF,KAAK,UAAA;AACH,gBAAA,IAAI,IAAI,CAACxC,SAAS,EAAEyC,cAAcT,GAAK,EAAA;AACrC,oBAAA,IAAI,CAAChC,SAAS,GAAG,IAAI0C,kBAAmB,CAAA,IAAI,CAACzC,aAAa,CAAA;AAC5D;AACA,gBAAA;YACF,KAAK,YAAA;AACH,gBAAA,IAAI,IAAI,CAACD,SAAS,EAAEyC,cAAcT,GAAK,EAAA;oBACrC,IAAI,CAAChC,SAAS,GAAG,IAAI2C,qBAAAA,CAAsB,IAAI,CAACxC,UAAU,EAAE,IAAI,CAACD,YAAY,CAAA;AAC/E;AACA,gBAAA;AAGJ;AACF;qDAEA,SAAsB,GAAA;AACpB,QAAA,KAAK,CAAC0C,SAAAA,EAAAA;QACN,IAAI,CAAC5C,SAAS,EAAE6C,OAAAA,EAAAA;QAChB,IAAI,CAACzC,YAAY,CAACyC,OAAO,EAAA;QACzB,IAAI,CAACxC,iBAAiB,CAACwC,OAAO,EAAA;QAC9B,IAAI,CAACvC,cAAc,CAACuC,OAAO,EAAA;QAC3B,IAAI,CAACrC,eAAe,CAACqC,OAAO,EAAA;QAC5B,IAAI,CAACtC,aAAa,CAACsC,OAAO,EAAA;AAC5B;AACF;AAEA;;;IAIO,MAAMC,WAAoB/C,SAAAA,UAAAA,CAAAA;IACdgD,IAAkB;IAClBC,MAAwB;AACzC,qBACA,WAAc,EAAA;QACZ,KAAK,EAAA;QACL,IAAI,CAACD,IAAI,GAAG,IAAIE,WAAAA,EAAAA;QAChB,IAAI,CAACD,MAAM,GAAG,IAAIlD,eAAAA,EAAAA;AACpB;4BAEA,IAAIoD,GAAM,GAAA;QACR,OAAO,IAAI,CAACH,IAAI;AAClB;6CAEA,IAAII,KAAQ,GAAA;QACV,OAAO,IAAI,CAACH,MAAM;AACpB;qBAEA1B,OAAQC,CAAAA,GAAgB,EAAE;AACxB,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC4B,KAAK,EAAE7B,OAAQC,CAAAA,GAAAA,CAAAA,CAAK,CAAC,EAAE,IAAI,CAACwB,IAAI,EAAEzB,QAAQC,GAAM,CAAA,CAAA,CAAA;AACjE;AACA,qBACA6B,qBAAwB,GAAA;AACtB,QAAA,OAAO,IAAI,CAACL,IAAI,CAACM,OAAO,KAAK,MAAA;AAC/B;2CAEA,SAAsB,GAAA;AACpB,QAAA,KAAK,CAACT,SAAAA,EAAAA;QACN,IAAI,CAACG,IAAI,CAACF,OAAO,EAAA;QACjB,IAAI,CAACG,MAAM,CAACH,OAAO,EAAA;AACrB;AACF;;;;"}
|
package/dist/scene/light.js
CHANGED
|
@@ -150,11 +150,21 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
150
150
|
* @param type - The light type
|
|
151
151
|
*/ constructor(scene, type){
|
|
152
152
|
super(scene, type);
|
|
153
|
-
this.
|
|
154
|
-
|
|
155
|
-
|
|
153
|
+
this.ensurePunctualState();
|
|
154
|
+
}
|
|
155
|
+
/** @internal */ ensurePunctualState() {
|
|
156
|
+
if (!this._color) {
|
|
157
|
+
this._color = Vector4.one();
|
|
158
|
+
}
|
|
159
|
+
if (this._castShadow == null) {
|
|
160
|
+
this._castShadow = false;
|
|
161
|
+
}
|
|
162
|
+
if (!this._shadowMapper) {
|
|
163
|
+
this._shadowMapper = new ShadowMapper(this);
|
|
164
|
+
}
|
|
156
165
|
}
|
|
157
166
|
/** Color of the light */ get color() {
|
|
167
|
+
this.ensurePunctualState();
|
|
158
168
|
return this._color.clone();
|
|
159
169
|
}
|
|
160
170
|
set color(color) {
|
|
@@ -165,11 +175,13 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
165
175
|
* @param color - The color to set
|
|
166
176
|
* @returns self
|
|
167
177
|
*/ setColor(color) {
|
|
178
|
+
this.ensurePunctualState();
|
|
168
179
|
this._color.set(color);
|
|
169
180
|
this.invalidateUniforms();
|
|
170
181
|
return this;
|
|
171
182
|
}
|
|
172
183
|
/** Whether this light casts shadows */ get castShadow() {
|
|
184
|
+
this.ensurePunctualState();
|
|
173
185
|
return this._castShadow;
|
|
174
186
|
}
|
|
175
187
|
set castShadow(b) {
|
|
@@ -180,6 +192,7 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
180
192
|
* @param b - true if the light casts shadows
|
|
181
193
|
* @returns self
|
|
182
194
|
*/ setCastShadow(b) {
|
|
195
|
+
this.ensurePunctualState();
|
|
183
196
|
if (this._castShadow !== !!b) {
|
|
184
197
|
this._castShadow = !!b;
|
|
185
198
|
if (this._castShadow && this.isDirectionLight() && !this.shadow.shadowRegion) {
|
|
@@ -189,6 +202,7 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
189
202
|
return this;
|
|
190
203
|
}
|
|
191
204
|
/** The shadow mapper for this light */ get shadow() {
|
|
205
|
+
this.ensurePunctualState();
|
|
192
206
|
return this._shadowMapper;
|
|
193
207
|
}
|
|
194
208
|
/**
|
|
@@ -202,6 +216,10 @@ export abstract class AmbientLight extends BaseLight {
|
|
|
202
216
|
this.invalidateUniforms();
|
|
203
217
|
// this._transformCallback(true, false);
|
|
204
218
|
}
|
|
219
|
+
/** Disposes the punctual light node */ onDispose() {
|
|
220
|
+
super.onDispose();
|
|
221
|
+
this._shadowMapper?.dispose();
|
|
222
|
+
}
|
|
205
223
|
/** @internal */ computeUniforms() {}
|
|
206
224
|
}
|
|
207
225
|
/**
|