@zephyr3d/scene 0.9.1 → 0.9.3
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 +2 -0
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/cloth/gpu_cloth_system.js +9 -1
- package/dist/animation/cloth/gpu_cloth_system.js.map +1 -1
- package/dist/animation/fixed_geometry_cache_track.js +5 -1
- package/dist/animation/fixed_geometry_cache_track.js.map +1 -1
- package/dist/animation/geometry_cache_utils.js +20 -4
- package/dist/animation/geometry_cache_utils.js.map +1 -1
- package/dist/animation/ik/ik_angle_constraint.js +2 -6
- package/dist/animation/ik/ik_angle_constraint.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/ik/two_bone_ik_solver.js +2 -6
- package/dist/animation/ik/two_bone_ik_solver.js.map +1 -1
- package/dist/animation/joint_dynamics/collision.js +60 -12
- package/dist/animation/joint_dynamics/collision.js.map +1 -1
- package/dist/animation/joint_dynamics/constraints.js +20 -4
- package/dist/animation/joint_dynamics/constraints.js.map +1 -1
- package/dist/animation/joint_dynamics/controller.js +94 -46
- 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/joint_dynamics/solver.js +21 -11
- package/dist/animation/joint_dynamics/solver.js.map +1 -1
- package/dist/animation/joint_dynamics/types.js +15 -3
- package/dist/animation/joint_dynamics/types.js.map +1 -1
- package/dist/animation/pca_geometry_cache_track.js +5 -1
- package/dist/animation/pca_geometry_cache_track.js.map +1 -1
- package/dist/animation/skeleton.js +2 -2
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/skeleton_modifier.js +2 -6
- package/dist/animation/skeleton_modifier.js.map +1 -1
- package/dist/animation/spring/spring_particle.js +4 -4
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +13 -40
- 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/app.js.map +1 -1
- package/dist/app/engine.js +1 -1
- package/dist/app/engine.js.map +1 -1
- package/dist/app/screen.js +4 -4
- package/dist/app/screen.js.map +1 -1
- package/dist/app/scriptingsystem.js +24 -1
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +22 -1
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +2 -2
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/model.js +60 -60
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +1 -1
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/orbit.js.map +1 -1
- package/dist/index.d.ts +795 -266
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/material/material.js +3 -1
- package/dist/material/material.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/shader/helper.js +281 -278
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +6 -6
- package/dist/material/sprite.js.map +1 -1
- package/dist/material/terrain-cm.js +2 -2
- package/dist/material/terrain-cm.js.map +1 -1
- 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/taa.js +31 -39
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/render/cluster_light.js +3 -4
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/drawable.js +5 -1
- package/dist/render/drawable.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js +29 -3
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +283 -33
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +338 -108
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/history_resource_manager.js +195 -115
- package/dist/render/rendergraph/history_resource_manager.js.map +1 -1
- package/dist/render/rendergraph/history_resources.js +10 -0
- package/dist/render/rendergraph/history_resources.js.map +1 -0
- package/dist/render/rendergraph/rendergraph.js +162 -35
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/types.js +25 -5
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/rendertarget.js +5 -1
- package/dist/render/rendertarget.js.map +1 -1
- package/dist/render/screenrendertarget.js +5 -1
- package/dist/render/screenrendertarget.js.map +1 -1
- package/dist/render/sky.js +4 -4
- package/dist/render/sky.js.map +1 -1
- package/dist/scene/basesprite.js +2 -2
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/graph_node.js +1 -1
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/mesh.js +81 -97
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/particlesys.js +1 -1
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene_node.js +228 -228
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/script_attachment.js +15 -3
- package/dist/scene/script_attachment.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +3 -3
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/box.js +1 -1
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/capsule.js +0 -3
- package/dist/shapes/capsule.js.map +1 -1
- package/dist/shapes/cylinder.js +0 -3
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +0 -3
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/tetrahedron.js +3 -9
- package/dist/shapes/tetrahedron.js.map +1 -1
- package/dist/shapes/torus.js +94 -66
- 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/utility/blueprint/material/common.js +7 -0
- package/dist/utility/blueprint/material/common.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +3 -3
- package/dist/utility/blueprint/material/inputs.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +4 -4
- package/dist/utility/blueprint/material/ir.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 +299 -268
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +45 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +53 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +10 -0
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/light.js +30 -0
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +63 -0
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +11 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/misc.js +2 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +19 -0
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +22 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +33 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/scene.js +39 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -1
- package/dist/utility/serialization/scene/script.js +2 -0
- package/dist/utility/serialization/scene/script.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +6 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +9 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +21 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js +5 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/values.js +49 -53
- package/dist/values.js.map +1 -1
- package/package.json +2 -2
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"water.js","sources":["../../../src/shaders/water.ts"],"sourcesContent":["// copy from: https://github.com/codeagent/webgl-ocean/\r\n\r\nimport type {\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n ProgramBuilder,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { Application } from '../app';\r\nimport type { WaveGenerator } from '../render/wavegenerator';\r\n\r\nfunction getFragCoord(scope: PBGlobalScope, useComputeShader: boolean) {\r\n return useComputeShader ? scope.$builtins.globalInvocationId.xy : scope.$builtins.fragCoord.xy;\r\n}\r\n\r\n/** @internal */\r\nexport type WaterVertexFunc = (\r\n this: WaterShaderImpl,\r\n scope: PBInsideFunctionScope,\r\n pos: PBShaderExp,\r\n xz: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n) => void;\r\n\r\n/** @internal */\r\nexport type WaterShadingFunc = (\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp,\r\n discardable: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n) => PBShaderExp;\r\n\r\n/** @internal */\r\nexport type WaterSetupUniformFunc = (this: WaterShaderImpl, scope: PBGlobalScope) => void;\r\n\r\n/** @internal */\r\nexport class WaterShaderImpl {\r\n private readonly _vertexFunc: WaterVertexFunc;\r\n private readonly _shadingFunc: WaterShadingFunc;\r\n private readonly _setupUniformsFunc: WaterSetupUniformFunc;\r\n constructor(\r\n setupUniformsFunc: WaterSetupUniformFunc,\r\n vertexFunc: WaterVertexFunc,\r\n shadingFunc: WaterShadingFunc\r\n ) {\r\n this._vertexFunc = vertexFunc;\r\n this._shadingFunc = shadingFunc;\r\n this._setupUniformsFunc = setupUniformsFunc;\r\n }\r\n setupUniforms(scope: PBGlobalScope): void {\r\n this._setupUniformsFunc?.call(this, scope);\r\n }\r\n vertex(scope: PBInsideFunctionScope, pos: PBShaderExp, xz: PBShaderExp, waveGenerator: WaveGenerator) {\r\n this._vertexFunc?.call(this, scope, pos, xz, waveGenerator);\r\n }\r\n getVertexNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, useComputeShader: boolean): PBShaderExp {\r\n const pb = scope.$builder;\r\n pb.func('getVertexNormal', [pb.vec2('xz')], function () {\r\n this.$l.uv0 = pb.div(this.xz, this.sizes.x);\r\n this.$l.uv1 = pb.div(this.xz, this.sizes.y);\r\n this.$l.uv2 = pb.div(this.xz, this.sizes.z);\r\n if (useComputeShader) {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 1, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 3, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 5, 0);\r\n } else {\r\n this.$l._sx_sz_dxdx_dzdz0 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz0, this.uv0, 0);\r\n this.$l._sx_sz_dxdx_dzdz1 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz1, this.uv1, 0);\r\n this.$l._sx_sz_dxdx_dzdz2 = pb.textureSampleLevel(this.sx_sz_dxdx_dzdz2, this.uv2, 0);\r\n }\r\n this.$l.sx = pb.add(this._sx_sz_dxdx_dzdz0.x, this._sx_sz_dxdx_dzdz1.x, this._sx_sz_dxdx_dzdz2.x);\r\n this.$l.sz = pb.add(this._sx_sz_dxdx_dzdz0.y, this._sx_sz_dxdx_dzdz1.y, this._sx_sz_dxdx_dzdz2.y);\r\n this.$l.dxdx_dzdz = pb.add(\r\n pb.mul(this._sx_sz_dxdx_dzdz0.zw, this.croppinesses.x),\r\n pb.mul(this._sx_sz_dxdx_dzdz1.zw, this.croppinesses.y),\r\n pb.mul(this._sx_sz_dxdx_dzdz2.zw, this.croppinesses.z)\r\n );\r\n this.$l.slope = pb.vec2(\r\n pb.div(this.sx, pb.add(1.0, this.dxdx_dzdz.x)),\r\n pb.div(this.sz, pb.add(1.0, this.dxdx_dzdz.y))\r\n );\r\n this.$l.normal = pb.normalize(pb.vec3(pb.neg(this.slope.x), 1.0, pb.neg(this.slope.y)));\r\n this.$return(this.normal);\r\n });\r\n return scope.getVertexNormal(xz);\r\n }\r\n shading(\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp,\r\n worldNormal: PBShaderExp,\r\n foamFactor: PBShaderExp,\r\n discardable: PBShaderExp,\r\n waveGenerator: WaveGenerator\r\n ): PBShaderExp {\r\n return this._shadingFunc?.call(\r\n this,\r\n scope,\r\n worldPos,\r\n worldNormal,\r\n foamFactor,\r\n discardable,\r\n waveGenerator\r\n );\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramOcean(waveGenerator: WaveGenerator, shadingImpl: WaterShaderImpl) {\r\n return Application.instance.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n this.$outputs.outPos = pb.vec3();\r\n this.$outputs.outNormal = pb.vec3();\r\n this.$outputs.outXZ = pb.vec2();\r\n this.flip = pb.int().uniform(0);\r\n this.viewProjMatrix = pb.mat4().uniform(0);\r\n this.worldMatrix = pb.mat4().uniform(1);\r\n this.level = pb.float().uniform(0);\r\n shadingImpl.setupUniforms(this);\r\n waveGenerator.setupUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.xz = pb.mul(this.worldMatrix, pb.vec4(this.$inputs.position, 1)).xy;\r\n /*\r\n this.$l.xz = pb.mul(\r\n pb.add(\r\n this.offset,\r\n pb.mul(pb.mul(this.modelMatrix, pb.vec4(this.$inputs.position, 1)).xy, this.scale)\r\n ),\r\n this.gridScale\r\n );\r\n */\r\n this.$l.outPos = pb.vec3();\r\n this.$l.outNormal = pb.vec3();\r\n waveGenerator.calcVertexPositionAndNormal(\r\n this,\r\n pb.vec3(this.xz.x, this.level, this.xz.y),\r\n this.outPos,\r\n this.outNormal\r\n );\r\n this.$outputs.outPos = this.outPos;\r\n this.$outputs.outNormal = this.outNormal;\r\n this.$outputs.outXZ = this.xz;\r\n this.$builtins.position = pb.mul(this.viewProjMatrix, pb.vec4(this.$outputs.outPos, 1));\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 shadingImpl.vertex(this, this.$outputs.outPos, this.$outputs.outXZ, waveGenerator);\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.outColor = pb.vec4();\r\n this.pos = pb.vec3().uniform(0);\r\n this.region = pb.vec4().uniform(0);\r\n shadingImpl.setupUniforms(this);\r\n waveGenerator.setupUniforms(this, 0);\r\n pb.main(function () {\r\n this.$l.discardable = pb.or(\r\n pb.any(pb.lessThan(this.$inputs.outXZ, this.region.xy)),\r\n pb.any(pb.greaterThan(this.$inputs.outXZ, this.region.zw))\r\n );\r\n this.$l.n = waveGenerator.calcFragmentNormalAndFoam(this, this.$inputs.outXZ, this.$inputs.outNormal);\r\n this.$outputs.outColor =\r\n shadingImpl.shading(\r\n this,\r\n this.$inputs.outPos,\r\n this.n.xyz,\r\n this.n.w,\r\n this.discardable,\r\n waveGenerator\r\n ) ?? pb.vec4(pb.add(pb.mul(this.n.xyz, 0.5), pb.vec3(0.5)), 1);\r\n });\r\n }\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramPostFFT2(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(\r\n useComputeShader: boolean,\r\n fmt: TextureFormat\r\n ): (this: PBGlobalScope, pb: ProgramBuilder) => void {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n this.N2 = pb.float().uniform(0);\r\n if (useComputeShader) {\r\n this.output =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n this.ifft = pb.tex2DArray().uniform(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.vec4();\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.vec4();\r\n this.ifft0 = pb.tex2D().uniform(0);\r\n this.ifft1 = pb.tex2D().uniform(0);\r\n this.ifft2 = pb.tex2D().uniform(0);\r\n this.ifft3 = pb.tex2D().uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.vec4();\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.vec4();\r\n this.ifft4 = pb.tex2D().uniform(0);\r\n this.ifft5 = pb.tex2D().uniform(0);\r\n }\r\n }\r\n if (pb.getDevice().type === 'webgl') {\r\n this.ifftTexSize = pb.vec2().uniform(0);\r\n }\r\n pb.main(function () {\r\n this.$l.fragPos = getFragCoord(this, useComputeShader);\r\n this.$l.p = pb.float(pb.add(this.fragPos.x, this.fragPos.y));\r\n this.$l.s = pb.sub(pb.mul(pb.sub(1, pb.mod(this.p, 2)), 2), 1);\r\n this.$l.m = pb.mul(this.s, this.N2);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.uv = pb.div(pb.vec2(this.fragPos), this.ifftTexSize);\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.mul(pb.textureSampleLevel(this.ifft0, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.mul(pb.textureSampleLevel(this.ifft1, this.uv, 0), this.m);\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.mul(pb.textureSampleLevel(this.ifft2, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.mul(pb.textureSampleLevel(this.ifft3, this.uv, 0), this.m);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.mul(pb.textureSampleLevel(this.ifft4, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.mul(pb.textureSampleLevel(this.ifft5, this.uv, 0), this.m);\r\n }\r\n } else if (useComputeShader) {\r\n this.$l.uv = pb.ivec2(this.fragPos);\r\n for (let i = 0; i < 6; i++) {\r\n pb.textureArrayStore(\r\n this.output,\r\n this.$builtins.globalInvocationId.xy,\r\n i,\r\n pb.mul(pb.textureArrayLoad(this.ifft, this.uv, i, 0), this.m)\r\n );\r\n }\r\n } else {\r\n this.$l.uv = pb.ivec2(this.fragPos);\r\n if (!limit || limit === 4) {\r\n this.$outputs.dx_hy_dz_dxdz0 = pb.mul(pb.textureLoad(this.ifft0, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz0 = pb.mul(pb.textureLoad(this.ifft1, this.uv, 0), this.m);\r\n this.$outputs.dx_hy_dz_dxdz1 = pb.mul(pb.textureLoad(this.ifft2, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz1 = pb.mul(pb.textureLoad(this.ifft3, this.uv, 0), this.m);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.dx_hy_dz_dxdz2 = pb.mul(pb.textureLoad(this.ifft4, this.uv, 0), this.m);\r\n this.$outputs.sx_sz_dxdx_dzdz2 = pb.mul(pb.textureLoad(this.ifft5, this.uv, 0), this.m);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n if (useComputeShader) {\r\n return Application.instance.device.buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n } else {\r\n return Application.instance.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramHk(\r\n useComputeShader = false,\r\n threadGroupSize = 8,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(\r\n useComputeShader = false,\r\n fmt: TextureFormat\r\n ): (this: PBGlobalScope, pb: ProgramBuilder) => void {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.spectrum0 = pb.vec4();\r\n this.$outputs.spectrum1 = pb.vec4();\r\n this.$outputs.spectrum2 = pb.vec4();\r\n this.$outputs.spectrum3 = pb.vec4();\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.spectrum4 = pb.vec4();\r\n this.$outputs.spectrum5 = pb.vec4();\r\n }\r\n }\r\n this.resolution = pb.int().uniform(0);\r\n this.sizes = pb.vec4().uniform(0);\r\n this.t = pb.float().uniform(0);\r\n if (useComputeShader) {\r\n this.h0Texture = pb.tex2DArray().uniform(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.h0Texture0 = pb.tex2D().uniform(0);\r\n this.h0Texture1 = pb.tex2D().uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.h0Texture2 = pb.tex2D().uniform(0);\r\n }\r\n }\r\n if (pb.getDevice().type === 'webgl') {\r\n this.h0TexSize = pb.vec2().uniform(0);\r\n }\r\n this.RATIO = pb.float(0.618033989036);\r\n this.g = pb.float(9.81);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n const Spectrum = pb.defineStruct(\r\n [\r\n Complex('dx'),\r\n Complex('hy'),\r\n Complex('dz'),\r\n Complex('sx'),\r\n Complex('sz'),\r\n Complex('dxdx'),\r\n Complex('dxdz'),\r\n Complex('dzdz')\r\n ],\r\n 'Spectrum'\r\n );\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n pb.func('eix', [pb.float('x')], function () {\r\n this.$return(Complex(pb.cos(this.x), pb.sin(this.x)));\r\n });\r\n pb.func('conj', [Complex('a')], function () {\r\n this.$return(Complex(this.a.re, pb.neg(this.a.im)));\r\n });\r\n pb.func('scale', [Complex('a'), pb.float('v')], function () {\r\n this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));\r\n });\r\n pb.func('negate', [Complex('a')], function () {\r\n this.$return(Complex(pb.neg(this.a.re), pb.neg(this.a.im)));\r\n });\r\n for (let x = 0; x <= 2; x++) {\r\n if (x < 2 && limit === 2) {\r\n continue;\r\n }\r\n if (x === 2 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`getSpectrum${x}`, [pb.vec2('x'), pb.float('size'), pb.ivec2('fragCoord')], function () {\r\n this.$l.hy = Complex(0, 0);\r\n this.$l.sx = Complex(0, 0);\r\n this.$l.sz = Complex(0, 0);\r\n this.$l.dx = Complex(0, 0);\r\n this.$l.dz = Complex(0, 0);\r\n this.$l.dxdx = Complex(0, 0);\r\n this.$l.dxdz = Complex(0, 0);\r\n this.$l.dzdz = Complex(0, 0);\r\n this.$if(pb.lessThanEqual(this.size, 1e-3), function () {\r\n this.$return(\r\n Spectrum(this.dx, this.hy, this.dz, this.sx, this.sz, this.dxdx, this.dxdz, this.dzdz)\r\n );\r\n });\r\n this.$l.k = pb.mul(this.x, pb.div(Math.PI * 2, this.size));\r\n this.$l.kLen = pb.length(this.k);\r\n this.$if(pb.greaterThan(this.kLen, 1e-6), function () {\r\n this.$l.w = pb.sqrt(pb.mul(this.kLen, this.g));\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.h0Texel = pb.textureSampleLevel(\r\n this[`h0Texture${x}`],\r\n pb.div(pb.vec2(this.fragCoord), this.h0TexSize),\r\n 0\r\n );\r\n } else if (useComputeShader) {\r\n this.$l.h0Texel = pb.textureArrayLoad(this.h0Texture, this.fragCoord, x, 0);\r\n } else {\r\n this.$l.h0Texel = pb.textureLoad(this[`h0Texture${x}`], this.fragCoord, 0);\r\n }\r\n this.$l.e = this.eix(pb.mul(this.w, this.t));\r\n this.$l.h0 = Complex(this.h0Texel.x, this.h0Texel.y);\r\n this.$l.h0MinConj = Complex(this.h0Texel.z, this.h0Texel.w);\r\n this.hy = this.add(this.mul(this.h0, this.e), this.mul(this.h0MinConj, this.conj(this.e)));\r\n this.$if(pb.notEqual(this.fragCoord.x, 0), function () {\r\n this.sx = this.mul(Complex(0, this.k.x), this.hy);\r\n this.dx = this.mul(Complex(0, pb.div(pb.neg(this.k.x), this.kLen)), this.hy);\r\n this.dxdx = this.scale(this.hy, pb.div(pb.mul(this.k.x, this.k.x), this.kLen));\r\n });\r\n this.$if(pb.notEqual(this.fragCoord.y, 0), function () {\r\n this.sz = this.mul(Complex(0, this.k.y), this.hy);\r\n this.dz = this.mul(Complex(0, pb.div(pb.neg(this.k.y), this.kLen)), this.hy);\r\n this.dzdz = this.scale(this.hy, pb.div(pb.mul(this.k.y, this.k.y), this.kLen));\r\n this.$if(pb.notEqual(this.fragCoord.x, 0), function () {\r\n this.dxdz = this.scale(this.hy, pb.div(pb.mul(this.k.x, this.k.y), this.kLen));\r\n });\r\n });\r\n });\r\n this.$return(\r\n Spectrum(this.dx, this.hy, this.dz, this.sx, this.sz, this.dxdx, this.dxdz, this.dzdz)\r\n );\r\n });\r\n }\r\n pb.func(\r\n 'compressSpectrum',\r\n [Spectrum('spec'), pb.vec4('part0').out(), pb.vec4('part1').out()],\r\n function () {\r\n this.$l.i = Complex(0, 1);\r\n this.$l.dx_hy = this.add(this.spec.dx, this.mul(this.i, this.spec.hy));\r\n this.$l.dz_dxdz = this.add(this.spec.dz, this.mul(this.i, this.spec.dxdz));\r\n this.$l.sx_sz = this.add(this.spec.sx, this.mul(this.i, this.spec.sz));\r\n this.$l.dxdx_dzdz = this.add(this.spec.dxdx, this.mul(this.i, this.spec.dzdz));\r\n this.part0 = pb.vec4(this.dx_hy.re, this.dx_hy.im, this.dz_dxdz.re, this.dz_dxdz.im);\r\n this.part1 = pb.vec4(this.sx_sz.re, this.sx_sz.im, this.dxdx_dzdz.re, this.dxdx_dzdz.im);\r\n }\r\n );\r\n pb.main(function () {\r\n this.fragXY = pb.ivec2(getFragCoord(this, useComputeShader));\r\n this.$l.x = pb.vec2(pb.sub(this.fragXY, pb.ivec2(pb.div(this.resolution, 2))));\r\n if (useComputeShader || !limit || limit === 4) {\r\n this.$l.s0 = pb.vec4();\r\n this.$l.s1 = pb.vec4();\r\n this.$l.s2 = pb.vec4();\r\n this.$l.s3 = pb.vec4();\r\n this.$l.spec0 = this.getSpectrum0(this.x, this.sizes.x, this.fragXY);\r\n this.$l.spec1 = this.getSpectrum1(this.x, this.sizes.y, this.fragXY);\r\n this.compressSpectrum(this.spec0, this.s0, this.s1);\r\n this.compressSpectrum(this.spec1, this.s2, this.s3);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 0, this.s0);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 1, this.s1);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 2, this.s2);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 3, this.s3);\r\n } else {\r\n this.$outputs.spectrum0 = this.s0;\r\n this.$outputs.spectrum1 = this.s1;\r\n this.$outputs.spectrum2 = this.s2;\r\n this.$outputs.spectrum3 = this.s3;\r\n }\r\n }\r\n if (useComputeShader || !limit || limit === 2) {\r\n this.$l.s4 = pb.vec4();\r\n this.$l.s5 = pb.vec4();\r\n this.$l.spec2 = this.getSpectrum2(this.x, this.sizes.z, this.fragXY);\r\n this.compressSpectrum(this.spec2, this.s4, this.s5);\r\n if (useComputeShader) {\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 4, this.s4);\r\n pb.textureArrayStore(this.spectrum, this.$builtins.globalInvocationId.xy, 5, this.s5);\r\n } else {\r\n this.$outputs.spectrum4 = this.s4;\r\n this.$outputs.spectrum5 = this.s5;\r\n }\r\n }\r\n });\r\n };\r\n }\r\n if (useComputeShader) {\r\n return Application.instance.device.buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n } else {\r\n return Application.instance.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramH0(\r\n useComputeShader = false,\r\n threadGroupSize = 8,\r\n targetFormat: TextureFormat = 'rgba32f'\r\n) {\r\n function getComputeFunc(\r\n useComputeShader = false,\r\n fmt: TextureFormat\r\n ): (this: PBGlobalScope, pb: ProgramBuilder) => void {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n this.$outputs.spectrum0 = pb.vec4();\r\n this.$outputs.spectrum1 = pb.vec4();\r\n this.$outputs.spectrum2 = pb.vec4();\r\n }\r\n this.noise = pb.tex2D().uniform(0);\r\n this.resolution = pb.int().uniform(0);\r\n this.wind = pb.vec2().uniform(0);\r\n this.alignment = pb.float().uniform(0);\r\n this.g = pb.float(9.81);\r\n this.cascade0 = pb.vec4().uniform(0);\r\n this.cascade1 = pb.vec4().uniform(0);\r\n this.cascade2 = pb.vec4().uniform(0);\r\n pb.func('gauss', [pb.ivec2('fragCoord')], function () {\r\n this.$l.uv = pb.div(pb.vec2(this.fragCoord), pb.float(this.resolution));\r\n this.$l.noise0 = pb.textureSampleLevel(this.noise, this.uv, 0).rg;\r\n this.$l.noise1 = pb.textureSampleLevel(this.noise, pb.neg(this.uv), 0).rg;\r\n this.$l.u0 = pb.mul(this.noise0.x, Math.PI * 2);\r\n this.$l.v0 = pb.sqrt(pb.mul(pb.log(this.noise0.y), -2));\r\n this.$l.u1 = pb.mul(this.noise1.x, Math.PI * 2);\r\n this.$l.v1 = pb.sqrt(pb.mul(pb.log(this.noise1.y), -2));\r\n this.$return(\r\n pb.vec4(\r\n pb.mul(this.v0, pb.cos(this.u0)),\r\n pb.mul(this.v0, pb.sin(this.u0)),\r\n pb.mul(this.v1, pb.cos(this.u1)),\r\n pb.mul(pb.neg(this.v1), pb.sin(this.u1))\r\n )\r\n );\r\n });\r\n pb.func('phillips', [pb.vec2('k'), pb.float('A'), pb.float('minK'), pb.float('maxK')], function () {\r\n this.$l.k2 = pb.dot(this.k, this.k);\r\n this.$if(\r\n pb.or(\r\n pb.lessThanEqual(this.k2, pb.mul(this.minK, this.minK)),\r\n pb.greaterThanEqual(this.k2, pb.mul(this.maxK, this.maxK))\r\n ),\r\n function () {\r\n this.$return(pb.vec4(0));\r\n }\r\n );\r\n this.$l.L = pb.div(pb.dot(this.wind, this.wind), this.g);\r\n this.$l.L2 = pb.mul(this.L, this.L);\r\n this.$l.h0k = pb.mul(\r\n pb.div(pb.div(this.A, this.k2), this.k2),\r\n pb.exp(pb.div(-1, pb.mul(this.k2, this.L2))),\r\n 0.5\r\n );\r\n this.$l.h0mk = this.h0k;\r\n this.$if(pb.greaterThan(this.alignment, 0), function () {\r\n this.h0k = pb.mul(\r\n this.h0k,\r\n pb.pow(pb.max(0, pb.dot(pb.normalize(this.wind), pb.normalize(this.k))), this.alignment)\r\n );\r\n this.h0mk = pb.mul(\r\n this.h0mk,\r\n pb.pow(pb.max(0, pb.dot(pb.normalize(this.wind), pb.normalize(pb.neg(this.k)))), this.alignment)\r\n );\r\n });\r\n this.$return(pb.sqrt(pb.vec4(this.h0k, this.h0k, this.h0mk, this.h0mk)));\r\n });\r\n pb.main(function () {\r\n this.$l.x = pb.vec2(\r\n pb.sub(pb.ivec2(getFragCoord(this, useComputeShader)), pb.ivec2(pb.div(this.resolution, 2)))\r\n );\r\n this.$l.k = pb.mul(pb.vec2(Math.PI * 2), this.x);\r\n this.$l.rnd = this.gauss(pb.ivec2(getFragCoord(this, useComputeShader)));\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n pb.mul(\r\n this.phillips(\r\n pb.div(this.k, this.cascade0.x),\r\n this.cascade0.y,\r\n this.cascade0.z,\r\n this.cascade0.w\r\n ),\r\n this.rnd\r\n )\r\n );\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n pb.mul(\r\n this.phillips(\r\n pb.div(this.k, this.cascade1.x),\r\n this.cascade1.y,\r\n this.cascade1.z,\r\n this.cascade1.w\r\n ),\r\n this.rnd\r\n )\r\n );\r\n pb.textureArrayStore(\r\n this.spectrum,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n pb.mul(\r\n this.phillips(\r\n pb.div(this.k, this.cascade2.x),\r\n this.cascade2.y,\r\n this.cascade2.z,\r\n this.cascade2.w\r\n ),\r\n this.rnd\r\n )\r\n );\r\n } else {\r\n this.$outputs.spectrum0 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade0.x), this.cascade0.y, this.cascade0.z, this.cascade0.w),\r\n this.rnd\r\n );\r\n this.$outputs.spectrum1 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade1.x), this.cascade1.y, this.cascade1.z, this.cascade1.w),\r\n this.rnd\r\n );\r\n this.$outputs.spectrum2 = pb.mul(\r\n this.phillips(pb.div(this.k, this.cascade2.x), this.cascade2.y, this.cascade2.z, this.cascade2.w),\r\n this.rnd\r\n );\r\n }\r\n });\r\n };\r\n }\r\n if (useComputeShader) {\r\n return Application.instance.device.buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n } else {\r\n return Application.instance.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramFFT2V(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(\r\n useComputeShader: boolean,\r\n fmt: TextureFormat\r\n ): (this: PBGlobalScope, pb: ProgramBuilder) => void {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum = pb.tex2DArray().sampleType('unfilterable-float').uniform(0);\r\n this.ifft =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = pb.vec4();\r\n this.$outputs.ifft1 = pb.vec4();\r\n this.$outputs.ifft2 = pb.vec4();\r\n this.$outputs.ifft3 = pb.vec4();\r\n this.spectrum0 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum1 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum2 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum3 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = pb.vec4();\r\n this.$outputs.ifft5 = pb.vec4();\r\n this.spectrum4 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum5 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n }\r\n this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.texSize = pb.vec4().uniform(0);\r\n }\r\n this.phase = pb.int().uniform(0);\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n pb.func('scale', [Complex('a'), pb.float('v')], function () {\r\n this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));\r\n });\r\n for (let x = 0; x <= 5; x++) {\r\n if (x < 4 && limit === 2) {\r\n continue;\r\n }\r\n if (x > 3 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`twiddle${x}`, [pb.vec4('texelButt'), pb.int('x')], function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelA = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(pb.float(this.x), this.texelButt.b), this.texSize.xy),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(pb.float(this.x), this.texelButt.a), this.texSize.xy),\r\n 0\r\n );\r\n } else if (useComputeShader) {\r\n this.$l.texelA = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(this.x, pb.int(this.texelButt.b)),\r\n x,\r\n 0\r\n );\r\n this.$l.texelB = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(this.x, pb.int(this.texelButt.a)),\r\n x,\r\n 0\r\n );\r\n } else {\r\n this.$l.texelA = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(this.x, pb.int(this.texelButt.b)),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(this.x, pb.int(this.texelButt.a)),\r\n 0\r\n );\r\n }\r\n this.$l.w = Complex(this.texelButt.r, this.texelButt.g);\r\n this.$l.a1 = Complex(this.texelA.x, this.texelA.y);\r\n this.$l.b1 = Complex(this.texelB.x, this.texelB.y);\r\n this.$l.r1 = this.scale(this.add(this.a1, this.mul(this.b1, this.w)), 0.5);\r\n this.$l.a2 = Complex(this.texelA.z, this.texelA.w);\r\n this.$l.b2 = Complex(this.texelB.z, this.texelB.w);\r\n this.$l.r2 = this.scale(this.add(this.a2, this.mul(this.b2, this.w)), 0.5);\r\n this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));\r\n });\r\n }\r\n pb.main(function () {\r\n this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);\r\n this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelButt = pb.textureSampleLevel(\r\n this.butterfly,\r\n pb.div(pb.vec2(pb.float(this.phase), pb.float(this.y)), this.texSize.zw),\r\n 0\r\n );\r\n } else {\r\n this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.y), 0);\r\n }\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n this.twiddle0(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n this.twiddle1(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n this.twiddle2(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 3,\r\n this.twiddle3(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 4,\r\n this.twiddle4(this.texelButt, this.x)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 5,\r\n this.twiddle5(this.texelButt, this.x)\r\n );\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = this.twiddle0(this.texelButt, this.x);\r\n this.$outputs.ifft1 = this.twiddle1(this.texelButt, this.x);\r\n this.$outputs.ifft2 = this.twiddle2(this.texelButt, this.x);\r\n this.$outputs.ifft3 = this.twiddle3(this.texelButt, this.x);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = this.twiddle4(this.texelButt, this.x);\r\n this.$outputs.ifft5 = this.twiddle5(this.texelButt, this.x);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n if (useComputeShader) {\r\n return Application.instance.device.buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n } else {\r\n return Application.instance.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createProgramFFT2H(\r\n useComputeShader = false,\r\n threadGroupSize: number,\r\n targetFormat: TextureFormat = 'rgba32f',\r\n limit?: 4 | 2\r\n) {\r\n function getComputeFunc(\r\n useComputeShader: boolean,\r\n fmt: TextureFormat\r\n ): (this: PBGlobalScope, pb: ProgramBuilder) => void {\r\n return function (this: PBGlobalScope, pb: ProgramBuilder) {\r\n if (useComputeShader) {\r\n this.spectrum = pb.tex2DArray().sampleType('unfilterable-float').uniform(0);\r\n this.ifft =\r\n fmt === 'rgba32f'\r\n ? pb.texStorage2DArray.rgba32float().storage(0)\r\n : pb.texStorage2DArray.rgba16float().storage(0);\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = pb.vec4();\r\n this.$outputs.ifft1 = pb.vec4();\r\n this.$outputs.ifft2 = pb.vec4();\r\n this.$outputs.ifft3 = pb.vec4();\r\n this.spectrum0 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum1 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum2 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum3 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = pb.vec4();\r\n this.$outputs.ifft5 = pb.vec4();\r\n this.spectrum4 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.spectrum5 = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n }\r\n }\r\n this.butterfly = pb.tex2D().sampleType('unfilterable-float').uniform(0);\r\n this.phase = pb.int().uniform(0);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.texSize = pb.vec4().uniform(0);\r\n }\r\n const Complex = pb.defineStruct([pb.float('re'), pb.float('im')], 'Complex');\r\n pb.func('add', [Complex('a'), Complex('b')], function () {\r\n this.$return(Complex(pb.add(this.a.re, this.b.re), pb.add(this.a.im, this.b.im)));\r\n });\r\n pb.func('mul', [Complex('a'), Complex('b')], function () {\r\n this.$return(\r\n Complex(\r\n pb.sub(pb.mul(this.a.re, this.b.re), pb.mul(this.a.im, this.b.im)),\r\n pb.add(pb.mul(this.a.re, this.b.im), pb.mul(this.a.im, this.b.re))\r\n )\r\n );\r\n });\r\n pb.func('scale', [Complex('a'), pb.float('v')], function () {\r\n this.$return(Complex(pb.mul(this.a.re, this.v), pb.mul(this.a.im, this.v)));\r\n });\r\n for (let x = 0; x <= 5; x++) {\r\n if (x < 4 && limit === 2) {\r\n continue;\r\n }\r\n if (x > 3 && limit === 4) {\r\n continue;\r\n }\r\n pb.func(`twiddle${x}`, [pb.vec4('texelButt'), pb.int('y')], function () {\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelA = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(this.texelButt.b, pb.float(this.y)), this.texSize.xy),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureSampleLevel(\r\n this[`spectrum${x}`],\r\n pb.div(pb.vec2(this.texelButt.a, pb.float(this.y)), this.texSize.xy),\r\n 0\r\n );\r\n } else if (useComputeShader) {\r\n this.$l.texelA = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(pb.int(this.texelButt.b), this.y),\r\n x,\r\n 0\r\n );\r\n this.$l.texelB = pb.textureArrayLoad(\r\n this.spectrum,\r\n pb.ivec2(pb.int(this.texelButt.a), this.y),\r\n x,\r\n 0\r\n );\r\n } else {\r\n this.$l.texelA = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(pb.int(this.texelButt.b), this.y),\r\n 0\r\n );\r\n this.$l.texelB = pb.textureLoad(\r\n this[`spectrum${x}`],\r\n pb.ivec2(pb.int(this.texelButt.a), this.y),\r\n 0\r\n );\r\n }\r\n this.$l.w = Complex(this.texelButt.r, this.texelButt.g);\r\n this.$l.a1 = Complex(this.texelA.x, this.texelA.y);\r\n this.$l.b1 = Complex(this.texelB.x, this.texelB.y);\r\n this.$l.r1 = this.scale(this.add(this.a1, this.mul(this.b1, this.w)), 0.5);\r\n this.$l.a2 = Complex(this.texelA.z, this.texelA.w);\r\n this.$l.b2 = Complex(this.texelB.z, this.texelB.w);\r\n this.$l.r2 = this.scale(this.add(this.a2, this.mul(this.b2, this.w)), 0.5);\r\n this.$return(pb.vec4(this.r1.re, this.r1.im, this.r2.re, this.r2.im));\r\n });\r\n }\r\n pb.main(function () {\r\n this.$l.x = pb.int(getFragCoord(this, useComputeShader).x);\r\n this.$l.y = pb.int(getFragCoord(this, useComputeShader).y);\r\n if (pb.getDevice().type === 'webgl') {\r\n this.$l.texelButt = pb.textureSampleLevel(\r\n this.butterfly,\r\n pb.div(pb.vec2(pb.float(this.phase), pb.float(this.x)), this.texSize.zw),\r\n 0\r\n );\r\n } else {\r\n this.$l.texelButt = pb.textureLoad(this.butterfly, pb.ivec2(this.phase, this.x), 0);\r\n }\r\n if (useComputeShader) {\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 0,\r\n this.twiddle0(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 1,\r\n this.twiddle1(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 2,\r\n this.twiddle2(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 3,\r\n this.twiddle3(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 4,\r\n this.twiddle4(this.texelButt, this.y)\r\n );\r\n pb.textureArrayStore(\r\n this.ifft,\r\n this.$builtins.globalInvocationId.xy,\r\n 5,\r\n this.twiddle5(this.texelButt, this.y)\r\n );\r\n } else {\r\n if (!limit || limit === 4) {\r\n this.$outputs.ifft0 = this.twiddle0(this.texelButt, this.y);\r\n this.$outputs.ifft1 = this.twiddle1(this.texelButt, this.y);\r\n this.$outputs.ifft2 = this.twiddle2(this.texelButt, this.y);\r\n this.$outputs.ifft3 = this.twiddle3(this.texelButt, this.y);\r\n }\r\n if (!limit || limit === 2) {\r\n this.$outputs.ifft4 = this.twiddle4(this.texelButt, this.y);\r\n this.$outputs.ifft5 = this.twiddle5(this.texelButt, this.y);\r\n }\r\n }\r\n });\r\n };\r\n }\r\n if (useComputeShader) {\r\n return Application.instance.device.buildComputeProgram({\r\n workgroupSize: [threadGroupSize, threadGroupSize, 1],\r\n compute: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n } else {\r\n return Application.instance.device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.position = pb.vec3().attrib('position');\r\n pb.main(function () {\r\n this.$builtins.position = pb.vec4(this.$inputs.position, 1);\r\n });\r\n },\r\n fragment: getComputeFunc(useComputeShader, targetFormat)\r\n });\r\n }\r\n}\r\n"],"names":["getFragCoord","scope","useComputeShader","$builtins","globalInvocationId","xy","fragCoord","WaterShaderImpl","_vertexFunc","_shadingFunc","_setupUniformsFunc","setupUniformsFunc","vertexFunc","shadingFunc","setupUniforms","call","vertex","pos","xz","waveGenerator","getVertexNormal","pb","$builder","func","vec2","$l","uv0","div","sizes","x","uv1","y","uv2","z","_sx_sz_dxdx_dzdz0","textureArraySampleLevel","dataTexture","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","textureSampleLevel","sx_sz_dxdx_dzdz0","sx_sz_dxdx_dzdz1","sx_sz_dxdx_dzdz2","sx","add","sz","dxdx_dzdz","mul","zw","croppinesses","slope","normal","normalize","vec3","neg","$return","shading","worldPos","worldNormal","foamFactor","discardable","createProgramOcean","shadingImpl","Application","instance","device","buildRenderProgram","$inputs","position","attrib","$outputs","outPos","outNormal","outXZ","flip","int","uniform","viewProjMatrix","mat4","worldMatrix","level","float","main","vec4","calcVertexPositionAndNormal","$if","notEqual","fragment","outColor","region","or","any","lessThan","greaterThan","n","calcFragmentNormalAndFoam","xyz","w","createProgramPostFFT2","threadGroupSize","targetFormat","limit","getComputeFunc","fmt","N2","output","texStorage2DArray","rgba32float","storage","rgba16float","ifft","tex2DArray","dx_hy_dz_dxdz0","dx_hy_dz_dxdz1","ifft0","tex2D","ifft1","ifft2","ifft3","dx_hy_dz_dxdz2","ifft4","ifft5","getDevice","type","ifftTexSize","fragPos","p","s","sub","mod","m","uv","ivec2","i","textureArrayStore","textureArrayLoad","textureLoad","buildComputeProgram","workgroupSize","compute","createProgramHk","spectrum","spectrum0","spectrum1","spectrum2","spectrum3","spectrum4","spectrum5","resolution","t","h0Texture","h0Texture0","h0Texture1","h0Texture2","h0TexSize","RATIO","g","Complex","defineStruct","Spectrum","a","re","b","im","cos","sin","v","hy","dx","dz","dxdx","dxdz","dzdz","lessThanEqual","size","k","Math","PI","kLen","length","sqrt","h0Texel","e","eix","h0","h0MinConj","conj","scale","out","dx_hy","spec","dz_dxdz","sx_sz","part0","part1","fragXY","s0","s1","s2","s3","spec0","getSpectrum0","spec1","getSpectrum1","compressSpectrum","s4","s5","spec2","getSpectrum2","createProgramH0","noise","wind","alignment","cascade0","cascade1","cascade2","noise0","rg","noise1","u0","v0","log","u1","v1","k2","dot","minK","greaterThanEqual","maxK","L","L2","h0k","A","exp","h0mk","pow","max","rnd","gauss","phillips","createProgramFFT2V","sampleType","butterfly","texSize","phase","texelA","texelButt","texelB","r","a1","b1","r1","a2","b2","r2","twiddle0","twiddle1","twiddle2","twiddle3","twiddle4","twiddle5","createProgramFFT2H"],"mappings":"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"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { ShadowImpl } from './shadow_impl.js';
|
|
2
|
+
import '@zephyr3d/base';
|
|
3
|
+
import { Application } from '../app/app.js';
|
|
4
|
+
import '@zephyr3d/device';
|
|
5
|
+
import { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc.js';
|
|
6
|
+
import { GaussianBlurBlitter } from '../blitter/gaussianblur.js';
|
|
7
|
+
import { computeShadowMapDepth, filterShadowESM } from '../shaders/shadow.js';
|
|
8
|
+
import { LIGHT_TYPE_POINT } from '../values.js';
|
|
9
|
+
import { ShaderHelper } from '../material/shader/helper.js';
|
|
10
|
+
|
|
11
|
+
class BlurBlitter extends GaussianBlurBlitter {
|
|
12
|
+
_packFloat;
|
|
13
|
+
get packFloat() {
|
|
14
|
+
return this._packFloat;
|
|
15
|
+
}
|
|
16
|
+
set packFloat(b) {
|
|
17
|
+
if (this._packFloat !== !!b) {
|
|
18
|
+
this._packFloat = !!b;
|
|
19
|
+
this.invalidateHash();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType) {
|
|
23
|
+
const pb = scope.$builder;
|
|
24
|
+
const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);
|
|
25
|
+
if (this.packFloat) {
|
|
26
|
+
return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 0, 0, 1);
|
|
27
|
+
} else {
|
|
28
|
+
return texel;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
writeTexel(scope, type, srcUV, texel) {
|
|
32
|
+
const outTexel = super.writeTexel(scope, type, srcUV, texel);
|
|
33
|
+
if (this.packFloat) {
|
|
34
|
+
return encodeNormalizedFloatToRGBA(scope, outTexel.r);
|
|
35
|
+
} else {
|
|
36
|
+
return outTexel;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
calcHash() {
|
|
40
|
+
return `${super.calcHash()}-${Number(this.packFloat)}`;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** @internal */ class ESM extends ShadowImpl {
|
|
44
|
+
/** @internal */ _depthScale;
|
|
45
|
+
/** @internal */ _blur;
|
|
46
|
+
/** @internal */ _kernelSize;
|
|
47
|
+
/** @internal */ _blurSize;
|
|
48
|
+
/** @internal */ _logSpace;
|
|
49
|
+
/** @internal */ _blitterH;
|
|
50
|
+
/** @internal */ _blitterV;
|
|
51
|
+
/** @internal */ _mipmap;
|
|
52
|
+
constructor(kernelSize, blurSize, depthScale){
|
|
53
|
+
super();
|
|
54
|
+
this._blur = true;
|
|
55
|
+
this._depthScale = depthScale ?? 500;
|
|
56
|
+
this._kernelSize = kernelSize ?? 5;
|
|
57
|
+
this._blurSize = blurSize ?? 1;
|
|
58
|
+
this._logSpace = true;
|
|
59
|
+
this._mipmap = true;
|
|
60
|
+
this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);
|
|
61
|
+
this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);
|
|
62
|
+
}
|
|
63
|
+
resourceDirty() {
|
|
64
|
+
return this._resourceDirty;
|
|
65
|
+
}
|
|
66
|
+
get blur() {
|
|
67
|
+
return this._blur;
|
|
68
|
+
}
|
|
69
|
+
set blur(val) {
|
|
70
|
+
if (this._blur !== !!val) {
|
|
71
|
+
this._blur = !!val;
|
|
72
|
+
this._resourceDirty = true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
get mipmap() {
|
|
76
|
+
return this._mipmap;
|
|
77
|
+
}
|
|
78
|
+
set mipmap(b) {
|
|
79
|
+
if (this._mipmap !== !!b) {
|
|
80
|
+
this._mipmap = !!b;
|
|
81
|
+
if (this._blur) {
|
|
82
|
+
this._resourceDirty = true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
get kernelSize() {
|
|
87
|
+
return this._kernelSize;
|
|
88
|
+
}
|
|
89
|
+
set kernelSize(val) {
|
|
90
|
+
this._kernelSize = val;
|
|
91
|
+
}
|
|
92
|
+
get blurSize() {
|
|
93
|
+
return this._blurSize;
|
|
94
|
+
}
|
|
95
|
+
set blurSize(val) {
|
|
96
|
+
this._blurSize = val;
|
|
97
|
+
}
|
|
98
|
+
get logSpace() {
|
|
99
|
+
return this._logSpace;
|
|
100
|
+
}
|
|
101
|
+
set logSpace(val) {
|
|
102
|
+
this._logSpace = !!val;
|
|
103
|
+
}
|
|
104
|
+
getType() {
|
|
105
|
+
return 'esm';
|
|
106
|
+
}
|
|
107
|
+
getShadowMapBorder(_shadowMapParams) {
|
|
108
|
+
return this._blur ? Math.ceil((this._kernelSize + 1) / 2 * this._blurSize) : 0;
|
|
109
|
+
}
|
|
110
|
+
getShadowMap(shadowMapParams) {
|
|
111
|
+
const implData = shadowMapParams.implData;
|
|
112
|
+
return implData ? implData.blurFramebuffer2.getColorAttachments()[0] : shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0];
|
|
113
|
+
}
|
|
114
|
+
/** @internal */ fetchTemporalFramebuffer(autoRelease, lightType, numCascades, width, height, colorFormat, depthFormat, mipmapping) {
|
|
115
|
+
const device = Application.instance.device;
|
|
116
|
+
const useTextureArray = numCascades > 1 && device.type !== 'webgl';
|
|
117
|
+
const colorAttachments = colorFormat ? useTextureArray ? [
|
|
118
|
+
device.pool.fetchTemporalTexture2DArray(false, colorFormat, width, height, numCascades, mipmapping)
|
|
119
|
+
] : lightType === LIGHT_TYPE_POINT ? [
|
|
120
|
+
device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)
|
|
121
|
+
] : [
|
|
122
|
+
device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)
|
|
123
|
+
] : null;
|
|
124
|
+
const depthAttachment = depthFormat ? useTextureArray ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false) : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false) : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false) : null;
|
|
125
|
+
const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments, depthAttachment);
|
|
126
|
+
if (colorAttachments) {
|
|
127
|
+
device.pool.releaseTexture(colorAttachments[0]);
|
|
128
|
+
}
|
|
129
|
+
if (depthAttachment) {
|
|
130
|
+
device.pool.releaseTexture(depthAttachment);
|
|
131
|
+
}
|
|
132
|
+
return fb;
|
|
133
|
+
}
|
|
134
|
+
doUpdateResources(shadowMapParams) {
|
|
135
|
+
const implData = {
|
|
136
|
+
blurFramebuffer: null,
|
|
137
|
+
blurFramebuffer2: null
|
|
138
|
+
};
|
|
139
|
+
shadowMapParams.implData = implData;
|
|
140
|
+
const colorFormat = this.getShadowMapColorFormat(shadowMapParams);
|
|
141
|
+
const shadowMapWidth = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].width;
|
|
142
|
+
const shadowMapHeight = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].height;
|
|
143
|
+
if (this._blur) {
|
|
144
|
+
shadowMapParams.implData = {
|
|
145
|
+
blurFramebuffer: this.fetchTemporalFramebuffer(true, shadowMapParams.lightType, shadowMapParams.numShadowCascades, shadowMapWidth, shadowMapHeight, colorFormat, null, false),
|
|
146
|
+
blurFramebuffer2: this.fetchTemporalFramebuffer(true, shadowMapParams.lightType, shadowMapParams.numShadowCascades, shadowMapWidth, shadowMapHeight, colorFormat, null, true)
|
|
147
|
+
};
|
|
148
|
+
} else {
|
|
149
|
+
shadowMapParams.implData = null;
|
|
150
|
+
}
|
|
151
|
+
shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);
|
|
152
|
+
shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;
|
|
153
|
+
}
|
|
154
|
+
postRenderShadowMap(shadowMapParams) {
|
|
155
|
+
if (shadowMapParams.implData) {
|
|
156
|
+
const implData = shadowMapParams.implData;
|
|
157
|
+
const colorAttachment = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0];
|
|
158
|
+
this._blitterH.blurSize = this._blurSize / colorAttachment.width;
|
|
159
|
+
this._blitterH.kernelSize = this._kernelSize;
|
|
160
|
+
this._blitterH.logSpace = this._logSpace;
|
|
161
|
+
this._blitterH.packFloat = colorAttachment.format === 'rgba8unorm';
|
|
162
|
+
this._blitterV.blurSize = this._blurSize / colorAttachment.height;
|
|
163
|
+
this._blitterV.kernelSize = this._kernelSize;
|
|
164
|
+
this._blitterV.logSpace = this._logSpace;
|
|
165
|
+
this._blitterV.packFloat = colorAttachment.format === 'rgba8unorm';
|
|
166
|
+
this._blitterH.blit(colorAttachment, implData.blurFramebuffer);
|
|
167
|
+
this._blitterV.blit(implData.blurFramebuffer.getColorAttachments()[0], implData.blurFramebuffer2);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
getDepthScale() {
|
|
171
|
+
return this._depthScale;
|
|
172
|
+
}
|
|
173
|
+
setDepthScale(val) {
|
|
174
|
+
this._depthScale = val;
|
|
175
|
+
}
|
|
176
|
+
getShaderHash() {
|
|
177
|
+
return '';
|
|
178
|
+
}
|
|
179
|
+
getShadowMapColorFormat(_shadowMapParams) {
|
|
180
|
+
const device = Application.instance.device;
|
|
181
|
+
return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer ? device.type === 'webgl' ? 'rgba16f' : 'r16f' : device.getDeviceCaps().textureCaps.supportFloatColorBuffer ? device.type === 'webgl' ? 'rgba32f' : 'r32f' : 'rgba8unorm';
|
|
182
|
+
}
|
|
183
|
+
getShadowMapDepthFormat(_shadowMapParams) {
|
|
184
|
+
return 'd24s8';
|
|
185
|
+
}
|
|
186
|
+
computeShadowMapDepth(shadowMapParams, scope, worldPos) {
|
|
187
|
+
return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap.format);
|
|
188
|
+
}
|
|
189
|
+
computeShadowCSM(shadowMapParams, scope, shadowVertex, NdotL, split) {
|
|
190
|
+
const funcNameComputeShadowCSM = 'lib_computeShadowCSM';
|
|
191
|
+
const pb = scope.$builder;
|
|
192
|
+
pb.func(funcNameComputeShadowCSM, [
|
|
193
|
+
pb.vec4('shadowVertex'),
|
|
194
|
+
pb.float('NdotL'),
|
|
195
|
+
pb.int('split')
|
|
196
|
+
], function() {
|
|
197
|
+
this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);
|
|
198
|
+
this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);
|
|
199
|
+
this.$l.inShadow = pb.all(pb.bvec2(pb.all(pb.bvec4(pb.greaterThanEqual(this.shadowCoord.x, 0), pb.lessThanEqual(this.shadowCoord.x, 1), pb.greaterThanEqual(this.shadowCoord.y, 0), pb.lessThanEqual(this.shadowCoord.y, 1))), pb.lessThanEqual(this.shadowCoord.z, 1)));
|
|
200
|
+
this.$l.shadow = pb.float(1);
|
|
201
|
+
this.$if(this.inShadow, function() {
|
|
202
|
+
this.shadow = filterShadowESM(this, shadowMapParams.lightType, shadowMapParams.shadowMap.format, this.shadowCoord, this.split);
|
|
203
|
+
});
|
|
204
|
+
this.$return(this.shadow);
|
|
205
|
+
});
|
|
206
|
+
return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split);
|
|
207
|
+
}
|
|
208
|
+
computeShadow(shadowMapParams, scope, shadowVertex, NdotL) {
|
|
209
|
+
const funcNameComputeShadow = 'lib_computeShadow';
|
|
210
|
+
const pb = scope.$builder;
|
|
211
|
+
pb.func(funcNameComputeShadow, [
|
|
212
|
+
pb.vec4('shadowVertex'),
|
|
213
|
+
pb.float('NdotL')
|
|
214
|
+
], function() {
|
|
215
|
+
if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {
|
|
216
|
+
this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);
|
|
217
|
+
this.$return(filterShadowESM(this, LIGHT_TYPE_POINT, shadowMapParams.shadowMap.format, this.dir));
|
|
218
|
+
} else {
|
|
219
|
+
this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);
|
|
220
|
+
this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);
|
|
221
|
+
this.$l.inShadow = pb.all(pb.bvec2(pb.all(pb.bvec4(pb.greaterThanEqual(this.shadowCoord.x, 0), pb.lessThanEqual(this.shadowCoord.x, 1), pb.greaterThanEqual(this.shadowCoord.y, 0), pb.lessThanEqual(this.shadowCoord.y, 1))), pb.lessThanEqual(this.shadowCoord.z, 1)));
|
|
222
|
+
this.$l.shadow = pb.float(1);
|
|
223
|
+
this.$if(this.inShadow, function() {
|
|
224
|
+
this.shadow = filterShadowESM(this, shadowMapParams.lightType, shadowMapParams.shadowMap.format, this.shadowCoord);
|
|
225
|
+
});
|
|
226
|
+
this.$return(this.shadow);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);
|
|
230
|
+
}
|
|
231
|
+
useNativeShadowMap(_shadowMapParams) {
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export { ESM };
|
|
237
|
+
//# sourceMappingURL=esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esm.js","sources":["../../../src/shadow/esm.ts"],"sourcesContent":["import type { FrameBuffer, TextureFormat, PBShaderExp, PBInsideFunctionScope } from '@zephyr3d/device';\r\nimport { ShadowImpl } from './shadow_impl';\r\nimport type { BlitType } from '../blitter';\r\nimport { GaussianBlurBlitter } from '../blitter';\r\nimport { computeShadowMapDepth, filterShadowESM } from '../shaders/shadow';\r\nimport { decodeNormalizedFloatFromRGBA, encodeNormalizedFloatToRGBA } from '../shaders/misc';\r\nimport { Application } from '../app';\r\nimport { LIGHT_TYPE_POINT } from '../values';\r\nimport type { ShadowMapParams, ShadowMapType, ShadowMode } from './shadowmapper';\r\nimport { ShaderHelper } from '../material/shader/helper';\r\n\r\ntype ESMImplData = {\r\n blurFramebuffer: FrameBuffer;\r\n blurFramebuffer2: FrameBuffer;\r\n};\r\n\r\nclass BlurBlitter extends GaussianBlurBlitter {\r\n protected _packFloat: boolean;\r\n get packFloat(): boolean {\r\n return this._packFloat;\r\n }\r\n set packFloat(b: boolean) {\r\n if (this._packFloat !== !!b) {\r\n this._packFloat = !!b;\r\n this.invalidateHash();\r\n }\r\n }\r\n readTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcTex: PBShaderExp,\r\n srcUV: PBShaderExp,\r\n srcLayer: PBShaderExp,\r\n sampleType: 'float' | 'int' | 'uint'\r\n ): PBShaderExp {\r\n const pb = scope.$builder;\r\n const texel = super.readTexel(scope, type, srcTex, srcUV, srcLayer, sampleType);\r\n if (this.packFloat) {\r\n return pb.vec4(decodeNormalizedFloatFromRGBA(scope, texel), 0, 0, 1);\r\n } else {\r\n return texel;\r\n }\r\n }\r\n writeTexel(\r\n scope: PBInsideFunctionScope,\r\n type: BlitType,\r\n srcUV: PBShaderExp,\r\n texel: PBShaderExp\r\n ): PBShaderExp {\r\n const outTexel = super.writeTexel(scope, type, srcUV, texel);\r\n if (this.packFloat) {\r\n return encodeNormalizedFloatToRGBA(scope, outTexel.r);\r\n } else {\r\n return outTexel;\r\n }\r\n }\r\n protected calcHash(): string {\r\n return `${super.calcHash()}-${Number(this.packFloat)}`;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ESM extends ShadowImpl {\r\n /** @internal */\r\n protected _depthScale: number;\r\n /** @internal */\r\n protected _blur: boolean;\r\n /** @internal */\r\n protected _kernelSize: number;\r\n /** @internal */\r\n protected _blurSize: number;\r\n /** @internal */\r\n protected _logSpace: boolean;\r\n /** @internal */\r\n protected _blitterH: BlurBlitter;\r\n /** @internal */\r\n protected _blitterV: BlurBlitter;\r\n /** @internal */\r\n protected _mipmap: boolean;\r\n constructor(kernelSize?: number, blurSize?: number, depthScale?: number) {\r\n super();\r\n this._blur = true;\r\n this._depthScale = depthScale ?? 500;\r\n this._kernelSize = kernelSize ?? 5;\r\n this._blurSize = blurSize ?? 1;\r\n this._logSpace = true;\r\n this._mipmap = true;\r\n this._blitterH = new BlurBlitter('horizonal', this._kernelSize, 4, 1 / 1024);\r\n this._blitterV = new BlurBlitter('vertical', this._kernelSize, 4, 1 / 1024);\r\n }\r\n resourceDirty(): boolean {\r\n return this._resourceDirty;\r\n }\r\n get blur(): boolean {\r\n return this._blur;\r\n }\r\n set blur(val: boolean) {\r\n if (this._blur !== !!val) {\r\n this._blur = !!val;\r\n this._resourceDirty = true;\r\n }\r\n }\r\n get mipmap(): boolean {\r\n return this._mipmap;\r\n }\r\n set mipmap(b: boolean) {\r\n if (this._mipmap !== !!b) {\r\n this._mipmap = !!b;\r\n if (this._blur) {\r\n this._resourceDirty = true;\r\n }\r\n }\r\n }\r\n get kernelSize(): number {\r\n return this._kernelSize;\r\n }\r\n set kernelSize(val: number) {\r\n this._kernelSize = val;\r\n }\r\n get blurSize(): number {\r\n return this._blurSize;\r\n }\r\n set blurSize(val: number) {\r\n this._blurSize = val;\r\n }\r\n get logSpace(): boolean {\r\n return this._logSpace;\r\n }\r\n set logSpace(val: boolean) {\r\n this._logSpace = !!val;\r\n }\r\n getType(): ShadowMode {\r\n return 'esm';\r\n }\r\n getShadowMapBorder(_shadowMapParams: ShadowMapParams): number {\r\n return this._blur ? Math.ceil(((this._kernelSize + 1) / 2) * this._blurSize) : 0;\r\n }\r\n getShadowMap(shadowMapParams: ShadowMapParams): ShadowMapType {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n return (\r\n implData\r\n ? implData.blurFramebuffer2.getColorAttachments()[0]\r\n : shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0]\r\n ) as ShadowMapType;\r\n }\r\n /** @internal */\r\n fetchTemporalFramebuffer(\r\n autoRelease: boolean,\r\n lightType: number,\r\n numCascades: number,\r\n width: number,\r\n height: number,\r\n colorFormat: TextureFormat,\r\n depthFormat: TextureFormat,\r\n mipmapping?: boolean\r\n ) {\r\n const device = Application.instance.device;\r\n const useTextureArray = numCascades > 1 && device.type !== 'webgl';\r\n const colorAttachments = colorFormat\r\n ? useTextureArray\r\n ? [\r\n device.pool.fetchTemporalTexture2DArray(\r\n false,\r\n colorFormat,\r\n width,\r\n height,\r\n numCascades,\r\n mipmapping\r\n )\r\n ]\r\n : lightType === LIGHT_TYPE_POINT\r\n ? [device.pool.fetchTemporalTextureCube(false, colorFormat, width, mipmapping)]\r\n : [device.pool.fetchTemporalTexture2D(false, colorFormat, width, height, mipmapping)]\r\n : null;\r\n const depthAttachment = depthFormat\r\n ? useTextureArray\r\n ? device.pool.fetchTemporalTexture2DArray(false, depthFormat, width, height, numCascades, false)\r\n : device.type !== 'webgl' && lightType === LIGHT_TYPE_POINT\r\n ? device.pool.fetchTemporalTextureCube(false, depthFormat, width, false)\r\n : device.pool.fetchTemporalTexture2D(false, depthFormat, width, height, false)\r\n : null;\r\n const fb = device.pool.createTemporalFramebuffer(autoRelease, colorAttachments, depthAttachment);\r\n if (colorAttachments) {\r\n device.pool.releaseTexture(colorAttachments[0]);\r\n }\r\n if (depthAttachment) {\r\n device.pool.releaseTexture(depthAttachment);\r\n }\r\n return fb;\r\n }\r\n doUpdateResources(shadowMapParams: ShadowMapParams) {\r\n const implData: ESMImplData = {\r\n blurFramebuffer: null,\r\n blurFramebuffer2: null\r\n };\r\n shadowMapParams.implData = implData;\r\n const colorFormat = this.getShadowMapColorFormat(shadowMapParams);\r\n const shadowMapWidth = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].width;\r\n const shadowMapHeight = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0].height;\r\n if (this._blur) {\r\n shadowMapParams.implData = {\r\n blurFramebuffer: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n false\r\n ),\r\n blurFramebuffer2: this.fetchTemporalFramebuffer(\r\n true,\r\n shadowMapParams.lightType,\r\n shadowMapParams.numShadowCascades,\r\n shadowMapWidth,\r\n shadowMapHeight,\r\n colorFormat,\r\n null,\r\n true\r\n )\r\n };\r\n } else {\r\n shadowMapParams.implData = null;\r\n }\r\n shadowMapParams.shadowMap = this.getShadowMap(shadowMapParams);\r\n shadowMapParams.shadowMapSampler = shadowMapParams.shadowMap?.getDefaultSampler(false) ?? null;\r\n }\r\n postRenderShadowMap(shadowMapParams: ShadowMapParams) {\r\n if (shadowMapParams.implData) {\r\n const implData = shadowMapParams.implData as ESMImplData;\r\n const colorAttachment = shadowMapParams.shadowMapFramebuffer.getColorAttachments()[0];\r\n this._blitterH.blurSize = this._blurSize / colorAttachment.width;\r\n this._blitterH.kernelSize = this._kernelSize;\r\n this._blitterH.logSpace = this._logSpace;\r\n this._blitterH.packFloat = colorAttachment.format === 'rgba8unorm';\r\n this._blitterV.blurSize = this._blurSize / colorAttachment.height;\r\n this._blitterV.kernelSize = this._kernelSize;\r\n this._blitterV.logSpace = this._logSpace;\r\n this._blitterV.packFloat = colorAttachment.format === 'rgba8unorm';\r\n this._blitterH.blit(colorAttachment as any, implData.blurFramebuffer);\r\n this._blitterV.blit(\r\n implData.blurFramebuffer.getColorAttachments()[0] as any,\r\n implData.blurFramebuffer2\r\n );\r\n }\r\n }\r\n getDepthScale(): number {\r\n return this._depthScale;\r\n }\r\n setDepthScale(val: number) {\r\n this._depthScale = val;\r\n }\r\n getShaderHash(): string {\r\n return '';\r\n }\r\n getShadowMapColorFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n const device = Application.instance.device;\r\n return device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba16f'\r\n : 'r16f'\r\n : device.getDeviceCaps().textureCaps.supportFloatColorBuffer\r\n ? device.type === 'webgl'\r\n ? 'rgba32f'\r\n : 'r32f'\r\n : 'rgba8unorm';\r\n }\r\n getShadowMapDepthFormat(_shadowMapParams: ShadowMapParams): TextureFormat {\r\n return 'd24s8';\r\n }\r\n computeShadowMapDepth(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n worldPos: PBShaderExp\r\n ): PBShaderExp {\r\n return computeShadowMapDepth(scope, worldPos, shadowMapParams.shadowMap.format);\r\n }\r\n computeShadowCSM(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp,\r\n split: PBShaderExp\r\n ): PBShaderExp {\r\n const funcNameComputeShadowCSM = 'lib_computeShadowCSM';\r\n const pb = scope.$builder;\r\n pb.func(\r\n funcNameComputeShadowCSM,\r\n [pb.vec4('shadowVertex'), pb.float('NdotL'), pb.int('split')],\r\n function () {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap.format,\r\n this.shadowCoord,\r\n this.split\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n );\r\n return pb.getGlobalScope()[funcNameComputeShadowCSM](shadowVertex, NdotL, split);\r\n }\r\n computeShadow(\r\n shadowMapParams: ShadowMapParams,\r\n scope: PBInsideFunctionScope,\r\n shadowVertex: PBShaderExp,\r\n NdotL: PBShaderExp\r\n ): PBShaderExp {\r\n const funcNameComputeShadow = 'lib_computeShadow';\r\n const pb = scope.$builder;\r\n pb.func(funcNameComputeShadow, [pb.vec4('shadowVertex'), pb.float('NdotL')], function () {\r\n if (shadowMapParams.lightType === LIGHT_TYPE_POINT) {\r\n this.$l.dir = pb.sub(this.shadowVertex.xyz, ShaderHelper.getLightPositionAndRangeForShadow(this).xyz);\r\n this.$return(filterShadowESM(this, LIGHT_TYPE_POINT, shadowMapParams.shadowMap.format, this.dir));\r\n } else {\r\n this.$l.shadowCoord = pb.div(this.shadowVertex, this.shadowVertex.w);\r\n this.$l.shadowCoord = pb.add(pb.mul(this.shadowCoord, 0.5), 0.5);\r\n this.$l.inShadow = pb.all(\r\n pb.bvec2(\r\n pb.all(\r\n pb.bvec4(\r\n pb.greaterThanEqual(this.shadowCoord.x, 0),\r\n pb.lessThanEqual(this.shadowCoord.x, 1),\r\n pb.greaterThanEqual(this.shadowCoord.y, 0),\r\n pb.lessThanEqual(this.shadowCoord.y, 1)\r\n )\r\n ),\r\n pb.lessThanEqual(this.shadowCoord.z, 1)\r\n )\r\n );\r\n this.$l.shadow = pb.float(1);\r\n this.$if(this.inShadow, function () {\r\n this.shadow = filterShadowESM(\r\n this,\r\n shadowMapParams.lightType,\r\n shadowMapParams.shadowMap.format,\r\n this.shadowCoord\r\n );\r\n });\r\n this.$return(this.shadow);\r\n }\r\n });\r\n return pb.getGlobalScope()[funcNameComputeShadow](shadowVertex, NdotL);\r\n }\r\n useNativeShadowMap(_shadowMapParams: ShadowMapParams): boolean {\r\n return false;\r\n }\r\n}\r\n"],"names":["BlurBlitter","GaussianBlurBlitter","_packFloat","packFloat","b","invalidateHash","readTexel","scope","type","srcTex","srcUV","srcLayer","sampleType","pb","$builder","texel","vec4","decodeNormalizedFloatFromRGBA","writeTexel","outTexel","encodeNormalizedFloatToRGBA","r","calcHash","Number","ESM","ShadowImpl","kernelSize","blurSize","depthScale","_blur","_depthScale","_kernelSize","_blurSize","_logSpace","_mipmap","_blitterH","_blitterV","resourceDirty","_resourceDirty","blur","val","mipmap","logSpace","getType","getShadowMapBorder","_shadowMapParams","Math","ceil","getShadowMap","shadowMapParams","implData","blurFramebuffer2","getColorAttachments","shadowMapFramebuffer","fetchTemporalFramebuffer","autoRelease","lightType","numCascades","width","height","colorFormat","depthFormat","mipmapping","device","Application","instance","useTextureArray","colorAttachments","pool","fetchTemporalTexture2DArray","LIGHT_TYPE_POINT","fetchTemporalTextureCube","fetchTemporalTexture2D","depthAttachment","fb","createTemporalFramebuffer","releaseTexture","doUpdateResources","blurFramebuffer","getShadowMapColorFormat","shadowMapWidth","shadowMapHeight","numShadowCascades","shadowMap","shadowMapSampler","getDefaultSampler","postRenderShadowMap","colorAttachment","format","blit","getDepthScale","setDepthScale","getShaderHash","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","supportFloatColorBuffer","getShadowMapDepthFormat","computeShadowMapDepth","worldPos","computeShadowCSM","shadowVertex","NdotL","split","funcNameComputeShadowCSM","func","float","int","$l","shadowCoord","div","w","add","mul","inShadow","all","bvec2","bvec4","greaterThanEqual","x","lessThanEqual","y","z","shadow","$if","filterShadowESM","$return","getGlobalScope","computeShadow","funcNameComputeShadow","dir","sub","xyz","ShaderHelper","getLightPositionAndRangeForShadow","useNativeShadowMap"],"mappings":"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"}
|