@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,259 @@
|
|
|
1
|
+
import { hashToUnit } from '../core/rng.js';
|
|
2
|
+
/** Round up to the next `2^k + 1`, the node count subdivision lands on exactly. */
|
|
3
|
+
function subdivisionNodes(want) {
|
|
4
|
+
let spans = 1;
|
|
5
|
+
while (spans + 1 < want)
|
|
6
|
+
spans *= 2;
|
|
7
|
+
return spans + 1;
|
|
8
|
+
}
|
|
9
|
+
export class BoltPool {
|
|
10
|
+
options;
|
|
11
|
+
segments;
|
|
12
|
+
nodeCount;
|
|
13
|
+
segmentsPerBolt;
|
|
14
|
+
/** Node positions, `capacity * nodeCount * 3`. */
|
|
15
|
+
nodes;
|
|
16
|
+
/** Both ends, held so a re-strike draws a new path between the same points. */
|
|
17
|
+
ends;
|
|
18
|
+
age;
|
|
19
|
+
/** Per-arc lifetime, so a volley is not a row of identically-timed flashes. */
|
|
20
|
+
life;
|
|
21
|
+
seed;
|
|
22
|
+
brightness;
|
|
23
|
+
/** Seconds until this arc re-draws its path. */
|
|
24
|
+
restrike;
|
|
25
|
+
next = 0;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = options;
|
|
28
|
+
const { capacity } = options;
|
|
29
|
+
if (!Number.isInteger(capacity) || capacity <= 0) {
|
|
30
|
+
throw new Error('A bolt pool needs a positive integer capacity.');
|
|
31
|
+
}
|
|
32
|
+
if (options.lifeSec <= 0)
|
|
33
|
+
throw new Error('Bolts need a positive lifetime.');
|
|
34
|
+
if (options.nodes < 3)
|
|
35
|
+
throw new Error('A bolt needs at least three nodes.');
|
|
36
|
+
this.nodeCount = subdivisionNodes(options.nodes);
|
|
37
|
+
this.segmentsPerBolt = this.nodeCount - 1;
|
|
38
|
+
const total = capacity * this.segmentsPerBolt;
|
|
39
|
+
this.nodes = new Float32Array(capacity * this.nodeCount * 3);
|
|
40
|
+
this.ends = new Float32Array(capacity * 6);
|
|
41
|
+
this.age = new Float32Array(capacity).fill(Infinity);
|
|
42
|
+
this.life = new Float32Array(capacity).fill(options.lifeSec);
|
|
43
|
+
this.seed = new Float32Array(capacity);
|
|
44
|
+
this.brightness = new Float32Array(capacity);
|
|
45
|
+
this.restrike = new Float32Array(capacity);
|
|
46
|
+
this.segments = {
|
|
47
|
+
from: new Float32Array(total * 3),
|
|
48
|
+
to: new Float32Array(total * 3),
|
|
49
|
+
along: new Float32Array(total),
|
|
50
|
+
fade: new Float32Array(total),
|
|
51
|
+
seed: new Float32Array(total),
|
|
52
|
+
brightness: new Float32Array(total),
|
|
53
|
+
count: 0,
|
|
54
|
+
capacity: total,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** How many arcs are alive. */
|
|
58
|
+
get live() {
|
|
59
|
+
let count = 0;
|
|
60
|
+
for (let i = 0; i < this.age.length; i++) {
|
|
61
|
+
if (this.age[i] < this.life[i])
|
|
62
|
+
count++;
|
|
63
|
+
}
|
|
64
|
+
return count;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Strike an arc between two points.
|
|
68
|
+
*
|
|
69
|
+
* `seed` drives the path instead of `Math.random`, so a caller inside a
|
|
70
|
+
* deterministic system can pass a tick count and get the same lightning twice.
|
|
71
|
+
*/
|
|
72
|
+
strike(x0, y0, z0, x1, y1, z1, seed, brightness = 1,
|
|
73
|
+
/**
|
|
74
|
+
* Multiplier on the pool's lifetime for this arc alone.
|
|
75
|
+
*
|
|
76
|
+
* A volley of arcs that all die on the same frame reads as one object being
|
|
77
|
+
* switched off, which is the most predictable thing a flash can do. Varying it
|
|
78
|
+
* per strike is the cheapest way to make a burst decay like several discharges.
|
|
79
|
+
*/
|
|
80
|
+
lifeScale = 1) {
|
|
81
|
+
const i = this.next;
|
|
82
|
+
this.next = (this.next + 1) % this.options.capacity;
|
|
83
|
+
const e = i * 6;
|
|
84
|
+
this.ends[e] = x0;
|
|
85
|
+
this.ends[e + 1] = y0;
|
|
86
|
+
this.ends[e + 2] = z0;
|
|
87
|
+
this.ends[e + 3] = x1;
|
|
88
|
+
this.ends[e + 4] = y1;
|
|
89
|
+
this.ends[e + 5] = z1;
|
|
90
|
+
this.age[i] = 0;
|
|
91
|
+
this.life[i] = this.options.lifeSec * lifeScale;
|
|
92
|
+
this.seed[i] = seed;
|
|
93
|
+
this.brightness[i] = brightness;
|
|
94
|
+
this.restrike[i] = 0;
|
|
95
|
+
this.drawPath(i, seed);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Age every arc, re-strike the ones whose path is due, and rebuild the
|
|
99
|
+
* segment arrays.
|
|
100
|
+
*
|
|
101
|
+
* Compacting as it goes, like the particle pool: live segments are written to
|
|
102
|
+
* the front, so a draw submits exactly the live count and a dead arc costs one
|
|
103
|
+
* loop iteration.
|
|
104
|
+
*/
|
|
105
|
+
update(dt) {
|
|
106
|
+
const o = this.options;
|
|
107
|
+
const out = this.segments;
|
|
108
|
+
const restrikeEvery = o.restrikeHz > 0 ? 1 / o.restrikeHz : Infinity;
|
|
109
|
+
let count = 0;
|
|
110
|
+
for (let i = 0; i < this.age.length; i++) {
|
|
111
|
+
const age = this.age[i];
|
|
112
|
+
const life = this.life[i];
|
|
113
|
+
if (age >= life)
|
|
114
|
+
continue;
|
|
115
|
+
const next = age + dt;
|
|
116
|
+
if (next >= life) {
|
|
117
|
+
this.age[i] = life;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
this.age[i] = next;
|
|
121
|
+
let due = this.restrike[i] - dt;
|
|
122
|
+
if (due <= 0) {
|
|
123
|
+
/*
|
|
124
|
+
* A fresh path between the same two ends. The seed advances with the
|
|
125
|
+
* strike count so consecutive paths differ, and it stays a pure function
|
|
126
|
+
* of the arc's own seed and how many times it has been redrawn — nothing
|
|
127
|
+
* a replay cannot reproduce.
|
|
128
|
+
*/
|
|
129
|
+
due += restrikeEvery;
|
|
130
|
+
this.drawPath(i, this.seed[i] + Math.round(next * o.restrikeHz) * 31.7);
|
|
131
|
+
}
|
|
132
|
+
this.restrike[i] = due;
|
|
133
|
+
/*
|
|
134
|
+
* Fade is the arc's own envelope: a fast attack to full and a longer decay,
|
|
135
|
+
* because that is the shape of a discharge and a linear fade reads as a
|
|
136
|
+
* light being turned down. Squared on the way out so the tail is short.
|
|
137
|
+
*/
|
|
138
|
+
const t = next / life;
|
|
139
|
+
const fade = t < ATTACK ? t / ATTACK : 1 - ((t - ATTACK) / (1 - ATTACK)) ** 2;
|
|
140
|
+
const base = i * this.nodeCount * 3;
|
|
141
|
+
for (let s = 0; s < this.segmentsPerBolt; s++) {
|
|
142
|
+
const a = base + s * 3;
|
|
143
|
+
const b = a + 3;
|
|
144
|
+
const w = count * 3;
|
|
145
|
+
out.from[w] = this.nodes[a];
|
|
146
|
+
out.from[w + 1] = this.nodes[a + 1];
|
|
147
|
+
out.from[w + 2] = this.nodes[a + 2];
|
|
148
|
+
out.to[w] = this.nodes[b];
|
|
149
|
+
out.to[w + 1] = this.nodes[b + 1];
|
|
150
|
+
out.to[w + 2] = this.nodes[b + 2];
|
|
151
|
+
out.along[count] = (s + 0.5) / this.segmentsPerBolt;
|
|
152
|
+
out.fade[count] = fade;
|
|
153
|
+
out.seed[count] = this.seed[i];
|
|
154
|
+
out.brightness[count] = this.brightness[i];
|
|
155
|
+
count++;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
out.count = count;
|
|
159
|
+
}
|
|
160
|
+
/** Drop everything, for a respawn or a scene change. */
|
|
161
|
+
clear() {
|
|
162
|
+
this.age.fill(Infinity);
|
|
163
|
+
this.segments.count = 0;
|
|
164
|
+
this.next = 0;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Lay one arc's nodes out: the straight line, then mid-point displacement.
|
|
168
|
+
*
|
|
169
|
+
* Displacement is perpendicular to the span and halves with each subdivision,
|
|
170
|
+
* which is what gives an arc detail at every scale instead of one big zigzag —
|
|
171
|
+
* the same construction a fractal terrain uses, in one dimension. The ends
|
|
172
|
+
* never move, because they are where the arc was asked to strike.
|
|
173
|
+
*/
|
|
174
|
+
drawPath(index, seed) {
|
|
175
|
+
/*
|
|
176
|
+
* Integer seed for the mixer. Truncating is deliberate: the caller's seed is a tick
|
|
177
|
+
* count plus strides, so its integer part already carries every bit of the variation
|
|
178
|
+
* and a mixer wants an integer.
|
|
179
|
+
*/
|
|
180
|
+
const intSeed = seed | 0;
|
|
181
|
+
const e = index * 6;
|
|
182
|
+
const x0 = this.ends[e];
|
|
183
|
+
const y0 = this.ends[e + 1];
|
|
184
|
+
const z0 = this.ends[e + 2];
|
|
185
|
+
const x1 = this.ends[e + 3];
|
|
186
|
+
const y1 = this.ends[e + 4];
|
|
187
|
+
const z1 = this.ends[e + 5];
|
|
188
|
+
const base = index * this.nodeCount * 3;
|
|
189
|
+
const last = this.nodeCount - 1;
|
|
190
|
+
const dx = x1 - x0;
|
|
191
|
+
const dy = y1 - y0;
|
|
192
|
+
const dz = z1 - z0;
|
|
193
|
+
const span = Math.hypot(dx, dy, dz) || 1;
|
|
194
|
+
// Two directions across the span, so displacement is not stuck in a plane.
|
|
195
|
+
const ax = Math.abs(dy) < 0.9 * span ? 0 : 1;
|
|
196
|
+
let px = ax === 0 ? -dz : dy;
|
|
197
|
+
let py = ax === 0 ? 0 : -dx;
|
|
198
|
+
let pz = ax === 0 ? dx : 0;
|
|
199
|
+
let plen = Math.hypot(px, py, pz) || 1;
|
|
200
|
+
px /= plen;
|
|
201
|
+
py /= plen;
|
|
202
|
+
pz /= plen;
|
|
203
|
+
// The third axis of the frame, so the two offsets are independent.
|
|
204
|
+
const qx = (dy / span) * pz - (dz / span) * py;
|
|
205
|
+
const qy = (dz / span) * px - (dx / span) * pz;
|
|
206
|
+
const qz = (dx / span) * py - (dy / span) * px;
|
|
207
|
+
for (let n = 0; n <= last; n++) {
|
|
208
|
+
const t = n / last;
|
|
209
|
+
const o = base + n * 3;
|
|
210
|
+
this.nodes[o] = x0 + dx * t;
|
|
211
|
+
this.nodes[o + 1] = y0 + dy * t;
|
|
212
|
+
this.nodes[o + 2] = z0 + dz * t;
|
|
213
|
+
}
|
|
214
|
+
/*
|
|
215
|
+
* Roughness and persistence, both drawn from the arc's own seed.
|
|
216
|
+
*
|
|
217
|
+
* Without these every path is the *same shape* differently placed: one fixed jitter
|
|
218
|
+
* and one fixed halving per level give every arc an identical fractal character, and
|
|
219
|
+
* the eye reads character long before it reads position. `jitter` becomes the mean
|
|
220
|
+
* of a range, and how fast the displacement decays per subdivision varies too — a
|
|
221
|
+
* low persistence gives one big lazy kink, a high one gives a dense crackle, and
|
|
222
|
+
* mixing them is what makes a volley look like several unrelated discharges.
|
|
223
|
+
*/
|
|
224
|
+
const roughness = 0.45 + hashToUnit(intSeed + 31337) * 1.5;
|
|
225
|
+
const persistence = 0.36 + hashToUnit(intSeed + 6971) * 0.34;
|
|
226
|
+
const reach = span * this.options.jitter * roughness;
|
|
227
|
+
let stride = last;
|
|
228
|
+
let amplitude = reach;
|
|
229
|
+
while (stride > 1) {
|
|
230
|
+
const half = stride >> 1;
|
|
231
|
+
for (let n = half; n < last; n += stride) {
|
|
232
|
+
const o = base + n * 3;
|
|
233
|
+
const lo = base + (n - half) * 3;
|
|
234
|
+
const hi = base + (n + half) * 3;
|
|
235
|
+
// The mid-point of its two neighbours, displaced across the span.
|
|
236
|
+
const mx = (this.nodes[lo] + this.nodes[hi]) * 0.5;
|
|
237
|
+
const my = (this.nodes[lo + 1] + this.nodes[hi + 1]) * 0.5;
|
|
238
|
+
const mz = (this.nodes[lo + 2] + this.nodes[hi + 2]) * 0.5;
|
|
239
|
+
const u = hashToUnit(intSeed + n * 6151) * 2 - 1;
|
|
240
|
+
const v = hashToUnit(intSeed + n * 7919 + 104729) * 2 - 1;
|
|
241
|
+
this.nodes[o] = mx + (px * u + qx * v) * amplitude;
|
|
242
|
+
this.nodes[o + 1] = my + (py * u + qy * v) * amplitude;
|
|
243
|
+
this.nodes[o + 2] = mz + (pz * u + qz * v) * amplitude;
|
|
244
|
+
}
|
|
245
|
+
stride = half;
|
|
246
|
+
amplitude *= persistence;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Share of the lifetime spent rising to full brightness.
|
|
252
|
+
*
|
|
253
|
+
* Almost none. A discharge is *already* at full brightness by the time anything can
|
|
254
|
+
* see it — the rise is microseconds — so an attack long enough to perceive reads as a
|
|
255
|
+
* lamp being switched on. What the eye actually reads as lightning is an instant onset
|
|
256
|
+
* and a decay, and this being too slow was part of why the first version looked like
|
|
257
|
+
* drawn lines rather than flashes.
|
|
258
|
+
*/
|
|
259
|
+
const ATTACK = 0.04;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The four numbers above, as something a caller can set.
|
|
3
|
+
*
|
|
4
|
+
* **The defaults are written for an arm of several metres and they do not scale down.** The speed
|
|
5
|
+
* ceilings are stated in metres a second, which is the unit that matters for a crane and the wrong
|
|
6
|
+
* one for an arm shorter than a hand: on a 170 mm boom neither ceiling ever binds, only the damping
|
|
7
|
+
* acts, and the trade the ceilings were chosen for is not the trade being made. Reported from
|
|
8
|
+
* outside on a 46 mm subject — a lip sweeping across a 170 mm arm left the eye **71 mm inside the
|
|
9
|
+
* wall on the first tick and inside it at all for 78 ticks of 120, 1.30 seconds** — which on a
|
|
10
|
+
* subject that small renders the inside of the masonry: a black screen with the game running
|
|
11
|
+
* perfectly behind it.
|
|
12
|
+
*
|
|
13
|
+
* **`Infinity` is the immediate answer and needs no special case.** `damp` is
|
|
14
|
+
* `lerp(a, b, 1 - exp(-lambda dt))`, so an infinite lambda returns the target exactly, and an
|
|
15
|
+
* infinite speed leaves the clamp unbounded. A rig that must come out of a wall on the tick it
|
|
16
|
+
* touches one passes `retractLambda: Infinity, retractSpeed: Infinity` and keeps the easing on the
|
|
17
|
+
* way back out, which is the half that stops the picture pumping.
|
|
18
|
+
*/
|
|
19
|
+
export interface BoomTiming {
|
|
20
|
+
/** How eagerly the arm shortens against an obstruction. Higher is quicker. */
|
|
21
|
+
readonly retractLambda: number;
|
|
22
|
+
/** And how eagerly it lengthens once the obstruction clears. Lower is gentler. */
|
|
23
|
+
readonly extendLambda: number;
|
|
24
|
+
/** A ceiling on how fast it may shorten, in metres a second. */
|
|
25
|
+
readonly retractSpeed: number;
|
|
26
|
+
/** And on how fast it may lengthen. */
|
|
27
|
+
readonly extendSpeed: number;
|
|
28
|
+
}
|
|
29
|
+
/** What every rig got before the timings could be set, and what one that says nothing still gets. */
|
|
30
|
+
export declare const DEFAULT_BOOM_TIMING: BoomTiming;
|
|
31
|
+
export declare class Boom {
|
|
32
|
+
/** How much of the arm is currently extended, 0–1. */
|
|
33
|
+
fraction: number;
|
|
34
|
+
private readonly timing;
|
|
35
|
+
constructor(timing?: Partial<BoomTiming>);
|
|
36
|
+
/** Place the arm outright, for a cut or a teleport. */
|
|
37
|
+
reset(fraction: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Move toward `clear` — the fraction of the arm that is unobstructed, already
|
|
40
|
+
* clamped by the caller to whatever minimum its framing needs.
|
|
41
|
+
*
|
|
42
|
+
* `lengthM` is the arm's full length, because the speed limit is stated in
|
|
43
|
+
* metres and a fraction covers more ground on a longer arm.
|
|
44
|
+
*/
|
|
45
|
+
step(clear: number, lengthM: number, dt: number): number;
|
|
46
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { withDefaults } from '../core/withDefaults.js';
|
|
2
|
+
import { clamp, damp } from '../math/scalar.js';
|
|
3
|
+
/**
|
|
4
|
+
* The arm between a camera and what it is looking at, and how fast it may change
|
|
5
|
+
* length.
|
|
6
|
+
*
|
|
7
|
+
* Every third-person rig needs the same thing: shorten against geometry so the
|
|
8
|
+
* camera is never inside a wall, and do it *gradually*, because the raw answer
|
|
9
|
+
* from a collision query is a step function. This was written twice — once
|
|
10
|
+
* correctly in the replay camera, after it was reported as juddering and jumpy,
|
|
11
|
+
* and once not at all in the gameplay camera, which applied the query's
|
|
12
|
+
* fraction directly and popped by up to 4 m whenever a railing swept across it.
|
|
13
|
+
* One implementation, so a third rig cannot get it wrong again.
|
|
14
|
+
*
|
|
15
|
+
* Stateful and long-lived, hence a class: one per rig, mutated in place, nothing
|
|
16
|
+
* allocated per frame.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* How fast the boom changes length: quick to come in, slow to go back out.
|
|
20
|
+
*
|
|
21
|
+
* Asymmetric because the two directions have different failure modes. Coming in
|
|
22
|
+
* late means a frame or two looking through a post, which reads as a lens flare;
|
|
23
|
+
* going out early means the camera lunges away from the subject the instant an
|
|
24
|
+
* obstruction clears, which reads as the camera being kicked. So retraction is
|
|
25
|
+
* roughly twice as eager as extension, and neither is instant.
|
|
26
|
+
*/
|
|
27
|
+
const RETRACT_LAMBDA = 14;
|
|
28
|
+
const EXTEND_LAMBDA = 6;
|
|
29
|
+
/**
|
|
30
|
+
* And a ceiling on how fast it may travel, in metres per second.
|
|
31
|
+
*
|
|
32
|
+
* Damping alone is not enough, because damping is proportional: a 12 m boom asked
|
|
33
|
+
* to retract to its minimum still moves 2.2 m on the first frame, which is the
|
|
34
|
+
* same pop an octave quieter. A speed limit makes the guarantee absolute and
|
|
35
|
+
* states it in the unit that matters — the camera is an arm on a crane, and a
|
|
36
|
+
* crane has a top speed.
|
|
37
|
+
*
|
|
38
|
+
* The cost is honest and worth naming: a boom that genuinely needs its full
|
|
39
|
+
* length taken away, because the subject has gone behind a wall, spends about a
|
|
40
|
+
* second getting there and can be inside that wall while it does. That is the
|
|
41
|
+
* right trade. The obstruction is almost always a lamp post or a railing sweeping
|
|
42
|
+
* across the line for a few frames — where a speed limit removes the artefact
|
|
43
|
+
* completely — and a moment of seeing through a post is a lens artefact, where a
|
|
44
|
+
* 5 m lurch is a broken camera.
|
|
45
|
+
*/
|
|
46
|
+
const RETRACT_SPEED = 12;
|
|
47
|
+
const EXTEND_SPEED = 5;
|
|
48
|
+
/** What every rig got before the timings could be set, and what one that says nothing still gets. */
|
|
49
|
+
export const DEFAULT_BOOM_TIMING = {
|
|
50
|
+
retractLambda: RETRACT_LAMBDA,
|
|
51
|
+
extendLambda: EXTEND_LAMBDA,
|
|
52
|
+
retractSpeed: RETRACT_SPEED,
|
|
53
|
+
extendSpeed: EXTEND_SPEED,
|
|
54
|
+
};
|
|
55
|
+
export class Boom {
|
|
56
|
+
/** How much of the arm is currently extended, 0–1. */
|
|
57
|
+
fraction = 1;
|
|
58
|
+
timing;
|
|
59
|
+
constructor(timing = {}) {
|
|
60
|
+
this.timing = withDefaults(DEFAULT_BOOM_TIMING, timing);
|
|
61
|
+
}
|
|
62
|
+
/** Place the arm outright, for a cut or a teleport. */
|
|
63
|
+
reset(fraction) {
|
|
64
|
+
this.fraction = fraction;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Move toward `clear` — the fraction of the arm that is unobstructed, already
|
|
68
|
+
* clamped by the caller to whatever minimum its framing needs.
|
|
69
|
+
*
|
|
70
|
+
* `lengthM` is the arm's full length, because the speed limit is stated in
|
|
71
|
+
* metres and a fraction covers more ground on a longer arm.
|
|
72
|
+
*/
|
|
73
|
+
step(clear, lengthM, dt) {
|
|
74
|
+
const coming = clear < this.fraction;
|
|
75
|
+
const timing = this.timing;
|
|
76
|
+
const eased = damp(this.fraction, clear, coming ? timing.retractLambda : timing.extendLambda, dt);
|
|
77
|
+
const step = ((coming ? timing.retractSpeed : timing.extendSpeed) * dt) / (lengthM || 1);
|
|
78
|
+
this.fraction = clamp(eased, this.fraction - step, this.fraction + step);
|
|
79
|
+
return this.fraction;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { mat4, vec3 } from 'gl-matrix';
|
|
2
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
3
|
+
/**
|
|
4
|
+
* Perspective camera. Yaw/pitch convention: yaw 0 looks toward -Z, positive
|
|
5
|
+
* yaw turns right (+X); positive pitch looks up.
|
|
6
|
+
*/
|
|
7
|
+
export declare class Camera {
|
|
8
|
+
readonly position: vec3;
|
|
9
|
+
yaw: number;
|
|
10
|
+
pitch: number;
|
|
11
|
+
fovYDeg: number;
|
|
12
|
+
/**
|
|
13
|
+
* Near plane, metres — and the single biggest control this engine has over
|
|
14
|
+
* z-fighting.
|
|
15
|
+
*
|
|
16
|
+
* A conventional depth buffer spends its precision hyperbolically: the smallest
|
|
17
|
+
* separation it can resolve at distance `z` is about `z² / (near · 2^bits)`. At
|
|
18
|
+
* the old 0.1 that is a quarter of a millimetre at twenty metres, **1.5 mm at
|
|
19
|
+
* fifty, and 6 mm at a hundred** — so any two surfaces closer together than that
|
|
20
|
+
* are decided by float rounding, and which one a pixel shows changes as the
|
|
21
|
+
* camera moves — shown most clearly by a matched pair of screenshots of one seam
|
|
22
|
+
* from two angles, right in one and wrong in the other.
|
|
23
|
+
*
|
|
24
|
+
* Precision scales linearly with this number, so four times the near plane is
|
|
25
|
+
* four times the resolution at every distance, and it costs nothing. Safe at 0.4
|
|
26
|
+
* because a third-person boom never brings the eye closer than `BOOM_MIN` (0.9 m)
|
|
27
|
+
* to the character and keeps its own radius clear of surfaces — there is nothing
|
|
28
|
+
* legitimately within 40 cm of this camera to clip.
|
|
29
|
+
*
|
|
30
|
+
* It is a mitigation and not the cure. A 0.2 mm seam, which the daily generator
|
|
31
|
+
* does produce where two decks meet, still fights past about forty metres. The
|
|
32
|
+
* cure is a reversed-Z float depth buffer; see `docs/bugs/`.
|
|
33
|
+
*/
|
|
34
|
+
near: number;
|
|
35
|
+
far: number;
|
|
36
|
+
readonly forward: vec3;
|
|
37
|
+
readonly view: mat4;
|
|
38
|
+
readonly projection: mat4;
|
|
39
|
+
readonly viewProjection: mat4;
|
|
40
|
+
readonly invViewProjection: mat4;
|
|
41
|
+
/**
|
|
42
|
+
* Roll about the view direction, radians. Positive drops the right side.
|
|
43
|
+
* Render-only: nothing about the camera reaches the simulation.
|
|
44
|
+
*/
|
|
45
|
+
roll: number;
|
|
46
|
+
/**
|
|
47
|
+
* Point the camera at a world position from wherever it currently stands.
|
|
48
|
+
*
|
|
49
|
+
* Added because three callers had each derived this by hand and one of them got it
|
|
50
|
+
* wrong: a preview rig placed itself on a circle around its subject and computed a yaw
|
|
51
|
+
* that was exactly π out, so it rendered the inside of an empty box and the figure it was
|
|
52
|
+
* built to show was behind it. The trig is four lines and the sign conventions are this
|
|
53
|
+
* class's own — `yaw 0` looks toward −Z, positive yaw turns toward +X — so leaving every
|
|
54
|
+
* caller to rediscover them is leaving them a trap.
|
|
55
|
+
*
|
|
56
|
+
* Sets `yaw` and `pitch` only. Roll is a separate decision (it is a lean, not an aim),
|
|
57
|
+
* and `updateMatrices` still has to be called afterwards.
|
|
58
|
+
*/
|
|
59
|
+
lookAt(x: number, y: number, z: number): void;
|
|
60
|
+
updateMatrices(aspect: number): void;
|
|
61
|
+
/**
|
|
62
|
+
* Take a view and a projection that were computed somewhere else.
|
|
63
|
+
*
|
|
64
|
+
* **Because an XR eye cannot be described by this class, and this file already says why.**
|
|
65
|
+
* `updateMatrices` derives the view from yaw and pitch and the projection from
|
|
66
|
+
* `mat4.perspective`, and the note above it records the corollary: *only a centred crop of a
|
|
67
|
+
* symmetric frustum is itself a symmetric frustum; an off-centre one is sheared, which
|
|
68
|
+
* `perspective` cannot produce.* A headset's eye projection is exactly that shear, off-axis by
|
|
69
|
+
* the distance from the pupil to the display's centre, and its view comes from a pose no pair of
|
|
70
|
+
* Euler angles was ever asked to describe.
|
|
71
|
+
*
|
|
72
|
+
* So a supplied view is adopted rather than configured. Everything downstream reads `view`,
|
|
73
|
+
* `projection`, `viewProjection` and `invViewProjection`, so frustum culling, picking, the sky
|
|
74
|
+
* and every pass that samples the inverse keep working with nothing changed.
|
|
75
|
+
*
|
|
76
|
+
* **`position` and `forward` are decomposed back out**, and that is not a convenience. A view
|
|
77
|
+
* matrix is the inverse of the camera's world transform, so the eye is `-Rᵀt` and the direction
|
|
78
|
+
* is the third row negated. A consumer reading `camera.position` to place a listener or to score
|
|
79
|
+
* a level of detail would otherwise get whatever the last non-XR frame left there, which is a
|
|
80
|
+
* defect that looks like an audio bug rather than a camera one.
|
|
81
|
+
*
|
|
82
|
+
* **`yaw`, `pitch` and `roll` are deliberately left alone**, and reading them after this is
|
|
83
|
+
* reading the last angles somebody set. A supplied rotation may be one no Euler triple
|
|
84
|
+
* describes without a convention this class does not own, and inventing one here would put a
|
|
85
|
+
* second answer to "where is the camera looking" beside `forward`, which is derived from the
|
|
86
|
+
* matrix and is always right.
|
|
87
|
+
*
|
|
88
|
+
* `near` and `far` are not read and not written: the supplied projection carries its own depth
|
|
89
|
+
* range, which the runtime chose.
|
|
90
|
+
*/
|
|
91
|
+
adoptView(view: ReadonlyMat4, projection: ReadonlyMat4): void;
|
|
92
|
+
/**
|
|
93
|
+
* Where a world point lands on the canvas, in CSS pixels, or false if it is behind.
|
|
94
|
+
*
|
|
95
|
+
* For attaching DOM to a place in the world: a focus ring on a card, a label on a
|
|
96
|
+
* marker. The caller passes the CSS box rather than the drawing buffer, because the
|
|
97
|
+
* answer is for the document and the document does not know the device pixel ratio.
|
|
98
|
+
*
|
|
99
|
+
* **False rather than a coordinate when w <= 1e-6.** The perspective divide by a negative
|
|
100
|
+
* w mirrors the point through the origin, so a thing behind the viewer reports a
|
|
101
|
+
* perfectly plausible position on the opposite side of the screen. A caller that
|
|
102
|
+
* placed an affordance there would be putting it on the wrong object, which is worse
|
|
103
|
+
* than putting it nowhere.
|
|
104
|
+
*/
|
|
105
|
+
project(out: Float32Array | number[], x: number, y: number, z: number, cssWidth: number, cssHeight: number): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* The ray a pixel looks along, in world space.
|
|
108
|
+
*
|
|
109
|
+
* Two points are unprojected rather than one, because a direction cannot be recovered
|
|
110
|
+
* from a single unprojected point without knowing where the eye is in the same space —
|
|
111
|
+
* and for an orthographic camera there is no single eye at all. Unprojecting both ends
|
|
112
|
+
* of the depth range and subtracting is correct for either projection, which is why it
|
|
113
|
+
* is written this way for a camera that is currently only perspective.
|
|
114
|
+
*
|
|
115
|
+
* `cssX`/`cssY` are in the canvas's CSS box, so a caller hands over
|
|
116
|
+
* `event.clientX - rect.left` and nothing has to know the device pixel ratio.
|
|
117
|
+
*/
|
|
118
|
+
rayThrough(origin: Float32Array, direction: Float32Array, cssX: number, cssY: number, cssWidth: number, cssHeight: number): void;
|
|
119
|
+
}
|