@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,162 @@
|
|
|
1
|
+
export function createNavSteer() {
|
|
2
|
+
return { x: 0, y: 0, z: 0, remainingM: 0, arrived: false };
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* A route being walked: the nodes, and how far along them the agent is.
|
|
6
|
+
*
|
|
7
|
+
* **Progress is a distance along the path, not an index into it**, and that is what makes this
|
|
8
|
+
* survive an agent being shoved. An index only ever counts up when a waypoint is reached, so an
|
|
9
|
+
* agent knocked backwards past one keeps aiming at the waypoint behind it; a distance is recovered
|
|
10
|
+
* from the agent's own position every update, against the segment it is nearest to, so being pushed
|
|
11
|
+
* about costs progress and never correctness.
|
|
12
|
+
*/
|
|
13
|
+
export class NavPath {
|
|
14
|
+
graph;
|
|
15
|
+
lookaheadM;
|
|
16
|
+
arriveM;
|
|
17
|
+
/** Node indices of the route, and how many are live. */
|
|
18
|
+
nodes;
|
|
19
|
+
length = 0;
|
|
20
|
+
/** Cumulative distance to the start of each segment, so a lookahead is a lookup. */
|
|
21
|
+
distanceTo;
|
|
22
|
+
total = 0;
|
|
23
|
+
/** Which segment the agent was on last update: where the search for the nearest one starts. */
|
|
24
|
+
segment = 0;
|
|
25
|
+
constructor(graph, capacity, options = {}) {
|
|
26
|
+
if (!(capacity > 1))
|
|
27
|
+
throw new Error(`NavPath: capacity must be at least 2, got ${capacity}`);
|
|
28
|
+
this.graph = graph;
|
|
29
|
+
this.nodes = new Uint32Array(capacity);
|
|
30
|
+
this.distanceTo = new Float64Array(capacity);
|
|
31
|
+
this.lookaheadM = options.lookaheadM ?? 2;
|
|
32
|
+
this.arriveM = options.arriveM ?? 0.5;
|
|
33
|
+
}
|
|
34
|
+
get nodeCount() {
|
|
35
|
+
return this.length;
|
|
36
|
+
}
|
|
37
|
+
get lengthM() {
|
|
38
|
+
return this.total;
|
|
39
|
+
}
|
|
40
|
+
/** Whether there is a route to follow at all. */
|
|
41
|
+
get active() {
|
|
42
|
+
return this.length > 1;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Take a route, as `NavSearch.find` filled it.
|
|
46
|
+
*
|
|
47
|
+
* A route of one node is a route to where the agent already is, and is stored as no route: it
|
|
48
|
+
* has no direction to steer along and every caller would otherwise have to special-case it.
|
|
49
|
+
*/
|
|
50
|
+
set(path, count) {
|
|
51
|
+
this.length = 0;
|
|
52
|
+
this.total = 0;
|
|
53
|
+
this.segment = 0;
|
|
54
|
+
if (count < 2)
|
|
55
|
+
return;
|
|
56
|
+
const usable = Math.min(count, this.nodes.length);
|
|
57
|
+
this.nodes.set(path.subarray(0, usable));
|
|
58
|
+
this.length = usable;
|
|
59
|
+
this.distanceTo[0] = 0;
|
|
60
|
+
for (let i = 1; i < usable; i++) {
|
|
61
|
+
this.total += this.span(i - 1, i);
|
|
62
|
+
this.distanceTo[i] = this.total;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
clear() {
|
|
66
|
+
this.length = 0;
|
|
67
|
+
this.total = 0;
|
|
68
|
+
this.segment = 0;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Where an agent at `(x, y, z)` should aim next.
|
|
72
|
+
*
|
|
73
|
+
* With no route, the agent is told to aim where it stands and that it has arrived, so a caller
|
|
74
|
+
* driving off `arrived` needs no separate check for having no path at all.
|
|
75
|
+
*/
|
|
76
|
+
steer(x, y, z, out) {
|
|
77
|
+
if (this.length < 2) {
|
|
78
|
+
out.x = x;
|
|
79
|
+
out.y = y;
|
|
80
|
+
out.z = z;
|
|
81
|
+
out.remainingM = 0;
|
|
82
|
+
out.arrived = true;
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
/*
|
|
86
|
+
* Where the agent is, as a distance along the route. Searched over the whole path rather than
|
|
87
|
+
* forward from the last segment: an agent carried backwards — a lift, a shove, a vehicle it
|
|
88
|
+
* was standing on — is exactly the case a forward-only scan gets wrong, and a route is tens of
|
|
89
|
+
* nodes rather than thousands.
|
|
90
|
+
*/
|
|
91
|
+
let bestSquared = Infinity;
|
|
92
|
+
let travelled = 0;
|
|
93
|
+
for (let i = 0; i + 1 < this.length; i++) {
|
|
94
|
+
const along = this.project(i, x, y, z);
|
|
95
|
+
const squared = this.distanceSquaredTo(i, along, x, y, z);
|
|
96
|
+
if (squared < bestSquared) {
|
|
97
|
+
bestSquared = squared;
|
|
98
|
+
travelled = (this.distanceTo[i] ?? 0) + along;
|
|
99
|
+
this.segment = i;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const remaining = this.total - travelled;
|
|
103
|
+
out.remainingM = remaining > 0 ? remaining : 0;
|
|
104
|
+
out.arrived = remaining <= this.arriveM;
|
|
105
|
+
/* Aim ahead along the line, clamped to the end: near the goal the target is the goal, which is
|
|
106
|
+
what stops an agent overshooting it to satisfy a lookahead. */
|
|
107
|
+
this.pointAt(Math.min(travelled + this.lookaheadM, this.total), out);
|
|
108
|
+
}
|
|
109
|
+
/** How far along segment `i` the point `(x, y, z)` projects, clamped to the segment. */
|
|
110
|
+
project(i, x, y, z) {
|
|
111
|
+
const ax = this.px(i);
|
|
112
|
+
const ay = this.py(i);
|
|
113
|
+
const az = this.pz(i);
|
|
114
|
+
const dx = this.px(i + 1) - ax;
|
|
115
|
+
const dy = this.py(i + 1) - ay;
|
|
116
|
+
const dz = this.pz(i + 1) - az;
|
|
117
|
+
const lengthSquared = dx * dx + dy * dy + dz * dz;
|
|
118
|
+
if (lengthSquared === 0)
|
|
119
|
+
return 0;
|
|
120
|
+
let t = ((x - ax) * dx + (y - ay) * dy + (z - az) * dz) / lengthSquared;
|
|
121
|
+
if (t < 0)
|
|
122
|
+
t = 0;
|
|
123
|
+
else if (t > 1)
|
|
124
|
+
t = 1;
|
|
125
|
+
return t * Math.sqrt(lengthSquared);
|
|
126
|
+
}
|
|
127
|
+
distanceSquaredTo(i, along, x, y, z) {
|
|
128
|
+
const span = this.span(i, i + 1);
|
|
129
|
+
const t = span === 0 ? 0 : along / span;
|
|
130
|
+
const dx = this.px(i) + (this.px(i + 1) - this.px(i)) * t - x;
|
|
131
|
+
const dy = this.py(i) + (this.py(i + 1) - this.py(i)) * t - y;
|
|
132
|
+
const dz = this.pz(i) + (this.pz(i + 1) - this.pz(i)) * t - z;
|
|
133
|
+
return dx * dx + dy * dy + dz * dz;
|
|
134
|
+
}
|
|
135
|
+
/** The world point a given distance along the route. */
|
|
136
|
+
pointAt(distance, out) {
|
|
137
|
+
let i = this.segment;
|
|
138
|
+
while (i + 2 < this.length && (this.distanceTo[i + 1] ?? 0) < distance)
|
|
139
|
+
i++;
|
|
140
|
+
const base = this.distanceTo[i] ?? 0;
|
|
141
|
+
const span = this.span(i, i + 1);
|
|
142
|
+
const t = span === 0 ? 0 : Math.min(1, Math.max(0, (distance - base) / span));
|
|
143
|
+
out.x = this.px(i) + (this.px(i + 1) - this.px(i)) * t;
|
|
144
|
+
out.y = this.py(i) + (this.py(i + 1) - this.py(i)) * t;
|
|
145
|
+
out.z = this.pz(i) + (this.pz(i + 1) - this.pz(i)) * t;
|
|
146
|
+
}
|
|
147
|
+
span(a, b) {
|
|
148
|
+
const dx = this.px(b) - this.px(a);
|
|
149
|
+
const dy = this.py(b) - this.py(a);
|
|
150
|
+
const dz = this.pz(b) - this.pz(a);
|
|
151
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
152
|
+
}
|
|
153
|
+
px(i) {
|
|
154
|
+
return this.graph.positions[(this.nodes[i] ?? 0) * 3] ?? 0;
|
|
155
|
+
}
|
|
156
|
+
py(i) {
|
|
157
|
+
return this.graph.positions[(this.nodes[i] ?? 0) * 3 + 1] ?? 0;
|
|
158
|
+
}
|
|
159
|
+
pz(i) {
|
|
160
|
+
return this.graph.positions[(this.nodes[i] ?? 0) * 3 + 2] ?? 0;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { NavGraph } from './navGraph.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A* over a `NavGraph`, allocating nothing per query and answering the same route every time.
|
|
4
|
+
*
|
|
5
|
+
* **Reused rather than constructed per search**, because the scratch is proportional to the graph
|
|
6
|
+
* and a world with a dozen agents re-pathing on a schedule would otherwise allocate a dozen arrays
|
|
7
|
+
* the size of the map every time somebody changed their mind. One of these per thread of control;
|
|
8
|
+
* a search is not re-entrant and says so.
|
|
9
|
+
*
|
|
10
|
+
* **The route is a function of the graph and the two endpoints, and of nothing else.** Two runs, two
|
|
11
|
+
* machines, a replay: same nodes out. That takes more than avoiding randomness — a heap pops ties in
|
|
12
|
+
* whatever order it happens to hold them, and two equally good routes through a symmetric world are
|
|
13
|
+
* exactly the case a road network produces constantly. So ties break on the node index, which is
|
|
14
|
+
* arbitrary but *stable*, and the sequence is frozen the same way the engine's RNG is.
|
|
15
|
+
*
|
|
16
|
+
* **The heuristic is straight-line distance**, which is admissible precisely because
|
|
17
|
+
* `buildNavGraph` refuses an edge cheaper than its own span. That refusal is what makes the first
|
|
18
|
+
* route this returns the cheapest one rather than merely a good one, and it is why it is a build
|
|
19
|
+
* error rather than a note.
|
|
20
|
+
*/
|
|
21
|
+
export declare class NavSearch {
|
|
22
|
+
private readonly graph;
|
|
23
|
+
private readonly gScore;
|
|
24
|
+
private readonly fScore;
|
|
25
|
+
private readonly cameFrom;
|
|
26
|
+
/** 0 unseen, 1 open, 2 closed. */
|
|
27
|
+
private readonly state;
|
|
28
|
+
/**
|
|
29
|
+
* A binary heap of node indices, ordered by `fScore` then by index.
|
|
30
|
+
*
|
|
31
|
+
* **Sized by edges and not by nodes**, from an argument rather than from a measurement: a push
|
|
32
|
+
* happens at most once per directed edge — a node goes on when it is first reached and again only
|
|
33
|
+
* when an edge improves it — so an array of that length cannot overflow. A node count is *not* a
|
|
34
|
+
* bound on that, and the failure it would allow is the quiet kind: a dropped push is not a slower
|
|
35
|
+
* search, it is a node marked open that nothing will ever pop, so a route that exists comes back
|
|
36
|
+
* as none.
|
|
37
|
+
*
|
|
38
|
+
* **No test here exhibits that**, and `nav.test.ts` says so where the dense graph is: occupancy
|
|
39
|
+
* in practice sits far below either bound, so a graph that could tell the two sizings apart is
|
|
40
|
+
* larger than a suite should carry. The argument is what the sizing rests on and the guard in
|
|
41
|
+
* `push` is what stands behind the argument.
|
|
42
|
+
*/
|
|
43
|
+
private readonly heap;
|
|
44
|
+
private heapSize;
|
|
45
|
+
/** How many nodes the last search took off the heap. Useful for a budget, and for a test. */
|
|
46
|
+
private lastExpanded;
|
|
47
|
+
constructor(graph: NavGraph);
|
|
48
|
+
/** Nodes taken off the heap by the last `find`. */
|
|
49
|
+
get expanded(): number;
|
|
50
|
+
/**
|
|
51
|
+
* Fill `outPath` with the node indices from `from` to `to`, and return how many there are.
|
|
52
|
+
*
|
|
53
|
+
* Zero means there is no route, which is a real answer and not an error: a road network with a
|
|
54
|
+
* bridge out is a graph with two components, and an agent that asks for the other side has to be
|
|
55
|
+
* told rather than thrown at inside a frame.
|
|
56
|
+
*
|
|
57
|
+
* A path longer than `outPath` is refused by returning zero rather than by writing a prefix,
|
|
58
|
+
* because half a route is worse than none — an agent would follow it confidently into the middle
|
|
59
|
+
* of nowhere and stop.
|
|
60
|
+
*/
|
|
61
|
+
find(from: number, to: number, outPath: Uint32Array): number;
|
|
62
|
+
/**
|
|
63
|
+
* Straight-line distance, the heuristic.
|
|
64
|
+
*
|
|
65
|
+
* Never an overestimate, because no edge may cost less than its own span — `buildNavGraph`
|
|
66
|
+
* enforces it — so the first time the goal comes off the heap its cost is final.
|
|
67
|
+
*/
|
|
68
|
+
private straightLine;
|
|
69
|
+
/** Walk `cameFrom` back from the goal, then reverse it in place. */
|
|
70
|
+
private unwind;
|
|
71
|
+
private better;
|
|
72
|
+
private push;
|
|
73
|
+
private pop;
|
|
74
|
+
}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A* over a `NavGraph`, allocating nothing per query and answering the same route every time.
|
|
3
|
+
*
|
|
4
|
+
* **Reused rather than constructed per search**, because the scratch is proportional to the graph
|
|
5
|
+
* and a world with a dozen agents re-pathing on a schedule would otherwise allocate a dozen arrays
|
|
6
|
+
* the size of the map every time somebody changed their mind. One of these per thread of control;
|
|
7
|
+
* a search is not re-entrant and says so.
|
|
8
|
+
*
|
|
9
|
+
* **The route is a function of the graph and the two endpoints, and of nothing else.** Two runs, two
|
|
10
|
+
* machines, a replay: same nodes out. That takes more than avoiding randomness — a heap pops ties in
|
|
11
|
+
* whatever order it happens to hold them, and two equally good routes through a symmetric world are
|
|
12
|
+
* exactly the case a road network produces constantly. So ties break on the node index, which is
|
|
13
|
+
* arbitrary but *stable*, and the sequence is frozen the same way the engine's RNG is.
|
|
14
|
+
*
|
|
15
|
+
* **The heuristic is straight-line distance**, which is admissible precisely because
|
|
16
|
+
* `buildNavGraph` refuses an edge cheaper than its own span. That refusal is what makes the first
|
|
17
|
+
* route this returns the cheapest one rather than merely a good one, and it is why it is a build
|
|
18
|
+
* error rather than a note.
|
|
19
|
+
*/
|
|
20
|
+
export class NavSearch {
|
|
21
|
+
graph;
|
|
22
|
+
gScore;
|
|
23
|
+
fScore;
|
|
24
|
+
cameFrom;
|
|
25
|
+
/** 0 unseen, 1 open, 2 closed. */
|
|
26
|
+
state;
|
|
27
|
+
/**
|
|
28
|
+
* A binary heap of node indices, ordered by `fScore` then by index.
|
|
29
|
+
*
|
|
30
|
+
* **Sized by edges and not by nodes**, from an argument rather than from a measurement: a push
|
|
31
|
+
* happens at most once per directed edge — a node goes on when it is first reached and again only
|
|
32
|
+
* when an edge improves it — so an array of that length cannot overflow. A node count is *not* a
|
|
33
|
+
* bound on that, and the failure it would allow is the quiet kind: a dropped push is not a slower
|
|
34
|
+
* search, it is a node marked open that nothing will ever pop, so a route that exists comes back
|
|
35
|
+
* as none.
|
|
36
|
+
*
|
|
37
|
+
* **No test here exhibits that**, and `nav.test.ts` says so where the dense graph is: occupancy
|
|
38
|
+
* in practice sits far below either bound, so a graph that could tell the two sizings apart is
|
|
39
|
+
* larger than a suite should carry. The argument is what the sizing rests on and the guard in
|
|
40
|
+
* `push` is what stands behind the argument.
|
|
41
|
+
*/
|
|
42
|
+
heap;
|
|
43
|
+
heapSize = 0;
|
|
44
|
+
/** How many nodes the last search took off the heap. Useful for a budget, and for a test. */
|
|
45
|
+
lastExpanded = 0;
|
|
46
|
+
constructor(graph) {
|
|
47
|
+
this.graph = graph;
|
|
48
|
+
this.gScore = new Float64Array(graph.nodeCount);
|
|
49
|
+
this.fScore = new Float64Array(graph.nodeCount);
|
|
50
|
+
this.cameFrom = new Int32Array(graph.nodeCount);
|
|
51
|
+
this.state = new Uint8Array(graph.nodeCount);
|
|
52
|
+
this.heap = new Uint32Array(graph.edgeTarget.length + 1);
|
|
53
|
+
}
|
|
54
|
+
/** Nodes taken off the heap by the last `find`. */
|
|
55
|
+
get expanded() {
|
|
56
|
+
return this.lastExpanded;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Fill `outPath` with the node indices from `from` to `to`, and return how many there are.
|
|
60
|
+
*
|
|
61
|
+
* Zero means there is no route, which is a real answer and not an error: a road network with a
|
|
62
|
+
* bridge out is a graph with two components, and an agent that asks for the other side has to be
|
|
63
|
+
* told rather than thrown at inside a frame.
|
|
64
|
+
*
|
|
65
|
+
* A path longer than `outPath` is refused by returning zero rather than by writing a prefix,
|
|
66
|
+
* because half a route is worse than none — an agent would follow it confidently into the middle
|
|
67
|
+
* of nowhere and stop.
|
|
68
|
+
*/
|
|
69
|
+
find(from, to, outPath) {
|
|
70
|
+
const { graph } = this;
|
|
71
|
+
if (from < 0 || from >= graph.nodeCount || to < 0 || to >= graph.nodeCount)
|
|
72
|
+
return 0;
|
|
73
|
+
this.state.fill(0);
|
|
74
|
+
this.heapSize = 0;
|
|
75
|
+
this.lastExpanded = 0;
|
|
76
|
+
this.gScore[from] = 0;
|
|
77
|
+
this.fScore[from] = this.straightLine(from, to);
|
|
78
|
+
this.cameFrom[from] = -1;
|
|
79
|
+
this.state[from] = 1;
|
|
80
|
+
this.push(from);
|
|
81
|
+
while (this.heapSize > 0) {
|
|
82
|
+
const current = this.pop();
|
|
83
|
+
if (current === to)
|
|
84
|
+
return this.unwind(from, to, outPath);
|
|
85
|
+
/* A duplicate of a node already expanded, left behind by pushing instead of decreasing a
|
|
86
|
+
key. Its cost is already final, so re-walking its edges would find nothing. */
|
|
87
|
+
if (this.state[current] === 2)
|
|
88
|
+
continue;
|
|
89
|
+
this.state[current] = 2;
|
|
90
|
+
this.lastExpanded++;
|
|
91
|
+
const end = graph.edgeStart[current + 1] ?? 0;
|
|
92
|
+
for (let e = graph.edgeStart[current] ?? 0; e < end; e++) {
|
|
93
|
+
const next = graph.edgeTarget[e] ?? 0;
|
|
94
|
+
if (this.state[next] === 2)
|
|
95
|
+
continue;
|
|
96
|
+
const tentative = (this.gScore[current] ?? 0) + (graph.edgeCost[e] ?? 0);
|
|
97
|
+
if (this.state[next] === 1 && tentative >= (this.gScore[next] ?? 0))
|
|
98
|
+
continue;
|
|
99
|
+
this.gScore[next] = tentative;
|
|
100
|
+
this.fScore[next] = tentative + this.straightLine(next, to);
|
|
101
|
+
this.cameFrom[next] = current;
|
|
102
|
+
/*
|
|
103
|
+
* Pushed again rather than decreased in place. A decrease-key needs every node's position
|
|
104
|
+
* in the heap maintained on every swap, which is a second array and a write per sift step
|
|
105
|
+
* for a graph where a node is rarely improved twice; the duplicate is popped later, found
|
|
106
|
+
* closed, and skipped. The heap is sized for that: a node can be open once per edge into
|
|
107
|
+
* it, and the loop below tolerates a full heap by dropping the worse copy.
|
|
108
|
+
*/
|
|
109
|
+
this.state[next] = 1;
|
|
110
|
+
this.push(next);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Straight-line distance, the heuristic.
|
|
117
|
+
*
|
|
118
|
+
* Never an overestimate, because no edge may cost less than its own span — `buildNavGraph`
|
|
119
|
+
* enforces it — so the first time the goal comes off the heap its cost is final.
|
|
120
|
+
*/
|
|
121
|
+
straightLine(a, b) {
|
|
122
|
+
const p = this.graph.positions;
|
|
123
|
+
const dx = (p[a * 3] ?? 0) - (p[b * 3] ?? 0);
|
|
124
|
+
const dy = (p[a * 3 + 1] ?? 0) - (p[b * 3 + 1] ?? 0);
|
|
125
|
+
const dz = (p[a * 3 + 2] ?? 0) - (p[b * 3 + 2] ?? 0);
|
|
126
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
127
|
+
}
|
|
128
|
+
/** Walk `cameFrom` back from the goal, then reverse it in place. */
|
|
129
|
+
unwind(from, to, outPath) {
|
|
130
|
+
let length = 0;
|
|
131
|
+
for (let node = to; node !== -1; node = this.cameFrom[node] ?? -1) {
|
|
132
|
+
if (length >= outPath.length)
|
|
133
|
+
return 0;
|
|
134
|
+
outPath[length++] = node;
|
|
135
|
+
if (node === from)
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
for (let i = 0, j = length - 1; i < j; i++, j--) {
|
|
139
|
+
const swap = outPath[i] ?? 0;
|
|
140
|
+
outPath[i] = outPath[j] ?? 0;
|
|
141
|
+
outPath[j] = swap;
|
|
142
|
+
}
|
|
143
|
+
return length;
|
|
144
|
+
}
|
|
145
|
+
better(a, b) {
|
|
146
|
+
const fa = this.fScore[a] ?? 0;
|
|
147
|
+
const fb = this.fScore[b] ?? 0;
|
|
148
|
+
if (fa !== fb)
|
|
149
|
+
return fa < fb;
|
|
150
|
+
/* The tie-break that makes a route reproducible. See the class note. */
|
|
151
|
+
return a < b;
|
|
152
|
+
}
|
|
153
|
+
push(node) {
|
|
154
|
+
/*
|
|
155
|
+
* Unreachable with the heap sized by edges above, and kept because the alternative to a guard
|
|
156
|
+
* here is writing past the end of the array in a frame. If it ever fires, the sizing argument
|
|
157
|
+
* is wrong and a route will be missed rather than a crash reported — which is why the sizing
|
|
158
|
+
* argument is written out where the array is declared.
|
|
159
|
+
*/
|
|
160
|
+
if (this.heapSize >= this.heap.length)
|
|
161
|
+
return;
|
|
162
|
+
let at = this.heapSize++;
|
|
163
|
+
this.heap[at] = node;
|
|
164
|
+
while (at > 0) {
|
|
165
|
+
const parent = (at - 1) >> 1;
|
|
166
|
+
if (!this.better(this.heap[at] ?? 0, this.heap[parent] ?? 0))
|
|
167
|
+
break;
|
|
168
|
+
const swap = this.heap[at] ?? 0;
|
|
169
|
+
this.heap[at] = this.heap[parent] ?? 0;
|
|
170
|
+
this.heap[parent] = swap;
|
|
171
|
+
at = parent;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
pop() {
|
|
175
|
+
const top = this.heap[0] ?? 0;
|
|
176
|
+
this.heapSize--;
|
|
177
|
+
if (this.heapSize > 0) {
|
|
178
|
+
this.heap[0] = this.heap[this.heapSize] ?? 0;
|
|
179
|
+
let at = 0;
|
|
180
|
+
for (;;) {
|
|
181
|
+
const left = at * 2 + 1;
|
|
182
|
+
const right = left + 1;
|
|
183
|
+
let best = at;
|
|
184
|
+
if (left < this.heapSize && this.better(this.heap[left] ?? 0, this.heap[best] ?? 0))
|
|
185
|
+
best = left;
|
|
186
|
+
if (right < this.heapSize && this.better(this.heap[right] ?? 0, this.heap[best] ?? 0))
|
|
187
|
+
best = right;
|
|
188
|
+
if (best === at)
|
|
189
|
+
break;
|
|
190
|
+
const swap = this.heap[at] ?? 0;
|
|
191
|
+
this.heap[at] = this.heap[best] ?? 0;
|
|
192
|
+
this.heap[best] = swap;
|
|
193
|
+
at = best;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return top;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { GroundSurface, SurfaceHit } from './ribbonSurface.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The tops of a set of flat, axis-aligned pads, answering as a ground surface.
|
|
4
|
+
*
|
|
5
|
+
* For the parts of a route that are *platforms* rather than ribbon — a flight of
|
|
6
|
+
* steps, a run of pads with gaps between them. Those are still the route, and
|
|
7
|
+
* that is the whole reason this exists rather than letting the collision boxes
|
|
8
|
+
* carry them: a character on ordinary geometry is off the route as far as anything
|
|
9
|
+
* asking the surface is concerned, and the route is what decides top speed, what
|
|
10
|
+
* the camera leans on, and how far along the run somebody is.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately flat. A pad is an AABB, its top is level, and pretending
|
|
13
|
+
* otherwise would mean inventing a normal that the collider it shares a shape
|
|
14
|
+
* with does not have.
|
|
15
|
+
*/
|
|
16
|
+
export interface SurfaceBox {
|
|
17
|
+
minX: number;
|
|
18
|
+
maxX: number;
|
|
19
|
+
minZ: number;
|
|
20
|
+
maxZ: number;
|
|
21
|
+
/** Height of the walkable face. */
|
|
22
|
+
topY: number;
|
|
23
|
+
/** How far along the route this pad sits, metres. */
|
|
24
|
+
distanceM: number;
|
|
25
|
+
/** Direction of travel across it, for the camera and the pose. */
|
|
26
|
+
tangentX: number;
|
|
27
|
+
tangentZ: number;
|
|
28
|
+
}
|
|
29
|
+
export declare class BoxSurface implements GroundSurface {
|
|
30
|
+
private readonly boxes;
|
|
31
|
+
constructor(boxes: readonly SurfaceBox[]);
|
|
32
|
+
get count(): number;
|
|
33
|
+
/**
|
|
34
|
+
* The highest pad whose footprint contains the column.
|
|
35
|
+
*
|
|
36
|
+
* Highest rather than nearest, because pads never overlap in a way where the
|
|
37
|
+
* lower one is the answer — a flight of steps is monotone — and "highest"
|
|
38
|
+
* needs no reference height, which keeps this usable from a plain
|
|
39
|
+
* `GroundSurface` call.
|
|
40
|
+
*
|
|
41
|
+
* A linear scan: a day's route carries a few dozen pads, and a scan over
|
|
42
|
+
* thirty boxes inside a fixed tick costs less than the branch needed to skip
|
|
43
|
+
* it. Allocation-free either way.
|
|
44
|
+
*/
|
|
45
|
+
sample(x: number, z: number, out: SurfaceHit, atY?: number): boolean;
|
|
46
|
+
/** See `GroundSurface.sampleBand`: the highest pad whose top is in the band. */
|
|
47
|
+
sampleBand(x: number, z: number, out: SurfaceHit, loY: number, hiY: number): boolean;
|
|
48
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export class BoxSurface {
|
|
2
|
+
boxes;
|
|
3
|
+
constructor(boxes) {
|
|
4
|
+
this.boxes = boxes;
|
|
5
|
+
}
|
|
6
|
+
get count() {
|
|
7
|
+
return this.boxes.length;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The highest pad whose footprint contains the column.
|
|
11
|
+
*
|
|
12
|
+
* Highest rather than nearest, because pads never overlap in a way where the
|
|
13
|
+
* lower one is the answer — a flight of steps is monotone — and "highest"
|
|
14
|
+
* needs no reference height, which keeps this usable from a plain
|
|
15
|
+
* `GroundSurface` call.
|
|
16
|
+
*
|
|
17
|
+
* A linear scan: a day's route carries a few dozen pads, and a scan over
|
|
18
|
+
* thirty boxes inside a fixed tick costs less than the branch needed to skip
|
|
19
|
+
* it. Allocation-free either way.
|
|
20
|
+
*/
|
|
21
|
+
sample(x, z, out, atY = Infinity) {
|
|
22
|
+
let best = null;
|
|
23
|
+
for (const box of this.boxes) {
|
|
24
|
+
if (x < box.minX || x > box.maxX || z < box.minZ || z > box.maxZ)
|
|
25
|
+
continue;
|
|
26
|
+
// Highest pad at or below the asker, so a run of pads under a flyover
|
|
27
|
+
// does not hand a character the deck above them.
|
|
28
|
+
if (box.topY > atY + 1.2)
|
|
29
|
+
continue;
|
|
30
|
+
if (best === null || box.topY > best.topY)
|
|
31
|
+
best = box;
|
|
32
|
+
}
|
|
33
|
+
if (best === null)
|
|
34
|
+
return false;
|
|
35
|
+
describe(best, out);
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
/** See `GroundSurface.sampleBand`: the highest pad whose top is in the band. */
|
|
39
|
+
sampleBand(x, z, out, loY, hiY) {
|
|
40
|
+
let best = null;
|
|
41
|
+
for (const box of this.boxes) {
|
|
42
|
+
if (x < box.minX || x > box.maxX || z < box.minZ || z > box.maxZ)
|
|
43
|
+
continue;
|
|
44
|
+
if (box.topY < loY || box.topY >= hiY)
|
|
45
|
+
continue;
|
|
46
|
+
if (best === null || box.topY > best.topY)
|
|
47
|
+
best = box;
|
|
48
|
+
}
|
|
49
|
+
if (best === null)
|
|
50
|
+
return false;
|
|
51
|
+
describe(best, out);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function describe(box, out) {
|
|
56
|
+
out.y = box.topY;
|
|
57
|
+
out.normalX = 0;
|
|
58
|
+
out.normalY = 1;
|
|
59
|
+
// A lid is flat, so it looks exactly as it collides. See `SurfaceHit.tilt`.
|
|
60
|
+
out.tiltX = 0;
|
|
61
|
+
out.tiltY = 1;
|
|
62
|
+
out.tiltZ = 0;
|
|
63
|
+
out.normalZ = 0;
|
|
64
|
+
out.tangentX = box.tangentX;
|
|
65
|
+
out.tangentY = 0;
|
|
66
|
+
out.tangentZ = box.tangentZ;
|
|
67
|
+
out.distanceM = box.distanceM;
|
|
68
|
+
out.lateralM = 0;
|
|
69
|
+
// Half the smaller footprint axis: the honest answer to "how much room is
|
|
70
|
+
// left", which is what a caller uses it for.
|
|
71
|
+
out.halfWidthM = Math.min(box.maxX - box.minX, box.maxZ - box.minZ) * 0.5;
|
|
72
|
+
out.bankRad = 0;
|
|
73
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ColliderSet } from '@driftengine/physics';
|
|
2
|
+
import type { GroundSurface } from './ribbonSurface.ts';
|
|
3
|
+
/**
|
|
4
|
+
* A `ColliderSet` answering "where is the ground here?", so a solid holds a body up.
|
|
5
|
+
*
|
|
6
|
+
* **Because a collider was solid to walk into and not to stand on.** The kinematic sweep resolves a
|
|
7
|
+
* body against a collider set laterally, and `CharacterController` senses ground through
|
|
8
|
+
* `PhysicsWorld` bodies and through a `GroundSurface` — a collider set is neither, so nothing ever
|
|
9
|
+
* asked it what was under your feet. Measured before this existed: a character dropped over a
|
|
10
|
+
* `ColliderSet` slab whose top face is at 5.5 m falls to −84 m in three seconds, which is exactly
|
|
11
|
+
* what it does with no slab at all.
|
|
12
|
+
*
|
|
13
|
+
* Reported by a consumer building flyovers, who could express a sloped deck as a hull already and
|
|
14
|
+
* found that standing on one did not hold them up. The alternative available to them was to add
|
|
15
|
+
* every deck to a `PhysicsWorld` as a static body as well — the same geometry twice, in two
|
|
16
|
+
* structures that can disagree.
|
|
17
|
+
*
|
|
18
|
+
* **It is a `GroundSurface` and not a new seam, which is what makes it worth having.** Everything
|
|
19
|
+
* that stands on ground already takes one: the character controller, the raycast vehicle, the
|
|
20
|
+
* third-person camera boom, the rain field. And because `heightSurface` takes a list of surfaces,
|
|
21
|
+
* a world can be terrain *and* slabs without either knowing about the other:
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* const ground = new CompositeSurface([
|
|
25
|
+
* heightSurface((x, z) => terrainAt(x, z)),
|
|
26
|
+
* colliderSurface(decks, { minY: -10, maxY: 60 }),
|
|
27
|
+
* ]);
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* **What it is not.** It is not a replacement for the sweep: the sweep is what stops a body walking
|
|
31
|
+
* *into* a collider, and this is what stops it falling *through* one. A consumer wants both, and
|
|
32
|
+
* they read the same set.
|
|
33
|
+
*/
|
|
34
|
+
export interface ColliderSurfaceOptions {
|
|
35
|
+
/**
|
|
36
|
+
* The vertical extent to look through, metres.
|
|
37
|
+
*
|
|
38
|
+
* **Required, and guessing would be worse than asking.** A ground query is a column, and the
|
|
39
|
+
* spatial hash walks every cell in it — an unbounded column over a 4 m grid is half a million
|
|
40
|
+
* cells and a frozen frame. A consumer knows how tall their world is; the engine does not, and a
|
|
41
|
+
* default would be wrong quietly.
|
|
42
|
+
*/
|
|
43
|
+
readonly minY: number;
|
|
44
|
+
readonly maxY: number;
|
|
45
|
+
}
|
|
46
|
+
export declare function colliderSurface(set: ColliderSet, options: ColliderSurfaceOptions): GroundSurface;
|