@zephyr3d/scene 0.9.2 → 0.9.4
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/animationset.js +135 -135
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/ik/ik_chain_builder.js +68 -0
- package/dist/animation/ik/ik_chain_builder.js.map +1 -0
- package/dist/animation/ik/ik_pole_constraint.js +2 -7
- package/dist/animation/ik/ik_pole_constraint.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +146 -146
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/math.js +16 -0
- package/dist/animation/joint_dynamics/math.js.map +1 -0
- package/dist/animation/spring/spring_system.js +75 -75
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring2/constraints.js.map +1 -1
- package/dist/animation/spring2/controller.js +64 -64
- package/dist/animation/spring2/controller.js.map +1 -1
- package/dist/animation/spring2/math.js.map +1 -1
- package/dist/animation/spring2/spring_system.js +8 -8
- package/dist/animation/spring2/spring_system.js.map +1 -1
- package/dist/app/engine.js +119 -71
- package/dist/app/engine.js.map +1 -1
- package/dist/asset/assetmanager.js +296 -244
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +1 -0
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/camera/camera.js +184 -184
- package/dist/camera/camera.js.map +1 -1
- package/dist/index.d.ts +685 -38
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +290 -290
- package/dist/material/material.js.map +1 -1
- package/dist/material/msdf_text.js +180 -0
- package/dist/material/msdf_text.js.map +1 -0
- package/dist/material/msdf_text_sprite.js +64 -0
- package/dist/material/msdf_text_sprite.js.map +1 -0
- package/dist/material/pbrblueprint.js +123 -108
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/shader/helper.js +6 -3
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite_sdf.js +106 -0
- package/dist/material/sprite_sdf.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/posteffect/ssr.js +1 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/render/abuffer_oit.js +1 -0
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +28 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/drawable_mixin.js +1 -0
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +1 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +1 -0
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +1 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/render_queue.js +1 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +93 -93
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +3 -3
- package/dist/render/rendergraph/history_resources.js.map +1 -1
- package/dist/render/rendergraph/types.js +22 -22
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/scene/basesprite.js +1 -5
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +29 -17
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +1 -0
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/mesh.js +8 -9
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +96 -0
- package/dist/scene/meshdrawable.js.map +1 -0
- package/dist/scene/msdftext.js +341 -0
- package/dist/scene/msdftext.js.map +1 -0
- package/dist/scene/msdftextsprite.js +349 -0
- package/dist/scene/msdftextsprite.js.map +1 -0
- package/dist/scene/particlesys.js +1 -0
- package/dist/scene/particlesys.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 +6 -0
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sdftextsprite.js +322 -0
- package/dist/scene/sdftextsprite.js.map +1 -0
- package/dist/scene/terrain-cm/grass.js +1 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/textsprite.js +120 -0
- package/dist/scene/textsprite.js.map +1 -0
- package/dist/scene/water.js +1 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shadow/shader.js +1 -0
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shapes/torus.js +90 -59
- package/dist/shapes/torus.js.map +1 -1
- package/dist/src/animation/animation.js +127 -0
- package/dist/src/animation/animation.js.map +1 -0
- package/dist/src/animation/animationset.js +255 -0
- package/dist/src/animation/animationset.js.map +1 -0
- package/dist/src/animation/animationtrack.js +34 -0
- package/dist/src/animation/animationtrack.js.map +1 -0
- package/dist/src/animation/eulerrotationtrack.js +52 -0
- package/dist/src/animation/eulerrotationtrack.js.map +1 -0
- package/dist/src/animation/morphtarget.js +93 -0
- package/dist/src/animation/morphtarget.js.map +1 -0
- package/dist/src/animation/morphtrack.js +70 -0
- package/dist/src/animation/morphtrack.js.map +1 -0
- package/dist/src/animation/proptrack.js +161 -0
- package/dist/src/animation/proptrack.js.map +1 -0
- package/dist/src/animation/rotationtrack.js +51 -0
- package/dist/src/animation/rotationtrack.js.map +1 -0
- package/dist/src/animation/scaletrack.js +50 -0
- package/dist/src/animation/scaletrack.js.map +1 -0
- package/dist/src/animation/skeleton.js +204 -0
- package/dist/src/animation/skeleton.js.map +1 -0
- package/dist/src/animation/translationtrack.js +50 -0
- package/dist/src/animation/translationtrack.js.map +1 -0
- package/dist/src/app/app.js +129 -0
- package/dist/src/app/app.js.map +1 -0
- package/dist/src/app/inputmgr.js +267 -0
- package/dist/src/app/inputmgr.js.map +1 -0
- package/dist/src/asset/assetmanager.js +404 -0
- package/dist/src/asset/assetmanager.js.map +1 -0
- package/dist/src/asset/builtin.js +337 -0
- package/dist/src/asset/builtin.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds.js +470 -0
- package/dist/src/asset/loaders/dds/dds.js.map +1 -0
- package/dist/src/asset/loaders/dds/dds_loader.js +28 -0
- package/dist/src/asset/loaders/dds/dds_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js +1265 -0
- package/dist/src/asset/loaders/gltf/gltf_loader.js.map +1 -0
- package/dist/src/asset/loaders/gltf/helpers.js +327 -0
- package/dist/src/asset/loaders/gltf/helpers.js.map +1 -0
- package/dist/src/asset/loaders/hdr/hdr.js +180 -0
- package/dist/src/asset/loaders/hdr/hdr.js.map +1 -0
- package/dist/src/asset/loaders/image/tga_Loader.js +116 -0
- package/dist/src/asset/loaders/image/tga_Loader.js.map +1 -0
- package/dist/src/asset/loaders/image/webimage_loader.js +63 -0
- package/dist/src/asset/loaders/image/webimage_loader.js.map +1 -0
- package/dist/src/asset/loaders/loader.js +45 -0
- package/dist/src/asset/loaders/loader.js.map +1 -0
- package/dist/src/asset/model.js +414 -0
- package/dist/src/asset/model.js.map +1 -0
- package/dist/src/blitter/bilateralblur.js +221 -0
- package/dist/src/blitter/bilateralblur.js.map +1 -0
- package/dist/src/blitter/blitter.js +390 -0
- package/dist/src/blitter/blitter.js.map +1 -0
- package/dist/src/blitter/box.js +118 -0
- package/dist/src/blitter/box.js.map +1 -0
- package/dist/src/blitter/copy.js +22 -0
- package/dist/src/blitter/copy.js.map +1 -0
- package/dist/src/blitter/gaussianblur.js +228 -0
- package/dist/src/blitter/gaussianblur.js.map +1 -0
- package/dist/src/camera/base.js +92 -0
- package/dist/src/camera/base.js.map +1 -0
- package/dist/src/camera/camera.js +1005 -0
- package/dist/src/camera/camera.js.map +1 -0
- package/dist/src/camera/fps.js +238 -0
- package/dist/src/camera/fps.js.map +1 -0
- package/dist/src/camera/orbit.js +245 -0
- package/dist/src/camera/orbit.js.map +1 -0
- package/dist/src/camera/orthocamera.js +167 -0
- package/dist/src/camera/orthocamera.js.map +1 -0
- package/dist/src/camera/perspectivecamera.js +141 -0
- package/dist/src/camera/perspectivecamera.js.map +1 -0
- package/dist/src/index.js +120 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/material/blinn.js +81 -0
- package/dist/src/material/blinn.js.map +1 -0
- package/dist/src/material/grassmaterial.js +113 -0
- package/dist/src/material/grassmaterial.js.map +1 -0
- package/dist/src/material/lambert.js +92 -0
- package/dist/src/material/lambert.js.map +1 -0
- package/dist/src/material/material.js +301 -0
- package/dist/src/material/material.js.map +1 -0
- package/dist/src/material/meshmaterial.js +704 -0
- package/dist/src/material/meshmaterial.js.map +1 -0
- package/dist/src/material/mixins/albedocolor.js +76 -0
- package/dist/src/material/mixins/albedocolor.js.map +1 -0
- package/dist/src/material/mixins/foliage.js +47 -0
- package/dist/src/material/mixins/foliage.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js +112 -0
- package/dist/src/material/mixins/lightmodel/blinnphong.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/lambert.js +58 -0
- package/dist/src/material/mixins/lightmodel/lambert.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js +178 -0
- package/dist/src/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js +139 -0
- package/dist/src/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -0
- package/dist/src/material/mixins/lit.js +476 -0
- package/dist/src/material/mixins/lit.js.map +1 -0
- package/dist/src/material/mixins/pbr/common.js +918 -0
- package/dist/src/material/mixins/pbr/common.js.map +1 -0
- package/dist/src/material/mixins/texture.js +172 -0
- package/dist/src/material/mixins/texture.js.map +1 -0
- package/dist/src/material/mixins/vertexcolor.js +56 -0
- package/dist/src/material/mixins/vertexcolor.js.map +1 -0
- package/dist/src/material/particle.js +178 -0
- package/dist/src/material/particle.js.map +1 -0
- package/dist/src/material/pbrmr.js +97 -0
- package/dist/src/material/pbrmr.js.map +1 -0
- package/dist/src/material/pbrsg.js +97 -0
- package/dist/src/material/pbrsg.js.map +1 -0
- package/dist/src/material/shader/helper.js +1209 -0
- package/dist/src/material/shader/helper.js.map +1 -0
- package/dist/src/material/terrain-cm.js +606 -0
- package/dist/src/material/terrain-cm.js.map +1 -0
- package/dist/src/material/terrainmaterial.js +375 -0
- package/dist/src/material/terrainmaterial.js.map +1 -0
- package/dist/src/material/unlit.js +41 -0
- package/dist/src/material/unlit.js.map +1 -0
- package/dist/src/material/water.js +417 -0
- package/dist/src/material/water.js.map +1 -0
- package/dist/src/posteffect/bloom.js +361 -0
- package/dist/src/posteffect/bloom.js.map +1 -0
- package/dist/src/posteffect/compositor.js +226 -0
- package/dist/src/posteffect/compositor.js.map +1 -0
- package/dist/src/posteffect/fxaa.js +273 -0
- package/dist/src/posteffect/fxaa.js.map +1 -0
- package/dist/src/posteffect/grayscale.js +69 -0
- package/dist/src/posteffect/grayscale.js.map +1 -0
- package/dist/src/posteffect/motionblur.js +96 -0
- package/dist/src/posteffect/motionblur.js.map +1 -0
- package/dist/src/posteffect/posteffect.js +126 -0
- package/dist/src/posteffect/posteffect.js.map +1 -0
- package/dist/src/posteffect/sao.js +324 -0
- package/dist/src/posteffect/sao.js.map +1 -0
- package/dist/src/posteffect/ssr.js +489 -0
- package/dist/src/posteffect/ssr.js.map +1 -0
- package/dist/src/posteffect/taa.js +172 -0
- package/dist/src/posteffect/taa.js.map +1 -0
- package/dist/src/posteffect/tonemap.js +94 -0
- package/dist/src/posteffect/tonemap.js.map +1 -0
- package/dist/src/render/abuffer_oit.js +361 -0
- package/dist/src/render/abuffer_oit.js.map +1 -0
- package/dist/src/render/clipmap.js +851 -0
- package/dist/src/render/clipmap.js.map +1 -0
- package/dist/src/render/cluster_light.js +333 -0
- package/dist/src/render/cluster_light.js.map +1 -0
- package/dist/src/render/cull_visitor.js +187 -0
- package/dist/src/render/cull_visitor.js.map +1 -0
- package/dist/src/render/depthpass.js +68 -0
- package/dist/src/render/depthpass.js.map +1 -0
- package/dist/src/render/drawable_mixin.js +227 -0
- package/dist/src/render/drawable_mixin.js.map +1 -0
- package/dist/src/render/envlight.js +463 -0
- package/dist/src/render/envlight.js.map +1 -0
- package/dist/src/render/fbm_wavegenerator.js +251 -0
- package/dist/src/render/fbm_wavegenerator.js.map +1 -0
- package/dist/src/render/fft_wavegenerator.js +1006 -0
- package/dist/src/render/fft_wavegenerator.js.map +1 -0
- package/dist/src/render/fullscreenquad.js +38 -0
- package/dist/src/render/fullscreenquad.js.map +1 -0
- package/dist/src/render/gerstner_wavegenerator.js +314 -0
- package/dist/src/render/gerstner_wavegenerator.js.map +1 -0
- package/dist/src/render/globalbindgroup_allocator.js +60 -0
- package/dist/src/render/globalbindgroup_allocator.js.map +1 -0
- package/dist/src/render/hzb.js +273 -0
- package/dist/src/render/hzb.js.map +1 -0
- package/dist/src/render/lightpass.js +172 -0
- package/dist/src/render/lightpass.js.map +1 -0
- package/dist/src/render/objectcolorpass.js +51 -0
- package/dist/src/render/objectcolorpass.js.map +1 -0
- package/dist/src/render/primitive.js +364 -0
- package/dist/src/render/primitive.js.map +1 -0
- package/dist/src/render/render_queue.js +467 -0
- package/dist/src/render/render_queue.js.map +1 -0
- package/dist/src/render/renderbundle_wrapper.js +152 -0
- package/dist/src/render/renderbundle_wrapper.js.map +1 -0
- package/dist/src/render/renderer.js +455 -0
- package/dist/src/render/renderer.js.map +1 -0
- package/dist/src/render/renderpass.js +200 -0
- package/dist/src/render/renderpass.js.map +1 -0
- package/dist/src/render/shadowmap_pass.js +56 -0
- package/dist/src/render/shadowmap_pass.js.map +1 -0
- package/dist/src/render/sky.js +1103 -0
- package/dist/src/render/sky.js.map +1 -0
- package/dist/src/render/weightedblended_oit.js +168 -0
- package/dist/src/render/weightedblended_oit.js.map +1 -0
- package/dist/src/scene/batchgroup.js +162 -0
- package/dist/src/scene/batchgroup.js.map +1 -0
- package/dist/src/scene/environment.js +209 -0
- package/dist/src/scene/environment.js.map +1 -0
- package/dist/src/scene/graph_node.js +72 -0
- package/dist/src/scene/graph_node.js.map +1 -0
- package/dist/src/scene/light.js +416 -0
- package/dist/src/scene/light.js.map +1 -0
- package/dist/src/scene/mesh.js +341 -0
- package/dist/src/scene/mesh.js.map +1 -0
- package/dist/src/scene/octree.js +649 -0
- package/dist/src/scene/octree.js.map +1 -0
- package/dist/src/scene/particlesys.js +738 -0
- package/dist/src/scene/particlesys.js.map +1 -0
- package/dist/src/scene/raycast_visitor.js +103 -0
- package/dist/src/scene/raycast_visitor.js.map +1 -0
- package/dist/src/scene/scene.js +284 -0
- package/dist/src/scene/scene.js.map +1 -0
- package/dist/src/scene/scene_node.js +732 -0
- package/dist/src/scene/scene_node.js.map +1 -0
- package/dist/src/scene/terrain/grass.js +278 -0
- package/dist/src/scene/terrain/grass.js.map +1 -0
- package/dist/src/scene/terrain/heightfield.js +475 -0
- package/dist/src/scene/terrain/heightfield.js.map +1 -0
- package/dist/src/scene/terrain/patch.js +530 -0
- package/dist/src/scene/terrain/patch.js.map +1 -0
- package/dist/src/scene/terrain/quadtree.js +461 -0
- package/dist/src/scene/terrain/quadtree.js.map +1 -0
- package/dist/src/scene/terrain/terrain.js +246 -0
- package/dist/src/scene/terrain/terrain.js.map +1 -0
- package/dist/src/scene/terrain-cm/grass.js +594 -0
- package/dist/src/scene/terrain-cm/grass.js.map +1 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js +159 -0
- package/dist/src/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js +538 -0
- package/dist/src/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/src/scene/water.js +374 -0
- package/dist/src/scene/water.js.map +1 -0
- package/dist/src/shaders/atmosphere.js +957 -0
- package/dist/src/shaders/atmosphere.js.map +1 -0
- package/dist/src/shaders/fog.js +112 -0
- package/dist/src/shaders/fog.js.map +1 -0
- package/dist/src/shaders/misc.js +266 -0
- package/dist/src/shaders/misc.js.map +1 -0
- package/dist/src/shaders/noise.js +222 -0
- package/dist/src/shaders/noise.js.map +1 -0
- package/dist/src/shaders/pbr.js +51 -0
- package/dist/src/shaders/pbr.js.map +1 -0
- package/dist/src/shaders/shadow.js +636 -0
- package/dist/src/shaders/shadow.js.map +1 -0
- package/dist/src/shaders/ssr.js +490 -0
- package/dist/src/shaders/ssr.js.map +1 -0
- package/dist/src/shaders/temporal.js +215 -0
- package/dist/src/shaders/temporal.js.map +1 -0
- package/dist/src/shaders/water.js +756 -0
- package/dist/src/shaders/water.js.map +1 -0
- package/dist/src/shadow/esm.js +237 -0
- package/dist/src/shadow/esm.js.map +1 -0
- package/dist/src/shadow/pcf_opt.js +181 -0
- package/dist/src/shadow/pcf_opt.js.map +1 -0
- package/dist/src/shadow/pcf_pd.js +189 -0
- package/dist/src/shadow/pcf_pd.js.map +1 -0
- package/dist/src/shadow/shader.js +37 -0
- package/dist/src/shadow/shader.js.map +1 -0
- package/dist/src/shadow/shadow_impl.js +15 -0
- package/dist/src/shadow/shadow_impl.js.map +1 -0
- package/dist/src/shadow/shadowmapper.js +790 -0
- package/dist/src/shadow/shadowmapper.js.map +1 -0
- package/dist/src/shadow/ssm.js +159 -0
- package/dist/src/shadow/ssm.js.map +1 -0
- package/dist/src/shadow/vsm.js +297 -0
- package/dist/src/shadow/vsm.js.map +1 -0
- package/dist/src/shapes/box.js +386 -0
- package/dist/src/shapes/box.js.map +1 -0
- package/dist/src/shapes/cylinder.js +125 -0
- package/dist/src/shapes/cylinder.js.map +1 -0
- package/dist/src/shapes/plane.js +88 -0
- package/dist/src/shapes/plane.js.map +1 -0
- package/dist/src/shapes/shape.js +87 -0
- package/dist/src/shapes/shape.js.map +1 -0
- package/dist/src/shapes/sphere.js +114 -0
- package/dist/src/shapes/sphere.js.map +1 -0
- package/dist/src/shapes/tetrahedron.js +188 -0
- package/dist/src/shapes/tetrahedron.js.map +1 -0
- package/dist/src/shapes/torus.js +111 -0
- package/dist/src/shapes/torus.js.map +1 -0
- package/dist/src/utility/aabbtree.js +400 -0
- package/dist/src/utility/aabbtree.js.map +1 -0
- package/dist/src/utility/bounding_volume.js +29 -0
- package/dist/src/utility/bounding_volume.js.map +1 -0
- package/dist/src/utility/debug.js +28 -0
- package/dist/src/utility/debug.js.map +1 -0
- package/dist/src/utility/draco/decoder.js +116 -0
- package/dist/src/utility/draco/decoder.js.map +1 -0
- package/dist/src/utility/misc.js +105 -0
- package/dist/src/utility/misc.js.map +1 -0
- package/dist/src/utility/panorama.js +163 -0
- package/dist/src/utility/panorama.js.map +1 -0
- package/dist/src/utility/pmrem.js +354 -0
- package/dist/src/utility/pmrem.js.map +1 -0
- package/dist/src/utility/rendermipmap.js +115 -0
- package/dist/src/utility/rendermipmap.js.map +1 -0
- package/dist/src/utility/serialization/json.js +402 -0
- package/dist/src/utility/serialization/json.js.map +1 -0
- package/dist/src/utility/serialization/manager.js +623 -0
- package/dist/src/utility/serialization/manager.js.map +1 -0
- package/dist/src/utility/serialization/scene/animation.js +248 -0
- package/dist/src/utility/serialization/scene/animation.js.map +1 -0
- package/dist/src/utility/serialization/scene/batch.js +59 -0
- package/dist/src/utility/serialization/scene/batch.js.map +1 -0
- package/dist/src/utility/serialization/scene/camera.js +790 -0
- package/dist/src/utility/serialization/scene/camera.js.map +1 -0
- package/dist/src/utility/serialization/scene/common.js +222 -0
- package/dist/src/utility/serialization/scene/common.js.map +1 -0
- package/dist/src/utility/serialization/scene/light.js +575 -0
- package/dist/src/utility/serialization/scene/light.js.map +1 -0
- package/dist/src/utility/serialization/scene/material.js +1111 -0
- package/dist/src/utility/serialization/scene/material.js.map +1 -0
- package/dist/src/utility/serialization/scene/mesh.js +148 -0
- package/dist/src/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/src/utility/serialization/scene/misc.js +39 -0
- package/dist/src/utility/serialization/scene/misc.js.map +1 -0
- package/dist/src/utility/serialization/scene/node.js +451 -0
- package/dist/src/utility/serialization/scene/node.js.map +1 -0
- package/dist/src/utility/serialization/scene/particle.js +425 -0
- package/dist/src/utility/serialization/scene/particle.js.map +1 -0
- package/dist/src/utility/serialization/scene/primitive.js +692 -0
- package/dist/src/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/src/utility/serialization/scene/scene.js +704 -0
- package/dist/src/utility/serialization/scene/scene.js.map +1 -0
- package/dist/src/utility/serialization/scene/terrain.js +488 -0
- package/dist/src/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/src/utility/serialization/scene/water.js +465 -0
- package/dist/src/utility/serialization/scene/water.js.map +1 -0
- package/dist/src/utility/shprojector.js +297 -0
- package/dist/src/utility/shprojector.js.map +1 -0
- package/dist/src/utility/textures/ggxlut.js +213 -0
- package/dist/src/utility/textures/ggxlut.js.map +1 -0
- package/dist/src/utility/textures/gradientnoise.js +62 -0
- package/dist/src/utility/textures/gradientnoise.js.map +1 -0
- package/dist/src/utility/textures/randomnoise.js +41 -0
- package/dist/src/utility/textures/randomnoise.js.map +1 -0
- package/dist/src/values.js +162 -0
- package/dist/src/values.js.map +1 -0
- package/dist/text/font/font_asset.js +884 -0
- package/dist/text/font/font_asset.js.map +1 -0
- package/dist/text/font/sfnt_reader.js +43 -0
- package/dist/text/font/sfnt_reader.js.map +1 -0
- package/dist/text/msdf/generator.js +417 -0
- package/dist/text/msdf/generator.js.map +1 -0
- package/dist/text/msdf/shape.js +143 -0
- package/dist/text/msdf/shape.js.map +1 -0
- package/dist/text/runtime/msdf_glyph_atlas.js +146 -0
- package/dist/text/runtime/msdf_glyph_atlas.js.map +1 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js +47 -0
- package/dist/text/runtime/msdf_text_atlas_manager.js.map +1 -0
- package/dist/text/runtime/text_layout.js +96 -0
- package/dist/text/runtime/text_layout.js.map +1 -0
- package/dist/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1275 -1091
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +505 -490
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/pbr.js +32 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -1
- package/dist/utility/serialization/blueprint/constants.js +255 -0
- package/dist/utility/serialization/blueprint/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/constants.js +203 -0
- package/dist/utility/serialization/blueprint/material/constants.js.map +1 -0
- package/dist/utility/serialization/blueprint/material/texture.js +165 -0
- package/dist/utility/serialization/blueprint/material/texture.js.map +1 -0
- package/dist/utility/serialization/manager.js +55 -11
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +2 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +2 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +2 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +2 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +2 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +2 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +2 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +1 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +2 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +2 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +516 -0
- package/dist/utility/serialization/scene/text.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +2 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +4 -4
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +1 -5
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
- package/dist/animation/joint_dynamics/vrm_spring_bone.js +0 -46
- package/dist/animation/joint_dynamics/vrm_spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone.js +0 -240
- package/dist/animation/spring/spring_bone.js.map +0 -1
- package/dist/animation/spring/spring_bone_collider.js +0 -198
- package/dist/animation/spring/spring_bone_collider.js.map +0 -1
- package/dist/animation/spring/spring_bone_constraint.js +0 -170
- package/dist/animation/spring/spring_bone_constraint.js.map +0 -1
- package/dist/animation/spring/spring_bone_system.js +0 -328
- package/dist/animation/spring/spring_bone_system.js.map +0 -1
- package/dist/render/sky_motion_vector.js +0 -85
- package/dist/render/sky_motion_vector.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram?: GPUProgram;\r\n private static _blurBlitterH: Nullable<BilateralBlurBlitter> = null;\r\n private static _blurBlitterV: Nullable<BilateralBlurBlitter> = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: Nullable<BindGroup>;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment() {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture ?? null;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program!.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, linearSampler);\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight()\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hash = ctx.env!.light.envLight ? ctx.env!.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hash = `${Number(blur)}:${\r\n ctx.env!.light.envLight ? ctx.env!.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.camera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n program = this._createIntersectProgram(ctx, blur);\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n this.resolve(ctx, inputColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n device.popDeviceStates();\r\n this.combine(\r\n ctx,\r\n inputColorTexture,\r\n pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D,\r\n srgbOutput\r\n );\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\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 this.$if(pb.notEqual(this.flip, 0), function () {\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.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(this.sceneColor, this.reflectance, this.roughnessInfo);\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Combine';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\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 this.$if(pb.notEqual(this.flip, 0), function () {\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.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env!.light.envLight) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.float(0);\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2)!,\r\n this.envLightStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, this.alpha);\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n this.$l.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.reflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.intersectSample.w, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(\r\n this.intersectTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(\r\n this.roughnessTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectIntersectSample.w, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectIntersectSample.xy,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.intersectSample.xy,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectIntersectSample.w\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(\r\n this.intersectSample.xy,\r\n this.indirectRoughnessInfo\r\n );\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.intersectSample.xy, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.intersectSample.w\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Resolve';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\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 this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n this.$if(pb.greaterThanEqual(this.roughness, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float();\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = ctx.HiZTexture\r\n ? screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n )\r\n : screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.camera.ssrCalcThickness\r\n );\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitInfo.w, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitInfo.w;\r\n this.color = pb.vec3(this.hitInfo.xy, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env!.light.envLight) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness)!,\r\n this.envLightStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitInfo.xy, 0).rgb,\r\n this.hitInfo.w\r\n );\r\n this.reflectance = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = blur ? '@SSR_Intersect_Blur' : '@SSR_Intersect';\r\n return program;\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","undefined","_createCombineProgrm","createBindGroup","bindGroupLayouts","linearSampler","setTexture","SSRRoughnessTexture","setValue","ssrMaxRoughness","Vector4","getDrawingBufferWidth","getDrawingBufferHeight","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hash","env","light","envLight","getHash","_createResolveProgram","bindGroup","nearestSampler","SSRNormalTexture","width","height","Matrix4x4","invert","getProjectionMatrix","viewMatrix","worldMatrix","strength","updateBindGroup","intersect","blur","Number","HiZTexture","ssrCalcThickness","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","setFramebuffer","intersectTex","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","popDeviceStates","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","targetSize","float","outColor","func","vec3","$l","r","div","reflectance","clamp","roughnessValue","rgb","color","sceneColor","sub","$return","screenUV","fragCoord","textureSampleLevel","roughnessInfo","combined","greaterThanEqual","a","$else","resolveSample","equal","linearToGamma","name","initShaderBindings","normalTex","mat4","invViewMatrix","invProjMatrix","envLightStrength","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","x","clipSpacePos","wPos","mat","xyz","w","getPosition","roughness","viewPos","worldNormal","viewVec","normalize","viewNormal","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","mix","reflectSceneColor","alpha","discard","intersectSample","greaterThan","indirectIntersectSample","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","cameraPos","projMatrix","hizTex","depthMipLevels","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ssr.js","sources":["../../src/posteffect/ssr.ts"],"sourcesContent":["import { AbstractPostEffect, PostEffectLayer } from './posteffect';\r\nimport { linearToGamma } from '../shaders/misc';\r\nimport type { BindGroup, FrameBuffer, GPUProgram, Texture2D } from '@zephyr3d/device';\r\nimport type { DrawContext } from '../render';\r\nimport { screenSpaceRayTracing_HiZ, screenSpaceRayTracing_Linear2D, SSR_calcJitter } from '../shaders/ssr';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Matrix4x4, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport { copyTexture, fetchSampler } from '../utility/misc';\r\nimport { BilateralBlurBlitter } from '../blitter/bilateralblur';\r\nimport { ShaderHelper } from '../material';\r\n\r\n/**\r\n * SSR post effect\r\n *\r\n * @remarks\r\n * Internal used in light pass\r\n *\r\n * @internal\r\n */\r\nexport class SSR extends AbstractPostEffect {\r\n private static _programs: Record<string, GPUProgram> = {};\r\n private static _resolveProgram: Record<string, GPUProgram> = {};\r\n private static _combineProgram?: GPUProgram;\r\n private static _blurBlitterH: Nullable<BilateralBlurBlitter> = null;\r\n private static _blurBlitterV: Nullable<BilateralBlurBlitter> = null;\r\n private _bindgroups: Record<string, BindGroup>;\r\n private _resolveBindGroup: Record<string, BindGroup>;\r\n private _combineBindGroup: Nullable<BindGroup>;\r\n /**\r\n * Creates an instance of SSR post effect\r\n */\r\n constructor() {\r\n super();\r\n this._layer = PostEffectLayer.opaque;\r\n this._bindgroups = {};\r\n this._resolveBindGroup = {};\r\n this._combineBindGroup = null;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireLinearDepthTexture} */\r\n requireLinearDepthTexture() {\r\n return true;\r\n }\r\n /** {@inheritDoc AbstractPostEffect.requireDepthAttachment} */\r\n requireDepthAttachment() {\r\n return true;\r\n }\r\n /** @internal */\r\n blurPass(\r\n ctx: DrawContext,\r\n blitter: BilateralBlurBlitter,\r\n blurSizeTex: Texture2D,\r\n blurSizeIndex: number,\r\n blurSizeScale: number,\r\n kernelRadius: number,\r\n stdDev: number,\r\n depthCutoff: number,\r\n fbFrom: FrameBuffer,\r\n fbTo: FrameBuffer\r\n ) {\r\n const size = new Vector2(fbFrom.getWidth(), fbFrom.getHeight());\r\n blitter.kernelRadius = kernelRadius;\r\n blitter.stdDev = stdDev;\r\n blitter.size = size;\r\n blitter.depthTex = ctx.linearDepthTexture ?? null;\r\n blitter.depthCutoff = depthCutoff;\r\n blitter.blurSizeTex = blurSizeTex;\r\n blitter.blurSizeIndex = blurSizeIndex;\r\n blitter.blurSizeScale = blurSizeScale;\r\n blitter.sampler = fetchSampler('clamp_nearest_nomip');\r\n blitter.cameraNearFar.setXY(ctx.camera.getNearPlane(), ctx.camera.getFarPlane());\r\n blitter.srgbOut = false;\r\n blitter.blit(fbFrom.getColorAttachments()[0] as Texture2D, fbTo, fetchSampler('clamp_linear_nomip'));\r\n }\r\n /** @internal */\r\n combine(ctx: DrawContext, inputColorTexture: Texture2D, reflectanceTex: Texture2D, srgbOut: boolean) {\r\n const device = ctx.device;\r\n let program = SSR._combineProgram;\r\n if (program === undefined) {\r\n program = this._createCombineProgrm(ctx);\r\n SSR._combineProgram = program;\r\n }\r\n if (!this._combineBindGroup) {\r\n this._combineBindGroup = device.createBindGroup(program!.bindGroupLayouts[0]);\r\n }\r\n const linearSampler = fetchSampler('clamp_linear');\r\n this._combineBindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n this._combineBindGroup.setTexture('reflectanceTex', reflectanceTex, linearSampler);\r\n this._combineBindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, linearSampler);\r\n this._combineBindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n this._combineBindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight()\r\n )\r\n );\r\n this._combineBindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n this._combineBindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, this._combineBindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n resolve(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n intersectTexture: Texture2D\r\n ) {\r\n const device = ctx.device;\r\n const hash = ctx.env!.light.envLight ? ctx.env!.light.getHash() : '';\r\n let program = SSR._resolveProgram[hash];\r\n if (program === undefined) {\r\n program = this._createResolveProgram(ctx);\r\n SSR._resolveProgram[hash] = program;\r\n }\r\n let bindGroup = this._resolveBindGroup[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._resolveBindGroup[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n bindGroup.setTexture('intersectTex', intersectTexture, nearestSampler);\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** @internal */\r\n intersect(\r\n ctx: DrawContext,\r\n inputColorTexture: Texture2D,\r\n sceneDepthTexture: Texture2D,\r\n blur: boolean,\r\n srgbOut: boolean\r\n ) {\r\n const device = ctx.device;\r\n const hash = `${Number(blur)}:${\r\n ctx.env!.light.envLight ? ctx.env!.light.getHash() : ''\r\n }:${!!ctx.HiZTexture}:${!!ctx.camera.ssrCalcThickness}`;\r\n let program = SSR._programs[hash];\r\n if (program === undefined) {\r\n program = this._createIntersectProgram(ctx, blur);\r\n SSR._programs[hash] = program;\r\n }\r\n let bindGroup = this._bindgroups[hash];\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(program.bindGroupLayouts[0]);\r\n this._bindgroups[hash] = bindGroup;\r\n }\r\n const nearestSampler = fetchSampler('clamp_nearest');\r\n const linearSampler = fetchSampler('clamp_linear');\r\n if (!blur) {\r\n bindGroup.setTexture('colorTex', inputColorTexture, linearSampler);\r\n if (ctx.env!.light.envLight) {\r\n bindGroup.setValue('envLightStrength', ctx.env!.light.strength);\r\n ctx.env!.light.envLight.updateBindGroup(bindGroup);\r\n }\r\n }\r\n bindGroup.setTexture('roughnessTex', ctx.SSRRoughnessTexture, nearestSampler);\r\n bindGroup.setTexture('normalTex', ctx.SSRNormalTexture, nearestSampler);\r\n bindGroup.setTexture('depthTex', sceneDepthTexture, nearestSampler);\r\n bindGroup.setValue('cameraNearFar', new Vector2(ctx.camera.getNearPlane(), ctx.camera.getFarPlane()));\r\n bindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n bindGroup.setValue('invProjMatrix', Matrix4x4.invert(ctx.camera.getProjectionMatrix()));\r\n bindGroup.setValue('projMatrix', ctx.camera.getProjectionMatrix());\r\n bindGroup.setValue('viewMatrix', ctx.camera.viewMatrix);\r\n bindGroup.setValue('invViewMatrix', ctx.camera.worldMatrix);\r\n bindGroup.setValue('ssrParams', ctx.camera.ssrParams);\r\n bindGroup.setValue('ssrMaxRoughness', ctx.camera.ssrMaxRoughness);\r\n if (ctx.HiZTexture) {\r\n bindGroup.setTexture('hizTex', ctx.HiZTexture, nearestSampler);\r\n bindGroup.setValue('depthMipLevels', ctx.HiZTexture.mipLevelCount);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n ctx.HiZTexture.width,\r\n ctx.HiZTexture.height\r\n )\r\n );\r\n } else {\r\n bindGroup.setValue('ssrStride', ctx.camera.ssrStride);\r\n bindGroup.setValue(\r\n 'targetSize',\r\n new Vector4(\r\n device.getDrawingBufferWidth(),\r\n device.getDrawingBufferHeight(),\r\n sceneDepthTexture.width,\r\n sceneDepthTexture.height\r\n )\r\n );\r\n }\r\n bindGroup.setValue('flip', this.needFlip(device) ? 1 : 0);\r\n bindGroup.setValue('srgbOut', srgbOut ? 1 : 0);\r\n device.setProgram(program);\r\n device.setBindGroup(0, bindGroup);\r\n this.drawFullscreenQuad(AbstractPostEffect.getDefaultRenderState(ctx, 'gt'));\r\n }\r\n /** {@inheritDoc AbstractPostEffect.apply} */\r\n apply(ctx: DrawContext, inputColorTexture: Texture2D, sceneDepthTexture: Texture2D, srgbOutput: boolean) {\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n copyTexture(\r\n inputColorTexture,\r\n device.getFramebuffer()!,\r\n fetchSampler('clamp_nearest_nomip'),\r\n AbstractPostEffect.getDefaultRenderState(ctx, 'eq')\r\n );\r\n\r\n const intersectFramebuffer = device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n );\r\n const pingpongFramebuffer = [\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n ),\r\n device.pool.fetchTemporalFramebuffer(\r\n false,\r\n inputColorTexture.width,\r\n inputColorTexture.height,\r\n 'rgba16f',\r\n ctx.depthTexture,\r\n false\r\n )\r\n ];\r\n device.setFramebuffer(intersectFramebuffer);\r\n this.intersect(ctx, inputColorTexture, sceneDepthTexture, true, false);\r\n const intersectTex = intersectFramebuffer.getColorAttachments()[0] as Texture2D;\r\n device.setFramebuffer(pingpongFramebuffer[0]);\r\n this.resolve(ctx, inputColorTexture, sceneDepthTexture, intersectTex);\r\n if (ctx.camera.ssrBlurScale > 0 && ctx.camera.ssrBlurKernelSize > 0) {\r\n const blurSizeScale = 255 * ctx.camera.ssrBlurScale;\r\n const kernelRadius = (Math.max(1, ctx.camera.ssrBlurKernelSize >> 0) - 1) >> 1;\r\n const stdDev = ctx.camera.ssrBlurStdDev;\r\n const depthCutoff = ctx.camera.ssrBlurDepthCutoff;\r\n const blitterH = (SSR._blurBlitterH = SSR._blurBlitterH ?? new BilateralBlurBlitter(false));\r\n blitterH.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterH,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[0],\r\n pingpongFramebuffer[1]\r\n );\r\n const blitterV = (SSR._blurBlitterV = SSR._blurBlitterV ?? new BilateralBlurBlitter(true));\r\n blitterV.renderStates = AbstractPostEffect.getDefaultRenderState(ctx, 'gt');\r\n this.blurPass(\r\n ctx,\r\n blitterV,\r\n intersectTex,\r\n 2,\r\n blurSizeScale,\r\n kernelRadius,\r\n stdDev,\r\n depthCutoff,\r\n pingpongFramebuffer[1],\r\n pingpongFramebuffer[0]\r\n );\r\n }\r\n device.popDeviceStates();\r\n this.combine(\r\n ctx,\r\n inputColorTexture,\r\n pingpongFramebuffer[0].getColorAttachments()[0] as Texture2D,\r\n srgbOutput\r\n );\r\n device.pool.releaseFrameBuffer(intersectFramebuffer);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[0]);\r\n device.pool.releaseFrameBuffer(pingpongFramebuffer[1]);\r\n }\r\n /** @internal */\r\n private _createCombineProgrm(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\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 this.$if(pb.notEqual(this.flip, 0), function () {\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.colorTex = pb.tex2D().uniform(0);\r\n this.reflectanceTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.combined = pb.vec3();\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n this.combined = this.sceneColor;\r\n }).$else(function () {\r\n this.$l.reflectance = pb.textureSampleLevel(this.reflectanceTex, this.screenUV, 0).rgb;\r\n this.combined = this.resolveSample(this.sceneColor, this.reflectance, this.roughnessInfo);\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.combined, 1);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.combined), 1);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Combine';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createResolveProgram(ctx: DrawContext) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\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 this.$if(pb.notEqual(this.flip, 0), function () {\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.colorTex = pb.tex2D().uniform(0);\r\n this.intersectTex = pb.tex2D().uniform(0);\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.func(\r\n 'resolveSample',\r\n [pb.vec3('sceneColor'), pb.vec3('reflectance'), pb.vec4('roughnessValue')],\r\n function () {\r\n this.$l.r = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.r, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n this.$return(this.color);\r\n }\r\n );\r\n pb.func('resolveEnvRadiance', [pb.vec2('uv'), pb.vec4('roughnessInfo')], function () {\r\n if (!ctx.env!.light.envLight) {\r\n this.$return(pb.vec3(0));\r\n return;\r\n }\r\n this.$l.pos = this.getPosition(this.uv, this.invProjMatrix);\r\n this.$if(pb.greaterThanEqual(this.pos.w, 1), function () {\r\n this.$return(pb.vec3(0));\r\n });\r\n this.$l.roughness = this.roughnessInfo.a;\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.uv, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.roughness2 = pb.float(0);\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness2)!,\r\n this.envLightStrength\r\n );\r\n this.$return(pb.min(this.env, pb.vec3(1)));\r\n });\r\n pb.func(\r\n 'resolveReflectance',\r\n [pb.vec2('uv'), pb.vec3('reflectSceneColor'), pb.vec4('roughnessInfo'), pb.float('alpha')],\r\n function () {\r\n this.$l.env = this.resolveEnvRadiance(this.uv, this.roughnessInfo);\r\n this.$l.reflectance = pb.mix(this.env, this.reflectSceneColor, this.alpha);\r\n this.$return(this.reflectance);\r\n }\r\n );\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessInfo = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$if(pb.greaterThanEqual(this.roughnessInfo.a, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n this.$l.intersectSample = pb.textureSampleLevel(this.intersectTex, this.screenUV, 0);\r\n this.$l.reflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.intersectSample.w, 0), function () {\r\n this.$l.indirectIntersectSample = pb.textureSampleLevel(\r\n this.intersectTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectRoughnessInfo = pb.textureSampleLevel(\r\n this.roughnessTex,\r\n this.intersectSample.xy,\r\n 0\r\n );\r\n this.$l.indirectReflectance = pb.vec3();\r\n this.$if(pb.greaterThan(this.indirectIntersectSample.w, 0), function () {\r\n this.$l.indirectReflectSceneColor = pb.textureSampleLevel(\r\n this.colorTex,\r\n this.indirectIntersectSample.xy,\r\n 0\r\n ).rgb;\r\n this.indirectReflectance = this.resolveReflectance(\r\n this.intersectSample.xy,\r\n this.indirectReflectSceneColor,\r\n this.indirectRoughnessInfo,\r\n this.indirectIntersectSample.w\r\n );\r\n }).$else(function () {\r\n this.indirectReflectance = this.resolveEnvRadiance(\r\n this.intersectSample.xy,\r\n this.indirectRoughnessInfo\r\n );\r\n });\r\n this.$l.reflectSceneColor = pb.textureSampleLevel(this.colorTex, this.intersectSample.xy, 0).rgb;\r\n this.$l.reflectSceneColor = this.resolveSample(\r\n this.reflectSceneColor,\r\n this.indirectReflectance,\r\n this.indirectRoughnessInfo\r\n );\r\n this.reflectance = this.resolveReflectance(\r\n this.screenUV,\r\n this.reflectSceneColor,\r\n this.roughnessInfo,\r\n this.intersectSample.w\r\n );\r\n }).$else(function () {\r\n this.reflectance = this.resolveEnvRadiance(this.screenUV, this.roughnessInfo);\r\n });\r\n this.$outputs.outColor = pb.vec4(this.reflectance, this.intersectSample.z);\r\n });\r\n }\r\n })!;\r\n program.name = '@SSR_Resolve';\r\n return program;\r\n }\r\n /** @internal */\r\n private _createIntersectProgram(ctx: DrawContext, blur: boolean) {\r\n const program = ctx.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.flip = pb.int().uniform(0);\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n if (!blur && ctx.env!.light.envLight) {\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\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 this.$if(pb.notEqual(this.flip, 0), function () {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n });\r\n });\r\n },\r\n fragment(pb) {\r\n if (!blur) {\r\n this.colorTex = pb.tex2D().uniform(0);\r\n if (ctx.env!.light.envLight) {\r\n this.envLightStrength = pb.float().uniform(0);\r\n ctx.env!.light.envLight.initShaderBindings(pb);\r\n }\r\n }\r\n this.roughnessTex = pb.tex2D().uniform(0);\r\n this.normalTex = pb.tex2D().uniform(0);\r\n this.depthTex = pb.tex2D().uniform(0);\r\n this.cameraNearFar = pb.vec2().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.invProjMatrix = pb.mat4().uniform(0);\r\n this.projMatrix = pb.mat4().uniform(0);\r\n this.viewMatrix = pb.mat4().uniform(0);\r\n this.invViewMatrix = pb.mat4().uniform(0);\r\n this.ssrParams = pb.vec4().uniform(0);\r\n this.ssrMaxRoughness = pb.float().uniform(0);\r\n this.targetSize = pb.vec4().uniform(0);\r\n if (ctx.HiZTexture) {\r\n this.hizTex = pb.tex2D().uniform(0);\r\n this.depthMipLevels = pb.int().uniform(0);\r\n } else {\r\n this.ssrStride = pb.float().uniform(0);\r\n }\r\n this.srgbOut = pb.int().uniform(0);\r\n this.$outputs.outColor = pb.vec4();\r\n pb.func('getPosition', [pb.vec2('uv'), pb.mat4('mat')], function () {\r\n this.$l.linearDepth = ShaderHelper.sampleLinearDepth(this, this.depthTex, this.uv, 0);\r\n this.$l.nonLinearDepth = pb.div(\r\n pb.sub(pb.div(this.cameraNearFar.x, this.linearDepth), this.cameraNearFar.y),\r\n pb.sub(this.cameraNearFar.x, this.cameraNearFar.y)\r\n );\r\n this.$l.clipSpacePos = pb.vec4(\r\n pb.sub(pb.mul(this.uv, 2), pb.vec2(1)),\r\n pb.sub(pb.mul(pb.clamp(this.nonLinearDepth, 0, 1), 2), 1),\r\n 1\r\n );\r\n this.$l.wPos = pb.mul(this.mat, this.clipSpacePos);\r\n this.$return(pb.vec4(pb.div(this.wPos.xyz, this.wPos.w), this.linearDepth));\r\n });\r\n pb.main(function () {\r\n this.$l.screenUV = pb.div(pb.vec2(this.$builtins.fragCoord.xy), this.targetSize.xy);\r\n this.$l.roughnessValue = pb.textureSampleLevel(this.roughnessTex, this.screenUV, 0);\r\n this.$l.roughness = this.roughnessValue.a;\r\n this.$if(pb.greaterThanEqual(this.roughness, this.ssrMaxRoughness), function () {\r\n pb.discard();\r\n });\r\n if (!blur) {\r\n this.$l.sceneColor = pb.textureSampleLevel(this.colorTex, this.screenUV, 0).rgb;\r\n }\r\n this.$l.pos = this.getPosition(this.screenUV, this.invProjMatrix);\r\n this.$l.linearDepth = this.pos.w;\r\n this.$l.color = pb.vec3(0);\r\n this.$l.a = pb.float();\r\n this.$if(pb.greaterThanEqual(this.linearDepth, 1), function () {\r\n if (!blur) {\r\n this.color = this.sceneColor;\r\n this.a = 1;\r\n }\r\n }).$else(function () {\r\n this.$l.viewPos = this.pos.xyz;\r\n this.$l.worldNormal = pb.sub(\r\n pb.mul(pb.textureSampleLevel(this.normalTex, this.screenUV, 0).rgb, 2),\r\n pb.vec3(1)\r\n );\r\n this.$l.viewVec = pb.normalize(this.viewPos);\r\n this.$l.viewNormal = pb.mul(this.viewMatrix, pb.vec4(this.worldNormal, 0)).xyz;\r\n this.$l.reflectVec = pb.add(\r\n pb.reflect(this.viewVec, this.viewNormal),\r\n SSR_calcJitter(this, this.viewPos, this.roughness)\r\n );\r\n this.$l.hitInfo = ctx.HiZTexture\r\n ? screenSpaceRayTracing_HiZ(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.depthMipLevels,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.targetSize,\r\n this.hizTex,\r\n this.normalTex\r\n )\r\n : screenSpaceRayTracing_Linear2D(\r\n this,\r\n this.viewPos,\r\n this.reflectVec,\r\n this.viewMatrix,\r\n this.projMatrix,\r\n this.invProjMatrix,\r\n this.cameraNearFar,\r\n this.ssrParams.x,\r\n this.ssrParams.y,\r\n this.ssrParams.z,\r\n this.ssrStride,\r\n this.targetSize,\r\n this.depthTex,\r\n this.normalTex,\r\n !!ctx.camera.ssrCalcThickness\r\n );\r\n if (blur) {\r\n this.blurRadius = pb.float(0);\r\n this.$if(pb.greaterThan(this.roughness, 0.001), function () {\r\n this.$l.coneAngle = pb.mul(pb.min(this.roughness, 0.999), Math.PI * 0.5);\r\n this.$l.coneLen = this.$choice(\r\n pb.greaterThan(this.hitInfo.w, 0),\r\n this.hitInfo.z,\r\n pb.min(this.targetSize.z, this.targetSize.w)\r\n );\r\n this.$l.opLen = pb.mul(pb.tan(this.coneAngle), this.coneLen, 2);\r\n this.$l.a2 = pb.mul(this.opLen, this.opLen);\r\n this.$l.fh2 = pb.mul(this.coneLen, this.coneLen, 4);\r\n this.blurRadius = pb.div(\r\n pb.mul(this.opLen, pb.sub(pb.sqrt(pb.add(this.a2, this.fh2)), this.opLen)),\r\n pb.mul(this.coneLen, 4)\r\n );\r\n });\r\n this.a = this.hitInfo.w;\r\n this.color = pb.vec3(this.hitInfo.xy, pb.clamp(pb.div(this.blurRadius, 255), 0, 1));\r\n } else {\r\n if (ctx.env!.light.envLight) {\r\n this.$l.reflectVecW = pb.mul(this.invViewMatrix, pb.vec4(this.reflectVec, 0)).xyz;\r\n this.$l.env = pb.mul(\r\n ctx.env!.light.envLight.getRadiance(this, this.reflectVecW, this.roughness)!,\r\n this.envLightStrength\r\n );\r\n } else {\r\n this.$l.env = pb.vec3(0);\r\n }\r\n this.$l.reflectance = pb.mix(\r\n this.env,\r\n pb.textureSampleLevel(this.colorTex, this.hitInfo.xy, 0).rgb,\r\n this.hitInfo.w\r\n );\r\n this.reflectance = pb.div(this.reflectance, pb.add(this.reflectance, pb.vec3(1)));\r\n this.$l.strength = pb.clamp(this.roughnessValue.rgb, pb.vec3(0), pb.vec3(1));\r\n this.color = pb.add(\r\n pb.mul(this.reflectance, this.strength),\r\n pb.mul(this.sceneColor, pb.sub(pb.vec3(1), this.strength))\r\n );\r\n }\r\n });\r\n this.$if(pb.equal(this.srgbOut, 0), function () {\r\n this.$outputs.outColor = pb.vec4(this.color, this.a);\r\n }).$else(function () {\r\n this.$outputs.outColor = pb.vec4(linearToGamma(this, this.color), this.a);\r\n });\r\n });\r\n }\r\n })!;\r\n program.name = blur ? '@SSR_Intersect_Blur' : '@SSR_Intersect';\r\n return program;\r\n }\r\n}\r\n"],"names":["SSR","AbstractPostEffect","_programs","_resolveProgram","_combineProgram","_blurBlitterH","_blurBlitterV","_bindgroups","_resolveBindGroup","_combineBindGroup","_layer","PostEffectLayer","opaque","requireLinearDepthTexture","requireDepthAttachment","blurPass","ctx","blitter","blurSizeTex","blurSizeIndex","blurSizeScale","kernelRadius","stdDev","depthCutoff","fbFrom","fbTo","size","Vector2","getWidth","getHeight","depthTex","linearDepthTexture","sampler","fetchSampler","cameraNearFar","setXY","camera","getNearPlane","getFarPlane","srgbOut","blit","getColorAttachments","combine","inputColorTexture","reflectanceTex","device","program","undefined","_createCombineProgrm","createBindGroup","bindGroupLayouts","linearSampler","setTexture","SSRRoughnessTexture","setValue","ssrMaxRoughness","Vector4","getDrawingBufferWidth","getDrawingBufferHeight","needFlip","setProgram","setBindGroup","drawFullscreenQuad","getDefaultRenderState","resolve","sceneDepthTexture","intersectTexture","hash","env","light","envLight","getHash","_createResolveProgram","bindGroup","nearestSampler","SSRNormalTexture","width","height","Matrix4x4","invert","getProjectionMatrix","viewMatrix","worldMatrix","strength","updateBindGroup","intersect","blur","Number","HiZTexture","ssrCalcThickness","_createIntersectProgram","getWorldPosition","ssrParams","mipLevelCount","ssrStride","apply","srgbOutput","pushDeviceStates","copyTexture","getFramebuffer","intersectFramebuffer","pool","fetchTemporalFramebuffer","depthTexture","pingpongFramebuffer","setFramebuffer","intersectTex","ssrBlurScale","ssrBlurKernelSize","Math","max","ssrBlurStdDev","ssrBlurDepthCutoff","blitterH","BilateralBlurBlitter","renderStates","blitterV","popDeviceStates","releaseFrameBuffer","buildRenderProgram","vertex","pb","flip","int","uniform","$inputs","pos","vec2","attrib","$outputs","uv","main","$builtins","position","vec4","add","mul","xy","$if","notEqual","y","neg","fragment","colorTex","tex2D","roughnessTex","targetSize","float","outColor","func","vec3","$l","r","div","reflectance","clamp","roughnessValue","rgb","color","sceneColor","sub","$return","screenUV","fragCoord","textureSampleLevel","roughnessInfo","combined","greaterThanEqual","a","$else","resolveSample","equal","linearToGamma","name","initShaderBindings","normalTex","mat4","invViewMatrix","invProjMatrix","envLightStrength","linearDepth","ShaderHelper","sampleLinearDepth","nonLinearDepth","x","clipSpacePos","wPos","mat","xyz","w","getPosition","roughness","viewPos","worldNormal","viewVec","normalize","viewNormal","reflectVec","reflect","SSR_calcJitter","reflectVecW","roughness2","getRadiance","min","resolveEnvRadiance","mix","reflectSceneColor","alpha","discard","intersectSample","greaterThan","indirectIntersectSample","indirectRoughnessInfo","indirectReflectance","indirectReflectSceneColor","resolveReflectance","z","cameraPos","projMatrix","hizTex","depthMipLevels","hitInfo","screenSpaceRayTracing_HiZ","screenSpaceRayTracing_Linear2D","blurRadius","coneAngle","PI","coneLen","$choice","opLen","tan","a2","fh2","sqrt"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abuffer_oit.js","sources":["../../src/render/abuffer_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n DeviceViewport,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { ShaderHelper } from '../material';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable } from '@zephyr3d/base';\r\n\r\n/**\r\n * per-pixel linked list OIT renderer using ABuffer.\r\n *\r\n * @remarks\r\n * The ABuffer OIT renderer only supports WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class ABufferOIT extends Disposable implements OIT {\r\n /** Type name of ABufferOIT */\r\n public static readonly type = 'ab';\r\n public static readonly usePremultipliedAlpha = true;\r\n private static readonly MAX_FRAGMENT_LAYERS = 75;\r\n private static _compositeProgram: Nullable<GPUProgram> = null;\r\n private static _compositeBindGroup: Nullable<BindGroup> = null;\r\n private static _compositeRenderStates: Nullable<RenderStateSet> = null;\r\n private static _ubAlignment = 0;\r\n private _nodeBuffer: Nullable<GPUDataBuffer>;\r\n private _headStagingBuffer: Nullable<GPUDataBuffer>;\r\n private _headBuffer: Nullable<GPUDataBuffer>;\r\n private _scissorOffsetBuffer: Nullable<GPUDataBuffer>;\r\n private readonly _numLayers: number;\r\n private _screenSize: Uint32Array<ArrayBuffer>;\r\n private _hash: Nullable<string>;\r\n private readonly _debug: boolean;\r\n private _scissorSlices: number;\r\n private _scissorHeight: number;\r\n private _currentPass: number;\r\n private _savedScissor: Nullable<DeviceViewport>;\r\n /**\r\n * Creates an instance of ABufferOIT class\r\n *\r\n * @param numLayers - How many transparent layers, default is 16\r\n */\r\n constructor(numLayers = 16) {\r\n super();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer = null;\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer = null;\r\n this._numLayers = numLayers;\r\n this._screenSize = new Uint32Array([0xffffffff, 0xffffffff]);\r\n this._hash = null;\r\n this._debug = false;\r\n this._scissorSlices = 0;\r\n this._scissorHeight = 0;\r\n this._savedScissor = null;\r\n this._currentPass = 0;\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return ABufferOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(deviceType: string) {\r\n return deviceType === 'webgpu';\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return ABufferOIT.usePremultipliedAlpha;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(ctx: DrawContext) {\r\n const device = ctx.device;\r\n this._savedScissor = device.getScissor();\r\n const ubAlignment = (ABufferOIT._ubAlignment =\r\n device.getDeviceCaps().shaderCaps.uniformBufferOffsetAlignment);\r\n const viewport = device.getViewport();\r\n const screenWidth = device.screenXToDevice(viewport.width);\r\n const screenHeight = device.screenYToDevice(Math.max(viewport.height, 1));\r\n if (screenWidth !== this._screenSize[0] || screenHeight !== this._screenSize[1]) {\r\n // Resize buffers if viewport was changed\r\n this._screenSize[0] = screenWidth;\r\n this._screenSize[1] = screenHeight;\r\n // compute scissor slices\r\n const maxBufferSize = device.getDeviceCaps().shaderCaps.maxStorageBufferSize;\r\n const bytesPerLine = screenWidth * 4 * 4 * this._numLayers;\r\n this._scissorHeight = (maxBufferSize / bytesPerLine) >> 0;\r\n this._scissorSlices = Math.ceil(screenHeight / this._scissorHeight);\r\n const offsetBufferSize = ubAlignment * this._scissorSlices;\r\n const offsetBuffer = new Uint32Array(offsetBufferSize >> 2);\r\n for (let i = 0; i < this._scissorSlices; i++) {\r\n offsetBuffer[i * (ubAlignment >> 2)] = i * this._scissorHeight;\r\n }\r\n if (!this._scissorOffsetBuffer || this._scissorOffsetBuffer.byteLength < offsetBuffer.byteLength) {\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = device.createBuffer(offsetBuffer.byteLength, { usage: 'uniform' });\r\n }\r\n this._scissorOffsetBuffer.bufferSubData(0, offsetBuffer);\r\n // resize node buffer\r\n const size = screenWidth * this._scissorHeight * 4;\r\n const nodeBufferSize = size * 4 * this._numLayers;\r\n if (!this._nodeBuffer || nodeBufferSize > this._nodeBuffer.byteLength) {\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = device.createBuffer(nodeBufferSize, { storage: true, usage: 'uniform' });\r\n }\r\n // resize head buffer\r\n const headBufferSize = size + 4;\r\n if (!this._headBuffer || headBufferSize > this._headBuffer.byteLength) {\r\n this._headBuffer?.dispose();\r\n this._headBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n const tmpArray = new Uint32Array(headBufferSize >> 2);\r\n tmpArray.fill(0xffffffff);\r\n this._headStagingBuffer.bufferSubData(0, tmpArray);\r\n }\r\n }\r\n return this._scissorSlices;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(ctx: DrawContext) {\r\n // Restore scissor rect\r\n ctx.device.setScissor(this._savedScissor);\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.Z_AB_scissorOffset = pb.uint().uniformBuffer(2);\r\n scope.Z_AB_nodeBuffer = pb.uvec4[0]().storageBuffer(2);\r\n scope.Z_AB_headImage = pb.atomic_uint[0]().storageBuffer(2);\r\n scope.Z_AB_screenSize = pb.uint().uniform(2);\r\n scope.Z_AB_depthTexture = pb.tex2D().uniform(2);\r\n scope.$outputs.outColor = pb.vec4();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, pass: number) {\r\n this._currentPass = pass;\r\n const device = ctx.device;\r\n const scissorY = pass * this._scissorHeight;\r\n const scissorH =\r\n Math.min((pass + 1) * this._scissorHeight, this._screenSize[1]) - pass * this._scissorHeight;\r\n device.setScissor([\r\n 0,\r\n device.deviceYToScreen(this._screenSize[1] - scissorY - scissorH),\r\n device.deviceXToScreen(this._screenSize[0]),\r\n device.deviceYToScreen(scissorH)\r\n ]);\r\n device.copyBuffer(this._headStagingBuffer!, this._headBuffer!, 0, 0, this._headStagingBuffer!.byteLength);\r\n // Update render hash\r\n this._hash = `${this.getType()}#${this._nodeBuffer!.uid}#${this._headBuffer!.uid}#${\r\n this._scissorOffsetBuffer!.uid\r\n }#${pass}`;\r\n if (this._debug) {\r\n const data = new Uint8Array(this._headBuffer!.byteLength);\r\n const readBuffer = device.createBuffer(this._headBuffer!.byteLength, { usage: 'read' });\r\n device.copyBuffer(this._headBuffer!, readBuffer, 0, 0, this._headBuffer!.byteLength);\r\n readBuffer.getBufferSubData(data).then(() => {\r\n const uint = new Uint32Array(data.buffer);\r\n for (let i = 0; i < uint.length; i++) {\r\n if (uint[i] !== 0) {\r\n console.error('Clear head buffer failed');\r\n break;\r\n }\r\n }\r\n readBuffer.dispose();\r\n });\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, pass: number) {\r\n const device = ctx.device;\r\n ABufferOIT.getCompositeProgram(device);\r\n const lastBindGroup = device.getBindGroup(0);\r\n device.setProgram(ABufferOIT.getCompositeProgram(device));\r\n const bindGroup = ABufferOIT._compositeBindGroup!;\r\n bindGroup.setBuffer(\r\n 'scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n pass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('headBuffer', this._headBuffer!);\r\n bindGroup.setBuffer('nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setValue('screenWidth', this._screenSize[0]);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(ABufferOIT._compositeRenderStates!);\r\n device.setBindGroup(0, lastBindGroup[0], lastBindGroup[1]);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this._hash!;\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(ctx: DrawContext, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('Z_AB_nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setBuffer(\r\n 'Z_AB_scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n this._currentPass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('Z_AB_headImage', this._headBuffer!);\r\n bindGroup.setValue('Z_AB_screenSize', this._screenSize[0]);\r\n bindGroup.setTexture('Z_AB_depthTexture', ctx.linearDepthTexture!);\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n // linear depth of current fragment\r\n scope.$l.fragDepth = ShaderHelper.nonLinearDepthToLinearNormalized(scope, scope.$builtins.fragCoord.z);\r\n // linear depth in depth texture\r\n scope.$l.linearDepth = pb.textureLoad(\r\n scope.Z_AB_depthTexture,\r\n pb.ivec2(scope.$builtins.fragCoord.xy),\r\n 0\r\n ).r;\r\n // saved to buffer only if nothing is infront\r\n scope.$if(pb.lessThan(scope.fragDepth, scope.linearDepth), function () {\r\n this.$l.Z_AB_pixelCount = pb.atomicAdd(this.Z_AB_headImage.at(0), 1);\r\n this.$l.Z_AB_nodeOffset = this.Z_AB_pixelCount;\r\n // save if index not exceeded\r\n this.$if(pb.lessThan(this.Z_AB_nodeOffset, pb.arrayLength(this.Z_AB_nodeBuffer)), function () {\r\n this.$l.Z_AB_headOffset = pb.add(\r\n pb.mul(this.Z_AB_screenSize, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.Z_AB_scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n this.$l.Z_AB_oldHead = pb.atomicExchange(\r\n this.Z_AB_headImage.at(pb.add(this.Z_AB_headOffset, 1)),\r\n this.Z_AB_nodeOffset\r\n );\r\n this.$l.Z_AB_colorScale = pb.floatBitsToUint(pb.length(color.rgb));\r\n this.$l.Z_AB_color = pb.pack4x8unorm(pb.vec4(pb.normalize(color.rgb), pb.clamp(color.a, 0, 1)));\r\n this.$l.Z_AB_depth = pb.floatBitsToUint(this.fragDepth);\r\n this.Z_AB_nodeBuffer.setAt(\r\n this.Z_AB_nodeOffset,\r\n pb.uvec4(this.Z_AB_color, this.Z_AB_colorScale, this.Z_AB_depth, this.Z_AB_oldHead)\r\n );\r\n pb.discard();\r\n });\r\n });\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const stencilStates = rs.useStencilState();\r\n stencilStates.enable(true);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(1);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.scissorOffset = pb.uint().uniformBuffer(0);\r\n this.headBuffer = pb.uint[0]().storageBuffer(0);\r\n this.nodeBuffer = pb.uvec4[0]().storageBuffer(0);\r\n this.screenWidth = pb.uint().uniform(0);\r\n pb.func('unpackColor', [pb.uvec4('x')], function () {\r\n this.$l.colorNorm = pb.unpack4x8unorm(this.x.x);\r\n this.$l.colorScale = pb.uintBitsToFloat(this.x.y);\r\n this.$return(pb.vec4(pb.mul(this.colorNorm.rgb, this.colorScale), this.colorNorm.a));\r\n });\r\n pb.main(function () {\r\n this.$l.fragmentArray = pb.uvec4[ABufferOIT.MAX_FRAGMENT_LAYERS]();\r\n this.$l.fragmentArrayLen = pb.uint(0);\r\n this.$l.offset = pb.add(\r\n pb.mul(this.screenWidth, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n //this.$l.head = this.headBuffer.at(this.offset);\r\n this.$l.head = this.headBuffer.at(pb.add(this.offset, 1));\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.fragmentArrayLen, ABufferOIT.MAX_FRAGMENT_LAYERS),\r\n pb.notEqual(this.head, 0xffffffff)\r\n ),\r\n function () {\r\n this.fragmentArray.setAt(this.fragmentArrayLen, this.nodeBuffer.at(this.head));\r\n this.head = this.fragmentArray.at(this.fragmentArrayLen).w;\r\n this.fragmentArrayLen = pb.add(this.fragmentArrayLen, 1);\r\n }\r\n );\r\n this.$if(pb.equal(this.fragmentArrayLen, 0), function () {\r\n this.$outputs.outColor = pb.vec4(0, 0, 0, 1);\r\n }).$else(function () {\r\n // bubble sort\r\n this.$for(pb.uint('i'), 0, pb.sub(this.fragmentArrayLen, 1), function () {\r\n this.$for(pb.uint('j'), 0, pb.sub(pb.sub(this.fragmentArrayLen, 1), this.i), function () {\r\n this.$l.a = this.fragmentArray.at(this.j);\r\n this.$l.b = this.fragmentArray.at(pb.add(this.j, 1));\r\n this.$if(pb.greaterThan(this.a.z, this.b.z), function () {\r\n this.fragmentArray.setAt(this.j, this.b);\r\n this.fragmentArray.setAt(pb.add(this.j, 1), this.a);\r\n });\r\n });\r\n });\r\n // under operator blending\r\n this.$l.c0 = this.unpackColor(this.fragmentArray[0]);\r\n this.$l.c_dst = ABufferOIT.usePremultipliedAlpha ? this.c0.rgb : pb.mul(this.c0.rgb, this.c0.a);\r\n this.$l.a_dst = pb.sub(1, this.c0.a);\r\n this.$for(pb.uint('i'), 1, this.fragmentArrayLen, function () {\r\n this.$l.c = this.unpackColor(this.fragmentArray.at(this.i));\r\n if (ABufferOIT.usePremultipliedAlpha) {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.a_dst));\r\n } else {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.c.a, this.a_dst));\r\n }\r\n this.a_dst = pb.mul(this.a_dst, pb.sub(1, this.c.a));\r\n });\r\n this.$outputs.outColor = pb.vec4(this.c_dst, this.a_dst);\r\n });\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@ABufferOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n const stencilStates = this._compositeRenderStates.useStencilState();\r\n stencilStates.enable(false);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(0);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n return this._compositeProgram;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = null;\r\n this._headBuffer?.dispose();\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = null;\r\n this._hash = null;\r\n this._savedScissor = null;\r\n }\r\n}\r\n"],"names":["ABufferOIT","Disposable","type","usePremultipliedAlpha","MAX_FRAGMENT_LAYERS","_compositeProgram","_compositeBindGroup","_compositeRenderStates","_ubAlignment","_nodeBuffer","_headStagingBuffer","_headBuffer","_scissorOffsetBuffer","_numLayers","_screenSize","_hash","_debug","_scissorSlices","_scissorHeight","_currentPass","_savedScissor","numLayers","Uint32Array","getType","supportDevice","deviceType","wantsPremultipliedAlpha","begin","ctx","device","getScissor","ubAlignment","getDeviceCaps","shaderCaps","uniformBufferOffsetAlignment","viewport","getViewport","screenWidth","screenXToDevice","width","screenHeight","screenYToDevice","Math","max","height","maxBufferSize","maxStorageBufferSize","bytesPerLine","ceil","offsetBufferSize","offsetBuffer","i","byteLength","dispose","createBuffer","usage","bufferSubData","size","nodeBufferSize","storage","headBufferSize","tmpArray","fill","end","setScissor","setupFragmentOutput","scope","pb","$builder","Z_AB_scissorOffset","uint","uniformBuffer","Z_AB_nodeBuffer","uvec4","storageBuffer","Z_AB_headImage","atomic_uint","Z_AB_screenSize","uniform","Z_AB_depthTexture","tex2D","$outputs","outColor","vec4","beginPass","pass","scissorY","scissorH","min","deviceYToScreen","deviceXToScreen","copyBuffer","uid","data","Uint8Array","readBuffer","getBufferSubData","then","buffer","length","console","error","endPass","getCompositeProgram","lastBindGroup","getBindGroup","setProgram","bindGroup","setBuffer","setValue","setBindGroup","drawFullscreenQuad","calculateHash","applyUniforms","setTexture","linearDepthTexture","outputFragmentColor","color","$l","fragDepth","ShaderHelper","nonLinearDepthToLinearNormalized","$builtins","fragCoord","z","linearDepth","textureLoad","ivec2","xy","r","$if","lessThan","Z_AB_pixelCount","atomicAdd","at","Z_AB_nodeOffset","arrayLength","Z_AB_headOffset","add","mul","sub","y","x","Z_AB_oldHead","atomicExchange","Z_AB_colorScale","floatBitsToUint","rgb","Z_AB_color","pack4x8unorm","normalize","clamp","a","Z_AB_depth","setAt","discard","setRenderStates","rs","stencilStates","useStencilState","enable","setFrontCompareFunc","setBackCompareFunc","setFrontOp","setBackOp","setReference","setReadMask","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","neg","fragment","scissorOffset","headBuffer","nodeBuffer","func","colorNorm","unpack4x8unorm","colorScale","uintBitsToFloat","$return","fragmentArray","fragmentArrayLen","offset","head","$while","and","notEqual","w","equal","$else","$for","j","b","greaterThan","c0","unpackColor","c_dst","a_dst","c","name","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","onDispose"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"abuffer_oit.js","sources":["../../src/render/abuffer_oit.ts"],"sourcesContent":["import type {\r\n AbstractDevice,\r\n BindGroup,\r\n DeviceViewport,\r\n GPUDataBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet\r\n} from '@zephyr3d/device';\r\nimport type { OIT } from './oit';\r\nimport type { DrawContext } from './drawable';\r\nimport { drawFullscreenQuad } from './fullscreenquad';\r\nimport { ShaderHelper } from '../material';\r\nimport type { Nullable } from '@zephyr3d/base';\r\nimport { Disposable } from '@zephyr3d/base';\r\n\r\n/**\r\n * per-pixel linked list OIT renderer using ABuffer.\r\n *\r\n * @remarks\r\n * The ABuffer OIT renderer only supports WebGPU device.\r\n *\r\n * @public\r\n */\r\nexport class ABufferOIT extends Disposable implements OIT {\r\n /** Type name of ABufferOIT */\r\n public static readonly type = 'ab';\r\n public static readonly usePremultipliedAlpha = true;\r\n private static readonly MAX_FRAGMENT_LAYERS = 75;\r\n private static _compositeProgram: Nullable<GPUProgram> = null;\r\n private static _compositeBindGroup: Nullable<BindGroup> = null;\r\n private static _compositeRenderStates: Nullable<RenderStateSet> = null;\r\n private static _ubAlignment = 0;\r\n private _nodeBuffer: Nullable<GPUDataBuffer>;\r\n private _headStagingBuffer: Nullable<GPUDataBuffer>;\r\n private _headBuffer: Nullable<GPUDataBuffer>;\r\n private _scissorOffsetBuffer: Nullable<GPUDataBuffer>;\r\n private readonly _numLayers: number;\r\n private _screenSize: Uint32Array<ArrayBuffer>;\r\n private _hash: Nullable<string>;\r\n private readonly _debug: boolean;\r\n private _scissorSlices: number;\r\n private _scissorHeight: number;\r\n private _currentPass: number;\r\n private _savedScissor: Nullable<DeviceViewport>;\r\n /**\r\n * Creates an instance of ABufferOIT class\r\n *\r\n * @param numLayers - How many transparent layers, default is 16\r\n */\r\n constructor(numLayers = 16) {\r\n super();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer = null;\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer = null;\r\n this._numLayers = numLayers;\r\n this._screenSize = new Uint32Array([0xffffffff, 0xffffffff]);\r\n this._hash = null;\r\n this._debug = false;\r\n this._scissorSlices = 0;\r\n this._scissorHeight = 0;\r\n this._savedScissor = null;\r\n this._currentPass = 0;\r\n }\r\n /**\r\n * {@inheritDoc OIT.getType}\r\n */\r\n getType() {\r\n return ABufferOIT.type;\r\n }\r\n /**\r\n * {@inheritDoc OIT.supportDevice}\r\n */\r\n supportDevice(deviceType: string) {\r\n return deviceType === 'webgpu';\r\n }\r\n /**\r\n * {@inheritDoc OIT.wantsPremultipliedAlpha}\r\n */\r\n wantsPremultipliedAlpha() {\r\n return ABufferOIT.usePremultipliedAlpha;\r\n }\r\n /**\r\n * {@inheritDoc OIT.begin}\r\n */\r\n begin(ctx: DrawContext) {\r\n const device = ctx.device;\r\n this._savedScissor = device.getScissor();\r\n const ubAlignment = (ABufferOIT._ubAlignment =\r\n device.getDeviceCaps().shaderCaps.uniformBufferOffsetAlignment);\r\n const viewport = device.getViewport();\r\n const screenWidth = device.screenXToDevice(viewport.width);\r\n const screenHeight = device.screenYToDevice(Math.max(viewport.height, 1));\r\n if (screenWidth !== this._screenSize[0] || screenHeight !== this._screenSize[1]) {\r\n // Resize buffers if viewport was changed\r\n this._screenSize[0] = screenWidth;\r\n this._screenSize[1] = screenHeight;\r\n // compute scissor slices\r\n const maxBufferSize = device.getDeviceCaps().shaderCaps.maxStorageBufferSize;\r\n const bytesPerLine = screenWidth * 4 * 4 * this._numLayers;\r\n this._scissorHeight = (maxBufferSize / bytesPerLine) >> 0;\r\n this._scissorSlices = Math.ceil(screenHeight / this._scissorHeight);\r\n const offsetBufferSize = ubAlignment * this._scissorSlices;\r\n const offsetBuffer = new Uint32Array(offsetBufferSize >> 2);\r\n for (let i = 0; i < this._scissorSlices; i++) {\r\n offsetBuffer[i * (ubAlignment >> 2)] = i * this._scissorHeight;\r\n }\r\n if (!this._scissorOffsetBuffer || this._scissorOffsetBuffer.byteLength < offsetBuffer.byteLength) {\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = device.createBuffer(offsetBuffer.byteLength, { usage: 'uniform' });\r\n }\r\n this._scissorOffsetBuffer.bufferSubData(0, offsetBuffer);\r\n // resize node buffer\r\n const size = screenWidth * this._scissorHeight * 4;\r\n const nodeBufferSize = size * 4 * this._numLayers;\r\n if (!this._nodeBuffer || nodeBufferSize > this._nodeBuffer.byteLength) {\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = device.createBuffer(nodeBufferSize, { storage: true, usage: 'uniform' });\r\n }\r\n // resize head buffer\r\n const headBufferSize = size + 4;\r\n if (!this._headBuffer || headBufferSize > this._headBuffer.byteLength) {\r\n this._headBuffer?.dispose();\r\n this._headBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = device.createBuffer(headBufferSize, { storage: true, usage: 'uniform' });\r\n const tmpArray = new Uint32Array(headBufferSize >> 2);\r\n tmpArray.fill(0xffffffff);\r\n this._headStagingBuffer.bufferSubData(0, tmpArray);\r\n }\r\n }\r\n return this._scissorSlices;\r\n }\r\n /**\r\n * {@inheritDoc OIT.end}\r\n */\r\n end(ctx: DrawContext) {\r\n // Restore scissor rect\r\n ctx.device.setScissor(this._savedScissor);\r\n }\r\n /**\r\n * {@inheritDoc OIT.setupFragmentOutput}\r\n */\r\n setupFragmentOutput(scope: PBGlobalScope) {\r\n const pb = scope.$builder;\r\n scope.Z_AB_scissorOffset = pb.uint().uniformBuffer(2);\r\n scope.Z_AB_nodeBuffer = pb.uvec4[0]().storageBuffer(2);\r\n scope.Z_AB_headImage = pb.atomic_uint[0]().storageBuffer(2);\r\n scope.Z_AB_screenSize = pb.uint().uniform(2);\r\n scope.Z_AB_depthTexture = pb.tex2D().uniform(2);\r\n scope.$outputs.outColor = pb.vec4();\r\n }\r\n /**\r\n * {@inheritDoc OIT.beginPass}\r\n */\r\n beginPass(ctx: DrawContext, pass: number) {\r\n this._currentPass = pass;\r\n const device = ctx.device;\r\n const scissorY = pass * this._scissorHeight;\r\n const scissorH =\r\n Math.min((pass + 1) * this._scissorHeight, this._screenSize[1]) - pass * this._scissorHeight;\r\n device.setScissor([\r\n 0,\r\n device.deviceYToScreen(this._screenSize[1] - scissorY - scissorH),\r\n device.deviceXToScreen(this._screenSize[0]),\r\n device.deviceYToScreen(scissorH)\r\n ]);\r\n device.copyBuffer(this._headStagingBuffer!, this._headBuffer!, 0, 0, this._headStagingBuffer!.byteLength);\r\n // Update render hash\r\n this._hash = `${this.getType()}#${this._nodeBuffer!.uid}#${this._headBuffer!.uid}#${\r\n this._scissorOffsetBuffer!.uid\r\n }#${pass}`;\r\n if (this._debug) {\r\n const data = new Uint8Array(this._headBuffer!.byteLength);\r\n const readBuffer = device.createBuffer(this._headBuffer!.byteLength, { usage: 'read' });\r\n device.copyBuffer(this._headBuffer!, readBuffer, 0, 0, this._headBuffer!.byteLength);\r\n readBuffer.getBufferSubData(data).then(() => {\r\n const uint = new Uint32Array(data.buffer);\r\n for (let i = 0; i < uint.length; i++) {\r\n if (uint[i] !== 0) {\r\n console.error('Clear head buffer failed');\r\n break;\r\n }\r\n }\r\n readBuffer.dispose();\r\n });\r\n }\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.endPass}\r\n */\r\n endPass(ctx: DrawContext, pass: number) {\r\n const device = ctx.device;\r\n ABufferOIT.getCompositeProgram(device);\r\n const lastBindGroup = device.getBindGroup(0);\r\n device.setProgram(ABufferOIT.getCompositeProgram(device));\r\n const bindGroup = ABufferOIT._compositeBindGroup!;\r\n bindGroup.setBuffer(\r\n 'scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n pass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('headBuffer', this._headBuffer!);\r\n bindGroup.setBuffer('nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setValue('screenWidth', this._screenSize[0]);\r\n device.setBindGroup(0, bindGroup);\r\n drawFullscreenQuad(ABufferOIT._compositeRenderStates!);\r\n device.setBindGroup(0, lastBindGroup[0], lastBindGroup[1]);\r\n }\r\n /**\r\n * {@inheritDoc OIT.calculateHash}\r\n */\r\n calculateHash() {\r\n return this._hash!;\r\n }\r\n /**\r\n * {@inheritDoc OIT.applyUniforms}\r\n */\r\n applyUniforms(ctx: DrawContext, bindGroup: BindGroup) {\r\n bindGroup.setBuffer('Z_AB_nodeBuffer', this._nodeBuffer!);\r\n bindGroup.setBuffer(\r\n 'Z_AB_scissorOffset',\r\n this._scissorOffsetBuffer!,\r\n 0,\r\n this._currentPass * ABufferOIT._ubAlignment,\r\n ABufferOIT._ubAlignment\r\n );\r\n bindGroup.setBuffer('Z_AB_headImage', this._headBuffer!);\r\n bindGroup.setValue('Z_AB_screenSize', this._screenSize[0]);\r\n bindGroup.setTexture('Z_AB_depthTexture', ctx.linearDepthTexture!);\r\n }\r\n /**\r\n * {@inheritDoc OIT.outputFragmentColor}\r\n */\r\n outputFragmentColor(scope: PBInsideFunctionScope, color: PBShaderExp) {\r\n const pb = scope.$builder;\r\n // linear depth of current fragment\r\n scope.$l.fragDepth = ShaderHelper.nonLinearDepthToLinearNormalized(scope, scope.$builtins.fragCoord.z);\r\n // linear depth in depth texture\r\n scope.$l.linearDepth = pb.textureLoad(\r\n scope.Z_AB_depthTexture,\r\n pb.ivec2(scope.$builtins.fragCoord.xy),\r\n 0\r\n ).r;\r\n // saved to buffer only if nothing is infront\r\n scope.$if(pb.lessThan(scope.fragDepth, scope.linearDepth), function () {\r\n this.$l.Z_AB_pixelCount = pb.atomicAdd(this.Z_AB_headImage.at(0), 1);\r\n this.$l.Z_AB_nodeOffset = this.Z_AB_pixelCount;\r\n // save if index not exceeded\r\n this.$if(pb.lessThan(this.Z_AB_nodeOffset, pb.arrayLength(this.Z_AB_nodeBuffer)), function () {\r\n this.$l.Z_AB_headOffset = pb.add(\r\n pb.mul(this.Z_AB_screenSize, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.Z_AB_scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n this.$l.Z_AB_oldHead = pb.atomicExchange(\r\n this.Z_AB_headImage.at(pb.add(this.Z_AB_headOffset, 1)),\r\n this.Z_AB_nodeOffset\r\n );\r\n this.$l.Z_AB_colorScale = pb.floatBitsToUint(pb.length(color.rgb));\r\n this.$l.Z_AB_color = pb.pack4x8unorm(pb.vec4(pb.normalize(color.rgb), pb.clamp(color.a, 0, 1)));\r\n this.$l.Z_AB_depth = pb.floatBitsToUint(this.fragDepth);\r\n this.Z_AB_nodeBuffer.setAt(\r\n this.Z_AB_nodeOffset,\r\n pb.uvec4(this.Z_AB_color, this.Z_AB_colorScale, this.Z_AB_depth, this.Z_AB_oldHead)\r\n );\r\n pb.discard();\r\n });\r\n });\r\n return true;\r\n }\r\n /**\r\n * {@inheritDoc OIT.setRenderStates}\r\n */\r\n setRenderStates(rs: RenderStateSet) {\r\n const stencilStates = rs.useStencilState();\r\n stencilStates.enable(true);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(1);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n /** @internal */\r\n private static getCompositeProgram(device: AbstractDevice) {\r\n if (!this._compositeProgram) {\r\n this._compositeProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec2().attrib('position');\r\n this.$outputs.uv = pb.vec2();\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.pos, 1, 1);\r\n this.$outputs.uv = pb.add(pb.mul(this.$inputs.pos.xy, 0.5), pb.vec2(0.5));\r\n if (device.type === 'webgpu') {\r\n this.$builtins.position.y = pb.neg(this.$builtins.position.y);\r\n }\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.scissorOffset = pb.uint().uniformBuffer(0);\r\n this.headBuffer = pb.uint[0]().storageBuffer(0);\r\n this.nodeBuffer = pb.uvec4[0]().storageBuffer(0);\r\n this.screenWidth = pb.uint().uniform(0);\r\n pb.func('unpackColor', [pb.uvec4('x')], function () {\r\n this.$l.colorNorm = pb.unpack4x8unorm(this.x.x);\r\n this.$l.colorScale = pb.uintBitsToFloat(this.x.y);\r\n this.$return(pb.vec4(pb.mul(this.colorNorm.rgb, this.colorScale), this.colorNorm.a));\r\n });\r\n pb.main(function () {\r\n this.$l.fragmentArray = pb.uvec4[ABufferOIT.MAX_FRAGMENT_LAYERS]();\r\n this.$l.fragmentArrayLen = pb.uint(0);\r\n this.$l.offset = pb.add(\r\n pb.mul(this.screenWidth, pb.sub(pb.uint(this.$builtins.fragCoord.y), this.scissorOffset)),\r\n pb.uint(this.$builtins.fragCoord.x)\r\n );\r\n //this.$l.head = this.headBuffer.at(this.offset);\r\n this.$l.head = this.headBuffer.at(pb.add(this.offset, 1));\r\n this.$while(\r\n pb.and(\r\n pb.lessThan(this.fragmentArrayLen, ABufferOIT.MAX_FRAGMENT_LAYERS),\r\n pb.notEqual(this.head, 0xffffffff)\r\n ),\r\n function () {\r\n this.fragmentArray.setAt(this.fragmentArrayLen, this.nodeBuffer.at(this.head));\r\n this.head = this.fragmentArray.at(this.fragmentArrayLen).w;\r\n this.fragmentArrayLen = pb.add(this.fragmentArrayLen, 1);\r\n }\r\n );\r\n this.$if(pb.equal(this.fragmentArrayLen, 0), function () {\r\n this.$outputs.outColor = pb.vec4(0, 0, 0, 1);\r\n }).$else(function () {\r\n // bubble sort\r\n this.$for(pb.uint('i'), 0, pb.sub(this.fragmentArrayLen, 1), function () {\r\n this.$for(pb.uint('j'), 0, pb.sub(pb.sub(this.fragmentArrayLen, 1), this.i), function () {\r\n this.$l.a = this.fragmentArray.at(this.j);\r\n this.$l.b = this.fragmentArray.at(pb.add(this.j, 1));\r\n this.$if(pb.greaterThan(this.a.z, this.b.z), function () {\r\n this.fragmentArray.setAt(this.j, this.b);\r\n this.fragmentArray.setAt(pb.add(this.j, 1), this.a);\r\n });\r\n });\r\n });\r\n // under operator blending\r\n this.$l.c0 = this.unpackColor(this.fragmentArray[0]);\r\n this.$l.c_dst = ABufferOIT.usePremultipliedAlpha ? this.c0.rgb : pb.mul(this.c0.rgb, this.c0.a);\r\n this.$l.a_dst = pb.sub(1, this.c0.a);\r\n this.$for(pb.uint('i'), 1, this.fragmentArrayLen, function () {\r\n this.$l.c = this.unpackColor(this.fragmentArray.at(this.i));\r\n if (ABufferOIT.usePremultipliedAlpha) {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.a_dst));\r\n } else {\r\n this.c_dst = pb.add(this.c_dst, pb.mul(this.c.rgb, this.c.a, this.a_dst));\r\n }\r\n this.a_dst = pb.mul(this.a_dst, pb.sub(1, this.c.a));\r\n });\r\n this.$outputs.outColor = pb.vec4(this.c_dst, this.a_dst);\r\n });\r\n });\r\n }\r\n })!;\r\n this._compositeProgram.name = '@ABufferOIT_Composite';\r\n this._compositeBindGroup = device.createBindGroup(this._compositeProgram.bindGroupLayouts[0]);\r\n this._compositeRenderStates = device.createRenderStateSet();\r\n this._compositeRenderStates\r\n .useBlendingState()\r\n .enable(true)\r\n .setBlendFuncRGB('one', 'src-alpha')\r\n .setBlendFuncAlpha('zero', 'one');\r\n this._compositeRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n const stencilStates = this._compositeRenderStates.useStencilState();\r\n stencilStates.enable(false);\r\n stencilStates.setFrontCompareFunc('always');\r\n stencilStates.setBackCompareFunc('always');\r\n stencilStates.setFrontOp('keep', 'keep', 'replace');\r\n stencilStates.setBackOp('keep', 'keep', 'replace');\r\n stencilStates.setReference(0);\r\n stencilStates.setReadMask(0xff);\r\n }\r\n return this._compositeProgram;\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this._nodeBuffer?.dispose();\r\n this._nodeBuffer = null;\r\n this._headStagingBuffer?.dispose();\r\n this._headStagingBuffer = null;\r\n this._headBuffer?.dispose();\r\n this._headBuffer = null;\r\n this._scissorOffsetBuffer?.dispose();\r\n this._scissorOffsetBuffer = null;\r\n this._hash = null;\r\n this._savedScissor = null;\r\n }\r\n}\r\n"],"names":["ABufferOIT","Disposable","type","usePremultipliedAlpha","MAX_FRAGMENT_LAYERS","_compositeProgram","_compositeBindGroup","_compositeRenderStates","_ubAlignment","_nodeBuffer","_headStagingBuffer","_headBuffer","_scissorOffsetBuffer","_numLayers","_screenSize","_hash","_debug","_scissorSlices","_scissorHeight","_currentPass","_savedScissor","numLayers","Uint32Array","getType","supportDevice","deviceType","wantsPremultipliedAlpha","begin","ctx","device","getScissor","ubAlignment","getDeviceCaps","shaderCaps","uniformBufferOffsetAlignment","viewport","getViewport","screenWidth","screenXToDevice","width","screenHeight","screenYToDevice","Math","max","height","maxBufferSize","maxStorageBufferSize","bytesPerLine","ceil","offsetBufferSize","offsetBuffer","i","byteLength","dispose","createBuffer","usage","bufferSubData","size","nodeBufferSize","storage","headBufferSize","tmpArray","fill","end","setScissor","setupFragmentOutput","scope","pb","$builder","Z_AB_scissorOffset","uint","uniformBuffer","Z_AB_nodeBuffer","uvec4","storageBuffer","Z_AB_headImage","atomic_uint","Z_AB_screenSize","uniform","Z_AB_depthTexture","tex2D","$outputs","outColor","vec4","beginPass","pass","scissorY","scissorH","min","deviceYToScreen","deviceXToScreen","copyBuffer","uid","data","Uint8Array","readBuffer","getBufferSubData","then","buffer","length","console","error","endPass","getCompositeProgram","lastBindGroup","getBindGroup","setProgram","bindGroup","setBuffer","setValue","setBindGroup","drawFullscreenQuad","calculateHash","applyUniforms","setTexture","linearDepthTexture","outputFragmentColor","color","$l","fragDepth","ShaderHelper","nonLinearDepthToLinearNormalized","$builtins","fragCoord","z","linearDepth","textureLoad","ivec2","xy","r","$if","lessThan","Z_AB_pixelCount","atomicAdd","at","Z_AB_nodeOffset","arrayLength","Z_AB_headOffset","add","mul","sub","y","x","Z_AB_oldHead","atomicExchange","Z_AB_colorScale","floatBitsToUint","rgb","Z_AB_color","pack4x8unorm","normalize","clamp","a","Z_AB_depth","setAt","discard","setRenderStates","rs","stencilStates","useStencilState","enable","setFrontCompareFunc","setBackCompareFunc","setFrontOp","setBackOp","setReference","setReadMask","buildRenderProgram","vertex","$inputs","pos","vec2","attrib","uv","main","position","neg","fragment","scissorOffset","headBuffer","nodeBuffer","func","colorNorm","unpack4x8unorm","colorScale","uintBitsToFloat","$return","fragmentArray","fragmentArrayLen","offset","head","$while","and","notEqual","w","equal","$else","$for","j","b","greaterThan","c0","unpackColor","c_dst","a_dst","c","name","createBindGroup","bindGroupLayouts","createRenderStateSet","useBlendingState","setBlendFuncRGB","setBlendFuncAlpha","useDepthState","enableTest","enableWrite","onDispose"],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Vector4 } from '@zephyr3d/base';
|
|
2
|
-
import { MAX_CLUSTERED_LIGHTS } from '../values.js';
|
|
3
2
|
import { ShaderHelper } from '../material/shader/helper.js';
|
|
4
3
|
import { getDevice } from '../app/api.js';
|
|
5
4
|
|
|
@@ -22,7 +21,7 @@ class ClusteredLight {
|
|
|
22
21
|
this._tileCountX = 16;
|
|
23
22
|
this._tileCountY = 16;
|
|
24
23
|
this._tileCountZ = 32;
|
|
25
|
-
this._lights = new Float32Array(16 * (
|
|
24
|
+
this._lights = new Float32Array(16 * (ShaderHelper.getMaxClusteredLightCount() + 1));
|
|
26
25
|
this._lightIndexTexture = null;
|
|
27
26
|
this._lightIndexFramebuffer = null;
|
|
28
27
|
this._lightIndexProgram = null;
|
|
@@ -91,7 +90,7 @@ class ClusteredLight {
|
|
|
91
90
|
this.viewMatrix = pb.mat4().uniform(0);
|
|
92
91
|
this.sizeParam = pb.vec4().uniform(0);
|
|
93
92
|
this.countParam = pb.ivec4().uniform(0);
|
|
94
|
-
this[ShaderHelper.getLightBufferUniformName()] = pb.vec4[(
|
|
93
|
+
this[ShaderHelper.getLightBufferUniformName()] = pb.vec4[(ShaderHelper.getMaxClusteredLightCount() + 1) * 4]().uniformBuffer(0);
|
|
95
94
|
pb.func('lineIntersectionToZPlane', [
|
|
96
95
|
pb.vec3('a'),
|
|
97
96
|
pb.vec3('b'),
|
|
@@ -320,7 +319,7 @@ class ClusteredLight {
|
|
|
320
319
|
device.popDeviceStates();
|
|
321
320
|
}
|
|
322
321
|
getVisibleLights(renderQueue, lights) {
|
|
323
|
-
const numLights = Math.min(renderQueue.unshadowedLights.length,
|
|
322
|
+
const numLights = Math.min(renderQueue.unshadowedLights.length, ShaderHelper.getMaxClusteredLightCount());
|
|
324
323
|
for(let i = 1; i <= numLights; i++){
|
|
325
324
|
const light = renderQueue.unshadowedLights[i - 1];
|
|
326
325
|
const offset = i * 16;
|