@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,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keep the engine's shader commentary out of the bundle a consumer ships.
|
|
3
|
+
*
|
|
4
|
+
* **Build-time code.** It is not part of the runtime barrel and no game imports it; a
|
|
5
|
+
* consuming game's bundler configuration does. See AGENTS.md on where non-runtime code
|
|
6
|
+
* lives.
|
|
7
|
+
*
|
|
8
|
+
* The GLSL in `src/render/shaders/` is written inside template literals, which are
|
|
9
|
+
* *strings*: a minifier renames every identifier around them and does not touch a byte
|
|
10
|
+
* inside. So every consumer ships each shader exactly as it was authored, comments and
|
|
11
|
+
* all — and these shaders are heavily commented, because the reasoning behind a term is
|
|
12
|
+
* the part that is expensive to reconstruct.
|
|
13
|
+
*
|
|
14
|
+
* Measured on a production consumer that links 28 programs: 107 KB of a 300 KB chunk is
|
|
15
|
+
* GLSL, and 62 KB of that is commentary. Stripping it took the chunk from 98 KB to 73 KB
|
|
16
|
+
* gzipped. So this is a payload win of about a quarter as well as the point of the
|
|
17
|
+
* exercise, and the two arguments are independent — either one would justify it.
|
|
18
|
+
*
|
|
19
|
+
* What it deliberately does not do is obscure the shaders. They still compile from
|
|
20
|
+
* readable GLSL, because a shader that cannot be read in a driver's error log is a shader
|
|
21
|
+
* that cannot be debugged in the field. What leaves is the prose.
|
|
22
|
+
*/
|
|
23
|
+
/** A Vite plugin, described structurally so the engine takes no bundler dependency. */
|
|
24
|
+
export interface ShaderCommentPlugin {
|
|
25
|
+
name: string;
|
|
26
|
+
apply: 'build';
|
|
27
|
+
enforce: 'pre';
|
|
28
|
+
transform(code: string, id: string): {
|
|
29
|
+
code: string;
|
|
30
|
+
map: null;
|
|
31
|
+
} | null;
|
|
32
|
+
}
|
|
33
|
+
export interface ShaderCommentOptions {
|
|
34
|
+
/**
|
|
35
|
+
* Which modules hold GLSL.
|
|
36
|
+
*
|
|
37
|
+
* Defaults to any module under a `shaders/` directory, which is where the engine keeps
|
|
38
|
+
* them however it has been vendored — `node_modules/@driftengine/core/src/render/shaders`
|
|
39
|
+
* for a symlinked consumer, `src/vendor/driftengine/render/shaders` for a copied one.
|
|
40
|
+
* A consumer with GLSL of its own can widen it.
|
|
41
|
+
*/
|
|
42
|
+
include?: (id: string) => boolean;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Strip the comments from every GLSL template literal in a module's source.
|
|
46
|
+
*
|
|
47
|
+
* Template literals are found by regex rather than by parsing TypeScript. That is right
|
|
48
|
+
* for a file which is mostly one GLSL string and wrong in general — a stray backtick
|
|
49
|
+
* inside an ordinary string would pair with the wrong partner and the "span" would be
|
|
50
|
+
* code. Two things keep that from mattering: a span is only touched if it contains a GLSL
|
|
51
|
+
* marker, and `shaderComments.test.ts` runs this over every shader module in the
|
|
52
|
+
* repository and checks the result. The corpus is the real guard; the checks below are
|
|
53
|
+
* the cheap one.
|
|
54
|
+
*/
|
|
55
|
+
export declare function stripShaderComments(source: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* The plugin, for a consumer's bundler configuration.
|
|
58
|
+
*
|
|
59
|
+
* `apply: 'build'` so a dev server serves the shaders as written — that is where they are
|
|
60
|
+
* read and edited, and a stripped shader in devtools would cost exactly the debuggability
|
|
61
|
+
* this is careful to preserve everywhere else. `enforce: 'pre'` so it sees the module's
|
|
62
|
+
* own source rather than something another plugin has already rewritten.
|
|
63
|
+
*/
|
|
64
|
+
export declare function shaderCommentStripper(options?: ShaderCommentOptions): ShaderCommentPlugin;
|
|
Binary file
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { ShotParams } from '../render/cinematicCamera.ts';
|
|
2
|
+
import type { CinematicLine, CinematicScript } from './script.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Plays a `CinematicScript`: a clock, the shot it is currently in, and the line
|
|
5
|
+
* that is currently up.
|
|
6
|
+
*
|
|
7
|
+
* It knows about time, camera placements and timed strings, and nothing else.
|
|
8
|
+
* Which shot suits which moment is the script's business, what a `look` means
|
|
9
|
+
* is the presentation's, and what any of it is *about* is the game's.
|
|
10
|
+
*
|
|
11
|
+
* Everything is derived from accumulated time rather than advanced per frame,
|
|
12
|
+
* so a script plays identically on a 144 Hz desktop and a phone dropping frames
|
|
13
|
+
* — a playback that steps an index per frame tells a different story at a
|
|
14
|
+
* different frame rate, and only one of the two was ever written down.
|
|
15
|
+
*
|
|
16
|
+
* The caller drives a `CinematicCamera` from it:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* player.update(dt);
|
|
20
|
+
* if (player.shotChanged) camera.cut(player.shot, player.timeSec);
|
|
21
|
+
* camera.update(dt, x, y, z, yaw);
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* `shotChanged` is true only at a *cut*. A keyframed shot moves while it holds,
|
|
25
|
+
* and the object handed out by `shot` is a live view that keeps moving — so the
|
|
26
|
+
* rig damps its way along the authored path instead of snapping to it every
|
|
27
|
+
* frame. Copy it if you need to keep it past the next `update`.
|
|
28
|
+
*/
|
|
29
|
+
export declare class CinematicPlayer {
|
|
30
|
+
private readonly script;
|
|
31
|
+
private time;
|
|
32
|
+
private shotIndex;
|
|
33
|
+
private lineIndex;
|
|
34
|
+
private cut;
|
|
35
|
+
private current;
|
|
36
|
+
/**
|
|
37
|
+
* Scratch for keyframed shots, reused every frame. A cinematic is not a hot
|
|
38
|
+
* path in the sim sense, but it runs over a live world and a per-frame object
|
|
39
|
+
* is a per-frame collection somewhere later.
|
|
40
|
+
*/
|
|
41
|
+
private readonly moving;
|
|
42
|
+
private readonly movingAnchor;
|
|
43
|
+
constructor(script: CinematicScript, name?: string);
|
|
44
|
+
get timeSec(): number;
|
|
45
|
+
get finished(): boolean;
|
|
46
|
+
/** The placement the camera should be holding, or null before the first shot. */
|
|
47
|
+
get shot(): ShotParams | null;
|
|
48
|
+
/** True on the frame a cut lands — the cue to `cut` the rig. */
|
|
49
|
+
get shotChanged(): boolean;
|
|
50
|
+
/** The one line on screen, or null. Never two: the script cannot express it. */
|
|
51
|
+
get line(): CinematicLine | null;
|
|
52
|
+
update(frameDt: number): void;
|
|
53
|
+
/**
|
|
54
|
+
* Straight to the end, holding nothing.
|
|
55
|
+
*
|
|
56
|
+
* Every returning player takes this path, so it has to leave the player inert
|
|
57
|
+
* rather than merely finished: a skip that leaves a cinematic shot behind
|
|
58
|
+
* hands somebody a run they cannot see.
|
|
59
|
+
*/
|
|
60
|
+
skip(): void;
|
|
61
|
+
/** Back to the top, for a replay from the menu. */
|
|
62
|
+
reset(): void;
|
|
63
|
+
private clear;
|
|
64
|
+
/**
|
|
65
|
+
* Scanned from the start rather than advanced from the last index: the answer
|
|
66
|
+
* is then a function of the clock alone, which is what survives a `reset`, a
|
|
67
|
+
* long frame that crosses two cuts, and a script short enough that the scan
|
|
68
|
+
* costs less than the branch saving it would.
|
|
69
|
+
*/
|
|
70
|
+
private selectShot;
|
|
71
|
+
private selectLine;
|
|
72
|
+
/**
|
|
73
|
+
* The placement `localSec` into a keyframed shot.
|
|
74
|
+
*
|
|
75
|
+
* Linear between keyframes, and deliberately not eased: the rig already damps
|
|
76
|
+
* its own motion, and easing each segment would stall the move at every key —
|
|
77
|
+
* a push-in that pulses instead of pushing.
|
|
78
|
+
*/
|
|
79
|
+
private sample;
|
|
80
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { lerp } from '../math/scalar.js';
|
|
2
|
+
import { validateCinematic } from './script.js';
|
|
3
|
+
/**
|
|
4
|
+
* Plays a `CinematicScript`: a clock, the shot it is currently in, and the line
|
|
5
|
+
* that is currently up.
|
|
6
|
+
*
|
|
7
|
+
* It knows about time, camera placements and timed strings, and nothing else.
|
|
8
|
+
* Which shot suits which moment is the script's business, what a `look` means
|
|
9
|
+
* is the presentation's, and what any of it is *about* is the game's.
|
|
10
|
+
*
|
|
11
|
+
* Everything is derived from accumulated time rather than advanced per frame,
|
|
12
|
+
* so a script plays identically on a 144 Hz desktop and a phone dropping frames
|
|
13
|
+
* — a playback that steps an index per frame tells a different story at a
|
|
14
|
+
* different frame rate, and only one of the two was ever written down.
|
|
15
|
+
*
|
|
16
|
+
* The caller drives a `CinematicCamera` from it:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* player.update(dt);
|
|
20
|
+
* if (player.shotChanged) camera.cut(player.shot, player.timeSec);
|
|
21
|
+
* camera.update(dt, x, y, z, yaw);
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* `shotChanged` is true only at a *cut*. A keyframed shot moves while it holds,
|
|
25
|
+
* and the object handed out by `shot` is a live view that keeps moving — so the
|
|
26
|
+
* rig damps its way along the authored path instead of snapping to it every
|
|
27
|
+
* frame. Copy it if you need to keep it past the next `update`.
|
|
28
|
+
*/
|
|
29
|
+
export class CinematicPlayer {
|
|
30
|
+
script;
|
|
31
|
+
time = 0;
|
|
32
|
+
shotIndex = -1;
|
|
33
|
+
lineIndex = -1;
|
|
34
|
+
cut = false;
|
|
35
|
+
current = null;
|
|
36
|
+
/**
|
|
37
|
+
* Scratch for keyframed shots, reused every frame. A cinematic is not a hot
|
|
38
|
+
* path in the sim sense, but it runs over a live world and a per-frame object
|
|
39
|
+
* is a per-frame collection somewhere later.
|
|
40
|
+
*/
|
|
41
|
+
moving = { kind: 'chase', distance: 6, height: 2, fovDeg: 70 };
|
|
42
|
+
movingAnchor = [0, 0, 0];
|
|
43
|
+
constructor(script, name = 'cinematic') {
|
|
44
|
+
// Even a script that came through `defineCinematic` is checked again: the
|
|
45
|
+
// ordering and non-overlap rules are what make "the line right now" a
|
|
46
|
+
// single answer, and this is the object that relies on them.
|
|
47
|
+
validateCinematic(name, script);
|
|
48
|
+
this.script = script;
|
|
49
|
+
}
|
|
50
|
+
get timeSec() {
|
|
51
|
+
return this.time;
|
|
52
|
+
}
|
|
53
|
+
get finished() {
|
|
54
|
+
return this.time >= this.script.durationSec;
|
|
55
|
+
}
|
|
56
|
+
/** The placement the camera should be holding, or null before the first shot. */
|
|
57
|
+
get shot() {
|
|
58
|
+
return this.current;
|
|
59
|
+
}
|
|
60
|
+
/** True on the frame a cut lands — the cue to `cut` the rig. */
|
|
61
|
+
get shotChanged() {
|
|
62
|
+
return this.cut;
|
|
63
|
+
}
|
|
64
|
+
/** The one line on screen, or null. Never two: the script cannot express it. */
|
|
65
|
+
get line() {
|
|
66
|
+
return this.lineIndex < 0 ? null : this.script.lines[this.lineIndex];
|
|
67
|
+
}
|
|
68
|
+
update(frameDt) {
|
|
69
|
+
this.cut = false;
|
|
70
|
+
if (this.finished)
|
|
71
|
+
return;
|
|
72
|
+
this.time = Math.min(this.time + Math.max(0, frameDt), this.script.durationSec);
|
|
73
|
+
this.selectShot();
|
|
74
|
+
this.selectLine();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Straight to the end, holding nothing.
|
|
78
|
+
*
|
|
79
|
+
* Every returning player takes this path, so it has to leave the player inert
|
|
80
|
+
* rather than merely finished: a skip that leaves a cinematic shot behind
|
|
81
|
+
* hands somebody a run they cannot see.
|
|
82
|
+
*/
|
|
83
|
+
skip() {
|
|
84
|
+
this.time = this.script.durationSec;
|
|
85
|
+
this.clear();
|
|
86
|
+
}
|
|
87
|
+
/** Back to the top, for a replay from the menu. */
|
|
88
|
+
reset() {
|
|
89
|
+
this.time = 0;
|
|
90
|
+
this.clear();
|
|
91
|
+
}
|
|
92
|
+
clear() {
|
|
93
|
+
this.shotIndex = -1;
|
|
94
|
+
this.lineIndex = -1;
|
|
95
|
+
this.current = null;
|
|
96
|
+
this.cut = false;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Scanned from the start rather than advanced from the last index: the answer
|
|
100
|
+
* is then a function of the clock alone, which is what survives a `reset`, a
|
|
101
|
+
* long frame that crosses two cuts, and a script short enough that the scan
|
|
102
|
+
* costs less than the branch saving it would.
|
|
103
|
+
*/
|
|
104
|
+
selectShot() {
|
|
105
|
+
const shots = this.script.shots;
|
|
106
|
+
let index = -1;
|
|
107
|
+
for (let i = 0; i < shots.length; i++) {
|
|
108
|
+
if (shots[i].atSec > this.time)
|
|
109
|
+
break;
|
|
110
|
+
index = i;
|
|
111
|
+
}
|
|
112
|
+
if (index < 0) {
|
|
113
|
+
this.current = null;
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (index !== this.shotIndex) {
|
|
117
|
+
this.shotIndex = index;
|
|
118
|
+
this.cut = true;
|
|
119
|
+
}
|
|
120
|
+
const camera = shots[index].camera;
|
|
121
|
+
this.current = 'kind' in camera ? camera : this.sample(camera, this.time - shots[index].atSec);
|
|
122
|
+
}
|
|
123
|
+
selectLine() {
|
|
124
|
+
const lines = this.script.lines;
|
|
125
|
+
let index = -1;
|
|
126
|
+
for (let i = 0; i < lines.length; i++) {
|
|
127
|
+
const line = lines[i];
|
|
128
|
+
if (line.atSec > this.time)
|
|
129
|
+
break;
|
|
130
|
+
// The window is closed at its end, so a line and its successor cannot
|
|
131
|
+
// both claim the instant one hands over to the other.
|
|
132
|
+
if (this.time < line.atSec + line.holdSec) {
|
|
133
|
+
index = i;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
this.lineIndex = index;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* The placement `localSec` into a keyframed shot.
|
|
141
|
+
*
|
|
142
|
+
* Linear between keyframes, and deliberately not eased: the rig already damps
|
|
143
|
+
* its own motion, and easing each segment would stall the move at every key —
|
|
144
|
+
* a push-in that pulses instead of pushing.
|
|
145
|
+
*/
|
|
146
|
+
sample(frames, localSec) {
|
|
147
|
+
let index = 0;
|
|
148
|
+
for (let i = 0; i < frames.length; i++) {
|
|
149
|
+
if (frames[i].atSec > localSec)
|
|
150
|
+
break;
|
|
151
|
+
index = i;
|
|
152
|
+
}
|
|
153
|
+
const from = frames[index].camera;
|
|
154
|
+
const fromSec = frames[index].atSec;
|
|
155
|
+
const hasNext = index + 1 < frames.length;
|
|
156
|
+
const to = hasNext ? frames[index + 1].camera : from;
|
|
157
|
+
const span = hasNext ? frames[index + 1].atSec - fromSec : 0;
|
|
158
|
+
// Past the last keyframe a shot holds its final placement rather than
|
|
159
|
+
// running on; the timeline says when it ends.
|
|
160
|
+
const t = span > 0 ? Math.min(1, (localSec - fromSec) / span) : 1;
|
|
161
|
+
const moving = this.moving;
|
|
162
|
+
moving.kind = from.kind;
|
|
163
|
+
moving.distance = lerp(from.distance, to.distance, t);
|
|
164
|
+
moving.height = lerp(from.height, to.height, t);
|
|
165
|
+
moving.fovDeg = lerp(from.fovDeg, to.fovDeg, t);
|
|
166
|
+
const fromRate = from.orbitRate;
|
|
167
|
+
const toRate = to.orbitRate;
|
|
168
|
+
moving.orbitRate =
|
|
169
|
+
fromRate === undefined || toRate === undefined ? fromRate : lerp(fromRate, toRate, t);
|
|
170
|
+
const fromAnchor = from.anchor;
|
|
171
|
+
const toAnchor = to.anchor;
|
|
172
|
+
if (fromAnchor === undefined || toAnchor === undefined) {
|
|
173
|
+
moving.anchor = fromAnchor;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
const anchor = this.movingAnchor;
|
|
177
|
+
anchor[0] = lerp(fromAnchor[0], toAnchor[0], t);
|
|
178
|
+
anchor[1] = lerp(fromAnchor[1], toAnchor[1], t);
|
|
179
|
+
anchor[2] = lerp(fromAnchor[2], toAnchor[2], t);
|
|
180
|
+
moving.anchor = anchor;
|
|
181
|
+
}
|
|
182
|
+
return moving;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ShotParams } from '../render/cinematicCamera.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A cinematic, as data: when the camera cuts, and what is on screen when.
|
|
4
|
+
*
|
|
5
|
+
* A sequence is a *file*, not a function. That is the whole point of the split
|
|
6
|
+
* — a new season, a new trailer or a different cut of the same footage must be
|
|
7
|
+
* a data change, and the moment one of them needs a branch in TypeScript the
|
|
8
|
+
* boundary has moved to the wrong place.
|
|
9
|
+
*
|
|
10
|
+
* Which means data is where the mistakes will be, and this module is where they
|
|
11
|
+
* are caught. Everything a timeline can get wrong — two lines up at once, an
|
|
12
|
+
* entry written above the one it plays after, a keyframe past the end of the
|
|
13
|
+
* shot it belongs to — is rejected the moment the script is loaded, by name and
|
|
14
|
+
* by index. The alternative is a cinematic that silently drops its fourth line,
|
|
15
|
+
* which nobody notices until a player asks what it said.
|
|
16
|
+
*
|
|
17
|
+
* Nothing here knows what is being narrated. A shot is a placement, a line is a
|
|
18
|
+
* string with a window and a `look` the presentation layer resolves.
|
|
19
|
+
*/
|
|
20
|
+
/** One camera placement inside a shot. Times are from the shot's own start. */
|
|
21
|
+
export interface CameraKeyframe {
|
|
22
|
+
readonly atSec: number;
|
|
23
|
+
readonly camera: ShotParams;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A cut, at `atSec`.
|
|
27
|
+
*
|
|
28
|
+
* A shot is either a fixed placement or a list of keyframes moved through while
|
|
29
|
+
* it holds. Keyframes are a *move*, never a second cut: they may not change the
|
|
30
|
+
* kind of shot, because that is a cut and belongs on the timeline where an
|
|
31
|
+
* editor can see it.
|
|
32
|
+
*/
|
|
33
|
+
export interface CinematicShot {
|
|
34
|
+
readonly atSec: number;
|
|
35
|
+
readonly camera: ShotParams | readonly CameraKeyframe[];
|
|
36
|
+
}
|
|
37
|
+
export interface CinematicLine {
|
|
38
|
+
readonly atSec: number;
|
|
39
|
+
readonly holdSec: number;
|
|
40
|
+
readonly text: string;
|
|
41
|
+
/** A presentation key — 'story', 'rule'. The player never resolves it. */
|
|
42
|
+
readonly look: string;
|
|
43
|
+
}
|
|
44
|
+
export interface CinematicScript {
|
|
45
|
+
readonly durationSec: number;
|
|
46
|
+
/** In play order. May be empty: a sequence of lines over live gameplay. */
|
|
47
|
+
readonly shots: readonly CinematicShot[];
|
|
48
|
+
/** In play order, non-overlapping. */
|
|
49
|
+
readonly lines: readonly CinematicLine[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Validate a script and hand it back, so a data module fails on import:
|
|
53
|
+
*
|
|
54
|
+
* ```ts
|
|
55
|
+
* export const SEASON_ONE = defineCinematic('season1', { ... });
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* Loud at load is the only useful moment. A malformed timeline cannot be
|
|
59
|
+
* repaired at runtime and must not be played half-right.
|
|
60
|
+
*/
|
|
61
|
+
export declare function defineCinematic(name: string, script: CinematicScript): CinematicScript;
|
|
62
|
+
/** Throws on the first thing wrong, naming the entry and both times. */
|
|
63
|
+
export declare function validateCinematic(name: string, script: CinematicScript): void;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
const SHOT_KINDS = ['chase', 'lowWide', 'orbit', 'flyby', 'overhead', 'lookAt'];
|
|
2
|
+
/**
|
|
3
|
+
* Validate a script and hand it back, so a data module fails on import:
|
|
4
|
+
*
|
|
5
|
+
* ```ts
|
|
6
|
+
* export const SEASON_ONE = defineCinematic('season1', { ... });
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* Loud at load is the only useful moment. A malformed timeline cannot be
|
|
10
|
+
* repaired at runtime and must not be played half-right.
|
|
11
|
+
*/
|
|
12
|
+
export function defineCinematic(name, script) {
|
|
13
|
+
validateCinematic(name, script);
|
|
14
|
+
return script;
|
|
15
|
+
}
|
|
16
|
+
/** Throws on the first thing wrong, naming the entry and both times. */
|
|
17
|
+
export function validateCinematic(name, script) {
|
|
18
|
+
const fail = (message) => {
|
|
19
|
+
throw new Error(`cinematic "${name}": ${message}`);
|
|
20
|
+
};
|
|
21
|
+
const duration = script.durationSec;
|
|
22
|
+
if (!Number.isFinite(duration) || duration <= 0) {
|
|
23
|
+
fail(`runs for ${duration}s, which is not a length`);
|
|
24
|
+
}
|
|
25
|
+
validateShots(script, duration, fail);
|
|
26
|
+
validateLines(script, duration, fail);
|
|
27
|
+
}
|
|
28
|
+
function validateShots(script, duration, fail) {
|
|
29
|
+
const shots = script.shots;
|
|
30
|
+
for (let i = 0; i < shots.length; i++) {
|
|
31
|
+
const shot = shots[i];
|
|
32
|
+
if (!Number.isFinite(shot.atSec) || shot.atSec < 0) {
|
|
33
|
+
fail(`shot ${i} cuts at ${shot.atSec}s`);
|
|
34
|
+
}
|
|
35
|
+
if (i === 0 && shot.atSec !== 0) {
|
|
36
|
+
fail(`shot 0 cuts at ${shot.atSec}s — the camera has nowhere to be before it`);
|
|
37
|
+
}
|
|
38
|
+
if (i > 0 && shot.atSec <= shots[i - 1].atSec) {
|
|
39
|
+
fail(`shot ${i} cuts at ${shot.atSec}s, at or before shot ${i - 1} at ` +
|
|
40
|
+
`${shots[i - 1].atSec}s — shots must be written in the order they play`);
|
|
41
|
+
}
|
|
42
|
+
if (shot.atSec >= duration) {
|
|
43
|
+
fail(`shot ${i} cuts at ${shot.atSec}s, after the script ends at ${duration}s`);
|
|
44
|
+
}
|
|
45
|
+
// How long this shot holds — what a keyframe inside it has to fit within.
|
|
46
|
+
const span = (i + 1 < shots.length ? shots[i + 1].atSec : duration) - shot.atSec;
|
|
47
|
+
validateCamera(shot.camera, span, i, fail);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function validateCamera(camera, spanSec, index, fail) {
|
|
51
|
+
if ('kind' in camera) {
|
|
52
|
+
validateShotParams(camera, `shot ${index}`, fail);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
if (camera.length === 0)
|
|
56
|
+
fail(`shot ${index} is keyframed but has no keyframes`);
|
|
57
|
+
const first = camera[0];
|
|
58
|
+
if (first.atSec !== 0) {
|
|
59
|
+
fail(`shot ${index} keyframe 0 is at ${first.atSec}s — a move must start where the cut lands`);
|
|
60
|
+
}
|
|
61
|
+
for (let i = 0; i < camera.length; i++) {
|
|
62
|
+
const frame = camera[i];
|
|
63
|
+
const where = `shot ${index} keyframe ${i}`;
|
|
64
|
+
if (!Number.isFinite(frame.atSec) || frame.atSec < 0)
|
|
65
|
+
fail(`${where} is at ${frame.atSec}s`);
|
|
66
|
+
if (i > 0 && frame.atSec <= camera[i - 1].atSec) {
|
|
67
|
+
fail(`${where} is at ${frame.atSec}s, at or before keyframe ${i - 1} at ` +
|
|
68
|
+
`${camera[i - 1].atSec}s — keyframes must be written in the order they play`);
|
|
69
|
+
}
|
|
70
|
+
if (frame.atSec > spanSec) {
|
|
71
|
+
fail(`${where} is at ${frame.atSec}s but the shot holds ${spanSec}s — it would never play`);
|
|
72
|
+
}
|
|
73
|
+
if (frame.camera.kind !== first.camera.kind) {
|
|
74
|
+
fail(`${where} changes the shot from ${first.camera.kind} to ${frame.camera.kind} — ` +
|
|
75
|
+
'a change of kind is a cut, and cuts belong on the timeline');
|
|
76
|
+
}
|
|
77
|
+
/*
|
|
78
|
+
* An optional parameter has to be on every keyframe of a shot or none of
|
|
79
|
+
* them. Interpolating toward a missing anchor would send the shot to the
|
|
80
|
+
* world origin, which reads as the camera being thrown rather than as a
|
|
81
|
+
* mistake in the data.
|
|
82
|
+
*/
|
|
83
|
+
if ((frame.camera.anchor === undefined) !== (first.camera.anchor === undefined)) {
|
|
84
|
+
fail(`${where} adds or drops an anchor mid-move`);
|
|
85
|
+
}
|
|
86
|
+
if ((frame.camera.orbitRate === undefined) !== (first.camera.orbitRate === undefined)) {
|
|
87
|
+
fail(`${where} adds or drops an orbit rate mid-move`);
|
|
88
|
+
}
|
|
89
|
+
validateShotParams(frame.camera, where, fail);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function validateShotParams(shot, where, fail) {
|
|
93
|
+
if (!SHOT_KINDS.includes(shot.kind))
|
|
94
|
+
fail(`${where} is a "${shot.kind}" shot, which is not a shot`);
|
|
95
|
+
for (const [label, value] of [
|
|
96
|
+
['distance', shot.distance],
|
|
97
|
+
['height', shot.height],
|
|
98
|
+
['fovDeg', shot.fovDeg],
|
|
99
|
+
]) {
|
|
100
|
+
if (!Number.isFinite(value))
|
|
101
|
+
fail(`${where} has ${label} ${value}`);
|
|
102
|
+
}
|
|
103
|
+
if (shot.orbitRate !== undefined && !Number.isFinite(shot.orbitRate)) {
|
|
104
|
+
fail(`${where} has orbitRate ${shot.orbitRate}`);
|
|
105
|
+
}
|
|
106
|
+
const anchor = shot.anchor;
|
|
107
|
+
if (anchor !== undefined && (anchor.length !== 3 || !anchor.every(Number.isFinite))) {
|
|
108
|
+
fail(`${where} has an anchor that is not three finite numbers`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function validateLines(script, duration, fail) {
|
|
112
|
+
const lines = script.lines;
|
|
113
|
+
for (let i = 0; i < lines.length; i++) {
|
|
114
|
+
const line = lines[i];
|
|
115
|
+
if (line.text.length === 0)
|
|
116
|
+
fail(`line ${i} has nothing to say`);
|
|
117
|
+
if (line.look.length === 0)
|
|
118
|
+
fail(`line ${i} ("${line.text}") has no look`);
|
|
119
|
+
if (!Number.isFinite(line.atSec) || line.atSec < 0) {
|
|
120
|
+
fail(`line ${i} ("${line.text}") opens at ${line.atSec}s`);
|
|
121
|
+
}
|
|
122
|
+
if (!Number.isFinite(line.holdSec) || line.holdSec <= 0) {
|
|
123
|
+
fail(`line ${i} ("${line.text}") holds for ${line.holdSec}s`);
|
|
124
|
+
}
|
|
125
|
+
if (i > 0) {
|
|
126
|
+
const previous = lines[i - 1];
|
|
127
|
+
if (line.atSec <= previous.atSec) {
|
|
128
|
+
fail(`line ${i} ("${line.text}") opens at ${line.atSec}s, at or before line ${i - 1} at ` +
|
|
129
|
+
`${previous.atSec}s — lines must be written in the order they play`);
|
|
130
|
+
}
|
|
131
|
+
if (line.atSec < previous.atSec + previous.holdSec) {
|
|
132
|
+
fail(`line ${i} ("${line.text}") opens at ${line.atSec}s while line ${i - 1} is still up ` +
|
|
133
|
+
`until ${previous.atSec + previous.holdSec}s — two lines at once is unreadable`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (line.atSec + line.holdSec > duration) {
|
|
137
|
+
fail(`line ${i} ("${line.text}") is still up at ${line.atSec + line.holdSec}s, ` +
|
|
138
|
+
`after the script ends at ${duration}s`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one bit of state the fixed loop and the engine badge have to share.
|
|
3
|
+
*
|
|
4
|
+
* **The problem it solves.** The badge holds the screen for a few seconds after the game's first
|
|
5
|
+
* frame reaches it — deliberately, because the badge is a hold and not merely a cover. Without a
|
|
6
|
+
* gate the game is *running* for that whole time behind an opaque black plate: an intro animation
|
|
7
|
+
* plays to nobody, a music cue starts and is three seconds in by the time anyone hears it, and a
|
|
8
|
+
* countdown is already counting. Every one of those is content the player paid for and did not
|
|
9
|
+
* get.
|
|
10
|
+
*
|
|
11
|
+
* So the loop freezes on the frame it just drew, and resumes when the plate is gone.
|
|
12
|
+
*
|
|
13
|
+
* **Why a module-level holder rather than a parameter.** `createRenderer` mounts the badge and
|
|
14
|
+
* `startLoop` runs the loop, and a consumer calls them separately with nothing passed between —
|
|
15
|
+
* threading a handle through would make this a thing every game has to wire, which is the whole
|
|
16
|
+
* failure the default-on badge exists to avoid. There is exactly one screen, so there is exactly
|
|
17
|
+
* one badge, and a singleton is the honest shape for it rather than a convenience.
|
|
18
|
+
*
|
|
19
|
+
* **`ui/` writes it and `core/` reads it**, which is why the state lives here rather than in
|
|
20
|
+
* `ui/splash.ts`: the fixed loop must not import a module that touches the DOM. This file names
|
|
21
|
+
* neither of them and knows only that something may be holding frames back.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Register what decides whether frames are held, and hand back the way to stop deciding.
|
|
25
|
+
*
|
|
26
|
+
* The last registration wins, and releasing only clears the gate if it is still yours — two
|
|
27
|
+
* badges cannot exist at once, but a badge that was released after a second one mounted must
|
|
28
|
+
* not open a gate it no longer owns.
|
|
29
|
+
*/
|
|
30
|
+
export declare function holdFrames(frozen: () => boolean): () => void;
|
|
31
|
+
/**
|
|
32
|
+
* Whether this frame should be skipped entirely.
|
|
33
|
+
*
|
|
34
|
+
* A null check and at most one call, per frame, for the handful of frames a badge is up and none
|
|
35
|
+
* at all afterwards — the badge clears the holder when it leaves. Nothing here allocates.
|
|
36
|
+
*/
|
|
37
|
+
export declare function framesHeld(): boolean;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one bit of state the fixed loop and the engine badge have to share.
|
|
3
|
+
*
|
|
4
|
+
* **The problem it solves.** The badge holds the screen for a few seconds after the game's first
|
|
5
|
+
* frame reaches it — deliberately, because the badge is a hold and not merely a cover. Without a
|
|
6
|
+
* gate the game is *running* for that whole time behind an opaque black plate: an intro animation
|
|
7
|
+
* plays to nobody, a music cue starts and is three seconds in by the time anyone hears it, and a
|
|
8
|
+
* countdown is already counting. Every one of those is content the player paid for and did not
|
|
9
|
+
* get.
|
|
10
|
+
*
|
|
11
|
+
* So the loop freezes on the frame it just drew, and resumes when the plate is gone.
|
|
12
|
+
*
|
|
13
|
+
* **Why a module-level holder rather than a parameter.** `createRenderer` mounts the badge and
|
|
14
|
+
* `startLoop` runs the loop, and a consumer calls them separately with nothing passed between —
|
|
15
|
+
* threading a handle through would make this a thing every game has to wire, which is the whole
|
|
16
|
+
* failure the default-on badge exists to avoid. There is exactly one screen, so there is exactly
|
|
17
|
+
* one badge, and a singleton is the honest shape for it rather than a convenience.
|
|
18
|
+
*
|
|
19
|
+
* **`ui/` writes it and `core/` reads it**, which is why the state lives here rather than in
|
|
20
|
+
* `ui/splash.ts`: the fixed loop must not import a module that touches the DOM. This file names
|
|
21
|
+
* neither of them and knows only that something may be holding frames back.
|
|
22
|
+
*/
|
|
23
|
+
/** What is holding frames, if anything. Set by the badge, read by the loop. */
|
|
24
|
+
let holder = null;
|
|
25
|
+
/**
|
|
26
|
+
* Register what decides whether frames are held, and hand back the way to stop deciding.
|
|
27
|
+
*
|
|
28
|
+
* The last registration wins, and releasing only clears the gate if it is still yours — two
|
|
29
|
+
* badges cannot exist at once, but a badge that was released after a second one mounted must
|
|
30
|
+
* not open a gate it no longer owns.
|
|
31
|
+
*/
|
|
32
|
+
export function holdFrames(frozen) {
|
|
33
|
+
holder = frozen;
|
|
34
|
+
return () => {
|
|
35
|
+
if (holder === frozen)
|
|
36
|
+
holder = null;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Whether this frame should be skipped entirely.
|
|
41
|
+
*
|
|
42
|
+
* A null check and at most one call, per frame, for the handful of frames a badge is up and none
|
|
43
|
+
* at all afterwards — the badge clears the holder when it leaves. Nothing here allocates.
|
|
44
|
+
*/
|
|
45
|
+
export function framesHeld() {
|
|
46
|
+
return holder !== null && holder();
|
|
47
|
+
}
|