@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,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bloom: the three stages of spreading a bright thing past its own pixels.
|
|
3
|
+
*
|
|
4
|
+
* **What it is for, in the words of the consumer who asked for it.** Nothing in this renderer
|
|
5
|
+
* makes a bright thing look bright: an emissive surface is exactly as bright as its pixels and
|
|
6
|
+
* not one pixel wider, so anything meant to overwhelm the eye has to be faked in geometry — a
|
|
7
|
+
* core sphere, a second sphere slightly larger, and fifty-four additive particles standing in
|
|
8
|
+
* for one pass. Every neon ring, lit poster, glyph band and shaft of daylight is the same
|
|
9
|
+
* request.
|
|
10
|
+
*
|
|
11
|
+
* **It composes with the tone curve rather than replacing it.** The curve decides how a bright
|
|
12
|
+
* pixel rolls off; this decides how far it spreads. So the result is added in linear scene
|
|
13
|
+
* units, before the grade, and the grade then rolls off the sum exactly as it rolls off
|
|
14
|
+
* anything else.
|
|
15
|
+
*
|
|
16
|
+
* **The threshold is in scene units, which is only meaningful with a target that keeps them.**
|
|
17
|
+
* With an eight-bit target the scene is clipped to 0..1 before the composite ever sees it, so a
|
|
18
|
+
* star and a sheet of white paper arrive as the same colour and a threshold can only mean
|
|
19
|
+
* whiteness. That is the whole reason hdrScene exists and it is why bloom asks for it.
|
|
20
|
+
*
|
|
21
|
+
* Three stages, and the middle one repeats:
|
|
22
|
+
*
|
|
23
|
+
* 1. **Prefilter**, full resolution down to half: subtract the threshold and keep what is left.
|
|
24
|
+
* 2. **Downsample**, halving each time, six levels or as many as the frame allows. Each level
|
|
25
|
+
* is an octave of the spread, and adding them back is what produces a wide falloff rather
|
|
26
|
+
* than one gaussian with a hard end.
|
|
27
|
+
* 3. **Upsample**, additively back up the chain through a tent filter.
|
|
28
|
+
*
|
|
29
|
+
* Deliberately absent, because they were asked against by name: lens dirt, anamorphic streaks
|
|
30
|
+
* and ghosting. One threshold, one radius, one strength.
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The thirteen taps every downsampling stage shares, decomposed into five overlapping boxes.
|
|
35
|
+
*
|
|
36
|
+
* Shared as a string rather than copied, because the prefilter and the plain downsample differ
|
|
37
|
+
* only in how they weight these boxes and what they do to each tap on the way in. Both call a
|
|
38
|
+
* fetch the shader itself defines, which is the seam: the prefilter thresholds there and the
|
|
39
|
+
* downsample does not.
|
|
40
|
+
*
|
|
41
|
+
* **Thirteen rather than four.** A bilinear box halving is one tap and it aliases: a bright
|
|
42
|
+
* pixel that lands between two texels flickers between them as the camera moves, which is the
|
|
43
|
+
* exact failure bloom is most often blamed for. The thirteen-tap arrangement samples the ring
|
|
44
|
+
* that a plain box misses, and the boxes overlap so no source pixel is ever weighted zero.
|
|
45
|
+
*
|
|
46
|
+
* Offsets are in source texels, so uTexel is one over the *source* size rather than the target.
|
|
47
|
+
*/
|
|
48
|
+
const BLOOM_BOXES = `
|
|
49
|
+
vec2 t = uTexel;
|
|
50
|
+
vec3 a = fetch(vUv + vec2(-2.0, 2.0) * t);
|
|
51
|
+
vec3 b = fetch(vUv + vec2( 0.0, 2.0) * t);
|
|
52
|
+
vec3 c = fetch(vUv + vec2( 2.0, 2.0) * t);
|
|
53
|
+
vec3 d = fetch(vUv + vec2(-2.0, 0.0) * t);
|
|
54
|
+
vec3 e = fetch(vUv);
|
|
55
|
+
vec3 f = fetch(vUv + vec2( 2.0, 0.0) * t);
|
|
56
|
+
vec3 g = fetch(vUv + vec2(-2.0, -2.0) * t);
|
|
57
|
+
vec3 h = fetch(vUv + vec2( 0.0, -2.0) * t);
|
|
58
|
+
vec3 i = fetch(vUv + vec2( 2.0, -2.0) * t);
|
|
59
|
+
vec3 j = fetch(vUv + vec2(-1.0, 1.0) * t);
|
|
60
|
+
vec3 k = fetch(vUv + vec2( 1.0, 1.0) * t);
|
|
61
|
+
vec3 l = fetch(vUv + vec2(-1.0, -1.0) * t);
|
|
62
|
+
vec3 m = fetch(vUv + vec2( 1.0, -1.0) * t);
|
|
63
|
+
|
|
64
|
+
vec3 box0 = (a + b + d + e) * 0.25;
|
|
65
|
+
vec3 box1 = (b + c + e + f) * 0.25;
|
|
66
|
+
vec3 box2 = (d + e + g + h) * 0.25;
|
|
67
|
+
vec3 box3 = (e + f + h + i) * 0.25;
|
|
68
|
+
vec3 box4 = (j + k + l + m) * 0.25;
|
|
69
|
+
`;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* How bright a colour is, for the purpose of deciding whether it blooms.
|
|
73
|
+
*
|
|
74
|
+
* **The largest channel rather than luminance, and that is a correction rather than a
|
|
75
|
+
* preference.** Luminance weights green at 0.7152 and blue at 0.0722, so a saturated source is
|
|
76
|
+
* dim by that measure however far past white it actually is: a pure blue at 1.4, which clips the
|
|
77
|
+
* display's blue and is unambiguously a light rather than a surface, has a luminance of 0.101
|
|
78
|
+
* and cannot reach a threshold of 1 at all. It would need to reach 13.8 to try.
|
|
79
|
+
*
|
|
80
|
+
* That was shipped, and it was found from outside by the consumer who asked for bloom in the
|
|
81
|
+
* first place: two of their worlds are built entirely out of coloured light, and both bloomed by
|
|
82
|
+
* **zero pixels of 921,600** with the effect on and the threshold meaning exactly what it says.
|
|
83
|
+
* Everything switched on, nothing wrong, and nothing happening, which is the failure this
|
|
84
|
+
* repository has now shipped three times under different names.
|
|
85
|
+
*
|
|
86
|
+
* The largest channel makes the threshold mean what a reader already thinks it means: past
|
|
87
|
+
* white. It can only ever bloom *more*, never less, because the largest channel of a colour is
|
|
88
|
+
* never below its luminance, and the two are exactly equal on any neutral grey — so a scene lit
|
|
89
|
+
* in white is unchanged by this and a scene lit in colour is fixed by it. What it costs is that
|
|
90
|
+
* a strongly red surface driven past white in red alone now blooms where a grey of the same
|
|
91
|
+
* luminance does not, which is the honest reading of "this channel is off the top of the range".
|
|
92
|
+
*
|
|
93
|
+
* The ratio is applied to all three channels rather than per channel, so the hue of the halo is
|
|
94
|
+
* the hue of the thing that cast it. Subtracting the threshold per channel is the other way to
|
|
95
|
+
* write this and it turns a warm white into an orange halo, which is a filter's look rather than
|
|
96
|
+
* a light's.
|
|
97
|
+
*/
|
|
98
|
+
const BLOOM_BRIGHTNESS = `
|
|
99
|
+
float brightness(vec3 c) {
|
|
100
|
+
return max(c.r, max(c.g, c.b));
|
|
101
|
+
}
|
|
102
|
+
`;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Stage one: threshold the scene and halve it.
|
|
106
|
+
*
|
|
107
|
+
* **Subtracted rather than stepped**, which is what keeps one number honest. A hard cut at the
|
|
108
|
+
* threshold puts a visible edge through any gradient that crosses it, and repairing that is
|
|
109
|
+
* where a second knob usually arrives. Scaling the colour by how far its own luminance sits
|
|
110
|
+
* past the threshold is continuous, starts at exactly nothing, and needs no knee: a pixel just
|
|
111
|
+
* over the line contributes almost none of itself, and one far over contributes nearly all.
|
|
112
|
+
*
|
|
113
|
+
* **The boxes are averaged by the Karis weighting here and nowhere else.** A single pixel far
|
|
114
|
+
* brighter than its neighbours — which this renderer produces, on glossy dark paint, and which
|
|
115
|
+
* STATUS 6.3 measures — would otherwise be spread into a visible blob by the very pass whose
|
|
116
|
+
* job is to spread bright things. Weighting each box by 1 / (1 + luma) before averaging makes
|
|
117
|
+
* one runaway pixel count for little against its four neighbours. It is applied only to the
|
|
118
|
+
* first stage because it is not energy-preserving, and running it down the whole chain darkens
|
|
119
|
+
* every large bright area rather than only taming isolated ones.
|
|
120
|
+
*/
|
|
121
|
+
export const BLOOM_PREFILTER_FRAG = `#version 300 es
|
|
122
|
+
precision highp float;
|
|
123
|
+
|
|
124
|
+
in vec2 vUv;
|
|
125
|
+
|
|
126
|
+
uniform sampler2D uSource;
|
|
127
|
+
/** One source texel in UV. The thirteen taps are laid out in source texels. */
|
|
128
|
+
uniform vec2 uTexel;
|
|
129
|
+
/** In scene units. 1.0 is "brighter than white", which is the useful place to start. */
|
|
130
|
+
uniform float uThreshold;
|
|
131
|
+
|
|
132
|
+
out vec4 fragColor;
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* A ceiling on what any one pixel may contribute, well above anything a scene means.
|
|
136
|
+
*
|
|
137
|
+
* Not a look control. A half-float target can hold an infinity, and an infinity through the
|
|
138
|
+
* threshold below is inf/inf, which is a NaN that the chain then spreads across the whole
|
|
139
|
+
* frame — the one failure mode where a post pass destroys the picture rather than degrading
|
|
140
|
+
* it. Anything above this is indistinguishable after the tone curve anyway.
|
|
141
|
+
*/
|
|
142
|
+
const float BLOOM_CEILING = 256.0;
|
|
143
|
+
${BLOOM_BRIGHTNESS}
|
|
144
|
+
vec3 fetch(vec2 uv) {
|
|
145
|
+
vec3 c = min(textureLod(uSource, uv, 0.0).rgb, vec3(BLOOM_CEILING));
|
|
146
|
+
float bright = brightness(c);
|
|
147
|
+
return c * (max(bright - uThreshold, 0.0) / max(bright, 1e-4));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/** How much a box counts for. A runaway pixel drags its box's brightness up and its weight down. */
|
|
151
|
+
float firefly(vec3 c) {
|
|
152
|
+
return 1.0 / (1.0 + brightness(c));
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
void main() {
|
|
156
|
+
${BLOOM_BOXES}
|
|
157
|
+
float w0 = firefly(box0) * 0.125;
|
|
158
|
+
float w1 = firefly(box1) * 0.125;
|
|
159
|
+
float w2 = firefly(box2) * 0.125;
|
|
160
|
+
float w3 = firefly(box3) * 0.125;
|
|
161
|
+
float w4 = firefly(box4) * 0.5;
|
|
162
|
+
vec3 sum = box0 * w0 + box1 * w1 + box2 * w2 + box3 * w3 + box4 * w4;
|
|
163
|
+
fragColor = vec4(sum / max(w0 + w1 + w2 + w3 + w4, 1e-4), 1.0);
|
|
164
|
+
}
|
|
165
|
+
`;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Stage two: halve what is already thresholded, once per level.
|
|
169
|
+
*
|
|
170
|
+
* The weights sum to exactly one, so each level holds the average of what fed it and the chain
|
|
171
|
+
* neither gains nor loses light. Nothing is thresholded again: that decision was made once, at
|
|
172
|
+
* full resolution, where it could still be made per pixel.
|
|
173
|
+
*/
|
|
174
|
+
export const BLOOM_DOWNSAMPLE_FRAG = `#version 300 es
|
|
175
|
+
precision highp float;
|
|
176
|
+
|
|
177
|
+
in vec2 vUv;
|
|
178
|
+
|
|
179
|
+
uniform sampler2D uSource;
|
|
180
|
+
uniform vec2 uTexel;
|
|
181
|
+
|
|
182
|
+
out vec4 fragColor;
|
|
183
|
+
|
|
184
|
+
vec3 fetch(vec2 uv) {
|
|
185
|
+
return textureLod(uSource, uv, 0.0).rgb;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
void main() {
|
|
189
|
+
${BLOOM_BOXES}
|
|
190
|
+
fragColor = vec4(box4 * 0.5 + (box0 + box1 + box2 + box3) * 0.125, 1.0);
|
|
191
|
+
}
|
|
192
|
+
`;
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* Stage three: a 3x3 tent, added into the level above.
|
|
196
|
+
*
|
|
197
|
+
* **Additive rather than a mix, and each octave counts the same.** A lone bright pixel arrives
|
|
198
|
+
* at level n divided by four to the n, spread over four to the n pixels, so summing the levels
|
|
199
|
+
* lifts its own pixel by about a third and lays a long shallow tail around it. That falloff is
|
|
200
|
+
* what a real glare looks like; a single gaussian gives a disc with an end to it.
|
|
201
|
+
*
|
|
202
|
+
* The radius is in UV rather than in texels, so it is the same fraction of the frame at every
|
|
203
|
+
* level and on every display. A tent rather than a box because the seams between the four
|
|
204
|
+
* texels a bilinear upsample reads are otherwise visible as a grid on a wide, faint halo.
|
|
205
|
+
*/
|
|
206
|
+
export const BLOOM_UPSAMPLE_FRAG = `#version 300 es
|
|
207
|
+
precision highp float;
|
|
208
|
+
|
|
209
|
+
in vec2 vUv;
|
|
210
|
+
|
|
211
|
+
uniform sampler2D uSource;
|
|
212
|
+
/** How far the tent reaches, in UV. One number for the whole chain. */
|
|
213
|
+
uniform float uRadius;
|
|
214
|
+
|
|
215
|
+
out vec4 fragColor;
|
|
216
|
+
|
|
217
|
+
void main() {
|
|
218
|
+
float r = uRadius;
|
|
219
|
+
vec3 a = textureLod(uSource, vUv + vec2(-r, r), 0.0).rgb;
|
|
220
|
+
vec3 b = textureLod(uSource, vUv + vec2(0.0, r), 0.0).rgb;
|
|
221
|
+
vec3 c = textureLod(uSource, vUv + vec2( r, r), 0.0).rgb;
|
|
222
|
+
vec3 d = textureLod(uSource, vUv + vec2(-r, 0.0), 0.0).rgb;
|
|
223
|
+
vec3 e = textureLod(uSource, vUv, 0.0).rgb;
|
|
224
|
+
vec3 f = textureLod(uSource, vUv + vec2( r, 0.0), 0.0).rgb;
|
|
225
|
+
vec3 g = textureLod(uSource, vUv + vec2(-r, -r), 0.0).rgb;
|
|
226
|
+
vec3 h = textureLod(uSource, vUv + vec2(0.0, -r), 0.0).rgb;
|
|
227
|
+
vec3 i = textureLod(uSource, vUv + vec2( r, -r), 0.0).rgb;
|
|
228
|
+
|
|
229
|
+
vec3 sum = e * 4.0 + (b + d + f + h) * 2.0 + (a + c + g + i);
|
|
230
|
+
fragColor = vec4(sum * 0.0625, 1.0);
|
|
231
|
+
}
|
|
232
|
+
`;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { FOG_GLSL } from './fog.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Electrical arcs: a filament with a saturating core and a wide soft glow.
|
|
5
|
+
*
|
|
6
|
+
* **Additive, and deliberately over-bright.** A discharge is not a surface with a
|
|
7
|
+
* colour, it is light arriving — so nothing here is lit, shaded or fogged the way
|
|
8
|
+
* geometry is, and the core is allowed to exceed white so it reads as blinding
|
|
9
|
+
* rather than as a pale line. That is the whole difference between lightning and a
|
|
10
|
+
* drawn wire, and it is why this cannot be a variant of the flat material.
|
|
11
|
+
*
|
|
12
|
+
* Each segment of an arc is expanded into a quad that faces the viewer, which for
|
|
13
|
+
* a *filament* is correct where it would be wrong for a volume: a bolt has no
|
|
14
|
+
* thickness to see around, so a world-fixed cross (what `plumeRenderer` uses, for
|
|
15
|
+
* good reasons of its own) would only make half the segments vanish edge-on. What
|
|
16
|
+
* gives an arc its three-dimensionality is the path, and the path is world-space.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export const BOLT_VERT = `#version 300 es
|
|
20
|
+
layout(location = 0) in vec3 aFrom;
|
|
21
|
+
layout(location = 1) in vec3 aTo;
|
|
22
|
+
/** Along the segment (0 or 1), and which side of it (-1 or +1). */
|
|
23
|
+
layout(location = 2) in vec2 aCorner;
|
|
24
|
+
/** Where this segment sits along its arc, the arc's envelope, its seed, its gain. */
|
|
25
|
+
layout(location = 3) in vec4 aArc;
|
|
26
|
+
|
|
27
|
+
uniform mat4 uViewProj;
|
|
28
|
+
uniform vec3 uCameraPos;
|
|
29
|
+
/** Core half-width in metres, and how much of a pixel a far arc must still cover. */
|
|
30
|
+
uniform float uWidth;
|
|
31
|
+
uniform float uMinWidthPerMetre;
|
|
32
|
+
|
|
33
|
+
out float vSide;
|
|
34
|
+
out float vAlong;
|
|
35
|
+
out float vFade;
|
|
36
|
+
out float vSeed;
|
|
37
|
+
out float vGain;
|
|
38
|
+
out vec3 vWorldPos;
|
|
39
|
+
|
|
40
|
+
void main() {
|
|
41
|
+
vec3 mid = mix(aFrom, aTo, aCorner.x);
|
|
42
|
+
vec3 dir = aTo - aFrom;
|
|
43
|
+
float len = length(dir);
|
|
44
|
+
dir = len > 1e-6 ? dir / len : vec3(0.0, 1.0, 0.0);
|
|
45
|
+
|
|
46
|
+
vec3 view = mid - uCameraPos;
|
|
47
|
+
float dist = length(view);
|
|
48
|
+
view = dist > 1e-6 ? view / dist : vec3(0.0, 0.0, 1.0);
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
* Across the segment and across the line of sight. Degenerate exactly when the
|
|
52
|
+
* segment points at the viewer, where any perpendicular is as good as another —
|
|
53
|
+
* and where the segment covers almost no screen anyway.
|
|
54
|
+
*/
|
|
55
|
+
vec3 across = cross(dir, view);
|
|
56
|
+
float span = length(across);
|
|
57
|
+
across = span > 1e-4 ? across / span : normalize(cross(dir, vec3(0.0, 1.0, 0.0)) + vec3(1e-3));
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* A floor on the world-space width that grows with distance, so a filament
|
|
61
|
+
* never thins below a pixel. Under a pixel a bright thin line does not get
|
|
62
|
+
* fainter, it *flickers* — the rasteriser catches it on some frames and not
|
|
63
|
+
* others — and a strobing artefact reads as a bug, not as lightning.
|
|
64
|
+
*/
|
|
65
|
+
float halfWidth = max(uWidth, dist * uMinWidthPerMetre);
|
|
66
|
+
vec3 world = mid + across * aCorner.y * halfWidth;
|
|
67
|
+
|
|
68
|
+
vSide = aCorner.y;
|
|
69
|
+
vAlong = aArc.x;
|
|
70
|
+
vFade = aArc.y;
|
|
71
|
+
vSeed = aArc.z;
|
|
72
|
+
vGain = aArc.w;
|
|
73
|
+
vWorldPos = world;
|
|
74
|
+
gl_Position = uViewProj * vec4(world, 1.0);
|
|
75
|
+
}
|
|
76
|
+
`;
|
|
77
|
+
|
|
78
|
+
export const BOLT_FRAG = `#version 300 es
|
|
79
|
+
precision highp float;
|
|
80
|
+
|
|
81
|
+
in float vSide;
|
|
82
|
+
in float vAlong;
|
|
83
|
+
in float vFade;
|
|
84
|
+
in float vSeed;
|
|
85
|
+
in float vGain;
|
|
86
|
+
in vec3 vWorldPos;
|
|
87
|
+
|
|
88
|
+
uniform float uTime;
|
|
89
|
+
/** The saturating centre, and the glow it sits inside. */
|
|
90
|
+
uniform vec3 uCoreColor;
|
|
91
|
+
uniform vec3 uEdgeColor;
|
|
92
|
+
/** How far past white the core is allowed to go. */
|
|
93
|
+
uniform float uCoreGain;
|
|
94
|
+
${FOG_GLSL}
|
|
95
|
+
uniform vec3 uCameraPos;
|
|
96
|
+
|
|
97
|
+
out vec4 outColor;
|
|
98
|
+
|
|
99
|
+
float hash11(float p) {
|
|
100
|
+
return fract(sin(p * 12.9898) * 43758.5453123);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
void main() {
|
|
104
|
+
/*
|
|
105
|
+
* Across the filament: 1 at the centre line, 0 at the quad's edge. Two powers
|
|
106
|
+
* of it are the entire look — a very tight one for the core and a loose one for
|
|
107
|
+
* the glow. A single falloff gives either a hard line with no atmosphere or a
|
|
108
|
+
* soft smudge with no filament.
|
|
109
|
+
*/
|
|
110
|
+
float across = 1.0 - abs(vSide);
|
|
111
|
+
float core = pow(across, 10.0);
|
|
112
|
+
/*
|
|
113
|
+
* A *wide* halo, deliberately. This exponent is the single biggest control over
|
|
114
|
+
* whether the effect reads as lightning or as a drawn line: a tight falloff gives a
|
|
115
|
+
* crisp filament with nothing around it, which is a wire, while a broad one bleeds
|
|
116
|
+
* light into the air the way an over-exposed discharge does on film. It is the
|
|
117
|
+
* closest thing to bloom available without a second pass.
|
|
118
|
+
*/
|
|
119
|
+
float glow = pow(across, 1.1);
|
|
120
|
+
|
|
121
|
+
/*
|
|
122
|
+
* Stutter. An arc is not a steady light: it is re-established many times a
|
|
123
|
+
* second, and the eye reads a *constant* bright line as neon. Two frequencies
|
|
124
|
+
* so the pattern does not read as a sine, and per-arc phase from the seed so
|
|
125
|
+
* several arcs never blink together.
|
|
126
|
+
*/
|
|
127
|
+
/*
|
|
128
|
+
* Stutter, but shallow. An arc is re-established many times a second and a perfectly
|
|
129
|
+
* steady bright line reads as neon — but too *much* flicker reads as a broken effect
|
|
130
|
+
* rather than as a discharge, and at the brief lifetime these now have, deep flicker
|
|
131
|
+
* mostly hides the bolt. The path itself is already being redrawn (see 'BoltPool'),
|
|
132
|
+
* which carries most of the crackle; this only keeps the brightness alive.
|
|
133
|
+
*/
|
|
134
|
+
float t = uTime * 47.0 + vSeed * 17.0;
|
|
135
|
+
float stutter = 0.78 + 0.22 * (hash11(floor(t)) * 0.6 + hash11(floor(t * 2.37)) * 0.4);
|
|
136
|
+
|
|
137
|
+
/*
|
|
138
|
+
* The tip tapers. An arc that ends in a squared-off quad reads as a drawn
|
|
139
|
+
* segment; thinning toward the far end is what makes it read as a discharge
|
|
140
|
+
* dissipating into the air.
|
|
141
|
+
*/
|
|
142
|
+
float taper = 1.0 - vAlong * 0.55;
|
|
143
|
+
|
|
144
|
+
float energy = vFade * stutter * taper * vGain;
|
|
145
|
+
vec3 lit = uEdgeColor * glow + uCoreColor * core * uCoreGain;
|
|
146
|
+
|
|
147
|
+
/*
|
|
148
|
+
* Distance dims it rather than tinting it toward the fog. A discharge emits;
|
|
149
|
+
* mixing it into the medium's colour is what a *surface* does, and doing that
|
|
150
|
+
* here turned a far bolt grey instead of faint.
|
|
151
|
+
*/
|
|
152
|
+
float fog = mediumFog(distance(vWorldPos, uCameraPos), vWorldPos.y);
|
|
153
|
+
/*
|
|
154
|
+
* Alpha is 1, and the energy is already in the colour.
|
|
155
|
+
*
|
|
156
|
+
* The additive blend is 'SRC_ALPHA, ONE', so what reaches the framebuffer is
|
|
157
|
+
* 'rgb * a'. Putting the energy in both — which the first version did — squares it,
|
|
158
|
+
* and squaring a number below one is how an effect authored as blinding arrives as
|
|
159
|
+
* faint: at a typical energy of 0.5 it delivered a quarter of what it asked for.
|
|
160
|
+
* Every emissive material here has to pick one channel and mean it.
|
|
161
|
+
*/
|
|
162
|
+
outColor = vec4(lit * energy * (1.0 - fog), 1.0);
|
|
163
|
+
}
|
|
164
|
+
`;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { GERSTNER_GLSL } from './gerstner.ts';
|
|
2
|
+
import { FOG_GLSL } from './fog.ts';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Light off water, projected onto what covers it.
|
|
6
|
+
*
|
|
7
|
+
* Everybody who has walked under a canal bridge has seen this: the soffit is
|
|
8
|
+
* dark, and the water outside throws a moving net of light across it. Almost no
|
|
9
|
+
* game bothers, because it needs the water and the enclosure to know about each
|
|
10
|
+
* other — and the pattern has to belong to the waves actually visible five
|
|
11
|
+
* metres away or it is a texture loop with extra steps.
|
|
12
|
+
*
|
|
13
|
+
* So it is computed from `gerstner.ts`, the same table, phase and clock the
|
|
14
|
+
* surface itself is displaced by. Not similar parameters: the same ones.
|
|
15
|
+
*
|
|
16
|
+
* **The model.** A ray from the dominant source strikes the water at some point
|
|
17
|
+
* and reflects up to the ceiling. To first order in the slope, the reflected ray
|
|
18
|
+
* lands at `C = W - 2·d·grad h(W)`, so the map from water to ceiling has
|
|
19
|
+
* Jacobian `J = I - 2·d·H`, with `H` the surface's Hessian and `d` the ray's
|
|
20
|
+
* path length. Radiance is conserved, so brightness goes as `1/|det J|` — and it
|
|
21
|
+
* is unbounded where `det J` crosses zero, which is the bright net. Troughs
|
|
22
|
+
* focus and crests spread, exactly as a concave and a convex mirror do.
|
|
23
|
+
*
|
|
24
|
+
* Three consequences fall out rather than being authored, and they are what sell
|
|
25
|
+
* it: the pattern crawls with the real crests; a low sun stretches the net and
|
|
26
|
+
* throws it sideways along the light, because `d` is the slant path and not the
|
|
27
|
+
* drop; and calm water gives a soft wide sheen where a built-up sea gives sharp
|
|
28
|
+
* lines.
|
|
29
|
+
*
|
|
30
|
+
* **The gates**, because a caustic on the wrong surface is worse than none: the
|
|
31
|
+
* sheet must be within a few metres of the water, on either side of it, and it
|
|
32
|
+
* must be a surface the water can actually throw light onto — which is a
|
|
33
|
+
* property of the geometry a caller submits. Enclosure is the caller's business
|
|
34
|
+
* too, though a soffit needs less care than most: a downward face receives no
|
|
35
|
+
* directional light in the first place, so the underside of anything solid is
|
|
36
|
+
* already the darkest surface in the scene, and this reads there without a fake
|
|
37
|
+
* ambient volume. A pool floor is the other half of the same effect and the more
|
|
38
|
+
* ordinary one, and it wants the sheet laid just clear of the tiles.
|
|
39
|
+
*/
|
|
40
|
+
export const CAUSTICS_VERT = `#version 300 es
|
|
41
|
+
layout(location = 0) in vec3 aRest;
|
|
42
|
+
layout(location = 1) in vec2 aLocal;
|
|
43
|
+
/** x: resting height of the water below. y: spare. */
|
|
44
|
+
layout(location = 2) in vec2 aParams;
|
|
45
|
+
|
|
46
|
+
uniform mat4 uViewProj;
|
|
47
|
+
|
|
48
|
+
out vec3 vWorldPos;
|
|
49
|
+
out vec2 vLocal;
|
|
50
|
+
out vec2 vParams;
|
|
51
|
+
|
|
52
|
+
void main() {
|
|
53
|
+
vWorldPos = aRest;
|
|
54
|
+
vLocal = aLocal;
|
|
55
|
+
vParams = aParams;
|
|
56
|
+
gl_Position = uViewProj * vec4(aRest, 1.0);
|
|
57
|
+
}
|
|
58
|
+
`;
|
|
59
|
+
|
|
60
|
+
export const CAUSTICS_FRAG = `#version 300 es
|
|
61
|
+
precision highp float;
|
|
62
|
+
|
|
63
|
+
in vec3 vWorldPos;
|
|
64
|
+
in vec2 vLocal;
|
|
65
|
+
in vec2 vParams;
|
|
66
|
+
|
|
67
|
+
uniform vec3 uCameraPos;
|
|
68
|
+
uniform vec2 uWindDir;
|
|
69
|
+
uniform float uWaveGain;
|
|
70
|
+
uniform float uTime;
|
|
71
|
+
/** Toward the dominant source, as everywhere else in the engine. */
|
|
72
|
+
uniform vec3 uLightDir;
|
|
73
|
+
/** Colour of the light the water is reflecting. */
|
|
74
|
+
uniform vec3 uTint;
|
|
75
|
+
uniform float uStrength;
|
|
76
|
+
/** How far from the water, on either side, the effect has died out entirely. */
|
|
77
|
+
uniform float uMaxDrop;
|
|
78
|
+
${FOG_GLSL}
|
|
79
|
+
|
|
80
|
+
out vec4 outColor;
|
|
81
|
+
|
|
82
|
+
${GERSTNER_GLSL}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Shallowest the source may be and still be treated as a source.
|
|
86
|
+
*
|
|
87
|
+
* The slant path goes as 1/sin(elevation), so a light on the horizon would send
|
|
88
|
+
* the sampled water position kilometres away and the pattern would smear into
|
|
89
|
+
* noise. Clamping keeps a sunset dramatic instead of broken.
|
|
90
|
+
*/
|
|
91
|
+
const float MIN_ELEVATION = 0.16;
|
|
92
|
+
|
|
93
|
+
void main() {
|
|
94
|
+
float waterY = vParams.x;
|
|
95
|
+
float drop = vWorldPos.y - waterY;
|
|
96
|
+
|
|
97
|
+
/*
|
|
98
|
+
* Everything is masked rather than branched on, and fwidth() below is why:
|
|
99
|
+
* screen-space derivatives are undefined in non-uniform control flow, so a
|
|
100
|
+
* discard above them would make the antialiasing of the caustic lines a
|
|
101
|
+
* driver-dependent guess. Nothing is saved by branching either — a masked
|
|
102
|
+
* fragment adds zero under additive blending.
|
|
103
|
+
*
|
|
104
|
+
* Either side of the surface is lit, and the distance from it is what matters
|
|
105
|
+
* rather than the direction. This began as a soffit-only effect — light thrown
|
|
106
|
+
* *up* onto the underside of a bridge — on the reasoning that below the water
|
|
107
|
+
* there is nothing to light. That is only true when the water is a ceiling to
|
|
108
|
+
* you. A pool floor, a flooded corridor, a tank with a lamp over it: the water
|
|
109
|
+
* focuses light onto the bottom exactly as it does onto a soffit, and it is by
|
|
110
|
+
* far the more common of the two.
|
|
111
|
+
*
|
|
112
|
+
* Only the surface's own thin band is excluded, where the sheet and the water
|
|
113
|
+
* are coplanar and the pattern would be meaningless.
|
|
114
|
+
*
|
|
115
|
+
* Too far from it and the net has spread into nothing. And the sheet dissolves
|
|
116
|
+
* at its own boundary, so a lit surface does not end in a lit rectangle.
|
|
117
|
+
*/
|
|
118
|
+
float distanceFromWater = abs(drop);
|
|
119
|
+
float clear = step(0.02, distanceFromWater);
|
|
120
|
+
float height = 1.0 - smoothstep(uMaxDrop * 0.45, uMaxDrop, distanceFromWater);
|
|
121
|
+
float rim = min(min(vLocal.x, 1.0 - vLocal.x), min(vLocal.y, 1.0 - vLocal.y));
|
|
122
|
+
float edge = smoothstep(0.0, 0.12, rim);
|
|
123
|
+
float reach = clear * height * edge;
|
|
124
|
+
|
|
125
|
+
/*
|
|
126
|
+
* Which water lights *this* point. For a flat surface the reflected ray leaves
|
|
127
|
+
* along the mirrored light direction, so walking back from the ceiling gives
|
|
128
|
+
* the water position and the path length in one step. This is why the net
|
|
129
|
+
* slides along the ground as the sun moves rather than sitting under itself.
|
|
130
|
+
*/
|
|
131
|
+
float elevation = max(uLightDir.y, MIN_ELEVATION);
|
|
132
|
+
float slant = 1.0 / elevation;
|
|
133
|
+
float d = drop * slant;
|
|
134
|
+
vec2 water = vWorldPos.xz + uLightDir.xz * d;
|
|
135
|
+
|
|
136
|
+
vec3 h = gerstnerCurvature(water, uTime, uWindDir, uWaveGain);
|
|
137
|
+
float a = 1.0 - 2.0 * d * h.x;
|
|
138
|
+
float b = 1.0 - 2.0 * d * h.y;
|
|
139
|
+
float c = 2.0 * d * h.z;
|
|
140
|
+
float det = a * b - c * c;
|
|
141
|
+
|
|
142
|
+
/*
|
|
143
|
+
* The bright net is where the determinant crosses zero, so its width is a
|
|
144
|
+
* gradient question, not a constant. Widening the core by the screen-space
|
|
145
|
+
* derivative antialiases it for free — without that, a line thinner than a
|
|
146
|
+
* pixel strobes as the camera moves, which is the usual reason an effect like
|
|
147
|
+
* this ends up looking like noise.
|
|
148
|
+
*/
|
|
149
|
+
float soft = max(0.05, fwidth(det) * 1.6);
|
|
150
|
+
float lines = soft / max(abs(det), soft);
|
|
151
|
+
/*
|
|
152
|
+
* Between the lines, the faint brightening of merely convergent water — and it has to
|
|
153
|
+
* stay faint. At 0.45 it lit the *whole* sheet, and since the sheet hangs a few
|
|
154
|
+
* centimetres under the soffit, the result read as a pale plate floating below the
|
|
155
|
+
* bridge rather than as light on its underside — reported as being able to see through
|
|
156
|
+
* the bridge ceiling, which looked glassy and transparent. The plate was the sheet.
|
|
157
|
+
*
|
|
158
|
+
* A tighter threshold and a fifth of the weight: the net is bright, everything between
|
|
159
|
+
* it is almost nothing, and a soffit with no caustics on it is simply a soffit.
|
|
160
|
+
*/
|
|
161
|
+
float sheen = clamp(1.0 / max(abs(det), 0.18) - 0.85, 0.0, 1.0);
|
|
162
|
+
float caustic = clamp(lines * 0.9 + sheen * 0.09, 0.0, 1.6);
|
|
163
|
+
|
|
164
|
+
float fog = mediumFog(distance(vWorldPos, uCameraPos), vWorldPos.y);
|
|
165
|
+
|
|
166
|
+
// Additive: this is light arriving at a surface that is already shaded.
|
|
167
|
+
outColor = vec4(uTint * (caustic * uStrength * reach * (1.0 - fog)), 1.0);
|
|
168
|
+
}
|
|
169
|
+
`;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `#if NAME` / `#else` / `#endif` resolved here rather than left to GLSL.
|
|
3
|
+
*
|
|
4
|
+
* The driver's own preprocessor would reach the same compiled program, so this is not
|
|
5
|
+
* about the result — it is about what the driver is handed at all. A `#define` still ships
|
|
6
|
+
* every declaration in the source text and asks the compiler to discard them, which leaves
|
|
7
|
+
* the thing being avoided inside the component being blamed. Cutting the lines out in
|
|
8
|
+
* JavaScript means a shadowless profile never sends a sampler anywhere, and it turns the
|
|
9
|
+
* absence into something a test can assert on a string rather than something only a GPU
|
|
10
|
+
* could confirm.
|
|
11
|
+
*
|
|
12
|
+
* Deliberately not a preprocessor: one directive, names only, no expressions. Anything
|
|
13
|
+
* more belongs in GLSL, which already has one.
|
|
14
|
+
*
|
|
15
|
+
* It lived inside `flat.ts` until a second program needed permuting. Nothing about it was
|
|
16
|
+
* ever specific to that shader, and the reason it moved is the reason it is worth stating:
|
|
17
|
+
* the cost that justified it, a shadowless profile still compiling every sampler it could
|
|
18
|
+
* never reach, is paid by whichever program declares them, not by the one that happens to
|
|
19
|
+
* have found it first.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveConditionals(
|
|
22
|
+
source: string,
|
|
23
|
+
defines: Readonly<Record<string, boolean>>,
|
|
24
|
+
shaderName: string,
|
|
25
|
+
): string {
|
|
26
|
+
const kept: string[] = [];
|
|
27
|
+
/** One frame per open `#if`, holding whether its own branch is the live one. */
|
|
28
|
+
const stack: { keep: boolean }[] = [];
|
|
29
|
+
const keeping = (): boolean => stack.every((frame) => frame.keep);
|
|
30
|
+
|
|
31
|
+
for (const line of source.split('\n')) {
|
|
32
|
+
const directive = line.trim();
|
|
33
|
+
if (directive.startsWith('#if ')) {
|
|
34
|
+
const name = directive.slice(4).trim();
|
|
35
|
+
if (!(name in defines)) {
|
|
36
|
+
throw new Error(`${shaderName} shader: unknown condition ${name}`);
|
|
37
|
+
}
|
|
38
|
+
stack.push({ keep: defines[name] === true });
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (directive === '#else') {
|
|
42
|
+
const frame = stack[stack.length - 1];
|
|
43
|
+
if (frame === undefined) throw new Error(`${shaderName} shader: #else outside #if`);
|
|
44
|
+
frame.keep = !frame.keep;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (directive === '#endif') {
|
|
48
|
+
if (stack.pop() === undefined) {
|
|
49
|
+
throw new Error(`${shaderName} shader: #endif outside #if`);
|
|
50
|
+
}
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (keeping()) kept.push(line);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (stack.length > 0) throw new Error(`${shaderName} shader: unterminated #if`);
|
|
57
|
+
return kept.join('\n');
|
|
58
|
+
}
|