@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,360 @@
|
|
|
1
|
+
import { hashToUnit } from '../core/rng.ts';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A pool of short-lived electrical arcs — lightning, and anything else that
|
|
6
|
+
* strikes between two points and crackles while it lasts.
|
|
7
|
+
*
|
|
8
|
+
* The simulation half only, exactly like `ParticlePool`: this class holds no GL
|
|
9
|
+
* resources, so it is testable without a context, and the drawing lives in
|
|
10
|
+
* `BoltBatch` where the standing rule says WebGL belongs. What comes out is a
|
|
11
|
+
* flat array of *segment endpoints*, which is the one thing a ribbon of quads
|
|
12
|
+
* needs and the one thing a caller can check.
|
|
13
|
+
*
|
|
14
|
+
* **It advances rather than evaluates, so it is for real-time scenes only.** `update(dt)` steps
|
|
15
|
+
* an internal cursor, which means the same plan stepped by two different sequences of `dt`
|
|
16
|
+
* produces different arcs. A consumer that renders one plan twice, once against a wall clock for
|
|
17
|
+
* a preview and once against a frame index for an export, cannot make the two agree. Reported
|
|
18
|
+
* from outside, alongside the observation that `PlumeRenderer.draw` has the signature that does
|
|
19
|
+
* work: it takes the time to *evaluate at* rather than a step to advance by, so the same second
|
|
20
|
+
* draws the same smoke however the frames were spaced. A stateless variant here is not built.
|
|
21
|
+
*
|
|
22
|
+
* A bolt is a jagged polyline between its two ends, and the jaggedness is
|
|
23
|
+
* **re-drawn while it lives** rather than animated. That is what separates
|
|
24
|
+
* lightning from a wire: real arcs do not bend smoothly, they are replaced, many
|
|
25
|
+
* times a second, by a different path between the same two points. Interpolating
|
|
26
|
+
* node positions produces a wobbling snake, which reads as a rope or a tentacle;
|
|
27
|
+
* re-striking produces the crackle.
|
|
28
|
+
*
|
|
29
|
+
* Displacement is mid-point subdivision, seeded, so a replay strikes the same
|
|
30
|
+
* bolts the run did. Nothing here reads a clock or `Math.random`.
|
|
31
|
+
*/
|
|
32
|
+
export interface BoltPoolOptions {
|
|
33
|
+
/** How many arcs may be alive at once. */
|
|
34
|
+
capacity: number;
|
|
35
|
+
/**
|
|
36
|
+
* Nodes per arc, both ends included. Must be `2^k + 1` so mid-point
|
|
37
|
+
* subdivision lands exactly on it; anything else is rounded up to the next.
|
|
38
|
+
*/
|
|
39
|
+
nodes: number;
|
|
40
|
+
/** Seconds an arc lives. */
|
|
41
|
+
lifeSec: number;
|
|
42
|
+
/** How far a node may wander off the straight line, as a share of the span. */
|
|
43
|
+
jitter: number;
|
|
44
|
+
/** How many times a second a live arc re-draws its path. */
|
|
45
|
+
restrikeHz: number;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/** One arc's worth of geometry, as the caller reads it back. */
|
|
49
|
+
/**
|
|
50
|
+
* The arcs a batch draws, as plain arrays with a live count.
|
|
51
|
+
*
|
|
52
|
+
* **Fillable from outside, and that is the answer to wanting bolts without a pool.** `BoltPool`
|
|
53
|
+
* advances rather than evaluates, so it cannot serve a consumer that renders one plan twice, once
|
|
54
|
+
* against a wall clock and once against a frame index, and expects the same pixels. Nothing here
|
|
55
|
+
* requires the pool: write `from`, `to`, `along`, `fade`, `seed` and `brightness` from any
|
|
56
|
+
* function of a seed and an absolute time, set `count`, and hand it to the batch. That is exactly
|
|
57
|
+
* the route a consumer already took with `ParticleInstances`, and it works for the same reason:
|
|
58
|
+
* the *material* is the valuable half and it is separable from whatever decides where things are.
|
|
59
|
+
*
|
|
60
|
+
* Reported from outside, where the pool's own note that a stateless variant is not built read as
|
|
61
|
+
* "there is no way to do this" rather than "there is no second pool". There is no second pool and
|
|
62
|
+
* none is needed.
|
|
63
|
+
*/
|
|
64
|
+
export interface BoltSegments {
|
|
65
|
+
/** `from` and `to` per segment, three floats each, live segments first. */
|
|
66
|
+
from: Float32Array;
|
|
67
|
+
to: Float32Array;
|
|
68
|
+
/** Per segment: normalised distance along its arc, and the arc's own fade. */
|
|
69
|
+
along: Float32Array;
|
|
70
|
+
fade: Float32Array;
|
|
71
|
+
/** Per segment: the arc's seed, and how bright the caller asked for it. */
|
|
72
|
+
seed: Float32Array;
|
|
73
|
+
brightness: Float32Array;
|
|
74
|
+
/** How many segments of the above are live. */
|
|
75
|
+
count: number;
|
|
76
|
+
capacity: number;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** Round up to the next `2^k + 1`, the node count subdivision lands on exactly. */
|
|
80
|
+
function subdivisionNodes(want: number): number {
|
|
81
|
+
let spans = 1;
|
|
82
|
+
while (spans + 1 < want) spans *= 2;
|
|
83
|
+
return spans + 1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export class BoltPool {
|
|
87
|
+
readonly segments: BoltSegments;
|
|
88
|
+
|
|
89
|
+
private readonly nodeCount: number;
|
|
90
|
+
private readonly segmentsPerBolt: number;
|
|
91
|
+
/** Node positions, `capacity * nodeCount * 3`. */
|
|
92
|
+
private readonly nodes: Float32Array;
|
|
93
|
+
/** Both ends, held so a re-strike draws a new path between the same points. */
|
|
94
|
+
private readonly ends: Float32Array;
|
|
95
|
+
private readonly age: Float32Array;
|
|
96
|
+
/** Per-arc lifetime, so a volley is not a row of identically-timed flashes. */
|
|
97
|
+
private readonly life: Float32Array;
|
|
98
|
+
private readonly seed: Float32Array;
|
|
99
|
+
private readonly brightness: Float32Array;
|
|
100
|
+
/** Seconds until this arc re-draws its path. */
|
|
101
|
+
private readonly restrike: Float32Array;
|
|
102
|
+
private next = 0;
|
|
103
|
+
|
|
104
|
+
constructor(private readonly options: BoltPoolOptions) {
|
|
105
|
+
const { capacity } = options;
|
|
106
|
+
if (!Number.isInteger(capacity) || capacity <= 0) {
|
|
107
|
+
throw new Error('A bolt pool needs a positive integer capacity.');
|
|
108
|
+
}
|
|
109
|
+
if (options.lifeSec <= 0) throw new Error('Bolts need a positive lifetime.');
|
|
110
|
+
if (options.nodes < 3) throw new Error('A bolt needs at least three nodes.');
|
|
111
|
+
this.nodeCount = subdivisionNodes(options.nodes);
|
|
112
|
+
this.segmentsPerBolt = this.nodeCount - 1;
|
|
113
|
+
|
|
114
|
+
const total = capacity * this.segmentsPerBolt;
|
|
115
|
+
this.nodes = new Float32Array(capacity * this.nodeCount * 3);
|
|
116
|
+
this.ends = new Float32Array(capacity * 6);
|
|
117
|
+
this.age = new Float32Array(capacity).fill(Infinity);
|
|
118
|
+
this.life = new Float32Array(capacity).fill(options.lifeSec);
|
|
119
|
+
this.seed = new Float32Array(capacity);
|
|
120
|
+
this.brightness = new Float32Array(capacity);
|
|
121
|
+
this.restrike = new Float32Array(capacity);
|
|
122
|
+
this.segments = {
|
|
123
|
+
from: new Float32Array(total * 3),
|
|
124
|
+
to: new Float32Array(total * 3),
|
|
125
|
+
along: new Float32Array(total),
|
|
126
|
+
fade: new Float32Array(total),
|
|
127
|
+
seed: new Float32Array(total),
|
|
128
|
+
brightness: new Float32Array(total),
|
|
129
|
+
count: 0,
|
|
130
|
+
capacity: total,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** How many arcs are alive. */
|
|
135
|
+
get live(): number {
|
|
136
|
+
let count = 0;
|
|
137
|
+
for (let i = 0; i < this.age.length; i++) {
|
|
138
|
+
if ((this.age[i] as number) < (this.life[i] as number)) count++;
|
|
139
|
+
}
|
|
140
|
+
return count;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Strike an arc between two points.
|
|
145
|
+
*
|
|
146
|
+
* `seed` drives the path instead of `Math.random`, so a caller inside a
|
|
147
|
+
* deterministic system can pass a tick count and get the same lightning twice.
|
|
148
|
+
*/
|
|
149
|
+
strike(
|
|
150
|
+
x0: number,
|
|
151
|
+
y0: number,
|
|
152
|
+
z0: number,
|
|
153
|
+
x1: number,
|
|
154
|
+
y1: number,
|
|
155
|
+
z1: number,
|
|
156
|
+
seed: number,
|
|
157
|
+
brightness = 1,
|
|
158
|
+
/**
|
|
159
|
+
* Multiplier on the pool's lifetime for this arc alone.
|
|
160
|
+
*
|
|
161
|
+
* A volley of arcs that all die on the same frame reads as one object being
|
|
162
|
+
* switched off, which is the most predictable thing a flash can do. Varying it
|
|
163
|
+
* per strike is the cheapest way to make a burst decay like several discharges.
|
|
164
|
+
*/
|
|
165
|
+
lifeScale = 1,
|
|
166
|
+
): void {
|
|
167
|
+
const i = this.next;
|
|
168
|
+
this.next = (this.next + 1) % this.options.capacity;
|
|
169
|
+
const e = i * 6;
|
|
170
|
+
this.ends[e] = x0;
|
|
171
|
+
this.ends[e + 1] = y0;
|
|
172
|
+
this.ends[e + 2] = z0;
|
|
173
|
+
this.ends[e + 3] = x1;
|
|
174
|
+
this.ends[e + 4] = y1;
|
|
175
|
+
this.ends[e + 5] = z1;
|
|
176
|
+
this.age[i] = 0;
|
|
177
|
+
this.life[i] = this.options.lifeSec * lifeScale;
|
|
178
|
+
this.seed[i] = seed;
|
|
179
|
+
this.brightness[i] = brightness;
|
|
180
|
+
this.restrike[i] = 0;
|
|
181
|
+
this.drawPath(i, seed);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Age every arc, re-strike the ones whose path is due, and rebuild the
|
|
186
|
+
* segment arrays.
|
|
187
|
+
*
|
|
188
|
+
* Compacting as it goes, like the particle pool: live segments are written to
|
|
189
|
+
* the front, so a draw submits exactly the live count and a dead arc costs one
|
|
190
|
+
* loop iteration.
|
|
191
|
+
*/
|
|
192
|
+
update(dt: number): void {
|
|
193
|
+
const o = this.options;
|
|
194
|
+
const out = this.segments;
|
|
195
|
+
const restrikeEvery = o.restrikeHz > 0 ? 1 / o.restrikeHz : Infinity;
|
|
196
|
+
let count = 0;
|
|
197
|
+
|
|
198
|
+
for (let i = 0; i < this.age.length; i++) {
|
|
199
|
+
const age = this.age[i] as number;
|
|
200
|
+
const life = this.life[i] as number;
|
|
201
|
+
if (age >= life) continue;
|
|
202
|
+
const next = age + dt;
|
|
203
|
+
if (next >= life) {
|
|
204
|
+
this.age[i] = life;
|
|
205
|
+
continue;
|
|
206
|
+
}
|
|
207
|
+
this.age[i] = next;
|
|
208
|
+
|
|
209
|
+
let due = (this.restrike[i] as number) - dt;
|
|
210
|
+
if (due <= 0) {
|
|
211
|
+
/*
|
|
212
|
+
* A fresh path between the same two ends. The seed advances with the
|
|
213
|
+
* strike count so consecutive paths differ, and it stays a pure function
|
|
214
|
+
* of the arc's own seed and how many times it has been redrawn — nothing
|
|
215
|
+
* a replay cannot reproduce.
|
|
216
|
+
*/
|
|
217
|
+
due += restrikeEvery;
|
|
218
|
+
this.drawPath(i, (this.seed[i] as number) + Math.round(next * o.restrikeHz) * 31.7);
|
|
219
|
+
}
|
|
220
|
+
this.restrike[i] = due;
|
|
221
|
+
|
|
222
|
+
/*
|
|
223
|
+
* Fade is the arc's own envelope: a fast attack to full and a longer decay,
|
|
224
|
+
* because that is the shape of a discharge and a linear fade reads as a
|
|
225
|
+
* light being turned down. Squared on the way out so the tail is short.
|
|
226
|
+
*/
|
|
227
|
+
const t = next / life;
|
|
228
|
+
const fade = t < ATTACK ? t / ATTACK : 1 - ((t - ATTACK) / (1 - ATTACK)) ** 2;
|
|
229
|
+
const base = i * this.nodeCount * 3;
|
|
230
|
+
for (let s = 0; s < this.segmentsPerBolt; s++) {
|
|
231
|
+
const a = base + s * 3;
|
|
232
|
+
const b = a + 3;
|
|
233
|
+
const w = count * 3;
|
|
234
|
+
out.from[w] = this.nodes[a] as number;
|
|
235
|
+
out.from[w + 1] = this.nodes[a + 1] as number;
|
|
236
|
+
out.from[w + 2] = this.nodes[a + 2] as number;
|
|
237
|
+
out.to[w] = this.nodes[b] as number;
|
|
238
|
+
out.to[w + 1] = this.nodes[b + 1] as number;
|
|
239
|
+
out.to[w + 2] = this.nodes[b + 2] as number;
|
|
240
|
+
out.along[count] = (s + 0.5) / this.segmentsPerBolt;
|
|
241
|
+
out.fade[count] = fade;
|
|
242
|
+
out.seed[count] = this.seed[i] as number;
|
|
243
|
+
out.brightness[count] = this.brightness[i] as number;
|
|
244
|
+
count++;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
out.count = count;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** Drop everything, for a respawn or a scene change. */
|
|
251
|
+
clear(): void {
|
|
252
|
+
this.age.fill(Infinity);
|
|
253
|
+
this.segments.count = 0;
|
|
254
|
+
this.next = 0;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Lay one arc's nodes out: the straight line, then mid-point displacement.
|
|
259
|
+
*
|
|
260
|
+
* Displacement is perpendicular to the span and halves with each subdivision,
|
|
261
|
+
* which is what gives an arc detail at every scale instead of one big zigzag —
|
|
262
|
+
* the same construction a fractal terrain uses, in one dimension. The ends
|
|
263
|
+
* never move, because they are where the arc was asked to strike.
|
|
264
|
+
*/
|
|
265
|
+
private drawPath(index: number, seed: number): void {
|
|
266
|
+
/*
|
|
267
|
+
* Integer seed for the mixer. Truncating is deliberate: the caller's seed is a tick
|
|
268
|
+
* count plus strides, so its integer part already carries every bit of the variation
|
|
269
|
+
* and a mixer wants an integer.
|
|
270
|
+
*/
|
|
271
|
+
const intSeed = seed | 0;
|
|
272
|
+
const e = index * 6;
|
|
273
|
+
const x0 = this.ends[e] as number;
|
|
274
|
+
const y0 = this.ends[e + 1] as number;
|
|
275
|
+
const z0 = this.ends[e + 2] as number;
|
|
276
|
+
const x1 = this.ends[e + 3] as number;
|
|
277
|
+
const y1 = this.ends[e + 4] as number;
|
|
278
|
+
const z1 = this.ends[e + 5] as number;
|
|
279
|
+
const base = index * this.nodeCount * 3;
|
|
280
|
+
const last = this.nodeCount - 1;
|
|
281
|
+
|
|
282
|
+
const dx = x1 - x0;
|
|
283
|
+
const dy = y1 - y0;
|
|
284
|
+
const dz = z1 - z0;
|
|
285
|
+
const span = Math.hypot(dx, dy, dz) || 1;
|
|
286
|
+
// Two directions across the span, so displacement is not stuck in a plane.
|
|
287
|
+
const ax = Math.abs(dy) < 0.9 * span ? 0 : 1;
|
|
288
|
+
let px = ax === 0 ? -dz : dy;
|
|
289
|
+
let py = ax === 0 ? 0 : -dx;
|
|
290
|
+
let pz = ax === 0 ? dx : 0;
|
|
291
|
+
let plen = Math.hypot(px, py, pz) || 1;
|
|
292
|
+
px /= plen;
|
|
293
|
+
py /= plen;
|
|
294
|
+
pz /= plen;
|
|
295
|
+
// The third axis of the frame, so the two offsets are independent.
|
|
296
|
+
const qx = (dy / span) * pz - (dz / span) * py;
|
|
297
|
+
const qy = (dz / span) * px - (dx / span) * pz;
|
|
298
|
+
const qz = (dx / span) * py - (dy / span) * px;
|
|
299
|
+
|
|
300
|
+
for (let n = 0; n <= last; n++) {
|
|
301
|
+
const t = n / last;
|
|
302
|
+
const o = base + n * 3;
|
|
303
|
+
this.nodes[o] = x0 + dx * t;
|
|
304
|
+
this.nodes[o + 1] = y0 + dy * t;
|
|
305
|
+
this.nodes[o + 2] = z0 + dz * t;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
/*
|
|
309
|
+
* Roughness and persistence, both drawn from the arc's own seed.
|
|
310
|
+
*
|
|
311
|
+
* Without these every path is the *same shape* differently placed: one fixed jitter
|
|
312
|
+
* and one fixed halving per level give every arc an identical fractal character, and
|
|
313
|
+
* the eye reads character long before it reads position. `jitter` becomes the mean
|
|
314
|
+
* of a range, and how fast the displacement decays per subdivision varies too — a
|
|
315
|
+
* low persistence gives one big lazy kink, a high one gives a dense crackle, and
|
|
316
|
+
* mixing them is what makes a volley look like several unrelated discharges.
|
|
317
|
+
*/
|
|
318
|
+
const roughness = 0.45 + hashToUnit(intSeed + 31337) * 1.5;
|
|
319
|
+
const persistence = 0.36 + hashToUnit(intSeed + 6971) * 0.34;
|
|
320
|
+
const reach = span * this.options.jitter * roughness;
|
|
321
|
+
let stride = last;
|
|
322
|
+
let amplitude = reach;
|
|
323
|
+
while (stride > 1) {
|
|
324
|
+
const half = stride >> 1;
|
|
325
|
+
for (let n = half; n < last; n += stride) {
|
|
326
|
+
const o = base + n * 3;
|
|
327
|
+
const lo = base + (n - half) * 3;
|
|
328
|
+
const hi = base + (n + half) * 3;
|
|
329
|
+
// The mid-point of its two neighbours, displaced across the span.
|
|
330
|
+
const mx = ((this.nodes[lo] as number) + (this.nodes[hi] as number)) * 0.5;
|
|
331
|
+
const my = ((this.nodes[lo + 1] as number) + (this.nodes[hi + 1] as number)) * 0.5;
|
|
332
|
+
const mz = ((this.nodes[lo + 2] as number) + (this.nodes[hi + 2] as number)) * 0.5;
|
|
333
|
+
const u = hashToUnit(intSeed + n * 6151) * 2 - 1;
|
|
334
|
+
const v = hashToUnit(intSeed + n * 7919 + 104729) * 2 - 1;
|
|
335
|
+
this.nodes[o] = mx + (px * u + qx * v) * amplitude;
|
|
336
|
+
this.nodes[o + 1] = my + (py * u + qy * v) * amplitude;
|
|
337
|
+
this.nodes[o + 2] = mz + (pz * u + qz * v) * amplitude;
|
|
338
|
+
}
|
|
339
|
+
stride = half;
|
|
340
|
+
amplitude *= persistence;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* Share of the lifetime spent rising to full brightness.
|
|
347
|
+
*
|
|
348
|
+
* Almost none. A discharge is *already* at full brightness by the time anything can
|
|
349
|
+
* see it — the rise is microseconds — so an attack long enough to perceive reads as a
|
|
350
|
+
* lamp being switched on. What the eye actually reads as lightning is an instant onset
|
|
351
|
+
* and a decay, and this being too slow was part of why the first version looked like
|
|
352
|
+
* drawn lines rather than flashes.
|
|
353
|
+
*/
|
|
354
|
+
const ATTACK = 0.04;
|
|
355
|
+
|
|
356
|
+
/** A hot core and an outer glow, as a caller-facing pair. */
|
|
357
|
+
export interface BoltColors {
|
|
358
|
+
core: Vec3;
|
|
359
|
+
edge: Vec3;
|
|
360
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { withDefaults } from '../core/withDefaults.ts';
|
|
2
|
+
import { clamp, damp } from '../math/scalar.ts';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The arm between a camera and what it is looking at, and how fast it may change
|
|
6
|
+
* length.
|
|
7
|
+
*
|
|
8
|
+
* Every third-person rig needs the same thing: shorten against geometry so the
|
|
9
|
+
* camera is never inside a wall, and do it *gradually*, because the raw answer
|
|
10
|
+
* from a collision query is a step function. This was written twice — once
|
|
11
|
+
* correctly in the replay camera, after it was reported as juddering and jumpy,
|
|
12
|
+
* and once not at all in the gameplay camera, which applied the query's
|
|
13
|
+
* fraction directly and popped by up to 4 m whenever a railing swept across it.
|
|
14
|
+
* One implementation, so a third rig cannot get it wrong again.
|
|
15
|
+
*
|
|
16
|
+
* Stateful and long-lived, hence a class: one per rig, mutated in place, nothing
|
|
17
|
+
* allocated per frame.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* How fast the boom changes length: quick to come in, slow to go back out.
|
|
22
|
+
*
|
|
23
|
+
* Asymmetric because the two directions have different failure modes. Coming in
|
|
24
|
+
* late means a frame or two looking through a post, which reads as a lens flare;
|
|
25
|
+
* going out early means the camera lunges away from the subject the instant an
|
|
26
|
+
* obstruction clears, which reads as the camera being kicked. So retraction is
|
|
27
|
+
* roughly twice as eager as extension, and neither is instant.
|
|
28
|
+
*/
|
|
29
|
+
const RETRACT_LAMBDA = 14;
|
|
30
|
+
const EXTEND_LAMBDA = 6;
|
|
31
|
+
/**
|
|
32
|
+
* And a ceiling on how fast it may travel, in metres per second.
|
|
33
|
+
*
|
|
34
|
+
* Damping alone is not enough, because damping is proportional: a 12 m boom asked
|
|
35
|
+
* to retract to its minimum still moves 2.2 m on the first frame, which is the
|
|
36
|
+
* same pop an octave quieter. A speed limit makes the guarantee absolute and
|
|
37
|
+
* states it in the unit that matters — the camera is an arm on a crane, and a
|
|
38
|
+
* crane has a top speed.
|
|
39
|
+
*
|
|
40
|
+
* The cost is honest and worth naming: a boom that genuinely needs its full
|
|
41
|
+
* length taken away, because the subject has gone behind a wall, spends about a
|
|
42
|
+
* second getting there and can be inside that wall while it does. That is the
|
|
43
|
+
* right trade. The obstruction is almost always a lamp post or a railing sweeping
|
|
44
|
+
* across the line for a few frames — where a speed limit removes the artefact
|
|
45
|
+
* completely — and a moment of seeing through a post is a lens artefact, where a
|
|
46
|
+
* 5 m lurch is a broken camera.
|
|
47
|
+
*/
|
|
48
|
+
const RETRACT_SPEED = 12;
|
|
49
|
+
const EXTEND_SPEED = 5;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The four numbers above, as something a caller can set.
|
|
53
|
+
*
|
|
54
|
+
* **The defaults are written for an arm of several metres and they do not scale down.** The speed
|
|
55
|
+
* ceilings are stated in metres a second, which is the unit that matters for a crane and the wrong
|
|
56
|
+
* one for an arm shorter than a hand: on a 170 mm boom neither ceiling ever binds, only the damping
|
|
57
|
+
* acts, and the trade the ceilings were chosen for is not the trade being made. Reported from
|
|
58
|
+
* outside on a 46 mm subject — a lip sweeping across a 170 mm arm left the eye **71 mm inside the
|
|
59
|
+
* wall on the first tick and inside it at all for 78 ticks of 120, 1.30 seconds** — which on a
|
|
60
|
+
* subject that small renders the inside of the masonry: a black screen with the game running
|
|
61
|
+
* perfectly behind it.
|
|
62
|
+
*
|
|
63
|
+
* **`Infinity` is the immediate answer and needs no special case.** `damp` is
|
|
64
|
+
* `lerp(a, b, 1 - exp(-lambda dt))`, so an infinite lambda returns the target exactly, and an
|
|
65
|
+
* infinite speed leaves the clamp unbounded. A rig that must come out of a wall on the tick it
|
|
66
|
+
* touches one passes `retractLambda: Infinity, retractSpeed: Infinity` and keeps the easing on the
|
|
67
|
+
* way back out, which is the half that stops the picture pumping.
|
|
68
|
+
*/
|
|
69
|
+
export interface BoomTiming {
|
|
70
|
+
/** How eagerly the arm shortens against an obstruction. Higher is quicker. */
|
|
71
|
+
readonly retractLambda: number;
|
|
72
|
+
/** And how eagerly it lengthens once the obstruction clears. Lower is gentler. */
|
|
73
|
+
readonly extendLambda: number;
|
|
74
|
+
/** A ceiling on how fast it may shorten, in metres a second. */
|
|
75
|
+
readonly retractSpeed: number;
|
|
76
|
+
/** And on how fast it may lengthen. */
|
|
77
|
+
readonly extendSpeed: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** What every rig got before the timings could be set, and what one that says nothing still gets. */
|
|
81
|
+
export const DEFAULT_BOOM_TIMING: BoomTiming = {
|
|
82
|
+
retractLambda: RETRACT_LAMBDA,
|
|
83
|
+
extendLambda: EXTEND_LAMBDA,
|
|
84
|
+
retractSpeed: RETRACT_SPEED,
|
|
85
|
+
extendSpeed: EXTEND_SPEED,
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export class Boom {
|
|
89
|
+
/** How much of the arm is currently extended, 0–1. */
|
|
90
|
+
fraction = 1;
|
|
91
|
+
|
|
92
|
+
private readonly timing: BoomTiming;
|
|
93
|
+
|
|
94
|
+
constructor(timing: Partial<BoomTiming> = {}) {
|
|
95
|
+
this.timing = withDefaults(DEFAULT_BOOM_TIMING, timing);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Place the arm outright, for a cut or a teleport. */
|
|
99
|
+
reset(fraction: number): void {
|
|
100
|
+
this.fraction = fraction;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Move toward `clear` — the fraction of the arm that is unobstructed, already
|
|
105
|
+
* clamped by the caller to whatever minimum its framing needs.
|
|
106
|
+
*
|
|
107
|
+
* `lengthM` is the arm's full length, because the speed limit is stated in
|
|
108
|
+
* metres and a fraction covers more ground on a longer arm.
|
|
109
|
+
*/
|
|
110
|
+
step(clear: number, lengthM: number, dt: number): number {
|
|
111
|
+
const coming = clear < this.fraction;
|
|
112
|
+
const timing = this.timing;
|
|
113
|
+
const eased = damp(
|
|
114
|
+
this.fraction,
|
|
115
|
+
clear,
|
|
116
|
+
coming ? timing.retractLambda : timing.extendLambda,
|
|
117
|
+
dt,
|
|
118
|
+
);
|
|
119
|
+
const step = ((coming ? timing.retractSpeed : timing.extendSpeed) * dt) / (lengthM || 1);
|
|
120
|
+
this.fraction = clamp(eased, this.fraction - step, this.fraction + step);
|
|
121
|
+
return this.fraction;
|
|
122
|
+
}
|
|
123
|
+
}
|