@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deferredshadowlightpass.js","sources":["../../src/render/deferredshadowlightpass.ts"],"sourcesContent":["import { Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { BindGroup, GPUProgram, RenderStateSet, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport type { PunctualLight } from '../scene';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { distributionGGX, fresnelSchlick, visGGX } from '../shaders/pbr';\r\nimport {\r\n LIGHT_TYPE_POINT,\r\n LIGHT_TYPE_RECT,\r\n LIGHT_TYPE_SPOT,\r\n RENDER_PASS_TYPE_LIGHT\r\n} from '../values';\r\n\r\n/**\r\n * Deferred single shadowed-light accumulation pass.\r\n *\r\n * Renders one fullscreen additive pass per shadow-casting light and reuses the\r\n * existing shadow map sampling pipeline via ShaderHelper/ShadowMapper.\r\n * @internal\r\n */\r\nexport class DeferredShadowLightPass {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _bindGroups: Record<string, BindGroup> = {};\r\n private static _additiveRenderStates: RenderStateSet | null = null;\r\n private static _multiplyRenderStates: RenderStateSet | null = null;\r\n private static getProgramHash(\r\n deviceType: string,\r\n shaderHash: string,\r\n debugShadowTermOnly: boolean,\r\n hasSceneColor: boolean,\r\n hasHiZ: boolean,\r\n hasLinearDepth: boolean\r\n ) {\r\n return `${deviceType}:${shaderHash}:deferred-shadow:${debugShadowTermOnly ? 1 : 0}:scene:${\r\n hasSceneColor ? 1 : 0\r\n }:hiz:${hasHiZ ? 1 : 0}:depth:${hasLinearDepth ? 1 : 0}`;\r\n }\r\n\r\n private static hasTextureUniform(bindGroup: BindGroup, program: GPUProgram, name: string) {\r\n const bindGroupLayout = (bindGroup as any).getLayout?.() ?? program.bindGroupLayouts[0];\r\n return !!bindGroupLayout?.entries?.some(\r\n (entry: any) => entry.name === name && (entry.texture || entry.storageTexture || entry.externalTexture)\r\n );\r\n }\r\n\r\n private static bindOptionalSceneTextures(bindGroup: BindGroup, program: GPUProgram, ctx: DrawContext) {\r\n if (ctx.linearDepthTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformLinearDepth')) {\r\n bindGroup.setTexture('Z_UniformLinearDepth', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue(\r\n 'Z_UniformLinearDepthSize',\r\n new Vector2(ctx.linearDepthTexture.width, ctx.linearDepthTexture.height)\r\n );\r\n }\r\n if (ctx.sceneColorTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformSceneColor')) {\r\n bindGroup.setTexture('Z_UniformSceneColor', ctx.sceneColorTexture, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setValue(\r\n 'Z_UniformSceneColorSize',\r\n new Vector2(ctx.sceneColorTexture.width, ctx.sceneColorTexture.height)\r\n );\r\n }\r\n if (ctx.HiZTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformHiZDepth')) {\r\n bindGroup.setTexture('Z_UniformHiZDepth', ctx.HiZTexture, fetchSampler('clamp_nearest'));\r\n bindGroup.setValue(\r\n 'Z_UniformHiZDepthInfo',\r\n new Vector4(ctx.HiZTexture.width, ctx.HiZTexture.height, ctx.HiZTexture.mipLevelCount, 0)\r\n );\r\n }\r\n }\r\n\r\n private static getCameraUniforms(ctx: DrawContext) {\r\n const cameraPos = ctx.camera.getWorldPosition();\r\n return {\r\n position: new Vector4(cameraPos.x, cameraPos.y, cameraPos.z, 0),\r\n renderSize: new Vector2(ctx.renderWidth, ctx.renderHeight),\r\n viewProjectionMatrix: ctx.camera.viewProjectionMatrix,\r\n unjitteredVPMatrix: ctx.camera.viewProjectionMatrix,\r\n jitteredInvVPMatrix: ctx.camera.invViewProjectionMatrix,\r\n jitterValue: ctx.camera.jitterValue,\r\n invViewProjectionMatrix: ctx.camera.invViewProjectionMatrix,\r\n projectionMatrix: ctx.camera.getProjectionMatrix(),\r\n invProjectionMatrix: ctx.camera.getInvProjectionMatrix(),\r\n viewMatrix: ctx.camera.viewMatrix,\r\n worldMatrix: ctx.camera.worldMatrix,\r\n params: new Vector4(ctx.camera.getNearPlane(), ctx.camera.getFarPlane(), ctx.flip ? -1 : 1, 0),\r\n roughnessFactor: ctx.camera.SSR ? ctx.camera.ssrRoughnessFactor : 1,\r\n shadowDebugCascades: ctx.camera.shadowDebugCascades ? 1 : 0,\r\n frameDeltaTime: ctx.device.frameInfo.elapsedFrame * 0.001,\r\n elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,\r\n framestamp: ctx.device.frameInfo.frameCounter\r\n };\r\n }\r\n\r\n render(\r\n ctx: DrawContext,\r\n light: PunctualLight,\r\n gbufferColor: Texture2D,\r\n gbufferRoughness: Texture2D,\r\n gbufferNormal: Texture2D,\r\n gbufferExtra: Texture2D,\r\n debugShadowTermOnly = false\r\n ) {\r\n if (!ctx.shadowMapInfo?.has(light) || !ctx.linearDepthTexture) {\r\n return;\r\n }\r\n const shadowMapParams = ctx.shadowMapInfo.get(light)!;\r\n const device = ctx.device;\r\n const prevLight = ctx.currentShadowLight ?? null;\r\n const prevRenderPass = ctx.renderPass;\r\n ctx.currentShadowLight = light;\r\n ctx.renderPass = { type: RENDER_PASS_TYPE_LIGHT } as any;\r\n const hash = DeferredShadowLightPass.getProgramHash(\r\n device.type,\r\n shadowMapParams.shaderHash,\r\n debugShadowTermOnly,\r\n !!ctx.sceneColorTexture,\r\n !!ctx.HiZTexture,\r\n !!ctx.linearDepthTexture\r\n );\r\n let program = DeferredShadowLightPass._programs[hash];\r\n if (!program) {\r\n const isWebGL = device.type === 'webgl';\r\n const builtProgram = device.buildRenderProgram({\r\n label: 'DeferredShadowLightPass',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\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 ShaderHelper.prepareFragmentShader(pb, ctx);\r\n this.gbufferColorTex = pb.tex2D().uniform(0);\r\n this.gbufferRoughnessTex = pb.tex2D().uniform(0);\r\n this.gbufferNormalTex = pb.tex2D().uniform(0);\r\n this.gbufferExtraTex = pb.tex2D().uniform(0);\r\n this.linearDepthTex = pb.tex2D().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.cameraRight = pb.vec3().uniform(0);\r\n this.cameraUp = pb.vec3().uniform(0);\r\n this.cameraForward = pb.vec3().uniform(0);\r\n this.cameraViewProjection = pb.mat4().uniform(0);\r\n this.cameraProj = pb.vec2().uniform(0); // x: tanHalfFovy, y: aspect\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.debugShadowTermOnly = pb.int().uniform(0);\r\n this.$outputs.color = pb.vec4();\r\n pb.func('zGetLinearDepth', [], function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));\r\n this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.uv);\r\n if (isWebGL) {\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));\r\n } else {\r\n this.$return(this.depthSample.r);\r\n }\r\n });\r\n pb.func(\r\n 'zPointAtten',\r\n [pb.float('dist'), pb.float('range')],\r\n function () {\r\n this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, pb.max(this.range, 1e-4))));\r\n this.$return(pb.mul(this.falloff, this.falloff));\r\n }\r\n );\r\n pb.func(\r\n 'zSpotAtten',\r\n [pb.vec3('worldPos'), pb.vec4('posRange'), pb.vec4('dirCutoff'), pb.float('dist')],\r\n function () {\r\n this.$l.base = this.zPointAtten(this.dist, this.posRange.w);\r\n this.$l.spotFactor = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);\r\n this.spotFactor = pb.smoothStep(\r\n this.dirCutoff.w,\r\n pb.mix(this.dirCutoff.w, 1, 0.5),\r\n this.spotFactor\r\n );\r\n this.$return(pb.mul(this.base, this.spotFactor));\r\n }\r\n );\r\n pb.func(\r\n 'zAccumulatePunctualShadowedLight',\r\n [\r\n pb.vec3('baseColor'),\r\n pb.float('metallic'),\r\n pb.float('roughness'),\r\n pb.float('specularStrength'),\r\n pb.vec3('n'),\r\n pb.vec3('viewDir'),\r\n pb.float('NoV'),\r\n pb.vec3('f0'),\r\n pb.vec3('lightColor'),\r\n pb.vec3('L'),\r\n pb.float('atten'),\r\n pb.float('shadow'),\r\n pb.float('litMask'),\r\n pb.float('diffScale'),\r\n pb.float('specScale'),\r\n pb.vec3('outLight').inout(),\r\n pb.float('outShadow').inout()\r\n ],\r\n function () {\r\n this.$l.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);\r\n this.$if(pb.greaterThan(this.NoL, 1e-5), function () {\r\n this.$l.H = pb.normalize(pb.add(this.viewDir, this.L));\r\n this.$l.NoH = pb.clamp(pb.dot(this.n, this.H), 0, 1);\r\n this.$l.VoH = pb.clamp(pb.dot(this.viewDir, this.H), 0, 1);\r\n this.$l.F = fresnelSchlick(this, this.VoH, this.f0, pb.vec3(1));\r\n this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);\r\n this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.V = visGGX(this, this.NoV, this.NoL, this.alphaRoughness);\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), this.F),\r\n pb.div(pb.mul(this.baseColor, pb.sub(1, this.metallic)), Math.PI)\r\n );\r\n this.$l.unshadowedColor = pb.mul(this.lightColor, this.atten, this.NoL);\r\n this.$l.punctualColor = pb.mul(this.unshadowedColor, this.shadow, this.litMask);\r\n this.$l.diffuse = pb.mul(\r\n this.punctualColor,\r\n pb.max(this.diffuseBRDF, pb.vec3(0)),\r\n this.diffScale\r\n );\r\n this.$l.specular = pb.mul(this.punctualColor, this.D, this.V, this.F, this.specScale);\r\n this.outLight = pb.add(this.outLight, pb.max(pb.add(this.diffuse, this.specular), pb.vec3(0)));\r\n this.outShadow = pb.add(this.outShadow, pb.mul(this.shadow, this.litMask));\r\n });\r\n }\r\n );\r\n pb.func(\r\n 'zSampleLinearDepthAtUV',\r\n [pb.vec2('uv')],\r\n function () {\r\n if (isWebGL) {\r\n this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.uv);\r\n this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));\r\n } else {\r\n this.$l.texSize = pb.ivec2(ShaderHelper.getRenderSize(this));\r\n this.$l.pixelCoord = pb.clamp(\r\n pb.ivec2(pb.mul(this.uv, pb.vec2(this.texSize))),\r\n pb.ivec2(0),\r\n pb.sub(this.texSize, pb.ivec2(1))\r\n );\r\n this.$l.depthSample = pb.textureLoad(this.linearDepthTex, this.pixelCoord, 0);\r\n this.$return(this.depthSample.r);\r\n }\r\n }\r\n );\r\n pb.func(\r\n 'zContactShadow',\r\n [pb.vec3('worldPos'), pb.vec3('L'), pb.int('lightType'), pb.vec4('posRange')],\r\n function () {\r\n this.$l.steps = pb.int(8);\r\n this.$l.maxDistance = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.clamp(pb.mul(this.posRange.w, 0.2), 0.2, 3),\r\n this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_SPOT),\r\n pb.clamp(pb.mul(this.posRange.w, 0.25), 0.25, 3.5),\r\n pb.float(1.5)\r\n )\r\n );\r\n this.$l.stepLen = pb.div(this.maxDistance, pb.float(this.steps));\r\n this.$l.occlusion = pb.float(0);\r\n this.$for(pb.int('i'), 1, pb.add(this.steps, 1), function () {\r\n this.$l.samplePos = pb.add(this.worldPos, pb.mul(this.L, pb.mul(pb.float(this.i), this.stepLen)));\r\n this.$l.clip = pb.mul(this.cameraViewProjection, pb.vec4(this.samplePos, 1));\r\n this.$if(pb.lessThanEqual(this.clip.w, 1e-6), function () {\r\n this.$continue();\r\n });\r\n this.$l.ndc = pb.div(this.clip.xy, this.clip.w);\r\n this.$l.uv = pb.add(pb.mul(this.ndc, 0.5), pb.vec2(0.5));\r\n this.$if(\r\n pb.or(\r\n pb.lessThan(this.uv.x, 0),\r\n pb.greaterThan(this.uv.x, 1),\r\n pb.lessThan(this.uv.y, 0),\r\n pb.greaterThan(this.uv.y, 1)\r\n ),\r\n function () {\r\n this.$continue();\r\n }\r\n );\r\n this.$l.sceneDepth = pb.mul(this.zSampleLinearDepthAtUV(this.uv), this.cameraNearFar.y);\r\n this.$l.sampleDepth = pb.dot(pb.sub(this.samplePos, this.cameraPos), this.cameraForward);\r\n this.$if(pb.greaterThan(pb.sub(this.sampleDepth, this.sceneDepth), 0.02), function () {\r\n this.occlusion = pb.add(this.occlusion, 1);\r\n });\r\n });\r\n this.$l.visibility = pb.sub(1, pb.mul(pb.div(this.occlusion, pb.float(this.steps)), 0.65));\r\n this.$return(pb.clamp(this.visibility, 0, 1));\r\n }\r\n );\r\n pb.func(\r\n 'zAccumulateRectShadowedLight',\r\n [\r\n pb.vec3('worldPos'),\r\n pb.vec3('baseColor'),\r\n pb.float('metallic'),\r\n pb.float('roughness'),\r\n pb.float('specularStrength'),\r\n pb.vec3('n'),\r\n pb.vec3('viewDir'),\r\n pb.float('NoV'),\r\n pb.vec3('f0'),\r\n pb.vec4('posRange'),\r\n pb.vec4('axisX'),\r\n pb.vec4('axisY'),\r\n pb.vec4('colorIntensity'),\r\n pb.float('validMask'),\r\n pb.vec3('outLight').inout(),\r\n pb.float('outShadow').inout()\r\n ],\r\n function () {\r\n this.$l.center = this.posRange.xyz;\r\n this.$l.range = this.posRange.w;\r\n this.$l.ax = this.axisX.xyz;\r\n this.$l.ay = this.axisY.xyz;\r\n this.$l.halfWidth = pb.length(this.ax);\r\n this.$l.halfHeight = pb.length(this.ay);\r\n this.$l.area = pb.mul(this.halfWidth, this.halfHeight, 4);\r\n this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));\r\n this.$if(pb.greaterThan(this.area, 0), function () {\r\n this.$l.baseRectColor = pb.mul(this.colorIntensity.rgb, this.colorIntensity.a, this.area, 0.25);\r\n this.$l.samplePos = pb.vec3();\r\n this.$l.Lvec = pb.vec3();\r\n this.$l.L = pb.vec3();\r\n this.$l.dist = pb.float();\r\n this.$l.invDist2 = pb.float();\r\n this.$l.NoL_light = pb.float();\r\n this.$l.falloff = pb.float();\r\n this.$l.lightSampleColor = pb.vec3();\r\n this.$l.sampleShadow = pb.float();\r\n this.$l.contactShadow = pb.float();\r\n this.$l.sampleLitMask = pb.float();\r\n this.$l.sampleNoL = pb.float();\r\n\r\n const sample = (u: number, v: number) => {\r\n this.samplePos = pb.add(\r\n this.center,\r\n pb.add(\r\n pb.mul(this.ax, pb.sub(pb.mul(u, 2), 1)),\r\n pb.mul(this.ay, pb.sub(pb.mul(v, 2), 1))\r\n )\r\n );\r\n this.Lvec = pb.sub(this.samplePos, this.worldPos);\r\n this.dist = pb.length(this.Lvec);\r\n this.invDist2 = pb.div(1, pb.max(pb.mul(this.dist, this.dist), 0.0001));\r\n this.L = pb.normalize(this.Lvec);\r\n this.sampleNoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);\r\n this.NoL_light = pb.clamp(pb.dot(this.lightNormal, pb.neg(this.L)), 0, 1);\r\n // Keep PCF/PCF-PD shadow sampling in uniform control flow.\r\n this.sampleShadow = ShaderHelper.calculateShadow(\r\n this,\r\n this.worldPos,\r\n pb.max(this.sampleNoL, 1e-5),\r\n ctx\r\n );\r\n this.sampleShadow = pb.mix(1, this.sampleShadow, this.validMask);\r\n this.contactShadow = this.zContactShadow(this.worldPos, this.L, LIGHT_TYPE_RECT, this.posRange);\r\n this.sampleShadow = pb.mul(this.sampleShadow, this.contactShadow);\r\n this.$if(pb.greaterThan(this.NoL_light, 1e-5), function () {\r\n this.falloff = pb.float(1);\r\n this.$if(pb.greaterThan(this.range, 0), function () {\r\n this.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.range)));\r\n this.falloff = pb.mul(this.falloff, this.falloff);\r\n });\r\n this.lightSampleColor = pb.mul(this.baseRectColor, this.invDist2, this.NoL_light);\r\n this.sampleLitMask = this.validMask;\r\n this.zAccumulatePunctualShadowedLight(\r\n this.baseColor,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.lightSampleColor,\r\n this.L,\r\n this.falloff,\r\n this.sampleShadow,\r\n this.sampleLitMask,\r\n 1,\r\n 1,\r\n this.outLight,\r\n this.outShadow\r\n );\r\n });\r\n };\r\n\r\n sample(0.25, 0.25);\r\n sample(0.75, 0.25);\r\n sample(0.25, 0.75);\r\n sample(0.75, 0.75);\r\n this.outShadow = pb.mul(this.outShadow, 0.25);\r\n });\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));\r\n this.$l.base = pb.textureSample(this.gbufferColorTex, this.uv);\r\n this.$l.rm = pb.textureSample(this.gbufferRoughnessTex, this.uv);\r\n this.$l.extraData = pb.textureSample(this.gbufferExtraTex, this.uv);\r\n this.$l.litFlag = pb.float(pb.greaterThan(this.extraData.a, 0.5));\r\n this.$l.n = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.uv).xyz, 2), pb.vec3(1))\r\n );\r\n this.$l.metallic = pb.clamp(this.rm.r, 0, 1);\r\n this.$l.specularStrength = pb.clamp(this.rm.b, 0, 1);\r\n this.$l.roughness = pb.clamp(this.rm.a, 0.045, 1);\r\n this.$l.ndc = pb.sub(pb.mul(this.uv, 2), pb.vec2(1));\r\n this.$l.xScale = pb.mul(this.cameraProj.x, this.cameraProj.y);\r\n this.$l.yScale = this.cameraProj.x;\r\n this.$l.camRayDir = pb.normalize(\r\n pb.add(\r\n this.cameraForward,\r\n pb.mul(this.cameraRight, pb.mul(this.ndc.x, this.xScale)),\r\n pb.mul(this.cameraUp, pb.mul(this.ndc.y, this.yScale))\r\n )\r\n );\r\n this.$l.linearDepthNormalized = this.zGetLinearDepth();\r\n this.$l.linearDepth = pb.mul(\r\n pb.clamp(this.linearDepthNormalized, 0, 1),\r\n this.cameraNearFar.y\r\n );\r\n this.$l.validMask = pb.float(pb.lessThan(this.linearDepthNormalized, 1));\r\n this.$l.rayScale = pb.max(pb.dot(this.camRayDir, this.cameraForward), 1e-4);\r\n this.$l.worldPos = pb.add(\r\n this.cameraPos,\r\n pb.mul(this.camRayDir, pb.div(this.linearDepth, this.rayScale))\r\n );\r\n this.$l.viewDir = pb.neg(this.camRayDir);\r\n this.$l.lightType = pb.int(this.light.extraParams.w);\r\n this.$l.posRange = this.light.positionAndRange;\r\n this.$l.dirCutoff = this.light.directionAndCutoff;\r\n this.$l.lightColor = pb.mul(this.light.diffuseAndIntensity.rgb, this.light.diffuseAndIntensity.a);\r\n this.$l.extra = this.light.extraParams;\r\n this.$l.L = pb.vec3(0, 0, 1);\r\n this.$l.atten = pb.float(1);\r\n this.$l.outLight = pb.vec3(0);\r\n this.$l.shadowTerm = pb.float(1);\r\n this.$if(\r\n pb.or(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.equal(this.lightType, LIGHT_TYPE_SPOT)\r\n ),\r\n function () {\r\n this.$l.toLight = pb.sub(this.posRange.xyz, this.worldPos);\r\n this.$l.dist = pb.length(this.toLight);\r\n this.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));\r\n this.atten = this.zPointAtten(this.dist, this.posRange.w);\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function () {\r\n this.atten = this.zSpotAtten(this.worldPos, this.posRange, this.dirCutoff, this.dist);\r\n });\r\n }\r\n ).$else(function () {\r\n // Directional and rect-light directional path.\r\n this.L = pb.normalize(pb.neg(this.dirCutoff.xyz));\r\n this.atten = 1;\r\n });\r\n this.$l.NoV = pb.clamp(pb.dot(this.n, this.viewDir), 0, 1);\r\n this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specularStrength), this.base.rgb, this.metallic);\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n this.shadowTerm = pb.float(0);\r\n this.zAccumulateRectShadowedLight(\r\n this.worldPos,\r\n this.base.rgb,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.posRange,\r\n this.dirCutoff,\r\n this.extra,\r\n this.light.diffuseAndIntensity,\r\n pb.mul(this.validMask, this.litFlag),\r\n this.outLight,\r\n this.shadowTerm\r\n );\r\n }).$else(function () {\r\n this.$l.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);\r\n this.$l.litMask = pb.mul(this.validMask, pb.float(pb.greaterThan(this.NoL, 1e-5)), this.litFlag);\r\n // Keep shadow sampling in uniform control flow for WebGPU derivatives (dpdx/ddy in PCF).\r\n this.$l.shadow = ShaderHelper.calculateShadow(this, this.worldPos, pb.max(this.NoL, 1e-5), ctx);\r\n this.shadow = pb.mix(1, this.shadow, this.validMask);\r\n this.$l.contactShadow = this.zContactShadow(this.worldPos, this.L, this.lightType, this.posRange);\r\n this.shadow = pb.mul(this.shadow, this.contactShadow);\r\n this.shadowTerm = pb.mul(this.shadow, this.litMask);\r\n this.zAccumulatePunctualShadowedLight(\r\n this.base.rgb,\r\n this.metallic,\r\n this.roughness,\r\n this.specularStrength,\r\n this.n,\r\n this.viewDir,\r\n this.NoV,\r\n this.f0,\r\n this.lightColor,\r\n this.L,\r\n this.atten,\r\n this.shadow,\r\n this.litMask,\r\n this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), this.extra.x, pb.float(1)),\r\n this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), this.extra.y, pb.float(1)),\r\n this.outLight,\r\n this.shadowTerm\r\n );\r\n });\r\n this.$if(pb.notEqual(this.debugShadowTermOnly, 0), function () {\r\n this.$outputs.color = pb.vec4(pb.vec3(this.shadowTerm), 1);\r\n }).$else(function () {\r\n this.$outputs.color = pb.vec4(this.outLight, 0);\r\n });\r\n });\r\n }\r\n });\r\n if (!builtProgram) {\r\n ctx.currentShadowLight = prevLight;\r\n ctx.renderPass = prevRenderPass;\r\n return;\r\n }\r\n program = builtProgram;\r\n program.name = '@DeferredShadowLightPass';\r\n DeferredShadowLightPass._programs[hash] = program;\r\n }\r\n let bindGroup = DeferredShadowLightPass._bindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n DeferredShadowLightPass._bindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setTexture('gbufferColorTex', gbufferColor, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('gbufferRoughnessTex', gbufferRoughness, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('gbufferNormalTex', gbufferNormal, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('gbufferExtraTex', gbufferExtra, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('linearDepthTex', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n DeferredShadowLightPass.bindOptionalSceneTextures(bindGroup, program, ctx);\r\n const cameraRight = ctx.camera.worldMatrix.getRow(0).xyz().inplaceNormalize();\r\n const cameraUp = ctx.camera.worldMatrix.getRow(1).xyz().inplaceNormalize();\r\n const cameraForward = ctx.camera.worldMatrix.getRow(2).xyz().inplaceNormalize().scaleBy(-1);\r\n const cameraPos = ctx.camera.getWorldPosition();\r\n bindGroup.setValue('cameraRight', new Float32Array([cameraRight.x, cameraRight.y, cameraRight.z]));\r\n bindGroup.setValue('cameraUp', new Float32Array([cameraUp.x, cameraUp.y, cameraUp.z]));\r\n bindGroup.setValue('cameraForward', new Float32Array([cameraForward.x, cameraForward.y, cameraForward.z]));\r\n bindGroup.setValue('cameraViewProjection', ctx.camera.viewProjectionMatrix);\r\n bindGroup.setValue('cameraPos', new Float32Array([cameraPos.x, cameraPos.y, cameraPos.z]));\r\n bindGroup.setValue('cameraProj', new Float32Array([ctx.camera.getTanHalfFovy(), ctx.camera.getAspect()]));\r\n bindGroup.setValue('cameraNearFar', new Float32Array([ctx.camera.getNearPlane(), ctx.camera.getFarPlane()]));\r\n bindGroup.setValue('debugShadowTermOnly', debugShadowTermOnly ? 1 : 0);\r\n bindGroup.setValue('camera', DeferredShadowLightPass.getCameraUniforms(ctx));\r\n ShaderHelper.setLightUniformsShadow(bindGroup, ctx, light);\r\n if (!DeferredShadowLightPass._additiveRenderStates) {\r\n DeferredShadowLightPass._additiveRenderStates = device.createRenderStateSet();\r\n DeferredShadowLightPass._additiveRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n DeferredShadowLightPass._additiveRenderStates.useRasterizerState().setCullMode('none');\r\n DeferredShadowLightPass._additiveRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendEquation('add', 'add')\r\n .setBlendFuncRGB('one', 'one')\r\n .setBlendFuncAlpha('zero', 'one');\r\n }\r\n if (!DeferredShadowLightPass._multiplyRenderStates) {\r\n DeferredShadowLightPass._multiplyRenderStates = device.createRenderStateSet();\r\n DeferredShadowLightPass._multiplyRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n DeferredShadowLightPass._multiplyRenderStates.useRasterizerState().setCullMode('none');\r\n DeferredShadowLightPass._multiplyRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendEquation('add', 'add')\r\n .setBlendFuncRGB('zero', 'src-color')\r\n .setBlendFuncAlpha('zero', 'one');\r\n }\r\n const renderStates = debugShadowTermOnly\r\n ? DeferredShadowLightPass._multiplyRenderStates\r\n : DeferredShadowLightPass._additiveRenderStates;\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(renderStates);\r\n ctx.currentShadowLight = prevLight;\r\n ctx.renderPass = prevRenderPass;\r\n }\r\n}\r\n"],"names":["DeferredShadowLightPass","_programs","_bindGroups","_additiveRenderStates","_multiplyRenderStates","getProgramHash","deviceType","shaderHash","debugShadowTermOnly","hasSceneColor","hasHiZ","hasLinearDepth","hasTextureUniform","bindGroup","program","name","bindGroupLayout","getLayout","bindGroupLayouts","entries","some","entry","texture","storageTexture","externalTexture","bindOptionalSceneTextures","ctx","linearDepthTexture","setTexture","fetchSampler","setValue","Vector2","width","height","sceneColorTexture","HiZTexture","Vector4","mipLevelCount","getCameraUniforms","cameraPos","camera","getWorldPosition","position","x","y","z","renderSize","renderWidth","renderHeight","viewProjectionMatrix","unjitteredVPMatrix","jitteredInvVPMatrix","invViewProjectionMatrix","jitterValue","projectionMatrix","getProjectionMatrix","invProjectionMatrix","getInvProjectionMatrix","viewMatrix","worldMatrix","params","getNearPlane","getFarPlane","flip","roughnessFactor","SSR","ssrRoughnessFactor","shadowDebugCascades","frameDeltaTime","device","frameInfo","elapsedFrame","elapsedTime","elapsedOverall","framestamp","frameCounter","render","light","gbufferColor","gbufferRoughness","gbufferNormal","gbufferExtra","shadowMapInfo","has","shadowMapParams","get","prevLight","currentShadowLight","prevRenderPass","renderPass","type","RENDER_PASS_TYPE_LIGHT","hash","isWebGL","builtProgram","buildRenderProgram","label","vertex","pb","$inputs","pos","vec2","attrib","main","$builtins","vec4","neg","fragment","ShaderHelper","prepareFragmentShader","gbufferColorTex","tex2D","uniform","gbufferRoughnessTex","gbufferNormalTex","gbufferExtraTex","linearDepthTex","vec3","cameraRight","cameraUp","cameraForward","cameraViewProjection","mat4","cameraProj","cameraNearFar","int","$outputs","color","func","$l","uv","div","fragCoord","xy","getRenderSize","depthSample","textureSample","$return","decodeNormalizedFloatFromRGBA","r","float","falloff","max","sub","dist","range","mul","base","zPointAtten","posRange","w","spotFactor","dot","normalize","worldPos","xyz","dirCutoff","smoothStep","mix","inout","NoL","clamp","n","L","$if","greaterThan","H","add","viewDir","NoH","VoH","F","fresnelSchlick","f0","alphaRoughness","roughness","D","distributionGGX","V","visGGX","NoV","diffuseBRDF","baseColor","metallic","Math","PI","unshadowedColor","lightColor","atten","punctualColor","shadow","litMask","diffuse","diffScale","specular","specScale","outLight","outShadow","texSize","ivec2","pixelCoord","textureLoad","steps","maxDistance","$choice","equal","lightType","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","stepLen","occlusion","$for","samplePos","i","clip","lessThanEqual","$continue","ndc","or","lessThan","sceneDepth","zSampleLinearDepthAtUV","sampleDepth","visibility","center","ax","axisX","ay","axisY","halfWidth","length","halfHeight","area","lightNormal","cross","baseRectColor","colorIntensity","rgb","a","Lvec","invDist2","NoL_light","lightSampleColor","sampleShadow","contactShadow","sampleLitMask","sampleNoL","sample","u","v","calculateShadow","validMask","zContactShadow","LIGHT_TYPE_RECT","zAccumulatePunctualShadowedLight","specularStrength","rm","extraData","litFlag","b","xScale","yScale","camRayDir","linearDepthNormalized","zGetLinearDepth","linearDepth","rayScale","extraParams","positionAndRange","directionAndCutoff","diffuseAndIntensity","extra","shadowTerm","toLight","zSpotAtten","$else","zAccumulateRectShadowedLight","notEqual","createBindGroup","getRow","inplaceNormalize","scaleBy","Float32Array","getTanHalfFovy","getAspect","setLightUniformsShadow","createRenderStateSet","useDepthState","enableTest","enableWrite","useRasterizerState","setCullMode","useBlendingState","enable","setBlendEquation","setBlendFuncRGB","setBlendFuncAlpha","renderStates","setProgram","setBindGroup","drawFullscreenQuad"],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { LightPass } from './lightpass.js';
|
|
2
|
-
import { RENDER_PASS_TYPE_GBUFFER, QUEUE_OPAQUE, MaterialVaryingFlags } from '../values.js';
|
|
3
|
-
import { Vector4 } from '@zephyr3d/base';
|
|
4
|
-
import { ShaderHelper } from '../material/shader/helper.js';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* GBuffer pass scaffold.
|
|
8
|
-
*
|
|
9
|
-
* Stage-1 keeps current material lighting behavior and only renders opaque lists,
|
|
10
|
-
* while preserving SSR roughness/normal MRT outputs for deferred/hybrid paths.
|
|
11
|
-
* @internal
|
|
12
|
-
*/ class GBufferPass extends LightPass {
|
|
13
|
-
constructor(){
|
|
14
|
-
super();
|
|
15
|
-
this._type = RENDER_PASS_TYPE_GBUFFER;
|
|
16
|
-
this._clearColor = Vector4.zero();
|
|
17
|
-
}
|
|
18
|
-
/** @internal */ _getGlobalBindGroupHash(ctx) {
|
|
19
|
-
return `${ctx.materialFlags}:${ctx.motionVectors ? 1 : 0}`;
|
|
20
|
-
}
|
|
21
|
-
/** @internal */ renderItems(ctx, camera, renderQueue) {
|
|
22
|
-
ctx.renderPassHash = null;
|
|
23
|
-
ctx.env = ctx.scene.env;
|
|
24
|
-
ctx.drawEnvLight = false;
|
|
25
|
-
ctx.flip = this.isAutoFlip(ctx);
|
|
26
|
-
ctx.queue = QUEUE_OPAQUE;
|
|
27
|
-
ctx.oit = null;
|
|
28
|
-
const items = renderQueue.itemList;
|
|
29
|
-
if (!items?.opaque) {
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
ctx.currentShadowLight = null;
|
|
33
|
-
ctx.lightBlending = false;
|
|
34
|
-
ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;
|
|
35
|
-
ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);
|
|
36
|
-
const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);
|
|
37
|
-
ctx.device.setBindGroup(0, bindGroup);
|
|
38
|
-
ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, !!ctx.device.getFramebuffer());
|
|
39
|
-
const reverseWinding = camera.worldMatrixDet < 0;
|
|
40
|
-
for (const lit of items.opaque.lit){
|
|
41
|
-
this.drawItemList(lit, ctx, reverseWinding);
|
|
42
|
-
}
|
|
43
|
-
for (const unlit of items.opaque.unlit){
|
|
44
|
-
this.drawItemList(unlit, ctx, reverseWinding);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export { GBufferPass };
|
|
50
|
-
//# sourceMappingURL=gbufferpass.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gbufferpass.js","sources":["../../src/render/gbufferpass.ts"],"sourcesContent":["import { LightPass } from './lightpass';\r\nimport { MaterialVaryingFlags, QUEUE_OPAQUE, RENDER_PASS_TYPE_GBUFFER } from '../values';\r\nimport type { DrawContext } from './drawable';\r\nimport type { Camera } from '../camera';\r\nimport type { RenderQueue } from './render_queue';\r\nimport { Vector4 } from '@zephyr3d/base';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\n/**\r\n * GBuffer pass scaffold.\r\n *\r\n * Stage-1 keeps current material lighting behavior and only renders opaque lists,\r\n * while preserving SSR roughness/normal MRT outputs for deferred/hybrid paths.\r\n * @internal\r\n */\r\nexport class GBufferPass extends LightPass {\r\n constructor() {\r\n super();\r\n this._type = RENDER_PASS_TYPE_GBUFFER;\r\n this._clearColor = Vector4.zero();\r\n }\r\n /** @internal */\r\n protected _getGlobalBindGroupHash(ctx: DrawContext) {\r\n return `${ctx.materialFlags}:${ctx.motionVectors ? 1 : 0}`;\r\n }\r\n /** @internal */\r\n protected renderItems(ctx: DrawContext, camera: Camera, renderQueue: RenderQueue) {\r\n ctx.renderPassHash = null;\r\n ctx.env = ctx.scene.env;\r\n ctx.drawEnvLight = false;\r\n ctx.flip = this.isAutoFlip(ctx);\r\n ctx.queue = QUEUE_OPAQUE;\r\n ctx.oit = null;\r\n const items = renderQueue.itemList;\r\n if (!items?.opaque) {\r\n return;\r\n }\r\n ctx.currentShadowLight = null;\r\n ctx.lightBlending = false;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.APPLY_FOG;\r\n ctx.renderPassHash = this.getGlobalBindGroupHash(ctx, camera);\r\n const bindGroup = ctx.globalBindGroupAllocator.getGlobalBindGroup(ctx);\r\n ctx.device.setBindGroup(0, bindGroup);\r\n ShaderHelper.setCameraUniforms(bindGroup, ctx, camera, !!ctx.device.getFramebuffer());\r\n const reverseWinding = camera.worldMatrixDet < 0;\r\n for (const lit of items.opaque.lit) {\r\n this.drawItemList(lit, ctx, reverseWinding);\r\n }\r\n for (const unlit of items.opaque.unlit) {\r\n this.drawItemList(unlit, ctx, reverseWinding);\r\n }\r\n }\r\n}\r\n"],"names":["GBufferPass","LightPass","_type","RENDER_PASS_TYPE_GBUFFER","_clearColor","Vector4","zero","_getGlobalBindGroupHash","ctx","materialFlags","motionVectors","camera","renderQueue","renderPassHash","env","scene","drawEnvLight","flip","isAutoFlip","queue","QUEUE_OPAQUE","oit","items","itemList","opaque","currentShadowLight","lightBlending","MaterialVaryingFlags","APPLY_FOG","getGlobalBindGroupHash","bindGroup","globalBindGroupAllocator","getGlobalBindGroup","device","setBindGroup","ShaderHelper","setCameraUniforms","getFramebuffer","reverseWinding","worldMatrixDet","lit","drawItemList","unlit"],"mappings":";;;;;AAQA;;;;;;IAOO,MAAMA,WAAoBC,SAAAA,SAAAA,CAAAA;IAC/B,WAAc,EAAA;QACZ,KAAK,EAAA;QACL,IAAI,CAACC,KAAK,GAAGC,wBAAAA;AACb,QAAA,IAAI,CAACC,WAAW,GAAGC,OAAAA,CAAQC,IAAI,EAAA;AACjC;AACA,qBACUC,uBAAwBC,CAAAA,GAAgB,EAAE;QAClD,OAAO,CAAA,EAAGA,GAAIC,CAAAA,aAAa,CAAC,CAAC,EAAED,GAAIE,CAAAA,aAAa,GAAG,CAAA,GAAI,CAAG,CAAA,CAAA;AAC5D;qBAEA,WAAsBF,CAAAA,GAAgB,EAAEG,MAAc,EAAEC,WAAwB,EAAE;AAChFJ,QAAAA,GAAAA,CAAIK,cAAc,GAAG,IAAA;AACrBL,QAAAA,GAAAA,CAAIM,GAAG,GAAGN,GAAIO,CAAAA,KAAK,CAACD,GAAG;AACvBN,QAAAA,GAAAA,CAAIQ,YAAY,GAAG,KAAA;AACnBR,QAAAA,GAAAA,CAAIS,IAAI,GAAG,IAAI,CAACC,UAAU,CAACV,GAAAA,CAAAA;AAC3BA,QAAAA,GAAAA,CAAIW,KAAK,GAAGC,YAAAA;AACZZ,QAAAA,GAAAA,CAAIa,GAAG,GAAG,IAAA;QACV,MAAMC,KAAAA,GAAQV,YAAYW,QAAQ;QAClC,IAAI,CAACD,OAAOE,MAAQ,EAAA;AAClB,YAAA;AACF;AACAhB,QAAAA,GAAAA,CAAIiB,kBAAkB,GAAG,IAAA;AACzBjB,QAAAA,GAAAA,CAAIkB,aAAa,GAAG,KAAA;AACpBlB,QAAAA,GAAAA,CAAIC,aAAa,IAAI,CAACkB,oBAAAA,CAAqBC,SAAS;AACpDpB,QAAAA,GAAAA,CAAIK,cAAc,GAAG,IAAI,CAACgB,sBAAsB,CAACrB,GAAKG,EAAAA,MAAAA,CAAAA;AACtD,QAAA,MAAMmB,SAAYtB,GAAAA,GAAAA,CAAIuB,wBAAwB,CAACC,kBAAkB,CAACxB,GAAAA,CAAAA;AAClEA,QAAAA,GAAAA,CAAIyB,MAAM,CAACC,YAAY,CAAC,CAAGJ,EAAAA,SAAAA,CAAAA;QAC3BK,YAAaC,CAAAA,iBAAiB,CAACN,SAAAA,EAAWtB,GAAKG,EAAAA,MAAAA,EAAQ,CAAC,CAACH,GAAAA,CAAIyB,MAAM,CAACI,cAAc,EAAA,CAAA;QAClF,MAAMC,cAAAA,GAAiB3B,MAAO4B,CAAAA,cAAc,GAAG,CAAA;AAC/C,QAAA,KAAK,MAAMC,GAAOlB,IAAAA,KAAAA,CAAME,MAAM,CAACgB,GAAG,CAAE;AAClC,YAAA,IAAI,CAACC,YAAY,CAACD,GAAAA,EAAKhC,GAAK8B,EAAAA,cAAAA,CAAAA;AAC9B;AACA,QAAA,KAAK,MAAMI,KAASpB,IAAAA,KAAAA,CAAME,MAAM,CAACkB,KAAK,CAAE;AACtC,YAAA,IAAI,CAACD,YAAY,CAACC,KAAAA,EAAOlC,GAAK8B,EAAAA,cAAAA,CAAAA;AAChC;AACF;AACF;;;;"}
|
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
import { BaseSprite } from './basesprite.js';
|
|
2
|
-
import { Vector3, splitStringByGraphemes } from '@zephyr3d/base';
|
|
3
|
-
import { Font } from '@zephyr3d/device';
|
|
4
|
-
import { getDevice } from '../app/api.js';
|
|
5
|
-
import { SDFSpriteMaterial } from '../material/sprite_sdf.js';
|
|
6
|
-
|
|
7
|
-
const SDF_SOURCE_SCALE = 4;
|
|
8
|
-
const SDF_RADIUS = 8;
|
|
9
|
-
const INF = 1e20;
|
|
10
|
-
class SDFTextCanvas {
|
|
11
|
-
static _context = null;
|
|
12
|
-
static get context() {
|
|
13
|
-
if (!this._context) {
|
|
14
|
-
const canvas = document.createElement('canvas');
|
|
15
|
-
this._context = canvas.getContext('2d', {
|
|
16
|
-
willReadFrequently: true
|
|
17
|
-
});
|
|
18
|
-
this._context.textBaseline = 'top';
|
|
19
|
-
this._context.textAlign = 'left';
|
|
20
|
-
this._context.imageSmoothingEnabled = true;
|
|
21
|
-
this._context.imageSmoothingQuality = 'high';
|
|
22
|
-
}
|
|
23
|
-
return this._context;
|
|
24
|
-
}
|
|
25
|
-
static resize(width, height) {
|
|
26
|
-
const canvas = this.context.canvas;
|
|
27
|
-
if (canvas.width !== width) {
|
|
28
|
-
canvas.width = width;
|
|
29
|
-
}
|
|
30
|
-
if (canvas.height !== height) {
|
|
31
|
-
canvas.height = height;
|
|
32
|
-
}
|
|
33
|
-
const ctx = this.context;
|
|
34
|
-
ctx.textBaseline = 'top';
|
|
35
|
-
ctx.textAlign = 'left';
|
|
36
|
-
ctx.imageSmoothingEnabled = true;
|
|
37
|
-
ctx.imageSmoothingQuality = 'high';
|
|
38
|
-
return ctx;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* 3D SDF text sprite node.
|
|
43
|
-
*
|
|
44
|
-
* @public
|
|
45
|
-
*/ class SDFTextSprite extends BaseSprite {
|
|
46
|
-
_resolutionX;
|
|
47
|
-
_resolutionY;
|
|
48
|
-
_text;
|
|
49
|
-
_font;
|
|
50
|
-
_color;
|
|
51
|
-
constructor(scene){
|
|
52
|
-
super(scene);
|
|
53
|
-
this.material = new SDFSpriteMaterial();
|
|
54
|
-
this._resolutionX = 128;
|
|
55
|
-
this._resolutionY = 128;
|
|
56
|
-
this._text = '';
|
|
57
|
-
this._font = '12px arial';
|
|
58
|
-
this._color = new Vector3(1, 1, 1);
|
|
59
|
-
this.material.textColor = this._color;
|
|
60
|
-
this.scene.queueUpdateNode(this);
|
|
61
|
-
}
|
|
62
|
-
isSprite() {
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
get resolutionX() {
|
|
66
|
-
return this._resolutionX;
|
|
67
|
-
}
|
|
68
|
-
set resolutionX(value) {
|
|
69
|
-
if (this._resolutionX !== value) {
|
|
70
|
-
this._resolutionX = value;
|
|
71
|
-
this.scene.queueUpdateNode(this);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
get resolutionY() {
|
|
75
|
-
return this._resolutionY;
|
|
76
|
-
}
|
|
77
|
-
set resolutionY(value) {
|
|
78
|
-
if (this._resolutionY !== value) {
|
|
79
|
-
this._resolutionY = value;
|
|
80
|
-
this.scene.queueUpdateNode(this);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
get text() {
|
|
84
|
-
return this._text;
|
|
85
|
-
}
|
|
86
|
-
set text(value) {
|
|
87
|
-
if (this._text !== value) {
|
|
88
|
-
this._text = value;
|
|
89
|
-
this.scene.queueUpdateNode(this);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
get textColor() {
|
|
93
|
-
return this._color;
|
|
94
|
-
}
|
|
95
|
-
set textColor(value) {
|
|
96
|
-
if (!this._color.equalsTo(value)) {
|
|
97
|
-
this._color.set(value);
|
|
98
|
-
this.material.textColor = value;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
get font() {
|
|
102
|
-
return this._font;
|
|
103
|
-
}
|
|
104
|
-
set font(value) {
|
|
105
|
-
if (this._font !== value) {
|
|
106
|
-
this._font = value;
|
|
107
|
-
this.scene.queueUpdateNode(this);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
update() {
|
|
111
|
-
const tex = this.ensureTexture();
|
|
112
|
-
const mask = this.renderSDFTexture();
|
|
113
|
-
tex.update(mask, 0, 0, this._resolutionX, this._resolutionY);
|
|
114
|
-
this.material.spriteTexture = tex;
|
|
115
|
-
this.material.textColor = this._color;
|
|
116
|
-
this.material.setSDFTextureInfo(SDF_RADIUS, this._resolutionX, this._resolutionY);
|
|
117
|
-
}
|
|
118
|
-
ensureTexture() {
|
|
119
|
-
let tex = this.material.spriteTexture;
|
|
120
|
-
if (!tex || tex.width !== this._resolutionX || tex.height !== this._resolutionY || tex.format !== 'r8unorm') {
|
|
121
|
-
tex = getDevice().createTexture2D('r8unorm', this._resolutionX, this._resolutionY, {
|
|
122
|
-
mipmapping: false,
|
|
123
|
-
samplerOptions: {
|
|
124
|
-
minFilter: 'linear',
|
|
125
|
-
magFilter: 'linear'
|
|
126
|
-
}
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
return tex;
|
|
130
|
-
}
|
|
131
|
-
renderSDFTexture() {
|
|
132
|
-
const sourcePadding = (SDF_RADIUS + 2) * SDF_SOURCE_SCALE;
|
|
133
|
-
const sourceWidth = this._resolutionX * SDF_SOURCE_SCALE + sourcePadding * 2;
|
|
134
|
-
const sourceHeight = this._resolutionY * SDF_SOURCE_SCALE + sourcePadding * 2;
|
|
135
|
-
const ctx = SDFTextCanvas.resize(sourceWidth, sourceHeight);
|
|
136
|
-
ctx.clearRect(0, 0, sourceWidth, sourceHeight);
|
|
137
|
-
const font = Font.fetchFont(this._font, SDF_SOURCE_SCALE);
|
|
138
|
-
ctx.font = font.fontNameScaled;
|
|
139
|
-
ctx.fillStyle = '#ffffff';
|
|
140
|
-
const lines = this.layoutText(ctx, font, this._text, this._resolutionX * SDF_SOURCE_SCALE);
|
|
141
|
-
const lineHeight = font.maxHeightScaled;
|
|
142
|
-
for(let i = 0; i < lines.length; i++){
|
|
143
|
-
const lineY = sourcePadding + i * lineHeight;
|
|
144
|
-
if (lineY >= sourcePadding + this._resolutionY * SDF_SOURCE_SCALE) {
|
|
145
|
-
break;
|
|
146
|
-
}
|
|
147
|
-
ctx.fillText(lines[i].text, sourcePadding, lineY - font.topScaled);
|
|
148
|
-
}
|
|
149
|
-
const alpha = ctx.getImageData(0, 0, sourceWidth, sourceHeight).data;
|
|
150
|
-
const distToOutside = new Float32Array(sourceWidth * sourceHeight);
|
|
151
|
-
const distToInside = new Float32Array(sourceWidth * sourceHeight);
|
|
152
|
-
initializeDistanceGrids(alpha, distToOutside, distToInside);
|
|
153
|
-
distanceTransform(distToOutside, sourceWidth, sourceHeight);
|
|
154
|
-
distanceTransform(distToInside, sourceWidth, sourceHeight);
|
|
155
|
-
const out = new Uint8Array(this._resolutionX * this._resolutionY);
|
|
156
|
-
for(let y = 0; y < this._resolutionY; y++){
|
|
157
|
-
const sourceY = clampInt(Math.round(sourcePadding + (y + 0.5) * SDF_SOURCE_SCALE - 0.5), 0, sourceHeight - 1);
|
|
158
|
-
for(let x = 0; x < this._resolutionX; x++){
|
|
159
|
-
const sourceX = clampInt(Math.round(sourcePadding + (x + 0.5) * SDF_SOURCE_SCALE - 0.5), 0, sourceWidth - 1);
|
|
160
|
-
const sourceIndex = sourceY * sourceWidth + sourceX;
|
|
161
|
-
const signedDistance = (Math.sqrt(distToOutside[sourceIndex]) - Math.sqrt(distToInside[sourceIndex])) / SDF_SOURCE_SCALE;
|
|
162
|
-
const value = clamp01(0.5 + signedDistance / (2 * SDF_RADIUS));
|
|
163
|
-
out[y * this._resolutionX + x] = Math.round(value * 255);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return out;
|
|
167
|
-
}
|
|
168
|
-
layoutText(ctx, font, text, maxWidth) {
|
|
169
|
-
const result = [];
|
|
170
|
-
const paragraphs = text.split(/\r\n|\r|\n/);
|
|
171
|
-
for (const paragraph of paragraphs){
|
|
172
|
-
if (paragraph.length === 0) {
|
|
173
|
-
result.push({
|
|
174
|
-
text: '',
|
|
175
|
-
width: 0
|
|
176
|
-
});
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
const chars = splitStringByGraphemes(paragraph);
|
|
180
|
-
let start = 0;
|
|
181
|
-
while(start < chars.length){
|
|
182
|
-
let width = 0;
|
|
183
|
-
let breakPos = start;
|
|
184
|
-
let lastWhitespaceBreak = -1;
|
|
185
|
-
while(breakPos < chars.length){
|
|
186
|
-
const ch = chars[breakPos];
|
|
187
|
-
const charWidth = measureGlyphWidth(ctx, ch);
|
|
188
|
-
if (breakPos > start && width + charWidth > maxWidth) {
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
191
|
-
width += charWidth;
|
|
192
|
-
breakPos++;
|
|
193
|
-
if (/^\s$/u.test(ch)) {
|
|
194
|
-
lastWhitespaceBreak = breakPos;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
if (breakPos < chars.length && lastWhitespaceBreak > start) {
|
|
198
|
-
const lineText = chars.slice(start, lastWhitespaceBreak).join('').replace(/\s+$/u, '');
|
|
199
|
-
result.push({
|
|
200
|
-
text: lineText,
|
|
201
|
-
width: this.measureLineWidth(ctx, lineText)
|
|
202
|
-
});
|
|
203
|
-
start = lastWhitespaceBreak;
|
|
204
|
-
while(start < chars.length && /^\s$/u.test(chars[start])){
|
|
205
|
-
start++;
|
|
206
|
-
}
|
|
207
|
-
} else {
|
|
208
|
-
const lineText = chars.slice(start, breakPos).join('');
|
|
209
|
-
result.push({
|
|
210
|
-
text: lineText,
|
|
211
|
-
width
|
|
212
|
-
});
|
|
213
|
-
start = Math.max(breakPos, start + 1);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
return result;
|
|
218
|
-
}
|
|
219
|
-
measureLineWidth(ctx, text) {
|
|
220
|
-
let width = 0;
|
|
221
|
-
for (const ch of splitStringByGraphemes(text)){
|
|
222
|
-
width += measureGlyphWidth(ctx, ch);
|
|
223
|
-
}
|
|
224
|
-
return width;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
function clamp01(value) {
|
|
228
|
-
return Math.min(Math.max(value, 0), 1);
|
|
229
|
-
}
|
|
230
|
-
function clampInt(value, minValue, maxValue) {
|
|
231
|
-
return Math.min(Math.max(value, minValue), maxValue);
|
|
232
|
-
}
|
|
233
|
-
function square(value) {
|
|
234
|
-
return value * value;
|
|
235
|
-
}
|
|
236
|
-
function measureGlyphWidth(ctx, char) {
|
|
237
|
-
const metric = ctx.measureText(char);
|
|
238
|
-
let width = metric.width;
|
|
239
|
-
if (width === 0) {
|
|
240
|
-
return 0;
|
|
241
|
-
}
|
|
242
|
-
if (typeof metric.actualBoundingBoxRight === 'number') {
|
|
243
|
-
width = Math.floor(Math.max(width, metric.actualBoundingBoxRight) + 0.8);
|
|
244
|
-
}
|
|
245
|
-
return Math.round(width);
|
|
246
|
-
}
|
|
247
|
-
function initializeDistanceGrids(alpha, outside, inside) {
|
|
248
|
-
for(let i = 0; i < outside.length; i++){
|
|
249
|
-
const a = alpha[i * 4 + 3] / 255;
|
|
250
|
-
if (a <= 0) {
|
|
251
|
-
outside[i] = INF;
|
|
252
|
-
inside[i] = 0;
|
|
253
|
-
} else if (a >= 1) {
|
|
254
|
-
outside[i] = 0;
|
|
255
|
-
inside[i] = INF;
|
|
256
|
-
} else {
|
|
257
|
-
outside[i] = square(Math.max(0, 0.5 - a));
|
|
258
|
-
inside[i] = square(Math.max(0, a - 0.5));
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
function distanceTransform(grid, width, height) {
|
|
263
|
-
const temp = new Float32Array(grid.length);
|
|
264
|
-
const f = new Float32Array(Math.max(width, height));
|
|
265
|
-
const d = new Float32Array(Math.max(width, height));
|
|
266
|
-
const v = new Int32Array(Math.max(width, height));
|
|
267
|
-
const z = new Float32Array(Math.max(width, height) + 1);
|
|
268
|
-
for(let x = 0; x < width; x++){
|
|
269
|
-
for(let y = 0; y < height; y++){
|
|
270
|
-
f[y] = grid[y * width + x];
|
|
271
|
-
}
|
|
272
|
-
edt1d(f, height, d, v, z);
|
|
273
|
-
for(let y = 0; y < height; y++){
|
|
274
|
-
temp[y * width + x] = d[y];
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
for(let y = 0; y < height; y++){
|
|
278
|
-
const rowOffset = y * width;
|
|
279
|
-
for(let x = 0; x < width; x++){
|
|
280
|
-
f[x] = temp[rowOffset + x];
|
|
281
|
-
}
|
|
282
|
-
edt1d(f, width, d, v, z);
|
|
283
|
-
for(let x = 0; x < width; x++){
|
|
284
|
-
temp[rowOffset + x] = d[x];
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
grid.set(temp);
|
|
288
|
-
}
|
|
289
|
-
function edt1d(f, count, out, v, z) {
|
|
290
|
-
let k = 0;
|
|
291
|
-
v[0] = 0;
|
|
292
|
-
z[0] = -1e20;
|
|
293
|
-
z[1] = INF;
|
|
294
|
-
for(let q = 1; q < count; q++){
|
|
295
|
-
let s = 0;
|
|
296
|
-
do {
|
|
297
|
-
const r = v[k];
|
|
298
|
-
s = (f[q] + q * q - (f[r] + r * r)) / (q - r) / 2;
|
|
299
|
-
if (s <= z[k]) {
|
|
300
|
-
k--;
|
|
301
|
-
} else {
|
|
302
|
-
break;
|
|
303
|
-
}
|
|
304
|
-
}while (k >= 0)
|
|
305
|
-
k++;
|
|
306
|
-
v[k] = q;
|
|
307
|
-
z[k] = s;
|
|
308
|
-
z[k + 1] = INF;
|
|
309
|
-
}
|
|
310
|
-
k = 0;
|
|
311
|
-
for(let q = 0; q < count; q++){
|
|
312
|
-
while(z[k + 1] < q){
|
|
313
|
-
k++;
|
|
314
|
-
}
|
|
315
|
-
const r = v[k];
|
|
316
|
-
const delta = q - r;
|
|
317
|
-
out[q] = delta * delta + f[r];
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
export { SDFTextSprite };
|
|
322
|
-
//# sourceMappingURL=sdftextsprite.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sdftextsprite.js","sources":["../../src/scene/sdftextsprite.ts"],"sourcesContent":["import type { Scene } from './scene';\r\nimport { BaseSprite } from './basesprite';\r\nimport type { Immutable, Nullable } from '@zephyr3d/base';\r\nimport { splitStringByGraphemes, Vector3 } from '@zephyr3d/base';\r\nimport { Font } from '@zephyr3d/device';\r\nimport { getDevice } from '../app/api';\r\nimport { SDFSpriteMaterial } from '../material/sprite_sdf';\r\nimport type { Sprite } from './sprite';\r\n\r\nconst SDF_SOURCE_SCALE = 4;\r\nconst SDF_RADIUS = 8;\r\nconst INF = 1e20;\r\n\r\ntype TextLayoutLine = {\r\n text: string;\r\n width: number;\r\n};\r\n\r\nclass SDFTextCanvas {\r\n private static _context: Nullable<CanvasRenderingContext2D> = null;\r\n static get context() {\r\n if (!this._context) {\r\n const canvas = document.createElement('canvas');\r\n this._context = canvas.getContext('2d', {\r\n willReadFrequently: true\r\n })!;\r\n this._context.textBaseline = 'top';\r\n this._context.textAlign = 'left';\r\n this._context.imageSmoothingEnabled = true;\r\n this._context.imageSmoothingQuality = 'high';\r\n }\r\n return this._context!;\r\n }\r\n static resize(width: number, height: number) {\r\n const canvas = this.context.canvas;\r\n if (canvas.width !== width) {\r\n canvas.width = width;\r\n }\r\n if (canvas.height !== height) {\r\n canvas.height = height;\r\n }\r\n const ctx = this.context;\r\n ctx.textBaseline = 'top';\r\n ctx.textAlign = 'left';\r\n ctx.imageSmoothingEnabled = true;\r\n ctx.imageSmoothingQuality = 'high';\r\n return ctx;\r\n }\r\n}\r\n\r\n/**\r\n * 3D SDF text sprite node.\r\n *\r\n * @public\r\n */\r\nexport class SDFTextSprite extends BaseSprite<SDFSpriteMaterial> {\r\n private _resolutionX: number;\r\n private _resolutionY: number;\r\n private _text: string;\r\n private _font: string;\r\n private _color: Vector3;\r\n constructor(scene: Scene) {\r\n super(scene);\r\n this.material = new SDFSpriteMaterial();\r\n this._resolutionX = 128;\r\n this._resolutionY = 128;\r\n this._text = '';\r\n this._font = '12px arial';\r\n this._color = new Vector3(1, 1, 1);\r\n this.material.textColor = this._color;\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n isSprite(): this is Sprite {\r\n return true;\r\n }\r\n get resolutionX() {\r\n return this._resolutionX;\r\n }\r\n set resolutionX(value) {\r\n if (this._resolutionX !== value) {\r\n this._resolutionX = value;\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n get resolutionY() {\r\n return this._resolutionY;\r\n }\r\n set resolutionY(value) {\r\n if (this._resolutionY !== value) {\r\n this._resolutionY = value;\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n get text() {\r\n return this._text;\r\n }\r\n set text(value) {\r\n if (this._text !== value) {\r\n this._text = value;\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n get textColor(): Immutable<Vector3> {\r\n return this._color;\r\n }\r\n set textColor(value: Immutable<Vector3>) {\r\n if (!this._color.equalsTo(value)) {\r\n this._color.set(value);\r\n this.material.textColor = value;\r\n }\r\n }\r\n get font() {\r\n return this._font;\r\n }\r\n set font(value) {\r\n if (this._font !== value) {\r\n this._font = value;\r\n this.scene!.queueUpdateNode(this);\r\n }\r\n }\r\n update(): void {\r\n const tex = this.ensureTexture();\r\n const mask = this.renderSDFTexture();\r\n tex.update(mask, 0, 0, this._resolutionX, this._resolutionY);\r\n this.material.spriteTexture = tex;\r\n this.material.textColor = this._color;\r\n this.material.setSDFTextureInfo(SDF_RADIUS, this._resolutionX, this._resolutionY);\r\n }\r\n private ensureTexture() {\r\n let tex = this.material.spriteTexture;\r\n if (\r\n !tex ||\r\n tex.width !== this._resolutionX ||\r\n tex.height !== this._resolutionY ||\r\n tex.format !== 'r8unorm'\r\n ) {\r\n tex = getDevice().createTexture2D('r8unorm', this._resolutionX, this._resolutionY, {\r\n mipmapping: false,\r\n samplerOptions: { minFilter: 'linear', magFilter: 'linear' }\r\n })!;\r\n }\r\n return tex;\r\n }\r\n private renderSDFTexture() {\r\n const sourcePadding = (SDF_RADIUS + 2) * SDF_SOURCE_SCALE;\r\n const sourceWidth = this._resolutionX * SDF_SOURCE_SCALE + sourcePadding * 2;\r\n const sourceHeight = this._resolutionY * SDF_SOURCE_SCALE + sourcePadding * 2;\r\n const ctx = SDFTextCanvas.resize(sourceWidth, sourceHeight);\r\n ctx.clearRect(0, 0, sourceWidth, sourceHeight);\r\n const font = Font.fetchFont(this._font, SDF_SOURCE_SCALE);\r\n ctx.font = font.fontNameScaled;\r\n ctx.fillStyle = '#ffffff';\r\n const lines = this.layoutText(ctx, font, this._text, this._resolutionX * SDF_SOURCE_SCALE);\r\n const lineHeight = font.maxHeightScaled;\r\n for (let i = 0; i < lines.length; i++) {\r\n const lineY = sourcePadding + i * lineHeight;\r\n if (lineY >= sourcePadding + this._resolutionY * SDF_SOURCE_SCALE) {\r\n break;\r\n }\r\n ctx.fillText(lines[i].text, sourcePadding, lineY - font.topScaled);\r\n }\r\n const alpha = ctx.getImageData(0, 0, sourceWidth, sourceHeight).data;\r\n const distToOutside = new Float32Array(sourceWidth * sourceHeight);\r\n const distToInside = new Float32Array(sourceWidth * sourceHeight);\r\n initializeDistanceGrids(alpha, distToOutside, distToInside);\r\n distanceTransform(distToOutside, sourceWidth, sourceHeight);\r\n distanceTransform(distToInside, sourceWidth, sourceHeight);\r\n const out = new Uint8Array(this._resolutionX * this._resolutionY);\r\n for (let y = 0; y < this._resolutionY; y++) {\r\n const sourceY = clampInt(\r\n Math.round(sourcePadding + (y + 0.5) * SDF_SOURCE_SCALE - 0.5),\r\n 0,\r\n sourceHeight - 1\r\n );\r\n for (let x = 0; x < this._resolutionX; x++) {\r\n const sourceX = clampInt(\r\n Math.round(sourcePadding + (x + 0.5) * SDF_SOURCE_SCALE - 0.5),\r\n 0,\r\n sourceWidth - 1\r\n );\r\n const sourceIndex = sourceY * sourceWidth + sourceX;\r\n const signedDistance =\r\n (Math.sqrt(distToOutside[sourceIndex]) - Math.sqrt(distToInside[sourceIndex])) / SDF_SOURCE_SCALE;\r\n const value = clamp01(0.5 + signedDistance / (2 * SDF_RADIUS));\r\n out[y * this._resolutionX + x] = Math.round(value * 255);\r\n }\r\n }\r\n return out;\r\n }\r\n private layoutText(\r\n ctx: CanvasRenderingContext2D,\r\n font: Font,\r\n text: string,\r\n maxWidth: number\r\n ): TextLayoutLine[] {\r\n const result: TextLayoutLine[] = [];\r\n const paragraphs = text.split(/\\r\\n|\\r|\\n/);\r\n for (const paragraph of paragraphs) {\r\n if (paragraph.length === 0) {\r\n result.push({ text: '', width: 0 });\r\n continue;\r\n }\r\n const chars = splitStringByGraphemes(paragraph);\r\n let start = 0;\r\n while (start < chars.length) {\r\n let width = 0;\r\n let breakPos = start;\r\n let lastWhitespaceBreak = -1;\r\n while (breakPos < chars.length) {\r\n const ch = chars[breakPos];\r\n const charWidth = measureGlyphWidth(ctx, ch);\r\n if (breakPos > start && width + charWidth > maxWidth) {\r\n break;\r\n }\r\n width += charWidth;\r\n breakPos++;\r\n if (/^\\s$/u.test(ch)) {\r\n lastWhitespaceBreak = breakPos;\r\n }\r\n }\r\n if (breakPos < chars.length && lastWhitespaceBreak > start) {\r\n const lineText = chars.slice(start, lastWhitespaceBreak).join('').replace(/\\s+$/u, '');\r\n result.push({\r\n text: lineText,\r\n width: this.measureLineWidth(ctx, lineText)\r\n });\r\n start = lastWhitespaceBreak;\r\n while (start < chars.length && /^\\s$/u.test(chars[start])) {\r\n start++;\r\n }\r\n } else {\r\n const lineText = chars.slice(start, breakPos).join('');\r\n result.push({ text: lineText, width });\r\n start = Math.max(breakPos, start + 1);\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n private measureLineWidth(ctx: CanvasRenderingContext2D, text: string) {\r\n let width = 0;\r\n for (const ch of splitStringByGraphemes(text)) {\r\n width += measureGlyphWidth(ctx, ch);\r\n }\r\n return width;\r\n }\r\n}\r\n\r\nfunction clamp01(value: number) {\r\n return Math.min(Math.max(value, 0), 1);\r\n}\r\n\r\nfunction clampInt(value: number, minValue: number, maxValue: number) {\r\n return Math.min(Math.max(value, minValue), maxValue);\r\n}\r\n\r\nfunction square(value: number) {\r\n return value * value;\r\n}\r\n\r\nfunction measureGlyphWidth(ctx: CanvasRenderingContext2D, char: string) {\r\n const metric = ctx.measureText(char);\r\n let width = metric.width;\r\n if (width === 0) {\r\n return 0;\r\n }\r\n if (typeof metric.actualBoundingBoxRight === 'number') {\r\n width = Math.floor(Math.max(width, metric.actualBoundingBoxRight) + 0.8);\r\n }\r\n return Math.round(width);\r\n}\r\n\r\nfunction initializeDistanceGrids(alpha: Uint8ClampedArray, outside: Float32Array, inside: Float32Array) {\r\n for (let i = 0; i < outside.length; i++) {\r\n const a = alpha[i * 4 + 3] / 255;\r\n if (a <= 0) {\r\n outside[i] = INF;\r\n inside[i] = 0;\r\n } else if (a >= 1) {\r\n outside[i] = 0;\r\n inside[i] = INF;\r\n } else {\r\n outside[i] = square(Math.max(0, 0.5 - a));\r\n inside[i] = square(Math.max(0, a - 0.5));\r\n }\r\n }\r\n}\r\n\r\nfunction distanceTransform(grid: Float32Array, width: number, height: number) {\r\n const temp = new Float32Array(grid.length);\r\n const f = new Float32Array(Math.max(width, height));\r\n const d = new Float32Array(Math.max(width, height));\r\n const v = new Int32Array(Math.max(width, height));\r\n const z = new Float32Array(Math.max(width, height) + 1);\r\n for (let x = 0; x < width; x++) {\r\n for (let y = 0; y < height; y++) {\r\n f[y] = grid[y * width + x];\r\n }\r\n edt1d(f, height, d, v, z);\r\n for (let y = 0; y < height; y++) {\r\n temp[y * width + x] = d[y];\r\n }\r\n }\r\n for (let y = 0; y < height; y++) {\r\n const rowOffset = y * width;\r\n for (let x = 0; x < width; x++) {\r\n f[x] = temp[rowOffset + x];\r\n }\r\n edt1d(f, width, d, v, z);\r\n for (let x = 0; x < width; x++) {\r\n temp[rowOffset + x] = d[x];\r\n }\r\n }\r\n grid.set(temp);\r\n}\r\n\r\nfunction edt1d(f: Float32Array, count: number, out: Float32Array, v: Int32Array, z: Float32Array) {\r\n let k = 0;\r\n v[0] = 0;\r\n z[0] = -INF;\r\n z[1] = INF;\r\n for (let q = 1; q < count; q++) {\r\n let s = 0;\r\n do {\r\n const r = v[k];\r\n s = (f[q] + q * q - (f[r] + r * r)) / (q - r) / 2;\r\n if (s <= z[k]) {\r\n k--;\r\n } else {\r\n break;\r\n }\r\n } while (k >= 0);\r\n k++;\r\n v[k] = q;\r\n z[k] = s;\r\n z[k + 1] = INF;\r\n }\r\n k = 0;\r\n for (let q = 0; q < count; q++) {\r\n while (z[k + 1] < q) {\r\n k++;\r\n }\r\n const r = v[k];\r\n const delta = q - r;\r\n out[q] = delta * delta + f[r];\r\n }\r\n}\r\n"],"names":["SDF_SOURCE_SCALE","SDF_RADIUS","INF","SDFTextCanvas","_context","context","canvas","document","createElement","getContext","willReadFrequently","textBaseline","textAlign","imageSmoothingEnabled","imageSmoothingQuality","resize","width","height","ctx","SDFTextSprite","BaseSprite","_resolutionX","_resolutionY","_text","_font","_color","scene","material","SDFSpriteMaterial","Vector3","textColor","queueUpdateNode","isSprite","resolutionX","value","resolutionY","text","equalsTo","set","font","update","tex","ensureTexture","mask","renderSDFTexture","spriteTexture","setSDFTextureInfo","format","getDevice","createTexture2D","mipmapping","samplerOptions","minFilter","magFilter","sourcePadding","sourceWidth","sourceHeight","clearRect","Font","fetchFont","fontNameScaled","fillStyle","lines","layoutText","lineHeight","maxHeightScaled","i","length","lineY","fillText","topScaled","alpha","getImageData","data","distToOutside","Float32Array","distToInside","initializeDistanceGrids","distanceTransform","out","Uint8Array","y","sourceY","clampInt","Math","round","x","sourceX","sourceIndex","signedDistance","sqrt","clamp01","maxWidth","result","paragraphs","split","paragraph","push","chars","splitStringByGraphemes","start","breakPos","lastWhitespaceBreak","ch","charWidth","measureGlyphWidth","test","lineText","slice","join","replace","measureLineWidth","max","min","minValue","maxValue","square","char","metric","measureText","actualBoundingBoxRight","floor","outside","inside","a","grid","temp","f","d","v","Int32Array","z","edt1d","rowOffset","count","k","q","s","r","delta"],"mappings":"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"}
|
package/dist/scene/sprite3d.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { StandardSprite3DMaterial } from '../material/sprite3d_std.js';
|
|
2
|
-
import { Sprite } from './sprite.js';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* 3D Sprite node
|
|
6
|
-
* @public
|
|
7
|
-
*/ class Sprite3D extends Sprite {
|
|
8
|
-
constructor(scene, material){
|
|
9
|
-
super(scene);
|
|
10
|
-
this.material = material ?? new StandardSprite3DMaterial();
|
|
11
|
-
}
|
|
12
|
-
isSprite3D() {
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export { Sprite3D };
|
|
18
|
-
//# sourceMappingURL=sprite3d.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprite3d.js","sources":["../../src/scene/sprite3d.ts"],"sourcesContent":["import type { Scene } from './scene';\r\nimport type { Sprite3DMaterial } from '../material/sprite3d';\r\nimport { StandardSprite3DMaterial } from '../material/sprite3d_std';\r\nimport { Sprite } from './sprite';\r\n\r\n/**\r\n * 3D Sprite node\r\n * @public\r\n */\r\nexport class Sprite3D extends Sprite<Sprite3DMaterial> {\r\n constructor(scene: Scene, material?: Sprite3DMaterial) {\r\n super(scene);\r\n this.material = material ?? new StandardSprite3DMaterial();\r\n }\r\n isSprite3D(): this is Sprite3D {\r\n return true;\r\n }\r\n}\r\n"],"names":["Sprite3D","Sprite","scene","material","StandardSprite3DMaterial","isSprite3D"],"mappings":";;;AAKA;;;IAIO,MAAMA,QAAiBC,SAAAA,MAAAA,CAAAA;IAC5B,WAAYC,CAAAA,KAAY,EAAEC,QAA2B,CAAE;AACrD,QAAA,KAAK,CAACD,KAAAA,CAAAA;AACN,QAAA,IAAI,CAACC,QAAQ,GAAGA,QAAAA,IAAY,IAAIC,wBAAAA,EAAAA;AAClC;IACAC,UAA+B,GAAA;QAC7B,OAAO,IAAA;AACT;AACF;;;;"}
|