@thunderclap-engine/engine 0.0.0-stage → 1.1.0
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/CHANGELOG.md +390 -0
- package/LICENSE +21 -0
- package/README.md +333 -2
- package/dist/analytics/analytics.d.ts +80 -0
- package/dist/analytics/analytics.js +129 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +1 -0
- package/dist/anim/aim.d.ts +43 -0
- package/dist/anim/aim.js +157 -0
- package/dist/anim/clip.d.ts +98 -0
- package/dist/anim/clip.js +282 -0
- package/dist/anim/compress.d.ts +65 -0
- package/dist/anim/compress.js +339 -0
- package/dist/anim/foot-ik.d.ts +74 -0
- package/dist/anim/foot-ik.js +241 -0
- package/dist/anim/graph.d.ts +153 -0
- package/dist/anim/graph.js +532 -0
- package/dist/anim/ik.d.ts +105 -0
- package/dist/anim/ik.js +435 -0
- package/dist/anim/index.d.ts +36 -0
- package/dist/anim/index.js +21 -0
- package/dist/anim/match.d.ts +66 -0
- package/dist/anim/match.js +153 -0
- package/dist/anim/mixer.d.ts +113 -0
- package/dist/anim/mixer.js +314 -0
- package/dist/anim/morph.d.ts +41 -0
- package/dist/anim/morph.js +94 -0
- package/dist/anim/pose.d.ts +74 -0
- package/dist/anim/pose.js +254 -0
- package/dist/anim/quat.d.ts +44 -0
- package/dist/anim/quat.js +187 -0
- package/dist/anim/retarget.d.ts +97 -0
- package/dist/anim/retarget.js +366 -0
- package/dist/anim/root-motion.d.ts +44 -0
- package/dist/anim/root-motion.js +224 -0
- package/dist/anim/skin-pose.d.ts +39 -0
- package/dist/anim/skin-pose.js +53 -0
- package/dist/anim/socket.d.ts +47 -0
- package/dist/anim/socket.js +84 -0
- package/dist/anim/spring-chain.d.ts +73 -0
- package/dist/anim/spring-chain.js +294 -0
- package/dist/assets/atlas.d.ts +90 -0
- package/dist/assets/atlas.js +212 -0
- package/dist/assets/baked.d.ts +33 -0
- package/dist/assets/baked.js +38 -0
- package/dist/assets/bundle.d.ts +88 -0
- package/dist/assets/bundle.js +464 -0
- package/dist/assets/cache.d.ts +56 -0
- package/dist/assets/cache.js +123 -0
- package/dist/assets/gltf-load.d.ts +252 -0
- package/dist/assets/gltf-load.js +661 -0
- package/dist/assets/gltf-skin.d.ts +36 -0
- package/dist/assets/gltf-skin.js +109 -0
- package/dist/assets/gltf.d.ts +706 -0
- package/dist/assets/gltf.js +1376 -0
- package/dist/assets/index.d.ts +20 -0
- package/dist/assets/index.js +10 -0
- package/dist/assets/ktx2.d.ts +71 -0
- package/dist/assets/ktx2.js +213 -0
- package/dist/assets/manifest.d.ts +79 -0
- package/dist/assets/manifest.js +7 -0
- package/dist/assets/meshopt.d.ts +23 -0
- package/dist/assets/meshopt.js +403 -0
- package/dist/audio/audio.d.ts +733 -0
- package/dist/audio/audio.js +2013 -0
- package/dist/audio/dsp.d.ts +61 -0
- package/dist/audio/dsp.js +159 -0
- package/dist/audio/duck.d.ts +44 -0
- package/dist/audio/duck.js +101 -0
- package/dist/audio/envelope.d.ts +53 -0
- package/dist/audio/envelope.js +106 -0
- package/dist/audio/index.d.ts +13 -0
- package/dist/audio/index.js +14 -0
- package/dist/audio/music.d.ts +113 -0
- package/dist/audio/music.js +548 -0
- package/dist/audio/occlusion.d.ts +55 -0
- package/dist/audio/occlusion.js +61 -0
- package/dist/audio/persist.d.ts +23 -0
- package/dist/audio/persist.js +27 -0
- package/dist/audio/recipes.d.ts +55 -0
- package/dist/audio/recipes.js +227 -0
- package/dist/audio/send.d.ts +41 -0
- package/dist/audio/send.js +118 -0
- package/dist/audio/sprites.d.ts +59 -0
- package/dist/audio/sprites.js +43 -0
- package/dist/audio/synth.d.ts +103 -0
- package/dist/audio/synth.js +197 -0
- package/dist/audio/variations.d.ts +25 -0
- package/dist/audio/variations.js +55 -0
- package/dist/audio/zones.d.ts +100 -0
- package/dist/audio/zones.js +167 -0
- package/dist/core/detached-surface.d.ts +44 -0
- package/dist/core/detached-surface.js +104 -0
- package/dist/core/events.d.ts +24 -0
- package/dist/core/events.js +43 -0
- package/dist/core/game.d.ts +409 -0
- package/dist/core/game.js +530 -0
- package/dist/core/hash.d.ts +24 -0
- package/dist/core/hash.js +49 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.js +9 -0
- package/dist/core/loop.d.ts +113 -0
- package/dist/core/loop.js +185 -0
- package/dist/core/math.d.ts +58 -0
- package/dist/core/math.js +210 -0
- package/dist/core/noise.d.ts +40 -0
- package/dist/core/noise.js +247 -0
- package/dist/core/pool.d.ts +42 -0
- package/dist/core/pool.js +85 -0
- package/dist/core/random.d.ts +61 -0
- package/dist/core/random.js +199 -0
- package/dist/core/scene.d.ts +79 -0
- package/dist/core/scene.js +195 -0
- package/dist/core/timer.d.ts +66 -0
- package/dist/core/timer.js +286 -0
- package/dist/fx/billboard-wgsl.d.ts +29 -0
- package/dist/fx/billboard-wgsl.js +158 -0
- package/dist/fx/billboard.d.ts +249 -0
- package/dist/fx/billboard.js +702 -0
- package/dist/fx/debug-draw.d.ts +127 -0
- package/dist/fx/debug-draw.js +523 -0
- package/dist/fx/debug-wgsl.d.ts +7 -0
- package/dist/fx/debug-wgsl.js +32 -0
- package/dist/fx/decals-wgsl.d.ts +15 -0
- package/dist/fx/decals-wgsl.js +173 -0
- package/dist/fx/decals.d.ts +216 -0
- package/dist/fx/decals.js +607 -0
- package/dist/fx/effect.d.ts +129 -0
- package/dist/fx/effect.js +349 -0
- package/dist/fx/effects/hit-spark.json +48 -0
- package/dist/fx/effects/index.d.ts +8 -0
- package/dist/fx/effects/index.js +9 -0
- package/dist/fx/effects/magic-aura.json +47 -0
- package/dist/fx/effects/smoke-puff.json +34 -0
- package/dist/fx/emit-surface.d.ts +40 -0
- package/dist/fx/emit-surface.js +124 -0
- package/dist/fx/flicker.d.ts +30 -0
- package/dist/fx/flicker.js +42 -0
- package/dist/fx/index.d.ts +31 -0
- package/dist/fx/index.js +20 -0
- package/dist/fx/particles-wgsl.d.ts +57 -0
- package/dist/fx/particles-wgsl.js +828 -0
- package/dist/fx/particles.d.ts +566 -0
- package/dist/fx/particles.js +1533 -0
- package/dist/fx/random.d.ts +15 -0
- package/dist/fx/random.js +20 -0
- package/dist/fx/sky-wgsl.d.ts +23 -0
- package/dist/fx/sky-wgsl.js +127 -0
- package/dist/fx/sky.d.ts +96 -0
- package/dist/fx/sky.js +175 -0
- package/dist/fx/text-atlas.d.ts +143 -0
- package/dist/fx/text-atlas.js +327 -0
- package/dist/fx/trail-wgsl.d.ts +11 -0
- package/dist/fx/trail-wgsl.js +42 -0
- package/dist/fx/trail.d.ts +194 -0
- package/dist/fx/trail.js +555 -0
- package/dist/fx/water-wgsl.d.ts +34 -0
- package/dist/fx/water-wgsl.js +197 -0
- package/dist/fx/water.d.ts +176 -0
- package/dist/fx/water.js +371 -0
- package/dist/geom/collide/bvh.d.ts +151 -0
- package/dist/geom/collide/bvh.js +493 -0
- package/dist/geom/collide/debug.d.ts +14 -0
- package/dist/geom/collide/debug.js +74 -0
- package/dist/geom/collide/grid.d.ts +26 -0
- package/dist/geom/collide/grid.js +91 -0
- package/dist/geom/collide/index.d.ts +8 -0
- package/dist/geom/collide/index.js +8 -0
- package/dist/geom/collide/queries.d.ts +70 -0
- package/dist/geom/collide/queries.js +583 -0
- package/dist/geom/collide/serialize.d.ts +14 -0
- package/dist/geom/collide/serialize.js +145 -0
- package/dist/geom/collide/shapes.d.ts +161 -0
- package/dist/geom/collide/shapes.js +686 -0
- package/dist/geom/collide/slide.d.ts +66 -0
- package/dist/geom/collide/slide.js +375 -0
- package/dist/geom/collide/tile-slide.d.ts +88 -0
- package/dist/geom/collide/tile-slide.js +255 -0
- package/dist/geom/geometry.d.ts +95 -0
- package/dist/geom/geometry.js +322 -0
- package/dist/geom/heightfield.d.ts +72 -0
- package/dist/geom/heightfield.js +295 -0
- package/dist/geom/hull.d.ts +27 -0
- package/dist/geom/hull.js +279 -0
- package/dist/geom/index.d.ts +35 -0
- package/dist/geom/index.js +23 -0
- package/dist/geom/iso.d.ts +74 -0
- package/dist/geom/iso.js +89 -0
- package/dist/geom/lod.d.ts +29 -0
- package/dist/geom/lod.js +27 -0
- package/dist/geom/ops.d.ts +47 -0
- package/dist/geom/ops.js +285 -0
- package/dist/geom/primitives.d.ts +97 -0
- package/dist/geom/primitives.js +359 -0
- package/dist/geom/shapes.d.ts +43 -0
- package/dist/geom/shapes.js +88 -0
- package/dist/geom/simplify.d.ts +38 -0
- package/dist/geom/simplify.js +519 -0
- package/dist/geom/split.d.ts +37 -0
- package/dist/geom/split.js +413 -0
- package/dist/geom/sweep.d.ts +83 -0
- package/dist/geom/sweep.js +534 -0
- package/dist/geom/tangents.d.ts +16 -0
- package/dist/geom/tangents.js +124 -0
- package/dist/geom/triangulate.d.ts +19 -0
- package/dist/geom/triangulate.js +147 -0
- package/dist/host/default.d.ts +10 -0
- package/dist/host/default.js +10 -0
- package/dist/host/index.d.ts +4 -0
- package/dist/host/index.js +3 -0
- package/dist/host/types.d.ts +144 -0
- package/dist/host/types.js +1 -0
- package/dist/host/web-links.d.ts +38 -0
- package/dist/host/web-links.js +110 -0
- package/dist/host/web.d.ts +30 -0
- package/dist/host/web.js +216 -0
- package/dist/host/xr.d.ts +24 -0
- package/dist/host/xr.js +59 -0
- package/dist/i18n/i18n.d.ts +59 -0
- package/dist/i18n/i18n.js +241 -0
- package/dist/i18n/index.d.ts +3 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/message.d.ts +72 -0
- package/dist/i18n/message.js +369 -0
- package/dist/i18n/negotiate.d.ts +17 -0
- package/dist/i18n/negotiate.js +58 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +1 -0
- package/dist/input/bindings.d.ts +31 -0
- package/dist/input/bindings.js +141 -0
- package/dist/input/clock.d.ts +44 -0
- package/dist/input/clock.js +49 -0
- package/dist/input/follow.d.ts +133 -0
- package/dist/input/follow.js +218 -0
- package/dist/input/gestures.d.ts +281 -0
- package/dist/input/gestures.js +662 -0
- package/dist/input/glyphs.d.ts +35 -0
- package/dist/input/glyphs.js +216 -0
- package/dist/input/gyro.d.ts +85 -0
- package/dist/input/gyro.js +140 -0
- package/dist/input/index.d.ts +19 -0
- package/dist/input/index.js +16 -0
- package/dist/input/input.d.ts +543 -0
- package/dist/input/input.js +1492 -0
- package/dist/input/look.d.ts +327 -0
- package/dist/input/look.js +681 -0
- package/dist/input/magnify.d.ts +177 -0
- package/dist/input/magnify.js +131 -0
- package/dist/input/pointer-dispatch.d.ts +138 -0
- package/dist/input/pointer-dispatch.js +180 -0
- package/dist/input/pointer-router.d.ts +204 -0
- package/dist/input/pointer-router.js +533 -0
- package/dist/input/pointer-sources.d.ts +164 -0
- package/dist/input/pointer-sources.js +306 -0
- package/dist/input/rays.d.ts +138 -0
- package/dist/input/rays.js +615 -0
- package/dist/input/record.d.ts +209 -0
- package/dist/input/record.js +601 -0
- package/dist/input/touch-zones.d.ts +147 -0
- package/dist/input/touch-zones.js +300 -0
- package/dist/input/types.d.ts +158 -0
- package/dist/input/types.js +1 -0
- package/dist/input/xr-source.d.ts +53 -0
- package/dist/input/xr-source.js +164 -0
- package/dist/nav/astar.d.ts +45 -0
- package/dist/nav/astar.js +182 -0
- package/dist/nav/corridor.d.ts +40 -0
- package/dist/nav/corridor.js +95 -0
- package/dist/nav/crowd.d.ts +94 -0
- package/dist/nav/crowd.js +624 -0
- package/dist/nav/flow.d.ts +61 -0
- package/dist/nav/flow.js +193 -0
- package/dist/nav/grid.d.ts +108 -0
- package/dist/nav/grid.js +210 -0
- package/dist/nav/heap.d.ts +22 -0
- package/dist/nav/heap.js +92 -0
- package/dist/nav/index.d.ts +37 -0
- package/dist/nav/index.js +19 -0
- package/dist/nav/mesh/areas.d.ts +44 -0
- package/dist/nav/mesh/areas.js +98 -0
- package/dist/nav/mesh/bake-options.d.ts +33 -0
- package/dist/nav/mesh/bake-options.js +76 -0
- package/dist/nav/mesh/contour.d.ts +22 -0
- package/dist/nav/mesh/contour.js +323 -0
- package/dist/nav/mesh/flow3.d.ts +35 -0
- package/dist/nav/mesh/flow3.js +229 -0
- package/dist/nav/mesh/links.d.ts +38 -0
- package/dist/nav/mesh/links.js +72 -0
- package/dist/nav/mesh/mesh-path.d.ts +152 -0
- package/dist/nav/mesh/mesh-path.js +643 -0
- package/dist/nav/mesh/mesh-reach.d.ts +78 -0
- package/dist/nav/mesh/mesh-reach.js +450 -0
- package/dist/nav/mesh/navmesh.d.ts +117 -0
- package/dist/nav/mesh/navmesh.js +647 -0
- package/dist/nav/mesh/polymesh.d.ts +24 -0
- package/dist/nav/mesh/polymesh.js +384 -0
- package/dist/nav/mesh/regions.d.ts +12 -0
- package/dist/nav/mesh/regions.js +367 -0
- package/dist/nav/mesh/serialize.d.ts +13 -0
- package/dist/nav/mesh/serialize.js +197 -0
- package/dist/nav/mesh/voxelize.d.ts +111 -0
- package/dist/nav/mesh/voxelize.js +552 -0
- package/dist/nav/obstacles.d.ts +75 -0
- package/dist/nav/obstacles.js +294 -0
- package/dist/nav/path.d.ts +59 -0
- package/dist/nav/path.js +177 -0
- package/dist/nav/query-queue.d.ts +46 -0
- package/dist/nav/query-queue.js +308 -0
- package/dist/nav/reach.d.ts +53 -0
- package/dist/nav/reach.js +148 -0
- package/dist/nav/steer.d.ts +36 -0
- package/dist/nav/steer.js +78 -0
- package/dist/platform/boot.d.ts +28 -0
- package/dist/platform/boot.js +43 -0
- package/dist/platform/device-mode.d.ts +40 -0
- package/dist/platform/device-mode.js +104 -0
- package/dist/platform/device.d.ts +31 -0
- package/dist/platform/device.js +91 -0
- package/dist/platform/environment.d.ts +42 -0
- package/dist/platform/environment.js +82 -0
- package/dist/platform/gpu.d.ts +40 -0
- package/dist/platform/gpu.js +57 -0
- package/dist/platform/index.d.ts +18 -0
- package/dist/platform/index.js +10 -0
- package/dist/platform/letterbox.d.ts +43 -0
- package/dist/platform/letterbox.js +57 -0
- package/dist/platform/links.d.ts +20 -0
- package/dist/platform/links.js +43 -0
- package/dist/platform/screens.d.ts +36 -0
- package/dist/platform/screens.js +138 -0
- package/dist/platform/surface.d.ts +72 -0
- package/dist/platform/surface.js +157 -0
- package/dist/platform/xr-fake.d.ts +168 -0
- package/dist/platform/xr-fake.js +434 -0
- package/dist/platform/xr-surface.d.ts +120 -0
- package/dist/platform/xr-surface.js +214 -0
- package/dist/platform/xr-types.d.ts +262 -0
- package/dist/post/ao.d.ts +12 -0
- package/dist/post/ao.js +136 -0
- package/dist/post/blend.d.ts +27 -0
- package/dist/post/blend.js +129 -0
- package/dist/post/depth-pass.d.ts +43 -0
- package/dist/post/depth-pass.js +118 -0
- package/dist/post/dof.d.ts +1 -0
- package/dist/post/dof.js +66 -0
- package/dist/post/exposure.d.ts +80 -0
- package/dist/post/exposure.js +322 -0
- package/dist/post/index.d.ts +12 -0
- package/dist/post/index.js +11 -0
- package/dist/post/lens-dirt.d.ts +13 -0
- package/dist/post/lens-dirt.js +91 -0
- package/dist/post/lut.d.ts +19 -0
- package/dist/post/lut.js +50 -0
- package/dist/post/motion-blur.d.ts +9 -0
- package/dist/post/motion-blur.js +78 -0
- package/dist/post/post-stack.d.ts +302 -0
- package/dist/post/post-stack.js +1137 -0
- package/dist/post/settings.d.ts +485 -0
- package/dist/post/settings.js +416 -0
- package/dist/post/shaders.d.ts +25 -0
- package/dist/post/shaders.js +410 -0
- package/dist/post/ssr.d.ts +16 -0
- package/dist/post/ssr.js +155 -0
- package/dist/post/taa.d.ts +74 -0
- package/dist/post/taa.js +235 -0
- package/dist/post/white-balance.d.ts +25 -0
- package/dist/post/white-balance.js +98 -0
- package/dist/render/bindings.d.ts +98 -0
- package/dist/render/bindings.js +281 -0
- package/dist/render/blend.d.ts +13 -0
- package/dist/render/blend.js +26 -0
- package/dist/render/camera-2d.d.ts +72 -0
- package/dist/render/camera-2d.js +92 -0
- package/dist/render/camera.d.ts +302 -0
- package/dist/render/camera.js +671 -0
- package/dist/render/color.d.ts +16 -0
- package/dist/render/color.js +41 -0
- package/dist/render/compressed.d.ts +104 -0
- package/dist/render/compressed.js +248 -0
- package/dist/render/diagnostics.d.ts +15 -0
- package/dist/render/diagnostics.js +43 -0
- package/dist/render/dynamic-resolution.d.ts +70 -0
- package/dist/render/dynamic-resolution.js +126 -0
- package/dist/render/fake-gpu.d.ts +204 -0
- package/dist/render/fake-gpu.js +426 -0
- package/dist/render/flipbook.d.ts +56 -0
- package/dist/render/flipbook.js +87 -0
- package/dist/render/frame.d.ts +278 -0
- package/dist/render/frame.js +174 -0
- package/dist/render/fullscreen.d.ts +54 -0
- package/dist/render/fullscreen.js +91 -0
- package/dist/render/gpu-timer.d.ts +73 -0
- package/dist/render/gpu-timer.js +186 -0
- package/dist/render/index.d.ts +53 -0
- package/dist/render/index.js +29 -0
- package/dist/render/instance-list.d.ts +185 -0
- package/dist/render/instance-list.js +547 -0
- package/dist/render/lights.d.ts +181 -0
- package/dist/render/lights.js +233 -0
- package/dist/render/lod.d.ts +54 -0
- package/dist/render/lod.js +52 -0
- package/dist/render/material.d.ts +165 -0
- package/dist/render/material.js +292 -0
- package/dist/render/mesh.d.ts +284 -0
- package/dist/render/mesh.js +472 -0
- package/dist/render/mipmap.d.ts +16 -0
- package/dist/render/mipmap.js +121 -0
- package/dist/render/parallax.d.ts +50 -0
- package/dist/render/parallax.js +47 -0
- package/dist/render/pbr-wgsl.d.ts +31 -0
- package/dist/render/pbr-wgsl.js +119 -0
- package/dist/render/ping-pong.d.ts +42 -0
- package/dist/render/ping-pong.js +74 -0
- package/dist/render/renderer.d.ts +741 -0
- package/dist/render/renderer.js +2486 -0
- package/dist/render/scene-pipelines.d.ts +44 -0
- package/dist/render/scene-pipelines.js +92 -0
- package/dist/render/scene-target.d.ts +170 -0
- package/dist/render/scene-target.js +450 -0
- package/dist/render/shadow.d.ts +74 -0
- package/dist/render/shadow.js +208 -0
- package/dist/render/skin.d.ts +112 -0
- package/dist/render/skin.js +240 -0
- package/dist/render/snapshot.d.ts +36 -0
- package/dist/render/snapshot.js +34 -0
- package/dist/render/standard.d.ts +162 -0
- package/dist/render/standard.js +263 -0
- package/dist/render/texture.d.ts +142 -0
- package/dist/render/texture.js +228 -0
- package/dist/render/tile-layer.d.ts +110 -0
- package/dist/render/tile-layer.js +304 -0
- package/dist/render/transform.d.ts +115 -0
- package/dist/render/transform.js +318 -0
- package/dist/render/wgsl.d.ts +131 -0
- package/dist/render/wgsl.js +528 -0
- package/dist/save/codec.d.ts +49 -0
- package/dist/save/codec.js +169 -0
- package/dist/save/index.d.ts +8 -0
- package/dist/save/index.js +8 -0
- package/dist/save/journal.d.ts +24 -0
- package/dist/save/journal.js +102 -0
- package/dist/save/migrate.d.ts +15 -0
- package/dist/save/migrate.js +37 -0
- package/dist/save/schema.d.ts +72 -0
- package/dist/save/schema.js +154 -0
- package/dist/save/settings.d.ts +28 -0
- package/dist/save/settings.js +59 -0
- package/dist/save/slots.d.ts +56 -0
- package/dist/save/slots.js +200 -0
- package/dist/save/storage.d.ts +35 -0
- package/dist/save/storage.js +62 -0
- package/dist/save/store.d.ts +114 -0
- package/dist/save/store.js +269 -0
- package/dist/testing/fake-host.d.ts +103 -0
- package/dist/testing/fake-host.js +163 -0
- package/dist/testing/fixed-clock.d.ts +25 -0
- package/dist/testing/fixed-clock.js +30 -0
- package/dist/testing/index.d.ts +4 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/test-game.d.ts +76 -0
- package/dist/testing/test-game.js +92 -0
- package/dist/tween/ease.d.ts +77 -0
- package/dist/tween/ease.js +192 -0
- package/dist/tween/index.d.ts +8 -0
- package/dist/tween/index.js +7 -0
- package/dist/tween/timeline.d.ts +78 -0
- package/dist/tween/timeline.js +269 -0
- package/dist/tween/tween.d.ts +168 -0
- package/dist/tween/tween.js +320 -0
- package/dist/ui/anchor.d.ts +206 -0
- package/dist/ui/anchor.js +307 -0
- package/dist/ui/caption.d.ts +122 -0
- package/dist/ui/caption.js +286 -0
- package/dist/ui/cursor.d.ts +105 -0
- package/dist/ui/cursor.js +261 -0
- package/dist/ui/dom.d.ts +30 -0
- package/dist/ui/dom.js +92 -0
- package/dist/ui/floats.d.ts +86 -0
- package/dist/ui/floats.js +260 -0
- package/dist/ui/hud.d.ts +198 -0
- package/dist/ui/hud.js +431 -0
- package/dist/ui/index.d.ts +37 -0
- package/dist/ui/index.js +34 -0
- package/dist/ui/inventory-card.d.ts +52 -0
- package/dist/ui/inventory-card.js +173 -0
- package/dist/ui/inventory-context.d.ts +29 -0
- package/dist/ui/inventory-context.js +125 -0
- package/dist/ui/inventory-drag.d.ts +63 -0
- package/dist/ui/inventory-drag.js +394 -0
- package/dist/ui/inventory-grid.d.ts +66 -0
- package/dist/ui/inventory-grid.js +625 -0
- package/dist/ui/inventory-radial.d.ts +39 -0
- package/dist/ui/inventory-radial.js +168 -0
- package/dist/ui/inventory.d.ts +128 -0
- package/dist/ui/inventory.js +154 -0
- package/dist/ui/layout.d.ts +356 -0
- package/dist/ui/layout.js +856 -0
- package/dist/ui/link.d.ts +64 -0
- package/dist/ui/link.js +155 -0
- package/dist/ui/loading.d.ts +40 -0
- package/dist/ui/loading.js +157 -0
- package/dist/ui/loupe.d.ts +74 -0
- package/dist/ui/loupe.js +164 -0
- package/dist/ui/menu-nav.d.ts +33 -0
- package/dist/ui/menu-nav.js +28 -0
- package/dist/ui/minimap-canvas.d.ts +145 -0
- package/dist/ui/minimap-canvas.js +460 -0
- package/dist/ui/notify.d.ts +40 -0
- package/dist/ui/notify.js +141 -0
- package/dist/ui/orb.d.ts +53 -0
- package/dist/ui/orb.js +304 -0
- package/dist/ui/overlay.d.ts +213 -0
- package/dist/ui/overlay.js +394 -0
- package/dist/ui/padnav.d.ts +53 -0
- package/dist/ui/padnav.js +146 -0
- package/dist/ui/perf.d.ts +130 -0
- package/dist/ui/perf.js +329 -0
- package/dist/ui/rotate-card.d.ts +54 -0
- package/dist/ui/rotate-card.js +97 -0
- package/dist/ui/stack.d.ts +128 -0
- package/dist/ui/stack.js +312 -0
- package/dist/ui/styles.d.ts +13 -0
- package/dist/ui/styles.js +200 -0
- package/dist/ui/text-scale.d.ts +67 -0
- package/dist/ui/text-scale.js +102 -0
- package/dist/ui/theme.d.ts +70 -0
- package/dist/ui/theme.js +98 -0
- package/dist/ui/toast.d.ts +23 -0
- package/dist/ui/toast.js +46 -0
- package/dist/ui/tooltip.d.ts +89 -0
- package/dist/ui/tooltip.js +333 -0
- package/dist/ui/widgets-2.d.ts +134 -0
- package/dist/ui/widgets-2.js +399 -0
- package/dist/ui/widgets-3.d.ts +91 -0
- package/dist/ui/widgets-3.js +212 -0
- package/dist/ui/widgets.d.ts +34 -0
- package/dist/ui/widgets.js +50 -0
- package/dist/ui/world-panel/index.d.ts +5 -0
- package/dist/ui/world-panel/index.js +5 -0
- package/dist/ui/world-panel/layout.d.ts +38 -0
- package/dist/ui/world-panel/layout.js +68 -0
- package/dist/ui/world-panel/paint.d.ts +96 -0
- package/dist/ui/world-panel/paint.js +136 -0
- package/dist/ui/world-panel/panel.d.ts +235 -0
- package/dist/ui/world-panel/panel.js +762 -0
- package/dist/ui/world-panel/wgsl.d.ts +10 -0
- package/dist/ui/world-panel/wgsl.js +52 -0
- package/dist/ui/world-panel/widgets.d.ts +207 -0
- package/dist/ui/world-panel/widgets.js +569 -0
- package/dist/voxel/chunks.d.ts +77 -0
- package/dist/voxel/chunks.js +149 -0
- package/dist/voxel/grid.d.ts +84 -0
- package/dist/voxel/grid.js +223 -0
- package/dist/voxel/index.d.ts +22 -0
- package/dist/voxel/index.js +7 -0
- package/dist/voxel/mesher-worker.d.ts +14 -0
- package/dist/voxel/mesher-worker.js +47 -0
- package/dist/voxel/mesher.d.ts +73 -0
- package/dist/voxel/mesher.js +306 -0
- package/dist/voxel/ray.d.ts +32 -0
- package/dist/voxel/ray.js +73 -0
- package/dist/voxel/wgsl.d.ts +16 -0
- package/dist/voxel/wgsl.js +28 -0
- package/dist/voxel/worker-client.d.ts +79 -0
- package/dist/voxel/worker-client.js +122 -0
- package/package.json +177 -3
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { WGSL_PBR } from '../render/pbr-wgsl.js';
|
|
2
|
+
import { WGSL_GLOBALS, WGSL_LIGHTS, WGSL_NOISE } from '../render/wgsl.js';
|
|
3
|
+
/** Wave layers the params block carries (`WaterOptions.waves` beyond this are ignored). */
|
|
4
|
+
export const WATER_MAX_WAVES = 4;
|
|
5
|
+
/**
|
|
6
|
+
* The water shader: a plane in the engine's 3D vertex layout, no instance, group 1 = the
|
|
7
|
+
* water's params block and its copy of the scene depth.
|
|
8
|
+
*
|
|
9
|
+
* Waves. Each layer is an analytic field with a closed-form gradient (`water_wave`):
|
|
10
|
+
* `p = (x, z) * scale + dir * (t * speed)`, `a = p.x + 0.6 sin(1.3 p.y)`,
|
|
11
|
+
* `b = 0.8 p.y + 0.5 sin(0.9 p.x)`, value `sin(a) cos(b)` in -1..1, and its derivatives by the
|
|
12
|
+
* chain rule. The height is `level + displace * Σ amplitude_i * value_i` (the vertex shader
|
|
13
|
+
* offsets y by it; `waterHeight` in `water.ts` is the same sum in TypeScript), and the normal
|
|
14
|
+
* is `normalize(-slope.x, 1, -slope.z)` with `slope = Σ amplitude_i * scale_i * grad_i`, so
|
|
15
|
+
* `amplitude` is the normal strength whether or not vertices move.
|
|
16
|
+
*
|
|
17
|
+
* Shading, all linear: the view ray's Schlick Fresnel (f0 0.02) times `fresnel` lerps the
|
|
18
|
+
* refraction colour (`shallow` → `deep` by the linear depth below the surface over
|
|
19
|
+
* `depth_fade`, from the depth copy) towards the reflection colour (a sky gradient between
|
|
20
|
+
* `lights.fog.rgb`, or a pale haze without fog, at the horizon and a bluer zenith, darkened at
|
|
21
|
+
* night like `Sky`); the sun adds a GGX lobe of `roughness` (`engine_d_ggx`,
|
|
22
|
+
* `engine_v_smith_ggx`, `engine_f_schlick` from `WGSL_PBR`), which also goes to the emissive
|
|
23
|
+
* target so bloom picks it up; foam (`foam.w` > 0) mixes `foam.rgb` in where the depth below the
|
|
24
|
+
* surface is under `foam.w`, through a two-octave noise mask; the alpha ramps up from zero at
|
|
25
|
+
* the shoreline over a quarter of `depth_fade` to `opacity`, then `engine_fog`.
|
|
26
|
+
*
|
|
27
|
+
* Depth copy. `misc.z` says whether `scene_depth` holds this frame's copy. Its texel is turned
|
|
28
|
+
* into view-space z (`view_z_of`) and compared with the fragment's own: the difference is the
|
|
29
|
+
* water depth along the ray. A texel within a sliver of the fragment's own depth is the water
|
|
30
|
+
* surface itself (the copy was taken after a frame that drew this water into the same depth
|
|
31
|
+
* buffer) and counts as no information: fully deep, no foam. Without a copy the surface is
|
|
32
|
+
* deep everywhere, foam off.
|
|
33
|
+
*/
|
|
34
|
+
export const WATER_WGSL = /* wgsl */ `
|
|
35
|
+
${WGSL_GLOBALS}
|
|
36
|
+
${WGSL_LIGHTS}
|
|
37
|
+
${WGSL_NOISE}
|
|
38
|
+
${WGSL_PBR}
|
|
39
|
+
struct WaterParams {
|
|
40
|
+
shallow: vec4f, // rgb, opacity
|
|
41
|
+
deep: vec4f, // rgb, depth fade (world units)
|
|
42
|
+
surface: vec4f, // fresnel, roughness, displace, level
|
|
43
|
+
foam: vec4f, // rgb, width (0 = off)
|
|
44
|
+
misc: vec4f, // time, wave count, depth copy on, origin y
|
|
45
|
+
waves: array<vec4f, ${WATER_MAX_WAVES}>, // scale, speed, amplitude, direction angle
|
|
46
|
+
};
|
|
47
|
+
@group(1) @binding(0) var<uniform> water: WaterParams;
|
|
48
|
+
@group(1) @binding(1) var scene_depth: texture_depth_2d;
|
|
49
|
+
|
|
50
|
+
struct VertexIn {
|
|
51
|
+
@location(0) pos: vec3f,
|
|
52
|
+
@location(10) normal: vec3f,
|
|
53
|
+
@location(1) uv: vec2f,
|
|
54
|
+
@location(2) color: vec4f,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
struct WaterOut {
|
|
58
|
+
@builtin(position) clip: vec4f,
|
|
59
|
+
@location(0) world: vec3f,
|
|
60
|
+
@location(1) view_z: f32,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
struct FragOut {
|
|
64
|
+
@location(0) color: vec4f,
|
|
65
|
+
@location(1) emissive: vec4f,
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
// One layer's value and gradient (d/dp.x, d/dp.y) at p.
|
|
69
|
+
fn water_wave(p: vec2f) -> vec3f {
|
|
70
|
+
let a = p.x + 0.6 * sin(1.3 * p.y);
|
|
71
|
+
let b = 0.8 * p.y + 0.5 * sin(0.9 * p.x);
|
|
72
|
+
let sa = sin(a);
|
|
73
|
+
let ca = cos(a);
|
|
74
|
+
let sb = sin(b);
|
|
75
|
+
let cb = cos(b);
|
|
76
|
+
let dx = ca * cb - sa * sb * 0.45 * cos(0.9 * p.x);
|
|
77
|
+
let dy = ca * cb * 0.78 * cos(1.3 * p.y) - sa * sb * 0.8;
|
|
78
|
+
return vec3f(sa * cb, dx, dy);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Summed layers at world (x, z): height sum (before displace) and the normal slope.
|
|
82
|
+
fn water_field(xz: vec2f, t: f32) -> vec3f {
|
|
83
|
+
var h = 0.0;
|
|
84
|
+
var slope = vec2f(0.0);
|
|
85
|
+
let n = u32(water.misc.y);
|
|
86
|
+
for (var i = 0u; i < n; i++) {
|
|
87
|
+
let w = water.waves[i];
|
|
88
|
+
let dir = vec2f(cos(w.w), sin(w.w));
|
|
89
|
+
let p = xz * w.x + dir * (t * w.y);
|
|
90
|
+
let f = water_wave(p);
|
|
91
|
+
h += w.z * f.x;
|
|
92
|
+
slope += w.z * w.x * f.yz;
|
|
93
|
+
}
|
|
94
|
+
return vec3f(h, slope);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@vertex fn vs(v: VertexIn) -> WaterOut {
|
|
98
|
+
let t = water.misc.x;
|
|
99
|
+
let f = water_field(v.pos.xz, t);
|
|
100
|
+
let world = vec3f(v.pos.x, water.misc.w + water.surface.w + water.surface.z * f.x, v.pos.z);
|
|
101
|
+
var o: WaterOut;
|
|
102
|
+
o.clip = camera.view_proj * vec4f(world, 1.0);
|
|
103
|
+
o.world = world;
|
|
104
|
+
o.view_z = (camera.view * vec4f(world, 1.0)).z;
|
|
105
|
+
return o;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// View-space z of a depth-buffer value under camera.proj (any perspective or ortho matrix).
|
|
109
|
+
fn view_z_of(d: f32) -> f32 {
|
|
110
|
+
let p = camera.proj;
|
|
111
|
+
let den = d * p[2][3] - p[2][2];
|
|
112
|
+
return (p[3][2] - d * p[3][3]) / select(den, 1e-6, abs(den) < 1e-6);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
@fragment fn fs(in: WaterOut) -> FragOut {
|
|
116
|
+
let t = water.misc.x;
|
|
117
|
+
let f = water_field(in.world.xz, t);
|
|
118
|
+
let n = normalize(vec3f(-f.y, 1.0, -f.z));
|
|
119
|
+
let v = normalize(camera.camera_pos.xyz - in.world);
|
|
120
|
+
let n_dot_v = max(dot(n, v), 1e-4);
|
|
121
|
+
let depth_fade = max(water.deep.w, 1e-3);
|
|
122
|
+
|
|
123
|
+
// Water depth along the view ray, from the depth copy.
|
|
124
|
+
var diff = depth_fade;
|
|
125
|
+
var has_depth = false;
|
|
126
|
+
if (water.misc.z > 0.5) {
|
|
127
|
+
let dims = vec2i(textureDimensions(scene_depth));
|
|
128
|
+
let px = clamp(vec2i(in.clip.xy), vec2i(0), dims - 1);
|
|
129
|
+
let scene_z = view_z_of(textureLoad(scene_depth, px, 0));
|
|
130
|
+
let own = abs(scene_z - in.view_z) < 0.002 * abs(in.view_z) + 1e-3;
|
|
131
|
+
if (!own) {
|
|
132
|
+
diff = max(in.view_z - scene_z, 0.0);
|
|
133
|
+
has_depth = true;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
let deep_t = saturate(diff / depth_fade);
|
|
137
|
+
let refraction = mix(water.shallow.rgb, water.deep.rgb, deep_t);
|
|
138
|
+
|
|
139
|
+
// Reflection: the sky gradient the reflected ray would see.
|
|
140
|
+
let r = reflect(-v, n);
|
|
141
|
+
let has_fog = lights.fog.w > 0.0;
|
|
142
|
+
let horizon = select(vec3f(0.62, 0.72, 0.9), lights.fog.rgb, has_fog);
|
|
143
|
+
let zenith = horizon * vec3f(0.35, 0.55, 1.0);
|
|
144
|
+
let to_sun = -lights.sun_dir;
|
|
145
|
+
let has_sun = dot(lights.sun_color, vec3f(1.0)) > 0.0;
|
|
146
|
+
let day = select(1.0, smoothstep(-0.12, 0.08, to_sun.y), has_sun);
|
|
147
|
+
let sky = mix(horizon, zenith, pow(saturate(r.y), 0.6)) * mix(0.06, 1.0, day);
|
|
148
|
+
|
|
149
|
+
let fresnel = water.surface.x * engine_f_schlick(vec3f(0.02), n_dot_v).x;
|
|
150
|
+
var col = mix(refraction, sky, saturate(fresnel));
|
|
151
|
+
|
|
152
|
+
// Sun highlight.
|
|
153
|
+
var spec = vec3f(0.0);
|
|
154
|
+
let n_dot_l = dot(n, to_sun);
|
|
155
|
+
if (has_sun && n_dot_l > 0.0) {
|
|
156
|
+
let rough = max(water.surface.y, ENGINE_MIN_ROUGHNESS);
|
|
157
|
+
let a2 = rough * rough * rough * rough;
|
|
158
|
+
let h = normalize(to_sun + v);
|
|
159
|
+
let d = engine_d_ggx(saturate(dot(n, h)), a2);
|
|
160
|
+
let vis = engine_v_smith_ggx(n_dot_v, n_dot_l, a2);
|
|
161
|
+
let f_s = engine_f_schlick(vec3f(0.02), saturate(dot(v, h)));
|
|
162
|
+
spec = lights.sun_color * (d * vis * ENGINE_PI * n_dot_l) * f_s;
|
|
163
|
+
}
|
|
164
|
+
col += spec;
|
|
165
|
+
|
|
166
|
+
// Alpha: transparent at the shoreline, opacity further out.
|
|
167
|
+
var alpha = water.shallow.w * smoothstep(0.0, 0.25 * depth_fade, diff);
|
|
168
|
+
|
|
169
|
+
// Foam against geometry.
|
|
170
|
+
var foam = 0.0;
|
|
171
|
+
if (has_depth && water.foam.w > 0.0) {
|
|
172
|
+
let edge = saturate(1.0 - diff / water.foam.w);
|
|
173
|
+
let mask = 0.65 * engine_noise(in.world.xz * 5.0 + vec2f(t * 0.4, -t * 0.3))
|
|
174
|
+
+ 0.35 * engine_noise(in.world.xz * 13.0 - vec2f(t * 0.9, t * 0.5));
|
|
175
|
+
foam = edge * smoothstep(0.42, 0.72, mask + 0.4 * edge);
|
|
176
|
+
col = mix(col, water.foam.rgb, foam);
|
|
177
|
+
alpha = max(alpha, foam * water.shallow.w);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
col = engine_fog(col, in.world);
|
|
181
|
+
var o: FragOut;
|
|
182
|
+
o.color = vec4f(col * alpha, alpha);
|
|
183
|
+
o.emissive = vec4f(spec * alpha, alpha);
|
|
184
|
+
return o;
|
|
185
|
+
}
|
|
186
|
+
`;
|
|
187
|
+
/** Copies a depth texture into the water's own depth32float copy (one fullscreen triangle). */
|
|
188
|
+
export const WATER_DEPTH_COPY_WGSL = /* wgsl */ `
|
|
189
|
+
@group(0) @binding(0) var src: texture_depth_2d;
|
|
190
|
+
@vertex fn vs(@builtin(vertex_index) i: u32) -> @builtin(position) vec4f {
|
|
191
|
+
let p = vec2f(f32((i << 1u) & 2u), f32(i & 2u));
|
|
192
|
+
return vec4f(p * 2.0 - 1.0, 0.0, 1.0);
|
|
193
|
+
}
|
|
194
|
+
@fragment fn fs(@builtin(position) pos: vec4f) -> @builtin(frag_depth) f32 {
|
|
195
|
+
return textureLoad(src, vec2i(pos.xy), 0);
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { Drawable, Frame, ViewInfo } from '../render/frame.js';
|
|
2
|
+
import { type Mesh } from '../render/mesh.js';
|
|
3
|
+
import type { Renderer } from '../render/renderer.js';
|
|
4
|
+
import type { SceneTarget } from '../render/scene-target.js';
|
|
5
|
+
/** Floats in the water's params block: 5 vec4 + `WATER_MAX_WAVES` vec4 (144 bytes). */
|
|
6
|
+
export declare const WATER_PARAMS_FLOATS: number;
|
|
7
|
+
/** One scrolling wave layer (`WaterOptions.waves`, `Water.waves`). */
|
|
8
|
+
export interface WaterWave {
|
|
9
|
+
/** World units → field units (bigger is choppier). */
|
|
10
|
+
scale: number;
|
|
11
|
+
/** Field units scrolled per second. */
|
|
12
|
+
speed: number;
|
|
13
|
+
/** Normal strength (and, times `displace`, height) of the layer. */
|
|
14
|
+
amplitude: number;
|
|
15
|
+
/** Scroll direction in the xz plane; normalised when packed. */
|
|
16
|
+
direction: [number, number];
|
|
17
|
+
}
|
|
18
|
+
/** Foam settings (`WaterOptions.foam`, `Water.foam`); `null` for none. */
|
|
19
|
+
export interface WaterFoam {
|
|
20
|
+
/** World units of water depth under which foam forms. Default 0.4. */
|
|
21
|
+
width: number;
|
|
22
|
+
/** Linear RGB. Default near white. */
|
|
23
|
+
color: ArrayLike<number>;
|
|
24
|
+
}
|
|
25
|
+
export interface WaterOptions {
|
|
26
|
+
/** Plane extent along x and z (one number for a square). Default 100. Fixed at construction. */
|
|
27
|
+
size?: number | [number, number];
|
|
28
|
+
/** Grid subdivisions; `displace` needs more than 1 to show. Default 1. Fixed at construction. */
|
|
29
|
+
segments?: number | [number, number];
|
|
30
|
+
/** Surface height (y), relative to `origin`. Default 0. */
|
|
31
|
+
level?: number;
|
|
32
|
+
/**
|
|
33
|
+
* World position of the plane's centre: x and z are baked into the mesh, y is added to
|
|
34
|
+
* `level` (a world whose corner is the origin puts its water at `[sizeX / 2, 0, sizeZ / 2]`).
|
|
35
|
+
* Default `[0, 0, 0]`. Fixed at construction.
|
|
36
|
+
*/
|
|
37
|
+
origin?: ArrayLike<number>;
|
|
38
|
+
/** Linear RGB where the water is shallow. */
|
|
39
|
+
shallowColor?: ArrayLike<number>;
|
|
40
|
+
/** Linear RGB at full depth. */
|
|
41
|
+
deepColor?: ArrayLike<number>;
|
|
42
|
+
/** World units of water depth at which the tint reaches `deepColor`. Default 4. */
|
|
43
|
+
depthFade?: number;
|
|
44
|
+
/** Reflection strength, 0..1 (the weight of the sky colour at grazing angles). Default 0.6. */
|
|
45
|
+
fresnel?: number;
|
|
46
|
+
/** Roughness of the sun highlight. Default 0.08. */
|
|
47
|
+
roughness?: number;
|
|
48
|
+
/** Wave layers (up to `WATER_MAX_WAVES`). Default two layers. */
|
|
49
|
+
waves?: WaterWave[];
|
|
50
|
+
/** Foam where the surface meets geometry; `null` for none. Default on, width 0.4. */
|
|
51
|
+
foam?: Partial<WaterFoam> | null;
|
|
52
|
+
/** Vertex height amplitude of the summed layers. Default 0 (flat mesh, normals still move). */
|
|
53
|
+
displace?: number;
|
|
54
|
+
/** Alpha away from the shoreline. Default 0.85. */
|
|
55
|
+
opacity?: number;
|
|
56
|
+
/** Where to copy the scene depth from (`renderer.target` by default). */
|
|
57
|
+
depthTarget?: SceneTarget;
|
|
58
|
+
/**
|
|
59
|
+
* Take this frame's opaque depth from the renderer's depth hook (`Drawable.readsDepth`,
|
|
60
|
+
* ws/render-hooks) instead of copying the previous frame's in `prepare`: the view splits its
|
|
61
|
+
* scene pass and the water samples the renderer's copy. Only a view with `depthTest` splits;
|
|
62
|
+
* elsewhere the water is then deep everywhere (no copy of its own). Default false.
|
|
63
|
+
*/
|
|
64
|
+
readsDepth?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* An animated water surface: a plane from `geom`'s `plane` whose shader sums scrolling
|
|
68
|
+
* analytic wave layers for the normal (and the height when `displace` > 0), lerps a depth-tinted
|
|
69
|
+
* refraction colour towards a sky reflection by Fresnel, adds the sun's GGX highlight (also to
|
|
70
|
+
* the emissive target), fades to transparent at the shoreline and foams where the water is
|
|
71
|
+
* shallower than `foam.width`. `frame.drawable(water, order)` draws it after opaque geometry
|
|
72
|
+
* (drawables sort as blended); `update(dt)` advances the waves.
|
|
73
|
+
*
|
|
74
|
+
* Every field is live; `prepare` packs them into one `WATER_PARAMS_FLOATS` params block per
|
|
75
|
+
* frame. The sun, its colour and the fog colour (the horizon of the reflection) come from
|
|
76
|
+
* `frame.lights`; `Sky` present or not.
|
|
77
|
+
*
|
|
78
|
+
* Depth: under a depth camera the water tests and writes depth (`less-equal`), so particles and
|
|
79
|
+
* trails sort against it, and `prepare` copies the scene depth (`depthTarget ?? renderer.target`,
|
|
80
|
+
* its `SceneTarget.depth`) into its own `depth32float` texture for the depth fade, the shoreline
|
|
81
|
+
* alpha and the foam. The copy runs before this frame's scene pass, so it holds what the target
|
|
82
|
+
* held then: the previous frame's depth (which includes this water's own surface, read as "no
|
|
83
|
+
* information": deep, no foam) or that of an earlier `renderer.render` call this frame. For a
|
|
84
|
+
* shoreline, draw the water on its own layer in a second view of the same camera, after the
|
|
85
|
+
* opaque view (`harness/water.ts` does). Without a depth camera there is no copy: the surface is
|
|
86
|
+
* deep everywhere, foam off, and the pipeline has no depth state.
|
|
87
|
+
*/
|
|
88
|
+
export declare class Water implements Drawable {
|
|
89
|
+
/** Surface height (y) above `origin`. Live. */
|
|
90
|
+
level: number;
|
|
91
|
+
/** World position of the plane's centre (`WaterOptions.origin`). Fixed. */
|
|
92
|
+
readonly origin: Float32Array<ArrayBuffer>;
|
|
93
|
+
/** Linear RGB where the water is shallow. Live. */
|
|
94
|
+
readonly shallowColor: Float32Array<ArrayBuffer>;
|
|
95
|
+
/** Linear RGB at full depth. Live. */
|
|
96
|
+
readonly deepColor: Float32Array<ArrayBuffer>;
|
|
97
|
+
/** World units of water depth to full `deepColor`. Live. */
|
|
98
|
+
depthFade: number;
|
|
99
|
+
/** Reflection strength, 0..1. Live. */
|
|
100
|
+
fresnel: number;
|
|
101
|
+
/** Roughness of the sun highlight. Live. */
|
|
102
|
+
roughness: number;
|
|
103
|
+
/** Wave layers; the first `WATER_MAX_WAVES` are uploaded. Live (replace or mutate). */
|
|
104
|
+
waves: WaterWave[];
|
|
105
|
+
/** Foam settings, or null for none. Live (replace or mutate). */
|
|
106
|
+
foam: WaterFoam | null;
|
|
107
|
+
/** Vertex height amplitude. Live. */
|
|
108
|
+
displace: number;
|
|
109
|
+
/** Alpha away from the shoreline. Live. */
|
|
110
|
+
opacity: number;
|
|
111
|
+
/** Where the scene depth is copied from; null for `renderer.target`. Live. */
|
|
112
|
+
depthTarget: SceneTarget | null;
|
|
113
|
+
/** See `WaterOptions.readsDepth`. Live. */
|
|
114
|
+
readsDepth: boolean;
|
|
115
|
+
/** Seconds `update` has advanced; the waves' clock. */
|
|
116
|
+
time: number;
|
|
117
|
+
/** The plane, owned; drawn through this drawable's own pipeline. */
|
|
118
|
+
readonly mesh: Mesh;
|
|
119
|
+
private readonly renderer;
|
|
120
|
+
private readonly device;
|
|
121
|
+
private readonly params;
|
|
122
|
+
private readonly paramsBuffer;
|
|
123
|
+
private readonly layout;
|
|
124
|
+
private readonly dummy;
|
|
125
|
+
private readonly dummyGroup;
|
|
126
|
+
private readonly desc;
|
|
127
|
+
/**
|
|
128
|
+
* Pipelines per depth format (null: none; a depth one writes depth) × the view target's aux
|
|
129
|
+
* key, built on first use from `renderer.sceneTargets` (ws/render-10).
|
|
130
|
+
*/
|
|
131
|
+
private readonly pipelines;
|
|
132
|
+
private readonly copyLayout;
|
|
133
|
+
private readonly copyPipeline;
|
|
134
|
+
private readonly copyAtt;
|
|
135
|
+
private readonly copyPass;
|
|
136
|
+
private copy;
|
|
137
|
+
private copyGroup;
|
|
138
|
+
private src;
|
|
139
|
+
private srcGroup;
|
|
140
|
+
/** The depth copy ran this frame (`draw` binds it and the shader reads it). */
|
|
141
|
+
private depthOn;
|
|
142
|
+
/** The renderer's `depthCopy` view the hook group was made for (`readsDepth`). */
|
|
143
|
+
private hookView;
|
|
144
|
+
private hookGroup;
|
|
145
|
+
/** The group `draw` binds: own copy, the renderer's copy, or the 1×1 stand-in. */
|
|
146
|
+
private depthGroup;
|
|
147
|
+
constructor(renderer: Renderer, opts?: WaterOptions);
|
|
148
|
+
/** Advance the waves' clock. */
|
|
149
|
+
update(dt: number): void;
|
|
150
|
+
/**
|
|
151
|
+
* Copy the scene depth (under a depth camera) and pack the live fields into the params block
|
|
152
|
+
* (`WATER_PARAMS_FLOATS` floats: shallow rgb + opacity, deep rgb + depthFade, fresnel,
|
|
153
|
+
* roughness, displace, level, foam rgb + width, time, wave count, depth copy on, 0, then
|
|
154
|
+
* scale, speed, amplitude, direction angle per wave). Called by the renderer once per frame.
|
|
155
|
+
* No allocation in steady state.
|
|
156
|
+
*/
|
|
157
|
+
prepare(encoder: GPUCommandEncoder, frame?: Frame): void;
|
|
158
|
+
/** Draw inside the scene pass: the plane, a depth-writing pipeline when the frame has depth. */
|
|
159
|
+
draw(pass: GPURenderPassEncoder, frame?: Frame): void;
|
|
160
|
+
/**
|
|
161
|
+
* The renderer's depth hook (`readsDepth`): bind this frame's opaque depth copy and flip the
|
|
162
|
+
* shader's depth flag on (a 4-byte write; `queue.writeBuffer` lands before the frame's
|
|
163
|
+
* commands run). A new bind group only when the copy texture changed (resize).
|
|
164
|
+
*/
|
|
165
|
+
afterOpaque(_encoder: GPUCommandEncoder, view: ViewInfo): void;
|
|
166
|
+
private copyDepth;
|
|
167
|
+
private makeGroup;
|
|
168
|
+
private pipelineFor;
|
|
169
|
+
destroy(): void;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* The surface height at world (`x`, `z`) at time `t` (default `water.time`): the origin's y
|
|
173
|
+
* plus `level` plus `displace` times the summed wave layers, the formula the vertex shader
|
|
174
|
+
* runs. Pure; no allocation. With `displace` 0 it is `origin[1] + level`.
|
|
175
|
+
*/
|
|
176
|
+
export declare function waterHeight(water: Water, x: number, z: number, t?: number): number;
|