@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,396 @@
|
|
|
1
|
+
import { glslIsFarDepth, glslSceneDepthToNdc } from '../depthConvention.ts';
|
|
2
|
+
import { MAX_GLOBAL_MEDIUM_STEPS } from '../globalMedium.ts';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* A medium filling the whole frustum: the march, and the upsample that puts it back on screen.
|
|
6
|
+
*
|
|
7
|
+
* **Volumetrics in this engine were a body inside a hull and nothing else.** `lightVolume.ts`
|
|
8
|
+
* marches a cone a caller placed, which is a shaft through a window and a lighthouse beam; there
|
|
9
|
+
* was no way to say the air itself is thick. Fog was `atmosphere.ts`, which fades a *surface*
|
|
10
|
+
* toward a colour by how far away it is — so a room full of haze had no shafts in it, a solid
|
|
11
|
+
* standing in that haze cast nothing through it, and the sun's own shadow map, which knows
|
|
12
|
+
* exactly where the light does not reach, was consulted by nothing between the surfaces.
|
|
13
|
+
*
|
|
14
|
+
* The difference is one term. Distance fog asks how much of a surface survives the journey;
|
|
15
|
+
* this asks what the journey *adds*, which is every point along it that the sun can see. A wall
|
|
16
|
+
* behind a doorway dims either way. Only this one puts the doorway's shape on the floor.
|
|
17
|
+
*
|
|
18
|
+
* ## Two passes, and the second one is not a blur
|
|
19
|
+
*
|
|
20
|
+
* `ambientOcclusionPass.ts` runs its estimate at the frame's own size and blurs it. This runs at
|
|
21
|
+
* half and upsamples, and the difference is what a sample costs: an occlusion tap is one depth
|
|
22
|
+
* fetch, and a march step is a shadow lookup plus an exponential, tens of times per pixel. Half
|
|
23
|
+
* resolution is a quarter of that, and it is affordable here for the reason it is not affordable
|
|
24
|
+
* there — a medium is smooth almost everywhere, so the only place half resolution is visible is
|
|
25
|
+
* the one place the upsample is careful about.
|
|
26
|
+
*
|
|
27
|
+
* **Which is the silhouette.** A bilinear fetch of a half-res medium reads two texels that
|
|
28
|
+
* straddle an edge, so the fog computed for the wall behind a railing is averaged onto the
|
|
29
|
+
* railing itself and the railing wears a halo. The upsample weights each of the four texels by
|
|
30
|
+
* how close its own depth is to this pixel's, which is the same instrument `AO_BLUR_FRAG` uses
|
|
31
|
+
* and for the same reason: it is what separates a blur from a smear.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The march. Writes scattered light in `rgb` and how much of the frame survives in `a`.
|
|
36
|
+
*
|
|
37
|
+
* **Transmittance in alpha is what makes the composite a fixed-function blend** rather than a
|
|
38
|
+
* second read of the scene. `dst.rgb * src.a + src.rgb` is exactly the transfer equation for a
|
|
39
|
+
* segment, and it is `ONE, SRC_ALPHA` on both backends — so the pass that puts this on screen
|
|
40
|
+
* never samples the colour it is modifying, which is the sampling a backend is entitled to call
|
|
41
|
+
* undefined and which cost this renderer a snapshot copy everywhere else it was needed.
|
|
42
|
+
*/
|
|
43
|
+
export const MEDIUM_FRAG = `#version 300 es
|
|
44
|
+
precision highp float;
|
|
45
|
+
|
|
46
|
+
in vec2 vUv;
|
|
47
|
+
|
|
48
|
+
/** The frame's depth, at full size however small this target is. See \`uDepthToWorld\`. */
|
|
49
|
+
uniform highp sampler2D uDepth;
|
|
50
|
+
/**
|
|
51
|
+
* Straight from a stored depth to world space, in one matrix, exactly as \`uDepthToLocal\` is.
|
|
52
|
+
*
|
|
53
|
+
* Built on the CPU per frame because the two backends disagree about clip space: WebGL2 stores
|
|
54
|
+
* depth in [0,1] and wants NDC z in [-1,1], WebGPU stores and wants [0,1]. Folding the remap into
|
|
55
|
+
* the matrix is what lets this shader read \`vec4(ndc.xy, stored, 1)\` without knowing which one it
|
|
56
|
+
* is running on, and \`lightVolumeDraw.ts\` derives both remaps and says why they are not one.
|
|
57
|
+
*/
|
|
58
|
+
uniform mat4 uDepthToWorld;
|
|
59
|
+
uniform vec3 uCameraPos;
|
|
60
|
+
|
|
61
|
+
/** Surface → sun, normalised: \`Environment.directionalDir\`, the same vector the flat shader gets. */
|
|
62
|
+
uniform vec3 uSunDir;
|
|
63
|
+
/** The sun's colour and intensity, which is what the medium scatters. */
|
|
64
|
+
uniform vec3 uSunColor;
|
|
65
|
+
/** The sky's own fill, scattered isotropically. Without it a shadowed medium is black. */
|
|
66
|
+
uniform vec3 uAmbient;
|
|
67
|
+
|
|
68
|
+
/** Extinction per metre. Above zero here, because nothing draws this pass at zero. */
|
|
69
|
+
uniform float uDensity;
|
|
70
|
+
/** How much of what the medium takes out comes back as light rather than heat, 0 to 1. */
|
|
71
|
+
uniform float uAlbedo;
|
|
72
|
+
/** Henyey-Greenstein g, -1 back to 1 forward. */
|
|
73
|
+
uniform float uAnisotropy;
|
|
74
|
+
/** Where the march stops, in metres. */
|
|
75
|
+
uniform float uMaxDistance;
|
|
76
|
+
/** Steps per pixel, clamped to \`MAX_GLOBAL_MEDIUM_STEPS\`. */
|
|
77
|
+
uniform int uSteps;
|
|
78
|
+
|
|
79
|
+
/** How much of the medium the sun's own shadow map removes, 0 to 1. At 0 nothing is sampled. */
|
|
80
|
+
uniform float uSunShadow;
|
|
81
|
+
uniform mat4 uLightViewProj;
|
|
82
|
+
uniform sampler2D uStaticShadowMap;
|
|
83
|
+
uniform sampler2D uPeeledShadowMap;
|
|
84
|
+
uniform sampler2D uDynamicShadowMap;
|
|
85
|
+
uniform int uPeeledShadowEnabled;
|
|
86
|
+
|
|
87
|
+
out vec4 fragColor;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The stored depth this shader unprojects to find the ray, and it is not a depth in the scene.
|
|
91
|
+
*
|
|
92
|
+
* Every view ray of a perspective projection passes through the eye, so one point on the ray is
|
|
93
|
+
* enough to fix its direction and the eye supplies the other. A half is chosen because it is
|
|
94
|
+
* inside the frustum whichever way round the convention runs — near or far would be exact under
|
|
95
|
+
* one and at infinity under the other, and this shader is compiled once for both.
|
|
96
|
+
*/
|
|
97
|
+
const float RAY_PROBE_DEPTH = 0.5;
|
|
98
|
+
|
|
99
|
+
/** Depth tolerance for the shadow lookup, and the width the comparison ramps over. See lightVolume. */
|
|
100
|
+
const float SHADOW_BIAS = 0.0015;
|
|
101
|
+
const float SHADOW_SOFTEN = 0.0025;
|
|
102
|
+
|
|
103
|
+
/** Four pi, which is what a phase function normalises over. */
|
|
104
|
+
const float FOUR_PI = 12.56637061;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* How the samples are spread along the ray: distance is \`far * u^DISTRIBUTION\` for u in 0 to 1.
|
|
108
|
+
*
|
|
109
|
+
* **Even spacing was what shipped first here and it was measured before it was changed.** A ray
|
|
110
|
+
* that leaves through an opening has nothing to stop it, so it marches the whole \`maxDistance\`:
|
|
111
|
+
* at 200 m and 32 steps that is six metres between samples, and the dither below then moves each
|
|
112
|
+
* one by up to three. Every sample near the opening's own frame flips between blocked and unblocked
|
|
113
|
+
* from pixel to pixel, and what reaches the screen is coarse salt-and-pepper over the brightest
|
|
114
|
+
* part of the frame — photographed on \`demo/dev/medium.html\` at \`?density=0.03\`, where the sky
|
|
115
|
+
* through the window is the one region a viewer's eye goes to first.
|
|
116
|
+
*
|
|
117
|
+
* Squaring fixes it because the structure is not spread evenly either. Everything a march has to
|
|
118
|
+
* resolve — the edge of a shaft, the shadow of a post, the boundary of a doorway — is *near*,
|
|
119
|
+
* inside the room the camera is standing in; what is far is the uniform remainder of a homogeneous
|
|
120
|
+
* medium, which needs no resolution at all. At 200 m over 32 steps the first segment is now 20 cm
|
|
121
|
+
* and the last is twelve metres, and the twelve metres are integrated exactly by the analytic term
|
|
122
|
+
* below rather than approximated.
|
|
123
|
+
*
|
|
124
|
+
* Two, and not more, because the segment lengths are what the dither is measured in: a steeper
|
|
125
|
+
* power buys sharper near detail and pushes the far dither back up.
|
|
126
|
+
*/
|
|
127
|
+
const float DISTRIBUTION = 2.0;
|
|
128
|
+
|
|
129
|
+
float hash21(vec2 p) {
|
|
130
|
+
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** A ramp rather than a comparison, for the reason \`lightVolume.ts\` gives about its own dither. */
|
|
134
|
+
float occlusion(float stored, float compare) {
|
|
135
|
+
return smoothstep(-SHADOW_SOFTEN, SHADOW_SOFTEN, compare - stored);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** How much sun reaches one point in the air. The same three maps the shaft reads, in the same order. */
|
|
139
|
+
float sunReach(vec3 worldPos) {
|
|
140
|
+
vec4 lightPos = uLightViewProj * vec4(worldPos, 1.0);
|
|
141
|
+
if (lightPos.w <= 0.0) return 1.0;
|
|
142
|
+
vec3 p = lightPos.xyz / lightPos.w * 0.5 + 0.5;
|
|
143
|
+
if (p.z > 1.0 || p.x < 0.0 || p.x > 1.0 || p.y < 0.0 || p.y > 1.0) return 1.0;
|
|
144
|
+
|
|
145
|
+
/* Faded at the border rather than cut at it: the map covers a radius around the viewer, and a
|
|
146
|
+
hard edge makes a shaft appear as the camera walks toward it. */
|
|
147
|
+
vec2 fromCentre = abs(p.xy - 0.5) * 2.0;
|
|
148
|
+
float edgeFade = 1.0 - smoothstep(0.72, 0.98, max(fromCentre.x, fromCentre.y));
|
|
149
|
+
edgeFade *= 1.0 - smoothstep(0.90, 1.0, p.z);
|
|
150
|
+
if (edgeFade <= 0.0) return 1.0;
|
|
151
|
+
|
|
152
|
+
float compare = p.z - SHADOW_BIAS;
|
|
153
|
+
float blocked = occlusion(textureLod(uStaticShadowMap, p.xy, 0.0).r, compare);
|
|
154
|
+
if (uPeeledShadowEnabled != 0) {
|
|
155
|
+
blocked = max(blocked, occlusion(textureLod(uPeeledShadowMap, p.xy, 0.0).r, compare));
|
|
156
|
+
}
|
|
157
|
+
blocked = max(blocked, occlusion(textureLod(uDynamicShadowMap, p.xy, 0.0).r, compare));
|
|
158
|
+
return mix(1.0, 1.0 - blocked, uSunShadow * edgeFade);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Henyey-Greenstein: how much light arriving along one direction leaves along another.
|
|
163
|
+
*
|
|
164
|
+
* **This is the term that makes a medium look like weather rather than like a grey wash.** Air
|
|
165
|
+
* with dust in it is strongly forward-scattering, which is why the haze around a low sun is
|
|
166
|
+
* bright and the same haze behind you is not, and an isotropic medium is the one thing that
|
|
167
|
+
* cannot show that at any density. g of zero returns 1 / 4pi exactly and costs the same.
|
|
168
|
+
*/
|
|
169
|
+
float phase(float cosTheta, float g) {
|
|
170
|
+
float g2 = g * g;
|
|
171
|
+
float d = max(1.0 + g2 - 2.0 * g * cosTheta, 1e-4);
|
|
172
|
+
return (1.0 - g2) / (FOUR_PI * d * sqrt(d));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
void main() {
|
|
176
|
+
vec2 ndc = vUv * 2.0 - 1.0;
|
|
177
|
+
|
|
178
|
+
/* The ray, from the eye through one point of it. See RAY_PROBE_DEPTH. */
|
|
179
|
+
vec4 probe = uDepthToWorld * vec4(ndc, RAY_PROBE_DEPTH, 1.0);
|
|
180
|
+
vec3 dir = normalize(probe.xyz / probe.w - uCameraPos);
|
|
181
|
+
|
|
182
|
+
/*
|
|
183
|
+
* Where the march stops: the surface the frame already drew, or the medium's own reach.
|
|
184
|
+
*
|
|
185
|
+
* **Without the first the fog is drawn through the wall**, which is not a subtle failure —
|
|
186
|
+
* a lit doorway would put its shaft on top of the wall beside it rather than on the floor
|
|
187
|
+
* through it. It is the same clamp \`lightVolume.ts\` acquired after a beam was reported
|
|
188
|
+
* continuing under a floor, and \`hit.w\` is guarded here for the reason it is guarded there.
|
|
189
|
+
*/
|
|
190
|
+
float stored = textureLod(uDepth, vUv, 0.0).r;
|
|
191
|
+
float far = uMaxDistance;
|
|
192
|
+
if (!${glslIsFarDepth('stored')}) {
|
|
193
|
+
vec4 hit = uDepthToWorld * vec4(ndc, stored, 1.0);
|
|
194
|
+
if (hit.w > 1e-6) far = min(far, dot(hit.xyz / hit.w - uCameraPos, dir));
|
|
195
|
+
}
|
|
196
|
+
if (far <= 0.0) {
|
|
197
|
+
fragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
int steps = clamp(uSteps, 1, ${MAX_GLOBAL_MEDIUM_STEPS});
|
|
202
|
+
|
|
203
|
+
/*
|
|
204
|
+
* The lattice is the plain midpoint rule and only the shadow lookup is dithered off it.
|
|
205
|
+
*
|
|
206
|
+
* **The same split \`lightVolume.ts\` took three captures to arrive at**, and the argument is
|
|
207
|
+
* the medium's rather than the beam's only in one detail: here the density is *constant*, so
|
|
208
|
+
* the sole discontinuity anywhere in the integrand is the shadow map. Jittering the sample
|
|
209
|
+
* positions would therefore spoil the one term that is perfectly smooth and improve nothing,
|
|
210
|
+
* which is exactly the screen door that shader photographed down a beam carrying no shadow.
|
|
211
|
+
*
|
|
212
|
+
* A hash rather than a Bayer tile, and that is the one place the two differ. This pass runs at
|
|
213
|
+
* half resolution behind a depth-aware upsample, and an ordered pattern survives that upsample
|
|
214
|
+
* as a pattern at twice the size — the 4x4 tile would arrive on screen eight pixels wide. A
|
|
215
|
+
* hash arrives as noise the upsample's own bilinear footprint already averages four of.
|
|
216
|
+
*/
|
|
217
|
+
float dither = hash21(gl_FragCoord.xy) - 0.5;
|
|
218
|
+
|
|
219
|
+
/* Constant along the ray, so out of the loop: the medium is homogeneous by construction. */
|
|
220
|
+
float scatter = uAlbedo * phase(dot(dir, uSunDir), uAnisotropy);
|
|
221
|
+
vec3 sunLit = uSunColor * scatter;
|
|
222
|
+
/* Isotropic, so no phase term: sky fill arrives from every direction and leaves the same way. */
|
|
223
|
+
vec3 skyLit = uAmbient * uAlbedo * (1.0 / FOUR_PI);
|
|
224
|
+
|
|
225
|
+
vec3 inscatter = vec3(0.0);
|
|
226
|
+
float transmittance = 1.0;
|
|
227
|
+
float previous = 0.0;
|
|
228
|
+
|
|
229
|
+
for (int i = 0; i < ${MAX_GLOBAL_MEDIUM_STEPS}; i++) {
|
|
230
|
+
if (i >= steps) break;
|
|
231
|
+
/*
|
|
232
|
+
* The segment this step covers, and it is **not** the same length as the one before it.
|
|
233
|
+
*
|
|
234
|
+
* See DISTRIBUTION: the samples crowd toward the camera, so every quantity below is computed
|
|
235
|
+
* from this segment's own length rather than from a step shared by the whole march.
|
|
236
|
+
*/
|
|
237
|
+
float u = float(i + 1) / float(steps);
|
|
238
|
+
float next = far * pow(u, DISTRIBUTION);
|
|
239
|
+
float segment = next - previous;
|
|
240
|
+
float travelled = 0.5 * (previous + next);
|
|
241
|
+
previous = next;
|
|
242
|
+
|
|
243
|
+
/*
|
|
244
|
+
* How much this segment scatters toward the eye, and the reason it is not
|
|
245
|
+
* \`density * segment\`.
|
|
246
|
+
*
|
|
247
|
+
* The analytic integral of \`sigma_s * exp(-sigma_t * s)\` over the segment is
|
|
248
|
+
* \`albedo * (1 - exp(-sigma_t * dl))\`, and using it rather than the rectangle rule is what
|
|
249
|
+
* keeps the picture the same when a device is given a smaller step count: the rectangle rule
|
|
250
|
+
* over-counts by half a segment's absorption every segment, so a 16-step march comes out
|
|
251
|
+
* visibly brighter than a 64-step one and the quality dial changes the image rather than its
|
|
252
|
+
* cost. It also cannot exceed the light that entered, at any density and any step, which a
|
|
253
|
+
* product of two unbounded numbers can.
|
|
254
|
+
*/
|
|
255
|
+
float segmentTransmittance = exp(-uDensity * segment);
|
|
256
|
+
float scattered = 1.0 - segmentTransmittance;
|
|
257
|
+
|
|
258
|
+
float lit = 1.0;
|
|
259
|
+
if (uSunShadow > 0.0) lit = sunReach(uCameraPos + dir * (travelled + dither * segment));
|
|
260
|
+
|
|
261
|
+
inscatter += transmittance * scattered * (sunLit * lit + skyLit);
|
|
262
|
+
transmittance *= segmentTransmittance;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/*
|
|
266
|
+
* Scaled by four pi on the way out, so that an isotropic medium at albedo 1 returns exactly
|
|
267
|
+
* the light that reached it.
|
|
268
|
+
*
|
|
269
|
+
* The phase function is normalised over the sphere, which is what makes anisotropy mean
|
|
270
|
+
* something; it also means an isotropic medium hands back 1/4pi of the sun, and a caller
|
|
271
|
+
* setting albedo to 1 would get a twelfth of what a fog ought to look like and reach for a
|
|
272
|
+
* density that is not physical. The factor puts \`albedo\` back on the scale its name implies.
|
|
273
|
+
*/
|
|
274
|
+
fragColor = vec4(inscatter * FOUR_PI, transmittance);
|
|
275
|
+
}
|
|
276
|
+
`;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* The upsample, blended straight over the frame.
|
|
280
|
+
*
|
|
281
|
+
* **Four taps and a depth test, not a bilinear fetch.** The half-res march is smooth wherever the
|
|
282
|
+
* scene is, and wrong wherever the scene is not: a texel whose own ray ended on the wall behind a
|
|
283
|
+
* railing carries the wall's fog, and a linear fetch spreads it onto the railing. So each of the
|
|
284
|
+
* four texels around this pixel is weighted by its bilinear share **and** by how close the depth
|
|
285
|
+
* its march stopped at is to this pixel's own, which is what keeps the fog on its own side of an
|
|
286
|
+
* edge. `AO_BLUR_FRAG` weights its taps the same way and calls it the difference between a blur
|
|
287
|
+
* and a smear.
|
|
288
|
+
*
|
|
289
|
+
* The low-resolution depths are read out of the *frame's* depth texture at the low-resolution
|
|
290
|
+
* texel centres, rather than out of a second half-size depth target. They are the same values:
|
|
291
|
+
* the march point-samples that same texture at those same coordinates, so this reproduces what
|
|
292
|
+
* each texel actually integrated to, for one fetch each and no extra attachment.
|
|
293
|
+
*/
|
|
294
|
+
export const MEDIUM_UPSAMPLE_FRAG = `#version 300 es
|
|
295
|
+
precision highp float;
|
|
296
|
+
|
|
297
|
+
in vec2 vUv;
|
|
298
|
+
|
|
299
|
+
/** The march's output: scattered light in rgb, transmittance in a. Linear filtered, half size. */
|
|
300
|
+
uniform sampler2D uMedium;
|
|
301
|
+
/** The frame's depth, at full size. */
|
|
302
|
+
uniform highp sampler2D uDepth;
|
|
303
|
+
/** One texel of the *medium*, which is two of the frame. */
|
|
304
|
+
uniform vec2 uMediumTexel;
|
|
305
|
+
/**
|
|
306
|
+
* The four terms that carry a stored depth back to view-space metres.
|
|
307
|
+
*
|
|
308
|
+
* Elements 10, 14, 11 and 15 of the inverse projection, column major — the same four
|
|
309
|
+
* \`ambientOcclusionPass.ts\` reads and in the same order, because the comparison this makes is
|
|
310
|
+
* the comparison its blur makes.
|
|
311
|
+
*/
|
|
312
|
+
uniform vec4 uDepthToViewZ;
|
|
313
|
+
|
|
314
|
+
out vec4 fragColor;
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* How far apart two view depths may be, as a fraction of the nearer one, before a tap is refused.
|
|
318
|
+
*
|
|
319
|
+
* **Proportional rather than absolute, and that is the whole of why it works at any distance.**
|
|
320
|
+
* A depth buffer's quantum grows with distance and so does the gap two sides of a grazing floor
|
|
321
|
+
* show, so a fixed tolerance in metres either refuses every tap across a far room or accepts
|
|
322
|
+
* every tap across a near silhouette. Five percent is far above both and far below the step at
|
|
323
|
+
* an edge worth protecting — a doorway is metres of it.
|
|
324
|
+
*
|
|
325
|
+
* Raising this toward infinity is exactly a plain bilinear upsample, which is the mutation
|
|
326
|
+
* \`scripts/medium-check.mjs\` uses to show that the silhouette claim is not vacuous.
|
|
327
|
+
*/
|
|
328
|
+
const float DEPTH_TOLERANCE = 0.05;
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* View distance in metres from a stored depth, positive away from the eye.
|
|
332
|
+
*
|
|
333
|
+
* The stored value is carried to a conventional NDC z first, exactly as \`AO_BLUR_FRAG\`'s copy of
|
|
334
|
+
* this does: the four terms come off the inverse of the camera's own projection, whose clip z runs
|
|
335
|
+
* -1 to 1, and this renderer stores a *reversed* depth in 0 to 1. Skipping that step still yields
|
|
336
|
+
* a monotonic function of distance, which is why it would look like it works — what it breaks is
|
|
337
|
+
* the scale the tolerance below is measured in, so the refusal would fire at the wrong depths.
|
|
338
|
+
*/
|
|
339
|
+
float viewDistance(float stored) {
|
|
340
|
+
float ndc = ${glslSceneDepthToNdc('stored')};
|
|
341
|
+
return abs((uDepthToViewZ.x * ndc + uDepthToViewZ.y) / (uDepthToViewZ.z * ndc + uDepthToViewZ.w));
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
void main() {
|
|
345
|
+
float here = viewDistance(textureLod(uDepth, vUv, 0.0).r);
|
|
346
|
+
|
|
347
|
+
/*
|
|
348
|
+
* The four texel centres the bilinear footprint would have used, found by hand.
|
|
349
|
+
*
|
|
350
|
+
* \`floor(uv / texel - 0.5)\` is the low-resolution texel whose centre is up and to the left of
|
|
351
|
+
* this pixel; the fraction left over is the weight toward the other three. Doing it here rather
|
|
352
|
+
* than letting the sampler do it is the entire pass: the sampler cannot be told to skip a texel.
|
|
353
|
+
*/
|
|
354
|
+
vec2 coord = vUv / uMediumTexel - 0.5;
|
|
355
|
+
vec2 base = floor(coord);
|
|
356
|
+
vec2 f = coord - base;
|
|
357
|
+
|
|
358
|
+
vec4 total = vec4(0.0);
|
|
359
|
+
float weight = 0.0;
|
|
360
|
+
/** The nearest tap by depth, kept in case every weight is refused. */
|
|
361
|
+
vec4 nearest = vec4(0.0, 0.0, 0.0, 1.0);
|
|
362
|
+
float nearestGap = 1e30;
|
|
363
|
+
|
|
364
|
+
for (int i = 0; i < 4; i++) {
|
|
365
|
+
vec2 offset = vec2(float(i & 1), float((i >> 1) & 1));
|
|
366
|
+
vec2 uv = (base + offset + 0.5) * uMediumTexel;
|
|
367
|
+
float bilinear = mix(1.0 - f.x, f.x, offset.x) * mix(1.0 - f.y, f.y, offset.y);
|
|
368
|
+
|
|
369
|
+
float there = viewDistance(textureLod(uDepth, uv, 0.0).r);
|
|
370
|
+
float gap = abs(there - here) / max(min(there, here), 1e-3);
|
|
371
|
+
vec4 sampled = textureLod(uMedium, uv, 0.0);
|
|
372
|
+
|
|
373
|
+
if (gap < nearestGap) {
|
|
374
|
+
nearestGap = gap;
|
|
375
|
+
nearest = sampled;
|
|
376
|
+
}
|
|
377
|
+
/*
|
|
378
|
+
* A ramp rather than a cut, over the last fifth of the tolerance. A hard refusal makes the
|
|
379
|
+
* *set* of accepted taps change from pixel to pixel along a slope, and the change is visible
|
|
380
|
+
* as a stair even though every tap in it was correct.
|
|
381
|
+
*/
|
|
382
|
+
float depthWeight = 1.0 - smoothstep(DEPTH_TOLERANCE * 0.8, DEPTH_TOLERANCE, gap);
|
|
383
|
+
total += sampled * bilinear * depthWeight;
|
|
384
|
+
weight += bilinear * depthWeight;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/*
|
|
388
|
+
* **The fallback is a real answer, not a guard against division by zero.** Every tap is refused
|
|
389
|
+
* exactly where this pixel's surface is not represented in the half-res march at all — a
|
|
390
|
+
* one-pixel-wide railing between two texels that both landed on the wall — and there is nothing
|
|
391
|
+
* to interpolate. The nearest by depth is the least wrong of the four, and it is a point sample,
|
|
392
|
+
* which is what a half-res effect always degrades to at a feature it cannot resolve.
|
|
393
|
+
*/
|
|
394
|
+
fragColor = weight > 1e-4 ? total / weight : nearest;
|
|
395
|
+
}
|
|
396
|
+
`;
|