@zephyr3d/scene 0.6.1 → 0.7.1
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/animation.js +142 -31
- package/dist/animation/animation.js.map +1 -1
- package/dist/animation/animationset.js +186 -73
- package/dist/animation/animationset.js.map +1 -1
- package/dist/animation/animationtrack.js +66 -10
- package/dist/animation/animationtrack.js.map +1 -1
- package/dist/animation/eulerrotationtrack.js +40 -20
- package/dist/animation/eulerrotationtrack.js.map +1 -1
- package/dist/animation/morphtarget.js +20 -38
- package/dist/animation/morphtarget.js.map +1 -1
- package/dist/animation/morphtrack.js +59 -22
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/proptrack.js +186 -0
- package/dist/animation/proptrack.js.map +1 -0
- package/dist/animation/rotationtrack.js +28 -11
- package/dist/animation/rotationtrack.js.map +1 -1
- package/dist/animation/scaletrack.js +28 -11
- package/dist/animation/scaletrack.js.map +1 -1
- package/dist/animation/skeleton.js +238 -82
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/translationtrack.js +29 -11
- package/dist/animation/translationtrack.js.map +1 -1
- package/dist/app/api.js +52 -0
- package/dist/app/api.js.map +1 -0
- package/dist/app/app.js +165 -0
- package/dist/app/app.js.map +1 -0
- package/dist/app/engine.js +300 -0
- package/dist/app/engine.js.map +1 -0
- package/dist/app/inputmgr.js +351 -0
- package/dist/app/inputmgr.js.map +1 -0
- package/dist/app/runtimescript.js +62 -0
- package/dist/app/runtimescript.js.map +1 -0
- package/dist/app/screen.js +318 -0
- package/dist/app/screen.js.map +1 -0
- package/dist/app/scriptingsystem.js +224 -0
- package/dist/app/scriptingsystem.js.map +1 -0
- package/dist/app/scriptregistry.js +421 -0
- package/dist/app/scriptregistry.js.map +1 -0
- package/dist/asset/assetmanager.js +823 -321
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/builtin.js +12 -48
- package/dist/asset/builtin.js.map +1 -1
- package/dist/asset/loaders/dds/dds.js +23 -95
- package/dist/asset/loaders/dds/dds.js.map +1 -1
- package/dist/asset/loaders/dds/dds_loader.js +9 -19
- package/dist/asset/loaders/dds/dds_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/gltf_loader.js +50 -48
- package/dist/asset/loaders/gltf/gltf_loader.js.map +1 -1
- package/dist/asset/loaders/gltf/helpers.js +33 -16
- package/dist/asset/loaders/gltf/helpers.js.map +1 -1
- package/dist/asset/loaders/hdr/hdr.js +39 -27
- package/dist/asset/loaders/hdr/hdr.js.map +1 -1
- package/dist/asset/loaders/image/tga_Loader.js +15 -17
- package/dist/asset/loaders/image/tga_Loader.js.map +1 -1
- package/dist/asset/loaders/image/webimage_loader.js +51 -50
- package/dist/asset/loaders/image/webimage_loader.js.map +1 -1
- package/dist/asset/loaders/loader.js +2 -2
- package/dist/asset/loaders/loader.js.map +1 -1
- package/dist/asset/model.js +160 -6
- package/dist/asset/model.js.map +1 -1
- package/dist/blitter/bilateralblur.js +0 -1
- package/dist/blitter/bilateralblur.js.map +1 -1
- package/dist/blitter/blitter.js +28 -31
- package/dist/blitter/blitter.js.map +1 -1
- package/dist/blitter/box.js +0 -1
- package/dist/blitter/box.js.map +1 -1
- package/dist/blitter/copy.js.map +1 -1
- package/dist/blitter/gaussianblur.js +23 -23
- package/dist/blitter/gaussianblur.js.map +1 -1
- package/dist/camera/base.js +139 -34
- package/dist/camera/base.js.map +1 -1
- package/dist/camera/camera.js +760 -172
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/fps.js +21 -27
- package/dist/camera/fps.js.map +1 -1
- package/dist/camera/orbit.js +134 -59
- package/dist/camera/orbit.js.map +1 -1
- package/dist/camera/orthocamera.js +52 -21
- package/dist/camera/orthocamera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +60 -34
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +17031 -6901
- package/dist/index.js +60 -21
- package/dist/index.js.map +1 -1
- package/dist/material/blinn.js +5 -0
- package/dist/material/blinn.js.map +1 -1
- package/dist/material/grassmaterial.js +6 -1
- package/dist/material/grassmaterial.js.map +1 -1
- package/dist/material/lambert.js +6 -1
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +356 -77
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +505 -162
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +5 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/foliage.js +3 -3
- package/dist/material/mixins/foliage.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +18 -5
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +6 -6
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +242 -0
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -0
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +52 -15
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +27 -9
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +19 -7
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/brdf.js +134 -0
- package/dist/material/mixins/pbr/brdf.js.map +1 -0
- package/dist/material/mixins/pbr/common.js +68 -85
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +101 -83
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mixins/vertexcolor.js +6 -2
- package/dist/material/mixins/vertexcolor.js.map +1 -1
- package/dist/material/particle.js +272 -0
- package/dist/material/particle.js.map +1 -0
- package/dist/material/pbrblueprint.js +344 -0
- package/dist/material/pbrblueprint.js.map +1 -0
- package/dist/material/pbrmr.js +10 -0
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/pbrsg.js +10 -0
- package/dist/material/pbrsg.js.map +1 -1
- package/dist/material/shader/helper.js +533 -316
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/sprite.js +301 -0
- package/dist/material/sprite.js.map +1 -0
- package/dist/material/sprite3d.js +301 -0
- package/dist/material/sprite3d.js.map +1 -0
- package/dist/material/sprite3d_std.js +116 -0
- package/dist/material/sprite3d_std.js.map +1 -0
- package/dist/material/sprite3dblueprint.js +235 -0
- package/dist/material/sprite3dblueprint.js.map +1 -0
- package/dist/material/sprite_std.js +116 -0
- package/dist/material/sprite_std.js.map +1 -0
- package/dist/material/spriteblueprint.js +235 -0
- package/dist/material/spriteblueprint.js.map +1 -0
- package/dist/material/terrain-cm.js +606 -0
- package/dist/material/terrain-cm.js.map +1 -0
- package/dist/material/terrainmaterial.js +59 -54
- package/dist/material/terrainmaterial.js.map +1 -1
- package/dist/material/unlit.js +5 -0
- package/dist/material/unlit.js.map +1 -1
- package/dist/material/water.js +415 -0
- package/dist/material/water.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js +38 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimemgr.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js +10 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/runtimescript.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js +127 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptingsystem.js.map +1 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js +263 -0
- package/dist/node_modules/@zephyr3d/runtime/dist/runtime/scriptregistry.js.map +1 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js +5 -0
- package/dist/node_modules/es-module-lexer/dist/lexer.js.map +1 -0
- package/dist/posteffect/bloom.js +39 -54
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/compositor.js +95 -128
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +10 -18
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +9 -17
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +105 -0
- package/dist/posteffect/motionblur.js.map +1 -0
- package/dist/posteffect/posteffect.js +66 -35
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/sao.js +13 -21
- package/dist/posteffect/sao.js.map +1 -1
- package/dist/posteffect/ssr.js +65 -103
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/taa.js +175 -0
- package/dist/posteffect/taa.js.map +1 -0
- package/dist/posteffect/tonemap.js +12 -20
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +38 -25
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/clipmap.js +424 -106
- package/dist/render/clipmap.js.map +1 -1
- package/dist/render/cluster_light.js +11 -9
- package/dist/render/cluster_light.js.map +1 -1
- package/dist/render/cull_visitor.js +51 -13
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +15 -7
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable.js +15 -0
- package/dist/render/drawable.js.map +1 -0
- package/dist/render/drawable_mixin.js +121 -44
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/envlight.js +86 -141
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +236 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -0
- package/dist/render/fft_wavegenerator.js +131 -114
- package/dist/render/fft_wavegenerator.js.map +1 -1
- package/dist/render/fullscreenquad.js +2 -2
- package/dist/render/fullscreenquad.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +100 -48
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +7 -3
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/hzb.js +7 -5
- package/dist/render/hzb.js.map +1 -1
- package/dist/render/lightpass.js +28 -27
- package/dist/render/lightpass.js.map +1 -1
- package/dist/render/objectcolorpass.js +6 -9
- package/dist/render/objectcolorpass.js.map +1 -1
- package/dist/render/primitive.js +213 -105
- package/dist/render/primitive.js.map +1 -1
- package/dist/render/render_queue.js +49 -24
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/renderbundle_wrapper.js +65 -15
- package/dist/render/renderbundle_wrapper.js.map +1 -1
- package/dist/render/renderer.js +324 -189
- package/dist/render/renderer.js.map +1 -1
- package/dist/render/renderpass.js +43 -84
- package/dist/render/renderpass.js.map +1 -1
- package/dist/render/rendertarget.js +5 -0
- package/dist/render/rendertarget.js.map +1 -0
- package/dist/render/screenrendertarget.js +56 -0
- package/dist/render/screenrendertarget.js.map +1 -0
- package/dist/render/shadowmap_pass.js +5 -6
- package/dist/render/shadowmap_pass.js.map +1 -1
- package/dist/render/sky.js +867 -542
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +13 -15
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +296 -0
- package/dist/scene/basesprite.js.map +1 -0
- package/dist/scene/batchgroup.js +22 -7
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +78 -49
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/graph_node.js +2 -3
- package/dist/scene/graph_node.js.map +1 -1
- package/dist/scene/light.js +49 -92
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +298 -89
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/octree.js +371 -162
- package/dist/scene/octree.js.map +1 -1
- package/dist/scene/particlesys.js +687 -0
- package/dist/scene/particlesys.js.map +1 -0
- package/dist/scene/raycast_visitor.js +26 -13
- package/dist/scene/raycast_visitor.js.map +1 -1
- package/dist/scene/scene.js +312 -85
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +663 -105
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/sprite.js +18 -0
- package/dist/scene/sprite.js.map +1 -0
- package/dist/scene/sprite3d.js +18 -0
- package/dist/scene/sprite3d.js.map +1 -0
- package/dist/scene/terrain/grass.js +48 -49
- package/dist/scene/terrain/grass.js.map +1 -1
- package/dist/scene/terrain/heightfield.js +46 -44
- package/dist/scene/terrain/heightfield.js.map +1 -1
- package/dist/scene/terrain/patch.js +20 -29
- package/dist/scene/terrain/patch.js.map +1 -1
- package/dist/scene/terrain/quadtree.js +58 -27
- package/dist/scene/terrain/quadtree.js.map +1 -1
- package/dist/scene/terrain/terrain.js +31 -45
- package/dist/scene/terrain/terrain.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +604 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -0
- package/dist/scene/terrain-cm/grassmaterial.js +162 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -0
- package/dist/scene/terrain-cm/terrain-cm.js +550 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -0
- package/dist/scene/water.js +383 -0
- package/dist/scene/water.js.map +1 -0
- package/dist/shaders/atmosphere.js +945 -0
- package/dist/shaders/atmosphere.js.map +1 -0
- package/dist/shaders/fog.js +116 -0
- package/dist/shaders/fog.js.map +1 -0
- package/dist/shaders/misc.js.map +1 -1
- package/dist/shaders/noise.js +217 -8
- package/dist/shaders/noise.js.map +1 -1
- package/dist/shaders/pbr.js.map +1 -1
- package/dist/shaders/shadow.js +8 -8
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/ssr.js +87 -39
- package/dist/shaders/ssr.js.map +1 -1
- package/dist/shaders/temporal.js +216 -0
- package/dist/shaders/temporal.js.map +1 -0
- package/dist/shaders/water.js +42 -20
- package/dist/shaders/water.js.map +1 -1
- package/dist/shadow/esm.js +32 -14
- package/dist/shadow/esm.js.map +1 -1
- package/dist/shadow/pcf_opt.js +12 -13
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +12 -13
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/shader.js +40 -0
- package/dist/shadow/shader.js.map +1 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadowmapper.js +73 -44
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shadow/ssm.js +15 -16
- package/dist/shadow/ssm.js.map +1 -1
- package/dist/shadow/vsm.js +33 -16
- package/dist/shadow/vsm.js.map +1 -1
- package/dist/shapes/box.js +187 -83
- package/dist/shapes/box.js.map +1 -1
- package/dist/shapes/cylinder.js +101 -43
- package/dist/shapes/cylinder.js.map +1 -1
- package/dist/shapes/plane.js +70 -29
- package/dist/shapes/plane.js.map +1 -1
- package/dist/shapes/shape.js +121 -17
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +78 -44
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/shapes/tetrahedron.js +255 -0
- package/dist/shapes/tetrahedron.js.map +1 -0
- package/dist/shapes/torus.js +76 -55
- 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/{app.js → src/app/app.js} +18 -40
- package/dist/src/app/app.js.map +1 -0
- package/dist/{input → src/app}/inputmgr.js +41 -16
- 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/{blitter/depthlimitedgaussion.js → src/blitter/bilateralblur.js} +1 -2
- 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/{material/mixins → src/utility/textures}/ggxlut.js +1 -1
- 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/aabbtree.js +16 -6
- package/dist/utility/aabbtree.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +1325 -0
- package/dist/utility/blueprint/common/constants.js.map +1 -0
- package/dist/utility/blueprint/common/math.js +2507 -0
- package/dist/utility/blueprint/common/math.js.map +1 -0
- package/dist/utility/blueprint/common.js +7 -0
- package/dist/utility/blueprint/common.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/func.js +525 -0
- package/dist/utility/blueprint/material/func.js.map +1 -0
- package/dist/utility/blueprint/material/inputs.js +1659 -0
- package/dist/utility/blueprint/material/inputs.js.map +1 -0
- package/dist/utility/blueprint/material/ir.js +1519 -0
- package/dist/utility/blueprint/material/ir.js.map +1 -0
- package/dist/utility/blueprint/material/pbr.js +450 -0
- package/dist/utility/blueprint/material/pbr.js.map +1 -0
- package/dist/utility/blueprint/material/texture.js +1116 -0
- package/dist/utility/blueprint/material/texture.js.map +1 -0
- package/dist/utility/blueprint/node.js +214 -0
- package/dist/utility/blueprint/node.js.map +1 -0
- package/dist/utility/bounding_volume.js +0 -1
- package/dist/utility/bounding_volume.js.map +1 -1
- package/dist/utility/debug.js +26 -0
- package/dist/utility/debug.js.map +1 -0
- package/dist/utility/draco/decoder.js +1 -1
- package/dist/utility/draco/decoder.js.map +1 -1
- package/dist/utility/misc.js +19 -7
- package/dist/utility/misc.js.map +1 -1
- package/dist/utility/panorama.js +8 -6
- package/dist/utility/panorama.js.map +1 -1
- package/dist/utility/pmrem.js +30 -18
- package/dist/utility/pmrem.js.map +1 -1
- package/dist/utility/rendermipmap.js +116 -0
- package/dist/utility/rendermipmap.js.map +1 -0
- 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/json.js +406 -0
- package/dist/utility/serialization/json.js.map +1 -0
- package/dist/utility/serialization/manager.js +1243 -0
- package/dist/utility/serialization/manager.js.map +1 -0
- package/dist/utility/serialization/scene/animation.js +701 -0
- package/dist/utility/serialization/scene/animation.js.map +1 -0
- package/dist/utility/serialization/scene/batch.js +54 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -0
- package/dist/utility/serialization/scene/camera.js +896 -0
- package/dist/utility/serialization/scene/camera.js.map +1 -0
- package/dist/utility/serialization/scene/common.js +298 -0
- package/dist/utility/serialization/scene/common.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +591 -0
- package/dist/utility/serialization/scene/light.js.map +1 -0
- package/dist/utility/serialization/scene/material.js +1070 -0
- package/dist/utility/serialization/scene/material.js.map +1 -0
- package/dist/utility/serialization/scene/mesh.js +345 -0
- package/dist/utility/serialization/scene/mesh.js.map +1 -0
- package/dist/utility/serialization/scene/misc.js +40 -0
- package/dist/utility/serialization/scene/misc.js.map +1 -0
- package/dist/utility/serialization/scene/node.js +424 -0
- package/dist/utility/serialization/scene/node.js.map +1 -0
- package/dist/utility/serialization/scene/particle.js +427 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -0
- package/dist/utility/serialization/scene/primitive.js +585 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -0
- package/dist/utility/serialization/scene/scene.js +764 -0
- package/dist/utility/serialization/scene/scene.js.map +1 -0
- package/dist/utility/serialization/scene/sprite.js +164 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -0
- package/dist/utility/serialization/scene/terrain.js +497 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -0
- package/dist/utility/serialization/scene/water.js +467 -0
- package/dist/utility/serialization/scene/water.js.map +1 -0
- package/dist/utility/serialization/types.js +6 -0
- package/dist/utility/serialization/types.js.map +1 -0
- package/dist/utility/shprojector.js +313 -0
- package/dist/utility/shprojector.js.map +1 -0
- package/dist/utility/textures/ggxlut.js +4 -5
- package/dist/utility/textures/ggxlut.js.map +1 -1
- package/dist/utility/textures/gradientnoise.js +2 -1
- package/dist/utility/textures/gradientnoise.js.map +1 -1
- package/dist/utility/textures/randomnoise.js +1 -0
- package/dist/utility/textures/randomnoise.js.map +1 -1
- package/dist/values.js +103 -16
- package/dist/values.js.map +1 -1
- package/package.json +80 -66
- package/dist/app.js.map +0 -1
- package/dist/blitter/depthlimitedgaussion.js.map +0 -1
- package/dist/input/inputmgr.js.map +0 -1
- package/dist/material/mixins/ggxlut.js.map +0 -1
- package/dist/posteffect/water.js +0 -508
- package/dist/posteffect/water.js.map +0 -1
- package/dist/render/oit.js +0 -16
- package/dist/render/oit.js.map +0 -1
- package/dist/render/scatteringlut.js +0 -634
- package/dist/render/scatteringlut.js.map +0 -1
- package/dist/render/watermesh.js +0 -193
- package/dist/render/watermesh.js.map +0 -1
- package/dist/render/wavegenerator.js +0 -8
- package/dist/render/wavegenerator.js.map +0 -1
- package/dist/scene/xform.js +0 -247
- package/dist/scene/xform.js.map +0 -1
- package/dist/utility/shprojection.js +0 -442
- package/dist/utility/shprojection.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fft_wavegenerator.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"fft_wavegenerator.js","sources":["../../src/render/fft_wavegenerator.ts"],"sourcesContent":["import type { AABB, Immutable, Nullable } from '@zephyr3d/base';\r\nimport { Disposable, PRNG, Vector2, Vector4 } from '@zephyr3d/base';\r\nimport type { WaveGenerator } from './wavegenerator';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n FrameBuffer,\r\n GPUProgram,\r\n PBGlobalScope,\r\n PBInsideFunctionScope,\r\n PBShaderExp,\r\n RenderStateSet,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureCreationOptions,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport { Primitive } from './primitive';\r\nimport {\r\n createProgramFFT2H,\r\n createProgramFFT2V,\r\n createProgramH0,\r\n createProgramHk,\r\n createProgramPostFFT2\r\n} from '../shaders';\r\nimport { fetchSampler } from '../utility/misc';\r\nimport { getDevice } from '../app/api';\r\n\r\ntype OceanFieldCascade = {\r\n /** The size of simulated patch of field. (in meters) */\r\n size: number;\r\n /** How \"croppy\" this pattern would be */\r\n croppiness: number;\r\n /** Strength factor for this pattern */\r\n strength: number;\r\n /** Min wave length. Kind of spectrum filter. (Waves less that this thresold are not involved in spectrum generation) */\r\n minWave: number;\r\n /** Max wave length. Kind of spectrum filter. */\r\n maxWave: number;\r\n};\r\n\r\ntype OceanFieldBuildParams = {\r\n /** Size of generated texture. Must be power of 2 */\r\n resolution: number;\r\n /** Ocean field sub-pattern options. */\r\n cascades: [OceanFieldCascade, OceanFieldCascade, OceanFieldCascade];\r\n /** Wind vector. Module correspond to wind force. */\r\n wind: Vector2;\r\n /** Parameter for waves motion. 0 means no wave motion */\r\n alignment: number;\r\n /** Foam parameters */\r\n foamParams: Vector2;\r\n /** Seed of random generator */\r\n randomSeed: number;\r\n};\r\n\r\nfunction getDefaultBuildParams(): OceanFieldBuildParams {\r\n return {\r\n cascades: [\r\n {\r\n size: 400.0,\r\n strength: 0.4,\r\n croppiness: -1.5,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 100.0,\r\n strength: 0.4,\r\n croppiness: -1.2,\r\n minWave: 0,\r\n maxWave: 100\r\n },\r\n {\r\n size: 15,\r\n strength: 0.2,\r\n croppiness: -0.5,\r\n minWave: 0,\r\n maxWave: 7\r\n }\r\n ],\r\n resolution: 256,\r\n wind: new Vector2(2, 2),\r\n alignment: 1,\r\n foamParams: new Vector2(1.2, 7.2),\r\n randomSeed: 0\r\n };\r\n}\r\n\r\ntype Programs = {\r\n h0Program: GPUProgram;\r\n hkProgram: Nullable<GPUProgram>;\r\n hkProgram2: Nullable<GPUProgram>;\r\n hkProgram4: Nullable<GPUProgram>;\r\n fft2hProgram: Nullable<GPUProgram>;\r\n fft2hProgram2: Nullable<GPUProgram>;\r\n fft2hProgram4: Nullable<GPUProgram>;\r\n fft2vProgram: Nullable<GPUProgram>;\r\n fft2vProgram2: Nullable<GPUProgram>;\r\n fft2vProgram4: Nullable<GPUProgram>;\r\n postfft2Program: Nullable<GPUProgram>;\r\n postfft2Program2: Nullable<GPUProgram>;\r\n postfft2Program4: Nullable<GPUProgram>;\r\n};\r\n\r\ntype Globales = {\r\n programs: Programs;\r\n quad: Primitive;\r\n noiseTextures: Map<number, Texture2D>;\r\n butterflyTextures: Map<number, Texture2D>;\r\n};\r\n\r\ntype WaterInstanceData = {\r\n h0Framebuffer: Nullable<FrameBuffer>;\r\n h0Textures: Texture2D[] | Texture2DArray;\r\n spectrumFramebuffer: Nullable<FrameBuffer>;\r\n spectrumFramebuffer2: Nullable<FrameBuffer>;\r\n spectrumFramebuffer4: Nullable<FrameBuffer>;\r\n spectrumTextures: Texture2D[] | Texture2DArray;\r\n pingpongFramebuffer: Nullable<FrameBuffer>;\r\n pingpongFramebuffer2: Nullable<FrameBuffer>;\r\n pingpongFramebuffer4: Nullable<FrameBuffer>;\r\n pingpongTextures: Texture2D[] | Texture2DArray;\r\n postIfft2Framebuffer: Nullable<FrameBuffer>;\r\n postIfft2Framebuffer2: Nullable<FrameBuffer>;\r\n postIfft2Framebuffer4: Nullable<FrameBuffer>;\r\n dataTextures: Texture2D[] | Texture2DArray;\r\n};\r\n\r\nconst RENDER_NONE = 0;\r\nconst RENDER_NORMAL = 1;\r\nconst RENDER_TWO_PASS = 2;\r\n\r\nconst THREAD_GROUP_SIZE = 16;\r\n\r\n/**\r\n * This class generates a 2D ocean field using the Fast Fourier Transform (FFT) algorithm.\r\n * @public\r\n */\r\nexport class FFTWaveGenerator extends Disposable implements WaveGenerator {\r\n private static _globals: Nullable<Globales> = null;\r\n private readonly _useComputeShader: boolean;\r\n private readonly _h0BindGroup!: BindGroup;\r\n private readonly _hkBindGroup!: Nullable<BindGroup>;\r\n private readonly _hkBindGroup2!: Nullable<BindGroup>;\r\n private readonly _hkBindGroup4!: Nullable<BindGroup>;\r\n private readonly _fft2hBindGroup!: Nullable<BindGroup>;\r\n private readonly _fft2vBindGroup!: Nullable<BindGroup>;\r\n private readonly _fft2hBindGroup2Used!: BindGroup[][];\r\n private readonly _fft2hBindGroup2Free!: BindGroup[][];\r\n private readonly _fft2hBindGroup4Used!: BindGroup[][];\r\n private readonly _fft2hBindGroup4Free!: BindGroup[][];\r\n private readonly _fft2vBindGroup2Used!: BindGroup[][];\r\n private readonly _fft2vBindGroup2Free!: BindGroup[][];\r\n private readonly _fft2vBindGroup4Used!: BindGroup[][];\r\n private readonly _fft2vBindGroup4Free!: BindGroup[][];\r\n private readonly _postfft2BindGroup!: Nullable<BindGroup>;\r\n private readonly _postfft2BindGroup2!: Nullable<BindGroup>;\r\n private readonly _postfft2BindGroup4!: Nullable<BindGroup>;\r\n private readonly _updateRenderStates!: RenderStateSet;\r\n private _sizes!: Vector4;\r\n private _croppinesses!: Vector4;\r\n private readonly _params!: OceanFieldBuildParams;\r\n private _instanceData!: Nullable<WaterInstanceData>;\r\n private _ifftTextures!: Nullable<Texture2D[] | Texture2DArray>;\r\n private readonly _cascades!: Vector4[];\r\n private _paramsChanged!: boolean;\r\n private _version!: number;\r\n private _resolutionChanged!: boolean;\r\n private readonly _textureFormat: TextureFormat;\r\n private readonly _h0TextureFormat: TextureFormat;\r\n private readonly _dataTextureFormat: TextureFormat;\r\n private readonly _renderMode: number;\r\n /**\r\n * Create a new instance of the FFTWaveGenerator class.\r\n * @param params - Ocean field build parameters. If not provided, default parameters will be used.\r\n */\r\n constructor(params?: OceanFieldBuildParams) {\r\n super();\r\n const device = getDevice();\r\n const renderTargetFloat16 = device.getDeviceCaps().textureCaps.supportHalfFloatColorBuffer;\r\n const maxDrawBuffers = /*device.type !== 'webgl' && */ renderTargetFloat16\r\n ? device.getDeviceCaps().framebufferCaps.maxDrawBuffers\r\n : 0;\r\n this._textureFormat = 'rgba16f';\r\n this._h0TextureFormat = 'rgba16f';\r\n this._dataTextureFormat = 'rgba16f';\r\n this._useComputeShader = device.type === 'webgpu';\r\n const maxSampleBytes = device.getDeviceCaps().framebufferCaps.maxColorAttachmentBytesPerSample;\r\n if (maxDrawBuffers === 0) {\r\n this._renderMode = RENDER_NONE;\r\n } else if (this._useComputeShader || maxSampleBytes >= 48) {\r\n this._renderMode = RENDER_NORMAL;\r\n } else {\r\n this._renderMode = RENDER_TWO_PASS;\r\n }\r\n if (this._renderMode !== RENDER_NONE) {\r\n FFTWaveGenerator._globals = FFTWaveGenerator._globals ?? {\r\n programs: {\r\n h0Program: createProgramH0(this._useComputeShader, THREAD_GROUP_SIZE, this._h0TextureFormat),\r\n hkProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramHk(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n hkProgram2: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, undefined, 2) : null,\r\n hkProgram4: this._renderMode === RENDER_TWO_PASS ? createProgramHk(false, 0, undefined, 4) : null,\r\n fft2hProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2H(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2hProgram2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, undefined, 2) : null,\r\n fft2hProgram4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2H(false, 0, undefined, 4) : null,\r\n fft2vProgram:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramFFT2V(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n fft2vProgram2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, undefined, 2) : null,\r\n fft2vProgram4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramFFT2V(false, 0, undefined, 4) : null,\r\n postfft2Program:\r\n this._renderMode === RENDER_NORMAL\r\n ? createProgramPostFFT2(this._useComputeShader, THREAD_GROUP_SIZE, this._dataTextureFormat)\r\n : null,\r\n postfft2Program2:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, undefined, 2) : null,\r\n postfft2Program4:\r\n this._renderMode === RENDER_TWO_PASS ? createProgramPostFFT2(false, 0, undefined, 4) : null\r\n },\r\n quad: FFTWaveGenerator.createQuad(),\r\n noiseTextures: new Map(),\r\n butterflyTextures: new Map()\r\n };\r\n this._params = params ?? getDefaultBuildParams();\r\n const programs = FFTWaveGenerator._globals.programs;\r\n this._h0BindGroup = device.createBindGroup(programs.h0Program.bindGroupLayouts[0]);\r\n this._hkBindGroup = programs.hkProgram\r\n ? device.createBindGroup(programs.hkProgram.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup2 = programs.hkProgram2\r\n ? device.createBindGroup(programs.hkProgram2.bindGroupLayouts[0])\r\n : null;\r\n this._hkBindGroup4 = programs.hkProgram4\r\n ? device.createBindGroup(programs.hkProgram4.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup = programs.fft2hProgram\r\n ? device.createBindGroup(programs.fft2hProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2vBindGroup = programs.fft2vProgram\r\n ? device.createBindGroup(programs.fft2vProgram.bindGroupLayouts[0])\r\n : null;\r\n this._fft2hBindGroup2Used = [[], []];\r\n this._fft2hBindGroup2Free = [[], []];\r\n this._fft2hBindGroup4Used = [[], []];\r\n this._fft2hBindGroup4Free = [[], []];\r\n this._fft2vBindGroup2Used = [[], []];\r\n this._fft2vBindGroup2Free = [[], []];\r\n this._fft2vBindGroup4Used = [[], []];\r\n this._fft2vBindGroup4Free = [[], []];\r\n this._postfft2BindGroup = programs.postfft2Program\r\n ? device.createBindGroup(programs.postfft2Program.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup2 = programs.postfft2Program2\r\n ? device.createBindGroup(programs.postfft2Program2.bindGroupLayouts[0])\r\n : null;\r\n this._postfft2BindGroup4 = programs.postfft2Program4\r\n ? device.createBindGroup(programs.postfft2Program4.bindGroupLayouts[0])\r\n : null;\r\n this._instanceData = null;\r\n this._ifftTextures = null;\r\n this._sizes = new Vector4();\r\n this._croppinesses = new Vector4();\r\n this._cascades = [new Vector4(), new Vector4(), new Vector4(), new Vector4()];\r\n this._updateRenderStates = getDevice().createRenderStateSet();\r\n this._updateRenderStates.useRasterizerState().setCullMode('none');\r\n this._updateRenderStates.useDepthState().enableTest(false).enableWrite(false);\r\n this._version = 0;\r\n this.paramsChanged();\r\n }\r\n }\r\n get version() {\r\n return this._version;\r\n }\r\n clone() {\r\n return new FFTWaveGenerator(this._params) as this;\r\n }\r\n /*\r\n get params() {\r\n return this._params;\r\n }\r\n set params(val: OceanFieldBuildParams) {\r\n if (val && val !== this._params) {\r\n this._params = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n */\r\n private paramsChanged() {\r\n this._paramsChanged = true;\r\n this._version++;\r\n }\r\n /** Gets the wave alighment */\r\n get alignment() {\r\n return this._params.alignment;\r\n }\r\n set alignment(val) {\r\n if (this._params.alignment !== val) {\r\n this._params.alignment = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wind vector */\r\n get wind(): Immutable<Vector2> {\r\n return this._params.wind;\r\n }\r\n set wind(val: Immutable<Vector2>) {\r\n if (val !== this._params.wind && (val.x !== this._params.wind.x || val.y !== this._params.wind.y)) {\r\n this._params.wind.x = val.x;\r\n this._params.wind.y = val.y;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam width */\r\n get foamWidth() {\r\n return this._params.foamParams.x;\r\n }\r\n set foamWidth(val) {\r\n if (val !== this._params.foamParams.x) {\r\n this._params.foamParams.x = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the foam contrast */\r\n get foamContrast() {\r\n return this._params.foamParams.y;\r\n }\r\n set foamContrast(val) {\r\n if (val !== this._params.foamParams.y) {\r\n this._params.foamParams.y = val;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave length for the specified cascade */\r\n getWaveLength(cascade: number) {\r\n return this._params.cascades[cascade].size;\r\n }\r\n /**\r\n * Sets the wave length for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param length - The new wave length for the specified cascade\r\n */\r\n setWaveLength(cascade: number, length: number) {\r\n if (this._params.cascades[cascade].size !== length) {\r\n this._params.cascades[cascade].size = length;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave strength for the specified cascade */\r\n getWaveStrength(cascade: number) {\r\n return this._params.cascades[cascade].strength;\r\n }\r\n /**\r\n * Sets the wave strength for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param strength - The new wave strength for the specified cascade\r\n */\r\n setWaveStrength(cascade: number, strength: number) {\r\n if (this._params.cascades[cascade].strength !== strength) {\r\n this._params.cascades[cascade].strength = strength;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** Gets the wave croppiness for the specified cascade */\r\n getWaveCroppiness(cascade: number) {\r\n return this._params.cascades[cascade].croppiness;\r\n }\r\n /**\r\n * Sets the wave croppiness for the specified cascade\r\n * @param cascade - The cascade index\r\n * @param croppiness - The new wave croppiness for the specified cascade\r\n */\r\n setWaveCroppiness(cascade: number, croppiness: number) {\r\n if (this._params.cascades[cascade].croppiness !== croppiness) {\r\n this._params.cascades[cascade].croppiness = croppiness;\r\n this.paramsChanged();\r\n }\r\n }\r\n /** @internal */\r\n private static createQuad() {\r\n const vertexData = new Float32Array([\r\n -1, -1, 0, 0.0, 0.0, 1, -1, 0, 1.0, 0.0, 1, 1, 0, 1.0, 1.0, -1, 1, 0, 0.0, 1.0\r\n ]);\r\n const indexData = new Uint32Array([0, 1, 2, 0, 2, 3]);\r\n const prim = new Primitive();\r\n prim.createAndSetVertexBuffer(['position_f32x3', 'tex0_f32x2'], vertexData);\r\n prim.createAndSetIndexBuffer(indexData);\r\n prim.primitiveType = 'triangle-list';\r\n prim.indexStart = 0;\r\n prim.indexCount = indexData.length;\r\n return prim;\r\n }\r\n /** @internal */\r\n private getButterflyTexture(size: number) {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals!.butterflyTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D('rgba32f', Math.log2(size), size, {\r\n mipmapping: false\r\n })!;\r\n tex.name = `butterfly${size}`;\r\n tex.update(this.createButterflyTexture(size), 0, 0, tex.width, tex.height);\r\n FFTWaveGenerator._globals!.butterflyTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private generateInitialSpectrum() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n device.setProgram(FFTWaveGenerator._globals!.programs.h0Program);\r\n device.setBindGroup(0, this._h0BindGroup);\r\n this._h0BindGroup.setTexture(\r\n 'noise',\r\n this.getNoiseTexture(this._params.resolution, this._params.randomSeed),\r\n fetchSampler('repeat_nearest_nomip')\r\n );\r\n this._h0BindGroup.setValue('resolution', this._params.resolution);\r\n this._h0BindGroup.setValue('wind', this._params.wind);\r\n this._h0BindGroup.setValue('alignment', this._params.alignment);\r\n for (let i = 0; i < this._params.cascades.length; i++) {\r\n this._cascades[i].x = this._params.cascades[i].size;\r\n this._cascades[i].y =\r\n (this._params.cascades[i].strength * 0.081) /\r\n (this._params.cascades[i].size * this._params.cascades[i].size);\r\n this._cascades[i].z = (2 * Math.PI) / this._params.cascades[i].maxWave;\r\n this._cascades[i].w = (2 * Math.PI) / this._params.cascades[i].minWave;\r\n }\r\n this._h0BindGroup.setValue('cascade0', this._cascades[0]);\r\n this._h0BindGroup.setValue('cascade1', this._cascades[1]);\r\n this._h0BindGroup.setValue('cascade2', this._cascades[2]);\r\n if (device.type === 'webgpu') {\r\n this._h0BindGroup.setTexture('spectrum', instanceData.h0Textures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n device.setFramebuffer(instanceData.h0Framebuffer);\r\n device.clearFrameBuffer(Vector4.zero(), null, null);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private getNoiseTexture(size: number, randomSeed: number) {\r\n const device = getDevice();\r\n let tex = FFTWaveGenerator._globals!.noiseTextures.get(size);\r\n if (!tex) {\r\n tex = device.createTexture2D(device.type === 'webgl' ? 'rgba32f' : 'rg32f', size, size, {\r\n mipmapping: false\r\n })!;\r\n tex.name = `noiseTex${size}`;\r\n tex.update(this.getNoise2d(size, randomSeed, device.type === 'webgl'), 0, 0, size, size);\r\n FFTWaveGenerator._globals!.noiseTextures.set(size, tex);\r\n }\r\n return tex;\r\n }\r\n /** @internal */\r\n private getNoise2d(size: number, randomSeed: number, rgba: boolean) {\r\n const rand = new PRNG(randomSeed);\r\n if (rgba) {\r\n const array = new Float32Array(size * size * 4);\r\n for (let i = 0; i < size * size; i++) {\r\n array[i * 4 + 0] = rand.get();\r\n array[i * 4 + 1] = rand.get();\r\n }\r\n return array;\r\n } else {\r\n return Float32Array.from([...Array(size * size * 2)].map(() => rand.get()));\r\n }\r\n }\r\n /** @internal */\r\n private reverseBits(v: number, width: number) {\r\n return parseInt(v.toString(2).padStart(width, '0').split('').reverse().join(''), 2);\r\n }\r\n /** @internal */\r\n private createButterflyTexture(size: number) {\r\n const width = Math.log2(size);\r\n const height = size;\r\n const texture = new Float32Array(width * height * 4);\r\n const w = (2.0 * Math.PI) / size;\r\n const bitReversed = [...Array(size).keys()].map((v) => this.reverseBits(v, width));\r\n\r\n for (let j = 0; j < width; j++) {\r\n for (let i = 0; i < height; i++) {\r\n const k = i * (size >> (j + 1));\r\n const c = Math.cos(k * w);\r\n const s = Math.sin(k * w);\r\n const span = 2 ** j;\r\n const wing = i % 2 ** (j + 1) < span ? 0 : 1; // 0 - top wing, 1 - bottom wing\r\n const texel = new Vector4();\r\n if (j === 0) {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, bitReversed[i], bitReversed[i + 1]);\r\n } else {\r\n texel.setXYZW(c, s, bitReversed[i - 1], bitReversed[i]);\r\n }\r\n } else {\r\n if (wing === 0) {\r\n texel.setXYZW(c, s, i, i + span);\r\n } else {\r\n texel.setXYZW(c, s, i - span, i);\r\n }\r\n }\r\n\r\n texture[(width * i + j) * 4] = texel[0];\r\n texture[(width * i + j) * 4 + 1] = texel[1];\r\n texture[(width * i + j) * 4 + 2] = texel[2];\r\n texture[(width * i + j) * 4 + 3] = texel[3];\r\n }\r\n }\r\n return texture;\r\n }\r\n /** @internal */\r\n private getInstanceData() {\r\n if (!this._instanceData) {\r\n const device = getDevice();\r\n const h0Textures = this.createNTextures(\r\n device,\r\n this._h0TextureFormat,\r\n this._params.resolution,\r\n 3,\r\n 'Water-h0',\r\n false\r\n );\r\n const dataTextures = this.createNTextures(\r\n device,\r\n this._dataTextureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-data',\r\n true\r\n );\r\n const spectrumTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-spectrum',\r\n true\r\n );\r\n const pingpongTextures = this.createNTextures(\r\n device,\r\n this._textureFormat,\r\n this._params.resolution,\r\n 6,\r\n 'Water-pingpong',\r\n false\r\n );\r\n this._instanceData = {\r\n dataTextures,\r\n h0Textures: h0Textures,\r\n pingpongTextures: pingpongTextures,\r\n spectrumTextures: spectrumTextures,\r\n h0Framebuffer: this._useComputeShader\r\n ? null\r\n : device.createFrameBuffer(h0Textures as Texture2D[], null),\r\n spectrumFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(spectrumTextures as Texture2D[], null)\r\n : null,\r\n spectrumFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n spectrumFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((spectrumTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n pingpongFramebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(pingpongTextures as Texture2D[], null)\r\n : null,\r\n pingpongFramebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n pingpongFramebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((pingpongTextures as Texture2D[]).slice(0, 4), null)\r\n : null,\r\n postIfft2Framebuffer:\r\n !this._useComputeShader && this._renderMode === RENDER_NORMAL\r\n ? device.createFrameBuffer(dataTextures as Texture2D[], null)\r\n : null,\r\n postIfft2Framebuffer2:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(4, 6), null)\r\n : null,\r\n postIfft2Framebuffer4:\r\n this._renderMode === RENDER_TWO_PASS\r\n ? device.createFrameBuffer((dataTextures as Texture2D[]).slice(0, 4), null)\r\n : null\r\n };\r\n }\r\n return this._instanceData;\r\n }\r\n /** @internal */\r\n private createNTextures(\r\n device: AbstractDevice,\r\n format: TextureFormat,\r\n size: number,\r\n num: number,\r\n name: string,\r\n linear: boolean\r\n ) {\r\n const options: TextureCreationOptions = {\r\n samplerOptions: {\r\n minFilter: linear ? 'linear' : 'nearest',\r\n magFilter: linear ? 'linear' : 'nearest',\r\n mipFilter: 'none',\r\n addressU: 'repeat',\r\n addressV: 'repeat'\r\n },\r\n writable: !!this._useComputeShader,\r\n mipmapping: false\r\n };\r\n if (this._useComputeShader) {\r\n const tex = device.createTexture2DArray(format, size, size, num, options)!;\r\n tex.name = name;\r\n return tex;\r\n } else {\r\n return Array.from({ length: num }).map((val, index) => {\r\n const tex = device.createTexture2D(format, size, size, options)!;\r\n tex.name = `${name}-${index}`;\r\n return tex;\r\n });\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.update} */\r\n update(time: number) {\r\n const device = getDevice();\r\n device.pushDeviceStates();\r\n device.setRenderStates(this._updateRenderStates);\r\n if (this._resolutionChanged) {\r\n this.disposeInstanceData();\r\n }\r\n if (this._paramsChanged) {\r\n this.generateInitialSpectrum();\r\n }\r\n this._resolutionChanged = false;\r\n this._paramsChanged = false;\r\n for (let i = 0; i < 3; i++) {\r\n this._sizes[i] = this._params.cascades[i].size;\r\n this._croppinesses[i] = this._params.cascades[i].croppiness;\r\n }\r\n if (this._renderMode === RENDER_NORMAL) {\r\n this.generateSpectrum(time);\r\n this.ifft2();\r\n this.postIfft2();\r\n } else {\r\n this.generateSpectrumTwoPass(time);\r\n this.ifft2TwoPass();\r\n this.postIfft2TwoPass();\r\n }\r\n device.popDeviceStates();\r\n }\r\n /** {@inheritDoc WaveGenerator.needUpdate} */\r\n needUpdate() {\r\n return true;\r\n }\r\n /** @internal */\r\n private disposeNTextures(texture: Nullable<Texture2D[] | Texture2DArray>) {\r\n if (Array.isArray(texture)) {\r\n texture.forEach((tex) => tex.dispose());\r\n } else if (texture) {\r\n texture.dispose();\r\n }\r\n }\r\n /** @internal */\r\n private disposeInstanceData() {\r\n if (this._instanceData) {\r\n this.disposeNTextures(this._instanceData.dataTextures);\r\n this.disposeNTextures(this._instanceData.h0Textures);\r\n this.disposeNTextures(this._instanceData.pingpongTextures);\r\n this.disposeNTextures(this._instanceData.spectrumTextures);\r\n this._instanceData.h0Framebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer?.dispose();\r\n this._instanceData.pingpongFramebuffer2?.dispose();\r\n this._instanceData.pingpongFramebuffer4?.dispose();\r\n this._instanceData.spectrumFramebuffer?.dispose();\r\n this._instanceData.spectrumFramebuffer2?.dispose();\r\n this._instanceData.spectrumFramebuffer4?.dispose();\r\n this._instanceData.postIfft2Framebuffer?.dispose();\r\n this._instanceData.postIfft2Framebuffer2?.dispose();\r\n this._instanceData.postIfft2Framebuffer4?.dispose();\r\n this._instanceData = null;\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrum(time: number) {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram);\r\n device.setBindGroup(0, this._hkBindGroup!);\r\n this._hkBindGroup!.setValue('t', time);\r\n this._hkBindGroup!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup!.setValue('sizes', this._sizes);\r\n if (this._useComputeShader) {\r\n this._hkBindGroup!.setTexture('h0Texture', instanceData.h0Textures as Texture2DArray);\r\n this._hkBindGroup!.setTexture('spectrum', instanceData.spectrumTextures as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const h0Textures = instanceData.h0Textures as Texture2D[];\r\n this._hkBindGroup!.setTexture('h0Texture0', h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup!.setTexture('h0Texture1', h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup!.setTexture('h0Texture2', h0Textures[2], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup!.setValue('h0TexSize', new Vector2(h0Textures[0].width, h0Textures[0].height));\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private generateSpectrumTwoPass(time: number) {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram4);\r\n device.setBindGroup(0, this._hkBindGroup4!);\r\n const h0Textures = instanceData.h0Textures as Texture2D[];\r\n this._hkBindGroup4!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup4!.setValue('sizes', this._sizes);\r\n this._hkBindGroup4!.setTexture('h0Texture0', h0Textures[0], nearestRepeatSampler);\r\n this._hkBindGroup4!.setTexture('h0Texture1', h0Textures[1], nearestRepeatSampler);\r\n this._hkBindGroup4!.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup4!.setValue('h0TexSize', new Vector2(h0Textures[0].width, h0Textures[0].height));\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer4);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n\r\n device.setProgram(FFTWaveGenerator._globals!.programs.hkProgram2);\r\n device.setBindGroup(0, this._hkBindGroup2!);\r\n this._hkBindGroup2!.setValue('resolution', this._params.resolution);\r\n this._hkBindGroup2!.setValue('sizes', this._sizes);\r\n this._hkBindGroup2!.setTexture('h0Texture2', h0Textures[2], nearestRepeatSampler);\r\n this._hkBindGroup2!.setValue('t', time);\r\n if (device.type === 'webgl') {\r\n this._hkBindGroup2!.setValue('h0TexSize', new Vector2(h0Textures[0].width, h0Textures[0].height));\r\n }\r\n device.setFramebuffer(instanceData.spectrumFramebuffer2);\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n /** @internal */\r\n private ifft2() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures: [Texture2D[] | Texture2DArray, Texture2D[] | Texture2DArray] = [\r\n instanceData.spectrumTextures,\r\n instanceData.pingpongTextures\r\n ];\r\n const pingPongFramebuffers: [\r\n Nullable<FrameBuffer> | Texture2DArray,\r\n Nullable<FrameBuffer> | Texture2DArray\r\n ] = this._useComputeShader\r\n ? [instanceData.pingpongTextures as Texture2DArray, instanceData.spectrumTextures as Texture2DArray]\r\n : [instanceData.pingpongFramebuffer, instanceData.spectrumFramebuffer];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n let pingPong = 0;\r\n\r\n // horizontal ifft\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram);\r\n device.setBindGroup(0, this._fft2hBindGroup!);\r\n this._fft2hBindGroup!.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2hBindGroup!.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2hBindGroup!.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2hBindGroup!.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const pingPongTexture = pingPongTextures[pingPong] as Texture2D[];\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2hBindGroup!.setTexture('spectrum0', pingPongTexture[0], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum1', pingPongTexture[1], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum2', pingPongTexture[2], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum3', pingPongTexture[3], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum4', pingPongTexture[4], nearestRepeatSampler);\r\n this._fft2hBindGroup!.setTexture('spectrum5', pingPongTexture[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2hBindGroup!.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTexture[0].width,\r\n pingPongTexture[0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n pingPong = 1 - pingPong; //(pingPong + 1) % 2;\r\n }\r\n // vertical ifft\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram);\r\n device.setBindGroup(0, this._fft2vBindGroup!);\r\n this._fft2vBindGroup!.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n for (let phase = 0; phase < phases; phase++) {\r\n this._fft2vBindGroup!.setValue('phase', phase);\r\n if (this._useComputeShader) {\r\n this._fft2vBindGroup!.setTexture(\r\n 'spectrum',\r\n pingPongTextures[pingPong] as Texture2DArray,\r\n nearestRepeatSampler\r\n );\r\n this._fft2vBindGroup!.setTexture('ifft', pingPongFramebuffers[pingPong] as Texture2DArray);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const pingPongTexture = pingPongTextures[pingPong] as Texture2D[];\r\n device.setFramebuffer(pingPongFramebuffers[pingPong] as FrameBuffer);\r\n this._fft2vBindGroup!.setTexture('spectrum0', pingPongTexture[0], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum1', pingPongTexture[1], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum2', pingPongTexture[2], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum3', pingPongTexture[3], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum4', pingPongTexture[4], nearestRepeatSampler);\r\n this._fft2vBindGroup!.setTexture('spectrum5', pingPongTexture[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._fft2vBindGroup!.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTexture[0].width,\r\n pingPongTexture[0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n pingPong = 1 - pingPong;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup2(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2hBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2hProgram2!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2hBindGroup4(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2hBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2hProgram4!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2hBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup2(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2vBindGroup2Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2vProgram2!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup2Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private getFFT2vBindGroup4(device: AbstractDevice, pingpong: number) {\r\n let bindGroup = this._fft2vBindGroup4Used[pingpong].pop();\r\n if (!bindGroup) {\r\n bindGroup = device.createBindGroup(\r\n FFTWaveGenerator._globals!.programs.fft2vProgram4!.bindGroupLayouts[0]\r\n );\r\n }\r\n this._fft2vBindGroup4Free[pingpong].push(bindGroup);\r\n return bindGroup;\r\n }\r\n /** @internal */\r\n private ifft2TwoPass() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n const phases = Math.log2(this._params.resolution);\r\n const pingPongTextures = [\r\n instanceData.spectrumTextures as Texture2D[],\r\n instanceData.pingpongTextures as Texture2D[]\r\n ];\r\n const pingPongFramebuffers4: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer4!,\r\n instanceData.spectrumFramebuffer4!\r\n ];\r\n const pingPongFramebuffers2: [FrameBuffer, FrameBuffer] = [\r\n instanceData.pingpongFramebuffer2!,\r\n instanceData.spectrumFramebuffer2!\r\n ];\r\n const butterflyTex = this.getButterflyTexture(this._params.resolution);\r\n\r\n // horizontal ifft\r\n let pingPong = 0;\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram4);\r\n const fft2hBindGroup4 = this.getFFT2hBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup4);\r\n fft2hBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup4.setValue('phase', phase);\r\n fft2hBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2hBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2hProgram2);\r\n const fft2hBindGroup2 = this.getFFT2hBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2hBindGroup2);\r\n fft2hBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2hBindGroup2.setValue('phase', phase);\r\n fft2hBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2hBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2hBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n\r\n // vertical ifft\r\n for (let phase = 0; phase < phases; phase++) {\r\n device.setFramebuffer(pingPongFramebuffers4[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram4);\r\n const fft2vBindGroup4 = this.getFFT2vBindGroup4(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup4);\r\n fft2vBindGroup4.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup4.setValue('phase', phase);\r\n fft2vBindGroup4.setTexture('spectrum0', pingPongTextures[pingPong][0], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum1', pingPongTextures[pingPong][1], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum2', pingPongTextures[pingPong][2], nearestRepeatSampler);\r\n fft2vBindGroup4.setTexture('spectrum3', pingPongTextures[pingPong][3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup4.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(pingPongFramebuffers2[pingPong]);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.fft2vProgram2);\r\n const fft2vBindGroup2 = this.getFFT2vBindGroup2(device, pingPong);\r\n device.setBindGroup(0, fft2vBindGroup2);\r\n fft2vBindGroup2.setTexture('butterfly', butterflyTex, nearestRepeatSampler);\r\n fft2vBindGroup2.setValue('phase', phase);\r\n fft2vBindGroup2.setTexture('spectrum4', pingPongTextures[pingPong][4], nearestRepeatSampler);\r\n fft2vBindGroup2.setTexture('spectrum5', pingPongTextures[pingPong][5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n fft2vBindGroup2.setValue(\r\n 'texSize',\r\n new Vector4(\r\n pingPongTextures[pingPong][0].width,\r\n pingPongTextures[pingPong][0].height,\r\n butterflyTex.width,\r\n butterflyTex.height\r\n )\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n pingPong = (pingPong + 1) % 2;\r\n }\r\n this._ifftTextures = pingPongTextures[pingPong];\r\n for (let i = 0; i < 2; i++) {\r\n this._fft2hBindGroup2Used[i].push(...this._fft2hBindGroup2Free[i]);\r\n this._fft2hBindGroup2Free[i].length = 0;\r\n this._fft2hBindGroup4Used[i].push(...this._fft2hBindGroup4Free[i]);\r\n this._fft2hBindGroup4Free[i].length = 0;\r\n this._fft2vBindGroup2Used[i].push(...this._fft2vBindGroup2Free[i]);\r\n this._fft2vBindGroup2Free[i].length = 0;\r\n this._fft2vBindGroup4Used[i].push(...this._fft2vBindGroup4Free[i]);\r\n this._fft2vBindGroup4Free[i].length = 0;\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program);\r\n device.setBindGroup(0, this._postfft2BindGroup!);\r\n this._postfft2BindGroup!.setValue('N2', this._params.resolution * this._params.resolution);\r\n if (this._useComputeShader) {\r\n this._postfft2BindGroup!.setTexture('output', instanceData.dataTextures as Texture2DArray);\r\n this._postfft2BindGroup!.setTexture('ifft', this._ifftTextures as Texture2DArray, nearestRepeatSampler);\r\n device.compute(\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n this._params.resolution / THREAD_GROUP_SIZE,\r\n 1\r\n );\r\n } else {\r\n const ifftTextures = this._ifftTextures as Texture2D[];\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer);\r\n this._postfft2BindGroup!.setTexture('ifft0', ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft1', ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft2', ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft3', ifftTextures[3], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft4', ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup!.setTexture('ifft5', ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup!.setValue(\r\n 'ifftTexSize',\r\n new Vector2(ifftTextures[0].width, ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n }\r\n /** @internal */\r\n private postIfft2TwoPass() {\r\n const device = getDevice();\r\n const instanceData = this.getInstanceData();\r\n const nearestRepeatSampler = fetchSampler('repeat_nearest_nomip');\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer4);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program4);\r\n device.setBindGroup(0, this._postfft2BindGroup4!);\r\n const ifftTextures = this._ifftTextures as Texture2D[];\r\n this._postfft2BindGroup4!.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup4!.setTexture('ifft0', ifftTextures[0], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft1', ifftTextures[1], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft2', ifftTextures[2], nearestRepeatSampler);\r\n this._postfft2BindGroup4!.setTexture('ifft3', ifftTextures[3], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup4!.setValue(\r\n 'ifftTexSize',\r\n new Vector2(ifftTextures[0].width, ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n device.setFramebuffer(instanceData.postIfft2Framebuffer2);\r\n device.setProgram(FFTWaveGenerator._globals!.programs.postfft2Program2);\r\n device.setBindGroup(0, this._postfft2BindGroup2!);\r\n this._postfft2BindGroup2!.setValue('N2', this._params.resolution * this._params.resolution);\r\n this._postfft2BindGroup2!.setTexture('ifft4', ifftTextures[4], nearestRepeatSampler);\r\n this._postfft2BindGroup2!.setTexture('ifft5', ifftTextures[5], nearestRepeatSampler);\r\n if (device.type === 'webgl') {\r\n this._postfft2BindGroup2!.setValue(\r\n 'ifftTexSize',\r\n new Vector2(ifftTextures[0].width, ifftTextures[0].height)\r\n );\r\n }\r\n FFTWaveGenerator._globals!.quad.draw();\r\n }\r\n /** {@inheritDoc WaveGenerator.setupUniforms} */\r\n setupUniforms(scope: PBGlobalScope, uniformGroup: number) {\r\n const pb = scope.$builder;\r\n scope.sizes = pb.vec4().uniform(uniformGroup);\r\n scope.croppinesses = pb.vec4().uniform(uniformGroup);\r\n if (this._useComputeShader) {\r\n scope.dataTexture = pb.tex2DArray().uniform(uniformGroup);\r\n } else {\r\n scope.dx_hy_dz_dxdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz0 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz1 = pb.tex2D().uniform(uniformGroup);\r\n scope.dx_hy_dz_dxdz2 = pb.tex2D().uniform(uniformGroup);\r\n scope.sx_sz_dxdx_dzdz2 = pb.tex2D().uniform(uniformGroup);\r\n }\r\n if (pb.shaderKind === 'fragment') {\r\n scope.foamParams = pb.vec2().uniform(uniformGroup);\r\n }\r\n }\r\n /** {@inheritDoc WaveGenerator.calcVertexPositionAndNormal} */\r\n calcVertexPositionAndNormal(\r\n scope: PBInsideFunctionScope,\r\n inPos: PBShaderExp,\r\n outPos: PBShaderExp,\r\n outNormal: PBShaderExp\r\n ) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func(\r\n 'calcPositionAndNormal',\r\n [pb.vec3('inPos'), pb.vec3('outPos').out(), pb.vec3('outNormal').out()],\r\n function () {\r\n this.$l.xz = this.inPos.xz;\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 (that._useComputeShader) {\r\n this.$l.a = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n } else {\r\n this.$l.a = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).rgb,\r\n pb.vec3(this.croppinesses.x, 1, this.croppinesses.x)\r\n );\r\n this.$l.b = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).rgb,\r\n pb.vec3(this.croppinesses.y, 1, this.croppinesses.y)\r\n );\r\n this.$l.c = pb.mul(\r\n pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).rgb,\r\n pb.vec3(this.croppinesses.z, 1, this.croppinesses.z)\r\n );\r\n }\r\n this.$l.displacement = pb.add(this.a, this.b, this.c);\r\n this.outPos = pb.add(this.inPos, this.displacement);\r\n this.outNormal = pb.vec3(0, 1, 0);\r\n }\r\n );\r\n scope.calcPositionAndNormal(inPos, outPos, outNormal);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormal} */\r\n calcFragmentNormal(scope: PBInsideFunctionScope, xz: PBShaderExp, _vertexNormal: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('calcFragmentNormal', [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 (that._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.calcFragmentNormal(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */\r\n calcFragmentNormalAndFoam(scope: PBInsideFunctionScope, xz: PBShaderExp) {\r\n const pb = scope.$builder;\r\n const that = this;\r\n pb.func('jacobian', [pb.float('dxdx'), pb.float('dxdz'), pb.float('dzdz')], function () {\r\n this.$l.Jxx = pb.add(this.dxdx, 1);\r\n this.$l.Jxz = this.dxdz;\r\n this.$l.Jzz = pb.add(this.dzdz, 1);\r\n this.$return(pb.vec4(this.Jxx, this.Jxz, this.Jxz, this.Jzz));\r\n });\r\n pb.func('det', [pb.vec4('jacobian')], function () {\r\n this.$return(\r\n pb.sub(pb.mul(this.jacobian.x, this.jacobian.w), pb.mul(this.jacobian.y, this.jacobian.z))\r\n );\r\n });\r\n pb.func('calcNormalAndFoam', [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 (that._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\r\n // foam\r\n this.$l.dxdx_dzdz0 = this._sx_sz_dxdx_dzdz0.zw;\r\n this.$l.dxdx_dzdz1 = this._sx_sz_dxdx_dzdz1.zw;\r\n this.$l.dxdx_dzdz2 = this._sx_sz_dxdx_dzdz2.zw;\r\n if (that._useComputeShader) {\r\n this.$l.dxdz0 = pb.textureArraySampleLevel(this.dataTexture, this.uv0, 0, 0).w;\r\n this.$l.dxdz1 = pb.textureArraySampleLevel(this.dataTexture, this.uv1, 2, 0).w;\r\n this.$l.dxdz2 = pb.textureArraySampleLevel(this.dataTexture, this.uv2, 4, 0).w;\r\n } else {\r\n this.$l.dxdz0 = pb.textureSampleLevel(this.dx_hy_dz_dxdz0, this.uv0, 0).w;\r\n this.$l.dxdz1 = pb.textureSampleLevel(this.dx_hy_dz_dxdz1, this.uv1, 0).w;\r\n this.$l.dxdz2 = pb.textureSampleLevel(this.dx_hy_dz_dxdz2, this.uv2, 0).w;\r\n }\r\n this.$l.dxdz = pb.add(\r\n pb.mul(this.dxdz0, this.croppinesses.x),\r\n pb.mul(this.dxdz1, this.croppinesses.y),\r\n pb.mul(this.dxdz2, this.croppinesses.z)\r\n );\r\n this.$l.val = this.det(this.jacobian(this.dxdx_dzdz.x, this.dxdz, this.dxdx_dzdz.y));\r\n this.$l.foam = pb.abs(\r\n pb.pow(pb.neg(pb.min(0, pb.sub(this.val, this.foamParams.x))), this.foamParams.y)\r\n );\r\n this.$return(pb.vec4(this.normal, this.foam));\r\n });\r\n return scope.calcNormalAndFoam(xz) as PBShaderExp;\r\n }\r\n /** {@inheritDoc WaveGenerator.isOk} */\r\n isOk() {\r\n return this._renderMode !== RENDER_NONE;\r\n }\r\n /** {@inheritDoc WaveGenerator.applyWaterBindGroup} */\r\n applyWaterBindGroup(bindGroup: BindGroup) {\r\n const instanceData = this.getInstanceData();\r\n const linearRepeatSampler = fetchSampler('repeat_linear_nomip');\r\n if (this._useComputeShader) {\r\n bindGroup.setTexture('dataTexture', instanceData.dataTextures as Texture2DArray, linearRepeatSampler);\r\n } else {\r\n const dataTextures = instanceData.dataTextures as Texture2D[];\r\n bindGroup.setTexture('dx_hy_dz_dxdz0', dataTextures[0], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz0', dataTextures[1], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz1', dataTextures[2], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz1', dataTextures[3], linearRepeatSampler);\r\n bindGroup.setTexture('dx_hy_dz_dxdz2', dataTextures[4], linearRepeatSampler);\r\n bindGroup.setTexture('sx_sz_dxdx_dzdz2', dataTextures[5], linearRepeatSampler);\r\n }\r\n bindGroup.setValue('foamParams', this._params.foamParams);\r\n bindGroup.setValue('sizes', this._sizes);\r\n bindGroup.setValue('croppinesses', this._croppinesses);\r\n }\r\n /** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */\r\n calcClipmapTileAABB(minX: number, maxX: number, minZ: number, maxZ: number, y: number, outAABB: AABB) {\r\n const disturb = Math.max(Math.abs(this.wind.x), Math.abs(this.wind.y), 2);\r\n outAABB.minPoint.setXYZ(minX - 8 * disturb, y - 8 * disturb, minZ - 8 * disturb);\r\n outAABB.maxPoint.setXYZ(maxX + 8 * disturb, y + 8 * disturb, maxZ + 8 * disturb);\r\n }\r\n /** {@inheritDoc WaveGenerator.getHash} */\r\n getHash() {\r\n return 'FFTWaveGenerator';\r\n }\r\n protected onDispose() {\r\n super.onDispose();\r\n this.disposeInstanceData();\r\n }\r\n}\r\n"],"names":["getDefaultBuildParams","cascades","size","strength","croppiness","minWave","maxWave","resolution","wind","Vector2","alignment","foamParams","randomSeed","RENDER_NONE","RENDER_NORMAL","RENDER_TWO_PASS","THREAD_GROUP_SIZE","FFTWaveGenerator","Disposable","_globals","_useComputeShader","_h0BindGroup","_hkBindGroup","_hkBindGroup2","_hkBindGroup4","_fft2hBindGroup","_fft2vBindGroup","_fft2hBindGroup2Used","_fft2hBindGroup2Free","_fft2hBindGroup4Used","_fft2hBindGroup4Free","_fft2vBindGroup2Used","_fft2vBindGroup2Free","_fft2vBindGroup4Used","_fft2vBindGroup4Free","_postfft2BindGroup","_postfft2BindGroup2","_postfft2BindGroup4","_updateRenderStates","_sizes","_croppinesses","_params","_instanceData","_ifftTextures","_cascades","_paramsChanged","_version","_resolutionChanged","_textureFormat","_h0TextureFormat","_dataTextureFormat","_renderMode","params","device","getDevice","renderTargetFloat16","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","maxDrawBuffers","framebufferCaps","type","maxSampleBytes","maxColorAttachmentBytesPerSample","programs","h0Program","createProgramH0","hkProgram","createProgramHk","hkProgram2","undefined","hkProgram4","fft2hProgram","createProgramFFT2H","fft2hProgram2","fft2hProgram4","fft2vProgram","createProgramFFT2V","fft2vProgram2","fft2vProgram4","postfft2Program","createProgramPostFFT2","postfft2Program2","postfft2Program4","quad","createQuad","noiseTextures","Map","butterflyTextures","createBindGroup","bindGroupLayouts","Vector4","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","paramsChanged","version","clone","val","x","y","foamWidth","foamContrast","getWaveLength","cascade","setWaveLength","length","getWaveStrength","setWaveStrength","getWaveCroppiness","setWaveCroppiness","vertexData","Float32Array","indexData","Uint32Array","prim","Primitive","createAndSetVertexBuffer","createAndSetIndexBuffer","primitiveType","indexStart","indexCount","getButterflyTexture","tex","get","createTexture2D","Math","log2","mipmapping","name","update","createButterflyTexture","width","height","set","instanceData","getInstanceData","setProgram","setBindGroup","setTexture","getNoiseTexture","fetchSampler","setValue","i","z","PI","w","h0Textures","compute","setFramebuffer","h0Framebuffer","clearFrameBuffer","zero","draw","getNoise2d","rgba","rand","PRNG","array","from","Array","map","reverseBits","v","parseInt","toString","padStart","split","reverse","join","texture","bitReversed","keys","j","k","c","cos","s","sin","span","wing","texel","setXYZW","createNTextures","dataTextures","spectrumTextures","pingpongTextures","createFrameBuffer","spectrumFramebuffer","spectrumFramebuffer2","slice","spectrumFramebuffer4","pingpongFramebuffer","pingpongFramebuffer2","pingpongFramebuffer4","postIfft2Framebuffer","postIfft2Framebuffer2","postIfft2Framebuffer4","format","num","linear","options","samplerOptions","minFilter","magFilter","mipFilter","addressU","addressV","writable","createTexture2DArray","index","time","pushDeviceStates","setRenderStates","disposeInstanceData","generateInitialSpectrum","generateSpectrum","ifft2","postIfft2","generateSpectrumTwoPass","ifft2TwoPass","postIfft2TwoPass","popDeviceStates","needUpdate","disposeNTextures","isArray","forEach","dispose","nearestRepeatSampler","phases","pingPongTextures","pingPongFramebuffers","butterflyTex","pingPong","phase","pingPongTexture","getFFT2hBindGroup2","pingpong","bindGroup","pop","push","getFFT2hBindGroup4","getFFT2vBindGroup2","getFFT2vBindGroup4","pingPongFramebuffers4","pingPongFramebuffers2","fft2hBindGroup4","fft2hBindGroup2","fft2vBindGroup4","fft2vBindGroup2","ifftTextures","setupUniforms","scope","uniformGroup","pb","$builder","sizes","vec4","uniform","croppinesses","dataTexture","tex2DArray","dx_hy_dz_dxdz0","tex2D","sx_sz_dxdx_dzdz0","dx_hy_dz_dxdz1","sx_sz_dxdx_dzdz1","dx_hy_dz_dxdz2","sx_sz_dxdx_dzdz2","shaderKind","vec2","calcVertexPositionAndNormal","inPos","outPos","outNormal","that","func","vec3","out","$l","xz","uv0","div","uv1","uv2","a","mul","textureArraySampleLevel","rgb","b","textureSampleLevel","displacement","add","calcPositionAndNormal","calcFragmentNormal","_vertexNormal","_sx_sz_dxdx_dzdz0","_sx_sz_dxdx_dzdz1","_sx_sz_dxdx_dzdz2","sx","sz","dxdx_dzdz","zw","slope","normal","normalize","neg","$return","calcFragmentNormalAndFoam","float","Jxx","dxdx","Jxz","dxdz","Jzz","dzdz","sub","jacobian","dxdx_dzdz0","dxdx_dzdz1","dxdx_dzdz2","dxdz0","dxdz1","dxdz2","det","foam","abs","pow","min","calcNormalAndFoam","isOk","applyWaterBindGroup","linearRepeatSampler","calcClipmapTileAABB","minX","maxX","minZ","maxZ","outAABB","disturb","max","minPoint","setXYZ","maxPoint","getHash","onDispose"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getDevice } from '../app/api.js';
|
|
2
2
|
|
|
3
3
|
let quadVertexLayout = null;
|
|
4
4
|
let quadRenderStateSet = null;
|
|
5
5
|
function drawFullscreenQuad(renderStates) {
|
|
6
|
-
const device =
|
|
6
|
+
const device = getDevice();
|
|
7
7
|
if (!quadVertexLayout) {
|
|
8
8
|
quadVertexLayout = device.createVertexLayout({
|
|
9
9
|
vertexBuffers: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fullscreenquad.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fullscreenquad.js","sources":["../../src/render/fullscreenquad.ts"],"sourcesContent":["import type { RenderStateSet, VertexLayout } from '@zephyr3d/device';\r\nimport { getDevice } from '../app/api';\r\nimport type { Nullable } from '@zephyr3d/base';\r\n\r\nlet quadVertexLayout: Nullable<VertexLayout> = null;\r\nlet quadRenderStateSet: Nullable<RenderStateSet> = null;\r\n\r\nexport function drawFullscreenQuad(renderStates?: RenderStateSet) {\r\n const device = getDevice();\r\n if (!quadVertexLayout) {\r\n quadVertexLayout = device.createVertexLayout({\r\n vertexBuffers: [\r\n {\r\n buffer: device.createVertexBuffer('position_f32x2', new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]))!\r\n }\r\n ]\r\n });\r\n }\r\n if (!quadRenderStateSet) {\r\n quadRenderStateSet = device.createRenderStateSet();\r\n quadRenderStateSet.useRasterizerState().setCullMode('none');\r\n quadRenderStateSet.useDepthState().enableTest(false).enableWrite(false);\r\n }\r\n const saveRenderStateSet = device.getRenderStates();\r\n device.setRenderStates(renderStates ?? quadRenderStateSet);\r\n device.setVertexLayout(quadVertexLayout);\r\n device.draw('triangle-strip', 0, 4);\r\n device.setRenderStates(saveRenderStateSet);\r\n}\r\n"],"names":["quadVertexLayout","quadRenderStateSet","drawFullscreenQuad","renderStates","device","getDevice","createVertexLayout","vertexBuffers","buffer","createVertexBuffer","Float32Array","createRenderStateSet","useRasterizerState","setCullMode","useDepthState","enableTest","enableWrite","saveRenderStateSet","getRenderStates","setRenderStates","setVertexLayout","draw"],"mappings":";;AAIA,IAAIA,gBAA2C,GAAA,IAAA;AAC/C,IAAIC,kBAA+C,GAAA,IAAA;AAE5C,SAASC,mBAAmBC,YAA6B,EAAA;AAC9D,IAAA,MAAMC,MAASC,GAAAA,SAAAA,EAAAA;AACf,IAAA,IAAI,CAACL,gBAAkB,EAAA;QACrBA,gBAAmBI,GAAAA,MAAAA,CAAOE,kBAAkB,CAAC;YAC3CC,aAAe,EAAA;AACb,gBAAA;AACEC,oBAAAA,MAAAA,EAAQJ,MAAOK,CAAAA,kBAAkB,CAAC,gBAAA,EAAkB,IAAIC,YAAa,CAAA;wBAAC,EAAC;wBAAG,EAAC;AAAG,wBAAA,CAAA;wBAAG,EAAC;wBAAG,EAAC;AAAG,wBAAA,CAAA;AAAG,wBAAA,CAAA;AAAG,wBAAA;AAAE,qBAAA,CAAA;AACnG;AACD;AACH,SAAA,CAAA;AACF;AACA,IAAA,IAAI,CAACT,kBAAoB,EAAA;AACvBA,QAAAA,kBAAAA,GAAqBG,OAAOO,oBAAoB,EAAA;QAChDV,kBAAmBW,CAAAA,kBAAkB,EAAGC,CAAAA,WAAW,CAAC,MAAA,CAAA;AACpDZ,QAAAA,kBAAAA,CAAmBa,aAAa,EAAGC,CAAAA,UAAU,CAAC,KAAA,CAAA,CAAOC,WAAW,CAAC,KAAA,CAAA;AACnE;IACA,MAAMC,kBAAAA,GAAqBb,OAAOc,eAAe,EAAA;IACjDd,MAAOe,CAAAA,eAAe,CAAChB,YAAgBF,IAAAA,kBAAAA,CAAAA;AACvCG,IAAAA,MAAAA,CAAOgB,eAAe,CAACpB,gBAAAA,CAAAA;IACvBI,MAAOiB,CAAAA,IAAI,CAAC,gBAAA,EAAkB,CAAG,EAAA,CAAA,CAAA;AACjCjB,IAAAA,MAAAA,CAAOe,eAAe,CAACF,kBAAAA,CAAAA;AACzB;;;;"}
|
|
@@ -1,45 +1,102 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Disposable } from '@zephyr3d/base';
|
|
2
|
+
import { ShaderHelper } from '../material/shader/helper.js';
|
|
3
|
+
import '../material/lambert.js';
|
|
4
|
+
import '../material/blinn.js';
|
|
5
|
+
import '../material/unlit.js';
|
|
6
|
+
import '../material/particle.js';
|
|
7
|
+
import '@zephyr3d/device';
|
|
8
|
+
import { MAX_GERSTNER_WAVE_COUNT } from '../values.js';
|
|
9
|
+
import '../material/meshmaterial.js';
|
|
10
|
+
import '../material/grassmaterial.js';
|
|
11
|
+
import '../material/terrain-cm.js';
|
|
12
|
+
import '../material/pbrmr.js';
|
|
13
|
+
import '../material/pbrsg.js';
|
|
14
|
+
import '../material/pbrblueprint.js';
|
|
15
|
+
import '../material/sprite.js';
|
|
16
|
+
import '../material/sprite_std.js';
|
|
17
|
+
import '../utility/blueprint/material/texture.js';
|
|
2
18
|
|
|
3
|
-
const MAX_NUM_WAVES = 64;
|
|
4
19
|
/**
|
|
5
20
|
* Gerstner wave generator.
|
|
6
21
|
* @public
|
|
7
|
-
*/ class GerstnerWaveGenerator extends
|
|
8
|
-
|
|
22
|
+
*/ class GerstnerWaveGenerator extends Disposable {
|
|
23
|
+
_version;
|
|
9
24
|
_waveParams;
|
|
10
25
|
_numWaves;
|
|
11
26
|
/**
|
|
12
27
|
* Creates a new Gerstner wave generator.
|
|
13
28
|
*/ constructor(){
|
|
14
29
|
super();
|
|
15
|
-
this.
|
|
16
|
-
this._waveParams = new Float32Array(8 * MAX_NUM_WAVES);
|
|
30
|
+
this._waveParams = new Float32Array(8 * MAX_GERSTNER_WAVE_COUNT);
|
|
17
31
|
this.randomWave(0);
|
|
18
32
|
this.randomWave(1);
|
|
19
33
|
this.randomWave(2);
|
|
20
34
|
this.randomWave(3);
|
|
21
35
|
this._numWaves = 4;
|
|
36
|
+
this._version = 0;
|
|
37
|
+
}
|
|
38
|
+
/** @internal */ static randomWaveData(array, offset) {
|
|
39
|
+
array[offset + 0] = Math.random() * Math.PI * 2;
|
|
40
|
+
array[offset + 1] = Math.random() * 0.5 + 0.5;
|
|
41
|
+
array[offset + 2] = Math.random() * 0.1;
|
|
42
|
+
array[offset + 3] = Math.random() * 10;
|
|
43
|
+
array[offset + 4] = Math.random() * 100 - 50;
|
|
44
|
+
array[offset + 5] = 0;
|
|
45
|
+
array[offset + 6] = Math.random() * 100 - 50;
|
|
46
|
+
array[offset + 7] = 0;
|
|
47
|
+
}
|
|
48
|
+
/** @internal */ setRaw(data, index) {
|
|
49
|
+
this._waveParams.set(data, index * 8);
|
|
50
|
+
}
|
|
51
|
+
clone() {
|
|
52
|
+
const other = new GerstnerWaveGenerator();
|
|
53
|
+
other.numWaves = this.numWaves;
|
|
54
|
+
other._waveParams.set(this._waveParams);
|
|
55
|
+
return other;
|
|
56
|
+
}
|
|
57
|
+
get version() {
|
|
58
|
+
return this._version;
|
|
22
59
|
}
|
|
23
60
|
/** Gets the number of waves. */ get numWaves() {
|
|
24
61
|
return this._numWaves;
|
|
25
62
|
}
|
|
26
63
|
set numWaves(val) {
|
|
27
|
-
if (!Number.isInteger(val) || val <= 0 || val >
|
|
64
|
+
if (!Number.isInteger(val) || val <= 0 || val > MAX_GERSTNER_WAVE_COUNT) {
|
|
28
65
|
console.error(`Invalid wave number: ${val}`);
|
|
29
66
|
return;
|
|
30
67
|
}
|
|
31
|
-
|
|
32
|
-
this.
|
|
68
|
+
if (val !== this._numWaves) {
|
|
69
|
+
for(let i = this._numWaves; i < val; i++){
|
|
70
|
+
this.randomWave(i);
|
|
71
|
+
}
|
|
72
|
+
this._numWaves = val;
|
|
73
|
+
this._version++;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/** Delete wave at index */ deleteWave(index) {
|
|
77
|
+
for(let i = index; i < this._numWaves - 1; i++){
|
|
78
|
+
for(let j = 0; j < 8; j++){
|
|
79
|
+
this._waveParams[i * 8 + j] = this._waveParams[(i + 1) * 8 + j];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
this._numWaves--;
|
|
83
|
+
}
|
|
84
|
+
/** Delete wave at index */ insertWave(index) {
|
|
85
|
+
for(let i = index; i < this._numWaves - 1; i++){
|
|
86
|
+
for(let j = 0; j < 8; j++){
|
|
87
|
+
this._waveParams[(i + 1) * 8 + j] = this._waveParams[i * 8 + j];
|
|
88
|
+
}
|
|
33
89
|
}
|
|
34
|
-
this._numWaves
|
|
90
|
+
this._numWaves++;
|
|
35
91
|
}
|
|
36
92
|
/**
|
|
37
93
|
* Sets the angle of the wave direction in radians.
|
|
38
94
|
* @param waveIndex - index of the wave to set.
|
|
39
95
|
* @param angle - angle of the wave direction in radians.
|
|
40
96
|
*/ setWaveDirection(waveIndex, angle) {
|
|
41
|
-
if (waveIndex <
|
|
97
|
+
if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {
|
|
42
98
|
this._waveParams[waveIndex * 8 + 0] = angle;
|
|
99
|
+
this._version++;
|
|
43
100
|
}
|
|
44
101
|
}
|
|
45
102
|
/**
|
|
@@ -47,15 +104,16 @@ const MAX_NUM_WAVES = 64;
|
|
|
47
104
|
* @param waveIndex - index of the wave to get.
|
|
48
105
|
* @returns Angle of the wave direction in radians.
|
|
49
106
|
*/ getWaveDirection(waveIndex) {
|
|
50
|
-
return waveIndex <
|
|
107
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 0] : 0;
|
|
51
108
|
}
|
|
52
109
|
/**
|
|
53
110
|
* Sets the steepness of the wave.
|
|
54
111
|
* @param waveIndex - index of the wave to set.
|
|
55
112
|
* @param steepness - Steepness of the wave.
|
|
56
113
|
*/ setWaveSteepness(waveIndex, steepness) {
|
|
57
|
-
if (waveIndex <
|
|
114
|
+
if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {
|
|
58
115
|
this._waveParams[waveIndex * 8 + 1] = steepness;
|
|
116
|
+
this._version++;
|
|
59
117
|
}
|
|
60
118
|
}
|
|
61
119
|
/**
|
|
@@ -63,15 +121,16 @@ const MAX_NUM_WAVES = 64;
|
|
|
63
121
|
* @param waveIndex - index of the wave to set.
|
|
64
122
|
* @returns Steepness of the wave.
|
|
65
123
|
*/ getWaveSteepness(waveIndex) {
|
|
66
|
-
return waveIndex <
|
|
124
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 1] : 0;
|
|
67
125
|
}
|
|
68
126
|
/**
|
|
69
127
|
* Sets the amplitude of the wave.
|
|
70
128
|
* @param waveIndex - index of the wave to set.
|
|
71
129
|
* @param val - Amplitude of the wave.
|
|
72
130
|
*/ setWaveAmplitude(waveIndex, val) {
|
|
73
|
-
if (waveIndex <
|
|
131
|
+
if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {
|
|
74
132
|
this._waveParams[waveIndex * 8 + 2] = val;
|
|
133
|
+
this._version++;
|
|
75
134
|
}
|
|
76
135
|
}
|
|
77
136
|
/**
|
|
@@ -79,15 +138,16 @@ const MAX_NUM_WAVES = 64;
|
|
|
79
138
|
* @param waveIndex - index of the wave to set.
|
|
80
139
|
* @returns Amplitude of the wave.
|
|
81
140
|
*/ getWaveAmplitude(waveIndex) {
|
|
82
|
-
return waveIndex <
|
|
141
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 2] : 0;
|
|
83
142
|
}
|
|
84
143
|
/**
|
|
85
144
|
* Sets the length of the wave.
|
|
86
145
|
* @param waveIndex - index of the wave to set.
|
|
87
146
|
* @param val - Length of the wave.
|
|
88
147
|
*/ setWaveLength(waveIndex, val) {
|
|
89
|
-
if (waveIndex <
|
|
148
|
+
if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {
|
|
90
149
|
this._waveParams[waveIndex * 8 + 3] = val;
|
|
150
|
+
this._version++;
|
|
91
151
|
}
|
|
92
152
|
}
|
|
93
153
|
/**
|
|
@@ -95,22 +155,23 @@ const MAX_NUM_WAVES = 64;
|
|
|
95
155
|
* @param waveIndex - index of the wave to set.
|
|
96
156
|
* @returns Length of the wave.
|
|
97
157
|
*/ getWaveLength(waveIndex) {
|
|
98
|
-
return waveIndex <
|
|
158
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 3] : 0;
|
|
99
159
|
}
|
|
100
160
|
/**
|
|
101
161
|
* Query if the wave is an omni-directional wave.
|
|
102
162
|
* @param waveIndex - index of the wave to set.
|
|
103
163
|
* @returns true if the wave is an omni-directional wave, false otherwise.
|
|
104
164
|
*/ isOmniWave(waveIndex) {
|
|
105
|
-
return waveIndex <
|
|
165
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 7] !== 0 : false;
|
|
106
166
|
}
|
|
107
167
|
/**
|
|
108
168
|
* Sets whether the wave is an omni-directional wave.
|
|
109
169
|
* @param waveIndex - index of the wave to set.
|
|
110
170
|
* @param isOmni - true if the wave is an omni-directional wave, false otherwise.
|
|
111
171
|
*/ setOmniWave(waveIndex, isOmni) {
|
|
112
|
-
if (waveIndex <
|
|
172
|
+
if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {
|
|
113
173
|
this._waveParams[waveIndex * 8 + 7] = isOmni ? 1 : 0;
|
|
174
|
+
this._version++;
|
|
114
175
|
}
|
|
115
176
|
}
|
|
116
177
|
/**
|
|
@@ -118,14 +179,14 @@ const MAX_NUM_WAVES = 64;
|
|
|
118
179
|
* @param waveIndex - index of the wave to set.
|
|
119
180
|
* @returns X coordinate of the wave origin if it is an omni-directional wave, 0 otherwise.
|
|
120
181
|
*/ getOriginX(waveIndex) {
|
|
121
|
-
return waveIndex <
|
|
182
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 4] : 0;
|
|
122
183
|
}
|
|
123
184
|
/**
|
|
124
185
|
* Gets the Z coordinate of the wave origin if it is an omni-directional wave.
|
|
125
186
|
* @param waveIndex - index of the wave to set.
|
|
126
187
|
* @returns Z coordinate of the wave origin if it is an omni-directional wave, 0 otherwise.
|
|
127
188
|
*/ getOriginZ(waveIndex) {
|
|
128
|
-
return waveIndex <
|
|
189
|
+
return waveIndex < MAX_GERSTNER_WAVE_COUNT ? this._waveParams[waveIndex * 8 + 6] : 0;
|
|
129
190
|
}
|
|
130
191
|
/**
|
|
131
192
|
* Sets the X and Z coordinates of the wave origin if it is an omni-directional wave.
|
|
@@ -133,23 +194,18 @@ const MAX_NUM_WAVES = 64;
|
|
|
133
194
|
* @param x - X coordinate of the wave origin
|
|
134
195
|
* @param z - Z coordinate of the wave origin
|
|
135
196
|
*/ setOrigin(waveIndex, x, z) {
|
|
136
|
-
if (waveIndex <
|
|
197
|
+
if (waveIndex < MAX_GERSTNER_WAVE_COUNT) {
|
|
137
198
|
this._waveParams[waveIndex * 8 + 4] = x;
|
|
138
199
|
this._waveParams[waveIndex * 8 + 6] = z;
|
|
200
|
+
this._version++;
|
|
139
201
|
}
|
|
140
202
|
}
|
|
141
203
|
/** @internal */ randomWave(i) {
|
|
142
|
-
this._waveParams
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
this._waveParams[i * 8 + 5] = 0;
|
|
148
|
-
this._waveParams[i * 8 + 6] = Math.random() * 100 - 50;
|
|
149
|
-
this._waveParams[i * 8 + 7] = 0;
|
|
150
|
-
}
|
|
151
|
-
/** {@inheritDoc WaveGenerator.update} */ update(timeInSeconds) {
|
|
152
|
-
this._currentTime = timeInSeconds;
|
|
204
|
+
GerstnerWaveGenerator.randomWaveData(this._waveParams, i * 8);
|
|
205
|
+
}
|
|
206
|
+
/** {@inheritDoc WaveGenerator.update} */ update() {}
|
|
207
|
+
/** {@inheritDoc WaveGenerator.needUpdate} */ needUpdate() {
|
|
208
|
+
return false;
|
|
153
209
|
}
|
|
154
210
|
/** {@inheritDoc WaveGenerator.calcClipmapTileAABB} */ calcClipmapTileAABB(minX, maxX, minZ, maxZ, y, outAABB) {
|
|
155
211
|
let maxHeight = 0;
|
|
@@ -179,18 +235,16 @@ const MAX_NUM_WAVES = 64;
|
|
|
179
235
|
/** {@inheritDoc WaveGenerator.calcFragmentNormalAndFoam} */ calcFragmentNormalAndFoam(scope, xz) {
|
|
180
236
|
return scope.$builder.vec4(this.calcFragmentNormal(scope, xz), 0);
|
|
181
237
|
}
|
|
182
|
-
/** {@inheritDoc WaveGenerator.setupUniforms} */ setupUniforms(scope) {
|
|
238
|
+
/** {@inheritDoc WaveGenerator.setupUniforms} */ setupUniforms(scope, uniformGroup) {
|
|
183
239
|
const pb = scope.$builder;
|
|
184
|
-
scope.
|
|
185
|
-
scope.
|
|
186
|
-
scope.waveParams = pb.vec4[MAX_NUM_WAVES * 2]().uniform(0);
|
|
240
|
+
scope.numWaves = pb.float().uniform(uniformGroup);
|
|
241
|
+
scope.waveParams = pb.vec4[MAX_GERSTNER_WAVE_COUNT * 2]().uniform(uniformGroup);
|
|
187
242
|
}
|
|
188
|
-
/** @internal */ gerstnerWave(scope, waveParam, omniParam,
|
|
243
|
+
/** @internal */ gerstnerWave(scope, waveParam, omniParam, inPos, outNormal) {
|
|
189
244
|
const pb = scope.$builder;
|
|
190
245
|
pb.func('gerstnerWave', [
|
|
191
246
|
pb.vec4('waveParam'),
|
|
192
247
|
pb.vec4('omniParam'),
|
|
193
|
-
pb.float('time'),
|
|
194
248
|
pb.vec3('inPos'),
|
|
195
249
|
pb.vec3('outNormal').out()
|
|
196
250
|
], function() {
|
|
@@ -207,7 +261,7 @@ const MAX_NUM_WAVES = 64;
|
|
|
207
261
|
this.$l.omniWaveInput = pb.mul(pb.sub(this.inPos.xz, this.omniPos), this.omni);
|
|
208
262
|
this.$l.windDir = pb.normalize(pb.add(this.dirWaveInput, this.omniWaveInput));
|
|
209
263
|
this.$l.dir = pb.dot(this.windDir, pb.sub(this.inPos.xz, pb.mul(this.omniPos, this.omni)));
|
|
210
|
-
this.$l.calc = pb.sub(pb.mul(this.dir, this.w), pb.mul(this.wSpeed, this
|
|
264
|
+
this.$l.calc = pb.sub(pb.mul(this.dir, this.w), pb.mul(this.wSpeed, ShaderHelper.getElapsedTime(this)));
|
|
211
265
|
this.$l.cosCalc = pb.cos(this.calc);
|
|
212
266
|
this.$l.sinCalc = pb.sin(this.calc);
|
|
213
267
|
this.$l.waveXZ = pb.mul(this.windDir.xy, this.qi, this.amplitude, this.cosCalc);
|
|
@@ -218,7 +272,7 @@ const MAX_NUM_WAVES = 64;
|
|
|
218
272
|
this.outNormal = pb.div(this.n.xzy, this.numWaves);
|
|
219
273
|
this.$return(pb.mul(this.wave, pb.clamp(pb.mul(this.amplitude, 10000), 0, 1)));
|
|
220
274
|
});
|
|
221
|
-
return scope.gerstnerWave(waveParam, omniParam,
|
|
275
|
+
return scope.gerstnerWave(waveParam, omniParam, inPos, outNormal);
|
|
222
276
|
}
|
|
223
277
|
/** @internal */ calcNormalAndPos(scope, inPos, outPos, outNormal) {
|
|
224
278
|
const pb = scope.$builder;
|
|
@@ -230,14 +284,14 @@ const MAX_NUM_WAVES = 64;
|
|
|
230
284
|
], function() {
|
|
231
285
|
this.outPos = this.inPos;
|
|
232
286
|
this.outNormal = pb.vec3(0);
|
|
233
|
-
this.$for(pb.float('i'), 0, pb.getDevice().type === 'webgl' ?
|
|
287
|
+
this.$for(pb.float('i'), 0, pb.getDevice().type === 'webgl' ? MAX_GERSTNER_WAVE_COUNT : this.numWaves, function() {
|
|
234
288
|
if (pb.getDevice().type === 'webgl') {
|
|
235
289
|
this.$if(pb.greaterThanEqual(this.i, this.numWaves), function() {
|
|
236
290
|
this.$break();
|
|
237
291
|
});
|
|
238
292
|
}
|
|
239
293
|
this.$l.waveNormal = pb.vec3();
|
|
240
|
-
this.$l.wavePos = that.gerstnerWave(this, this.waveParams.at(pb.mul(this.i, 2)), this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)), this.
|
|
294
|
+
this.$l.wavePos = that.gerstnerWave(this, this.waveParams.at(pb.mul(this.i, 2)), this.waveParams.at(pb.add(pb.mul(this.i, 2), 1)), this.inPos, this.waveNormal);
|
|
241
295
|
this.outPos = pb.add(this.outPos, this.wavePos);
|
|
242
296
|
this.outNormal = pb.add(this.outNormal, this.waveNormal);
|
|
243
297
|
});
|
|
@@ -248,17 +302,15 @@ const MAX_NUM_WAVES = 64;
|
|
|
248
302
|
this.calcNormalAndPos(scope, inPos, outPos, outNormal);
|
|
249
303
|
}
|
|
250
304
|
/** {@inheritDoc WaveGenerator.applyWaterBindGroup} */ applyWaterBindGroup(bindGroup) {
|
|
251
|
-
bindGroup.setValue('time', this._currentTime);
|
|
252
305
|
bindGroup.setValue('numWaves', this._numWaves);
|
|
253
306
|
bindGroup.setValue('waveParams', this._waveParams);
|
|
254
307
|
}
|
|
255
308
|
/** {@inheritDoc WaveGenerator.isOk} */ isOk() {
|
|
256
309
|
return true;
|
|
257
310
|
}
|
|
258
|
-
/** {@inheritDoc WaveGenerator.getHash} */ getHash(
|
|
259
|
-
return '';
|
|
311
|
+
/** {@inheritDoc WaveGenerator.getHash} */ getHash() {
|
|
312
|
+
return 'GerstnerWaveGenerator';
|
|
260
313
|
}
|
|
261
|
-
/** {@inheritDoc WaveGenerator.dispose} */ dispose() {}
|
|
262
314
|
}
|
|
263
315
|
|
|
264
316
|
export { GerstnerWaveGenerator };
|