@zephyr3d/scene 0.9.4 → 0.9.6
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/animationmask.js +224 -0
- package/dist/animation/animationmask.js.map +1 -0
- package/dist/animation/animationset.js +268 -67
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +3 -0
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +7 -0
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/ik_modifier.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +6 -4
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +390 -43
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +62 -3
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/joint_dynamics/solver.js +4 -3
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/joint_dynamics_modifier.js +2 -0
- package/dist/animation/joint_dynamics_modifier.js.map +1 -1
- package/dist/animation/morphtarget.js +3 -72
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -0
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +3 -0
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/proptrack.js +3 -0
- package/dist/animation/proptrack.js.map +1 -1
- package/dist/animation/rotationtrack.js +3 -0
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +3 -0
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +254 -79
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/animation/translationtrack.js +3 -0
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/engine.js +171 -107
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptregistry.js +251 -80
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +344 -365
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/loader.js +1 -6
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/loaders/zabc/zabc_loader.js.map +1 -1
- package/dist/asset/model.js +1000 -131
- package/dist/asset/model.js.map +1 -1
- package/dist/avatar/wardrobe.js +474 -0
- package/dist/avatar/wardrobe.js.map +1 -0
- package/dist/index.d.ts +1126 -199
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +6 -3
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +72 -15
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/msdf_text.js +3 -3
- package/dist/material/msdf_text.js.map +1 -1
- package/dist/material/msdf_text_sprite.js +4 -4
- package/dist/material/msdf_text_sprite.js.map +1 -1
- package/dist/material/pbrblueprint.js +102 -102
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/render/envlight.js +54 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/sky.js +9 -0
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/batchgroup.js +11 -13
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +15 -2
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +79 -16
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/scene.js +1 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +203 -2
- package/dist/scene/scene_node.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/text/msdf/generator.js.map +1 -1
- package/dist/text/msdf/shape.js +4 -1
- package/dist/text/msdf/shape.js.map +1 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js +4 -1
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -1
- package/dist/utility/blueprint/material/inputs.js +1157 -1154
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/pmrem.js +34 -8
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/serialization/manager.js +22 -9
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +700 -7
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +64 -4
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +187 -8
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/textures/sheenlut.js +138 -0
- package/dist/utility/textures/sheenlut.js.map +1 -0
- package/package.json +2 -2
- 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 -1273
- 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":"deferredlightpass.js","sources":["../../src/render/deferredlightpass.ts"],"sourcesContent":["import type { BindGroup, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getGGXLUT } from '../utility/textures/ggxlut';\r\nimport { decodeNormalizedFloatFromRGBA } from '../shaders/misc';\r\nimport { distributionGGX, fresnelSchlick, visGGX } from '../shaders/pbr';\r\nimport { LIGHT_TYPE_POINT, LIGHT_TYPE_RECT, LIGHT_TYPE_SPOT, MAX_CLUSTERED_LIGHTS } from '../values';\r\n\r\n/**\r\n * Deferred lighting pass scaffold.\r\n *\r\n * Stage-1 implementation simply resolves GBuffer color to the lighting target.\r\n * Follow-up will evaluate clustered lights using compact material attributes.\r\n * @internal\r\n */\r\nexport class DeferredLightPass {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _bindGroups: Record<string, BindGroup> = {};\r\n\r\n render(\r\n ctx: DrawContext,\r\n gbufferColor: Texture2D,\r\n gbufferRoughness: Texture2D,\r\n gbufferNormal: Texture2D,\r\n gbufferExtra: Texture2D\r\n ) {\r\n if (!ctx.clusteredLight?.lightBuffer || !ctx.clusteredLight.lightIndexTexture || !ctx.linearDepthTexture) {\r\n return;\r\n }\r\n const device = ctx.device;\r\n const hasEnvLight = !!ctx.env?.light?.envLight;\r\n const hasEnvRadiance = !!ctx.env?.light?.envLight?.hasRadiance();\r\n const hasEnvIrradiance = !!ctx.env?.light?.envLight?.hasIrradiance();\r\n const envHash = ctx.env?.light?.envLight ? ctx.env.light.getHash() : 'none';\r\n const hash = `${device.type}:${envHash}:clustered:env:${hasEnvLight ? 1 : 0}:rad:${\r\n hasEnvRadiance ? 1 : 0\r\n }:irr:${hasEnvIrradiance ? 1 : 0}`;\r\n let program = DeferredLightPass._programs[hash];\r\n if (!program) {\r\n const isWebGL = device.type === 'webgl';\r\n const builtProgram = device.buildRenderProgram({\r\n label: 'DeferredLightPass',\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.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.zGGXLut = pb.tex2D().uniform(0);\r\n this.lightIndexTex = (isWebGL ? pb.tex2D() : pb.utex2D()).uniform(0);\r\n this.zLightBuffer = pb.vec4[(MAX_CLUSTERED_LIGHTS + 1) * 4]().uniformBuffer(0);\r\n this.clusterParams = pb.vec4().uniform(0);\r\n this.countParams = pb.ivec4().uniform(0);\r\n this.lightIndexTexSize = pb.ivec2().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.cameraProj = pb.vec2().uniform(0); // x: tanHalfFovy, y: aspect\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.sunDir = pb.vec3().uniform(0);\r\n this.sunColorIntensity = pb.vec4().uniform(0);\r\n this.showGBuffer = pb.int().uniform(0);\r\n this.gbufferViewMode = pb.int().uniform(0);\r\n this.showCluster = pb.int().uniform(0);\r\n this.showShadowTerm = pb.int().uniform(0);\r\n this.showSpecTerm = pb.int().uniform(0);\r\n if (hasEnvLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.color = pb.vec4();\r\n pb.func('zGetClusterIndex', [pb.float('linearDepth')], function () {\r\n this.$l.zTile = pb.int(\r\n pb.max(\r\n pb.add(pb.mul(pb.log2(pb.max(this.linearDepth, 1e-4)), this.clusterParams.z), this.clusterParams.w),\r\n 0\r\n )\r\n );\r\n this.zTile = pb.min(this.zTile, pb.sub(this.countParams.z, 1));\r\n this.$l.f = pb.vec2(this.$builtins.fragCoord.x, pb.sub(this.clusterParams.y, pb.add(this.$builtins.fragCoord.y, 1)));\r\n this.$l.xyTile = pb.ivec2(pb.div(this.f, pb.div(this.clusterParams.xy, pb.vec2(this.countParams.xy))));\r\n this.xyTile = pb.clamp(this.xyTile, pb.ivec2(0), pb.sub(this.countParams.xy, 1));\r\n this.$return(\r\n pb.add(\r\n this.xyTile.x,\r\n pb.mul(this.xyTile.y, this.countParams.x),\r\n pb.mul(this.zTile, this.countParams.x, this.countParams.y)\r\n )\r\n );\r\n });\r\n pb.func('zGetLinearDepth', [], function () {\r\n this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.$inputs.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('zDecodeWebGLLightIndex', [pb.float('packed'), pb.int('slot')], function () {\r\n this.$if(pb.equal(this.slot, 0), function () {\r\n this.$return(pb.int(pb.div(this.packed, 256)));\r\n });\r\n this.$return(pb.int(pb.mod(this.packed, 256)));\r\n });\r\n pb.func('zPointAtten', [pb.float('dist'), pb.float('range')], 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 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 'zAccumulatePunctualLight',\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('diffScale'),\r\n pb.float('specScale'),\r\n pb.float('sourceRadiusFactor'),\r\n pb.vec3('outDiffuse').inout(),\r\n pb.vec3('outSpecular').inout()\r\n ],\r\n function () {\r\n this.$l.pointNoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);\r\n this.$if(pb.greaterThan(this.pointNoL, 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.specularRoughness = pb.clamp(\r\n pb.add(this.roughness, this.sourceRadiusFactor),\r\n 0,\r\n 1\r\n );\r\n this.$l.alphaRoughness = pb.mul(this.specularRoughness, this.specularRoughness);\r\n this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);\r\n this.$l.V = visGGX(this, this.NoV, this.pointNoL, this.alphaRoughness);\r\n this.$l.punctualColor = pb.mul(this.lightColor, this.atten, this.pointNoL);\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.outDiffuse = pb.add(\r\n this.outDiffuse,\r\n pb.mul(this.punctualColor, pb.max(this.diffuseBRDF, pb.vec3(0)), this.diffScale)\r\n );\r\n this.outSpecular = pb.add(\r\n this.outSpecular,\r\n pb.mul(this.punctualColor, this.D, this.V, this.F, this.specScale)\r\n );\r\n });\r\n }\r\n );\r\n pb.func(\r\n 'zAccumulateRectLight',\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.vec3('outDiffuse').inout(),\r\n pb.vec3('outSpecular').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 = 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\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.NoL = 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 this.$if(pb.greaterThan(pb.mul(this.NoL, 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.zAccumulatePunctualLight(\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 1,\r\n 1,\r\n 0,\r\n this.outDiffuse,\r\n this.outSpecular\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 });\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.base = pb.textureSample(this.gbufferColorTex, this.$inputs.uv);\r\n this.$l.rm = pb.textureSample(this.gbufferRoughnessTex, this.$inputs.uv);\r\n this.$l.extra = pb.textureSample(this.gbufferExtraTex, this.$inputs.uv);\r\n this.$l.litFlag = pb.float(pb.greaterThan(this.extra.a, 0.5));\r\n this.$l.n = pb.normalize(\r\n pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.$inputs.uv).xyz, 2), pb.vec3(1))\r\n );\r\n this.$l.metallic = pb.clamp(this.rm.r, 0, 1);\r\n this.$l.occlusion = pb.clamp(this.rm.g, 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.$inputs.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.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.sunL = pb.normalize(this.sunDir);\r\n this.$l.sunColor = pb.mul(this.sunColorIntensity.rgb, this.sunColorIntensity.a);\r\n this.$l.NoL = pb.clamp(pb.dot(this.n, this.sunL), 0, 1);\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.$l.fresnelNoV = pb.add(\r\n this.f0,\r\n pb.mul(pb.sub(pb.vec3(1), this.f0), pb.pow(pb.sub(1, this.NoV), 5))\r\n );\r\n this.$l.kd = pb.mul(pb.sub(pb.vec3(1), this.fresnelNoV), pb.sub(1, this.metallic));\r\n this.$l.sunDiffuse = pb.vec3(0);\r\n this.$l.sunSpecular = pb.vec3(0);\r\n this.$if(pb.greaterThan(this.NoL, 1e-5), function () {\r\n this.$l.H = pb.normalize(pb.add(this.viewDir, this.sunL));\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.sunPunctualColor = pb.mul(this.sunColor, this.NoL);\r\n this.$l.diffuseBRDF = pb.mul(\r\n pb.sub(pb.vec3(1), this.F),\r\n pb.div(pb.mul(this.base.rgb, pb.sub(1, this.metallic)), Math.PI)\r\n );\r\n this.sunDiffuse = pb.mul(this.sunPunctualColor, pb.max(this.diffuseBRDF, pb.vec3(0)));\r\n this.sunSpecular = pb.mul(this.sunPunctualColor, this.D, this.V, this.F);\r\n });\r\n this.$l.diffuse = this.sunDiffuse;\r\n this.$l.specular = this.sunSpecular;\r\n this.$l.clusterLightCount = pb.int(0);\r\n this.$l.clusterIndex = this.zGetClusterIndex(this.linearDepth);\r\n if (isWebGL) {\r\n this.$l.texCoordX = pb.div(\r\n pb.add(pb.mod(pb.float(this.clusterIndex), pb.float(this.lightIndexTexSize.x)), 0.5),\r\n pb.float(this.lightIndexTexSize.x)\r\n );\r\n this.$l.texCoordY = pb.div(\r\n pb.add(pb.float(pb.div(this.clusterIndex, this.lightIndexTexSize.x)), 0.5),\r\n pb.float(this.lightIndexTexSize.y)\r\n );\r\n this.$l.samp = pb.textureSample(this.lightIndexTex, pb.vec2(this.texCoordX, this.texCoordY));\r\n this.$for(pb.int('i'), 0, 4, function () {\r\n this.$l.packed = this.samp.at(this.i);\r\n this.$for(pb.int('k'), 0, 2, function () {\r\n this.$l.lightIndex = this.zDecodeWebGLLightIndex(this.packed, this.k);\r\n this.$if(pb.greaterThan(this.lightIndex, 0), function () {\r\n this.clusterLightCount = pb.add(this.clusterLightCount, 1);\r\n this.$l.positionRange = this.zLightBuffer.at(pb.mul(this.lightIndex, 4));\r\n this.$l.directionCutoff = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 1));\r\n this.$l.diffuseIntensity = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 2));\r\n this.$l.extra = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 3));\r\n this.$l.lightType = pb.int(this.extra.w);\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.positionRange.xyz, this.worldPos);\r\n this.$l.dist = pb.length(this.toLight);\r\n this.$l.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));\r\n this.$l.atten = this.zPointAtten(this.dist, this.positionRange.w);\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function () {\r\n this.atten = this.zSpotAtten(\r\n this.worldPos,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.dist\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.atten, 1e-5), function () {\r\n this.$l.lightColor = pb.mul(this.diffuseIntensity.rgb, this.diffuseIntensity.a);\r\n this.$l.diffScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.x,\r\n pb.float(1)\r\n );\r\n this.$l.specScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.y,\r\n pb.float(1)\r\n );\r\n this.$l.sourceRadiusFactor = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.div(this.extra.z, pb.max(this.dist, 1e-4)),\r\n pb.float(0)\r\n );\r\n this.zAccumulatePunctualLight(\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.diffScale,\r\n this.specScale,\r\n this.sourceRadiusFactor,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n }\r\n );\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n this.zAccumulateRectLight(\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.positionRange,\r\n this.directionCutoff,\r\n this.extra,\r\n this.diffuseIntensity,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n });\r\n });\r\n });\r\n } else {\r\n this.$l.texCoordX = pb.mod(this.clusterIndex, this.lightIndexTexSize.x);\r\n this.$l.texCoordY = pb.div(this.clusterIndex, this.lightIndexTexSize.x);\r\n this.$l.samp = pb.textureLoad(this.lightIndexTex, pb.ivec2(this.texCoordX, this.texCoordY), 0);\r\n this.$for(pb.uint('i'), 0, 4, function () {\r\n this.$for(pb.uint('k'), 0, 4, function () {\r\n this.$l.lightIndex = pb.compAnd(pb.sar(this.samp.at(this.i), pb.mul(this.k, 8)), 0xff);\r\n this.$if(pb.greaterThan(this.lightIndex, 0), function () {\r\n this.clusterLightCount = pb.add(this.clusterLightCount, 1);\r\n this.$l.positionRange = this.zLightBuffer.at(pb.mul(this.lightIndex, 4));\r\n this.$l.directionCutoff = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 1));\r\n this.$l.diffuseIntensity = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 2));\r\n this.$l.extra = this.zLightBuffer.at(pb.add(pb.mul(this.lightIndex, 4), 3));\r\n this.$l.lightType = pb.int(this.extra.w);\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.positionRange.xyz, this.worldPos);\r\n this.$l.dist = pb.length(this.toLight);\r\n this.$l.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));\r\n this.$l.atten = this.zPointAtten(this.dist, this.positionRange.w);\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function () {\r\n this.atten = this.zSpotAtten(\r\n this.worldPos,\r\n this.positionRange,\r\n this.directionCutoff,\r\n this.dist\r\n );\r\n });\r\n this.$if(pb.greaterThan(this.atten, 1e-5), function () {\r\n this.$l.lightColor = pb.mul(this.diffuseIntensity.rgb, this.diffuseIntensity.a);\r\n this.$l.diffScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.x,\r\n pb.float(1)\r\n );\r\n this.$l.specScale = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n this.extra.y,\r\n pb.float(1)\r\n );\r\n this.$l.sourceRadiusFactor = this.$choice(\r\n pb.equal(this.lightType, LIGHT_TYPE_POINT),\r\n pb.div(this.extra.z, pb.max(this.dist, 1e-4)),\r\n pb.float(0)\r\n );\r\n this.zAccumulatePunctualLight(\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.diffScale,\r\n this.specScale,\r\n this.sourceRadiusFactor,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n }\r\n );\r\n this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function () {\r\n this.zAccumulateRectLight(\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.positionRange,\r\n this.directionCutoff,\r\n this.extra,\r\n this.diffuseIntensity,\r\n this.diffuse,\r\n this.specular\r\n );\r\n });\r\n });\r\n });\r\n });\r\n }\r\n this.$l.finalColor = pb.add(pb.mul(pb.add(this.diffuse, this.specular), this.litFlag), this.extra.rgb);\r\n if (hasEnvIrradiance || hasEnvRadiance) {\r\n this.$l.ggxLutSample = pb.clamp(\r\n pb.textureSampleLevel(\r\n this.zGGXLut,\r\n pb.clamp(pb.vec2(this.NoV, this.roughness), pb.vec2(0), pb.vec2(1)),\r\n 0\r\n ),\r\n pb.vec4(0),\r\n pb.vec4(1)\r\n );\r\n this.$l.f_ab = this.ggxLutSample.rg;\r\n this.$l.FssEss = pb.add(pb.mul(this.fresnelNoV, this.f_ab.x), pb.vec3(this.f_ab.y));\r\n this.$l.Ems = pb.sub(1, pb.add(this.f_ab.x, this.f_ab.y));\r\n this.$l.F_avg = pb.add(this.f0, pb.div(pb.sub(pb.vec3(1), this.f0), 21));\r\n this.$l.FmsEms = pb.div(\r\n pb.mul(this.FssEss, this.F_avg, this.Ems),\r\n pb.max(pb.sub(pb.vec3(1), pb.mul(this.F_avg, this.Ems)), pb.vec3(1e-4))\r\n );\r\n }\r\n if (hasEnvIrradiance) {\r\n this.$l.envIrr = ctx.env!.light.envLight.getIrradiance(this, this.n).rgb;\r\n this.finalColor = pb.add(\r\n this.finalColor,\r\n pb.mul(\r\n pb.add(this.kd, this.FmsEms),\r\n this.base.rgb,\r\n this.envIrr,\r\n this.envLightStrength,\r\n this.occlusion,\r\n 1 / Math.PI\r\n )\r\n );\r\n }\r\n if (hasEnvRadiance) {\r\n this.$l.reflectVec = pb.reflect(pb.neg(this.viewDir), this.n);\r\n this.$l.envRad = ctx.env!.light.envLight.getRadiance(this, this.reflectVec, this.roughness)!.rgb;\r\n this.finalColor = pb.add(\r\n this.finalColor,\r\n pb.mul(\r\n this.envRad,\r\n this.FssEss,\r\n this.envLightStrength,\r\n this.occlusion\r\n )\r\n );\r\n }\r\n // Deferred direct shadowing is aligned in follow-up pass; keep a stable debug channel now.\r\n this.$l.shadowTerm = pb.float(1);\r\n this.$l.debugColor = pb.max(this.finalColor, pb.vec3(0));\r\n this.$if(pb.notEqual(this.showGBuffer, 0), function () {\r\n this.$if(pb.equal(this.gbufferViewMode, 1), function () {\r\n this.debugColor = pb.vec3(pb.clamp(this.linearDepthNormalized, 0, 1));\r\n }).$elseif(pb.equal(this.gbufferViewMode, 2), function () {\r\n this.debugColor = pb.vec3(this.metallic);\r\n }).$elseif(pb.equal(this.gbufferViewMode, 3), function () {\r\n this.debugColor = pb.vec3(this.roughness);\r\n }).$elseif(pb.equal(this.gbufferViewMode, 4), function () {\r\n this.$l.rawN = pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.$inputs.uv).xyz, 2), pb.vec3(1));\r\n this.debugColor = pb.vec3(pb.clamp(pb.length(this.rawN), 0, 1));\r\n }).$else(function () {\r\n // composite\r\n this.$if(pb.lessThan(this.$inputs.uv.x, 0.5), function () {\r\n this.$if(pb.lessThan(this.$inputs.uv.y, 0.5), function () {\r\n this.debugColor = this.base.rgb;\r\n }).$else(function () {\r\n this.debugColor = this.rm.rgb;\r\n });\r\n }).$else(function () {\r\n this.$if(pb.lessThan(this.$inputs.uv.y, 0.5), function () {\r\n this.debugColor = pb.add(pb.mul(this.n, 0.5), pb.vec3(0.5));\r\n }).$else(function () {\r\n this.debugColor = pb.vec3(this.roughness);\r\n });\r\n });\r\n });\r\n }).$elseif(pb.notEqual(this.showCluster, 0), function () {\r\n this.$l.clusterT = pb.clamp(pb.div(pb.float(this.clusterLightCount), 16), 0, 1);\r\n this.debugColor = pb.vec3(this.clusterT, pb.mul(this.clusterT, this.clusterT), pb.sub(1, this.clusterT));\r\n }).$elseif(pb.notEqual(this.showShadowTerm, 0), function () {\r\n this.debugColor = pb.vec3(this.shadowTerm);\r\n }).$elseif(pb.notEqual(this.showSpecTerm, 0), function () {\r\n this.debugColor = pb.max(this.specular, pb.vec3(0));\r\n });\r\n this.$outputs.color = pb.vec4(this.debugColor, this.base.a);\r\n });\r\n }\r\n });\r\n if (!builtProgram) {\r\n return;\r\n }\r\n program = builtProgram;\r\n program.name = '@DeferredLightPass';\r\n DeferredLightPass._programs[hash] = program;\r\n }\r\n let bindGroup = DeferredLightPass._bindGroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n DeferredLightPass._bindGroups[hash] = bindGroup;\r\n }\r\n bindGroup.setTexture(\r\n 'gbufferColorTex',\r\n gbufferColor,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture(\r\n 'gbufferRoughnessTex',\r\n gbufferRoughness,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture(\r\n 'gbufferNormalTex',\r\n gbufferNormal,\r\n fetchSampler('clamp_nearest_nomip')\r\n );\r\n bindGroup.setTexture('gbufferExtraTex', gbufferExtra, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('linearDepthTex', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('zGGXLut', getGGXLUT(1024), fetchSampler('clamp_nearest_nomip'));\r\n bindGroup.setTexture('lightIndexTex', ctx.clusteredLight.lightIndexTexture);\r\n bindGroup.setBuffer('zLightBuffer', ctx.clusteredLight.lightBuffer);\r\n bindGroup.setValue('clusterParams', ctx.clusteredLight.clusterParam);\r\n bindGroup.setValue('countParams', ctx.clusteredLight.countParam);\r\n bindGroup.setValue(\r\n 'lightIndexTexSize',\r\n new Int32Array([ctx.clusteredLight.lightIndexTexture.width, ctx.clusteredLight.lightIndexTexture.height])\r\n );\r\n const sunDirSrc = ctx.sunLight ? ctx.sunLight.directionAndCutoff.xyz().scaleBy(-1) : { x: 0, y: 0, z: 1 };\r\n const sunShadowed = !!(ctx.sunLight && ctx.shadowMapInfo?.has(ctx.sunLight));\r\n const sunColorIntensitySrc = ctx.sunLight\r\n ? sunShadowed\r\n ? { x: 0, y: 0, z: 0, w: 0 }\r\n : ctx.sunLight.diffuseAndIntensity\r\n : { x: 1, y: 1, z: 1, w: 0 };\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('sunDir', new Float32Array([sunDirSrc.x, sunDirSrc.y, sunDirSrc.z]));\r\n bindGroup.setValue(\r\n 'sunColorIntensity',\r\n new Float32Array([\r\n sunColorIntensitySrc.x,\r\n sunColorIntensitySrc.y,\r\n sunColorIntensitySrc.z,\r\n sunColorIntensitySrc.w\r\n ])\r\n );\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('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 let gbufferViewMode = 0;\r\n switch (ctx.camera.deferredGBufferView) {\r\n case 'depth':\r\n gbufferViewMode = 1;\r\n break;\r\n case 'metallic':\r\n gbufferViewMode = 2;\r\n break;\r\n case 'roughness':\r\n gbufferViewMode = 3;\r\n break;\r\n case 'normal-length':\r\n gbufferViewMode = 4;\r\n break;\r\n default:\r\n gbufferViewMode = 0;\r\n break;\r\n }\r\n bindGroup.setValue('showGBuffer', ctx.camera.deferredShowGBuffer ? 1 : 0);\r\n bindGroup.setValue('gbufferViewMode', gbufferViewMode);\r\n bindGroup.setValue('showCluster', ctx.camera.deferredShowCluster ? 1 : 0);\r\n bindGroup.setValue('showShadowTerm', ctx.camera.deferredShowShadowTerm ? 1 : 0);\r\n bindGroup.setValue('showSpecTerm', ctx.camera.deferredShowSpecTerm ? 1 : 0);\r\n if (ctx.env?.light?.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env.light.strength ?? 0);\r\n ctx.env.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad();\r\n }\r\n}\r\n"],"names":["DeferredLightPass","_programs","_bindGroups","render","ctx","gbufferColor","gbufferRoughness","gbufferNormal","gbufferExtra","clusteredLight","lightBuffer","lightIndexTexture","linearDepthTexture","device","hasEnvLight","env","light","envLight","hasEnvRadiance","hasRadiance","hasEnvIrradiance","hasIrradiance","envHash","getHash","hash","type","program","isWebGL","builtProgram","buildRenderProgram","label","vertex","pb","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","y","neg","fragment","gbufferColorTex","tex2D","uniform","gbufferRoughnessTex","gbufferNormalTex","gbufferExtraTex","linearDepthTex","zGGXLut","lightIndexTex","utex2D","zLightBuffer","MAX_CLUSTERED_LIGHTS","uniformBuffer","clusterParams","countParams","ivec4","lightIndexTexSize","ivec2","cameraPos","vec3","cameraRight","cameraUp","cameraForward","cameraProj","cameraNearFar","sunDir","sunColorIntensity","showGBuffer","int","gbufferViewMode","showCluster","showShadowTerm","showSpecTerm","envLightStrength","float","initShaderBindings","color","func","$l","zTile","max","log2","linearDepth","z","w","min","sub","f","fragCoord","x","xyTile","div","clamp","$return","depthSample","textureSample","decodeNormalizedFloatFromRGBA","r","$if","equal","slot","packed","mod","falloff","dist","range","base","zPointAtten","posRange","spotFactor","dot","normalize","worldPos","xyz","dirCutoff","smoothStep","mix","inout","pointNoL","n","L","greaterThan","H","viewDir","NoH","VoH","F","fresnelSchlick","f0","specularRoughness","roughness","sourceRadiusFactor","alphaRoughness","D","distributionGGX","V","visGGX","NoV","punctualColor","lightColor","atten","diffuseBRDF","baseColor","metallic","Math","PI","outDiffuse","diffScale","outSpecular","specScale","center","ax","axisX","ay","axisY","halfWidth","length","halfHeight","area","lightNormal","cross","baseRectColor","colorIntensity","rgb","a","samplePos","Lvec","invDist2","NoL","NoL_light","lightSampleColor","sample","u","v","zAccumulatePunctualLight","specularStrength","rm","extra","litFlag","occlusion","g","b","ndc","xScale","yScale","camRayDir","linearDepthNormalized","zGetLinearDepth","rayScale","sunL","sunColor","fresnelNoV","pow","kd","sunDiffuse","sunSpecular","sunPunctualColor","diffuse","specular","clusterLightCount","clusterIndex","zGetClusterIndex","texCoordX","texCoordY","samp","$for","at","i","lightIndex","zDecodeWebGLLightIndex","k","positionRange","directionCutoff","diffuseIntensity","lightType","or","LIGHT_TYPE_POINT","LIGHT_TYPE_SPOT","toLight","zSpotAtten","$choice","LIGHT_TYPE_RECT","zAccumulateRectLight","textureLoad","uint","compAnd","sar","finalColor","ggxLutSample","textureSampleLevel","f_ab","rg","FssEss","Ems","F_avg","FmsEms","envIrr","getIrradiance","reflectVec","reflect","envRad","getRadiance","shadowTerm","debugColor","notEqual","$elseif","rawN","$else","lessThan","clusterT","name","bindGroup","createBindGroup","bindGroupLayouts","setTexture","fetchSampler","getGGXLUT","setBuffer","setValue","clusterParam","countParam","Int32Array","width","height","sunDirSrc","sunLight","directionAndCutoff","scaleBy","sunShadowed","shadowMapInfo","has","sunColorIntensitySrc","diffuseAndIntensity","camera","worldMatrix","getRow","inplaceNormalize","getWorldPosition","Float32Array","getTanHalfFovy","getAspect","getNearPlane","getFarPlane","deferredGBufferView","deferredShowGBuffer","deferredShowCluster","deferredShowShadowTerm","deferredShowSpecTerm","strength","updateBindGroup","setProgram","setBindGroup","drawFullscreenQuad"],"mappings":"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"}
|
|
@@ -1,428 +0,0 @@
|
|
|
1
|
-
import { Vector2, Vector4 } from '@zephyr3d/base';
|
|
2
|
-
import { drawFullscreenQuad } from './fullscreenquad.js';
|
|
3
|
-
import { fetchSampler } from '../utility/misc.js';
|
|
4
|
-
import { ShaderHelper } from '../material/shader/helper.js';
|
|
5
|
-
import { decodeNormalizedFloatFromRGBA } from '../shaders/misc.js';
|
|
6
|
-
import { fresnelSchlick, distributionGGX, visGGX } from '../shaders/pbr.js';
|
|
7
|
-
import { RENDER_PASS_TYPE_LIGHT, LIGHT_TYPE_POINT, LIGHT_TYPE_SPOT, LIGHT_TYPE_RECT } from '../values.js';
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Deferred single shadowed-light accumulation pass.
|
|
11
|
-
*
|
|
12
|
-
* Renders one fullscreen additive pass per shadow-casting light and reuses the
|
|
13
|
-
* existing shadow map sampling pipeline via ShaderHelper/ShadowMapper.
|
|
14
|
-
* @internal
|
|
15
|
-
*/ class DeferredShadowLightPass {
|
|
16
|
-
static _programs = {};
|
|
17
|
-
static _bindGroups = {};
|
|
18
|
-
static _additiveRenderStates = null;
|
|
19
|
-
static _multiplyRenderStates = null;
|
|
20
|
-
static getProgramHash(deviceType, shaderHash, debugShadowTermOnly, hasSceneColor, hasHiZ, hasLinearDepth) {
|
|
21
|
-
return `${deviceType}:${shaderHash}:deferred-shadow:${debugShadowTermOnly ? 1 : 0}:scene:${hasSceneColor ? 1 : 0}:hiz:${hasHiZ ? 1 : 0}:depth:${hasLinearDepth ? 1 : 0}`;
|
|
22
|
-
}
|
|
23
|
-
static hasTextureUniform(bindGroup, program, name) {
|
|
24
|
-
const bindGroupLayout = bindGroup.getLayout?.() ?? program.bindGroupLayouts[0];
|
|
25
|
-
return !!bindGroupLayout?.entries?.some((entry)=>entry.name === name && (entry.texture || entry.storageTexture || entry.externalTexture));
|
|
26
|
-
}
|
|
27
|
-
static bindOptionalSceneTextures(bindGroup, program, ctx) {
|
|
28
|
-
if (ctx.linearDepthTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformLinearDepth')) {
|
|
29
|
-
bindGroup.setTexture('Z_UniformLinearDepth', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));
|
|
30
|
-
bindGroup.setValue('Z_UniformLinearDepthSize', new Vector2(ctx.linearDepthTexture.width, ctx.linearDepthTexture.height));
|
|
31
|
-
}
|
|
32
|
-
if (ctx.sceneColorTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformSceneColor')) {
|
|
33
|
-
bindGroup.setTexture('Z_UniformSceneColor', ctx.sceneColorTexture, fetchSampler('clamp_nearest_nomip'));
|
|
34
|
-
bindGroup.setValue('Z_UniformSceneColorSize', new Vector2(ctx.sceneColorTexture.width, ctx.sceneColorTexture.height));
|
|
35
|
-
}
|
|
36
|
-
if (ctx.HiZTexture && this.hasTextureUniform(bindGroup, program, 'Z_UniformHiZDepth')) {
|
|
37
|
-
bindGroup.setTexture('Z_UniformHiZDepth', ctx.HiZTexture, fetchSampler('clamp_nearest'));
|
|
38
|
-
bindGroup.setValue('Z_UniformHiZDepthInfo', new Vector4(ctx.HiZTexture.width, ctx.HiZTexture.height, ctx.HiZTexture.mipLevelCount, 0));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
static getCameraUniforms(ctx) {
|
|
42
|
-
const cameraPos = ctx.camera.getWorldPosition();
|
|
43
|
-
return {
|
|
44
|
-
position: new Vector4(cameraPos.x, cameraPos.y, cameraPos.z, 0),
|
|
45
|
-
renderSize: new Vector2(ctx.renderWidth, ctx.renderHeight),
|
|
46
|
-
viewProjectionMatrix: ctx.camera.viewProjectionMatrix,
|
|
47
|
-
unjitteredVPMatrix: ctx.camera.viewProjectionMatrix,
|
|
48
|
-
jitteredInvVPMatrix: ctx.camera.invViewProjectionMatrix,
|
|
49
|
-
jitterValue: ctx.camera.jitterValue,
|
|
50
|
-
invViewProjectionMatrix: ctx.camera.invViewProjectionMatrix,
|
|
51
|
-
projectionMatrix: ctx.camera.getProjectionMatrix(),
|
|
52
|
-
invProjectionMatrix: ctx.camera.getInvProjectionMatrix(),
|
|
53
|
-
viewMatrix: ctx.camera.viewMatrix,
|
|
54
|
-
worldMatrix: ctx.camera.worldMatrix,
|
|
55
|
-
params: new Vector4(ctx.camera.getNearPlane(), ctx.camera.getFarPlane(), ctx.flip ? -1 : 1, 0),
|
|
56
|
-
roughnessFactor: ctx.camera.SSR ? ctx.camera.ssrRoughnessFactor : 1,
|
|
57
|
-
shadowDebugCascades: ctx.camera.shadowDebugCascades ? 1 : 0,
|
|
58
|
-
frameDeltaTime: ctx.device.frameInfo.elapsedFrame * 0.001,
|
|
59
|
-
elapsedTime: ctx.device.frameInfo.elapsedOverall * 0.001,
|
|
60
|
-
framestamp: ctx.device.frameInfo.frameCounter
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
render(ctx, light, gbufferColor, gbufferRoughness, gbufferNormal, gbufferExtra, debugShadowTermOnly = false) {
|
|
64
|
-
if (!ctx.shadowMapInfo?.has(light) || !ctx.linearDepthTexture) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
const shadowMapParams = ctx.shadowMapInfo.get(light);
|
|
68
|
-
const device = ctx.device;
|
|
69
|
-
const prevLight = ctx.currentShadowLight ?? null;
|
|
70
|
-
const prevRenderPass = ctx.renderPass;
|
|
71
|
-
ctx.currentShadowLight = light;
|
|
72
|
-
ctx.renderPass = {
|
|
73
|
-
type: RENDER_PASS_TYPE_LIGHT
|
|
74
|
-
};
|
|
75
|
-
const hash = DeferredShadowLightPass.getProgramHash(device.type, shadowMapParams.shaderHash, debugShadowTermOnly, !!ctx.sceneColorTexture, !!ctx.HiZTexture, !!ctx.linearDepthTexture);
|
|
76
|
-
let program = DeferredShadowLightPass._programs[hash];
|
|
77
|
-
if (!program) {
|
|
78
|
-
const isWebGL = device.type === 'webgl';
|
|
79
|
-
const builtProgram = device.buildRenderProgram({
|
|
80
|
-
label: 'DeferredShadowLightPass',
|
|
81
|
-
vertex (pb) {
|
|
82
|
-
this.$inputs.pos = pb.vec2().attrib('position');
|
|
83
|
-
pb.main(function() {
|
|
84
|
-
this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);
|
|
85
|
-
if (device.type === 'webgpu') {
|
|
86
|
-
this.$builtins.position.y = pb.neg(this.$builtins.position.y);
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
},
|
|
90
|
-
fragment (pb) {
|
|
91
|
-
ShaderHelper.prepareFragmentShader(pb, ctx);
|
|
92
|
-
this.gbufferColorTex = pb.tex2D().uniform(0);
|
|
93
|
-
this.gbufferRoughnessTex = pb.tex2D().uniform(0);
|
|
94
|
-
this.gbufferNormalTex = pb.tex2D().uniform(0);
|
|
95
|
-
this.gbufferExtraTex = pb.tex2D().uniform(0);
|
|
96
|
-
this.linearDepthTex = pb.tex2D().uniform(0);
|
|
97
|
-
this.cameraPos = pb.vec3().uniform(0);
|
|
98
|
-
this.cameraRight = pb.vec3().uniform(0);
|
|
99
|
-
this.cameraUp = pb.vec3().uniform(0);
|
|
100
|
-
this.cameraForward = pb.vec3().uniform(0);
|
|
101
|
-
this.cameraViewProjection = pb.mat4().uniform(0);
|
|
102
|
-
this.cameraProj = pb.vec2().uniform(0); // x: tanHalfFovy, y: aspect
|
|
103
|
-
this.cameraNearFar = pb.vec2().uniform(0);
|
|
104
|
-
this.debugShadowTermOnly = pb.int().uniform(0);
|
|
105
|
-
this.$outputs.color = pb.vec4();
|
|
106
|
-
pb.func('zGetLinearDepth', [], function() {
|
|
107
|
-
this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));
|
|
108
|
-
this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.uv);
|
|
109
|
-
if (isWebGL) {
|
|
110
|
-
this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));
|
|
111
|
-
} else {
|
|
112
|
-
this.$return(this.depthSample.r);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
pb.func('zPointAtten', [
|
|
116
|
-
pb.float('dist'),
|
|
117
|
-
pb.float('range')
|
|
118
|
-
], function() {
|
|
119
|
-
this.$l.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, pb.max(this.range, 1e-4))));
|
|
120
|
-
this.$return(pb.mul(this.falloff, this.falloff));
|
|
121
|
-
});
|
|
122
|
-
pb.func('zSpotAtten', [
|
|
123
|
-
pb.vec3('worldPos'),
|
|
124
|
-
pb.vec4('posRange'),
|
|
125
|
-
pb.vec4('dirCutoff'),
|
|
126
|
-
pb.float('dist')
|
|
127
|
-
], function() {
|
|
128
|
-
this.$l.base = this.zPointAtten(this.dist, this.posRange.w);
|
|
129
|
-
this.$l.spotFactor = pb.dot(pb.normalize(pb.sub(this.worldPos, this.posRange.xyz)), this.dirCutoff.xyz);
|
|
130
|
-
this.spotFactor = pb.smoothStep(this.dirCutoff.w, pb.mix(this.dirCutoff.w, 1, 0.5), this.spotFactor);
|
|
131
|
-
this.$return(pb.mul(this.base, this.spotFactor));
|
|
132
|
-
});
|
|
133
|
-
pb.func('zAccumulatePunctualShadowedLight', [
|
|
134
|
-
pb.vec3('baseColor'),
|
|
135
|
-
pb.float('metallic'),
|
|
136
|
-
pb.float('roughness'),
|
|
137
|
-
pb.float('specularStrength'),
|
|
138
|
-
pb.vec3('n'),
|
|
139
|
-
pb.vec3('viewDir'),
|
|
140
|
-
pb.float('NoV'),
|
|
141
|
-
pb.vec3('f0'),
|
|
142
|
-
pb.vec3('lightColor'),
|
|
143
|
-
pb.vec3('L'),
|
|
144
|
-
pb.float('atten'),
|
|
145
|
-
pb.float('shadow'),
|
|
146
|
-
pb.float('litMask'),
|
|
147
|
-
pb.float('diffScale'),
|
|
148
|
-
pb.float('specScale'),
|
|
149
|
-
pb.vec3('outLight').inout(),
|
|
150
|
-
pb.float('outShadow').inout()
|
|
151
|
-
], function() {
|
|
152
|
-
this.$l.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);
|
|
153
|
-
this.$if(pb.greaterThan(this.NoL, 1e-5), function() {
|
|
154
|
-
this.$l.H = pb.normalize(pb.add(this.viewDir, this.L));
|
|
155
|
-
this.$l.NoH = pb.clamp(pb.dot(this.n, this.H), 0, 1);
|
|
156
|
-
this.$l.VoH = pb.clamp(pb.dot(this.viewDir, this.H), 0, 1);
|
|
157
|
-
this.$l.F = fresnelSchlick(this, this.VoH, this.f0, pb.vec3(1));
|
|
158
|
-
this.$l.alphaRoughness = pb.mul(this.roughness, this.roughness);
|
|
159
|
-
this.$l.D = distributionGGX(this, this.NoH, this.alphaRoughness);
|
|
160
|
-
this.$l.V = visGGX(this, this.NoV, this.NoL, this.alphaRoughness);
|
|
161
|
-
this.$l.diffuseBRDF = pb.mul(pb.sub(pb.vec3(1), this.F), pb.div(pb.mul(this.baseColor, pb.sub(1, this.metallic)), Math.PI));
|
|
162
|
-
this.$l.unshadowedColor = pb.mul(this.lightColor, this.atten, this.NoL);
|
|
163
|
-
this.$l.punctualColor = pb.mul(this.unshadowedColor, this.shadow, this.litMask);
|
|
164
|
-
this.$l.diffuse = pb.mul(this.punctualColor, pb.max(this.diffuseBRDF, pb.vec3(0)), this.diffScale);
|
|
165
|
-
this.$l.specular = pb.mul(this.punctualColor, this.D, this.V, this.F, this.specScale);
|
|
166
|
-
this.outLight = pb.add(this.outLight, pb.max(pb.add(this.diffuse, this.specular), pb.vec3(0)));
|
|
167
|
-
this.outShadow = pb.add(this.outShadow, pb.mul(this.shadow, this.litMask));
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
pb.func('zSampleLinearDepthAtUV', [
|
|
171
|
-
pb.vec2('uv')
|
|
172
|
-
], function() {
|
|
173
|
-
if (isWebGL) {
|
|
174
|
-
this.$l.depthSample = pb.textureSample(this.linearDepthTex, this.uv);
|
|
175
|
-
this.$return(decodeNormalizedFloatFromRGBA(this, this.depthSample));
|
|
176
|
-
} else {
|
|
177
|
-
this.$l.texSize = pb.ivec2(ShaderHelper.getRenderSize(this));
|
|
178
|
-
this.$l.pixelCoord = pb.clamp(pb.ivec2(pb.mul(this.uv, pb.vec2(this.texSize))), pb.ivec2(0), pb.sub(this.texSize, pb.ivec2(1)));
|
|
179
|
-
this.$l.depthSample = pb.textureLoad(this.linearDepthTex, this.pixelCoord, 0);
|
|
180
|
-
this.$return(this.depthSample.r);
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
pb.func('zContactShadow', [
|
|
184
|
-
pb.vec3('worldPos'),
|
|
185
|
-
pb.vec3('L'),
|
|
186
|
-
pb.int('lightType'),
|
|
187
|
-
pb.vec4('posRange')
|
|
188
|
-
], function() {
|
|
189
|
-
this.$l.steps = pb.int(8);
|
|
190
|
-
this.$l.maxDistance = this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), pb.clamp(pb.mul(this.posRange.w, 0.2), 0.2, 3), this.$choice(pb.equal(this.lightType, LIGHT_TYPE_SPOT), pb.clamp(pb.mul(this.posRange.w, 0.25), 0.25, 3.5), pb.float(1.5)));
|
|
191
|
-
this.$l.stepLen = pb.div(this.maxDistance, pb.float(this.steps));
|
|
192
|
-
this.$l.occlusion = pb.float(0);
|
|
193
|
-
this.$for(pb.int('i'), 1, pb.add(this.steps, 1), function() {
|
|
194
|
-
this.$l.samplePos = pb.add(this.worldPos, pb.mul(this.L, pb.mul(pb.float(this.i), this.stepLen)));
|
|
195
|
-
this.$l.clip = pb.mul(this.cameraViewProjection, pb.vec4(this.samplePos, 1));
|
|
196
|
-
this.$if(pb.lessThanEqual(this.clip.w, 1e-6), function() {
|
|
197
|
-
this.$continue();
|
|
198
|
-
});
|
|
199
|
-
this.$l.ndc = pb.div(this.clip.xy, this.clip.w);
|
|
200
|
-
this.$l.uv = pb.add(pb.mul(this.ndc, 0.5), pb.vec2(0.5));
|
|
201
|
-
this.$if(pb.or(pb.lessThan(this.uv.x, 0), pb.greaterThan(this.uv.x, 1), pb.lessThan(this.uv.y, 0), pb.greaterThan(this.uv.y, 1)), function() {
|
|
202
|
-
this.$continue();
|
|
203
|
-
});
|
|
204
|
-
this.$l.sceneDepth = pb.mul(this.zSampleLinearDepthAtUV(this.uv), this.cameraNearFar.y);
|
|
205
|
-
this.$l.sampleDepth = pb.dot(pb.sub(this.samplePos, this.cameraPos), this.cameraForward);
|
|
206
|
-
this.$if(pb.greaterThan(pb.sub(this.sampleDepth, this.sceneDepth), 0.02), function() {
|
|
207
|
-
this.occlusion = pb.add(this.occlusion, 1);
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
this.$l.visibility = pb.sub(1, pb.mul(pb.div(this.occlusion, pb.float(this.steps)), 0.65));
|
|
211
|
-
this.$return(pb.clamp(this.visibility, 0, 1));
|
|
212
|
-
});
|
|
213
|
-
pb.func('zAccumulateRectShadowedLight', [
|
|
214
|
-
pb.vec3('worldPos'),
|
|
215
|
-
pb.vec3('baseColor'),
|
|
216
|
-
pb.float('metallic'),
|
|
217
|
-
pb.float('roughness'),
|
|
218
|
-
pb.float('specularStrength'),
|
|
219
|
-
pb.vec3('n'),
|
|
220
|
-
pb.vec3('viewDir'),
|
|
221
|
-
pb.float('NoV'),
|
|
222
|
-
pb.vec3('f0'),
|
|
223
|
-
pb.vec4('posRange'),
|
|
224
|
-
pb.vec4('axisX'),
|
|
225
|
-
pb.vec4('axisY'),
|
|
226
|
-
pb.vec4('colorIntensity'),
|
|
227
|
-
pb.float('validMask'),
|
|
228
|
-
pb.vec3('outLight').inout(),
|
|
229
|
-
pb.float('outShadow').inout()
|
|
230
|
-
], function() {
|
|
231
|
-
this.$l.center = this.posRange.xyz;
|
|
232
|
-
this.$l.range = this.posRange.w;
|
|
233
|
-
this.$l.ax = this.axisX.xyz;
|
|
234
|
-
this.$l.ay = this.axisY.xyz;
|
|
235
|
-
this.$l.halfWidth = pb.length(this.ax);
|
|
236
|
-
this.$l.halfHeight = pb.length(this.ay);
|
|
237
|
-
this.$l.area = pb.mul(this.halfWidth, this.halfHeight, 4);
|
|
238
|
-
this.$l.lightNormal = pb.neg(pb.normalize(pb.cross(this.ax, this.ay)));
|
|
239
|
-
this.$if(pb.greaterThan(this.area, 0), function() {
|
|
240
|
-
this.$l.baseRectColor = pb.mul(this.colorIntensity.rgb, this.colorIntensity.a, this.area, 0.25);
|
|
241
|
-
this.$l.samplePos = pb.vec3();
|
|
242
|
-
this.$l.Lvec = pb.vec3();
|
|
243
|
-
this.$l.L = pb.vec3();
|
|
244
|
-
this.$l.dist = pb.float();
|
|
245
|
-
this.$l.invDist2 = pb.float();
|
|
246
|
-
this.$l.NoL_light = pb.float();
|
|
247
|
-
this.$l.falloff = pb.float();
|
|
248
|
-
this.$l.lightSampleColor = pb.vec3();
|
|
249
|
-
this.$l.sampleShadow = pb.float();
|
|
250
|
-
this.$l.contactShadow = pb.float();
|
|
251
|
-
this.$l.sampleLitMask = pb.float();
|
|
252
|
-
this.$l.sampleNoL = pb.float();
|
|
253
|
-
const sample = (u, v)=>{
|
|
254
|
-
this.samplePos = pb.add(this.center, pb.add(pb.mul(this.ax, pb.sub(pb.mul(u, 2), 1)), pb.mul(this.ay, pb.sub(pb.mul(v, 2), 1))));
|
|
255
|
-
this.Lvec = pb.sub(this.samplePos, this.worldPos);
|
|
256
|
-
this.dist = pb.length(this.Lvec);
|
|
257
|
-
this.invDist2 = pb.div(1, pb.max(pb.mul(this.dist, this.dist), 0.0001));
|
|
258
|
-
this.L = pb.normalize(this.Lvec);
|
|
259
|
-
this.sampleNoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);
|
|
260
|
-
this.NoL_light = pb.clamp(pb.dot(this.lightNormal, pb.neg(this.L)), 0, 1);
|
|
261
|
-
// Keep PCF/PCF-PD shadow sampling in uniform control flow.
|
|
262
|
-
this.sampleShadow = ShaderHelper.calculateShadow(this, this.worldPos, pb.max(this.sampleNoL, 1e-5), ctx);
|
|
263
|
-
this.sampleShadow = pb.mix(1, this.sampleShadow, this.validMask);
|
|
264
|
-
this.contactShadow = this.zContactShadow(this.worldPos, this.L, LIGHT_TYPE_RECT, this.posRange);
|
|
265
|
-
this.sampleShadow = pb.mul(this.sampleShadow, this.contactShadow);
|
|
266
|
-
this.$if(pb.greaterThan(this.NoL_light, 1e-5), function() {
|
|
267
|
-
this.falloff = pb.float(1);
|
|
268
|
-
this.$if(pb.greaterThan(this.range, 0), function() {
|
|
269
|
-
this.falloff = pb.max(0, pb.sub(1, pb.div(this.dist, this.range)));
|
|
270
|
-
this.falloff = pb.mul(this.falloff, this.falloff);
|
|
271
|
-
});
|
|
272
|
-
this.lightSampleColor = pb.mul(this.baseRectColor, this.invDist2, this.NoL_light);
|
|
273
|
-
this.sampleLitMask = this.validMask;
|
|
274
|
-
this.zAccumulatePunctualShadowedLight(this.baseColor, this.metallic, this.roughness, this.specularStrength, this.n, this.viewDir, this.NoV, this.f0, this.lightSampleColor, this.L, this.falloff, this.sampleShadow, this.sampleLitMask, 1, 1, this.outLight, this.outShadow);
|
|
275
|
-
});
|
|
276
|
-
};
|
|
277
|
-
sample(0.25, 0.25);
|
|
278
|
-
sample(0.75, 0.25);
|
|
279
|
-
sample(0.25, 0.75);
|
|
280
|
-
sample(0.75, 0.75);
|
|
281
|
-
this.outShadow = pb.mul(this.outShadow, 0.25);
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
pb.main(function() {
|
|
285
|
-
this.$l.uv = pb.div(pb.vec2(this.$builtins.fragCoord.xy), ShaderHelper.getRenderSize(this));
|
|
286
|
-
this.$l.base = pb.textureSample(this.gbufferColorTex, this.uv);
|
|
287
|
-
this.$l.rm = pb.textureSample(this.gbufferRoughnessTex, this.uv);
|
|
288
|
-
this.$l.extraData = pb.textureSample(this.gbufferExtraTex, this.uv);
|
|
289
|
-
this.$l.litFlag = pb.float(pb.greaterThan(this.extraData.a, 0.5));
|
|
290
|
-
this.$l.n = pb.normalize(pb.sub(pb.mul(pb.textureSample(this.gbufferNormalTex, this.uv).xyz, 2), pb.vec3(1)));
|
|
291
|
-
this.$l.metallic = pb.clamp(this.rm.r, 0, 1);
|
|
292
|
-
this.$l.specularStrength = pb.clamp(this.rm.b, 0, 1);
|
|
293
|
-
this.$l.roughness = pb.clamp(this.rm.a, 0.045, 1);
|
|
294
|
-
this.$l.ndc = pb.sub(pb.mul(this.uv, 2), pb.vec2(1));
|
|
295
|
-
this.$l.xScale = pb.mul(this.cameraProj.x, this.cameraProj.y);
|
|
296
|
-
this.$l.yScale = this.cameraProj.x;
|
|
297
|
-
this.$l.camRayDir = pb.normalize(pb.add(this.cameraForward, pb.mul(this.cameraRight, pb.mul(this.ndc.x, this.xScale)), pb.mul(this.cameraUp, pb.mul(this.ndc.y, this.yScale))));
|
|
298
|
-
this.$l.linearDepthNormalized = this.zGetLinearDepth();
|
|
299
|
-
this.$l.linearDepth = pb.mul(pb.clamp(this.linearDepthNormalized, 0, 1), this.cameraNearFar.y);
|
|
300
|
-
this.$l.validMask = pb.float(pb.lessThan(this.linearDepthNormalized, 1));
|
|
301
|
-
this.$l.rayScale = pb.max(pb.dot(this.camRayDir, this.cameraForward), 1e-4);
|
|
302
|
-
this.$l.worldPos = pb.add(this.cameraPos, pb.mul(this.camRayDir, pb.div(this.linearDepth, this.rayScale)));
|
|
303
|
-
this.$l.viewDir = pb.neg(this.camRayDir);
|
|
304
|
-
this.$l.lightType = pb.int(this.light.extraParams.w);
|
|
305
|
-
this.$l.posRange = this.light.positionAndRange;
|
|
306
|
-
this.$l.dirCutoff = this.light.directionAndCutoff;
|
|
307
|
-
this.$l.lightColor = pb.mul(this.light.diffuseAndIntensity.rgb, this.light.diffuseAndIntensity.a);
|
|
308
|
-
this.$l.extra = this.light.extraParams;
|
|
309
|
-
this.$l.L = pb.vec3(0, 0, 1);
|
|
310
|
-
this.$l.atten = pb.float(1);
|
|
311
|
-
this.$l.outLight = pb.vec3(0);
|
|
312
|
-
this.$l.shadowTerm = pb.float(1);
|
|
313
|
-
this.$if(pb.or(pb.equal(this.lightType, LIGHT_TYPE_POINT), pb.equal(this.lightType, LIGHT_TYPE_SPOT)), function() {
|
|
314
|
-
this.$l.toLight = pb.sub(this.posRange.xyz, this.worldPos);
|
|
315
|
-
this.$l.dist = pb.length(this.toLight);
|
|
316
|
-
this.L = pb.div(this.toLight, pb.max(this.dist, 1e-4));
|
|
317
|
-
this.atten = this.zPointAtten(this.dist, this.posRange.w);
|
|
318
|
-
this.$if(pb.equal(this.lightType, LIGHT_TYPE_SPOT), function() {
|
|
319
|
-
this.atten = this.zSpotAtten(this.worldPos, this.posRange, this.dirCutoff, this.dist);
|
|
320
|
-
});
|
|
321
|
-
}).$else(function() {
|
|
322
|
-
// Directional and rect-light directional path.
|
|
323
|
-
this.L = pb.normalize(pb.neg(this.dirCutoff.xyz));
|
|
324
|
-
this.atten = 1;
|
|
325
|
-
});
|
|
326
|
-
this.$l.NoV = pb.clamp(pb.dot(this.n, this.viewDir), 0, 1);
|
|
327
|
-
this.$l.f0 = pb.mix(pb.mul(pb.vec3(0.04), this.specularStrength), this.base.rgb, this.metallic);
|
|
328
|
-
this.$if(pb.equal(this.lightType, LIGHT_TYPE_RECT), function() {
|
|
329
|
-
this.shadowTerm = pb.float(0);
|
|
330
|
-
this.zAccumulateRectShadowedLight(this.worldPos, this.base.rgb, this.metallic, this.roughness, this.specularStrength, this.n, this.viewDir, this.NoV, this.f0, this.posRange, this.dirCutoff, this.extra, this.light.diffuseAndIntensity, pb.mul(this.validMask, this.litFlag), this.outLight, this.shadowTerm);
|
|
331
|
-
}).$else(function() {
|
|
332
|
-
this.$l.NoL = pb.clamp(pb.dot(this.n, this.L), 0, 1);
|
|
333
|
-
this.$l.litMask = pb.mul(this.validMask, pb.float(pb.greaterThan(this.NoL, 1e-5)), this.litFlag);
|
|
334
|
-
// Keep shadow sampling in uniform control flow for WebGPU derivatives (dpdx/ddy in PCF).
|
|
335
|
-
this.$l.shadow = ShaderHelper.calculateShadow(this, this.worldPos, pb.max(this.NoL, 1e-5), ctx);
|
|
336
|
-
this.shadow = pb.mix(1, this.shadow, this.validMask);
|
|
337
|
-
this.$l.contactShadow = this.zContactShadow(this.worldPos, this.L, this.lightType, this.posRange);
|
|
338
|
-
this.shadow = pb.mul(this.shadow, this.contactShadow);
|
|
339
|
-
this.shadowTerm = pb.mul(this.shadow, this.litMask);
|
|
340
|
-
this.zAccumulatePunctualShadowedLight(this.base.rgb, this.metallic, this.roughness, this.specularStrength, this.n, this.viewDir, this.NoV, this.f0, this.lightColor, this.L, this.atten, this.shadow, this.litMask, this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), this.extra.x, pb.float(1)), this.$choice(pb.equal(this.lightType, LIGHT_TYPE_POINT), this.extra.y, pb.float(1)), this.outLight, this.shadowTerm);
|
|
341
|
-
});
|
|
342
|
-
this.$if(pb.notEqual(this.debugShadowTermOnly, 0), function() {
|
|
343
|
-
this.$outputs.color = pb.vec4(pb.vec3(this.shadowTerm), 1);
|
|
344
|
-
}).$else(function() {
|
|
345
|
-
this.$outputs.color = pb.vec4(this.outLight, 0);
|
|
346
|
-
});
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
});
|
|
350
|
-
if (!builtProgram) {
|
|
351
|
-
ctx.currentShadowLight = prevLight;
|
|
352
|
-
ctx.renderPass = prevRenderPass;
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
program = builtProgram;
|
|
356
|
-
program.name = '@DeferredShadowLightPass';
|
|
357
|
-
DeferredShadowLightPass._programs[hash] = program;
|
|
358
|
-
}
|
|
359
|
-
let bindGroup = DeferredShadowLightPass._bindGroups[hash];
|
|
360
|
-
if (!bindGroup) {
|
|
361
|
-
bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);
|
|
362
|
-
DeferredShadowLightPass._bindGroups[hash] = bindGroup;
|
|
363
|
-
}
|
|
364
|
-
bindGroup.setTexture('gbufferColorTex', gbufferColor, fetchSampler('clamp_nearest_nomip'));
|
|
365
|
-
bindGroup.setTexture('gbufferRoughnessTex', gbufferRoughness, fetchSampler('clamp_nearest_nomip'));
|
|
366
|
-
bindGroup.setTexture('gbufferNormalTex', gbufferNormal, fetchSampler('clamp_nearest_nomip'));
|
|
367
|
-
bindGroup.setTexture('gbufferExtraTex', gbufferExtra, fetchSampler('clamp_nearest_nomip'));
|
|
368
|
-
bindGroup.setTexture('linearDepthTex', ctx.linearDepthTexture, fetchSampler('clamp_nearest_nomip'));
|
|
369
|
-
DeferredShadowLightPass.bindOptionalSceneTextures(bindGroup, program, ctx);
|
|
370
|
-
const cameraRight = ctx.camera.worldMatrix.getRow(0).xyz().inplaceNormalize();
|
|
371
|
-
const cameraUp = ctx.camera.worldMatrix.getRow(1).xyz().inplaceNormalize();
|
|
372
|
-
const cameraForward = ctx.camera.worldMatrix.getRow(2).xyz().inplaceNormalize().scaleBy(-1);
|
|
373
|
-
const cameraPos = ctx.camera.getWorldPosition();
|
|
374
|
-
bindGroup.setValue('cameraRight', new Float32Array([
|
|
375
|
-
cameraRight.x,
|
|
376
|
-
cameraRight.y,
|
|
377
|
-
cameraRight.z
|
|
378
|
-
]));
|
|
379
|
-
bindGroup.setValue('cameraUp', new Float32Array([
|
|
380
|
-
cameraUp.x,
|
|
381
|
-
cameraUp.y,
|
|
382
|
-
cameraUp.z
|
|
383
|
-
]));
|
|
384
|
-
bindGroup.setValue('cameraForward', new Float32Array([
|
|
385
|
-
cameraForward.x,
|
|
386
|
-
cameraForward.y,
|
|
387
|
-
cameraForward.z
|
|
388
|
-
]));
|
|
389
|
-
bindGroup.setValue('cameraViewProjection', ctx.camera.viewProjectionMatrix);
|
|
390
|
-
bindGroup.setValue('cameraPos', new Float32Array([
|
|
391
|
-
cameraPos.x,
|
|
392
|
-
cameraPos.y,
|
|
393
|
-
cameraPos.z
|
|
394
|
-
]));
|
|
395
|
-
bindGroup.setValue('cameraProj', new Float32Array([
|
|
396
|
-
ctx.camera.getTanHalfFovy(),
|
|
397
|
-
ctx.camera.getAspect()
|
|
398
|
-
]));
|
|
399
|
-
bindGroup.setValue('cameraNearFar', new Float32Array([
|
|
400
|
-
ctx.camera.getNearPlane(),
|
|
401
|
-
ctx.camera.getFarPlane()
|
|
402
|
-
]));
|
|
403
|
-
bindGroup.setValue('debugShadowTermOnly', debugShadowTermOnly ? 1 : 0);
|
|
404
|
-
bindGroup.setValue('camera', DeferredShadowLightPass.getCameraUniforms(ctx));
|
|
405
|
-
ShaderHelper.setLightUniformsShadow(bindGroup, ctx, light);
|
|
406
|
-
if (!DeferredShadowLightPass._additiveRenderStates) {
|
|
407
|
-
DeferredShadowLightPass._additiveRenderStates = device.createRenderStateSet();
|
|
408
|
-
DeferredShadowLightPass._additiveRenderStates.useDepthState().enableTest(false).enableWrite(false);
|
|
409
|
-
DeferredShadowLightPass._additiveRenderStates.useRasterizerState().setCullMode('none');
|
|
410
|
-
DeferredShadowLightPass._additiveRenderStates.useBlendingState().enable(true).setBlendEquation('add', 'add').setBlendFuncRGB('one', 'one').setBlendFuncAlpha('zero', 'one');
|
|
411
|
-
}
|
|
412
|
-
if (!DeferredShadowLightPass._multiplyRenderStates) {
|
|
413
|
-
DeferredShadowLightPass._multiplyRenderStates = device.createRenderStateSet();
|
|
414
|
-
DeferredShadowLightPass._multiplyRenderStates.useDepthState().enableTest(false).enableWrite(false);
|
|
415
|
-
DeferredShadowLightPass._multiplyRenderStates.useRasterizerState().setCullMode('none');
|
|
416
|
-
DeferredShadowLightPass._multiplyRenderStates.useBlendingState().enable(true).setBlendEquation('add', 'add').setBlendFuncRGB('zero', 'src-color').setBlendFuncAlpha('zero', 'one');
|
|
417
|
-
}
|
|
418
|
-
const renderStates = debugShadowTermOnly ? DeferredShadowLightPass._multiplyRenderStates : DeferredShadowLightPass._additiveRenderStates;
|
|
419
|
-
device.setProgram(program);
|
|
420
|
-
device.setBindGroup(0, bindGroup);
|
|
421
|
-
drawFullscreenQuad(renderStates);
|
|
422
|
-
ctx.currentShadowLight = prevLight;
|
|
423
|
-
ctx.renderPass = prevRenderPass;
|
|
424
|
-
}
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
export { DeferredShadowLightPass };
|
|
428
|
-
//# sourceMappingURL=deferredshadowlightpass.js.map
|