@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,107 @@
|
|
|
1
|
+
import { TAU, clamp } from '../math/scalar.js';
|
|
2
|
+
/**
|
|
3
|
+
* Ceiling on `amount`.
|
|
4
|
+
*
|
|
5
|
+
* Every kind pays its debt back by running the rest of the segment at
|
|
6
|
+
* `1 / (1 - amount)`, so an amount at 1 asks for infinite speed in zero time.
|
|
7
|
+
* Capped rather than merely documented: this is the kind of value a tuning pass
|
|
8
|
+
* pushes to its limit.
|
|
9
|
+
*/
|
|
10
|
+
export const MAX_TIME_CURVE_AMOUNT = 0.9;
|
|
11
|
+
const LINEAR_STEP_SEC = 1;
|
|
12
|
+
/**
|
|
13
|
+
* Build a curve, validating at construction.
|
|
14
|
+
*
|
|
15
|
+
* Fail-fast here rather than per-frame in `curveOffsetSec`: a curve is built
|
|
16
|
+
* once when a clip is planned, and a plan is a fine place to throw.
|
|
17
|
+
*/
|
|
18
|
+
export function timeCurve(kind, durationSec, options = {}) {
|
|
19
|
+
if (!Number.isFinite(durationSec) || durationSec <= 0) {
|
|
20
|
+
throw new Error(`A time curve needs a positive duration, got ${durationSec}`);
|
|
21
|
+
}
|
|
22
|
+
const amount = clamp(options.amount ?? 0, 0, MAX_TIME_CURVE_AMOUNT);
|
|
23
|
+
const requested = options.stepSec ?? LINEAR_STEP_SEC;
|
|
24
|
+
if (!Number.isFinite(requested) || requested <= 0) {
|
|
25
|
+
throw new Error(`A stutter step must be positive, got ${requested}`);
|
|
26
|
+
}
|
|
27
|
+
/*
|
|
28
|
+
* Snap the stutter step so a whole number of cycles fits the segment. A
|
|
29
|
+
* trailing part-cycle would leave the curve mid-freeze at its own end, which
|
|
30
|
+
* breaks neutrality by exactly the frozen remainder — small, and therefore
|
|
31
|
+
* the sort of drift that accumulates over a dozen shots without ever looking
|
|
32
|
+
* like a bug.
|
|
33
|
+
*/
|
|
34
|
+
const cycles = Math.max(1, Math.round(durationSec / requested));
|
|
35
|
+
return {
|
|
36
|
+
kind,
|
|
37
|
+
durationSec,
|
|
38
|
+
amount,
|
|
39
|
+
stepSec: kind === 'stutter' ? durationSec / cycles : requested,
|
|
40
|
+
reversibleSec: Math.max(0, options.reversibleSec ?? 0),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** A curve that does nothing, for a segment that is played straight. */
|
|
44
|
+
export function linearCurve(durationSec) {
|
|
45
|
+
return timeCurve('linear', durationSec);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Source seconds elapsed by `localSec` into the curve.
|
|
49
|
+
*
|
|
50
|
+
* Monotonically non-decreasing for every kind except `reverse`, continuous
|
|
51
|
+
* everywhere, and clamped to the segment — outside it, the neighbouring
|
|
52
|
+
* segments own the clock.
|
|
53
|
+
*/
|
|
54
|
+
export function curveOffsetSec(curve, localSec) {
|
|
55
|
+
const duration = curve.durationSec;
|
|
56
|
+
const local = clamp(localSec, 0, duration);
|
|
57
|
+
const amount = curve.amount;
|
|
58
|
+
if (amount === 0)
|
|
59
|
+
return local;
|
|
60
|
+
switch (curve.kind) {
|
|
61
|
+
case 'linear':
|
|
62
|
+
return local;
|
|
63
|
+
case 'hold': {
|
|
64
|
+
// Freeze on the cut, then run fast enough to arrive on time.
|
|
65
|
+
const frozen = amount * duration;
|
|
66
|
+
return local <= frozen ? 0 : (local - frozen) / (1 - amount);
|
|
67
|
+
}
|
|
68
|
+
case 'ramp': {
|
|
69
|
+
/*
|
|
70
|
+
* Slow, fast, slow — an "ease-in-out-in". The rate is
|
|
71
|
+
* `1 - amount * cos(TAU * t / duration)`, whose integral closes the loop
|
|
72
|
+
* exactly at the segment's end because a whole cosine period integrates
|
|
73
|
+
* to zero. Chosen over a hand-tuned easing precisely for that: neutrality
|
|
74
|
+
* is a consequence of the shape rather than something to correct for.
|
|
75
|
+
*/
|
|
76
|
+
// determinism: build-time — presentation: remaps a cinematic's playback time, not a tick
|
|
77
|
+
return local - ((amount * duration) / TAU) * Math.sin((TAU * local) / duration);
|
|
78
|
+
}
|
|
79
|
+
case 'stutter': {
|
|
80
|
+
const step = curve.stepSec;
|
|
81
|
+
const cycles = Math.floor(local / step);
|
|
82
|
+
const into = local - cycles * step;
|
|
83
|
+
const frozen = amount * step;
|
|
84
|
+
const moving = into <= frozen ? 0 : (into - frozen) / (1 - amount);
|
|
85
|
+
return cycles * step + moving;
|
|
86
|
+
}
|
|
87
|
+
case 'reverse': {
|
|
88
|
+
// Only as far back as the caller kept states for. With no buffer this is
|
|
89
|
+
// zero and the segment plays straight.
|
|
90
|
+
const back = Math.min(amount * duration, curve.reversibleSec);
|
|
91
|
+
if (back <= 0)
|
|
92
|
+
return local;
|
|
93
|
+
if (local <= back)
|
|
94
|
+
return -local;
|
|
95
|
+
// Then recover the ground given up *and* the segment itself.
|
|
96
|
+
return -back + ((local - back) * (duration + back)) / (duration - back);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Source seconds a whole segment consumes — `durationSec` for every kind, and
|
|
102
|
+
* worth asking for rather than assuming: a caller composing segments needs the
|
|
103
|
+
* answer the curve actually gives, not the one it promises.
|
|
104
|
+
*/
|
|
105
|
+
export function curveSpanSec(curve) {
|
|
106
|
+
return curveOffsetSec(curve, curve.durationSec);
|
|
107
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fill a defaults object from a partial one, ignoring keys whose value is `undefined`.
|
|
3
|
+
*
|
|
4
|
+
* **`{ ...DEFAULTS, ...given }` is the obvious spelling and it destroys the default it was
|
|
5
|
+
* written to preserve.** A spread copies every own key, including one explicitly set to
|
|
6
|
+
* `undefined` — so a caller writing `{ retractLambda: settings.lambda }`, where `settings.lambda`
|
|
7
|
+
* is `number | undefined`, does not fall back to the default. It overwrites it with `undefined`,
|
|
8
|
+
* and what comes out of the arithmetic downstream is `NaN`.
|
|
9
|
+
*
|
|
10
|
+
* That is not a hypothetical: measured on `Boom`, a timing of `{ retractLambda: undefined }` takes
|
|
11
|
+
* the arm's fraction from 0.96 to `NaN` on the first step, which is a camera that never recovers.
|
|
12
|
+
* And it is invisible to TypeScript here, because this repository does not run
|
|
13
|
+
* `exactOptionalPropertyTypes` — the flag that separates "absent" from "present and undefined".
|
|
14
|
+
* Under it, forty call sites in this tree pass an optional straight into an optional slot; the
|
|
15
|
+
* pattern is ordinary and the hazard is only in what receives it.
|
|
16
|
+
*
|
|
17
|
+
* So the merge is a function rather than a spread, and every `Partial<T>` over a `T` of defaults
|
|
18
|
+
* goes through it. One implementation, for the reason `Boom`'s own header gives about the arm it
|
|
19
|
+
* smooths: a third caller must not be able to get this wrong again.
|
|
20
|
+
*/
|
|
21
|
+
export declare function withDefaults<T extends object>(defaults: T, given: Partial<T>): T;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fill a defaults object from a partial one, ignoring keys whose value is `undefined`.
|
|
3
|
+
*
|
|
4
|
+
* **`{ ...DEFAULTS, ...given }` is the obvious spelling and it destroys the default it was
|
|
5
|
+
* written to preserve.** A spread copies every own key, including one explicitly set to
|
|
6
|
+
* `undefined` — so a caller writing `{ retractLambda: settings.lambda }`, where `settings.lambda`
|
|
7
|
+
* is `number | undefined`, does not fall back to the default. It overwrites it with `undefined`,
|
|
8
|
+
* and what comes out of the arithmetic downstream is `NaN`.
|
|
9
|
+
*
|
|
10
|
+
* That is not a hypothetical: measured on `Boom`, a timing of `{ retractLambda: undefined }` takes
|
|
11
|
+
* the arm's fraction from 0.96 to `NaN` on the first step, which is a camera that never recovers.
|
|
12
|
+
* And it is invisible to TypeScript here, because this repository does not run
|
|
13
|
+
* `exactOptionalPropertyTypes` — the flag that separates "absent" from "present and undefined".
|
|
14
|
+
* Under it, forty call sites in this tree pass an optional straight into an optional slot; the
|
|
15
|
+
* pattern is ordinary and the hazard is only in what receives it.
|
|
16
|
+
*
|
|
17
|
+
* So the merge is a function rather than a spread, and every `Partial<T>` over a `T` of defaults
|
|
18
|
+
* goes through it. One implementation, for the reason `Boom`'s own header gives about the arm it
|
|
19
|
+
* smooths: a third caller must not be able to get this wrong again.
|
|
20
|
+
*/
|
|
21
|
+
export function withDefaults(defaults, given) {
|
|
22
|
+
const merged = { ...defaults };
|
|
23
|
+
for (const key of Object.keys(given)) {
|
|
24
|
+
const value = given[key];
|
|
25
|
+
if (value !== undefined)
|
|
26
|
+
merged[key] = value;
|
|
27
|
+
}
|
|
28
|
+
return merged;
|
|
29
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Aabb } from '@driftengine/physics';
|
|
2
|
+
import type { ColliderSet } from '@driftengine/physics';
|
|
3
|
+
/**
|
|
4
|
+
* What is around a box, in numbers a person can check.
|
|
5
|
+
*
|
|
6
|
+
* A development tool, not a physics path: `collide.ts` already resolves contacts and
|
|
7
|
+
* is tuned to do it without allocating. This answers a different question — *which
|
|
8
|
+
* colliders are here, and by how much* — for a diagnostic that runs when somebody
|
|
9
|
+
* presses a key, so it favours being readable over being fast.
|
|
10
|
+
*
|
|
11
|
+
* Signed depth per axis rather than a single distance, because the two failures worth
|
|
12
|
+
* telling apart look identical otherwise: a body 5 cm inside a deck and a body 5 cm
|
|
13
|
+
* above one are both "5 cm from a collider".
|
|
14
|
+
*/
|
|
15
|
+
export interface ContactReport {
|
|
16
|
+
index: number;
|
|
17
|
+
/** True where the collider is a hull; its box is then the broad phase only. */
|
|
18
|
+
hull: boolean;
|
|
19
|
+
minX: number;
|
|
20
|
+
minY: number;
|
|
21
|
+
minZ: number;
|
|
22
|
+
maxX: number;
|
|
23
|
+
maxY: number;
|
|
24
|
+
maxZ: number;
|
|
25
|
+
/** Overlap along the axis. Positive is penetration, negative is the gap. */
|
|
26
|
+
depthX: number;
|
|
27
|
+
depthY: number;
|
|
28
|
+
depthZ: number;
|
|
29
|
+
/** Straight line between the boxes. Zero exactly when all three axes overlap. */
|
|
30
|
+
distanceM: number;
|
|
31
|
+
}
|
|
32
|
+
export declare const CONTACT_LIMIT = 32;
|
|
33
|
+
export declare function createContactReports(count?: number): ContactReport[];
|
|
34
|
+
/**
|
|
35
|
+
* Describe every collider overlapping `box` or within `radius` of it.
|
|
36
|
+
*
|
|
37
|
+
* Returns how many entries of `out` were written. Reports are in query order, which is
|
|
38
|
+
* spatial-hash order and therefore arbitrary: sort by `distanceM` at the point of
|
|
39
|
+
* display if order matters, rather than paying for it here.
|
|
40
|
+
*/
|
|
41
|
+
export declare function describeContacts(colliders: ColliderSet, box: Aabb, radius: number, scratch: Int32Array, out: ContactReport[]): number;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export const CONTACT_LIMIT = 32;
|
|
2
|
+
export function createContactReports(count = CONTACT_LIMIT) {
|
|
3
|
+
const out = [];
|
|
4
|
+
for (let i = 0; i < count; i++) {
|
|
5
|
+
out.push({
|
|
6
|
+
index: -1,
|
|
7
|
+
hull: false,
|
|
8
|
+
minX: 0,
|
|
9
|
+
minY: 0,
|
|
10
|
+
minZ: 0,
|
|
11
|
+
maxX: 0,
|
|
12
|
+
maxY: 0,
|
|
13
|
+
maxZ: 0,
|
|
14
|
+
depthX: 0,
|
|
15
|
+
depthY: 0,
|
|
16
|
+
depthZ: 0,
|
|
17
|
+
distanceM: 0,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
const SCRATCH_BOUNDS = { minX: 0, minY: 0, minZ: 0, maxX: 0, maxY: 0, maxZ: 0 };
|
|
23
|
+
/**
|
|
24
|
+
* Describe every collider overlapping `box` or within `radius` of it.
|
|
25
|
+
*
|
|
26
|
+
* Returns how many entries of `out` were written. Reports are in query order, which is
|
|
27
|
+
* spatial-hash order and therefore arbitrary: sort by `distanceM` at the point of
|
|
28
|
+
* display if order matters, rather than paying for it here.
|
|
29
|
+
*/
|
|
30
|
+
export function describeContacts(colliders, box, radius, scratch, out) {
|
|
31
|
+
const found = colliders.query(box.minX - radius, box.minY - radius, box.minZ - radius, box.maxX + radius, box.maxY + radius, box.maxZ + radius, scratch);
|
|
32
|
+
let written = 0;
|
|
33
|
+
for (let k = 0; k < found && written < out.length; k++) {
|
|
34
|
+
const index = scratch[k];
|
|
35
|
+
colliders.bounds(index, SCRATCH_BOUNDS);
|
|
36
|
+
const depthX = Math.min(box.maxX, SCRATCH_BOUNDS.maxX) - Math.max(box.minX, SCRATCH_BOUNDS.minX);
|
|
37
|
+
const depthY = Math.min(box.maxY, SCRATCH_BOUNDS.maxY) - Math.max(box.minY, SCRATCH_BOUNDS.minY);
|
|
38
|
+
const depthZ = Math.min(box.maxZ, SCRATCH_BOUNDS.maxZ) - Math.max(box.minZ, SCRATCH_BOUNDS.minZ);
|
|
39
|
+
const gapX = Math.max(0, -depthX);
|
|
40
|
+
const gapY = Math.max(0, -depthY);
|
|
41
|
+
const gapZ = Math.max(0, -depthZ);
|
|
42
|
+
const report = out[written];
|
|
43
|
+
report.index = index;
|
|
44
|
+
report.hull = colliders.shapeAt(index) !== undefined;
|
|
45
|
+
report.minX = SCRATCH_BOUNDS.minX;
|
|
46
|
+
report.minY = SCRATCH_BOUNDS.minY;
|
|
47
|
+
report.minZ = SCRATCH_BOUNDS.minZ;
|
|
48
|
+
report.maxX = SCRATCH_BOUNDS.maxX;
|
|
49
|
+
report.maxY = SCRATCH_BOUNDS.maxY;
|
|
50
|
+
report.maxZ = SCRATCH_BOUNDS.maxZ;
|
|
51
|
+
report.depthX = depthX;
|
|
52
|
+
report.depthY = depthY;
|
|
53
|
+
report.depthZ = depthZ;
|
|
54
|
+
report.distanceM = Math.hypot(gapX, gapY, gapZ);
|
|
55
|
+
written++;
|
|
56
|
+
}
|
|
57
|
+
return written;
|
|
58
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** Throttled DOM frame profiler for development builds. */
|
|
2
|
+
export interface FpsMeterOptions {
|
|
3
|
+
parent?: HTMLElement;
|
|
4
|
+
id?: string;
|
|
5
|
+
updateIntervalMs?: number;
|
|
6
|
+
sampleWindow?: number;
|
|
7
|
+
frameBudgetMs?: number;
|
|
8
|
+
overBudgetClass?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class FpsMeter {
|
|
11
|
+
private readonly element;
|
|
12
|
+
private readonly samples;
|
|
13
|
+
private readonly updateIntervalMs;
|
|
14
|
+
private readonly frameBudgetMs;
|
|
15
|
+
private readonly overBudgetClass;
|
|
16
|
+
private index;
|
|
17
|
+
private filled;
|
|
18
|
+
private lastUpdate;
|
|
19
|
+
private lastText;
|
|
20
|
+
private lastFps;
|
|
21
|
+
private lastMeanMs;
|
|
22
|
+
private lastWorstMs;
|
|
23
|
+
constructor(options?: FpsMeterOptions);
|
|
24
|
+
/**
|
|
25
|
+
* The rate this meter last computed, for a caller that wants the number as well as the panel.
|
|
26
|
+
*
|
|
27
|
+
* **Reported from outside**, by a consumer that had to keep its own average beside this one to
|
|
28
|
+
* say "the preview is below rate, the export is unaffected". A class that owns an element and
|
|
29
|
+
* refuses to say what it wrote in it makes every caller measure the same thing twice.
|
|
30
|
+
*
|
|
31
|
+
* These are what was last *displayed*, so they move at `updateIntervalMs` rather than per frame,
|
|
32
|
+
* which is the point: a figure that changes sixty times a second is not one a person reads, and
|
|
33
|
+
* a caller comparing against a budget wants the same smoothed number the panel shows.
|
|
34
|
+
*
|
|
35
|
+
* Zero until the first update, which is a real state and not a rate.
|
|
36
|
+
*/
|
|
37
|
+
get fps(): number;
|
|
38
|
+
/** Mean frame time in milliseconds over the window, as last displayed. See `fps`. */
|
|
39
|
+
get meanMs(): number;
|
|
40
|
+
/** The slowest frame in the window in milliseconds, as last displayed. See `fps`. */
|
|
41
|
+
get worstMs(): number;
|
|
42
|
+
/** Call once per rendered frame with duration in seconds. */
|
|
43
|
+
sample(frameDt: number, nowMs: number): void;
|
|
44
|
+
dispose(): void;
|
|
45
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Throttled DOM frame profiler for development builds. */
|
|
2
|
+
export class FpsMeter {
|
|
3
|
+
element;
|
|
4
|
+
samples;
|
|
5
|
+
updateIntervalMs;
|
|
6
|
+
frameBudgetMs;
|
|
7
|
+
overBudgetClass;
|
|
8
|
+
index = 0;
|
|
9
|
+
filled = 0;
|
|
10
|
+
lastUpdate = 0;
|
|
11
|
+
lastText = '';
|
|
12
|
+
lastFps = 0;
|
|
13
|
+
lastMeanMs = 0;
|
|
14
|
+
lastWorstMs = 0;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
const sampleWindow = options.sampleWindow ?? 60;
|
|
17
|
+
if (!Number.isInteger(sampleWindow) || sampleWindow <= 0) {
|
|
18
|
+
throw new Error(`FpsMeter.sampleWindow must be a positive integer, got ${sampleWindow}`);
|
|
19
|
+
}
|
|
20
|
+
this.samples = new Float32Array(sampleWindow);
|
|
21
|
+
this.updateIntervalMs = options.updateIntervalMs ?? 250;
|
|
22
|
+
this.frameBudgetMs = options.frameBudgetMs ?? 16.7;
|
|
23
|
+
this.overBudgetClass = options.overBudgetClass ?? 'over-budget';
|
|
24
|
+
const element = document.createElement('div');
|
|
25
|
+
element.id = options.id ?? 'fps-meter';
|
|
26
|
+
(options.parent ?? document.body).append(element);
|
|
27
|
+
this.element = element;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The rate this meter last computed, for a caller that wants the number as well as the panel.
|
|
31
|
+
*
|
|
32
|
+
* **Reported from outside**, by a consumer that had to keep its own average beside this one to
|
|
33
|
+
* say "the preview is below rate, the export is unaffected". A class that owns an element and
|
|
34
|
+
* refuses to say what it wrote in it makes every caller measure the same thing twice.
|
|
35
|
+
*
|
|
36
|
+
* These are what was last *displayed*, so they move at `updateIntervalMs` rather than per frame,
|
|
37
|
+
* which is the point: a figure that changes sixty times a second is not one a person reads, and
|
|
38
|
+
* a caller comparing against a budget wants the same smoothed number the panel shows.
|
|
39
|
+
*
|
|
40
|
+
* Zero until the first update, which is a real state and not a rate.
|
|
41
|
+
*/
|
|
42
|
+
get fps() {
|
|
43
|
+
return this.lastFps;
|
|
44
|
+
}
|
|
45
|
+
/** Mean frame time in milliseconds over the window, as last displayed. See `fps`. */
|
|
46
|
+
get meanMs() {
|
|
47
|
+
return this.lastMeanMs;
|
|
48
|
+
}
|
|
49
|
+
/** The slowest frame in the window in milliseconds, as last displayed. See `fps`. */
|
|
50
|
+
get worstMs() {
|
|
51
|
+
return this.lastWorstMs;
|
|
52
|
+
}
|
|
53
|
+
/** Call once per rendered frame with duration in seconds. */
|
|
54
|
+
sample(frameDt, nowMs) {
|
|
55
|
+
this.samples[this.index] = frameDt * 1000;
|
|
56
|
+
this.index = (this.index + 1) % this.samples.length;
|
|
57
|
+
if (this.filled < this.samples.length)
|
|
58
|
+
this.filled++;
|
|
59
|
+
if (nowMs - this.lastUpdate < this.updateIntervalMs)
|
|
60
|
+
return;
|
|
61
|
+
this.lastUpdate = nowMs;
|
|
62
|
+
let total = 0;
|
|
63
|
+
let worst = 0;
|
|
64
|
+
for (let sample = 0; sample < this.filled; sample++) {
|
|
65
|
+
const ms = this.samples[sample] ?? 0;
|
|
66
|
+
total += ms;
|
|
67
|
+
if (ms > worst)
|
|
68
|
+
worst = ms;
|
|
69
|
+
}
|
|
70
|
+
const meanMs = total / Math.max(this.filled, 1);
|
|
71
|
+
const fps = meanMs > 0 ? 1000 / meanMs : 0;
|
|
72
|
+
this.lastFps = fps;
|
|
73
|
+
this.lastMeanMs = meanMs;
|
|
74
|
+
this.lastWorstMs = worst;
|
|
75
|
+
// Throttled and change-gated: the one sanctioned hot-path string/DOM write.
|
|
76
|
+
const text = `${fps.toFixed(0)} fps · ${meanMs.toFixed(1)} ms · worst ${worst.toFixed(1)} ms`;
|
|
77
|
+
if (text === this.lastText)
|
|
78
|
+
return;
|
|
79
|
+
this.lastText = text;
|
|
80
|
+
this.element.textContent = text;
|
|
81
|
+
this.element.classList.toggle(this.overBudgetClass, worst > this.frameBudgetMs * 1.5);
|
|
82
|
+
}
|
|
83
|
+
dispose() {
|
|
84
|
+
this.element.remove();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allocation-free wall-clock sampling for a procedural sun, moon and clouds.
|
|
3
|
+
*
|
|
4
|
+
* **Two models, and a caller chooses by whether it names a place.** Without a `CelestialSite` this
|
|
5
|
+
* is what it has always been: a sun swung through a fixed arc, peaking at the same altitude every
|
|
6
|
+
* day of every year wherever the world is meant to be. With one, it is the standard solar-position
|
|
7
|
+
* arithmetic — a declination from the day of the year, an hour angle from the clock, and an
|
|
8
|
+
* altitude and azimuth from those and the latitude.
|
|
9
|
+
*
|
|
10
|
+
* **The simplified model is kept rather than replaced**, and that is the engine's ordinary rule
|
|
11
|
+
* rather than a soft touch: every world authored against this engine has its lighting tuned against
|
|
12
|
+
* that arc, and a model that silently moved the sun would move every shadow, every exposure and
|
|
13
|
+
* every night in every consumer at once. A caller that passes no site gets the same numbers it got
|
|
14
|
+
* before, bit for bit, which `celestialClock.test.ts` asserts against literals rather than against
|
|
15
|
+
* a second implementation.
|
|
16
|
+
*
|
|
17
|
+
* **What the simplified model gives up, said plainly, because a consumer worked it out for
|
|
18
|
+
* themselves first:** no latitude, so the sun reaches 66° at noon on the equator and at the pole
|
|
19
|
+
* alike; no season, so the arc is the same in December as in June; an azimuth that sweeps a whole
|
|
20
|
+
* turn in a day where a real one swings through rather less; and a moon pinned exactly opposite the
|
|
21
|
+
* sun, which contradicts the phase reported beside it — a crescent that rises at midnight. All four
|
|
22
|
+
* are fixed by naming a site.
|
|
23
|
+
*
|
|
24
|
+
* **A site can also name its clock, and until 2026-09-03 nothing could.** The hour was read off the
|
|
25
|
+
* timestamp through the *host machine's* time zone, so one argument put the sun in four places on
|
|
26
|
+
* four machines — solar noon at 12:00 under `TZ=UTC`, 10:00 in Rome, 16:00 in New York, 03:00 in
|
|
27
|
+
* Tokyo — and the only way to say an hour was to build a timestamp whose host offset cancelled the
|
|
28
|
+
* one being added. `longitudeDeg` and `utcOffsetHours` are the way to say it instead: either one
|
|
29
|
+
* makes the timestamp a UTC instant and the engine derives the site's own hour, so the sky is a
|
|
30
|
+
* function of the arguments alone. It was found by a player in Italy watching the sun set before
|
|
31
|
+
* six, which is what the workaround cost when the host disagreed with the world.
|
|
32
|
+
*/
|
|
33
|
+
import type { Vec3 } from '../math/color.ts';
|
|
34
|
+
/**
|
|
35
|
+
* Where in the world, and when in the year, the sky is being sampled.
|
|
36
|
+
*
|
|
37
|
+
* **A site rather than a latitude alone**, because latitude and season are one question: the sun's
|
|
38
|
+
* altitude is a function of the declination *and* the latitude, and a model with one and not the
|
|
39
|
+
* other is wrong in a way that only shows up six months later.
|
|
40
|
+
*/
|
|
41
|
+
export interface CelestialSite {
|
|
42
|
+
/**
|
|
43
|
+
* Degrees north of the equator, −90 to 90. Clamped rather than refused, because a value past a
|
|
44
|
+
* pole is a caller's arithmetic overshooting rather than a request for something impossible.
|
|
45
|
+
*/
|
|
46
|
+
readonly latitudeDeg: number;
|
|
47
|
+
/**
|
|
48
|
+
* Degrees east of Greenwich, −180 to 180, or absent.
|
|
49
|
+
*
|
|
50
|
+
* **Naming this or `utcOffsetHours` changes what the timestamp means**: it stops being read
|
|
51
|
+
* through the host machine's time zone and becomes a plain UTC instant, from which this site's
|
|
52
|
+
* own hour is derived. See `celestialStateAt`. Not clamped, because a longitude is an angle and
|
|
53
|
+
* a value past the antimeridian means the place a turn around says it does.
|
|
54
|
+
*
|
|
55
|
+
* Alone, it also stands in for the zone: a place is assumed to keep the time of its own
|
|
56
|
+
* meridian, which is exact solar time and differs from a real zone by up to half an hour.
|
|
57
|
+
*/
|
|
58
|
+
readonly longitudeDeg?: number;
|
|
59
|
+
/**
|
|
60
|
+
* Hours this site's wall clock runs ahead of UTC — `2` for Italy in summer — or absent.
|
|
61
|
+
*
|
|
62
|
+
* The other half of the pair above, and the same switch: naming it makes the timestamp a UTC
|
|
63
|
+
* instant. It is what turns that instant into the site's *calendar day*, which is the one thing
|
|
64
|
+
* a longitude cannot do; with `longitudeDeg` beside it the sun also stops sitting at the zone's
|
|
65
|
+
* centre and moves to the place's real meridian, up to half an hour either way.
|
|
66
|
+
*
|
|
67
|
+
* **Daylight saving is the caller's**, because a zone's offset is a function of the date and of
|
|
68
|
+
* legislation, and an engine that shipped a table of it would ship a table that expires.
|
|
69
|
+
*/
|
|
70
|
+
readonly utcOffsetHours?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Day of the year, 1 to 365, or absent to take it from the timestamp.
|
|
73
|
+
*
|
|
74
|
+
* Present because a world may run on a calendar of its own — a game whose year is forty days
|
|
75
|
+
* still wants a season — and taking it from the timestamp would tie that to the wall clock.
|
|
76
|
+
*/
|
|
77
|
+
readonly dayOfYear?: number;
|
|
78
|
+
/**
|
|
79
|
+
* The planet's axial tilt in degrees. Earth's 23.44 by default.
|
|
80
|
+
*
|
|
81
|
+
* Zero is a world with no seasons at all, where the sun's arc is the same every day and depends
|
|
82
|
+
* on latitude alone; larger values are a world with sharper ones. It is here because it costs one
|
|
83
|
+
* multiply and because a stylised world is exactly the consumer this engine has.
|
|
84
|
+
*/
|
|
85
|
+
readonly obliquityDeg?: number;
|
|
86
|
+
}
|
|
87
|
+
export interface CelestialState {
|
|
88
|
+
sunDir: Vec3;
|
|
89
|
+
moonDir: Vec3;
|
|
90
|
+
/** 0 at night, 1 in full day. Smoothstepped across the twilight band. */
|
|
91
|
+
dayFactor: number;
|
|
92
|
+
nightFactor: number;
|
|
93
|
+
/** Wrapped scroll distance suitable for a highp shader uniform. */
|
|
94
|
+
/** 0..1 across the lunar cycle. */
|
|
95
|
+
moonPhase: number;
|
|
96
|
+
}
|
|
97
|
+
export declare function createCelestialState(): CelestialState;
|
|
98
|
+
/** Visible fraction: new at 0/1, quarters at 0.25/0.75, full at 0.5. */
|
|
99
|
+
export declare function moonIllumination(phase: number): number;
|
|
100
|
+
/**
|
|
101
|
+
* Convert a timestamp and an authored azimuth into sky state.
|
|
102
|
+
*
|
|
103
|
+
* The caller decides where the timestamp comes from and must keep it out of a deterministic
|
|
104
|
+
* simulation if wall time should not affect gameplay.
|
|
105
|
+
*
|
|
106
|
+
* `sunAzimuth` is **where the world's north points**, as an angle in the xz plane from +x toward
|
|
107
|
+
* +z. It was an arbitrary offset in the model that knows no latitude and it means the same thing
|
|
108
|
+
* there; with a site it becomes load-bearing, because the sun's own azimuth is then derived and
|
|
109
|
+
* this is what relates it to the world's axes.
|
|
110
|
+
*
|
|
111
|
+
* **`site` is what turns the simplified model into the sited one**, and omitting it is not a
|
|
112
|
+
* degraded mode — it is the model every world here was authored against. See the header.
|
|
113
|
+
*
|
|
114
|
+
* **Which hour the timestamp names depends on whether the site states a zone**, and that is the
|
|
115
|
+
* one thing to get right before anything else here matters:
|
|
116
|
+
*
|
|
117
|
+
* - **A site naming `longitudeDeg` or `utcOffsetHours`** makes `whenMs` a plain **UTC instant** —
|
|
118
|
+
* `Date.now()`, or `Date.UTC(…)` for an hour chosen outright — and the engine derives that
|
|
119
|
+
* site's own hour from it. The answer is then a function of the arguments and of nothing else,
|
|
120
|
+
* which is the only form that gives every machine the same sky.
|
|
121
|
+
* - **A site naming neither, or no site at all**, reads the hour off the timestamp through the
|
|
122
|
+
* **host machine's** time zone, which is what this function has always done. Every world
|
|
123
|
+
* authored against it is tuned that way, so it is kept exactly: the same argument gives the same
|
|
124
|
+
* numbers, bit for bit. But the same argument on another machine gives another hour, so a caller
|
|
125
|
+
* in this form must build the timestamp from local parts — `new Date(y, m, d, h)` — for the
|
|
126
|
+
* host's offset to cancel rather than be added.
|
|
127
|
+
*
|
|
128
|
+
* **`moonPhase` is the reason the first form is worth taking even where the sun already looks
|
|
129
|
+
* right.** It comes from the timestamp's absolute value rather than from the hour, so the
|
|
130
|
+
* build-it-from-local-parts trick that steadies the sun leaves the moon drifting by the host's
|
|
131
|
+
* offset — a fiftieth of a lunar cycle across the world, invisible and still not a fact about the
|
|
132
|
+
* world.
|
|
133
|
+
*
|
|
134
|
+
* **The equation of time stays the caller's**, and it is the last correction left: a real sun runs
|
|
135
|
+
* up to about a quarter of an hour ahead of or behind mean time across the year, from the Earth's
|
|
136
|
+
* eccentricity and its tilt. The zone and the meridian are the engine's as soon as a site states
|
|
137
|
+
* them; this one is not, because it is a property of the planet's orbit rather than of the place,
|
|
138
|
+
* and a world with an obliquity of its own has an equation of time of its own. A caller measuring
|
|
139
|
+
* a shadow against an almanac applies it to the timestamp; a caller lighting a world does not care.
|
|
140
|
+
*/
|
|
141
|
+
export declare function celestialStateAt(whenMs: number, sunAzimuth: number, out: CelestialState, site?: CelestialSite): void;
|