@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,99 @@
|
|
|
1
|
+
import type { LineSegments } from './linePoints.ts';
|
|
2
|
+
import type { GroundSurface } from '../physics/ribbonSurface.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Falling rain, as streaks the line batch already draws.
|
|
5
|
+
*
|
|
6
|
+
* **A drop is a segment, not a billboard, and that is the whole design.** The particle pool draws
|
|
7
|
+
* round sprites with a spin, which is right for smoke and grit and wrong for water: rain in a
|
|
8
|
+
* photograph is a *streak*, because the drop moved while the shutter was open, and a round sprite
|
|
9
|
+
* stretched by a shader would need a new attribute and a new branch in both backends' particle
|
|
10
|
+
* programs. A segment from where a drop was to where it is says the same thing with geometry that
|
|
11
|
+
* has shipped for a year — and it gets the angle for free, since the streak runs along the
|
|
12
|
+
* velocity and the velocity is where the wind already is.
|
|
13
|
+
*
|
|
14
|
+
* **What was missing was never the mechanism.** `ParticlePool` and the line batch both ship; what
|
|
15
|
+
* did not exist was anything that made falling water out of either, so a consumer whose weather
|
|
16
|
+
* already wetted surfaces and raised their reflectivity had three of their four acceptance
|
|
17
|
+
* criteria and no water anybody could see fall.
|
|
18
|
+
*
|
|
19
|
+
* **Drops do not fall through roofs**, which is the requirement that usually turns a rain effect
|
|
20
|
+
* into a real one, and the query for it was already here: `GroundSurface.sampleBand` answers "is
|
|
21
|
+
* there a face in this column between these two heights", which is exactly "is something over my
|
|
22
|
+
* head". A drop under cover is not drawn. The same surface's `sample` is the floor it lands on, so
|
|
23
|
+
* rain stops at the ground rather than continuing to the bottom of the slab.
|
|
24
|
+
*
|
|
25
|
+
* **Nothing here reads a clock or a random number.** A drop's place in the slab is a hash of its
|
|
26
|
+
* index and how many times it has fallen, so the same viewer at the same instant sees the same
|
|
27
|
+
* rain — the rule the dust field in `lightVolume.ts` is under, for the same reason.
|
|
28
|
+
*/
|
|
29
|
+
export interface RainFieldOptions {
|
|
30
|
+
/** How many drops are in the air at once. */
|
|
31
|
+
count: number;
|
|
32
|
+
/** Half-width of the box of rain kept around the viewer, metres. */
|
|
33
|
+
radiusM: number;
|
|
34
|
+
/** How far above the viewer a drop starts, metres. Also the ceiling a roof is looked for under. */
|
|
35
|
+
heightM: number;
|
|
36
|
+
/**
|
|
37
|
+
* Fall speed. Rain reaches about 9 m/s, drizzle is nearer 2, and hail comes down at about 14.
|
|
38
|
+
*
|
|
39
|
+
* The starting value only: `RainField.speedMps` moves it while the field is running, which is
|
|
40
|
+
* what a weather state changing under a player needs.
|
|
41
|
+
*/
|
|
42
|
+
speedMps?: number;
|
|
43
|
+
/**
|
|
44
|
+
* How much of a drop's own motion the streak shows, in seconds.
|
|
45
|
+
*
|
|
46
|
+
* It is a shutter time and behaves like one: 0.02 is a crisp dash, 0.1 is the smeared rain of a
|
|
47
|
+
* long exposure. It does not affect where a drop is, only how long it looks.
|
|
48
|
+
*/
|
|
49
|
+
streakSec?: number;
|
|
50
|
+
/** The ground drops land on, and the roofs they do not fall through. */
|
|
51
|
+
ground?: GroundSurface;
|
|
52
|
+
}
|
|
53
|
+
export declare class RainField {
|
|
54
|
+
readonly segments: LineSegments;
|
|
55
|
+
private readonly x;
|
|
56
|
+
private readonly y;
|
|
57
|
+
private readonly z;
|
|
58
|
+
/** How many times each drop has been respawned, which is the other half of its hash. */
|
|
59
|
+
private readonly cycle;
|
|
60
|
+
private readonly hit;
|
|
61
|
+
private readonly count;
|
|
62
|
+
private readonly radiusM;
|
|
63
|
+
private readonly heightM;
|
|
64
|
+
/** Fall speed, metres a second. Rain is about 9, drizzle 2, hail 14. */
|
|
65
|
+
speedMps: number;
|
|
66
|
+
/**
|
|
67
|
+
* The shutter time the streak shows, seconds: 0.02 is a crisp dash, 0.1 a long exposure.
|
|
68
|
+
*
|
|
69
|
+
* It changes how long a drop *looks* and never where it is, so a downpour can smear without
|
|
70
|
+
* falling any faster.
|
|
71
|
+
*/
|
|
72
|
+
streakSec: number;
|
|
73
|
+
private readonly ground;
|
|
74
|
+
/** Drops not drawn this update because something was over them. */
|
|
75
|
+
private sheltered;
|
|
76
|
+
/**
|
|
77
|
+
* Whether the first update has spread the drops through the slab.
|
|
78
|
+
*
|
|
79
|
+
* **Without it the first second of rain is a curtain.** A drop respawns near the ceiling, which
|
|
80
|
+
* is right for one that has just landed and wrong for all of them at once: a field built and
|
|
81
|
+
* updated would hold every drop in the top few metres, and what arrives is a single sheet
|
|
82
|
+
* descending rather than rain. So the first update spreads them through the whole height, and
|
|
83
|
+
* every one after that respawns them at the top, where a drop that has just fallen belongs. It
|
|
84
|
+
* cannot be done in the constructor because the slab is placed around a viewer this does not
|
|
85
|
+
* know about until it is asked to draw.
|
|
86
|
+
*/
|
|
87
|
+
private primed;
|
|
88
|
+
constructor(options: RainFieldOptions);
|
|
89
|
+
/** Drops that were over the viewer's head and under something else, last update. */
|
|
90
|
+
get shelteredCount(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Fall for `dt`, then rebuild the streaks around a viewer.
|
|
93
|
+
*
|
|
94
|
+
* `windX` and `windZ` are metres per second sideways, and the same numbers the rest of the scene
|
|
95
|
+
* is answering to: rain leaning one way while the smoke beside it leans another is the failure
|
|
96
|
+
* this parameter exists to prevent, and it is why the wind is passed in rather than owned here.
|
|
97
|
+
*/
|
|
98
|
+
update(dt: number, viewerX: number, viewerY: number, viewerZ: number, windX?: number, windZ?: number): void;
|
|
99
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { createLineSegments } from './linePoints.js';
|
|
2
|
+
import { coveredAbove } from '../physics/heightSurface.js';
|
|
3
|
+
import { createSurfaceHit } from '../physics/ribbonSurface.js';
|
|
4
|
+
export class RainField {
|
|
5
|
+
segments;
|
|
6
|
+
x;
|
|
7
|
+
y;
|
|
8
|
+
z;
|
|
9
|
+
/** How many times each drop has been respawned, which is the other half of its hash. */
|
|
10
|
+
cycle;
|
|
11
|
+
hit = createSurfaceHit();
|
|
12
|
+
count;
|
|
13
|
+
radiusM;
|
|
14
|
+
heightM;
|
|
15
|
+
/*
|
|
16
|
+
* The two numbers a weather state moves, and they are public for a measured reason.
|
|
17
|
+
*
|
|
18
|
+
* **Both were `private readonly` until 2026-08-28**, and the report that ended it named the case
|
|
19
|
+
* a constructor argument cannot serve: weather changes while a game runs. A consumer with a
|
|
20
|
+
* hailstorm on one of its days had a field built at rain's nine metres a second and no way to
|
|
21
|
+
* move it, so hail — which falls at about fourteen — was expressed as a wider, denser rain and
|
|
22
|
+
* read as heavy rain.
|
|
23
|
+
*
|
|
24
|
+
* Plain fields rather than accessors because there is nothing to validate against and nothing to
|
|
25
|
+
* invalidate: no array is sized by either, nothing caches a value derived from one, and both are
|
|
26
|
+
* read fresh inside `update`. A write between updates costs an assignment.
|
|
27
|
+
*
|
|
28
|
+
* **What they give up** is that neither is checked, so a speed of zero hangs the rain in the air
|
|
29
|
+
* and a negative one is *no* rain rather than rain rising — a drop that never reaches the floor
|
|
30
|
+
* is never respawned. Both are visible in one frame, which is why a throw would be the worse
|
|
31
|
+
* trade: this is a per-frame setter, and the engine does not throw in a frame loop. **What would
|
|
32
|
+
* make it wrong** is either number gaining a consequence outside `update`.
|
|
33
|
+
*/
|
|
34
|
+
/** Fall speed, metres a second. Rain is about 9, drizzle 2, hail 14. */
|
|
35
|
+
speedMps;
|
|
36
|
+
/**
|
|
37
|
+
* The shutter time the streak shows, seconds: 0.02 is a crisp dash, 0.1 a long exposure.
|
|
38
|
+
*
|
|
39
|
+
* It changes how long a drop *looks* and never where it is, so a downpour can smear without
|
|
40
|
+
* falling any faster.
|
|
41
|
+
*/
|
|
42
|
+
streakSec;
|
|
43
|
+
ground;
|
|
44
|
+
/** Drops not drawn this update because something was over them. */
|
|
45
|
+
sheltered = 0;
|
|
46
|
+
/**
|
|
47
|
+
* Whether the first update has spread the drops through the slab.
|
|
48
|
+
*
|
|
49
|
+
* **Without it the first second of rain is a curtain.** A drop respawns near the ceiling, which
|
|
50
|
+
* is right for one that has just landed and wrong for all of them at once: a field built and
|
|
51
|
+
* updated would hold every drop in the top few metres, and what arrives is a single sheet
|
|
52
|
+
* descending rather than rain. So the first update spreads them through the whole height, and
|
|
53
|
+
* every one after that respawns them at the top, where a drop that has just fallen belongs. It
|
|
54
|
+
* cannot be done in the constructor because the slab is placed around a viewer this does not
|
|
55
|
+
* know about until it is asked to draw.
|
|
56
|
+
*/
|
|
57
|
+
primed = false;
|
|
58
|
+
constructor(options) {
|
|
59
|
+
if (!(options.count > 0))
|
|
60
|
+
throw new Error(`RainField: count must be positive, got ${options.count}`);
|
|
61
|
+
if (!(options.radiusM > 0))
|
|
62
|
+
throw new Error(`RainField: radiusM must be positive, got ${options.radiusM}`);
|
|
63
|
+
if (!(options.heightM > 0))
|
|
64
|
+
throw new Error(`RainField: heightM must be positive, got ${options.heightM}`);
|
|
65
|
+
this.count = options.count;
|
|
66
|
+
this.radiusM = options.radiusM;
|
|
67
|
+
this.heightM = options.heightM;
|
|
68
|
+
this.speedMps = options.speedMps ?? 9;
|
|
69
|
+
this.streakSec = options.streakSec ?? 0.04;
|
|
70
|
+
this.ground = options.ground ?? null;
|
|
71
|
+
this.segments = createLineSegments(options.count);
|
|
72
|
+
this.x = new Float32Array(options.count);
|
|
73
|
+
this.y = new Float32Array(options.count);
|
|
74
|
+
this.z = new Float32Array(options.count);
|
|
75
|
+
this.cycle = new Uint32Array(options.count);
|
|
76
|
+
for (let i = 0; i < options.count; i++)
|
|
77
|
+
this.cycle[i] = i;
|
|
78
|
+
}
|
|
79
|
+
/** Drops that were over the viewer's head and under something else, last update. */
|
|
80
|
+
get shelteredCount() {
|
|
81
|
+
return this.sheltered;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Fall for `dt`, then rebuild the streaks around a viewer.
|
|
85
|
+
*
|
|
86
|
+
* `windX` and `windZ` are metres per second sideways, and the same numbers the rest of the scene
|
|
87
|
+
* is answering to: rain leaning one way while the smoke beside it leans another is the failure
|
|
88
|
+
* this parameter exists to prevent, and it is why the wind is passed in rather than owned here.
|
|
89
|
+
*/
|
|
90
|
+
update(dt, viewerX, viewerY, viewerZ, windX = 0, windZ = 0) {
|
|
91
|
+
const span = this.radiusM * 2;
|
|
92
|
+
const top = viewerY + this.heightM;
|
|
93
|
+
this.segments.count = 0;
|
|
94
|
+
this.sheltered = 0;
|
|
95
|
+
for (let i = 0; i < this.count; i++) {
|
|
96
|
+
let dropY = (this.y[i] ?? 0) - this.speedMps * dt;
|
|
97
|
+
let dropX = (this.x[i] ?? 0) + windX * dt;
|
|
98
|
+
let dropZ = (this.z[i] ?? 0) + windZ * dt;
|
|
99
|
+
/*
|
|
100
|
+
* A drop that has left the slab comes back at the top in a new column, and a drop that never
|
|
101
|
+
* had a position starts the same way — which is what makes construction free of a spawn loop.
|
|
102
|
+
* The floor is the surface where there is one, so rain stops at the ground rather than
|
|
103
|
+
* falling to the bottom of a box nobody can see.
|
|
104
|
+
*/
|
|
105
|
+
let floor = viewerY - this.heightM;
|
|
106
|
+
if (this.ground !== null && this.ground.sample(dropX, dropZ, this.hit, dropY)) {
|
|
107
|
+
floor = this.hit.y;
|
|
108
|
+
}
|
|
109
|
+
const outside = dropY <= floor ||
|
|
110
|
+
Math.abs(dropX - viewerX) > this.radiusM ||
|
|
111
|
+
Math.abs(dropZ - viewerZ) > this.radiusM;
|
|
112
|
+
if (outside || !this.primed) {
|
|
113
|
+
this.cycle[i] = ((this.cycle[i] ?? 0) + this.count) >>> 0;
|
|
114
|
+
const c = this.cycle[i] ?? 0;
|
|
115
|
+
dropX = viewerX - this.radiusM + hash(i, c) * span;
|
|
116
|
+
dropZ = viewerZ - this.radiusM + hash(i, c + 1) * span;
|
|
117
|
+
/*
|
|
118
|
+
* On the first update, anywhere between the floor and the ceiling: rain that is already
|
|
119
|
+
* falling when you look up. Afterwards, near the ceiling but not exactly at it, so drops
|
|
120
|
+
* that wrapped on the same frame do not descend in step.
|
|
121
|
+
*/
|
|
122
|
+
dropY = this.primed
|
|
123
|
+
? top - hash(i, c + 2) * this.speedMps * 0.5
|
|
124
|
+
: floor + hash(i, c + 2) * (top - floor);
|
|
125
|
+
}
|
|
126
|
+
this.x[i] = dropX;
|
|
127
|
+
this.y[i] = dropY;
|
|
128
|
+
this.z[i] = dropZ;
|
|
129
|
+
/*
|
|
130
|
+
* Under cover: anything solid in this column between the drop and the ceiling is a roof, and
|
|
131
|
+
* a drop below a roof was never rained on. It keeps falling — it is simply not drawn, which
|
|
132
|
+
* costs one query and means a viewer stepping into a doorway sees the rain stop over them
|
|
133
|
+
* rather than through them.
|
|
134
|
+
*
|
|
135
|
+
* **A hole in the roof rains, and nothing here arranges that.** `coveredAbove` asks whether
|
|
136
|
+
* the surface has a face in the column, so a gap between two pads, a stretch of `holes` in a
|
|
137
|
+
* ribbon, or the edge of a bounded field are all open sky already — cut once, in the
|
|
138
|
+
* geometry, rather than described a second time here where the two could disagree.
|
|
139
|
+
*/
|
|
140
|
+
if (this.ground !== null && coveredAbove(this.ground, dropX, dropZ, dropY, top, this.hit)) {
|
|
141
|
+
this.sheltered++;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
const at = this.segments.count;
|
|
145
|
+
this.segments.from[at * 3] = dropX;
|
|
146
|
+
this.segments.from[at * 3 + 1] = dropY;
|
|
147
|
+
this.segments.from[at * 3 + 2] = dropZ;
|
|
148
|
+
/* Where it was a shutter-time ago, which is the streak: down by its fall and back along the
|
|
149
|
+
wind, so a gust leans every drop at the same angle without anything trigonometric. */
|
|
150
|
+
this.segments.to[at * 3] = dropX - windX * this.streakSec;
|
|
151
|
+
this.segments.to[at * 3 + 1] = dropY + this.speedMps * this.streakSec;
|
|
152
|
+
this.segments.to[at * 3 + 2] = dropZ - windZ * this.streakSec;
|
|
153
|
+
this.segments.count = at + 1;
|
|
154
|
+
}
|
|
155
|
+
this.primed = true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* A number in [0, 1) from two integers, with no state and no clock.
|
|
160
|
+
*
|
|
161
|
+
* The same construction the particle pool hashes a spin with. It is not a good generator and does
|
|
162
|
+
* not need to be: what it has to avoid is neighbouring drops sharing a column, and a sine hash
|
|
163
|
+
* decorrelates adjacent integers well enough that a thousand of them look like rain.
|
|
164
|
+
*/
|
|
165
|
+
function hash(a, b) {
|
|
166
|
+
const value = Math.sin(a * 12.9898 + b * 78.233) * 43758.5453;
|
|
167
|
+
return value - Math.floor(value);
|
|
168
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/** A cubemap of the scene from one point, for surfaces that mirror the room they stand in. */
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
import { Camera } from './camera.ts';
|
|
4
|
+
/**
|
|
5
|
+
* What a bake is for, and specifically whether it also replaces the scene's diffuse ambient.
|
|
6
|
+
*
|
|
7
|
+
* **The two halves of a probe were one decision until 2026-09-03, and nothing could ask for the
|
|
8
|
+
* first alone.** A bake fills a cubemap that reflective surfaces sample, and it then reads that
|
|
9
|
+
* cubemap back, projects it onto spherical harmonics and raises `uEnvIrradianceEnabled` — from
|
|
10
|
+
* which frame on **every diffuse surface in the world takes its ambient from the projection
|
|
11
|
+
* instead of from the values the consumer wrote into `Environment`**. A consumer who wanted a car
|
|
12
|
+
* and a puddle to mirror the village got, as well, the whole scene changing what lights it, once,
|
|
13
|
+
* at whatever moment the bake landed.
|
|
14
|
+
*
|
|
15
|
+
* That is a defensible default — a room's own light is usually better than a gradient — but it was
|
|
16
|
+
* not a *choice*, and it correlates with nothing a consumer can see. The one it was reported from
|
|
17
|
+
* gates its bake on a streamer being idle, so the substitution arrived minutes into a drive, and
|
|
18
|
+
* it was filed four times over two days as four different bugs.
|
|
19
|
+
*
|
|
20
|
+
* `irradiance: false` declines the second half. The reflection is unaffected; the ambient stays
|
|
21
|
+
* whatever the consumer set. It also **stops paying for it** — the readback and the projection are
|
|
22
|
+
* the expensive part of a bake, and a caller that does not want the result does not wait for it.
|
|
23
|
+
*
|
|
24
|
+
* **It declines rather than undoes.** A bake that declines leaves an earlier projection in place,
|
|
25
|
+
* because "do not compute this" is not "discard what is there". What a consumer gets by passing it
|
|
26
|
+
* on *every* bake is the guarantee they were asking for: their ambient is never substituted.
|
|
27
|
+
*/
|
|
28
|
+
export interface ProbeBakeOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Whether this bake also projects the room's diffuse light and lights the scene by it.
|
|
31
|
+
*
|
|
32
|
+
* Defaults to **true**, which is what every bake did before this existed, so a caller that says
|
|
33
|
+
* nothing gets the frame it already had.
|
|
34
|
+
*/
|
|
35
|
+
readonly irradiance?: boolean;
|
|
36
|
+
}
|
|
37
|
+
export declare class ReflectionProbe {
|
|
38
|
+
/**
|
|
39
|
+
* The captured cube, box-filtered, which the convolution reads and the projection reads.
|
|
40
|
+
*
|
|
41
|
+
* **Not what the lit pass samples any more.** A box filter averages a square of texels and a
|
|
42
|
+
* GGX lobe is not square, so sampling this chain by roughness was an approximation whose error
|
|
43
|
+
* was largest exactly where a surface looks most interesting. It stays because filtered
|
|
44
|
+
* importance sampling needs a chain to pick a level from, and because `readFaces` projects
|
|
45
|
+
* *this* onto spherical harmonics — an irradiance integral over a lobe-convolved cube would be
|
|
46
|
+
* a convolution of a convolution.
|
|
47
|
+
*/
|
|
48
|
+
readonly texture: WebGLTexture;
|
|
49
|
+
/**
|
|
50
|
+
* The prefiltered cube: one GGX-convolved level per roughness, and what `uEnvironment` binds.
|
|
51
|
+
*
|
|
52
|
+
* **A second texture rather than this one rewritten in place**, and it costs one cube of
|
|
53
|
+
* memory. What it buys is worth more than that here: WebGL2's feedback-loop check is per
|
|
54
|
+
* texture object, so rendering into a level of the cube a sampler is holding is the hazard the
|
|
55
|
+
* depth peel already pays for elsewhere, and with two objects it cannot arise. It is also what
|
|
56
|
+
* stops a level being convolved from a level that was already convolved, which applies the lobe
|
|
57
|
+
* twice and compounds up the chain.
|
|
58
|
+
*
|
|
59
|
+
* **What would make it wrong** is a probe large enough for a second cube to be the memory
|
|
60
|
+
* decision; at 128 with a chain that is about a megabyte at half float.
|
|
61
|
+
*/
|
|
62
|
+
readonly prefiltered: WebGLTexture;
|
|
63
|
+
/** The camera the caller draws each face with. Reused, so a bake allocates nothing. */
|
|
64
|
+
private readonly camera;
|
|
65
|
+
private readonly framebuffer;
|
|
66
|
+
/**
|
|
67
|
+
* The convolution's own framebuffer, with no depth attached.
|
|
68
|
+
*
|
|
69
|
+
* The bake's framebuffer carries a full-size depth renderbuffer, and an attachment whose size
|
|
70
|
+
* does not match the colour one makes the framebuffer *incomplete* — so reusing it above level
|
|
71
|
+
* zero would fail at the first mip rather than at the last. A convolution has nothing to sort
|
|
72
|
+
* against and needs no depth at all.
|
|
73
|
+
*/
|
|
74
|
+
private readonly prefilterFramebuffer;
|
|
75
|
+
private readonly depth;
|
|
76
|
+
/** Face width in texels. Public because the convolution's solid-angle term needs it. */
|
|
77
|
+
readonly size: number;
|
|
78
|
+
/**
|
|
79
|
+
* Whether the cube holds radiance above white, or clamps at it.
|
|
80
|
+
*
|
|
81
|
+
* False on a part without `EXT_color_buffer_float`, and on any caller that did not ask for an
|
|
82
|
+
* HDR scene — where the room the probe photographs was itself clamped before it got here, so a
|
|
83
|
+
* float cube would carry the same crushed values at twice the bandwidth.
|
|
84
|
+
*/
|
|
85
|
+
private readonly floatColor;
|
|
86
|
+
/**
|
|
87
|
+
* Scratch for the byte path of `readFaces`, allocated on first use and reused after.
|
|
88
|
+
*
|
|
89
|
+
* Null rather than sized at construction, because a probe that is never read back — which is
|
|
90
|
+
* every probe on a scene that bakes one and never asks for irradiance — should not carry a
|
|
91
|
+
* megabyte for it.
|
|
92
|
+
*/
|
|
93
|
+
private readBytes;
|
|
94
|
+
/** Scratch for the byte path of `upload`, on the same terms as `readBytes`. */
|
|
95
|
+
private uploadBytes;
|
|
96
|
+
/**
|
|
97
|
+
* Whether anything has ever been rendered into this.
|
|
98
|
+
*
|
|
99
|
+
* The shader must not sample a cubemap nobody has filled: what is in it is whatever the
|
|
100
|
+
* driver left, and a car mirroring uninitialised memory is worse than a car mirroring a
|
|
101
|
+
* gradient. So this gates the uniform rather than the allocation.
|
|
102
|
+
*/
|
|
103
|
+
private baked;
|
|
104
|
+
/**
|
|
105
|
+
* Set once if the allocation is refused, and never cleared.
|
|
106
|
+
*
|
|
107
|
+
* A reflection is an improvement to an appearance rather than a requirement. The scene still
|
|
108
|
+
* renders without one and `flat.ts` still has the sky-and-ground gradient it used before this
|
|
109
|
+
* existed, so a device that cannot afford six faces loses the room in the paint and keeps
|
|
110
|
+
* everything else.
|
|
111
|
+
*/
|
|
112
|
+
private unusable;
|
|
113
|
+
constructor(gl: WebGL2RenderingContext, size: number, wantsRange?: boolean);
|
|
114
|
+
/**
|
|
115
|
+
* Fill the captured cube from six faces a caller supplies, instead of photographing a room.
|
|
116
|
+
*
|
|
117
|
+
* **The same cube, so everything downstream is the same code.** A loaded environment and a baked
|
|
118
|
+
* one differ only in where the six faces came from; the box chain, the convolution and the
|
|
119
|
+
* spherical-harmonic projection all read this texture either way. That is what keeps a loaded sky
|
|
120
|
+
* from being a second lighting path with its own bugs.
|
|
121
|
+
*
|
|
122
|
+
* **A non-float cube clips rather than tone-maps**, and that is deliberate. The cube stores
|
|
123
|
+
* radiance, and a curve applied here would be a viewing transform baked into stored light — the
|
|
124
|
+
* mistake `bakeReflectionProbe` documents at length on the other side. A part without
|
|
125
|
+
* `EXT_color_buffer_float` gets a clipped environment and a metal that cannot reflect brighter
|
|
126
|
+
* than white, which is the honest degradation and is what `floatColor` already means everywhere
|
|
127
|
+
* else in this file.
|
|
128
|
+
*/
|
|
129
|
+
upload(gl: WebGL2RenderingContext, faces: readonly Float32Array[]): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Linear floats to bytes, clipped at white, for a part with no renderable float cube.
|
|
132
|
+
*
|
|
133
|
+
* Allocated on first use and reused, like `readBytes` above and for the same reason: a probe that
|
|
134
|
+
* is only ever float should not carry a megabyte for a path it never takes.
|
|
135
|
+
*/
|
|
136
|
+
private clipToBytes;
|
|
137
|
+
/**
|
|
138
|
+
* Convolve the captured chain into the prefiltered one, once per bake.
|
|
139
|
+
*
|
|
140
|
+
* **The caller draws, exactly as it does for a face.** This owns the target — which cube, which
|
|
141
|
+
* face, which level, and the viewport that level wants — and `convolve` owns the program, the
|
|
142
|
+
* uniforms and the triangle, which is the same split `bake` makes with `drawFace` and for the
|
|
143
|
+
* same reason: a probe has no business knowing what a shader is.
|
|
144
|
+
*
|
|
145
|
+
* `roughness` is handed over rather than recomputed by the caller, so the level-to-roughness
|
|
146
|
+
* relation lives in exactly one place. `prefilterEnvMap.ts` is that place, and the lit pass's
|
|
147
|
+
* own level selection is the same relation read the other way.
|
|
148
|
+
*/
|
|
149
|
+
prefilter(gl: WebGL2RenderingContext, convolve: (face: number, level: number, roughness: number) => void): void;
|
|
150
|
+
/** Whether the shader may sample this. False until a bake has finished. */
|
|
151
|
+
get ready(): boolean;
|
|
152
|
+
/** How many mip levels the roughness blur has to work with. */
|
|
153
|
+
get maxLod(): number;
|
|
154
|
+
/**
|
|
155
|
+
* Render the six faces from `origin`, once.
|
|
156
|
+
*
|
|
157
|
+
* `drawFace` is handed a camera already aimed and is expected to submit the scene exactly as
|
|
158
|
+
* it would to the screen. It is called six times, and it must not call anything that binds a
|
|
159
|
+
* framebuffer of its own: a shadow pass or a planar reflection inside a probe bake would
|
|
160
|
+
* leave the probe's own target unbound halfway through a face.
|
|
161
|
+
*
|
|
162
|
+
* Returns whether the bake happened. A false means the allocation was refused and the caller
|
|
163
|
+
* should carry on without a probe, which is a picture with a gradient in its paint rather
|
|
164
|
+
* than a room.
|
|
165
|
+
*/
|
|
166
|
+
bake(gl: WebGL2RenderingContext, origin: Vec3, clearColor: Vec3, drawFace: (camera: Camera) => void): boolean;
|
|
167
|
+
/**
|
|
168
|
+
* Read six faces back off the GPU, at one mip level, for the irradiance projection.
|
|
169
|
+
*
|
|
170
|
+
* **Synchronous, and that is the whole reason the two backends' bindings differ.** `readPixels`
|
|
171
|
+
* blocks until the queue reaches it, and on a level this coarse that is a few thousand texels
|
|
172
|
+
* once per bake. The other backend has no synchronous read at all — its cube is not copyable and
|
|
173
|
+
* `mapAsync` answers on a later tick — so it does this over two frames. Both hand the same six
|
|
174
|
+
* arrays to the same projection, which is where the decision lives.
|
|
175
|
+
*
|
|
176
|
+
* `out` must hold six arrays of at least `(size >> level)^2 * 4` floats. Answers false if the
|
|
177
|
+
* driver would not attach a face for reading, which is the same refusal `bake` already handles
|
|
178
|
+
* by carrying on without a probe: the reflection is already in the cube either way, so a false
|
|
179
|
+
* here costs the diffuse term and nothing else.
|
|
180
|
+
*
|
|
181
|
+
* **What would make it wrong** is reading a level the chain does not have. `texStorage2D`
|
|
182
|
+
* allocated `maxLod + 1` levels, so any level up to `maxLod` is in range; a caller asking for
|
|
183
|
+
* `maxLod - 3` needs a probe of at least eight texels, and below that the projection is not
|
|
184
|
+
* worth doing and the caller skips it.
|
|
185
|
+
*/
|
|
186
|
+
readFaces(gl: WebGL2RenderingContext, level: number, out: Float32Array[]): boolean;
|
|
187
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
188
|
+
}
|