@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,522 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Where is the ground in this column, and which way does it face?"
|
|
3
|
+
*
|
|
4
|
+
* The AABB strip a ribbon builds keeps a character inside the world; it is a poor
|
|
5
|
+
* description of the *surface*, because a world-axis box over a banked strip has
|
|
6
|
+
* a flat top at the height of the strip's highest corner. Stand on that and you
|
|
7
|
+
* hover through every corner in the game.
|
|
8
|
+
*
|
|
9
|
+
* So the two are split. Boxes stop you falling through; this answers what you
|
|
10
|
+
* are standing on, exactly, from the curve itself.
|
|
11
|
+
*
|
|
12
|
+
* The cost of "exactly" is a nearest-point search along a spline, which is not
|
|
13
|
+
* something to do from scratch inside a fixed tick. A uniform grid of seed arc
|
|
14
|
+
* lengths turns it into a lookup plus a handful of Newton steps — a fixed count,
|
|
15
|
+
* so two machines get bit-identical answers, which the replay contract requires.
|
|
16
|
+
*/
|
|
17
|
+
import { Spline, createSplineSample } from '../geometry/spline.js';
|
|
18
|
+
import { RIBBON_STEP_M } from '../geometry/ribbon.js';
|
|
19
|
+
export function createSurfaceHit() {
|
|
20
|
+
return {
|
|
21
|
+
y: 0,
|
|
22
|
+
normalX: 0,
|
|
23
|
+
normalY: 1,
|
|
24
|
+
normalZ: 0,
|
|
25
|
+
tangentX: 1,
|
|
26
|
+
tangentY: 0,
|
|
27
|
+
tangentZ: 0,
|
|
28
|
+
distanceM: 0,
|
|
29
|
+
lateralM: 0,
|
|
30
|
+
halfWidthM: 0,
|
|
31
|
+
bankRad: 0,
|
|
32
|
+
tiltX: 0,
|
|
33
|
+
tiltY: 1,
|
|
34
|
+
tiltZ: 0,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Seed-grid resolution.
|
|
39
|
+
*
|
|
40
|
+
* Only has to get the Newton refinement into the right basin, so it is sized
|
|
41
|
+
* for build cost rather than accuracy — the answer is exact either way. At 1.5
|
|
42
|
+
* a wide track stamped over two hundred thousand cells per world and a
|
|
43
|
+
* two-year sweep of the generator took sixteen seconds.
|
|
44
|
+
*/
|
|
45
|
+
const DEFAULT_CELL_M = 3;
|
|
46
|
+
/**
|
|
47
|
+
* Candidate seeds kept per cell, from arc lengths far enough apart to be
|
|
48
|
+
* different passes of the route.
|
|
49
|
+
*
|
|
50
|
+
* One is not enough, and the failure is severe rather than cosmetic. Where a
|
|
51
|
+
* route doubles back, two stretches of it share a column; a cell seeded from
|
|
52
|
+
* whichever happened to be marginally closer sends the refinement to the wrong
|
|
53
|
+
* pass, which reports a lateral offset outside the surface, which reports *no
|
|
54
|
+
* ground*. With the ribbon contributing no collision boxes there is nothing to
|
|
55
|
+
* catch that, so a single bad query is a fall through the floor — which is
|
|
56
|
+
* exactly what showed up on the twisted sections.
|
|
57
|
+
*
|
|
58
|
+
* Four, separated by eight metres rather than twenty-five. The separation is what
|
|
59
|
+
* decides whether the two legs of a hairpin get their own slots, and a one-bar
|
|
60
|
+
* hairpin at 168 BPM is only about twelve metres of arc long — so at
|
|
61
|
+
* twenty-five, both legs collapsed into a single slot and the loser was
|
|
62
|
+
* unreachable. Which is exactly the fall-through reported on 180-degree ribbons.
|
|
63
|
+
*/
|
|
64
|
+
const SEEDS_PER_CELL = 4;
|
|
65
|
+
/** How far apart two seeds must be to count as different passes. */
|
|
66
|
+
const SEED_SEPARATION_M = 8;
|
|
67
|
+
/**
|
|
68
|
+
* How much a deck *above* the asker is penalised when two are equally near.
|
|
69
|
+
*
|
|
70
|
+
* Small, and only a tie-breaker: at equal distance the floor you are standing on
|
|
71
|
+
* is the one below you. Large enough to decide a tie, small enough that a deck
|
|
72
|
+
* genuinely closer above still wins — which is what a character rising through a
|
|
73
|
+
* split needs.
|
|
74
|
+
*/
|
|
75
|
+
const OVERPASS_TIE_BREAK = 0.4;
|
|
76
|
+
const DEFAULT_MARGIN_M = 0.35;
|
|
77
|
+
/** Spacing of the centreline samples stamped into the seed grid. */
|
|
78
|
+
const SEED_STEP_M = 1.5;
|
|
79
|
+
/**
|
|
80
|
+
* Newton steps taken to refine a seed into the exact surface point.
|
|
81
|
+
*
|
|
82
|
+
* Fixed rather than convergence-tested, and that is the important part: a loop
|
|
83
|
+
* that stops "when close enough" runs a different number of times on different
|
|
84
|
+
* hardware, and a physics step whose result depends on that is a replay that
|
|
85
|
+
* diverges. Five is comfortably enough from a seed within one cell.
|
|
86
|
+
*/
|
|
87
|
+
const REFINE_STEPS = 5;
|
|
88
|
+
/**
|
|
89
|
+
* Half-span of the symmetric difference the swept normal is built from, metres.
|
|
90
|
+
*
|
|
91
|
+
* Short enough to follow a camber reversal — they run over a handful of metres —
|
|
92
|
+
* and long enough that the difference is not reading the spline's own numerical
|
|
93
|
+
* noise. See `sweptNormal`.
|
|
94
|
+
*/
|
|
95
|
+
const NORMAL_SPAN_M = 0.5;
|
|
96
|
+
export class RibbonSurface {
|
|
97
|
+
spline;
|
|
98
|
+
holes;
|
|
99
|
+
margin;
|
|
100
|
+
holeEdge;
|
|
101
|
+
/** Raised trim down each edge; see `RibbonSurfaceOptions.edgeBandM`. */
|
|
102
|
+
edgeBand;
|
|
103
|
+
edgeLift;
|
|
104
|
+
/**
|
|
105
|
+
* The mesh's own cross-section pitch, derived exactly as `buildRibbon` derives
|
|
106
|
+
* it, so this surface can name the intervals the mesh really drew.
|
|
107
|
+
*/
|
|
108
|
+
meshStep;
|
|
109
|
+
cell;
|
|
110
|
+
originX;
|
|
111
|
+
originZ;
|
|
112
|
+
cellsX;
|
|
113
|
+
cellsZ;
|
|
114
|
+
/**
|
|
115
|
+
* Candidate arc lengths per cell — `SEEDS_PER_CELL` slots each, -1 where
|
|
116
|
+
* unused.
|
|
117
|
+
*/
|
|
118
|
+
seeds;
|
|
119
|
+
scratch = createSplineSample();
|
|
120
|
+
/** Second scratch: the swept normal needs a neighbour without losing `scratch`. */
|
|
121
|
+
frame = createSplineSample();
|
|
122
|
+
constructor(spline, options = {}) {
|
|
123
|
+
this.spline = spline;
|
|
124
|
+
this.holes = options.holes ?? [];
|
|
125
|
+
this.margin = options.marginM ?? DEFAULT_MARGIN_M;
|
|
126
|
+
this.holeEdge = options.holeEdgeM ?? RIBBON_STEP_M;
|
|
127
|
+
this.edgeBand = options.edgeBandM ?? 0;
|
|
128
|
+
this.edgeLift = options.edgeLiftM ?? 0;
|
|
129
|
+
// `buildRibbon` fits a whole number of steps across the spline and uses the
|
|
130
|
+
// resulting exact pitch; matching it here is what makes `inHole` exact.
|
|
131
|
+
this.meshStep =
|
|
132
|
+
spline.lengthM > 0
|
|
133
|
+
? spline.lengthM / Math.max(1, Math.ceil(spline.lengthM / this.holeEdge))
|
|
134
|
+
: this.holeEdge;
|
|
135
|
+
this.cell = options.cellM ?? DEFAULT_CELL_M;
|
|
136
|
+
if (spline.lengthM <= 0) {
|
|
137
|
+
this.originX = 0;
|
|
138
|
+
this.originZ = 0;
|
|
139
|
+
this.cellsX = 0;
|
|
140
|
+
this.cellsZ = 0;
|
|
141
|
+
this.seeds = new Float32Array(0);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Two passes over the centreline: one to size the grid, one to fill it.
|
|
145
|
+
// Sizing from the real samples rather than from the control points, because
|
|
146
|
+
// a curve bulges outside its own hull.
|
|
147
|
+
let minX = Infinity;
|
|
148
|
+
let maxX = -Infinity;
|
|
149
|
+
let minZ = Infinity;
|
|
150
|
+
let maxZ = -Infinity;
|
|
151
|
+
let maxHalf = 0;
|
|
152
|
+
const steps = Math.max(1, Math.ceil(spline.lengthM / SEED_STEP_M));
|
|
153
|
+
for (let i = 0; i <= steps; i++) {
|
|
154
|
+
spline.sampleAt((i / steps) * spline.lengthM, this.scratch);
|
|
155
|
+
if (this.scratch.x < minX)
|
|
156
|
+
minX = this.scratch.x;
|
|
157
|
+
if (this.scratch.x > maxX)
|
|
158
|
+
maxX = this.scratch.x;
|
|
159
|
+
if (this.scratch.z < minZ)
|
|
160
|
+
minZ = this.scratch.z;
|
|
161
|
+
if (this.scratch.z > maxZ)
|
|
162
|
+
maxZ = this.scratch.z;
|
|
163
|
+
const half = this.scratch.widthM * 0.5;
|
|
164
|
+
if (half > maxHalf)
|
|
165
|
+
maxHalf = half;
|
|
166
|
+
}
|
|
167
|
+
const pad = maxHalf + this.margin + this.cell * 2;
|
|
168
|
+
this.originX = minX - pad;
|
|
169
|
+
this.originZ = minZ - pad;
|
|
170
|
+
this.cellsX = Math.max(1, Math.ceil((maxX - minX + pad * 2) / this.cell));
|
|
171
|
+
this.cellsZ = Math.max(1, Math.ceil((maxZ - minZ + pad * 2) / this.cell));
|
|
172
|
+
this.seeds = new Float32Array(this.cellsX * this.cellsZ * SEEDS_PER_CELL).fill(-1);
|
|
173
|
+
/*
|
|
174
|
+
* Stamp each centreline sample into the cells it could plausibly serve,
|
|
175
|
+
* keeping whichever arc length is nearest to each cell's centre. A cell
|
|
176
|
+
* touched by two passes of a hairpin ends up seeded from the nearer one,
|
|
177
|
+
* which is what stops the refinement snapping a character onto the other
|
|
178
|
+
* carriageway.
|
|
179
|
+
*/
|
|
180
|
+
const reach = maxHalf + this.margin + this.cell;
|
|
181
|
+
const span = Math.ceil(reach / this.cell);
|
|
182
|
+
const best = new Float32Array(this.cellsX * this.cellsZ * SEEDS_PER_CELL).fill(Infinity);
|
|
183
|
+
for (let i = 0; i <= steps; i++) {
|
|
184
|
+
const d = (i / steps) * spline.lengthM;
|
|
185
|
+
spline.sampleAt(d, this.scratch);
|
|
186
|
+
const cx = Math.floor((this.scratch.x - this.originX) / this.cell);
|
|
187
|
+
const cz = Math.floor((this.scratch.z - this.originZ) / this.cell);
|
|
188
|
+
for (let gz = cz - span; gz <= cz + span; gz++) {
|
|
189
|
+
if (gz < 0 || gz >= this.cellsZ)
|
|
190
|
+
continue;
|
|
191
|
+
for (let gx = cx - span; gx <= cx + span; gx++) {
|
|
192
|
+
if (gx < 0 || gx >= this.cellsX)
|
|
193
|
+
continue;
|
|
194
|
+
const px = this.originX + (gx + 0.5) * this.cell;
|
|
195
|
+
const pz = this.originZ + (gz + 0.5) * this.cell;
|
|
196
|
+
const dx = px - this.scratch.x;
|
|
197
|
+
const dz = pz - this.scratch.z;
|
|
198
|
+
const distanceSq = dx * dx + dz * dz;
|
|
199
|
+
this.offer((gz * this.cellsX + gx) * SEEDS_PER_CELL, d, distanceSq, best);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Record an arc length as a candidate for one cell.
|
|
206
|
+
*
|
|
207
|
+
* Slots hold *distinct passes*: an arc length close to one already held
|
|
208
|
+
* replaces it if nearer, and only a genuinely separate stretch of route takes
|
|
209
|
+
* a new slot. Without that rule all three slots fill with neighbouring
|
|
210
|
+
* samples from the same pass and the structure buys nothing.
|
|
211
|
+
*/
|
|
212
|
+
offer(base, d, distanceSq, best) {
|
|
213
|
+
for (let k = 0; k < SEEDS_PER_CELL; k++) {
|
|
214
|
+
const held = this.seeds[base + k] ?? -1;
|
|
215
|
+
if (held < 0) {
|
|
216
|
+
this.seeds[base + k] = d;
|
|
217
|
+
best[base + k] = distanceSq;
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (Math.abs(held - d) < SEED_SEPARATION_M) {
|
|
221
|
+
if (distanceSq < (best[base + k] ?? Infinity)) {
|
|
222
|
+
this.seeds[base + k] = d;
|
|
223
|
+
best[base + k] = distanceSq;
|
|
224
|
+
}
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
// Every slot is taken by a different pass: displace the worst of them.
|
|
229
|
+
let worst = 0;
|
|
230
|
+
for (let k = 1; k < SEEDS_PER_CELL; k++) {
|
|
231
|
+
if ((best[base + k] ?? 0) > (best[base + worst] ?? 0))
|
|
232
|
+
worst = k;
|
|
233
|
+
}
|
|
234
|
+
if (distanceSq < (best[base + worst] ?? Infinity)) {
|
|
235
|
+
this.seeds[base + worst] = d;
|
|
236
|
+
best[base + worst] = distanceSq;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Is this arc length inside a hole — measured as the *mesh* cuts one, not as the plan
|
|
241
|
+
* states one?
|
|
242
|
+
*
|
|
243
|
+
* `buildRibbon` lays a whole number of equal steps along the spline and draws the quad
|
|
244
|
+
* between two consecutive cross-sections exactly when that quad's **midpoint** lies
|
|
245
|
+
* outside the authored hole. So the drawn deck is a union of whole step intervals, and
|
|
246
|
+
* a hole boundary falling mid-interval leaves the whole interval drawn. This asks the
|
|
247
|
+
* mesh's own question, in the mesh's own words, and cannot drift from it.
|
|
248
|
+
*
|
|
249
|
+
* It used to shrink every hole by a **full step at each end regardless of alignment**,
|
|
250
|
+
* which is that overhang's worst case rather than its actual size: where a boundary
|
|
251
|
+
* already sits on the step grid the mesh overhangs by nothing at all, and the surface
|
|
252
|
+
* was handing out up to a step of deck that was never drawn — at *every* gap, ramp and
|
|
253
|
+
* platform run. It showed up everywhere as the same report: every pad ending and every
|
|
254
|
+
* ribbon ending carried a phantom area the player could walk out onto without falling.
|
|
255
|
+
* Measured live on one route (`blocks` at 216–246 m, mesh pitch 1.9935 m): a character
|
|
256
|
+
* stood still at 245.8 m over open air with this answering a metre of deck under them.
|
|
257
|
+
*
|
|
258
|
+
* Exact costs one floor and one multiply.
|
|
259
|
+
*/
|
|
260
|
+
inHole(d) {
|
|
261
|
+
if (this.holes.length === 0)
|
|
262
|
+
return false;
|
|
263
|
+
const mid = (Math.floor(d / this.meshStep) + 0.5) * this.meshStep;
|
|
264
|
+
for (const hole of this.holes) {
|
|
265
|
+
if (hole.toM <= hole.fromM)
|
|
266
|
+
continue;
|
|
267
|
+
if (mid > hole.fromM && mid < hole.toM)
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
return false;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* How the surface *looks* where it is being stood on — see `SurfaceHit.tilt`.
|
|
274
|
+
*
|
|
275
|
+
* A cross-section's own normal describes the *centreline*, and it is the same
|
|
276
|
+
* answer all the way across the deck — which is only true while the section
|
|
277
|
+
* is carried along unchanged. Where the bank rolls, the surface a character
|
|
278
|
+
* stands on is a ruled one, and near its edges it climbs far more steeply
|
|
279
|
+
* along the route than the centreline does: measured on one camber reversal,
|
|
280
|
+
* 33° at the edge against the 11° the centreline reports. Everything that reads
|
|
281
|
+
* this then believes a hill is gentle when it is not — the body stands bolt
|
|
282
|
+
* upright on it instead of following the surface's own tilt, and the same
|
|
283
|
+
* understatement decides step limits and grip.
|
|
284
|
+
*
|
|
285
|
+
* So it is built from both of the surface's own tangents. Across is `right`;
|
|
286
|
+
* along is the centreline's tangent plus however fast `right` itself is
|
|
287
|
+
* turning, times how far out you are — the term that is exactly zero on a
|
|
288
|
+
* straight or evenly-banked stretch, and the whole story on a rolling one. The
|
|
289
|
+
* derivative is a symmetric difference over a fixed span, so it costs two
|
|
290
|
+
* spline samples and cannot vary between machines.
|
|
291
|
+
*/
|
|
292
|
+
sweptNormal(d, lateral, out) {
|
|
293
|
+
const behind = Math.max(0, d - NORMAL_SPAN_M);
|
|
294
|
+
const ahead = Math.min(this.spline.lengthM, d + NORMAL_SPAN_M);
|
|
295
|
+
const gap = ahead - behind;
|
|
296
|
+
if (gap < 1e-6 || lateral === 0) {
|
|
297
|
+
out.tiltX = this.scratch.normalX;
|
|
298
|
+
out.tiltY = this.scratch.normalY;
|
|
299
|
+
out.tiltZ = this.scratch.normalZ;
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
this.spline.sampleAt(behind, this.frame);
|
|
303
|
+
const bx = this.frame.rightX;
|
|
304
|
+
const by = this.frame.rightY;
|
|
305
|
+
const bz = this.frame.rightZ;
|
|
306
|
+
this.spline.sampleAt(ahead, this.frame);
|
|
307
|
+
const dRx = (this.frame.rightX - bx) / gap;
|
|
308
|
+
const dRy = (this.frame.rightY - by) / gap;
|
|
309
|
+
const dRz = (this.frame.rightZ - bz) / gap;
|
|
310
|
+
// Along the surface, at this lateral offset.
|
|
311
|
+
const ax = this.scratch.tangentX + dRx * lateral;
|
|
312
|
+
const ay = this.scratch.tangentY + dRy * lateral;
|
|
313
|
+
const az = this.scratch.tangentZ + dRz * lateral;
|
|
314
|
+
// Across it.
|
|
315
|
+
const cx = this.scratch.rightX;
|
|
316
|
+
const cy = this.scratch.rightY;
|
|
317
|
+
const cz = this.scratch.rightZ;
|
|
318
|
+
let nx = ay * cz - az * cy;
|
|
319
|
+
let ny = az * cx - ax * cz;
|
|
320
|
+
let nz = ax * cy - ay * cx;
|
|
321
|
+
const len = Math.sqrt(nx * nx + ny * ny + nz * nz);
|
|
322
|
+
if (len < 1e-9) {
|
|
323
|
+
out.tiltX = this.scratch.normalX;
|
|
324
|
+
out.tiltY = this.scratch.normalY;
|
|
325
|
+
out.tiltZ = this.scratch.normalZ;
|
|
326
|
+
return;
|
|
327
|
+
}
|
|
328
|
+
nx /= len;
|
|
329
|
+
ny /= len;
|
|
330
|
+
nz /= len;
|
|
331
|
+
// Keep the side the cross-section chose; the cross product does not know it.
|
|
332
|
+
const sign = nx * this.scratch.normalX + ny * this.scratch.normalY + nz * this.scratch.normalZ < 0
|
|
333
|
+
? -1
|
|
334
|
+
: 1;
|
|
335
|
+
out.tiltX = nx * sign;
|
|
336
|
+
out.tiltY = ny * sign;
|
|
337
|
+
out.tiltZ = nz * sign;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Ask what the surface is doing in the column above/below `(x, z)`.
|
|
341
|
+
*
|
|
342
|
+
* Returns false where there is no surface — off the edge, past either end, or
|
|
343
|
+
* over a hole — and leaves `out` untouched in that case.
|
|
344
|
+
*/
|
|
345
|
+
sample(x, z, out, atY = Infinity) {
|
|
346
|
+
const base = this.cellBase(x, z);
|
|
347
|
+
if (base < 0)
|
|
348
|
+
return false;
|
|
349
|
+
/*
|
|
350
|
+
* Every candidate pass through this column; the one *nearest the asker's
|
|
351
|
+
* height* wins.
|
|
352
|
+
*
|
|
353
|
+
* Nearest, not "highest at or below". The earlier rule was written for a
|
|
354
|
+
* flyover, where the decks are metres apart and below is obviously right —
|
|
355
|
+
* but the common case is a hairpin, where the two legs sit at *similar*
|
|
356
|
+
* heights. There, picking the lower one hands a character a surface half a metre
|
|
357
|
+
* beneath their feet: too far to snap to, so they are left airborne over
|
|
358
|
+
* ground that is directly under them, and they fall. Reported twice against
|
|
359
|
+
* 180-degree ribbons: the player passes through the surface and drops.
|
|
360
|
+
*
|
|
361
|
+
* Nearest is also still correct for the flyover: a character on the upper deck
|
|
362
|
+
* is nearest to the upper deck.
|
|
363
|
+
*/
|
|
364
|
+
/*
|
|
365
|
+
* A caller with no height — a generator placing a lamp, say — gets the
|
|
366
|
+
* highest. Scoring by distance needs something to be distant *from*, and
|
|
367
|
+
* `Math.abs(y - Infinity)` is Infinity for every candidate, so a naive
|
|
368
|
+
* nearest rule silently reports no ground at all to every such caller.
|
|
369
|
+
*/
|
|
370
|
+
const located = Number.isFinite(atY);
|
|
371
|
+
let winner = -1;
|
|
372
|
+
let best = Infinity;
|
|
373
|
+
for (let k = 0; k < SEEDS_PER_CELL; k++) {
|
|
374
|
+
const seed = this.seeds[base + k] ?? -1;
|
|
375
|
+
if (seed < 0)
|
|
376
|
+
continue;
|
|
377
|
+
if (!this.trySeed(x, z, seed, out))
|
|
378
|
+
continue;
|
|
379
|
+
// Ties broken toward the surface *below*, which is the one being stood on.
|
|
380
|
+
const score = located
|
|
381
|
+
? Math.abs(out.y - atY) + (out.y > atY ? OVERPASS_TIE_BREAK : 0)
|
|
382
|
+
: -out.y;
|
|
383
|
+
if (score < best) {
|
|
384
|
+
best = score;
|
|
385
|
+
winner = seed;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (winner < 0)
|
|
389
|
+
return false;
|
|
390
|
+
return this.trySeed(x, z, winner, out);
|
|
391
|
+
}
|
|
392
|
+
/** See `GroundSurface.sampleBand`: the highest pass in the band, exactly. */
|
|
393
|
+
sampleBand(x, z, out, loY, hiY) {
|
|
394
|
+
const base = this.cellBase(x, z);
|
|
395
|
+
if (base < 0)
|
|
396
|
+
return false;
|
|
397
|
+
let winner = -1;
|
|
398
|
+
let bestY = -Infinity;
|
|
399
|
+
for (let k = 0; k < SEEDS_PER_CELL; k++) {
|
|
400
|
+
const seed = this.seeds[base + k] ?? -1;
|
|
401
|
+
if (seed < 0)
|
|
402
|
+
continue;
|
|
403
|
+
if (!this.trySeed(x, z, seed, out))
|
|
404
|
+
continue;
|
|
405
|
+
if (out.y < loY || out.y >= hiY)
|
|
406
|
+
continue;
|
|
407
|
+
if (out.y > bestY) {
|
|
408
|
+
bestY = out.y;
|
|
409
|
+
winner = seed;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
if (winner < 0)
|
|
413
|
+
return false;
|
|
414
|
+
return this.trySeed(x, z, winner, out);
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Index of this column's seed slots, or -1 where the grid does not reach.
|
|
418
|
+
*
|
|
419
|
+
* Shared by both queries so the two can never disagree about which cell a
|
|
420
|
+
* column falls in.
|
|
421
|
+
*/
|
|
422
|
+
cellBase(x, z) {
|
|
423
|
+
if (this.seeds.length === 0)
|
|
424
|
+
return -1;
|
|
425
|
+
const gx = Math.floor((x - this.originX) / this.cell);
|
|
426
|
+
const gz = Math.floor((z - this.originZ) / this.cell);
|
|
427
|
+
if (gx < 0 || gx >= this.cellsX || gz < 0 || gz >= this.cellsZ)
|
|
428
|
+
return -1;
|
|
429
|
+
return (gz * this.cellsX + gx) * SEEDS_PER_CELL;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Refine one candidate seed and report whether it lands on the surface.
|
|
433
|
+
*
|
|
434
|
+
* Split out so the query can try several; on its own this is the original
|
|
435
|
+
* single-seed search.
|
|
436
|
+
*/
|
|
437
|
+
trySeed(x, z, seed, out) {
|
|
438
|
+
/*
|
|
439
|
+
* Refine the seed into the exact surface point, solving for arc length and
|
|
440
|
+
* lateral offset *together*.
|
|
441
|
+
*
|
|
442
|
+
* Solving them separately — walk along the tangent to the nearest point on
|
|
443
|
+
* the centreline, then measure sideways from there — is the obvious
|
|
444
|
+
* approach and it is wrong on the one shape this milestone is built out of.
|
|
445
|
+
* A banked surface normal on a climbing track leans backward along the
|
|
446
|
+
* direction of travel, so a point offset sideways on the surface is also
|
|
447
|
+
* displaced slightly *forward*, and the nearest centreline point is no
|
|
448
|
+
* longer the one you are standing on. It cost about six millimetres of
|
|
449
|
+
* height on a 0.45 rad bank, which is nothing to look at and exactly the
|
|
450
|
+
* kind of thing that grows teeth on a steeper corner.
|
|
451
|
+
*
|
|
452
|
+
* Two unknowns, two equations, one 2×2 solve per step:
|
|
453
|
+
* P − C(d) = δd · tangent + u · right, in the horizontal plane.
|
|
454
|
+
*/
|
|
455
|
+
let d = seed;
|
|
456
|
+
let lateral = 0;
|
|
457
|
+
for (let i = 0; i <= REFINE_STEPS; i++) {
|
|
458
|
+
this.spline.sampleAt(d, this.scratch);
|
|
459
|
+
const px = x - this.scratch.x;
|
|
460
|
+
const pz = z - this.scratch.z;
|
|
461
|
+
const tx = this.scratch.tangentX;
|
|
462
|
+
const tz = this.scratch.tangentZ;
|
|
463
|
+
const rx = this.scratch.rightX;
|
|
464
|
+
const rz = this.scratch.rightZ;
|
|
465
|
+
const det = tx * rz - tz * rx;
|
|
466
|
+
if (Math.abs(det) < 1e-9)
|
|
467
|
+
break;
|
|
468
|
+
lateral = (tx * pz - tz * px) / det;
|
|
469
|
+
// The last pass reads the offset at the settled arc length rather than
|
|
470
|
+
// moving again, so the two answers describe the same point.
|
|
471
|
+
if (i === REFINE_STEPS)
|
|
472
|
+
break;
|
|
473
|
+
d += (px * rz - pz * rx) / det;
|
|
474
|
+
if (d < 0)
|
|
475
|
+
d = 0;
|
|
476
|
+
else if (d > this.spline.lengthM)
|
|
477
|
+
d = this.spline.lengthM;
|
|
478
|
+
}
|
|
479
|
+
/*
|
|
480
|
+
* The ends are exclusive. A track has to stop somewhere, and clamping the
|
|
481
|
+
* search means every column beyond the summit would otherwise report the
|
|
482
|
+
* summit's own surface — invisible floor stretching to the horizon, in the
|
|
483
|
+
* one place a fall is meant to be possible.
|
|
484
|
+
*/
|
|
485
|
+
if (d <= 0 || d >= this.spline.lengthM) {
|
|
486
|
+
const overshoot = d <= 0 ? -1 : 1;
|
|
487
|
+
this.spline.sampleAt(d, this.scratch);
|
|
488
|
+
const ahead = (x - this.scratch.x) * this.scratch.tangentX + (z - this.scratch.z) * this.scratch.tangentZ;
|
|
489
|
+
if (ahead * overshoot > 1e-4)
|
|
490
|
+
return false;
|
|
491
|
+
}
|
|
492
|
+
if (this.inHole(d))
|
|
493
|
+
return false;
|
|
494
|
+
const halfWidth = this.scratch.widthM * 0.5;
|
|
495
|
+
if (Math.abs(lateral) > halfWidth + this.margin)
|
|
496
|
+
return false;
|
|
497
|
+
out.y = this.scratch.y + this.scratch.rightY * lateral;
|
|
498
|
+
/*
|
|
499
|
+
* The kerb is floor too.
|
|
500
|
+
*
|
|
501
|
+
* Its band is the outermost `edgeBand` of each side and it stands `edgeLift` proud,
|
|
502
|
+
* exactly as the trim ribbon is drawn — so standing on one puts the feet on top of
|
|
503
|
+
* it instead of through it. The normal is untouched: a kerb's top is parallel to the
|
|
504
|
+
* deck it edges, so what changes is the height and nothing else.
|
|
505
|
+
*/
|
|
506
|
+
if (this.edgeLift > 0 && halfWidth - Math.abs(lateral) <= this.edgeBand) {
|
|
507
|
+
out.y += this.edgeLift;
|
|
508
|
+
}
|
|
509
|
+
out.normalX = this.scratch.normalX;
|
|
510
|
+
out.normalY = this.scratch.normalY;
|
|
511
|
+
out.normalZ = this.scratch.normalZ;
|
|
512
|
+
this.sweptNormal(d, lateral, out);
|
|
513
|
+
out.tangentX = this.scratch.tangentX;
|
|
514
|
+
out.tangentY = this.scratch.tangentY;
|
|
515
|
+
out.tangentZ = this.scratch.tangentZ;
|
|
516
|
+
out.distanceM = d;
|
|
517
|
+
out.lateralM = lateral;
|
|
518
|
+
out.halfWidthM = halfWidth;
|
|
519
|
+
out.bankRad = this.scratch.bankRad;
|
|
520
|
+
return true;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The screen-space ambient occlusion pass: estimate from depth, then blur.
|
|
3
|
+
*
|
|
4
|
+
* Its own module rather than more of `SceneTarget`, because it is its own responsibility —
|
|
5
|
+
* that class owns where the frame lands and how it reaches the canvas, and this owns one
|
|
6
|
+
* effect's targets and programs. The composite pass consumes the texture this returns and
|
|
7
|
+
* knows nothing else about it.
|
|
8
|
+
*
|
|
9
|
+
* **Two single-channel targets, ping-ponged.** The estimate lands in one, the horizontal
|
|
10
|
+
* blur writes the other, the vertical blur writes back into the first, and that one is
|
|
11
|
+
* returned. `R8` rather than `RGBA8`: occlusion is one number, and three channels of padding
|
|
12
|
+
* over a 4K frame is 24 MB of bandwidth per pass to carry nothing.
|
|
13
|
+
*/
|
|
14
|
+
export declare class AmbientOcclusionPass {
|
|
15
|
+
private readonly gl;
|
|
16
|
+
private width;
|
|
17
|
+
private height;
|
|
18
|
+
private estimate;
|
|
19
|
+
private scratch;
|
|
20
|
+
private estimateFramebuffer;
|
|
21
|
+
private scratchFramebuffer;
|
|
22
|
+
/**
|
|
23
|
+
* Set once if a single-channel target will not complete, after which this pass does
|
|
24
|
+
* nothing and says so once.
|
|
25
|
+
*
|
|
26
|
+
* `R8` is colour-renderable in WebGL2 by specification, so this is not expected. It is here
|
|
27
|
+
* because the alternative to an honest "off" is a frame multiplied by a texture that was
|
|
28
|
+
* never written, and the last time an effect in this renderer sampled a target nobody had
|
|
29
|
+
* filled, the failure presented as the driver being at fault. See `sceneTarget.ts`.
|
|
30
|
+
*/
|
|
31
|
+
private unavailable;
|
|
32
|
+
private readonly estimateProgram;
|
|
33
|
+
private readonly estimateUniforms;
|
|
34
|
+
private readonly blurProgram;
|
|
35
|
+
private readonly blurUniforms;
|
|
36
|
+
private readonly vao;
|
|
37
|
+
/** Scratch for the blur direction, so a per-frame pass allocates nothing. */
|
|
38
|
+
private readonly step;
|
|
39
|
+
/** Scratch for the four inverse-projection terms the blur linearises depth with. */
|
|
40
|
+
private readonly depthToViewZ;
|
|
41
|
+
constructor(gl: WebGL2RenderingContext);
|
|
42
|
+
private ensureSize;
|
|
43
|
+
private allocate;
|
|
44
|
+
/**
|
|
45
|
+
* Estimate occlusion from the frame's depth and blur it. Returns the texture to multiply
|
|
46
|
+
* by, or null if this pass could not run, which the caller must read as "no occlusion"
|
|
47
|
+
* rather than as black.
|
|
48
|
+
*
|
|
49
|
+
* `invProjection` is column-major, as `gl-matrix` produces it.
|
|
50
|
+
*/
|
|
51
|
+
run(depth: WebGLTexture, width: number, height: number, radius: number, projScale: Float32Array, invProjection: Float32Array): WebGLTexture | null;
|
|
52
|
+
dispose(): void;
|
|
53
|
+
}
|