@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,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a fixed-step simulation produced, tick by tick.
|
|
3
|
+
*
|
|
4
|
+
* Replaying a recorded run means re-running the simulation, which is far too
|
|
5
|
+
* expensive to do inside a frame and cannot be seeked into at all — an intent
|
|
6
|
+
* stream has no keyframes, so reaching tick 4,000 means running the four
|
|
7
|
+
* thousand before it. Running it *once*, up front, and keeping what each tick
|
|
8
|
+
* produced turns a replay from a simulation into a lookup.
|
|
9
|
+
*
|
|
10
|
+
* A flat `Float32Array` of `channels` values per tick, plus one byte of flags for
|
|
11
|
+
* the booleans that would otherwise cost four bytes each. Preallocate with
|
|
12
|
+
* `capacity` when the length is known — a caller replaying a recording always
|
|
13
|
+
* knows it — and nothing reallocates while the simulation is running.
|
|
14
|
+
*/
|
|
15
|
+
export interface TickTraceLike {
|
|
16
|
+
readonly length: number;
|
|
17
|
+
readonly channels: number;
|
|
18
|
+
sample(tick: number, out: Float32Array): void;
|
|
19
|
+
flagsAt(tick: number): number;
|
|
20
|
+
channelAt(tick: number, channel: number): number;
|
|
21
|
+
tickAtOrBefore(channel: number, value: number): number;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class TickTrace implements TickTraceLike {
|
|
25
|
+
readonly channels: number;
|
|
26
|
+
|
|
27
|
+
private values: Float32Array;
|
|
28
|
+
private flags: Uint8Array;
|
|
29
|
+
private count = 0;
|
|
30
|
+
|
|
31
|
+
constructor(channels: number, capacity = 256) {
|
|
32
|
+
this.channels = Math.max(1, channels | 0);
|
|
33
|
+
const slots = Math.max(1, capacity | 0);
|
|
34
|
+
this.values = new Float32Array(slots * this.channels);
|
|
35
|
+
this.flags = new Uint8Array(slots);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get length(): number {
|
|
39
|
+
return this.count;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
push(values: ArrayLike<number>, flags = 0): void {
|
|
43
|
+
if ((this.count + 1) * this.channels > this.values.length) this.grow();
|
|
44
|
+
const at = this.count * this.channels;
|
|
45
|
+
for (let i = 0; i < this.channels; i++) this.values[at + i] = values[i] ?? 0;
|
|
46
|
+
this.flags[this.count] = flags & 0xff;
|
|
47
|
+
this.count++;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The state at a tick, clamped to the range that exists.
|
|
52
|
+
*
|
|
53
|
+
* Clamped rather than refused because both ends are ordinary rather than
|
|
54
|
+
* exceptional: a caller one tick past the end is a character who has finished, and
|
|
55
|
+
* holding their last state is exactly what they should look like.
|
|
56
|
+
*/
|
|
57
|
+
sample(tick: number, out: Float32Array): void {
|
|
58
|
+
const at = this.clamp(tick) * this.channels;
|
|
59
|
+
for (let i = 0; i < this.channels; i++) out[i] = this.values[at + i] ?? 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
channelAt(tick: number, channel: number): number {
|
|
63
|
+
return this.values[this.clamp(tick) * this.channels + channel] ?? 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
flagsAt(tick: number): number {
|
|
67
|
+
return this.flags[this.clamp(tick)] ?? 0;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The last tick at which a non-decreasing channel was at or below `value`.
|
|
72
|
+
*
|
|
73
|
+
* This is how two runs of the same course are compared **at the same point on
|
|
74
|
+
* the course** rather than at the same moment in time. Comparing by time drifts
|
|
75
|
+
* the instant one character takes a wider line; comparing by distance does not,
|
|
76
|
+
* which is what makes the difference a split rather than a guess.
|
|
77
|
+
*
|
|
78
|
+
* The **last** tick of a run of equal values, not the first, and that matters
|
|
79
|
+
* wherever the channel can stall: a character who stopped for half a second has a
|
|
80
|
+
* plateau, and answering its first tick would report them ahead by the whole
|
|
81
|
+
* length of the stall.
|
|
82
|
+
*
|
|
83
|
+
* The channel must be non-decreasing. Binary search over anything else returns
|
|
84
|
+
* an answer that is merely arbitrary rather than obviously wrong, so a caller
|
|
85
|
+
* whose channel can go backwards must clamp it on the way in.
|
|
86
|
+
*
|
|
87
|
+
* `-1` on an empty trace: there is no tick to name, and 0 would be a lie about
|
|
88
|
+
* a tick that does not exist.
|
|
89
|
+
*/
|
|
90
|
+
tickAtOrBefore(channel: number, value: number): number {
|
|
91
|
+
if (this.count === 0) return -1;
|
|
92
|
+
|
|
93
|
+
let low = 0;
|
|
94
|
+
let high = this.count - 1;
|
|
95
|
+
if (this.channelAt(low, channel) > value) return 0;
|
|
96
|
+
|
|
97
|
+
while (low < high) {
|
|
98
|
+
// Biased upward, so `low` can actually reach `high` and the loop ends.
|
|
99
|
+
const mid = (low + high + 1) >> 1;
|
|
100
|
+
if (this.channelAt(mid, channel) <= value) low = mid;
|
|
101
|
+
else high = mid - 1;
|
|
102
|
+
}
|
|
103
|
+
return low;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private clamp(tick: number): number {
|
|
107
|
+
if (this.count === 0) return 0;
|
|
108
|
+
if (tick < 0) return 0;
|
|
109
|
+
return tick >= this.count ? this.count - 1 : tick | 0;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Both arrays double together.
|
|
114
|
+
*
|
|
115
|
+
* They are parallel and they are separate allocations, which is exactly how
|
|
116
|
+
* they come apart: a values array that grew while the flags one did not would
|
|
117
|
+
* read every flag past the old boundary as zero, and zero is a legal flag
|
|
118
|
+
* rather than an error anybody would notice.
|
|
119
|
+
*/
|
|
120
|
+
private grow(): void {
|
|
121
|
+
const values = new Float32Array(this.values.length * 2);
|
|
122
|
+
values.set(this.values);
|
|
123
|
+
this.values = values;
|
|
124
|
+
|
|
125
|
+
const flags = new Uint8Array(this.flags.length * 2);
|
|
126
|
+
flags.set(this.flags);
|
|
127
|
+
this.flags = flags;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { TAU, clamp } from '../math/scalar.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Re-timing a stretch of playback: how much *source* time one second of clip
|
|
5
|
+
* time is worth.
|
|
6
|
+
*
|
|
7
|
+
* A curve is a reparameterisation, not an animation. It answers exactly one
|
|
8
|
+
* question — "given `localSec` into this segment, how far has the source
|
|
9
|
+
* advanced?" — which is what lets a caller drive a fixed-timestep simulation, a
|
|
10
|
+
* recorded stream or a video from the same maths.
|
|
11
|
+
*
|
|
12
|
+
* **Every curve is speed-neutral over its own segment**: whatever it steals it
|
|
13
|
+
* pays back, so `curveSpanSec` equals `durationSec` for every kind. That is the
|
|
14
|
+
* property that keeps a re-timed clip the length it was asked for. A curve that
|
|
15
|
+
* slowed time without catching up would quietly shorten the footage a fixed
|
|
16
|
+
* clip length can cover, and the clip would stop before the thing it was cut
|
|
17
|
+
* for.
|
|
18
|
+
*
|
|
19
|
+
* Pure, closed-form and allocation-free: evaluated once per rendered frame.
|
|
20
|
+
*/
|
|
21
|
+
export type TimeCurveKind = 'linear' | 'hold' | 'ramp' | 'stutter' | 'reverse';
|
|
22
|
+
|
|
23
|
+
export interface TimeCurve {
|
|
24
|
+
readonly kind: TimeCurveKind;
|
|
25
|
+
/** Length of the segment on the clip's own clock, seconds. */
|
|
26
|
+
readonly durationSec: number;
|
|
27
|
+
/**
|
|
28
|
+
* How much of the segment the effect claims, 0–1.
|
|
29
|
+
*
|
|
30
|
+
* `hold`: the fraction frozen. `ramp`: the depth of the rate swing.
|
|
31
|
+
* `stutter`: the frozen fraction of each step. `reverse`: the fraction run
|
|
32
|
+
* backwards. Zero makes every kind behave as `linear`, which is the honest
|
|
33
|
+
* neutral rather than a special case to branch on.
|
|
34
|
+
*/
|
|
35
|
+
readonly amount: number;
|
|
36
|
+
/** `stutter` only: one freeze-and-catch-up cycle, seconds. */
|
|
37
|
+
readonly stepSec: number;
|
|
38
|
+
/**
|
|
39
|
+
* `reverse` only: how far back the *caller* can actually go, in source
|
|
40
|
+
* seconds.
|
|
41
|
+
*
|
|
42
|
+
* Running a re-simulated stream backwards is impossible without keeping the
|
|
43
|
+
* states to go back to, so the reversible window is a property of the
|
|
44
|
+
* consumer's buffer and has to be supplied rather than assumed. A curve never
|
|
45
|
+
* returns an offset below `-reversibleSec`; a consumer with no buffer passes
|
|
46
|
+
* zero and gets no reversal at all.
|
|
47
|
+
*/
|
|
48
|
+
readonly reversibleSec: number;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface TimeCurveOptions {
|
|
52
|
+
readonly amount?: number;
|
|
53
|
+
readonly stepSec?: number;
|
|
54
|
+
readonly reversibleSec?: number;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Ceiling on `amount`.
|
|
59
|
+
*
|
|
60
|
+
* Every kind pays its debt back by running the rest of the segment at
|
|
61
|
+
* `1 / (1 - amount)`, so an amount at 1 asks for infinite speed in zero time.
|
|
62
|
+
* Capped rather than merely documented: this is the kind of value a tuning pass
|
|
63
|
+
* pushes to its limit.
|
|
64
|
+
*/
|
|
65
|
+
export const MAX_TIME_CURVE_AMOUNT = 0.9;
|
|
66
|
+
|
|
67
|
+
const LINEAR_STEP_SEC = 1;
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Build a curve, validating at construction.
|
|
71
|
+
*
|
|
72
|
+
* Fail-fast here rather than per-frame in `curveOffsetSec`: a curve is built
|
|
73
|
+
* once when a clip is planned, and a plan is a fine place to throw.
|
|
74
|
+
*/
|
|
75
|
+
export function timeCurve(
|
|
76
|
+
kind: TimeCurveKind,
|
|
77
|
+
durationSec: number,
|
|
78
|
+
options: TimeCurveOptions = {},
|
|
79
|
+
): TimeCurve {
|
|
80
|
+
if (!Number.isFinite(durationSec) || durationSec <= 0) {
|
|
81
|
+
throw new Error(`A time curve needs a positive duration, got ${durationSec}`);
|
|
82
|
+
}
|
|
83
|
+
const amount = clamp(options.amount ?? 0, 0, MAX_TIME_CURVE_AMOUNT);
|
|
84
|
+
const requested = options.stepSec ?? LINEAR_STEP_SEC;
|
|
85
|
+
if (!Number.isFinite(requested) || requested <= 0) {
|
|
86
|
+
throw new Error(`A stutter step must be positive, got ${requested}`);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
* Snap the stutter step so a whole number of cycles fits the segment. A
|
|
91
|
+
* trailing part-cycle would leave the curve mid-freeze at its own end, which
|
|
92
|
+
* breaks neutrality by exactly the frozen remainder — small, and therefore
|
|
93
|
+
* the sort of drift that accumulates over a dozen shots without ever looking
|
|
94
|
+
* like a bug.
|
|
95
|
+
*/
|
|
96
|
+
const cycles = Math.max(1, Math.round(durationSec / requested));
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
kind,
|
|
100
|
+
durationSec,
|
|
101
|
+
amount,
|
|
102
|
+
stepSec: kind === 'stutter' ? durationSec / cycles : requested,
|
|
103
|
+
reversibleSec: Math.max(0, options.reversibleSec ?? 0),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/** A curve that does nothing, for a segment that is played straight. */
|
|
108
|
+
export function linearCurve(durationSec: number): TimeCurve {
|
|
109
|
+
return timeCurve('linear', durationSec);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Source seconds elapsed by `localSec` into the curve.
|
|
114
|
+
*
|
|
115
|
+
* Monotonically non-decreasing for every kind except `reverse`, continuous
|
|
116
|
+
* everywhere, and clamped to the segment — outside it, the neighbouring
|
|
117
|
+
* segments own the clock.
|
|
118
|
+
*/
|
|
119
|
+
export function curveOffsetSec(curve: TimeCurve, localSec: number): number {
|
|
120
|
+
const duration = curve.durationSec;
|
|
121
|
+
const local = clamp(localSec, 0, duration);
|
|
122
|
+
const amount = curve.amount;
|
|
123
|
+
if (amount === 0) return local;
|
|
124
|
+
|
|
125
|
+
switch (curve.kind) {
|
|
126
|
+
case 'linear':
|
|
127
|
+
return local;
|
|
128
|
+
|
|
129
|
+
case 'hold': {
|
|
130
|
+
// Freeze on the cut, then run fast enough to arrive on time.
|
|
131
|
+
const frozen = amount * duration;
|
|
132
|
+
return local <= frozen ? 0 : (local - frozen) / (1 - amount);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
case 'ramp': {
|
|
136
|
+
/*
|
|
137
|
+
* Slow, fast, slow — an "ease-in-out-in". The rate is
|
|
138
|
+
* `1 - amount * cos(TAU * t / duration)`, whose integral closes the loop
|
|
139
|
+
* exactly at the segment's end because a whole cosine period integrates
|
|
140
|
+
* to zero. Chosen over a hand-tuned easing precisely for that: neutrality
|
|
141
|
+
* is a consequence of the shape rather than something to correct for.
|
|
142
|
+
*/
|
|
143
|
+
// determinism: build-time — presentation: remaps a cinematic's playback time, not a tick
|
|
144
|
+
return local - ((amount * duration) / TAU) * Math.sin((TAU * local) / duration);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
case 'stutter': {
|
|
148
|
+
const step = curve.stepSec;
|
|
149
|
+
const cycles = Math.floor(local / step);
|
|
150
|
+
const into = local - cycles * step;
|
|
151
|
+
const frozen = amount * step;
|
|
152
|
+
const moving = into <= frozen ? 0 : (into - frozen) / (1 - amount);
|
|
153
|
+
return cycles * step + moving;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
case 'reverse': {
|
|
157
|
+
// Only as far back as the caller kept states for. With no buffer this is
|
|
158
|
+
// zero and the segment plays straight.
|
|
159
|
+
const back = Math.min(amount * duration, curve.reversibleSec);
|
|
160
|
+
if (back <= 0) return local;
|
|
161
|
+
if (local <= back) return -local;
|
|
162
|
+
// Then recover the ground given up *and* the segment itself.
|
|
163
|
+
return -back + ((local - back) * (duration + back)) / (duration - back);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Source seconds a whole segment consumes — `durationSec` for every kind, and
|
|
170
|
+
* worth asking for rather than assuming: a caller composing segments needs the
|
|
171
|
+
* answer the curve actually gives, not the one it promises.
|
|
172
|
+
*/
|
|
173
|
+
export function curveSpanSec(curve: TimeCurve): number {
|
|
174
|
+
return curveOffsetSec(curve, curve.durationSec);
|
|
175
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
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<T extends object>(defaults: T, given: Partial<T>): T {
|
|
22
|
+
const merged = { ...defaults };
|
|
23
|
+
for (const key of Object.keys(given) as (keyof T)[]) {
|
|
24
|
+
const value = given[key];
|
|
25
|
+
if (value !== undefined) merged[key] = value as T[keyof T];
|
|
26
|
+
}
|
|
27
|
+
return merged;
|
|
28
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import type { Aabb } from '@driftengine/physics';
|
|
2
|
+
import type { ColliderSet } from '@driftengine/physics';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* What is around a box, in numbers a person can check.
|
|
6
|
+
*
|
|
7
|
+
* A development tool, not a physics path: `collide.ts` already resolves contacts and
|
|
8
|
+
* is tuned to do it without allocating. This answers a different question — *which
|
|
9
|
+
* colliders are here, and by how much* — for a diagnostic that runs when somebody
|
|
10
|
+
* presses a key, so it favours being readable over being fast.
|
|
11
|
+
*
|
|
12
|
+
* Signed depth per axis rather than a single distance, because the two failures worth
|
|
13
|
+
* telling apart look identical otherwise: a body 5 cm inside a deck and a body 5 cm
|
|
14
|
+
* above one are both "5 cm from a collider".
|
|
15
|
+
*/
|
|
16
|
+
export interface ContactReport {
|
|
17
|
+
index: number;
|
|
18
|
+
/** True where the collider is a hull; its box is then the broad phase only. */
|
|
19
|
+
hull: boolean;
|
|
20
|
+
minX: number;
|
|
21
|
+
minY: number;
|
|
22
|
+
minZ: number;
|
|
23
|
+
maxX: number;
|
|
24
|
+
maxY: number;
|
|
25
|
+
maxZ: number;
|
|
26
|
+
/** Overlap along the axis. Positive is penetration, negative is the gap. */
|
|
27
|
+
depthX: number;
|
|
28
|
+
depthY: number;
|
|
29
|
+
depthZ: number;
|
|
30
|
+
/** Straight line between the boxes. Zero exactly when all three axes overlap. */
|
|
31
|
+
distanceM: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export const CONTACT_LIMIT = 32;
|
|
35
|
+
|
|
36
|
+
export function createContactReports(count = CONTACT_LIMIT): ContactReport[] {
|
|
37
|
+
const out: ContactReport[] = [];
|
|
38
|
+
for (let i = 0; i < count; i++) {
|
|
39
|
+
out.push({
|
|
40
|
+
index: -1,
|
|
41
|
+
hull: false,
|
|
42
|
+
minX: 0,
|
|
43
|
+
minY: 0,
|
|
44
|
+
minZ: 0,
|
|
45
|
+
maxX: 0,
|
|
46
|
+
maxY: 0,
|
|
47
|
+
maxZ: 0,
|
|
48
|
+
depthX: 0,
|
|
49
|
+
depthY: 0,
|
|
50
|
+
depthZ: 0,
|
|
51
|
+
distanceM: 0,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const SCRATCH_BOUNDS: Aabb = { minX: 0, minY: 0, minZ: 0, maxX: 0, maxY: 0, maxZ: 0 };
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Describe every collider overlapping `box` or within `radius` of it.
|
|
61
|
+
*
|
|
62
|
+
* Returns how many entries of `out` were written. Reports are in query order, which is
|
|
63
|
+
* spatial-hash order and therefore arbitrary: sort by `distanceM` at the point of
|
|
64
|
+
* display if order matters, rather than paying for it here.
|
|
65
|
+
*/
|
|
66
|
+
export function describeContacts(
|
|
67
|
+
colliders: ColliderSet,
|
|
68
|
+
box: Aabb,
|
|
69
|
+
radius: number,
|
|
70
|
+
scratch: Int32Array,
|
|
71
|
+
out: ContactReport[],
|
|
72
|
+
): number {
|
|
73
|
+
const found = colliders.query(
|
|
74
|
+
box.minX - radius,
|
|
75
|
+
box.minY - radius,
|
|
76
|
+
box.minZ - radius,
|
|
77
|
+
box.maxX + radius,
|
|
78
|
+
box.maxY + radius,
|
|
79
|
+
box.maxZ + radius,
|
|
80
|
+
scratch,
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
let written = 0;
|
|
84
|
+
for (let k = 0; k < found && written < out.length; k++) {
|
|
85
|
+
const index = scratch[k] as number;
|
|
86
|
+
colliders.bounds(index, SCRATCH_BOUNDS);
|
|
87
|
+
|
|
88
|
+
const depthX =
|
|
89
|
+
Math.min(box.maxX, SCRATCH_BOUNDS.maxX) - Math.max(box.minX, SCRATCH_BOUNDS.minX);
|
|
90
|
+
const depthY =
|
|
91
|
+
Math.min(box.maxY, SCRATCH_BOUNDS.maxY) - Math.max(box.minY, SCRATCH_BOUNDS.minY);
|
|
92
|
+
const depthZ =
|
|
93
|
+
Math.min(box.maxZ, SCRATCH_BOUNDS.maxZ) - Math.max(box.minZ, SCRATCH_BOUNDS.minZ);
|
|
94
|
+
|
|
95
|
+
const gapX = Math.max(0, -depthX);
|
|
96
|
+
const gapY = Math.max(0, -depthY);
|
|
97
|
+
const gapZ = Math.max(0, -depthZ);
|
|
98
|
+
|
|
99
|
+
const report = out[written] as ContactReport;
|
|
100
|
+
report.index = index;
|
|
101
|
+
report.hull = colliders.shapeAt(index) !== undefined;
|
|
102
|
+
report.minX = SCRATCH_BOUNDS.minX;
|
|
103
|
+
report.minY = SCRATCH_BOUNDS.minY;
|
|
104
|
+
report.minZ = SCRATCH_BOUNDS.minZ;
|
|
105
|
+
report.maxX = SCRATCH_BOUNDS.maxX;
|
|
106
|
+
report.maxY = SCRATCH_BOUNDS.maxY;
|
|
107
|
+
report.maxZ = SCRATCH_BOUNDS.maxZ;
|
|
108
|
+
report.depthX = depthX;
|
|
109
|
+
report.depthY = depthY;
|
|
110
|
+
report.depthZ = depthZ;
|
|
111
|
+
report.distanceM = Math.hypot(gapX, gapY, gapZ);
|
|
112
|
+
written++;
|
|
113
|
+
}
|
|
114
|
+
return written;
|
|
115
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/** Throttled DOM frame profiler for development builds. */
|
|
2
|
+
|
|
3
|
+
export interface FpsMeterOptions {
|
|
4
|
+
parent?: HTMLElement;
|
|
5
|
+
id?: string;
|
|
6
|
+
updateIntervalMs?: number;
|
|
7
|
+
sampleWindow?: number;
|
|
8
|
+
frameBudgetMs?: number;
|
|
9
|
+
overBudgetClass?: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export class FpsMeter {
|
|
13
|
+
private readonly element: HTMLElement;
|
|
14
|
+
private readonly samples: Float32Array;
|
|
15
|
+
private readonly updateIntervalMs: number;
|
|
16
|
+
private readonly frameBudgetMs: number;
|
|
17
|
+
private readonly overBudgetClass: string;
|
|
18
|
+
private index = 0;
|
|
19
|
+
private filled = 0;
|
|
20
|
+
private lastUpdate = 0;
|
|
21
|
+
private lastText = '';
|
|
22
|
+
private lastFps = 0;
|
|
23
|
+
private lastMeanMs = 0;
|
|
24
|
+
private lastWorstMs = 0;
|
|
25
|
+
|
|
26
|
+
constructor(options: FpsMeterOptions = {}) {
|
|
27
|
+
const sampleWindow = options.sampleWindow ?? 60;
|
|
28
|
+
if (!Number.isInteger(sampleWindow) || sampleWindow <= 0) {
|
|
29
|
+
throw new Error(`FpsMeter.sampleWindow must be a positive integer, got ${sampleWindow}`);
|
|
30
|
+
}
|
|
31
|
+
this.samples = new Float32Array(sampleWindow);
|
|
32
|
+
this.updateIntervalMs = options.updateIntervalMs ?? 250;
|
|
33
|
+
this.frameBudgetMs = options.frameBudgetMs ?? 16.7;
|
|
34
|
+
this.overBudgetClass = options.overBudgetClass ?? 'over-budget';
|
|
35
|
+
|
|
36
|
+
const element = document.createElement('div');
|
|
37
|
+
element.id = options.id ?? 'fps-meter';
|
|
38
|
+
(options.parent ?? document.body).append(element);
|
|
39
|
+
this.element = element;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The rate this meter last computed, for a caller that wants the number as well as the panel.
|
|
44
|
+
*
|
|
45
|
+
* **Reported from outside**, by a consumer that had to keep its own average beside this one to
|
|
46
|
+
* say "the preview is below rate, the export is unaffected". A class that owns an element and
|
|
47
|
+
* refuses to say what it wrote in it makes every caller measure the same thing twice.
|
|
48
|
+
*
|
|
49
|
+
* These are what was last *displayed*, so they move at `updateIntervalMs` rather than per frame,
|
|
50
|
+
* which is the point: a figure that changes sixty times a second is not one a person reads, and
|
|
51
|
+
* a caller comparing against a budget wants the same smoothed number the panel shows.
|
|
52
|
+
*
|
|
53
|
+
* Zero until the first update, which is a real state and not a rate.
|
|
54
|
+
*/
|
|
55
|
+
get fps(): number {
|
|
56
|
+
return this.lastFps;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Mean frame time in milliseconds over the window, as last displayed. See `fps`. */
|
|
60
|
+
get meanMs(): number {
|
|
61
|
+
return this.lastMeanMs;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** The slowest frame in the window in milliseconds, as last displayed. See `fps`. */
|
|
65
|
+
get worstMs(): number {
|
|
66
|
+
return this.lastWorstMs;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Call once per rendered frame with duration in seconds. */
|
|
70
|
+
sample(frameDt: number, nowMs: number): void {
|
|
71
|
+
this.samples[this.index] = frameDt * 1000;
|
|
72
|
+
this.index = (this.index + 1) % this.samples.length;
|
|
73
|
+
if (this.filled < this.samples.length) this.filled++;
|
|
74
|
+
|
|
75
|
+
if (nowMs - this.lastUpdate < this.updateIntervalMs) return;
|
|
76
|
+
this.lastUpdate = nowMs;
|
|
77
|
+
|
|
78
|
+
let total = 0;
|
|
79
|
+
let worst = 0;
|
|
80
|
+
for (let sample = 0; sample < this.filled; sample++) {
|
|
81
|
+
const ms = this.samples[sample] ?? 0;
|
|
82
|
+
total += ms;
|
|
83
|
+
if (ms > worst) worst = ms;
|
|
84
|
+
}
|
|
85
|
+
const meanMs = total / Math.max(this.filled, 1);
|
|
86
|
+
const fps = meanMs > 0 ? 1000 / meanMs : 0;
|
|
87
|
+
this.lastFps = fps;
|
|
88
|
+
this.lastMeanMs = meanMs;
|
|
89
|
+
this.lastWorstMs = worst;
|
|
90
|
+
// Throttled and change-gated: the one sanctioned hot-path string/DOM write.
|
|
91
|
+
const text = `${fps.toFixed(0)} fps · ${meanMs.toFixed(1)} ms · worst ${worst.toFixed(1)} ms`;
|
|
92
|
+
if (text === this.lastText) return;
|
|
93
|
+
this.lastText = text;
|
|
94
|
+
this.element.textContent = text;
|
|
95
|
+
this.element.classList.toggle(this.overBudgetClass, worst > this.frameBudgetMs * 1.5);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
dispose(): void {
|
|
99
|
+
this.element.remove();
|
|
100
|
+
}
|
|
101
|
+
}
|