@driftengine/core 3.61.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/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +9 -0
- package/dist/behavior/behaviorTree.d.ts +140 -0
- package/dist/behavior/behaviorTree.js +289 -0
- package/dist/build/shaderComments.d.ts +64 -0
- package/dist/build/shaderComments.js +0 -0
- package/dist/cinematic/player.d.ts +80 -0
- package/dist/cinematic/player.js +184 -0
- package/dist/cinematic/script.d.ts +63 -0
- package/dist/cinematic/script.js +141 -0
- package/dist/core/bootGate.d.ts +37 -0
- package/dist/core/bootGate.js +47 -0
- package/dist/core/loadTracker.d.ts +78 -0
- package/dist/core/loadTracker.js +106 -0
- package/dist/core/loop.d.ts +118 -0
- package/dist/core/loop.js +84 -0
- package/dist/core/messageQueue.d.ts +61 -0
- package/dist/core/messageQueue.js +104 -0
- package/dist/core/onceSet.d.ts +27 -0
- package/dist/core/onceSet.js +62 -0
- package/dist/core/preferences.d.ts +47 -0
- package/dist/core/preferences.js +140 -0
- package/dist/core/remoteSave.d.ts +154 -0
- package/dist/core/remoteSave.js +249 -0
- package/dist/core/rng.d.ts +64 -0
- package/dist/core/rng.js +72 -0
- package/dist/core/stepBudget.d.ts +91 -0
- package/dist/core/stepBudget.js +105 -0
- package/dist/core/storage.d.ts +52 -0
- package/dist/core/storage.js +85 -0
- package/dist/core/tickTrace.d.ts +72 -0
- package/dist/core/tickTrace.js +102 -0
- package/dist/core/timeCurve.d.ts +83 -0
- package/dist/core/timeCurve.js +107 -0
- package/dist/core/withDefaults.d.ts +21 -0
- package/dist/core/withDefaults.js +29 -0
- package/dist/dev/contactProbe.d.ts +41 -0
- package/dist/dev/contactProbe.js +58 -0
- package/dist/dev/fpsMeter.d.ts +45 -0
- package/dist/dev/fpsMeter.js +86 -0
- package/dist/environment/celestialClock.d.ts +141 -0
- package/dist/environment/celestialClock.js +262 -0
- package/dist/geometry/decal.d.ts +61 -0
- package/dist/geometry/decal.js +178 -0
- package/dist/geometry/filmPatch.d.ts +35 -0
- package/dist/geometry/filmPatch.js +112 -0
- package/dist/geometry/growable.d.ts +70 -0
- package/dist/geometry/growable.js +167 -0
- package/dist/geometry/lightVolume.d.ts +76 -0
- package/dist/geometry/lightVolume.js +65 -0
- package/dist/geometry/meshBuilder.d.ts +426 -0
- package/dist/geometry/meshBuilder.js +1184 -0
- package/dist/geometry/pixelFont.d.ts +59 -0
- package/dist/geometry/pixelFont.js +179 -0
- package/dist/geometry/ribbon.d.ts +101 -0
- package/dist/geometry/ribbon.js +546 -0
- package/dist/geometry/shellFill.d.ts +101 -0
- package/dist/geometry/shellFill.js +203 -0
- package/dist/geometry/spline.d.ts +162 -0
- package/dist/geometry/spline.js +527 -0
- package/dist/geometry/tangents.d.ts +30 -0
- package/dist/geometry/tangents.js +142 -0
- package/dist/geometry/textMesh.d.ts +51 -0
- package/dist/geometry/textMesh.js +57 -0
- package/dist/geometry/treeBuilder.d.ts +37 -0
- package/dist/geometry/treeBuilder.js +56 -0
- package/dist/host/display.d.ts +135 -0
- package/dist/host/display.js +114 -0
- package/dist/host/files.d.ts +25 -0
- package/dist/host/files.js +44 -0
- package/dist/host/lifecycle.d.ts +45 -0
- package/dist/host/lifecycle.js +28 -0
- package/dist/host/platformServices.d.ts +23 -0
- package/dist/host/platformServices.js +1 -0
- package/dist/host/screen.d.ts +49 -0
- package/dist/host/screen.js +90 -0
- package/dist/index.d.ts +289 -0
- package/dist/index.js +320 -0
- package/dist/input/actionMap.d.ts +181 -0
- package/dist/input/actionMap.js +314 -0
- package/dist/input/activeDevice.d.ts +55 -0
- package/dist/input/activeDevice.js +83 -0
- package/dist/input/gamepadIdentity.d.ts +43 -0
- package/dist/input/gamepadIdentity.js +108 -0
- package/dist/input/gamepadMapping.d.ts +56 -0
- package/dist/input/gamepadMapping.js +91 -0
- package/dist/input/input.d.ts +281 -0
- package/dist/input/input.js +703 -0
- package/dist/input/inputHarness.d.ts +42 -0
- package/dist/input/inputHarness.js +193 -0
- package/dist/input/rightGesture.d.ts +57 -0
- package/dist/input/rightGesture.js +49 -0
- package/dist/input/rumble.d.ts +71 -0
- package/dist/input/rumble.js +119 -0
- package/dist/input/touchControls.d.ts +138 -0
- package/dist/input/touchControls.js +352 -0
- package/dist/input/typingTarget.d.ts +6 -0
- package/dist/input/typingTarget.js +27 -0
- package/dist/math/bounds.d.ts +61 -0
- package/dist/math/bounds.js +121 -0
- package/dist/math/color.d.ts +8 -0
- package/dist/math/color.js +35 -0
- package/dist/math/exact.d.ts +66 -0
- package/dist/math/exact.js +262 -0
- package/dist/math/frustum.d.ts +44 -0
- package/dist/math/frustum.js +90 -0
- package/dist/math/intersect.d.ts +76 -0
- package/dist/math/intersect.js +185 -0
- package/dist/math/scalar.d.ts +51 -0
- package/dist/math/scalar.js +99 -0
- package/dist/math/spring.d.ts +59 -0
- package/dist/math/spring.js +88 -0
- package/dist/nav/navGraph.d.ts +71 -0
- package/dist/nav/navGraph.js +111 -0
- package/dist/nav/navPath.d.ts +93 -0
- package/dist/nav/navPath.js +162 -0
- package/dist/nav/navSearch.d.ts +74 -0
- package/dist/nav/navSearch.js +198 -0
- package/dist/physics/boxSurface.d.ts +48 -0
- package/dist/physics/boxSurface.js +73 -0
- package/dist/physics/colliderSurface.d.ts +46 -0
- package/dist/physics/colliderSurface.js +146 -0
- package/dist/physics/compositeSurface.d.ts +33 -0
- package/dist/physics/compositeSurface.js +108 -0
- package/dist/physics/heightSurface.d.ts +103 -0
- package/dist/physics/heightSurface.js +153 -0
- package/dist/physics/ribbonSurface.d.ts +239 -0
- package/dist/physics/ribbonSurface.js +522 -0
- package/dist/render/ambientOcclusionPass.d.ts +53 -0
- package/dist/render/ambientOcclusionPass.js +179 -0
- package/dist/render/areaLights.d.ts +116 -0
- package/dist/render/areaLights.js +91 -0
- package/dist/render/areaShadowSet.d.ts +184 -0
- package/dist/render/areaShadowSet.js +277 -0
- package/dist/render/atmosphere.d.ts +94 -0
- package/dist/render/atmosphere.js +91 -0
- package/dist/render/backend/api.d.ts +496 -0
- package/dist/render/backend/api.js +1 -0
- package/dist/render/backend/budget.d.ts +82 -0
- package/dist/render/backend/budget.js +99 -0
- package/dist/render/backend/createRenderer.d.ts +135 -0
- package/dist/render/backend/createRenderer.js +201 -0
- package/dist/render/backend/deadline.d.ts +24 -0
- package/dist/render/backend/deadline.js +38 -0
- package/dist/render/backend/probe.d.ts +30 -0
- package/dist/render/backend/probe.js +129 -0
- package/dist/render/backend/select.d.ts +70 -0
- package/dist/render/backend/select.js +249 -0
- package/dist/render/backend/timer.d.ts +50 -0
- package/dist/render/backend/timer.js +1 -0
- package/dist/render/backend/webgl2/instanced.d.ts +21 -0
- package/dist/render/backend/webgl2/instanced.js +42 -0
- package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
- package/dist/render/backend/webgl2/morphTexture.js +55 -0
- package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
- package/dist/render/backend/webgl2/renderer.js +6041 -0
- package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
- package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
- package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
- package/dist/render/backend/webgpu/boltPass.js +160 -0
- package/dist/render/backend/webgpu/buffers.d.ts +159 -0
- package/dist/render/backend/webgpu/buffers.js +402 -0
- package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
- package/dist/render/backend/webgpu/causticsPass.js +138 -0
- package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
- package/dist/render/backend/webgpu/clusterBinner.js +206 -0
- package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
- package/dist/render/backend/webgpu/depthPass.js +228 -0
- package/dist/render/backend/webgpu/device.d.ts +52 -0
- package/dist/render/backend/webgpu/device.js +121 -0
- package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
- package/dist/render/backend/webgpu/drawCommand.js +54 -0
- package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
- package/dist/render/backend/webgpu/environmentTexels.js +79 -0
- package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
- package/dist/render/backend/webgpu/filmPass.js +97 -0
- package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
- package/dist/render/backend/webgpu/flatPass.js +482 -0
- package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
- package/dist/render/backend/webgpu/flockPass.js +129 -0
- package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
- package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
- package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
- package/dist/render/backend/webgpu/insetPass.js +108 -0
- package/dist/render/backend/webgpu/instanced.d.ts +27 -0
- package/dist/render/backend/webgpu/instanced.js +49 -0
- package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
- package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
- package/dist/render/backend/webgpu/linePass.d.ts +90 -0
- package/dist/render/backend/webgpu/linePass.js +220 -0
- package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
- package/dist/render/backend/webgpu/morphTexture.js +51 -0
- package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
- package/dist/render/backend/webgpu/panelPass.js +114 -0
- package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
- package/dist/render/backend/webgpu/particlePass.js +280 -0
- package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
- package/dist/render/backend/webgpu/pipelineCache.js +140 -0
- package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
- package/dist/render/backend/webgpu/plumePass.js +213 -0
- package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
- package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
- package/dist/render/backend/webgpu/postPass.d.ts +342 -0
- package/dist/render/backend/webgpu/postPass.js +366 -0
- package/dist/render/backend/webgpu/probePass.d.ts +108 -0
- package/dist/render/backend/webgpu/probePass.js +188 -0
- package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
- package/dist/render/backend/webgpu/reflectionPass.js +87 -0
- package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
- package/dist/render/backend/webgpu/renderer.js +10911 -0
- package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
- package/dist/render/backend/webgpu/scatterPass.js +266 -0
- package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
- package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
- package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
- package/dist/render/backend/webgpu/shaderModules.js +45 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
- package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
- package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
- package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
- package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
- package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
- package/dist/render/backend/webgpu/skyPass.js +70 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
- package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
- package/dist/render/backend/webgpu/textPass.d.ts +73 -0
- package/dist/render/backend/webgpu/textPass.js +190 -0
- package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
- package/dist/render/backend/webgpu/uniformRing.js +208 -0
- package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
- package/dist/render/backend/webgpu/waterPass.js +160 -0
- package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
- package/dist/render/backend/webgpu/windStreakPass.js +153 -0
- package/dist/render/billboard.d.ts +27 -0
- package/dist/render/billboard.js +79 -0
- package/dist/render/bloomChain.d.ts +66 -0
- package/dist/render/bloomChain.js +83 -0
- package/dist/render/bloomPass.d.ts +54 -0
- package/dist/render/bloomPass.js +219 -0
- package/dist/render/boltBatch.d.ts +39 -0
- package/dist/render/boltBatch.js +121 -0
- package/dist/render/boltPool.d.ts +135 -0
- package/dist/render/boltPool.js +259 -0
- package/dist/render/boom.d.ts +46 -0
- package/dist/render/boom.js +81 -0
- package/dist/render/camera.d.ts +119 -0
- package/dist/render/camera.js +304 -0
- package/dist/render/causticsRenderer.d.ts +63 -0
- package/dist/render/causticsRenderer.js +119 -0
- package/dist/render/cinematicCamera.d.ts +102 -0
- package/dist/render/cinematicCamera.js +227 -0
- package/dist/render/clusteredLights.d.ts +260 -0
- package/dist/render/clusteredLights.js +479 -0
- package/dist/render/colourGrade.d.ts +62 -0
- package/dist/render/colourGrade.js +91 -0
- package/dist/render/compute.d.ts +74 -0
- package/dist/render/compute.js +8 -0
- package/dist/render/contextLoss.d.ts +32 -0
- package/dist/render/contextLoss.js +46 -0
- package/dist/render/debugLines.d.ts +75 -0
- package/dist/render/debugLines.js +281 -0
- package/dist/render/decalPass.d.ts +34 -0
- package/dist/render/decalPass.js +103 -0
- package/dist/render/decalProjector.d.ts +140 -0
- package/dist/render/decalProjector.js +282 -0
- package/dist/render/decalQueue.d.ts +53 -0
- package/dist/render/decalQueue.js +87 -0
- package/dist/render/depthConvention.d.ts +314 -0
- package/dist/render/depthConvention.js +346 -0
- package/dist/render/drawingBuffer.d.ts +52 -0
- package/dist/render/drawingBuffer.js +67 -0
- package/dist/render/emptyTexture.d.ts +60 -0
- package/dist/render/emptyTexture.js +103 -0
- package/dist/render/envProbeArray.d.ts +85 -0
- package/dist/render/envProbeArray.js +164 -0
- package/dist/render/equirectToCube.d.ts +54 -0
- package/dist/render/equirectToCube.js +123 -0
- package/dist/render/flockGeometry.d.ts +23 -0
- package/dist/render/flockGeometry.js +43 -0
- package/dist/render/flockRenderer.d.ts +37 -0
- package/dist/render/flockRenderer.js +70 -0
- package/dist/render/frame/arena.d.ts +32 -0
- package/dist/render/frame/arena.js +65 -0
- package/dist/render/frame/index.d.ts +18 -0
- package/dist/render/frame/index.js +4 -0
- package/dist/render/frame/replay.d.ts +34 -0
- package/dist/render/frame/replay.js +48 -0
- package/dist/render/frame/resources.d.ts +25 -0
- package/dist/render/frame/resources.js +55 -0
- package/dist/render/frame/schedule.d.ts +37 -0
- package/dist/render/frame/schedule.js +61 -0
- package/dist/render/frameView.d.ts +19 -0
- package/dist/render/frameView.js +1 -0
- package/dist/render/gizmo.d.ts +236 -0
- package/dist/render/gizmo.js +727 -0
- package/dist/render/globalMedium.d.ts +124 -0
- package/dist/render/globalMedium.js +100 -0
- package/dist/render/globalMediumPass.d.ts +101 -0
- package/dist/render/globalMediumPass.js +250 -0
- package/dist/render/gpuCapability.d.ts +111 -0
- package/dist/render/gpuCapability.js +194 -0
- package/dist/render/gpuTimer.d.ts +87 -0
- package/dist/render/gpuTimer.js +145 -0
- package/dist/render/halfFloat.d.ts +4 -0
- package/dist/render/halfFloat.js +38 -0
- package/dist/render/handleRegistry.d.ts +54 -0
- package/dist/render/handleRegistry.js +84 -0
- package/dist/render/iesProfile.d.ts +64 -0
- package/dist/render/iesProfile.js +179 -0
- package/dist/render/imageTexels.d.ts +50 -0
- package/dist/render/imageTexels.js +91 -0
- package/dist/render/instancedMesh.d.ts +48 -0
- package/dist/render/instancedMesh.js +127 -0
- package/dist/render/instances.d.ts +69 -0
- package/dist/render/instances.js +52 -0
- package/dist/render/lightBudget.d.ts +397 -0
- package/dist/render/lightBudget.js +524 -0
- package/dist/render/lightMatrix.d.ts +3 -0
- package/dist/render/lightMatrix.js +45 -0
- package/dist/render/lightVolumeDraw.d.ts +132 -0
- package/dist/render/lightVolumeDraw.js +181 -0
- package/dist/render/lineBatch.d.ts +60 -0
- package/dist/render/lineBatch.js +160 -0
- package/dist/render/linePoints.d.ts +33 -0
- package/dist/render/linePoints.js +46 -0
- package/dist/render/livePointShadowSet.d.ts +72 -0
- package/dist/render/livePointShadowSet.js +258 -0
- package/dist/render/lod.d.ts +35 -0
- package/dist/render/lod.js +65 -0
- package/dist/render/mesh.d.ts +177 -0
- package/dist/render/mesh.js +466 -0
- package/dist/render/occlusion.d.ts +81 -0
- package/dist/render/occlusion.js +378 -0
- package/dist/render/oitPass.d.ts +67 -0
- package/dist/render/oitPass.js +213 -0
- package/dist/render/orderIndependent.d.ts +92 -0
- package/dist/render/orderIndependent.js +108 -0
- package/dist/render/particleBatch.d.ts +140 -0
- package/dist/render/particleBatch.js +186 -0
- package/dist/render/particleMaterial.d.ts +54 -0
- package/dist/render/particleMaterial.js +42 -0
- package/dist/render/particlePool.d.ts +124 -0
- package/dist/render/particlePool.js +182 -0
- package/dist/render/pass.d.ts +195 -0
- package/dist/render/pass.js +9 -0
- package/dist/render/passTarget.d.ts +86 -0
- package/dist/render/passTarget.js +121 -0
- package/dist/render/pickable.d.ts +31 -0
- package/dist/render/pickable.js +172 -0
- package/dist/render/planarReflection.d.ts +59 -0
- package/dist/render/planarReflection.js +194 -0
- package/dist/render/planarReflectionDraw.d.ts +31 -0
- package/dist/render/planarReflectionDraw.js +65 -0
- package/dist/render/plumeGeometry.d.ts +25 -0
- package/dist/render/plumeGeometry.js +61 -0
- package/dist/render/plumeMaterial.d.ts +31 -0
- package/dist/render/plumeMaterial.js +64 -0
- package/dist/render/plumeRenderer.d.ts +96 -0
- package/dist/render/plumeRenderer.js +185 -0
- package/dist/render/pointLightSelection.d.ts +175 -0
- package/dist/render/pointLightSelection.js +301 -0
- package/dist/render/pointShadowArray.d.ts +95 -0
- package/dist/render/pointShadowArray.js +219 -0
- package/dist/render/pointShadowBudget.d.ts +118 -0
- package/dist/render/pointShadowBudget.js +221 -0
- package/dist/render/pointShadowImage.d.ts +265 -0
- package/dist/render/pointShadowImage.js +339 -0
- package/dist/render/pointShadowMap.d.ts +93 -0
- package/dist/render/pointShadowMap.js +167 -0
- package/dist/render/pointShadowSystem.d.ts +195 -0
- package/dist/render/pointShadowSystem.js +336 -0
- package/dist/render/prefilterEnvMap.d.ts +124 -0
- package/dist/render/prefilterEnvMap.js +146 -0
- package/dist/render/prefilterPass.d.ts +44 -0
- package/dist/render/prefilterPass.js +98 -0
- package/dist/render/probeGrid.d.ts +122 -0
- package/dist/render/probeGrid.js +174 -0
- package/dist/render/rainField.d.ts +99 -0
- package/dist/render/rainField.js +168 -0
- package/dist/render/reflectionProbe.d.ts +188 -0
- package/dist/render/reflectionProbe.js +437 -0
- package/dist/render/renderQuality.d.ts +699 -0
- package/dist/render/renderQuality.js +293 -0
- package/dist/render/rendererHarness.d.ts +39 -0
- package/dist/render/rendererHarness.js +185 -0
- package/dist/render/resolutionGovernor.d.ts +107 -0
- package/dist/render/resolutionGovernor.js +144 -0
- package/dist/render/scatterDeform.d.ts +17 -0
- package/dist/render/scatterDeform.js +46 -0
- package/dist/render/sceneTarget.d.ts +288 -0
- package/dist/render/sceneTarget.js +856 -0
- package/dist/render/screenSpaceReflection.d.ts +233 -0
- package/dist/render/screenSpaceReflection.js +415 -0
- package/dist/render/sdfFont.d.ts +77 -0
- package/dist/render/sdfFont.js +86 -0
- package/dist/render/sdfTextLayout.d.ts +46 -0
- package/dist/render/sdfTextLayout.js +145 -0
- package/dist/render/sdfTextRenderer.d.ts +75 -0
- package/dist/render/sdfTextRenderer.js +194 -0
- package/dist/render/seaState.d.ts +25 -0
- package/dist/render/seaState.js +34 -0
- package/dist/render/segmentQuads.d.ts +29 -0
- package/dist/render/segmentQuads.js +75 -0
- package/dist/render/shader.d.ts +5 -0
- package/dist/render/shader.js +172 -0
- package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
- package/dist/render/shaders/ambientOcclusion.js +352 -0
- package/dist/render/shaders/arcane.d.ts +19 -0
- package/dist/render/shaders/arcane.js +102 -0
- package/dist/render/shaders/bloom.d.ts +70 -0
- package/dist/render/shaders/bloom.js +227 -0
- package/dist/render/shaders/bolt.d.ts +17 -0
- package/dist/render/shaders/bolt.js +161 -0
- package/dist/render/shaders/caustics.d.ts +38 -0
- package/dist/render/shaders/caustics.js +167 -0
- package/dist/render/shaders/conditionals.d.ts +21 -0
- package/dist/render/shaders/conditionals.js +55 -0
- package/dist/render/shaders/decalProject.d.ts +25 -0
- package/dist/render/shaders/decalProject.js +125 -0
- package/dist/render/shaders/depth.d.ts +14 -0
- package/dist/render/shaders/depth.js +114 -0
- package/dist/render/shaders/depthOfField.d.ts +41 -0
- package/dist/render/shaders/depthOfField.js +139 -0
- package/dist/render/shaders/film.d.ts +15 -0
- package/dist/render/shaders/film.js +283 -0
- package/dist/render/shaders/fire.d.ts +12 -0
- package/dist/render/shaders/fire.js +178 -0
- package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
- package/dist/render/shaders/flat/directionalShadow.js +195 -0
- package/dist/render/shaders/flat/index.d.ts +135 -0
- package/dist/render/shaders/flat/index.js +387 -0
- package/dist/render/shaders/flat/lobes.d.ts +1 -0
- package/dist/render/shaders/flat/lobes.js +398 -0
- package/dist/render/shaders/flat/main.d.ts +2 -0
- package/dist/render/shaders/flat/main.js +1630 -0
- package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
- package/dist/render/shaders/flat/pointShadow.js +322 -0
- package/dist/render/shaders/flat/preamble.d.ts +15 -0
- package/dist/render/shaders/flat/preamble.js +864 -0
- package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
- package/dist/render/shaders/flat/probeGrid.js +151 -0
- package/dist/render/shaders/flat/surface.d.ts +2 -0
- package/dist/render/shaders/flat/surface.js +40 -0
- package/dist/render/shaders/flock.d.ts +11 -0
- package/dist/render/shaders/flock.js +102 -0
- package/dist/render/shaders/fog.d.ts +37 -0
- package/dist/render/shaders/fog.js +98 -0
- package/dist/render/shaders/fullscreen.d.ts +16 -0
- package/dist/render/shaders/fullscreen.js +27 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
- package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
- package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
- package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
- package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
- package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
- package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
- package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
- package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
- package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
- package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
- package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
- package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
- package/dist/render/shaders/generated/depth.wgsl.js +137 -0
- package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
- package/dist/render/shaders/generated/film.wgsl.js +140 -0
- package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
- package/dist/render/shaders/generated/fire.wgsl.js +134 -0
- package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
- package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
- package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
- package/dist/render/shaders/generated/flock.wgsl.js +79 -0
- package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
- package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
- package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
- package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
- package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
- package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
- package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
- package/dist/render/shaders/generated/line.wgsl.js +134 -0
- package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
- package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
- package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
- package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
- package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
- package/dist/render/shaders/generated/panel.wgsl.js +54 -0
- package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
- package/dist/render/shaders/generated/particle.wgsl.js +338 -0
- package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
- package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
- package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
- package/dist/render/shaders/generated/rush.wgsl.js +137 -0
- package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
- package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
- package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
- package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
- package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
- package/dist/render/shaders/generated/sky.wgsl.js +106 -0
- package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
- package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
- package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
- package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
- package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
- package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
- package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
- package/dist/render/shaders/generated/text.wgsl.js +104 -0
- package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
- package/dist/render/shaders/generated/water.wgsl.js +253 -0
- package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
- package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
- package/dist/render/shaders/gerstner.d.ts +21 -0
- package/dist/render/shaders/gerstner.js +110 -0
- package/dist/render/shaders/globalMedium.d.ts +56 -0
- package/dist/render/shaders/globalMedium.js +393 -0
- package/dist/render/shaders/lightVolume.d.ts +61 -0
- package/dist/render/shaders/lightVolume.js +527 -0
- package/dist/render/shaders/line.d.ts +18 -0
- package/dist/render/shaders/line.js +122 -0
- package/dist/render/shaders/morph.d.ts +26 -0
- package/dist/render/shaders/morph.js +61 -0
- package/dist/render/shaders/octahedral.d.ts +76 -0
- package/dist/render/shaders/octahedral.js +161 -0
- package/dist/render/shaders/octahedralResolve.d.ts +25 -0
- package/dist/render/shaders/octahedralResolve.js +81 -0
- package/dist/render/shaders/oitResolve.d.ts +17 -0
- package/dist/render/shaders/oitResolve.js +42 -0
- package/dist/render/shaders/outputTransform.d.ts +37 -0
- package/dist/render/shaders/outputTransform.js +106 -0
- package/dist/render/shaders/panel.d.ts +17 -0
- package/dist/render/shaders/panel.js +50 -0
- package/dist/render/shaders/particle.d.ts +82 -0
- package/dist/render/shaders/particle.js +431 -0
- package/dist/render/shaders/prefilter.d.ts +37 -0
- package/dist/render/shaders/prefilter.js +276 -0
- package/dist/render/shaders/rush.d.ts +21 -0
- package/dist/render/shaders/rush.js +355 -0
- package/dist/render/shaders/scatter.d.ts +14 -0
- package/dist/render/shaders/scatter.js +206 -0
- package/dist/render/shaders/sdfText.d.ts +9 -0
- package/dist/render/shaders/sdfText.js +65 -0
- package/dist/render/shaders/skinning.d.ts +17 -0
- package/dist/render/shaders/skinning.js +59 -0
- package/dist/render/shaders/sky.d.ts +10 -0
- package/dist/render/shaders/sky.js +242 -0
- package/dist/render/shaders/smoke.d.ts +8 -0
- package/dist/render/shaders/smoke.js +88 -0
- package/dist/render/shaders/ssrResolve.d.ts +15 -0
- package/dist/render/shaders/ssrResolve.js +28 -0
- package/dist/render/shaders/ssrTrace.d.ts +22 -0
- package/dist/render/shaders/ssrTrace.js +230 -0
- package/dist/render/shaders/tangentFrame.d.ts +17 -0
- package/dist/render/shaders/tangentFrame.js +70 -0
- package/dist/render/shaders/temporalResolve.d.ts +1 -0
- package/dist/render/shaders/temporalResolve.js +150 -0
- package/dist/render/shaders/text.d.ts +17 -0
- package/dist/render/shaders/text.js +155 -0
- package/dist/render/shaders/vertexChannel.d.ts +39 -0
- package/dist/render/shaders/vertexChannel.js +69 -0
- package/dist/render/shaders/water.d.ts +18 -0
- package/dist/render/shaders/water.js +354 -0
- package/dist/render/shaders/windStreaks.d.ts +14 -0
- package/dist/render/shaders/windStreaks.js +129 -0
- package/dist/render/shadowCasters.d.ts +107 -0
- package/dist/render/shadowCasters.js +1 -0
- package/dist/render/shadowMap.d.ts +10 -0
- package/dist/render/shadowMap.js +80 -0
- package/dist/render/shotPlacement.d.ts +80 -0
- package/dist/render/shotPlacement.js +183 -0
- package/dist/render/skinPalette.d.ts +90 -0
- package/dist/render/skinPalette.js +136 -0
- package/dist/render/ssrPass.d.ts +59 -0
- package/dist/render/ssrPass.js +196 -0
- package/dist/render/surfaceSheet.d.ts +52 -0
- package/dist/render/surfaceSheet.js +99 -0
- package/dist/render/surfaceTexture.d.ts +197 -0
- package/dist/render/surfaceTexture.js +116 -0
- package/dist/render/temporalAa.d.ts +104 -0
- package/dist/render/temporalAa.js +194 -0
- package/dist/render/temporalPass.d.ts +54 -0
- package/dist/render/temporalPass.js +135 -0
- package/dist/render/textLayout.d.ts +88 -0
- package/dist/render/textLayout.js +201 -0
- package/dist/render/textRenderer.d.ts +32 -0
- package/dist/render/textRenderer.js +176 -0
- package/dist/render/thirdPersonCamera.d.ts +272 -0
- package/dist/render/thirdPersonCamera.js +479 -0
- package/dist/render/trample.d.ts +57 -0
- package/dist/render/trample.js +134 -0
- package/dist/render/translucentQueue.d.ts +76 -0
- package/dist/render/translucentQueue.js +90 -0
- package/dist/render/uniformVectorBudget.d.ts +105 -0
- package/dist/render/uniformVectorBudget.js +201 -0
- package/dist/render/uploadStep.d.ts +14 -0
- package/dist/render/uploadStep.js +14 -0
- package/dist/render/vertexDefaults.d.ts +48 -0
- package/dist/render/vertexDefaults.js +111 -0
- package/dist/render/visibility.d.ts +22 -0
- package/dist/render/visibility.js +47 -0
- package/dist/render/waterDraw.d.ts +57 -0
- package/dist/render/waterDraw.js +102 -0
- package/dist/render/waterGrid.d.ts +62 -0
- package/dist/render/waterGrid.js +151 -0
- package/dist/render/waterRenderer.d.ts +163 -0
- package/dist/render/waterRenderer.js +165 -0
- package/dist/render/wind.d.ts +45 -0
- package/dist/render/wind.js +32 -0
- package/dist/render/windField.d.ts +34 -0
- package/dist/render/windField.js +13 -0
- package/dist/render/windStreakDraw.d.ts +73 -0
- package/dist/render/windStreakDraw.js +86 -0
- package/dist/render/windStreakRenderer.d.ts +37 -0
- package/dist/render/windStreakRenderer.js +86 -0
- package/dist/scene/node.d.ts +128 -0
- package/dist/scene/node.js +319 -0
- package/dist/scene/visit.d.ts +38 -0
- package/dist/scene/visit.js +43 -0
- package/dist/ui/clipMime.d.ts +46 -0
- package/dist/ui/clipMime.js +88 -0
- package/dist/ui/exportTarget.d.ts +305 -0
- package/dist/ui/exportTarget.js +368 -0
- package/dist/ui/frameOverlay.d.ts +59 -0
- package/dist/ui/frameOverlay.js +76 -0
- package/dist/ui/framePacer.d.ts +142 -0
- package/dist/ui/framePacer.js +284 -0
- package/dist/ui/frameRecorder.d.ts +188 -0
- package/dist/ui/frameRecorder.js +221 -0
- package/dist/ui/fullscreen.d.ts +72 -0
- package/dist/ui/fullscreen.js +92 -0
- package/dist/ui/pixelCursor.d.ts +28 -0
- package/dist/ui/pixelCursor.js +66 -0
- package/dist/ui/splash.d.ts +86 -0
- package/dist/ui/splash.js +300 -0
- package/dist/ui/stillFrame.d.ts +22 -0
- package/dist/ui/stillFrame.js +40 -0
- package/package.json +60 -0
- package/src/behavior/behaviorTree.ts +346 -0
- package/src/build/shaderComments.ts +0 -0
- package/src/cinematic/player.ts +209 -0
- package/src/cinematic/script.ts +231 -0
- package/src/core/bootGate.ts +49 -0
- package/src/core/loadTracker.ts +144 -0
- package/src/core/loop.ts +211 -0
- package/src/core/messageQueue.ts +145 -0
- package/src/core/onceSet.ts +65 -0
- package/src/core/preferences.ts +177 -0
- package/src/core/remoteSave.ts +347 -0
- package/src/core/rng.ts +101 -0
- package/src/core/stepBudget.ts +136 -0
- package/src/core/storage.ts +114 -0
- package/src/core/tickTrace.ts +129 -0
- package/src/core/timeCurve.ts +175 -0
- package/src/core/withDefaults.ts +28 -0
- package/src/dev/contactProbe.ts +115 -0
- package/src/dev/fpsMeter.ts +101 -0
- package/src/environment/celestialClock.ts +385 -0
- package/src/geometry/decal.ts +260 -0
- package/src/geometry/filmPatch.ts +158 -0
- package/src/geometry/growable.ts +165 -0
- package/src/geometry/lightVolume.ts +161 -0
- package/src/geometry/meshBuilder.ts +1397 -0
- package/src/geometry/pixelFont.ts +189 -0
- package/src/geometry/ribbon.ts +790 -0
- package/src/geometry/shellFill.ts +265 -0
- package/src/geometry/spline.ts +659 -0
- package/src/geometry/tangents.ts +173 -0
- package/src/geometry/textMesh.ts +96 -0
- package/src/geometry/treeBuilder.ts +114 -0
- package/src/host/display.ts +180 -0
- package/src/host/files.ts +77 -0
- package/src/host/lifecycle.ts +63 -0
- package/src/host/platformServices.ts +23 -0
- package/src/host/screen.ts +134 -0
- package/src/index.ts +730 -0
- package/src/input/actionMap.ts +377 -0
- package/src/input/activeDevice.ts +86 -0
- package/src/input/gamepadIdentity.ts +131 -0
- package/src/input/gamepadMapping.ts +121 -0
- package/src/input/input.ts +872 -0
- package/src/input/inputHarness.ts +226 -0
- package/src/input/rightGesture.ts +76 -0
- package/src/input/rumble.ts +138 -0
- package/src/input/touchControls.ts +451 -0
- package/src/input/typingTarget.ts +26 -0
- package/src/math/bounds.ts +153 -0
- package/src/math/color.ts +37 -0
- package/src/math/exact.ts +274 -0
- package/src/math/frustum.ts +115 -0
- package/src/math/intersect.ts +228 -0
- package/src/math/scalar.ts +109 -0
- package/src/math/spring.ts +106 -0
- package/src/nav/navGraph.ts +168 -0
- package/src/nav/navPath.ts +217 -0
- package/src/nav/navSearch.ts +200 -0
- package/src/physics/boxSurface.ts +96 -0
- package/src/physics/colliderSurface.ts +213 -0
- package/src/physics/compositeSurface.ts +111 -0
- package/src/physics/heightSurface.ts +234 -0
- package/src/physics/ribbonSurface.ts +642 -0
- package/src/render/ambientOcclusionPass.ts +200 -0
- package/src/render/areaLights.ts +194 -0
- package/src/render/areaShadowSet.ts +405 -0
- package/src/render/atmosphere.ts +186 -0
- package/src/render/backend/api.ts +802 -0
- package/src/render/backend/budget.ts +139 -0
- package/src/render/backend/createRenderer.ts +343 -0
- package/src/render/backend/deadline.ts +37 -0
- package/src/render/backend/probe.ts +152 -0
- package/src/render/backend/select.ts +288 -0
- package/src/render/backend/timer.ts +59 -0
- package/src/render/backend/webgl2/instanced.ts +46 -0
- package/src/render/backend/webgl2/morphTexture.ts +58 -0
- package/src/render/backend/webgl2/renderer.ts +7484 -0
- package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
- package/src/render/backend/webgpu/boltPass.ts +205 -0
- package/src/render/backend/webgpu/buffers.ts +553 -0
- package/src/render/backend/webgpu/causticsPass.ts +174 -0
- package/src/render/backend/webgpu/clusterBinner.ts +259 -0
- package/src/render/backend/webgpu/depthPass.ts +261 -0
- package/src/render/backend/webgpu/device.ts +148 -0
- package/src/render/backend/webgpu/drawCommand.ts +79 -0
- package/src/render/backend/webgpu/environmentTexels.ts +96 -0
- package/src/render/backend/webgpu/filmPass.ts +123 -0
- package/src/render/backend/webgpu/flatPass.ts +635 -0
- package/src/render/backend/webgpu/flockPass.ts +163 -0
- package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
- package/src/render/backend/webgpu/insetPass.ts +123 -0
- package/src/render/backend/webgpu/instanced.ts +55 -0
- package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
- package/src/render/backend/webgpu/linePass.ts +270 -0
- package/src/render/backend/webgpu/morphTexture.ts +61 -0
- package/src/render/backend/webgpu/panelPass.ts +138 -0
- package/src/render/backend/webgpu/particlePass.ts +370 -0
- package/src/render/backend/webgpu/pipelineCache.ts +152 -0
- package/src/render/backend/webgpu/plumePass.ts +292 -0
- package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
- package/src/render/backend/webgpu/postPass.ts +470 -0
- package/src/render/backend/webgpu/probePass.ts +218 -0
- package/src/render/backend/webgpu/reflectionPass.ts +137 -0
- package/src/render/backend/webgpu/renderer.ts +13004 -0
- package/src/render/backend/webgpu/scatterPass.ts +354 -0
- package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
- package/src/render/backend/webgpu/shaderModules.ts +49 -0
- package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
- package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
- package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
- package/src/render/backend/webgpu/skyPass.ts +85 -0
- package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
- package/src/render/backend/webgpu/textPass.ts +224 -0
- package/src/render/backend/webgpu/uniformRing.ts +228 -0
- package/src/render/backend/webgpu/waterPass.ts +211 -0
- package/src/render/backend/webgpu/windStreakPass.ts +196 -0
- package/src/render/billboard.ts +108 -0
- package/src/render/bloomChain.ts +101 -0
- package/src/render/bloomPass.ts +256 -0
- package/src/render/boltBatch.ts +141 -0
- package/src/render/boltPool.ts +360 -0
- package/src/render/boom.ts +123 -0
- package/src/render/camera.ts +348 -0
- package/src/render/causticsRenderer.ts +171 -0
- package/src/render/cinematicCamera.ts +278 -0
- package/src/render/clusteredLights.ts +598 -0
- package/src/render/colourGrade.ts +109 -0
- package/src/render/compute.ts +83 -0
- package/src/render/contextLoss.ts +50 -0
- package/src/render/debugLines.ts +411 -0
- package/src/render/decalPass.ts +124 -0
- package/src/render/decalProjector.ts +390 -0
- package/src/render/decalQueue.ts +110 -0
- package/src/render/depthConvention.ts +383 -0
- package/src/render/drawingBuffer.ts +89 -0
- package/src/render/emptyTexture.ts +130 -0
- package/src/render/envProbeArray.ts +201 -0
- package/src/render/equirectToCube.ts +160 -0
- package/src/render/flockGeometry.ts +53 -0
- package/src/render/flockRenderer.ts +111 -0
- package/src/render/frame/arena.ts +93 -0
- package/src/render/frame/index.ts +29 -0
- package/src/render/frame/replay.ts +50 -0
- package/src/render/frame/resources.ts +61 -0
- package/src/render/frame/schedule.ts +85 -0
- package/src/render/frameView.ts +20 -0
- package/src/render/gizmo.ts +923 -0
- package/src/render/globalMedium.ts +154 -0
- package/src/render/globalMediumPass.ts +323 -0
- package/src/render/gpuCapability.ts +244 -0
- package/src/render/gpuTimer.ts +182 -0
- package/src/render/halfFloat.ts +39 -0
- package/src/render/handleRegistry.ts +96 -0
- package/src/render/iesProfile.ts +215 -0
- package/src/render/imageTexels.ts +109 -0
- package/src/render/instancedMesh.ts +187 -0
- package/src/render/instances.ts +92 -0
- package/src/render/lightBudget.ts +655 -0
- package/src/render/lightMatrix.ts +69 -0
- package/src/render/lightVolumeDraw.ts +216 -0
- package/src/render/lineBatch.ts +180 -0
- package/src/render/linePoints.ts +61 -0
- package/src/render/livePointShadowSet.ts +285 -0
- package/src/render/lod.ts +86 -0
- package/src/render/mesh.ts +536 -0
- package/src/render/occlusion.ts +406 -0
- package/src/render/oitPass.ts +230 -0
- package/src/render/orderIndependent.ts +136 -0
- package/src/render/particleBatch.ts +299 -0
- package/src/render/particleMaterial.ts +84 -0
- package/src/render/particlePool.ts +291 -0
- package/src/render/pass.ts +203 -0
- package/src/render/passTarget.ts +225 -0
- package/src/render/pickable.ts +222 -0
- package/src/render/planarReflection.ts +233 -0
- package/src/render/planarReflectionDraw.ts +87 -0
- package/src/render/plumeGeometry.ts +75 -0
- package/src/render/plumeMaterial.ts +99 -0
- package/src/render/plumeRenderer.ts +272 -0
- package/src/render/pointLightSelection.ts +447 -0
- package/src/render/pointShadowArray.ts +276 -0
- package/src/render/pointShadowBudget.ts +305 -0
- package/src/render/pointShadowImage.ts +470 -0
- package/src/render/pointShadowMap.ts +228 -0
- package/src/render/pointShadowSystem.ts +408 -0
- package/src/render/prefilterEnvMap.ts +162 -0
- package/src/render/prefilterPass.ts +115 -0
- package/src/render/probeGrid.ts +248 -0
- package/src/render/rainField.ts +240 -0
- package/src/render/reflectionProbe.ts +530 -0
- package/src/render/renderQuality.ts +1054 -0
- package/src/render/rendererHarness.ts +214 -0
- package/src/render/resolutionGovernor.ts +189 -0
- package/src/render/scatterDeform.ts +72 -0
- package/src/render/sceneTarget.ts +1032 -0
- package/src/render/screenSpaceReflection.ts +524 -0
- package/src/render/sdfFont.ts +157 -0
- package/src/render/sdfTextLayout.ts +206 -0
- package/src/render/sdfTextRenderer.ts +233 -0
- package/src/render/seaState.ts +55 -0
- package/src/render/segmentQuads.ts +92 -0
- package/src/render/shader.ts +190 -0
- package/src/render/shaders/ambientOcclusion.ts +354 -0
- package/src/render/shaders/arcane.ts +103 -0
- package/src/render/shaders/bloom.ts +232 -0
- package/src/render/shaders/bolt.ts +164 -0
- package/src/render/shaders/caustics.ts +169 -0
- package/src/render/shaders/conditionals.ts +58 -0
- package/src/render/shaders/decalProject.ts +127 -0
- package/src/render/shaders/depth.ts +131 -0
- package/src/render/shaders/depthOfField.ts +141 -0
- package/src/render/shaders/film.ts +285 -0
- package/src/render/shaders/fire.ts +180 -0
- package/src/render/shaders/flat/directionalShadow.ts +196 -0
- package/src/render/shaders/flat/index.ts +502 -0
- package/src/render/shaders/flat/lobes.ts +399 -0
- package/src/render/shaders/flat/main.ts +1631 -0
- package/src/render/shaders/flat/pointShadow.ts +323 -0
- package/src/render/shaders/flat/preamble.ts +875 -0
- package/src/render/shaders/flat/probeGrid.ts +152 -0
- package/src/render/shaders/flat/surface.ts +41 -0
- package/src/render/shaders/flock.ts +103 -0
- package/src/render/shaders/fog.ts +99 -0
- package/src/render/shaders/fullscreen.ts +28 -0
- package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
- package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
- package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
- package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
- package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
- package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
- package/src/render/shaders/generated/depth.wgsl.ts +142 -0
- package/src/render/shaders/generated/film.wgsl.ts +143 -0
- package/src/render/shaders/generated/fire.wgsl.ts +137 -0
- package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
- package/src/render/shaders/generated/flock.wgsl.ts +82 -0
- package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
- package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
- package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
- package/src/render/shaders/generated/line.wgsl.ts +137 -0
- package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
- package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
- package/src/render/shaders/generated/panel.wgsl.ts +57 -0
- package/src/render/shaders/generated/particle.wgsl.ts +343 -0
- package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
- package/src/render/shaders/generated/rush.wgsl.ts +139 -0
- package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
- package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
- package/src/render/shaders/generated/sky.wgsl.ts +109 -0
- package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
- package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
- package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
- package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
- package/src/render/shaders/generated/text.wgsl.ts +107 -0
- package/src/render/shaders/generated/water.wgsl.ts +256 -0
- package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
- package/src/render/shaders/gerstner.ts +110 -0
- package/src/render/shaders/globalMedium.ts +396 -0
- package/src/render/shaders/lightVolume.ts +546 -0
- package/src/render/shaders/line.ts +125 -0
- package/src/render/shaders/morph.ts +62 -0
- package/src/render/shaders/octahedral.ts +170 -0
- package/src/render/shaders/octahedralResolve.ts +83 -0
- package/src/render/shaders/oitResolve.ts +42 -0
- package/src/render/shaders/outputTransform.ts +107 -0
- package/src/render/shaders/panel.ts +51 -0
- package/src/render/shaders/particle.ts +438 -0
- package/src/render/shaders/prefilter.ts +278 -0
- package/src/render/shaders/rush.ts +357 -0
- package/src/render/shaders/scatter.ts +211 -0
- package/src/render/shaders/sdfText.ts +68 -0
- package/src/render/shaders/skinning.ts +59 -0
- package/src/render/shaders/sky.ts +243 -0
- package/src/render/shaders/smoke.ts +89 -0
- package/src/render/shaders/ssrResolve.ts +28 -0
- package/src/render/shaders/ssrTrace.ts +233 -0
- package/src/render/shaders/tangentFrame.ts +70 -0
- package/src/render/shaders/temporalResolve.ts +151 -0
- package/src/render/shaders/text.ts +156 -0
- package/src/render/shaders/vertexChannel.ts +71 -0
- package/src/render/shaders/water.ts +356 -0
- package/src/render/shaders/windStreaks.ts +130 -0
- package/src/render/shadowCasters.ts +124 -0
- package/src/render/shadowMap.ts +89 -0
- package/src/render/shotPlacement.ts +266 -0
- package/src/render/skinPalette.ts +157 -0
- package/src/render/ssrPass.ts +241 -0
- package/src/render/surfaceSheet.ts +158 -0
- package/src/render/surfaceTexture.ts +310 -0
- package/src/render/temporalAa.ts +221 -0
- package/src/render/temporalPass.ts +153 -0
- package/src/render/textLayout.ts +239 -0
- package/src/render/textRenderer.ts +201 -0
- package/src/render/thirdPersonCamera.ts +578 -0
- package/src/render/trample.ts +140 -0
- package/src/render/translucentQueue.ts +161 -0
- package/src/render/uniformVectorBudget.ts +246 -0
- package/src/render/uploadStep.ts +14 -0
- package/src/render/vertexDefaults.ts +115 -0
- package/src/render/visibility.ts +56 -0
- package/src/render/waterDraw.ts +167 -0
- package/src/render/waterGrid.ts +180 -0
- package/src/render/waterRenderer.ts +352 -0
- package/src/render/wind.ts +79 -0
- package/src/render/windField.ts +50 -0
- package/src/render/windStreakDraw.ts +131 -0
- package/src/render/windStreakRenderer.ts +130 -0
- package/src/scene/node.ts +336 -0
- package/src/scene/visit.ts +82 -0
- package/src/ui/clipMime.ts +109 -0
- package/src/ui/exportTarget.ts +491 -0
- package/src/ui/frameOverlay.ts +159 -0
- package/src/ui/framePacer.ts +351 -0
- package/src/ui/frameRecorder.ts +333 -0
- package/src/ui/fullscreen.ts +113 -0
- package/src/ui/pixelCursor.ts +99 -0
- package/src/ui/splash.ts +347 -0
- package/src/ui/stillFrame.ts +44 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
2
|
+
import type { Bounds } from '../math/bounds.ts';
|
|
3
|
+
import type { Frustum } from '../math/frustum.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Whether a mesh placed by a model matrix is anywhere inside a frustum.
|
|
6
|
+
*
|
|
7
|
+
* Shared by both backends rather than written twice, for the reason the resource table is: two
|
|
8
|
+
* copies of a decision are two chances to answer it differently, and a culling disagreement
|
|
9
|
+
* between backends is an object that is present on one and missing on the other.
|
|
10
|
+
*
|
|
11
|
+
* **Scale is the trap, and it is why this is not two lines at each call site.** A bounding sphere
|
|
12
|
+
* put through a scaling matrix is a sphere of a different size, so the world radius is the local
|
|
13
|
+
* radius times the *largest* of the three axis scales. Taking the average, or the x scale, or
|
|
14
|
+
* forgetting entirely, culls an enlarged object while it is plainly on screen — and the failure
|
|
15
|
+
* looks like a threshold to tune rather than a factor that is missing.
|
|
16
|
+
*
|
|
17
|
+
* Non-uniform scale makes the transformed shape an ellipsoid, and the largest axis is the sphere
|
|
18
|
+
* that contains it. Conservative, which is the only direction a cull may err in.
|
|
19
|
+
*
|
|
20
|
+
* Allocates nothing.
|
|
21
|
+
*/
|
|
22
|
+
export declare function boundsVisible(frustum: Frustum, bounds: Bounds, model: ReadonlyMat4): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { sphereInFrustum } from '../math/frustum.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether a mesh placed by a model matrix is anywhere inside a frustum.
|
|
4
|
+
*
|
|
5
|
+
* Shared by both backends rather than written twice, for the reason the resource table is: two
|
|
6
|
+
* copies of a decision are two chances to answer it differently, and a culling disagreement
|
|
7
|
+
* between backends is an object that is present on one and missing on the other.
|
|
8
|
+
*
|
|
9
|
+
* **Scale is the trap, and it is why this is not two lines at each call site.** A bounding sphere
|
|
10
|
+
* put through a scaling matrix is a sphere of a different size, so the world radius is the local
|
|
11
|
+
* radius times the *largest* of the three axis scales. Taking the average, or the x scale, or
|
|
12
|
+
* forgetting entirely, culls an enlarged object while it is plainly on screen — and the failure
|
|
13
|
+
* looks like a threshold to tune rather than a factor that is missing.
|
|
14
|
+
*
|
|
15
|
+
* Non-uniform scale makes the transformed shape an ellipsoid, and the largest axis is the sphere
|
|
16
|
+
* that contains it. Conservative, which is the only direction a cull may err in.
|
|
17
|
+
*
|
|
18
|
+
* Allocates nothing.
|
|
19
|
+
*/
|
|
20
|
+
export function boundsVisible(frustum, bounds, model) {
|
|
21
|
+
const cx = bounds.centre[0] ?? 0;
|
|
22
|
+
const cy = bounds.centre[1] ?? 0;
|
|
23
|
+
const cz = bounds.centre[2] ?? 0;
|
|
24
|
+
/* The centre through the model matrix. Column-major, so a column is four consecutive entries. */
|
|
25
|
+
const m0 = model[0] ?? 0;
|
|
26
|
+
const m1 = model[1] ?? 0;
|
|
27
|
+
const m2 = model[2] ?? 0;
|
|
28
|
+
const m4 = model[4] ?? 0;
|
|
29
|
+
const m5 = model[5] ?? 0;
|
|
30
|
+
const m6 = model[6] ?? 0;
|
|
31
|
+
const m8 = model[8] ?? 0;
|
|
32
|
+
const m9 = model[9] ?? 0;
|
|
33
|
+
const m10 = model[10] ?? 0;
|
|
34
|
+
const x = m0 * cx + m4 * cy + m8 * cz + (model[12] ?? 0);
|
|
35
|
+
const y = m1 * cx + m5 * cy + m9 * cz + (model[13] ?? 0);
|
|
36
|
+
const z = m2 * cx + m6 * cy + m10 * cz + (model[14] ?? 0);
|
|
37
|
+
/*
|
|
38
|
+
* The length of each basis vector is that axis' scale, rotation included: a rotation preserves
|
|
39
|
+
* length, so this reads the scale out of a matrix that also rotates without having to
|
|
40
|
+
* decompose it.
|
|
41
|
+
*/
|
|
42
|
+
const sx = Math.sqrt(m0 * m0 + m1 * m1 + m2 * m2);
|
|
43
|
+
const sy = Math.sqrt(m4 * m4 + m5 * m5 + m6 * m6);
|
|
44
|
+
const sz = Math.sqrt(m8 * m8 + m9 * m9 + m10 * m10);
|
|
45
|
+
const radius = bounds.radius * Math.max(sx, sy, sz);
|
|
46
|
+
return sphereInFrustum(frustum, x, y, z, radius);
|
|
47
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Vec3 } from '../math/color.ts';
|
|
2
|
+
import type { WaterBody } from './waterRenderer.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Where the sheet is laid and how hard it is blowing on it, decided for both backends.
|
|
5
|
+
*
|
|
6
|
+
* **The interesting half of `WaterRenderer.draw` is arithmetic, not binding.** Snapping the
|
|
7
|
+
* ocean to whole cells, choosing a sea state from the wind or from an authored agitation,
|
|
8
|
+
* falling back to a bearing in a dead calm — each is a rule with a reason, and a second copy
|
|
9
|
+
* of any of them is a sea that behaves differently depending on which backend drew it. That is
|
|
10
|
+
* the 2026-08-13 rule in `AGENTS.md`.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Everything the water shader needs that is not a colour, a matrix or the medium.
|
|
14
|
+
*
|
|
15
|
+
* **The three extents are pairs, and were single numbers until 2026-08-28.** A body bounded by one
|
|
16
|
+
* number is a square, and the shape a consumer actually has is a channel: long in one axis, narrow
|
|
17
|
+
* in the other. Each is measured along the body's **own** axes, which `forward` then turns into the
|
|
18
|
+
* world — so the rim and the wave fade follow the rectangle however it is laid, and the ocean passes
|
|
19
|
+
* the same number twice and is unchanged.
|
|
20
|
+
*/
|
|
21
|
+
export interface ResolvedWater {
|
|
22
|
+
/** Where the sheet is centred: snapped under the camera, or the body's own middle. */
|
|
23
|
+
readonly origin: Float32Array;
|
|
24
|
+
/** Metres per unit of the sheet's own grid, per axis. The ocean's grid is metres, so (1, 1). */
|
|
25
|
+
readonly span: Float32Array;
|
|
26
|
+
/** How far the sheet carries out, per axis. */
|
|
27
|
+
readonly half: Float32Array;
|
|
28
|
+
/** What the wave fade is measured against, so a bowl is flat at its rim. */
|
|
29
|
+
readonly nearHalf: Float32Array;
|
|
30
|
+
/** The body's own +z in world XZ, unit length. (0, 1) for anything unturned. */
|
|
31
|
+
readonly forward: Float32Array;
|
|
32
|
+
/** Unit wind bearing, or the authored fallback in a dead calm. */
|
|
33
|
+
readonly windDir: Float32Array;
|
|
34
|
+
waveGain: number;
|
|
35
|
+
foamGain: number;
|
|
36
|
+
/** Whether this body is a bounded patch rather than the ocean. */
|
|
37
|
+
bounded: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function createResolvedWater(): ResolvedWater;
|
|
40
|
+
/**
|
|
41
|
+
* Lay the sheet and settle the sea, into a target the caller owns.
|
|
42
|
+
*
|
|
43
|
+
* `cellSize`, `nearHalfExtent` and `farHalfExtent` come from the grid the renderer built, so
|
|
44
|
+
* they differ per renderer rather than being global — which is why they are arguments.
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolveWater(settings: WaterBody, cameraX: number, cameraZ: number, cellSize: number, nearHalfExtent: number, farHalfExtent: number, windX: number, windZ: number, out: ResolvedWater): ResolvedWater;
|
|
47
|
+
/** The body's own colours and scalars, read the same way by both backends. */
|
|
48
|
+
export interface WaterAppearance {
|
|
49
|
+
readonly deepColor: Vec3;
|
|
50
|
+
readonly shallowColor: Vec3;
|
|
51
|
+
readonly level: number;
|
|
52
|
+
readonly nadirOpacity: number;
|
|
53
|
+
readonly visibility: number;
|
|
54
|
+
readonly mirror: number;
|
|
55
|
+
}
|
|
56
|
+
/** Defaults applied once, so neither backend invents its own. */
|
|
57
|
+
export declare function waterAppearance(settings: WaterBody): WaterAppearance;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { seaStateForAgitation, seaStateForWind } from './seaState.js';
|
|
2
|
+
export function createResolvedWater() {
|
|
3
|
+
return {
|
|
4
|
+
origin: new Float32Array(2),
|
|
5
|
+
span: new Float32Array([1, 1]),
|
|
6
|
+
half: new Float32Array(2),
|
|
7
|
+
nearHalf: new Float32Array(2),
|
|
8
|
+
forward: new Float32Array([0, 1]),
|
|
9
|
+
windDir: new Float32Array([1, 0]),
|
|
10
|
+
waveGain: 0,
|
|
11
|
+
foamGain: 0,
|
|
12
|
+
bounded: false,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Lay the sheet and settle the sea, into a target the caller owns.
|
|
17
|
+
*
|
|
18
|
+
* `cellSize`, `nearHalfExtent` and `farHalfExtent` come from the grid the renderer built, so
|
|
19
|
+
* they differ per renderer rather than being global — which is why they are arguments.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveWater(settings, cameraX, cameraZ, cellSize, nearHalfExtent, farHalfExtent, windX, windZ, out) {
|
|
22
|
+
const bounds = settings.bounds;
|
|
23
|
+
out.bounded = bounds !== undefined;
|
|
24
|
+
if (bounds === undefined) {
|
|
25
|
+
/*
|
|
26
|
+
* Snapped to whole cells. Anything else re-samples the wave field as the camera moves,
|
|
27
|
+
* which reads as the surface swimming rather than as the camera travelling over it.
|
|
28
|
+
*/
|
|
29
|
+
out.origin[0] = Math.floor(cameraX / cellSize) * cellSize;
|
|
30
|
+
out.origin[1] = Math.floor(cameraZ / cellSize) * cellSize;
|
|
31
|
+
out.span[0] = 1;
|
|
32
|
+
out.span[1] = 1;
|
|
33
|
+
out.half[0] = farHalfExtent;
|
|
34
|
+
out.half[1] = farHalfExtent;
|
|
35
|
+
out.nearHalf[0] = nearHalfExtent;
|
|
36
|
+
out.nearHalf[1] = nearHalfExtent;
|
|
37
|
+
out.forward[0] = 0;
|
|
38
|
+
out.forward[1] = 1;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
out.origin[0] = bounds.centreX;
|
|
42
|
+
out.origin[1] = bounds.centreZ;
|
|
43
|
+
/*
|
|
44
|
+
* **`halfM` is the square shorthand and a per-axis extent overrides it on that axis alone.**
|
|
45
|
+
* The rule is applied here and nowhere else, which is what makes two spellings of a square
|
|
46
|
+
* affordable: a second place resolving them is where they would begin to disagree. A body given
|
|
47
|
+
* none of the three is zero-sized and draws nothing, which is a defined state and the right
|
|
48
|
+
* one — the other reading of "no extent" is the unbounded ocean, and omitting `bounds` already
|
|
49
|
+
* says that.
|
|
50
|
+
*/
|
|
51
|
+
const halfX = bounds.halfX ?? bounds.halfM ?? 0;
|
|
52
|
+
const halfZ = bounds.halfZ ?? bounds.halfM ?? 0;
|
|
53
|
+
out.span[0] = halfX;
|
|
54
|
+
out.span[1] = halfZ;
|
|
55
|
+
out.half[0] = halfX;
|
|
56
|
+
out.half[1] = halfZ;
|
|
57
|
+
/* The wave fade measures against this, so a bounded body is flat at its own rim. */
|
|
58
|
+
out.nearHalf[0] = halfX;
|
|
59
|
+
out.nearHalf[1] = halfZ;
|
|
60
|
+
/*
|
|
61
|
+
* The direction the body's own +z takes, normalised here so that no backend has to.
|
|
62
|
+
*
|
|
63
|
+
* A direction of no length is read as unturned instead of divided by: the basis the shader
|
|
64
|
+
* builds from this places every vertex of the sheet, so a NaN here is not a wrong sheet, it is
|
|
65
|
+
* a sheet that is nowhere. `Math.sqrt` and not `Math.hypot`, as everywhere else here.
|
|
66
|
+
*/
|
|
67
|
+
const fx = bounds.forwardX ?? 0;
|
|
68
|
+
const fz = bounds.forwardZ ?? 1;
|
|
69
|
+
const length = Math.sqrt(fx * fx + fz * fz);
|
|
70
|
+
out.forward[0] = length > 1e-6 ? fx / length : 0;
|
|
71
|
+
out.forward[1] = length > 1e-6 ? fz / length : 1;
|
|
72
|
+
}
|
|
73
|
+
const windSpeed = Math.hypot(windX, windZ);
|
|
74
|
+
/*
|
|
75
|
+
* **`agitation` is an override, not an addition.** Wind builds waves, which is right under
|
|
76
|
+
* the sky and wrong for a cistern, a flooded corridor or a tank below deck — those have a
|
|
77
|
+
* surface that moves with no wind to explain it, and tying them to the weather means a gale
|
|
78
|
+
* outside makes the water in a sealed room choppy.
|
|
79
|
+
*/
|
|
80
|
+
const sea = settings.agitation === undefined
|
|
81
|
+
? seaStateForWind(windSpeed)
|
|
82
|
+
: seaStateForAgitation(settings.agitation);
|
|
83
|
+
const inv = windSpeed > 1e-5 ? 1 / windSpeed : 0;
|
|
84
|
+
/* Falls back to the authored bearing in a dead calm rather than collapsing every wave
|
|
85
|
+
direction onto zero. */
|
|
86
|
+
out.windDir[0] = inv === 0 ? 1 : windX * inv;
|
|
87
|
+
out.windDir[1] = inv === 0 ? 0 : windZ * inv;
|
|
88
|
+
out.waveGain = sea.steepness * (settings.waveScale ?? 1);
|
|
89
|
+
out.foamGain = sea.foam;
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
/** Defaults applied once, so neither backend invents its own. */
|
|
93
|
+
export function waterAppearance(settings) {
|
|
94
|
+
return {
|
|
95
|
+
deepColor: settings.deepColor,
|
|
96
|
+
shallowColor: settings.shallowColor,
|
|
97
|
+
level: settings.level,
|
|
98
|
+
nadirOpacity: settings.density ?? 0.22,
|
|
99
|
+
visibility: settings.visibility ?? 1,
|
|
100
|
+
mirror: settings.mirror ?? 0,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ocean's tessellation: a near sheet that carries waves, and a ringed skirt
|
|
3
|
+
* that carries distance.
|
|
4
|
+
*
|
|
5
|
+
* These are two different problems and one mesh cannot serve both.
|
|
6
|
+
*
|
|
7
|
+
* The near sheet must be *uniform* and snapped to whole cells. That combination
|
|
8
|
+
* is what makes the wave lattice invariant in world space: shifting by exactly
|
|
9
|
+
* one cell lands every vertex where its neighbour was, so the reconstructed
|
|
10
|
+
* surface does not change as the camera moves. Break the uniformity — grade the
|
|
11
|
+
* cells to buy reach, say — and that invariance goes with it. Cells wider than
|
|
12
|
+
* the snap quantum are re-sampled at a new phase on every snap, and the surface
|
|
13
|
+
* visibly swims underfoot.
|
|
14
|
+
*
|
|
15
|
+
* The skirt carries no displacement, so its tessellation cannot distort
|
|
16
|
+
* anything, and it can stretch to tens of kilometres. That reach is not
|
|
17
|
+
* decoration: a sheet that stops short ends in a straight line with a corner in
|
|
18
|
+
* it, and no alpha ramp hides that. At eye height the horizon of a flat plane is
|
|
19
|
+
* at infinity, so a fade measured in world metres compresses into a pixel or two
|
|
20
|
+
* of skyline and the corner survives. The rim has to be too small to resolve.
|
|
21
|
+
*
|
|
22
|
+
* But the skirt cannot be a single leap to the far edge either, even though its
|
|
23
|
+
* *shape* would be identical. Fog is evaluated per fragment from world position,
|
|
24
|
+
* so one triangle spanning 150 m to 30 km squeezes the entire fog gradient into
|
|
25
|
+
* the handful of pixels that triangle covers — which puts a hard line right back
|
|
26
|
+
* at the near sheet's rim, in exactly the place the skirt was meant to hide. So
|
|
27
|
+
* the skirt is a set of concentric rings whose radii grow geometrically, giving
|
|
28
|
+
* the gradient somewhere to happen. They are cheap: being flat, they need only
|
|
29
|
+
* enough vertices per side to stay a square.
|
|
30
|
+
*/
|
|
31
|
+
export interface WaterGrid {
|
|
32
|
+
/** Grid-local xz pairs, metres from the camera-snapped origin. */
|
|
33
|
+
readonly offsets: Float32Array;
|
|
34
|
+
readonly indices: Uint32Array;
|
|
35
|
+
/**
|
|
36
|
+
* Cell size of the near sheet. The grid origin snaps to whole multiples of
|
|
37
|
+
* this — see above for why that must equal the cell size exactly.
|
|
38
|
+
*/
|
|
39
|
+
readonly cellSize: number;
|
|
40
|
+
/** Half-width of the wave-bearing near sheet. */
|
|
41
|
+
readonly nearHalfExtent: number;
|
|
42
|
+
/** Half-width of the outermost ring, i.e. how far the ocean reaches. */
|
|
43
|
+
readonly farHalfExtent: number;
|
|
44
|
+
}
|
|
45
|
+
export declare function buildWaterGrid(resolution: number, nearExtent: number, farHalfExtent: number): WaterGrid;
|
|
46
|
+
/**
|
|
47
|
+
* Cells per side of the bounded-body patch.
|
|
48
|
+
*
|
|
49
|
+
* Exported so neither backend keeps its own copy: a patch built at two resolutions is two
|
|
50
|
+
* different meshes for the same pool, and nothing would raise.
|
|
51
|
+
*/
|
|
52
|
+
export declare const PATCH_RESOLUTION = 24;
|
|
53
|
+
/**
|
|
54
|
+
* A flat square sheet in [-1, 1], for any body of water with edges.
|
|
55
|
+
*
|
|
56
|
+
* Here rather than in `waterRenderer.ts` because both backends build the same patch, and a
|
|
57
|
+
* second copy of a mesh generator is a bounded body whose triangles differ per backend.
|
|
58
|
+
*/
|
|
59
|
+
export declare function buildUnitSheet(resolution: number): {
|
|
60
|
+
offsets: Float32Array;
|
|
61
|
+
indices: Uint32Array;
|
|
62
|
+
};
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ocean's tessellation: a near sheet that carries waves, and a ringed skirt
|
|
3
|
+
* that carries distance.
|
|
4
|
+
*
|
|
5
|
+
* These are two different problems and one mesh cannot serve both.
|
|
6
|
+
*
|
|
7
|
+
* The near sheet must be *uniform* and snapped to whole cells. That combination
|
|
8
|
+
* is what makes the wave lattice invariant in world space: shifting by exactly
|
|
9
|
+
* one cell lands every vertex where its neighbour was, so the reconstructed
|
|
10
|
+
* surface does not change as the camera moves. Break the uniformity — grade the
|
|
11
|
+
* cells to buy reach, say — and that invariance goes with it. Cells wider than
|
|
12
|
+
* the snap quantum are re-sampled at a new phase on every snap, and the surface
|
|
13
|
+
* visibly swims underfoot.
|
|
14
|
+
*
|
|
15
|
+
* The skirt carries no displacement, so its tessellation cannot distort
|
|
16
|
+
* anything, and it can stretch to tens of kilometres. That reach is not
|
|
17
|
+
* decoration: a sheet that stops short ends in a straight line with a corner in
|
|
18
|
+
* it, and no alpha ramp hides that. At eye height the horizon of a flat plane is
|
|
19
|
+
* at infinity, so a fade measured in world metres compresses into a pixel or two
|
|
20
|
+
* of skyline and the corner survives. The rim has to be too small to resolve.
|
|
21
|
+
*
|
|
22
|
+
* But the skirt cannot be a single leap to the far edge either, even though its
|
|
23
|
+
* *shape* would be identical. Fog is evaluated per fragment from world position,
|
|
24
|
+
* so one triangle spanning 150 m to 30 km squeezes the entire fog gradient into
|
|
25
|
+
* the handful of pixels that triangle covers — which puts a hard line right back
|
|
26
|
+
* at the near sheet's rim, in exactly the place the skirt was meant to hide. So
|
|
27
|
+
* the skirt is a set of concentric rings whose radii grow geometrically, giving
|
|
28
|
+
* the gradient somewhere to happen. They are cheap: being flat, they need only
|
|
29
|
+
* enough vertices per side to stay a square.
|
|
30
|
+
*/
|
|
31
|
+
/** Concentric rings between the near sheet and the far edge. */
|
|
32
|
+
const SKIRT_RINGS = 12;
|
|
33
|
+
/** Vertices per side of each ring. A flat square needs very few. */
|
|
34
|
+
const SKIRT_SEGMENTS_PER_SIDE = 8;
|
|
35
|
+
/**
|
|
36
|
+
* Point at parameter `t` (in [0, 4)) around a square of the given half-width,
|
|
37
|
+
* walked anticlockwise from the -x/-z corner. Consistent ordering across rings
|
|
38
|
+
* is what lets consecutive rings be stitched by index arithmetic alone.
|
|
39
|
+
*/
|
|
40
|
+
function squarePerimeter(t, radius) {
|
|
41
|
+
const side = Math.floor(t) % 4;
|
|
42
|
+
const u = t - Math.floor(t);
|
|
43
|
+
const span = radius * 2;
|
|
44
|
+
if (side === 0)
|
|
45
|
+
return [-radius + span * u, -radius];
|
|
46
|
+
if (side === 1)
|
|
47
|
+
return [radius, -radius + span * u];
|
|
48
|
+
if (side === 2)
|
|
49
|
+
return [radius - span * u, radius];
|
|
50
|
+
return [-radius, radius - span * u];
|
|
51
|
+
}
|
|
52
|
+
export function buildWaterGrid(resolution, nearExtent, farHalfExtent) {
|
|
53
|
+
const side = resolution + 1;
|
|
54
|
+
const cellSize = nearExtent / resolution;
|
|
55
|
+
const nearHalfExtent = nearExtent * 0.5;
|
|
56
|
+
const perimeter = SKIRT_SEGMENTS_PER_SIDE * 4;
|
|
57
|
+
const nearVertices = side * side;
|
|
58
|
+
const skirtVertices = (SKIRT_RINGS + 1) * perimeter;
|
|
59
|
+
const offsets = new Float32Array((nearVertices + skirtVertices) * 2);
|
|
60
|
+
for (let z = 0; z < side; z++) {
|
|
61
|
+
const gz = z * cellSize - nearHalfExtent;
|
|
62
|
+
for (let x = 0; x < side; x++) {
|
|
63
|
+
const v = (z * side + x) * 2;
|
|
64
|
+
offsets[v] = x * cellSize - nearHalfExtent;
|
|
65
|
+
offsets[v + 1] = gz;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Geometric radii: each ring is the same factor wider than the last, so the
|
|
69
|
+
// fog gradient gets roughly equal screen space in every band.
|
|
70
|
+
const growth = (farHalfExtent / nearHalfExtent) ** (1 / SKIRT_RINGS);
|
|
71
|
+
for (let ring = 0; ring <= SKIRT_RINGS; ring++) {
|
|
72
|
+
const radius = ring === SKIRT_RINGS ? farHalfExtent : nearHalfExtent * growth ** ring;
|
|
73
|
+
for (let i = 0; i < perimeter; i++) {
|
|
74
|
+
const [px, pz] = squarePerimeter(i / SKIRT_SEGMENTS_PER_SIDE, radius);
|
|
75
|
+
const v = (nearVertices + ring * perimeter + i) * 2;
|
|
76
|
+
offsets[v] = px;
|
|
77
|
+
offsets[v + 1] = pz;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const indices = new Uint32Array(resolution * resolution * 6 + SKIRT_RINGS * perimeter * 6);
|
|
81
|
+
let i = 0;
|
|
82
|
+
for (let z = 0; z < resolution; z++) {
|
|
83
|
+
for (let x = 0; x < resolution; x++) {
|
|
84
|
+
const a = z * side + x;
|
|
85
|
+
const b = a + 1;
|
|
86
|
+
const c = a + side;
|
|
87
|
+
const d = c + 1;
|
|
88
|
+
indices[i++] = a;
|
|
89
|
+
indices[i++] = c;
|
|
90
|
+
indices[i++] = b;
|
|
91
|
+
indices[i++] = b;
|
|
92
|
+
indices[i++] = c;
|
|
93
|
+
indices[i++] = d;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
for (let ring = 0; ring < SKIRT_RINGS; ring++) {
|
|
97
|
+
const inner = nearVertices + ring * perimeter;
|
|
98
|
+
const outer = inner + perimeter;
|
|
99
|
+
for (let k = 0; k < perimeter; k++) {
|
|
100
|
+
const next = (k + 1) % perimeter;
|
|
101
|
+
indices[i++] = inner + k;
|
|
102
|
+
indices[i++] = outer + k;
|
|
103
|
+
indices[i++] = inner + next;
|
|
104
|
+
indices[i++] = inner + next;
|
|
105
|
+
indices[i++] = outer + k;
|
|
106
|
+
indices[i++] = outer + next;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return { offsets, indices, cellSize, nearHalfExtent, farHalfExtent };
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Cells per side of the bounded-body patch.
|
|
113
|
+
*
|
|
114
|
+
* Exported so neither backend keeps its own copy: a patch built at two resolutions is two
|
|
115
|
+
* different meshes for the same pool, and nothing would raise.
|
|
116
|
+
*/
|
|
117
|
+
export const PATCH_RESOLUTION = 24;
|
|
118
|
+
/**
|
|
119
|
+
* A flat square sheet in [-1, 1], for any body of water with edges.
|
|
120
|
+
*
|
|
121
|
+
* Here rather than in `waterRenderer.ts` because both backends build the same patch, and a
|
|
122
|
+
* second copy of a mesh generator is a bounded body whose triangles differ per backend.
|
|
123
|
+
*/
|
|
124
|
+
export function buildUnitSheet(resolution) {
|
|
125
|
+
const side = resolution + 1;
|
|
126
|
+
const offsets = new Float32Array(side * side * 2);
|
|
127
|
+
let v = 0;
|
|
128
|
+
for (let z = 0; z < side; z++) {
|
|
129
|
+
for (let x = 0; x < side; x++) {
|
|
130
|
+
offsets[v++] = (x / resolution) * 2 - 1;
|
|
131
|
+
offsets[v++] = (z / resolution) * 2 - 1;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const indices = new Uint32Array(resolution * resolution * 6);
|
|
135
|
+
let i = 0;
|
|
136
|
+
for (let z = 0; z < resolution; z++) {
|
|
137
|
+
for (let x = 0; x < resolution; x++) {
|
|
138
|
+
const a = z * side + x;
|
|
139
|
+
const b = a + 1;
|
|
140
|
+
const c = a + side;
|
|
141
|
+
const d = c + 1;
|
|
142
|
+
indices[i++] = a;
|
|
143
|
+
indices[i++] = c;
|
|
144
|
+
indices[i++] = b;
|
|
145
|
+
indices[i++] = b;
|
|
146
|
+
indices[i++] = c;
|
|
147
|
+
indices[i++] = d;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return { offsets, indices };
|
|
151
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { FrameView } from './frameView.ts';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
import type { Atmosphere } from './atmosphere.ts';
|
|
4
|
+
import type { PlanarReflection } from './planarReflection.ts';
|
|
5
|
+
import type { PointLightSet } from './lightBudget.ts';
|
|
6
|
+
/**
|
|
7
|
+
* An endless wave surface. Game-agnostic: it takes a height, colours and a
|
|
8
|
+
* lighting environment, and knows nothing about what the water is for.
|
|
9
|
+
*
|
|
10
|
+
* The mesh is a fixed grid that follows the camera and is snapped to whole
|
|
11
|
+
* cells in the vertex shader, so a bounded vertex budget covers an unbounded
|
|
12
|
+
* ocean without the surface sliding underfoot. Displacement is Gerstner, so
|
|
13
|
+
* crests are sharp and troughs broad rather than a rolling sine blanket.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* A body of water: the sea, a fountain's basin, a tank, a puddle.
|
|
17
|
+
*
|
|
18
|
+
* One description and one material for all of them. The sea is not a special
|
|
19
|
+
* case with a shader of its own — it is this, unbounded and dense, and a
|
|
20
|
+
* fountain is this, bounded and clear. The first attempt gave a basin its own
|
|
21
|
+
* faked surface, and the correction was the right one: water should be a single
|
|
22
|
+
* configurable concept — density, visibility, up to fully transparent — rather
|
|
23
|
+
* than a trick per body of water. The sea is water too, and it gets the same
|
|
24
|
+
* reusable component with the same abilities.
|
|
25
|
+
*
|
|
26
|
+
* So every body gets the waves, the Fresnel, the specular, the fog and the
|
|
27
|
+
* planar reflection, and differs only in these numbers.
|
|
28
|
+
*/
|
|
29
|
+
export interface WaterBody {
|
|
30
|
+
/** Resting height of the surface. */
|
|
31
|
+
level: number;
|
|
32
|
+
deepColor: Vec3;
|
|
33
|
+
shallowColor: Vec3;
|
|
34
|
+
/**
|
|
35
|
+
* How much of what lies beneath it the water hides, looked straight down,
|
|
36
|
+
* 0 to 1. A sea hides its own floor; a fountain shows the tiles at the bottom
|
|
37
|
+
* of it; zero is glass. Only this end is configurable — at a grazing angle
|
|
38
|
+
* every water surface goes reflective, which is Fresnel rather than a property
|
|
39
|
+
* of the liquid.
|
|
40
|
+
*/
|
|
41
|
+
density?: number;
|
|
42
|
+
/** The surface's overall visibility, 0 to 1. Zero draws nothing. */
|
|
43
|
+
visibility?: number;
|
|
44
|
+
/**
|
|
45
|
+
* How much it mirrors regardless of viewing angle, 0 to 1.
|
|
46
|
+
*
|
|
47
|
+
* Zero is physics — reflection by Fresnel alone, which is what an ocean does and
|
|
48
|
+
* what leaves a basin looking blank from directly above, since at that angle the
|
|
49
|
+
* Fresnel term is a few percent. A pool is looked *into*, so it is allowed to
|
|
50
|
+
* cheat; the sea is not, and keeps zero.
|
|
51
|
+
*/
|
|
52
|
+
mirror?: number;
|
|
53
|
+
/**
|
|
54
|
+
* How built-up its waves are, as a multiple of what the wind is doing.
|
|
55
|
+
*
|
|
56
|
+
* One is the open sea. A basin wants a fraction of it: the same wave field at
|
|
57
|
+
* a scale where it reads as a surface breathing rather than as a swell rolling
|
|
58
|
+
* through somebody's fountain.
|
|
59
|
+
*/
|
|
60
|
+
waveScale?: number;
|
|
61
|
+
/**
|
|
62
|
+
* How worked-up this body is on its own, 0 to 1, ignoring the wind entirely.
|
|
63
|
+
*
|
|
64
|
+
* For water the weather cannot reach: a cistern, a flooded corridor, a tank. Zero is
|
|
65
|
+
* as near still as this surface goes — never glass, because dead-flat water reads as a
|
|
66
|
+
* mirror rather than as calm — and one matches a fully developed sea.
|
|
67
|
+
*
|
|
68
|
+
* Omitted, the body takes its state from the wind it is drawn with, which is what an
|
|
69
|
+
* ocean, a lake or a fountain in a courtyard should do.
|
|
70
|
+
*/
|
|
71
|
+
agitation?: number;
|
|
72
|
+
/**
|
|
73
|
+
* A bounded body: where it is, how far it reaches along each of its own axes, and which way
|
|
74
|
+
* those axes point.
|
|
75
|
+
*
|
|
76
|
+
* Omitted, the body is the endless ocean — the camera-following sheet the sea has always been.
|
|
77
|
+
* Given, it is a fixed rectangle of water sitting exactly where it was put.
|
|
78
|
+
*
|
|
79
|
+
* **It was a centre and one half-extent until 2026-08-28, and a square cannot bound a channel.**
|
|
80
|
+
* Reported from outside: a 3 by 21 metre ditch bounded by the square that contains it floods
|
|
81
|
+
* eighteen metres of field either side, so the workaround was a single *unbounded* body at the
|
|
82
|
+
* ditches' water level with the world's whole ground raised above it — a technically flooded
|
|
83
|
+
* world, held up by a rule nobody can see, that nothing anywhere may be drawn below the water
|
|
84
|
+
* line. It cost that consumer one bug already: a distant ground plane 1.6 m down, correct for its
|
|
85
|
+
* own reasons, put the village in a lake.
|
|
86
|
+
*
|
|
87
|
+
* **What this cannot do is bend.** A canal that turns is one body per straight run, and where two
|
|
88
|
+
* runs meet at a corner their sheets overlap and the blend doubles there. That is cheap to place
|
|
89
|
+
* and honest about what it draws; **what would change it** is a consumer measuring that seam as
|
|
90
|
+
* the problem, which is the day `bounds` grows a polyline and a width.
|
|
91
|
+
*/
|
|
92
|
+
bounds?: WaterBounds;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Where a bounded body sits, how far it reaches and which way it faces.
|
|
96
|
+
*
|
|
97
|
+
* **Extents are measured along the body's own axes**, `x` across and `z` along `forward`, which is
|
|
98
|
+
* how `addOrientedBox` measures a box: one convention for an oriented thing in this engine, so a
|
|
99
|
+
* reader who has met one has met both.
|
|
100
|
+
*/
|
|
101
|
+
export interface WaterBounds {
|
|
102
|
+
centreX: number;
|
|
103
|
+
centreZ: number;
|
|
104
|
+
/**
|
|
105
|
+
* Half-extent along both axes, metres: the shorthand for a square.
|
|
106
|
+
*
|
|
107
|
+
* A pool, a tank and a puddle are square often enough to be worth one number, and this is that
|
|
108
|
+
* number. `halfX` and `halfZ` override it **per axis**, so `{ halfM: 9, halfX: 2 }` is two metres
|
|
109
|
+
* across and nine along. The cost is two ways to say one square; the rule is stated here and
|
|
110
|
+
* applied in exactly one place, `resolveWater`.
|
|
111
|
+
*/
|
|
112
|
+
halfM?: number;
|
|
113
|
+
/** Half-extent across the body, metres. A channel is narrow in this one. */
|
|
114
|
+
halfX?: number;
|
|
115
|
+
/** Half-extent along `forward`, metres. A channel is long in this one. */
|
|
116
|
+
halfZ?: number;
|
|
117
|
+
/**
|
|
118
|
+
* Which way the body's own +z points, in world XZ. Unset, it points along world +z.
|
|
119
|
+
*
|
|
120
|
+
* **A direction and not an angle**, because a consumer bounding a channel, a ditch or a gutter
|
|
121
|
+
* arrives holding the direction the run takes — from a road graph, a spline's tangent, two
|
|
122
|
+
* endpoints — and converting that to radians and back is arithmetic nobody needs. It is
|
|
123
|
+
* normalised on the way in, so a length here is not a scale, and a direction of no length at all
|
|
124
|
+
* is read as unturned instead of producing a sheet at NaN.
|
|
125
|
+
*/
|
|
126
|
+
forwardX?: number;
|
|
127
|
+
forwardZ?: number;
|
|
128
|
+
}
|
|
129
|
+
/** @deprecated The old name for an unbounded {@link WaterBody}. */
|
|
130
|
+
export type WaterSettings = WaterBody;
|
|
131
|
+
/** Vertices per side of a bounded body's sheet. A pool is not an ocean. */
|
|
132
|
+
export declare class WaterRenderer {
|
|
133
|
+
private readonly program;
|
|
134
|
+
private readonly uniforms;
|
|
135
|
+
private readonly vao;
|
|
136
|
+
/** A unit sheet, scaled per draw: every bounded body shares this one mesh. */
|
|
137
|
+
private readonly patchVao;
|
|
138
|
+
private readonly patchIndexCount;
|
|
139
|
+
private readonly buffers;
|
|
140
|
+
private readonly indexCount;
|
|
141
|
+
private readonly cellSize;
|
|
142
|
+
private readonly nearHalfExtent;
|
|
143
|
+
private readonly farHalfExtent;
|
|
144
|
+
private readonly reflectionFilterTaps;
|
|
145
|
+
/** Refilled per draw rather than allocated; see `createResolvedWater`. */
|
|
146
|
+
private readonly resolved;
|
|
147
|
+
/**
|
|
148
|
+
* @param resolution cells per side of the wave-bearing near sheet.
|
|
149
|
+
* @param nearExtent total width of that sheet, in world metres.
|
|
150
|
+
* @param farHalfExtent how far the flat skirt carries the ocean out. There is
|
|
151
|
+
* no point setting this far beyond the camera's far plane — geometry past it
|
|
152
|
+
* is clipped, not drawn — so this only has to outrun the fog. See
|
|
153
|
+
* `buildWaterGrid` for why these are two meshes and not one.
|
|
154
|
+
*/
|
|
155
|
+
constructor(gl: WebGL2RenderingContext, resolution?: number, nearExtent?: number, farHalfExtent?: number, reflectionFilterTaps?: import("./renderQuality.ts").WaterReflectionFilterTaps);
|
|
156
|
+
/**
|
|
157
|
+
* Draw the surface. Call *after* the sky: water writes depth and is occluded
|
|
158
|
+
* by geometry in front of it, but its far edge fades out, and that fade needs
|
|
159
|
+
* the sky already behind it to blend into.
|
|
160
|
+
*/
|
|
161
|
+
draw(gl: WebGL2RenderingContext, camera: FrameView, timeSeconds: number, settings: WaterBody, directionalDir: Vec3, directionalColor: Vec3, ambient: Vec3, atmosphere: Atmosphere, underwaterEnabled: boolean, reflection: PlanarReflection | null, lights?: PointLightSet | null, lightFalloff?: 'smooth' | 'inverseSquare', windX?: number, windZ?: number): void;
|
|
162
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
163
|
+
}
|