@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,227 @@
|
|
|
1
|
+
import { clamp } from '../math/scalar.js';
|
|
2
|
+
import { Boom } from './boom.js';
|
|
3
|
+
import { Spring } from '../math/spring.js';
|
|
4
|
+
import { segmentHit } from '@driftengine/physics';
|
|
5
|
+
import { Camera } from './camera.js';
|
|
6
|
+
import { createShotPlacement, flybyStation, placeShot } from './shotPlacement.js';
|
|
7
|
+
/**
|
|
8
|
+
* How fast the rig converges within a shot, in 1/seconds. Higher is tighter.
|
|
9
|
+
*
|
|
10
|
+
* These are spring rates, not `damp` lambdas, and the two are not
|
|
11
|
+
* interchangeable at the same figure: a spring spends the start of a move
|
|
12
|
+
* accelerating instead of covering ground, so it reads gentler. Kept at the old
|
|
13
|
+
* numbers because the error they used to leave behind is gone — see below —
|
|
14
|
+
* which is a change to how the rig *looks* and wants an eye on it, not a number.
|
|
15
|
+
*/
|
|
16
|
+
const FOLLOW_RATE = 6;
|
|
17
|
+
const AIM_RATE = 9;
|
|
18
|
+
/**
|
|
19
|
+
* A ceiling on the speed the rig will ride along at, in metres per second.
|
|
20
|
+
*
|
|
21
|
+
* Not a tuning knob: a safety rail. The ride-along speed is measured from the
|
|
22
|
+
* placement's own motion, so a subject that jumps — a caller that teleported one
|
|
23
|
+
* without saying so — would otherwise hand the rig hundreds of metres a second
|
|
24
|
+
* and it would coast off with them. Far above anything a subject can really do,
|
|
25
|
+
* so it never binds in play.
|
|
26
|
+
*/
|
|
27
|
+
const MAX_TRACK_SPEED = 60;
|
|
28
|
+
/** Keeps a boom from ending inside a wall it grazed. */
|
|
29
|
+
const BOOM_RADIUS = 0.3;
|
|
30
|
+
const BOOM_MIN_FRACTION = 0.12;
|
|
31
|
+
/*
|
|
32
|
+
* The boom's rate limits live in `boom.ts` now, shared with the gameplay rig,
|
|
33
|
+
* which had none at all and popped by 4 m when a railing crossed it.
|
|
34
|
+
*/
|
|
35
|
+
export class CinematicCamera {
|
|
36
|
+
colliders;
|
|
37
|
+
camera = new Camera();
|
|
38
|
+
shot = { kind: 'chase', distance: 6, height: 2, fovDeg: 70 };
|
|
39
|
+
shotStartSec = 0;
|
|
40
|
+
nowSec = 0;
|
|
41
|
+
/**
|
|
42
|
+
* Where the camera wants to be, and where it is looking.
|
|
43
|
+
*
|
|
44
|
+
* Springs rather than first-order lags, which is the fix for *"the transitions
|
|
45
|
+
* between them that it's like straight"*. A lag's speed is proportional to the
|
|
46
|
+
* error it has already built, so the only way it can travel at the subject's
|
|
47
|
+
* speed is to accumulate `speed / lambda` metres of error and hold it: a shot
|
|
48
|
+
* asking for a 7 m boom was measured sitting at 9.219 m behind a 14 m/s
|
|
49
|
+
* character, and re-accumulating that error as a straight slide after every cut —
|
|
50
|
+
* 7.000 → 8.317 → 9.213 over the second after it, peaking on frame 2 and
|
|
51
|
+
* decaying from there. A spring carries a velocity, so it rides along with a
|
|
52
|
+
* target that is moving instead of trailing it, and it accelerates into and
|
|
53
|
+
* settles out of the moves that remain.
|
|
54
|
+
*/
|
|
55
|
+
followX = new Spring();
|
|
56
|
+
followY = new Spring();
|
|
57
|
+
followZ = new Spring();
|
|
58
|
+
aimYaw = new Spring();
|
|
59
|
+
aimPitch = new Spring();
|
|
60
|
+
/** Place the rig outright on the next update, rather than moving it there. */
|
|
61
|
+
fresh = true;
|
|
62
|
+
/**
|
|
63
|
+
* Whether that placement may keep travelling at the target's speed.
|
|
64
|
+
*
|
|
65
|
+
* The difference between the two ways a rig is placed, and only the caller
|
|
66
|
+
* knows which happened. A **cut** changes the shot while the subject carries on
|
|
67
|
+
* as it was, so the speed measured across the frame is real and the new shot
|
|
68
|
+
* should open already moving with it — otherwise every cut opens with the rig
|
|
69
|
+
* accelerating from a standstill, which is the slide this replaced. A **snap**
|
|
70
|
+
* is for a subject that teleported: there is no meaningful speed across that
|
|
71
|
+
* frame, and a rig that inherited one would coast off after the character's
|
|
72
|
+
* ghost.
|
|
73
|
+
*/
|
|
74
|
+
freshKeepsSpeed = false;
|
|
75
|
+
/** The arm out to the camera, and its speed limits. See `boom.ts`. */
|
|
76
|
+
boom = new Boom();
|
|
77
|
+
/** Frozen for `flyby`, which watches from where it was placed. */
|
|
78
|
+
station = [0, 0, 0];
|
|
79
|
+
pose = { x: 0, y: 0, z: 0, yaw: 0 };
|
|
80
|
+
previousPose = { x: 0, y: 0, z: 0, yaw: 0 };
|
|
81
|
+
hasPreviousPose = false;
|
|
82
|
+
placement = createShotPlacement();
|
|
83
|
+
previousPlacement = createShotPlacement();
|
|
84
|
+
constructor(colliders) {
|
|
85
|
+
this.colliders = colliders;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Switch shots, now.
|
|
89
|
+
*
|
|
90
|
+
* `atSec` is the shot's own start time, used by anything that animates within
|
|
91
|
+
* a shot — an orbit's angle, for instance — so a shot looks the same whenever
|
|
92
|
+
* in the run it is used.
|
|
93
|
+
*/
|
|
94
|
+
cut(shot, atSec) {
|
|
95
|
+
this.shot = shot;
|
|
96
|
+
this.shotStartSec = atSec;
|
|
97
|
+
// The next update snaps rather than glides. This *is* the cut.
|
|
98
|
+
this.fresh = true;
|
|
99
|
+
// The subject did not stop for it, so the new shot opens already tracking.
|
|
100
|
+
this.freshKeepsSpeed = true;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Drop the smoothing history, keeping the shot.
|
|
104
|
+
*
|
|
105
|
+
* For a subject that *teleports* — a character who died and is back on a
|
|
106
|
+
* checkpoint, or a scrub bar dropped somewhere else in the run. Smoothing
|
|
107
|
+
* across that is a camera flying the length of the route with nothing in
|
|
108
|
+
* frame, measured at 124 m inside a single shot, and it looks far more like a
|
|
109
|
+
* bug than a cut does.
|
|
110
|
+
*
|
|
111
|
+
* A threshold inside `update` would be the wrong place for this. Only the
|
|
112
|
+
* caller can tell a teleport from a legitimately fast frame: a replay catching
|
|
113
|
+
* up after a freeze advances several simulation ticks in one frame, and a
|
|
114
|
+
* browser that dropped a frame advances a dozen. That is also why this is not
|
|
115
|
+
* `cut` — the two differ over whether the speed across the frame means
|
|
116
|
+
* anything, and the caller is the only one who knows.
|
|
117
|
+
*/
|
|
118
|
+
snap() {
|
|
119
|
+
this.fresh = true;
|
|
120
|
+
this.freshKeepsSpeed = false;
|
|
121
|
+
}
|
|
122
|
+
/** Seconds since the current shot began. */
|
|
123
|
+
get shotAgeSec() {
|
|
124
|
+
return Math.max(0, this.nowSec - this.shotStartSec);
|
|
125
|
+
}
|
|
126
|
+
update(frameDt, subjectX, subjectY, subjectZ, subjectYaw) {
|
|
127
|
+
const dt = Math.max(0, frameDt);
|
|
128
|
+
this.nowSec += dt;
|
|
129
|
+
const shot = this.shot;
|
|
130
|
+
const age = this.shotAgeSec;
|
|
131
|
+
const pose = this.pose;
|
|
132
|
+
pose.x = subjectX;
|
|
133
|
+
pose.y = subjectY;
|
|
134
|
+
pose.z = subjectZ;
|
|
135
|
+
pose.yaw = subjectYaw;
|
|
136
|
+
// Captured on the cut, from where the subject was at the time, then held.
|
|
137
|
+
if (this.fresh && shot.kind === 'flyby')
|
|
138
|
+
flybyStation(shot, pose, this.station);
|
|
139
|
+
const want = this.placement;
|
|
140
|
+
placeShot(shot, pose, age, this.station, want);
|
|
141
|
+
/*
|
|
142
|
+
* How fast the placement itself is travelling, by placing the *same* shot
|
|
143
|
+
* where the subject was a frame ago.
|
|
144
|
+
*
|
|
145
|
+
* Measured this way rather than by differencing the last frame's answer,
|
|
146
|
+
* because the last frame's answer belongs to the previous shot and a cut is
|
|
147
|
+
* exactly when this matters most. It also comes out right for the shots whose
|
|
148
|
+
* placement does not follow the subject at all — a `flyby` station gives
|
|
149
|
+
* zero, because both frames read the same held station — and it picks up an
|
|
150
|
+
* orbit's own sweep, which is motion the rig should ride rather than chase.
|
|
151
|
+
*/
|
|
152
|
+
let trackVX = 0;
|
|
153
|
+
let trackVY = 0;
|
|
154
|
+
let trackVZ = 0;
|
|
155
|
+
if (dt > 1e-6 && this.hasPreviousPose && (!this.fresh || this.freshKeepsSpeed)) {
|
|
156
|
+
const before = this.previousPlacement;
|
|
157
|
+
placeShot(shot, this.previousPose, Math.max(0, age - dt), this.station, before);
|
|
158
|
+
trackVX = trackSpeed((want.wantX - before.wantX) / dt);
|
|
159
|
+
trackVY = trackSpeed((want.wantY - before.wantY) / dt);
|
|
160
|
+
trackVZ = trackSpeed((want.wantZ - before.wantZ) / dt);
|
|
161
|
+
}
|
|
162
|
+
if (this.fresh) {
|
|
163
|
+
this.followX.reset(want.wantX, trackVX);
|
|
164
|
+
this.followY.reset(want.wantY, trackVY);
|
|
165
|
+
this.followZ.reset(want.wantZ, trackVZ);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.followX.step(want.wantX, trackVX, FOLLOW_RATE, dt);
|
|
169
|
+
this.followY.step(want.wantY, trackVY, FOLLOW_RATE, dt);
|
|
170
|
+
this.followZ.step(want.wantZ, trackVZ, FOLLOW_RATE, dt);
|
|
171
|
+
}
|
|
172
|
+
/*
|
|
173
|
+
* Collision. The boom is the line from the subject out to the camera, and
|
|
174
|
+
* it shortens against real geometry — a replay camera clipping through an
|
|
175
|
+
* island reads as broken immediately, not as a bad angle.
|
|
176
|
+
*/
|
|
177
|
+
const boomX = this.followX.value - want.lookX;
|
|
178
|
+
const boomY = this.followY.value - want.lookY;
|
|
179
|
+
const boomZ = this.followZ.value - want.lookZ;
|
|
180
|
+
const clearFraction = Math.max(BOOM_MIN_FRACTION, segmentHit(want.lookX, want.lookY, want.lookZ, boomX, boomY, boomZ, this.colliders, BOOM_RADIUS));
|
|
181
|
+
if (this.fresh)
|
|
182
|
+
this.boom.reset(clearFraction);
|
|
183
|
+
else
|
|
184
|
+
this.boom.step(clearFraction, Math.hypot(boomX, boomY, boomZ), dt);
|
|
185
|
+
const fraction = this.boom.fraction;
|
|
186
|
+
const camX = want.lookX + boomX * fraction;
|
|
187
|
+
const camY = want.lookY + boomY * fraction;
|
|
188
|
+
const camZ = want.lookZ + boomZ * fraction;
|
|
189
|
+
this.camera.position[0] = camX;
|
|
190
|
+
this.camera.position[1] = camY;
|
|
191
|
+
this.camera.position[2] = camZ;
|
|
192
|
+
// Aim. Smoothed separately from position, so a pan stays steady while the
|
|
193
|
+
// rig is still converging on its placement. Its target is where the subject
|
|
194
|
+
// *is* rather than where it is heading, so there is no speed to ride along
|
|
195
|
+
// with — and now that the rig holds its framing, a held shot barely moves it.
|
|
196
|
+
const dx = want.lookX - camX;
|
|
197
|
+
const dy = want.lookY - camY;
|
|
198
|
+
const dz = want.lookZ - camZ;
|
|
199
|
+
const flat = Math.hypot(dx, dz);
|
|
200
|
+
const wantYaw = flat < 1e-4 && Math.abs(dy) < 1e-4 ? this.aimYaw.value : Math.atan2(dx, -dz);
|
|
201
|
+
const wantPitch = flat < 1e-4 ? (dy > 0 ? 1.4 : -1.4) : Math.atan2(dy, flat);
|
|
202
|
+
if (this.fresh) {
|
|
203
|
+
this.aimYaw.reset(wantYaw);
|
|
204
|
+
this.aimPitch.reset(wantPitch);
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
this.aimYaw.stepAngle(wantYaw, 0, AIM_RATE, dt);
|
|
208
|
+
this.aimPitch.step(wantPitch, 0, AIM_RATE, dt);
|
|
209
|
+
}
|
|
210
|
+
this.camera.yaw = this.aimYaw.value;
|
|
211
|
+
this.camera.pitch = this.aimPitch.value;
|
|
212
|
+
this.camera.fovYDeg = want.fovDeg;
|
|
213
|
+
this.previousPose.x = pose.x;
|
|
214
|
+
this.previousPose.y = pose.y;
|
|
215
|
+
this.previousPose.z = pose.z;
|
|
216
|
+
this.previousPose.yaw = pose.yaw;
|
|
217
|
+
this.hasPreviousPose = true;
|
|
218
|
+
this.fresh = false;
|
|
219
|
+
this.freshKeepsSpeed = false;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/** Keep a measured ride-along speed inside what a crane could do. */
|
|
223
|
+
function trackSpeed(value) {
|
|
224
|
+
if (!Number.isFinite(value))
|
|
225
|
+
return 0;
|
|
226
|
+
return clamp(value, -MAX_TRACK_SPEED, MAX_TRACK_SPEED);
|
|
227
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The froxel table: what it looks like in memory, and the CPU binner that fills it.
|
|
3
|
+
*
|
|
4
|
+
* **One table, two producers, one reader.** A compute shader writes this on WebGPU and this file
|
|
5
|
+
* writes it on WebGL2, and the lit pass fetches it the same way on both. That is the 2026-08-13
|
|
6
|
+
* rule applied literally — the decision is backend-neutral and only the binding is per-backend —
|
|
7
|
+
* and it is why the table is a *texture* rather than a storage buffer, which only one backend has.
|
|
8
|
+
*
|
|
9
|
+
* **The layout is chosen so the two producers can be compared, not merely trusted.** The
|
|
10
|
+
* 2026-08-17 rule says two implementations of one decision drift, and drift invisibly when the
|
|
11
|
+
* constants are identical; a CPU binner and a GPU binner are exactly that. So every choice here
|
|
12
|
+
* that could have gone either way went the way that makes a byte-for-byte comparison possible:
|
|
13
|
+
* fixed slots rather than an appended list, an integer ordering rather than a distance sort, and
|
|
14
|
+
* an overflow rule both can evaluate. `scripts/cluster-check.mjs` is the comparison.
|
|
15
|
+
*/
|
|
16
|
+
/** Tiles across the screen. */
|
|
17
|
+
export declare const CLUSTER_X = 16;
|
|
18
|
+
/** Tiles down the screen. */
|
|
19
|
+
export declare const CLUSTER_Y = 9;
|
|
20
|
+
/** Depth slices, partitioned exponentially. */
|
|
21
|
+
export declare const CLUSTER_Z = 24;
|
|
22
|
+
export declare const CLUSTER_COUNT: number;
|
|
23
|
+
/**
|
|
24
|
+
* Texels a cluster occupies: one for its count, seven holding four light indices each.
|
|
25
|
+
*
|
|
26
|
+
* **Fixed rather than packed, and that is what removes the atomics.** One invocation owns one
|
|
27
|
+
* cluster and writes only its own run, so nothing is appended to a shared list, there is no
|
|
28
|
+
* counter to increment atomically and no compaction pass. That is also what lets the GPU binner
|
|
29
|
+
* write through a *write-only* storage texture, which is all core WGSL gives.
|
|
30
|
+
*/
|
|
31
|
+
export declare const CLUSTER_TEXELS = 5;
|
|
32
|
+
/**
|
|
33
|
+
* How many lights one cluster can hold. Four index texels at four indices each.
|
|
34
|
+
*
|
|
35
|
+
* **Sixteen because that is `MAX_POINT_LIGHTS`, and the equality is the point.** The light loop's
|
|
36
|
+
* bound has to be a constant and there is only one loop, so a larger cap here would raise it for
|
|
37
|
+
* the fixed path too — a scene that never asks for froxels would carry a loop bound of 28 where it
|
|
38
|
+
* carries 16 today, which on the driver that faulted under the full shader is precisely the sort
|
|
39
|
+
* of change nobody would attribute to clustering. Equal bounds mean the fixed path is untouched.
|
|
40
|
+
*
|
|
41
|
+
* **It is not the old limit wearing a new hat.** Sixteen was a budget for the *whole scene*, chosen
|
|
42
|
+
* by distance with a contention band because somebody always had to be last. Sixteen per froxel is
|
|
43
|
+
* a different sixteen in every froxel, out of `MAX_CLUSTERED_LIGHTS` in the scene.
|
|
44
|
+
*/
|
|
45
|
+
export declare const MAX_LIGHTS_PER_CLUSTER: number;
|
|
46
|
+
/**
|
|
47
|
+
* How many lights the clustered path carries at once.
|
|
48
|
+
*
|
|
49
|
+
* **This is the number that replaces `MAX_POINT_LIGHTS`**, and it is not bounded by the same
|
|
50
|
+
* thing: the sixteen is a uniform-array size and an iteration of the widest shader's light loop,
|
|
51
|
+
* while this is a row count in a texture nobody iterates in full. 320 lights is three rows.
|
|
52
|
+
*
|
|
53
|
+
* 320 rather than 256 because the light region has to end on a row boundary — see `TABLE_WIDTH` —
|
|
54
|
+
* and at three texels a light, 320 is the smallest count at or above 256 that does.
|
|
55
|
+
*/
|
|
56
|
+
export declare const MAX_CLUSTERED_LIGHTS = 320;
|
|
57
|
+
/**
|
|
58
|
+
* Texels one light's record occupies: position and radius, colour and emitter size, then the
|
|
59
|
+
* weight and the shadow slot.
|
|
60
|
+
*
|
|
61
|
+
* **The shadow slot is an index into the existing sixteen-wide shadow uniforms, not a layer.**
|
|
62
|
+
* Clustering lifts how many lights *shade* a fragment; it does not lift how many shadow maps
|
|
63
|
+
* exist, and it should not — the pool is twenty-two octahedral layers at 1024, 92.3 MB, and that
|
|
64
|
+
* is a memory budget rather than a shader limit. So a clustered light either holds one of those
|
|
65
|
+
* slots or casts no shadow, exactly as a light does today, and `-1` says which.
|
|
66
|
+
*
|
|
67
|
+
* GLSL ES can index a *uniform array* with a non-constant expression; it is only sampler arrays
|
|
68
|
+
* it cannot. That is what lets a light index the shadow uniforms by a number read from a texture,
|
|
69
|
+
* and it is the same fact the octahedral array texture was built on.
|
|
70
|
+
*/
|
|
71
|
+
export declare const LIGHT_TEXELS = 5;
|
|
72
|
+
/**
|
|
73
|
+
* Where each field of a light's record sits, as an offset in `uint`s from `lightBase`.
|
|
74
|
+
*
|
|
75
|
+
* **Written out rather than left to the two writers to agree on**, because there are two: this
|
|
76
|
+
* file's CPU binner and `clusterBinner.ts`'s WGSL kernel, and the 2026-08-17 rule is that two
|
|
77
|
+
* implementations of one decision drift invisibly when the constants are identical.
|
|
78
|
+
* `scripts/cluster-check.mjs` compares the tables byte for byte and is the backstop; this table is
|
|
79
|
+
* so that the two are written from one statement rather than compared after the fact.
|
|
80
|
+
*
|
|
81
|
+
* Slots 10 to 15 arrived with the fourth texel and the spot fields fill them exactly — direction,
|
|
82
|
+
* two cone cosines, and a profile index — with nothing spare. Slots 10 and 11 were already free
|
|
83
|
+
* inside the third texel and were being written as literal zeros.
|
|
84
|
+
*
|
|
85
|
+
* **A fifth texel arrived 2026-08-27 for the photometric azimuth**, and the reason it is affordable
|
|
86
|
+
* is a measurement rather than a shrug: the light region is `MAX_CLUSTERED_LIGHTS * LIGHT_TEXELS`
|
|
87
|
+
* texels — 20 KB at four — against a froxel region of 270 KB, so a fifth texel is **5 KB of 290,
|
|
88
|
+
* 1.7% of the table**. The obvious reading is that a fifth of four is a quarter, and that is a
|
|
89
|
+
* quarter of the *smaller* half. Slot 19 is spare.
|
|
90
|
+
*
|
|
91
|
+
* **Why the azimuth needs a vector at all**, rather than being derived from the direction: there is
|
|
92
|
+
* no continuous field of unit vectors tangent to a sphere — the hairy ball theorem — so *any*
|
|
93
|
+
* reference derived from the aim alone has a direction in which it flips, and an asymmetric fixture
|
|
94
|
+
* rotating through that direction would snap its pattern round. The two obvious constructions put
|
|
95
|
+
* that singularity where these fixtures actually point: `cross(worldUp, dir)` fails for a light
|
|
96
|
+
* aimed straight down, which is a street light.
|
|
97
|
+
*/
|
|
98
|
+
export declare const LIGHT_RECORD: {
|
|
99
|
+
readonly positionX: 0;
|
|
100
|
+
readonly positionY: 1;
|
|
101
|
+
readonly positionZ: 2;
|
|
102
|
+
readonly radius: 3;
|
|
103
|
+
readonly colorR: 4;
|
|
104
|
+
readonly colorG: 5;
|
|
105
|
+
readonly colorB: 6;
|
|
106
|
+
readonly sourceRadius: 7;
|
|
107
|
+
readonly weight: 8;
|
|
108
|
+
readonly shadowSlot: 9;
|
|
109
|
+
readonly directionX: 10;
|
|
110
|
+
readonly directionY: 11;
|
|
111
|
+
readonly directionZ: 12;
|
|
112
|
+
readonly cosInner: 13;
|
|
113
|
+
readonly cosOuter: 14;
|
|
114
|
+
readonly iesProfile: 15;
|
|
115
|
+
/** The fixture's azimuth zero, in world space. See the note above on why it cannot be derived. */
|
|
116
|
+
readonly iesAxisX: 16;
|
|
117
|
+
readonly iesAxisY: 17;
|
|
118
|
+
readonly iesAxisZ: 18;
|
|
119
|
+
/** A tile of the cookie atlas, or negative for none. Slot 19, the one the fifth texel spared. */
|
|
120
|
+
readonly cookie: 19;
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* The cone a light with no cone has: one that admits every direction, exactly.
|
|
124
|
+
*
|
|
125
|
+
* **`smoothstep(cosOuter, cosInner, dot(-L, dir))` must return exactly 1 for a point light**, and
|
|
126
|
+
* these two values are what make it. Every direction on the sphere has `dot >= -1`, so with the
|
|
127
|
+
* outer edge at −2 and the inner at −1 the argument is always at or past the upper edge and
|
|
128
|
+
* `smoothstep` is 1 — no branch, no special case, and the published scenes stay bit-identical by
|
|
129
|
+
* construction rather than by measurement.
|
|
130
|
+
*
|
|
131
|
+
* **Not −1 and −1**, which is the spelling that suggests itself: `smoothstep(a, a, x)` is undefined
|
|
132
|
+
* when the two edges are equal and a driver may answer either bound.
|
|
133
|
+
*/
|
|
134
|
+
export declare const POINT_LIGHT_COS_INNER = -1;
|
|
135
|
+
export declare const POINT_LIGHT_COS_OUTER = -2;
|
|
136
|
+
/** A light carrying no IES profile. Matches the shader's own test against a negative index. */
|
|
137
|
+
export declare const NO_IES_PROFILE = -1;
|
|
138
|
+
/** The record's `w` when a light holds no shadow slot. */
|
|
139
|
+
export declare const NO_SHADOW_SLOT = -1;
|
|
140
|
+
/** Texels the light records occupy, which is where the cluster runs begin. */
|
|
141
|
+
export declare const LIGHT_REGION_TEXELS: number;
|
|
142
|
+
/**
|
|
143
|
+
* Texels across the table.
|
|
144
|
+
*
|
|
145
|
+
* **320, so that neither region straddles a row.** 320 divides by `CLUSTER_TEXELS`, so a cluster's
|
|
146
|
+
* run of five is 64 clusters to a row and never wraps — a cluster split across two rows would need
|
|
147
|
+
* the shader to carry the wrap, and getting that wrong reads as lights belonging to the froxel
|
|
148
|
+
* next door. It divides `LIGHT_REGION_TEXELS` exactly too, so the cluster region starts at the
|
|
149
|
+
* beginning of a row.
|
|
150
|
+
*/
|
|
151
|
+
export declare const TABLE_WIDTH = 320;
|
|
152
|
+
/** Rows: three of light records and 54 of cluster runs. 292 KB of `RGBA32UI`, allocated once. */
|
|
153
|
+
export declare const TABLE_HEIGHT: number;
|
|
154
|
+
/** The table, as the `Uint32Array` both a texture upload and a readback comparison want. */
|
|
155
|
+
export declare function createClusterTable(): Uint32Array;
|
|
156
|
+
/** The first `uint` of a cluster's run: its count. Its indices follow four to a texel. */
|
|
157
|
+
export declare function clusterBase(cluster: number): number;
|
|
158
|
+
/** The first `uint` of a light's record. */
|
|
159
|
+
export declare function lightBase(light: number): number;
|
|
160
|
+
/**
|
|
161
|
+
* Which depth slice a view-space depth falls in.
|
|
162
|
+
*
|
|
163
|
+
* Exponential rather than linear, which is what every published clustered renderer settled on: a
|
|
164
|
+
* linear partition spends most of its slices where the eye has no depth discrimination left, and
|
|
165
|
+
* puts almost every light in a scene into the first one.
|
|
166
|
+
*
|
|
167
|
+
* Clamped at both ends rather than allowed to run off. A fragment exactly on the far plane is a
|
|
168
|
+
* real fragment and must land in the last slice, not one past it.
|
|
169
|
+
*/
|
|
170
|
+
export declare function sliceOfViewDepth(z: number, near: number, far: number): number;
|
|
171
|
+
/** The view-space depth a slice begins at. */
|
|
172
|
+
export declare function sliceNearDepth(slice: number, near: number, far: number): number;
|
|
173
|
+
/**
|
|
174
|
+
* The axis-aligned bounds of one cluster, in view space, as `[minX, minY, minZ, maxX, maxY, maxZ]`
|
|
175
|
+
* with z a positive depth.
|
|
176
|
+
*
|
|
177
|
+
* **The AABB of the cluster's eight corners, which is larger than the cluster.** A froxel is a
|
|
178
|
+
* truncated pyramid and its bounding box is not tight at the near end; the cost of that is a light
|
|
179
|
+
* occasionally binned into a cluster it only *nearly* touches, which shades a few fragments
|
|
180
|
+
* against a light contributing almost nothing. The alternative — testing the sphere against six
|
|
181
|
+
* planes — is exact, costs four more dot products per light per cluster, and is what to reach for
|
|
182
|
+
* if a profile ever indicts this. It is stated rather than hidden because the looseness is
|
|
183
|
+
* visible in the conformance script's borderline count and would otherwise read as a bug.
|
|
184
|
+
*/
|
|
185
|
+
export declare function clusterViewBounds(i: number, j: number, k: number, near: number, far: number, tanHalfFovY: number, aspect: number, out: Float32Array): void;
|
|
186
|
+
/** The light arrays the binner reads, in the shape `Environment` already carries them. */
|
|
187
|
+
export interface ClusterLightSet {
|
|
188
|
+
readonly count: number;
|
|
189
|
+
/** Three per light, world space. */
|
|
190
|
+
readonly positions: Float32Array;
|
|
191
|
+
/** Three per light. */
|
|
192
|
+
readonly colors: Float32Array;
|
|
193
|
+
/** One per light: the distance at which illumination falls to zero. */
|
|
194
|
+
readonly radii: Float32Array;
|
|
195
|
+
/** One per light: emitter size in metres. See `sphereLobe`. */
|
|
196
|
+
readonly sourceRadii: Float32Array;
|
|
197
|
+
/** One per light: how present it is, which is what makes a light arrive rather than appear. */
|
|
198
|
+
readonly weights: Float32Array;
|
|
199
|
+
/**
|
|
200
|
+
* Three per light: the direction a spot points, normalised. Absent means every light is a point.
|
|
201
|
+
*
|
|
202
|
+
* Optional, so a consumer that has never heard of spot lights passes exactly what it passed
|
|
203
|
+
* before and gets exactly what it got before — the collapse `POINT_LIGHT_COS_OUTER` describes.
|
|
204
|
+
*/
|
|
205
|
+
readonly directions?: Float32Array;
|
|
206
|
+
/** Two per light: the cosine of the inner cone angle, then of the outer. See the constants. */
|
|
207
|
+
readonly coneCos?: Float32Array;
|
|
208
|
+
/** Three per light: a photometric profile's azimuth zero. See `PointLightSet.lightIesAxes`. */
|
|
209
|
+
readonly iesAxes?: Float32Array;
|
|
210
|
+
/** One per light: a tile of the cookie atlas, or negative. See `PointLightSet.lightCookies`. */
|
|
211
|
+
readonly cookies?: Float32Array;
|
|
212
|
+
/** One per light: an index into the IES atlas, or −1. */
|
|
213
|
+
readonly iesProfiles?: Float32Array;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Fill the table with this frame's light assignment, and answer how many lights it carried.
|
|
217
|
+
*
|
|
218
|
+
* **A cluster's list is written in increasing light index, and that is a decision about the gate
|
|
219
|
+
* rather than about the picture.** Sorting by distance was the first design and it is wrong for
|
|
220
|
+
* one reason that only appears at the conformance check: a float comparison cannot be relied on to
|
|
221
|
+
* rank two nearly equidistant lights the same way in JavaScript and in WGSL. Contraction,
|
|
222
|
+
* evaluation order, and a JS number that is a double until something rounds it are each enough to
|
|
223
|
+
* swap them, and the byte comparison would then fail on a scene where both binners were correct.
|
|
224
|
+
* An integer key has no such freedom.
|
|
225
|
+
*
|
|
226
|
+
* **A float decides one thing only: which lights survive an overflow.** A full cluster meeting a
|
|
227
|
+
* nearer light drops its farthest, and the survivors are re-sorted ascending before the next one
|
|
228
|
+
* arrives, so the bytes stay deterministic even though the membership was chosen by a comparison
|
|
229
|
+
* allowed to differ in its last bit. Keeping the first N encountered was the alternative and it
|
|
230
|
+
* can drop the lamp a viewer is standing under in favour of 28 distant ones, which the fidelity
|
|
231
|
+
* bar does not allow.
|
|
232
|
+
*
|
|
233
|
+
* **Positions are stored in world space and binned in view space.** The lit pass computes
|
|
234
|
+
* `uLightPos[i] - vWorldPos` and the clustered arm must reach the same arithmetic from a different
|
|
235
|
+
* place — storing view-space positions would make the two arms differ by a transform, and the
|
|
236
|
+
* zero-pixel gate between them would stop meaning anything.
|
|
237
|
+
*
|
|
238
|
+
* **Measured, because this runs on the main thread on WebGL2 and a cost nobody measured is a cost
|
|
239
|
+
* nobody can defend.** On this machine, lights of radius 8 in a 0.1 to 500 frustum:
|
|
240
|
+
*
|
|
241
|
+
* 16 lights 0.411 ms a frame
|
|
242
|
+
* 64 lights 1.037 ms a frame
|
|
243
|
+
* 256 lights 2.589 ms a frame
|
|
244
|
+
*
|
|
245
|
+
* Sixteen is today's budget and is nearly free. **256 is 16% of a 60 fps frame**, which is
|
|
246
|
+
* affordable and is not nothing — and it is the honest argument for the GPU binner rather than a
|
|
247
|
+
* stopwatch on a shader. The floor is the per-frame clear of the cluster region; the slope is the
|
|
248
|
+
* tile box, which grows with a light's screen area rather than with the light count, so a scene of
|
|
249
|
+
* small lamps costs far less than this and one of vast overlapping radii costs more.
|
|
250
|
+
*
|
|
251
|
+
* **Re-measured after the tile box moved inside the slice loop**, which is what made the two
|
|
252
|
+
* binners agree: 0.386, 0.895 and 2.001 ms before, so correctness cost between 6% and 29%. Worth
|
|
253
|
+
* recording, because the earlier numbers were for a binner that dropped lights.
|
|
254
|
+
*
|
|
255
|
+
* `shadowSlots` is how many of the shadow uniform slots are live this frame, which is what
|
|
256
|
+
* decides whether a light's record names one. See `LIGHT_TEXELS`.
|
|
257
|
+
*
|
|
258
|
+
* Fills a caller-owned table and allocates nothing.
|
|
259
|
+
*/
|
|
260
|
+
export declare function buildLightClusters(lights: ClusterLightSet, view: Float32Array, near: number, far: number, tanHalfFovY: number, aspect: number, table: Uint32Array, shadowSlots: number): number;
|