@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,283 @@
|
|
|
1
|
+
import { FOG_GLSL } from './fog.js';
|
|
2
|
+
/**
|
|
3
|
+
* A thin, wet, iridescent film lying on a surface.
|
|
4
|
+
*
|
|
5
|
+
* The material an oil slick is made of, described without knowing what oil is.
|
|
6
|
+
* Flat dark geometry cannot do this job — it reads as a hole in the world, which
|
|
7
|
+
* is exactly how the first version looked. What makes a film read as *wet* is
|
|
8
|
+
* that it changes with the angle you see it from: almost black looking straight
|
|
9
|
+
* down, and a shifting sheen at a glance.
|
|
10
|
+
*
|
|
11
|
+
* Textureless, per the standing rule. The iridescence is a hue swept by the
|
|
12
|
+
* view angle plus a slow travelling ripple, both evaluated per fragment; the
|
|
13
|
+
* rainbow is generated rather than sampled.
|
|
14
|
+
*/
|
|
15
|
+
export const FILM_VERT = `#version 300 es
|
|
16
|
+
precision highp float;
|
|
17
|
+
|
|
18
|
+
layout(location = 0) in vec3 aPosition;
|
|
19
|
+
layout(location = 1) in vec3 aNormal;
|
|
20
|
+
layout(location = 2) in vec3 aColor;
|
|
21
|
+
/*
|
|
22
|
+
* Coverage, on the attribute the mesh format calls emissive.
|
|
23
|
+
*
|
|
24
|
+
* A film has no use for self-illumination, and it very much needs an edge that
|
|
25
|
+
* dissolves: the first oil was flat squares, and a hard straight edge is what made
|
|
26
|
+
* it read as a decal dropped on the world rather than a puddle lying in it. One
|
|
27
|
+
* float per vertex, 1 in the middle of a slick and 0 at its rim.
|
|
28
|
+
*/
|
|
29
|
+
layout(location = 3) in float aCoverage;
|
|
30
|
+
|
|
31
|
+
uniform mat4 uViewProj;
|
|
32
|
+
/* The mirrored camera's projection, so a film can sample the planar target the way water does. */
|
|
33
|
+
uniform mat4 uReflectionViewProj;
|
|
34
|
+
|
|
35
|
+
out vec3 vWorld;
|
|
36
|
+
out vec3 vNormal;
|
|
37
|
+
out vec3 vTint;
|
|
38
|
+
out vec4 vReflectionClip;
|
|
39
|
+
out float vCoverage;
|
|
40
|
+
|
|
41
|
+
void main() {
|
|
42
|
+
vWorld = aPosition;
|
|
43
|
+
vNormal = normalize(aNormal);
|
|
44
|
+
vTint = aColor;
|
|
45
|
+
vCoverage = aCoverage;
|
|
46
|
+
vReflectionClip = uReflectionViewProj * vec4(aPosition, 1.0);
|
|
47
|
+
gl_Position = uViewProj * vec4(aPosition, 1.0);
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
export const FILM_FRAG = `#version 300 es
|
|
51
|
+
precision highp float;
|
|
52
|
+
|
|
53
|
+
in vec3 vWorld;
|
|
54
|
+
in vec3 vNormal;
|
|
55
|
+
in vec3 vTint;
|
|
56
|
+
in vec4 vReflectionClip;
|
|
57
|
+
/*
|
|
58
|
+
* The scene mirrored across the plane this film lies on, and how much of it to show.
|
|
59
|
+
*
|
|
60
|
+
* **Sheen is iridescence and this is the image**, which is the split a consumer asked for after
|
|
61
|
+
* finding that raising sheen to make a road wetter only made it oilier. A wet street at night is
|
|
62
|
+
* defined by everything above it appearing twice, and no amount of interference pattern is that.
|
|
63
|
+
*
|
|
64
|
+
* The projection is the water shader's, unchanged and deliberately so: reproducing it outside the
|
|
65
|
+
* engine is the piece most likely to be subtly wrong and least likely to be noticed, since a
|
|
66
|
+
* mirror off by a small skew looks like a wet road until somebody puts a straight line across it.
|
|
67
|
+
*/
|
|
68
|
+
uniform sampler2D uReflectionMap;
|
|
69
|
+
uniform int uReflectionEnabled;
|
|
70
|
+
uniform float uReflectionStrength;
|
|
71
|
+
in float vCoverage;
|
|
72
|
+
|
|
73
|
+
uniform vec3 uCameraPos;
|
|
74
|
+
uniform float uTime;
|
|
75
|
+
/*
|
|
76
|
+
* The mirrored pass clips at the water plane, and it does so **in the fragment
|
|
77
|
+
* shader** rather than with gl_ClipDistance.
|
|
78
|
+
*
|
|
79
|
+
* That is not a style choice. Clip distances in WebGL2 need
|
|
80
|
+
* EXT_clip_cull_distance both enabled on the context and declared with an
|
|
81
|
+
* #extension line, and without the declaration the shader fails to *compile* —
|
|
82
|
+
* which, since programs are built when the renderer is constructed, takes the
|
|
83
|
+
* whole boot with it and leaves a black screen. This shader had never been
|
|
84
|
+
* compiled when it was written, so the mistake sat harmlessly in the file until
|
|
85
|
+
* the day it was wired to something. Discarding is what flat.ts does, it needs
|
|
86
|
+
* no extension, and a film is a thin translucent layer where the cost of a
|
|
87
|
+
* discarded fragment is nothing.
|
|
88
|
+
*/
|
|
89
|
+
uniform vec4 uClipPlane;
|
|
90
|
+
uniform int uClipEnabled;
|
|
91
|
+
${FOG_GLSL}
|
|
92
|
+
/** How strong the sheen is. Zero leaves a plain dark film. */
|
|
93
|
+
uniform float uSheen;
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* How rough the film's own surface is, 0 to 1, and how coarse that roughness is.
|
|
97
|
+
*
|
|
98
|
+
* **A film had exactly one finish before this: mirror.** That is right for standing water and
|
|
99
|
+
* wrong for the thing this pass is most used for, because a wet road is not a mirror — it is
|
|
100
|
+
* water lying *in* aggregate, and the stone underneath breaks the reflection into a smear. With
|
|
101
|
+
* no way to say so, a patch of film over a textured road met it at a hard rim: mirror on one
|
|
102
|
+
* side, stone on the other, with nothing able to cross it. Feathering the coverage cannot fix
|
|
103
|
+
* that, and it was tried — the alpha was never what the eye was reading.
|
|
104
|
+
*
|
|
105
|
+
* So the reflection is displaced by a noise field rather than blurred. **Displaced, because a
|
|
106
|
+
* blur is the wrong phenomenon**: a rough surface does not soften what it reflects, it scatters
|
|
107
|
+
* it, and a lamp on wet tarmac smears into a streak rather than becoming a soft disc. It is also
|
|
108
|
+
* what a blur cannot afford here — the mirror has no mip chain (see the \`textureLod\` note
|
|
109
|
+
* below), so softening it honestly would cost several taps where this costs none.
|
|
110
|
+
*
|
|
111
|
+
* \`uFilmRoughnessCycles\` is bumps to the metre, and it is the same quantity
|
|
112
|
+
* \`Renderer.setSurfaceRelief\` takes. **Matching it to the surface underneath is the point**:
|
|
113
|
+
* given the same field at the same scale, the water is broken up by the aggregate that the dry
|
|
114
|
+
* road beside it is showing, and the two stop being different materials.
|
|
115
|
+
*
|
|
116
|
+
* Zero is the mirror this pass has always been, exactly, so nothing that does not ask for
|
|
117
|
+
* roughness renders differently.
|
|
118
|
+
*/
|
|
119
|
+
uniform float uFilmRoughness;
|
|
120
|
+
uniform float uFilmRoughnessCycles;
|
|
121
|
+
|
|
122
|
+
out vec4 fragColor;
|
|
123
|
+
|
|
124
|
+
/** A hue wheel, without a texture. Standard 6-segment ramp. */
|
|
125
|
+
vec3 hue(float h) {
|
|
126
|
+
h = fract(h) * 6.0;
|
|
127
|
+
vec3 c = clamp(vec3(abs(h - 3.0) - 1.0, 2.0 - abs(h - 2.0), 2.0 - abs(h - 4.0)), 0.0, 1.0);
|
|
128
|
+
return c;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* The same value noise \`flat.ts\` builds its relief from, and deliberately the same.
|
|
133
|
+
*
|
|
134
|
+
* Copied rather than shared because these two shaders have no common include beyond the fog, and
|
|
135
|
+
* a film that used a *different* field would defeat the whole purpose of taking a cycle count:
|
|
136
|
+
* the water would be broken up by one pattern and the road by another, which is two materials
|
|
137
|
+
* again with extra steps.
|
|
138
|
+
*/
|
|
139
|
+
float filmHash(vec3 p) {
|
|
140
|
+
p = fract(p * 0.1031);
|
|
141
|
+
p += dot(p, p.zyx + 31.32);
|
|
142
|
+
return fract((p.x + p.y) * p.z);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
float filmNoise(vec3 p) {
|
|
146
|
+
vec3 i = floor(p);
|
|
147
|
+
vec3 f = fract(p);
|
|
148
|
+
vec3 u = f * f * (3.0 - 2.0 * f);
|
|
149
|
+
return mix(
|
|
150
|
+
mix(
|
|
151
|
+
mix(filmHash(i + vec3(0.0, 0.0, 0.0)), filmHash(i + vec3(1.0, 0.0, 0.0)), u.x),
|
|
152
|
+
mix(filmHash(i + vec3(0.0, 1.0, 0.0)), filmHash(i + vec3(1.0, 1.0, 0.0)), u.x),
|
|
153
|
+
u.y
|
|
154
|
+
),
|
|
155
|
+
mix(
|
|
156
|
+
mix(filmHash(i + vec3(0.0, 0.0, 1.0)), filmHash(i + vec3(1.0, 0.0, 1.0)), u.x),
|
|
157
|
+
mix(filmHash(i + vec3(0.0, 1.0, 1.0)), filmHash(i + vec3(1.0, 1.0, 1.0)), u.x),
|
|
158
|
+
u.y
|
|
159
|
+
),
|
|
160
|
+
u.z
|
|
161
|
+
);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
void main() {
|
|
165
|
+
if (uClipEnabled != 0 && dot(vec4(vWorld, 1.0), uClipPlane) < 0.0) discard;
|
|
166
|
+
|
|
167
|
+
vec3 view = normalize(uCameraPos - vWorld);
|
|
168
|
+
float facing = max(dot(normalize(vNormal), view), 0.0);
|
|
169
|
+
/*
|
|
170
|
+
* Fresnel-ish: dark looking straight down at it, bright at a grazing angle.
|
|
171
|
+
* This is the whole effect — it is what makes a wet patch look wet rather
|
|
172
|
+
* than looking like a patch of dark paint.
|
|
173
|
+
*/
|
|
174
|
+
float grazing = pow(1.0 - facing, 3.0);
|
|
175
|
+
|
|
176
|
+
/*
|
|
177
|
+
* A slow travelling interference, so the sheen crawls rather than sitting
|
|
178
|
+
* still. Two frequencies that do not divide each other, or the pattern
|
|
179
|
+
* repeats visibly across a long slick.
|
|
180
|
+
*/
|
|
181
|
+
float ripple =
|
|
182
|
+
sin(vWorld.x * 0.73 + vWorld.z * 0.41 + uTime * 0.55) *
|
|
183
|
+
cos(vWorld.z * 0.91 - vWorld.x * 0.29 - uTime * 0.37);
|
|
184
|
+
|
|
185
|
+
vec3 sheen = hue(grazing * 1.35 + ripple * 0.14 + 0.55);
|
|
186
|
+
/*
|
|
187
|
+
* Dark underneath, so the film always reads as *less* than the surface it lies on even where
|
|
188
|
+
* the sheen is strongest — but not so dark that it disappears.
|
|
189
|
+
*
|
|
190
|
+
* A slick that has just launched somebody has to be findable afterwards. It was rounded,
|
|
191
|
+
* feathered and iridescent — and at a fifth of an opaque tint on a pale deck at dusk,
|
|
192
|
+
* invisible. A hazard you cannot find is not a hazard, it is a trap.
|
|
193
|
+
*
|
|
194
|
+
* So the base is darker and the sheen has a floor: even looking straight down, where the
|
|
195
|
+
* Fresnel term is nearly nothing, a slick is a distinctly wet patch rather than a faint one.
|
|
196
|
+
*/
|
|
197
|
+
vec3 base = vTint * 0.9;
|
|
198
|
+
vec3 color = base + sheen * uSheen * (0.22 + grazing * 0.75);
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
* The mirrored scene, under the sheen rather than instead of it.
|
|
202
|
+
*
|
|
203
|
+
* Screen-space from the mirrored clip position, exactly as the water pass does it, with the
|
|
204
|
+
* same fade as the sample leaves the target: a reflection that stopped dead at the edge of its
|
|
205
|
+
* own buffer would draw a line across the road where nothing is.
|
|
206
|
+
*
|
|
207
|
+
* Weighted by the grazing term as well as by strength, because that is what a reflection does:
|
|
208
|
+
* a wet surface underfoot shows almost nothing and the same surface down the street shows the
|
|
209
|
+
* whole scene. Added before the fog so the image recedes with everything else in the frame.
|
|
210
|
+
*/
|
|
211
|
+
if (uReflectionEnabled != 0 && uReflectionStrength > 0.0 && vReflectionClip.w > 0.0) {
|
|
212
|
+
vec2 reflectionUv = vReflectionClip.xy / vReflectionClip.w * 0.5 + 0.5;
|
|
213
|
+
vec2 border = min(reflectionUv, 1.0 - reflectionUv);
|
|
214
|
+
float valid = smoothstep(0.0, 0.025, min(border.x, border.y));
|
|
215
|
+
/*
|
|
216
|
+
* An explicit level, not an implicit one, and the branch above is the whole reason.
|
|
217
|
+
*
|
|
218
|
+
* An implicit derivative inside control flow that is not provably uniform is what lets a
|
|
219
|
+
* compiler flatten the branch and pay for every arm — AGENTS.md, 2026-08-07 — and WGSL
|
|
220
|
+
* does not merely warn: the module fails to compile with "textureSample must only be
|
|
221
|
+
* called from uniform control flow", which invalidates the pipeline, which invalidates
|
|
222
|
+
* the command buffer, and the frame still presents. The fifth time on this branch. The
|
|
223
|
+
* mirror has no mip chain, so level 0 is the only level there is; the water shader
|
|
224
|
+
* reaches the same conclusion for the same lookup.
|
|
225
|
+
*/
|
|
226
|
+
/*
|
|
227
|
+
* The aggregate under the water, as a displacement of what the water shows.
|
|
228
|
+
*
|
|
229
|
+
* The gradient of the same field the road's relief uses, taken across the surface and used
|
|
230
|
+
* to push the lookup. **Stretched along the reflection rather than isotropic**, and that is
|
|
231
|
+
* the half that makes it read as a road: a reflection on a rough horizontal surface smears
|
|
232
|
+
* *towards the viewer*, because a bump tilts the ray in the plane it is already travelling
|
|
233
|
+
* in. Displacing in a circle gives frosted glass instead, which is a different wet thing.
|
|
234
|
+
*
|
|
235
|
+
* Scaled by the grazing term for the same reason the mirror is: looking straight down at a
|
|
236
|
+
* puddle the reflection is compressed into almost nothing and a displacement of it would be
|
|
237
|
+
* enormous, so the scatter has to fall off exactly where the image does.
|
|
238
|
+
*/
|
|
239
|
+
if (uFilmRoughness > 0.0) {
|
|
240
|
+
vec3 at = vWorld * uFilmRoughnessCycles;
|
|
241
|
+
float here = filmNoise(at);
|
|
242
|
+
vec2 slope = vec2(
|
|
243
|
+
filmNoise(at + vec3(0.5, 0.0, 0.0)) - here,
|
|
244
|
+
filmNoise(at + vec3(0.0, 0.0, 0.5)) - here
|
|
245
|
+
);
|
|
246
|
+
/* Along the view, which on a horizontal film is where the image runs. */
|
|
247
|
+
vec2 along = normalize(vec2(view.x, view.z) + vec2(1e-5, 0.0));
|
|
248
|
+
vec2 smear = along * dot(slope, along) * 3.0 + slope * 0.35;
|
|
249
|
+
reflectionUv += smear * uFilmRoughness * 0.016 * (0.2 + grazing * 0.8);
|
|
250
|
+
/* Re-fade at the border: a displaced sample can leave the target the original did not. */
|
|
251
|
+
vec2 movedBorder = min(reflectionUv, 1.0 - reflectionUv);
|
|
252
|
+
valid = min(valid, smoothstep(0.0, 0.025, min(movedBorder.x, movedBorder.y)));
|
|
253
|
+
}
|
|
254
|
+
vec3 mirrored = textureLod(uReflectionMap, clamp(reflectionUv, 0.0, 1.0), 0.0).rgb;
|
|
255
|
+
color = mix(color, mirrored, valid * uReflectionStrength * (0.25 + grazing * 0.75));
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// The same fog every other pass applies — and now literally the same code, which
|
|
259
|
+
// it was not: this ran its own curve while claiming otherwise, so a slick receded
|
|
260
|
+
// at a different rate than the deck it was lying on.
|
|
261
|
+
float fog = mediumFog(length(uCameraPos - vWorld), vWorld.y);
|
|
262
|
+
color = mix(color, mediumColor(), fog);
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* Alpha from coverage, squared.
|
|
266
|
+
*
|
|
267
|
+
* Squared because a linear ramp across the rim still reads as a visible band —
|
|
268
|
+
* the eye finds the constant-gradient edge. Squaring pushes the falloff outward
|
|
269
|
+
* so the slick has a soft shoulder and no perceptible boundary. The sheen fades
|
|
270
|
+
* with it, which is right: the thinnest part of a film is the least iridescent.
|
|
271
|
+
*/
|
|
272
|
+
/*
|
|
273
|
+
* Alpha from coverage, and the rim is what is squared — not the whole patch.
|
|
274
|
+
*
|
|
275
|
+
* Squaring the coverage outright made the *middle* translucent too, which is most of why a
|
|
276
|
+
* slick could not be found. The shoulder still needs to be soft, so the square is mixed in
|
|
277
|
+
* near the edge only: solid through the body, dissolving at the rim.
|
|
278
|
+
*/
|
|
279
|
+
float coverage = clamp(vCoverage, 0.0, 1.0);
|
|
280
|
+
float alpha = mix(coverage * coverage, coverage, 0.65) * 0.92;
|
|
281
|
+
fragColor = vec4(color, alpha);
|
|
282
|
+
}
|
|
283
|
+
`;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Procedural flames: camera-facing quads whose shape and colour come entirely
|
|
3
|
+
* from animated noise. No sprite sheets, no image assets — and no static
|
|
4
|
+
* geometry pretending to be fire either (AGENTS.md, fidelity).
|
|
5
|
+
*
|
|
6
|
+
* The flame silhouette is carved by thresholding rising turbulence against a
|
|
7
|
+
* tapered mask, so it licks and breaks up at the tip the way a real flame does
|
|
8
|
+
* rather than pulsing as a whole.
|
|
9
|
+
*/
|
|
10
|
+
/** Shared billboard vertex stage: used by fire, smoke and any future plume. */
|
|
11
|
+
export declare const PLUME_VERT = "#version 300 es\nlayout(location = 0) in vec3 aCenter;\nlayout(location = 1) in vec2 aCorner;\nlayout(location = 2) in vec2 aSize;\nlayout(location = 3) in float aSeed;\nlayout(location = 4) in float aBlade;\n\nuniform mat4 uViewProj;\nuniform vec3 uCameraPos;\nuniform float uTime;\n/** Amplitude of the size pulse; 0 keeps the quad a fixed size. */\nuniform float uSizePulse;\n/**\n * Horizontal wind, m/s. Plumes lean with it, increasingly toward their top \u2014\n * the base is anchored to whatever is burning, the crown is free. Sharing one\n * wind with the rest of the world is the point: smoke drifting one way while\n * foliage leans another is the clearest tell that a scene is a pile of effects\n * rather than a place.\n */\nuniform vec2 uWind;\n/**\n * Whole-batch offset. Plume centres live in a static buffer because braziers\n * never move; a batch that *does* move \u2014 a tornado \u2014 shifts by a uniform rather\n * than rewriting geometry every frame.\n */\nuniform vec3 uOrigin;\n/** How strongly this plume type answers the wind; smoke far more than flame. */\nuniform float uWindResponse;\n\nout vec2 vUv;\nout float vSeed;\nout float vDistance;\nout vec3 vWorldPos;\n\n/**\n * Plumes are not a constant size: a fire flares and dies back, a smoke column\n * swells and thins. Two out-of-phase sines, offset per plume, so the whole\n * effect breathes rather than only its interior pattern animating.\n */\nfloat sizePulse(float seed) {\n return 1.0 + uSizePulse * (\n sin(uTime * 1.7 + seed * 9.1) * 0.62 +\n sin(uTime * 3.3 + seed * 4.7) * 0.38\n );\n}\n\nvoid main() {\n // Height swells more than width, the way a real flame stretches upward.\n vec3 anchor = aCenter + uOrigin;\n\n /*\n * No billboarding at all: the blade's heading is fixed in the world.\n *\n * Each plume is drawn as a CROSS of two blades 90 degrees apart (see BLADES in\n * plumeRenderer), and aSeed advances by the golden ratio per plume, so the crosses\n * themselves are scattered by the golden angle rather than aligned into a grid.\n *\n * Nothing here reads the camera, and that is the fix. Anything that does - a full\n * billboard, or merely leaning edge-on cards toward the viewer - rotates geometry\n * as the camera moves, which is exactly what reads as flat: orbiting a fire showed\n * the same silhouette from every angle. A cross cannot track the viewer, so turning\n * around a fire genuinely brings one blade broadside while the other goes edge-on.\n * That is the parallax a volume has, and it is also why no blade needs to be turned\n * to stay visible - its partner is square-on whenever it is not.\n *\n * World up stays the vertical axis: a flame that tilts with the camera reads as a\n * decal.\n */\n vec3 up = vec3(0.0, 1.0, 0.0);\n float yaw = aSeed * 6.28318530718 + aBlade * 1.57079632679;\n vec3 right = vec3(cos(yaw), 0.0, sin(yaw));\n float pulse = sizePulse(aSeed);\n vec2 size = vec2(aSize.x * mix(1.0, pulse, 0.55), aSize.y * pulse);\n\n float rise = aCorner.y * 0.5 + 0.5;\n vec3 world = anchor\n + right * (aCorner.x * size.x)\n + up * (rise * size.y);\n\n // Quadratic in height: a column bends away from its anchor rather than\n // shearing uniformly, which would slide its base off the fire.\n world.xz += uWind * (uWindResponse * rise * rise * size.y);\n\n vUv = vec2(aCorner.x * 0.5 + 0.5, aCorner.y * 0.5 + 0.5);\n vSeed = aSeed;\n vDistance = distance(world, uCameraPos);\n vWorldPos = world;\n gl_Position = uViewProj * vec4(world, 1.0);\n}\n";
|
|
12
|
+
export declare const FIRE_FRAG = "#version 300 es\nprecision highp float;\n\nin vec2 vUv;\nin float vSeed;\nin float vDistance;\nin vec3 vWorldPos;\n\nuniform float uTime;\n\nuniform vec3 uFogColor;\n/** Extinction per metre **at the camera's own height**, not at the base. */\nuniform float uFogDensity;\n/** Reciprocal scale height of the haze, per metre. 0 is a uniform medium. */\nuniform float uFogHeightFalloff;\n/** The camera's height, so a fragment's own height is one subtraction away. */\nuniform float uFogEyeY;\nuniform vec3 uUnderwaterColor;\nuniform float uUnderwaterFogDensity;\nuniform float uUnderwaterFactor;\n/** 0 integrates a medium (Beer-Lambert); 1 ramps linearly between near and far. */\nuniform int uFogMode;\n/** Linear mode only: where haze begins, and where it is total. */\nuniform float uFogNear;\nuniform float uFogFar;\n\n/** What distance converges toward: the day's haze, or the water column. */\nvec3 mediumColor() {\n return mix(uFogColor, uUnderwaterColor, uUnderwaterFactor);\n}\n\n/**\n * How much of a surface standing at height pointY, dist metres away, is lost to\n * the medium in between. 0 is perfectly clear, 1 is the medium's own colour.\n */\nfloat mediumFog(float dist, float pointY) {\n /*\n * A depth ramp rather than a medium, for worlds authored against one.\n *\n * Beer-Lambert is the honest model and stays the default: it integrates something\n * physically there, so extinction begins at the eye and never stops. A linear near/far\n * fog is not that \u2014 it is a *look*, with a hard start distance before which the air is\n * perfectly clear, and it is what the fixed-function pipeline offered and what several\n * renderers still expose. Approximating one with the other is not a matter of tuning:\n * matched at half occlusion, the exponential curve still lays haze over everything\n * inside near, where the ramp lays none, and near-field colour desaturates toward the\n * fog colour with nothing to show for it.\n *\n * Height falloff has no meaning here and is ignored: a ramp is defined on distance\n * alone.\n */\n if (uFogMode == 1) {\n float span = max(uFogFar - uFogNear, 1e-4);\n float ramp = clamp((dist - uFogNear) / span, 0.0, 1.0);\n if (uUnderwaterFactor <= 0.0) return ramp;\n float wetLinear = uUnderwaterFogDensity * dist;\n return mix(ramp, 1.0 - exp2(-wetLinear * wetLinear * 1.442695), uUnderwaterFactor);\n }\n\n float t = (pointY - uFogEyeY) * uFogHeightFalloff;\n // (1 - e^-t)/t, which tends to 1 as the ray levels out. Guarded rather than\n // branched: at t = 0 the quotient is 0/0, and 1e-4 of a scale height is 8 mm.\n float denom = abs(t) < 1e-4 ? 1e-4 : t;\n float air = 1.0 - exp(-uFogDensity * dist * (1.0 - exp(-denom)) / denom);\n if (uUnderwaterFactor <= 0.0) return air;\n // Water is its own medium and keeps its own curve, so crossing the surface\n // changes nothing about how the water column reads.\n float wet = uUnderwaterFogDensity * dist;\n return mix(air, 1.0 - exp2(-wet * wet * 1.442695), uUnderwaterFactor);\n}\n\nuniform int uNoiseOctaves;\nuniform vec4 uClipPlane;\nuniform int uClipEnabled;\n\nout vec4 outColor;\n\nfloat hash21(vec2 p) {\n return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);\n}\n\nfloat valueNoise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n vec2 u = f * f * (3.0 - 2.0 * f);\n return mix(\n mix(hash21(i), hash21(i + vec2(1.0, 0.0)), u.x),\n mix(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(1.0, 1.0)), u.x),\n u.y\n );\n}\n\n/** Rising turbulence: octaves scrolled upward at different rates. */\nfloat turbulence(vec2 p, float t) {\n float v = valueNoise(p * 3.0 + vec2(0.0, -t * 1.9)) * 0.55;\n if (uNoiseOctaves == 1) return v / 0.55;\n v += valueNoise(p * 6.5 + vec2(t * 0.3, -t * 3.1)) * 0.28;\n if (uNoiseOctaves == 2) return v / 0.83;\n return v + valueNoise(p * 13.0 + vec2(-t * 0.2, -t * 4.6)) * 0.17;\n}\n\nvoid main() {\n if (uClipEnabled != 0 && dot(vec4(vWorldPos, 1.0), uClipPlane) < 0.0) discard;\n\n vec2 uv = vUv;\n float t = uTime + vSeed * 37.0;\n\n // Taper toward the tip and pinch the sides, so the quad never shows.\n float sides = 1.0 - abs(uv.x - 0.5) * 2.0;\n float taper = sides * (1.0 - uv.y * 0.72);\n if (taper <= 0.0) discard;\n\n // Sway: the column leans and wanders instead of standing to attention.\n float sway = (valueNoise(vec2(t * 0.55, vSeed * 11.0)) - 0.5) * 0.34 * uv.y;\n vec2 p = vec2(uv.x + sway, uv.y);\n\n float n = turbulence(p, t);\n // Flame body: noise must beat a threshold that rises with height, which is\n // what makes the tip break into separate licks.\n float body = n * taper * 1.9 - uv.y * 0.55;\n if (body <= 0.02) discard;\n\n // Colour ramp: white-hot core through yellow and orange to a dark red edge.\n float heat = clamp(body * 1.5, 0.0, 1.0);\n vec3 col = mix(vec3(0.62, 0.06, 0.02), vec3(1.0, 0.45, 0.06), smoothstep(0.0, 0.45, heat));\n col = mix(col, vec3(1.0, 0.85, 0.35), smoothstep(0.45, 0.75, heat));\n col = mix(col, vec3(1.0, 0.98, 0.88), smoothstep(0.78, 1.0, heat));\n\n float alpha = clamp(body * 2.2, 0.0, 1.0) * (1.0 - smoothstep(0.72, 1.0, uv.y));\n // Additive light must lose alpha as it scatters, or mixing its colour alone\n // still makes a distant flame glow through fog and through water.\n float fog = mediumFog(vDistance, vWorldPos.y);\n col = mix(col, mediumColor(), fog);\n alpha *= 1.0 - fog;\n\n outColor = vec4(col, alpha);\n}\n";
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { FOG_GLSL } from './fog.js';
|
|
2
|
+
/**
|
|
3
|
+
* Procedural flames: camera-facing quads whose shape and colour come entirely
|
|
4
|
+
* from animated noise. No sprite sheets, no image assets — and no static
|
|
5
|
+
* geometry pretending to be fire either (AGENTS.md, fidelity).
|
|
6
|
+
*
|
|
7
|
+
* The flame silhouette is carved by thresholding rising turbulence against a
|
|
8
|
+
* tapered mask, so it licks and breaks up at the tip the way a real flame does
|
|
9
|
+
* rather than pulsing as a whole.
|
|
10
|
+
*/
|
|
11
|
+
/** Shared billboard vertex stage: used by fire, smoke and any future plume. */
|
|
12
|
+
export const PLUME_VERT = `#version 300 es
|
|
13
|
+
layout(location = 0) in vec3 aCenter;
|
|
14
|
+
layout(location = 1) in vec2 aCorner;
|
|
15
|
+
layout(location = 2) in vec2 aSize;
|
|
16
|
+
layout(location = 3) in float aSeed;
|
|
17
|
+
layout(location = 4) in float aBlade;
|
|
18
|
+
|
|
19
|
+
uniform mat4 uViewProj;
|
|
20
|
+
uniform vec3 uCameraPos;
|
|
21
|
+
uniform float uTime;
|
|
22
|
+
/** Amplitude of the size pulse; 0 keeps the quad a fixed size. */
|
|
23
|
+
uniform float uSizePulse;
|
|
24
|
+
/**
|
|
25
|
+
* Horizontal wind, m/s. Plumes lean with it, increasingly toward their top —
|
|
26
|
+
* the base is anchored to whatever is burning, the crown is free. Sharing one
|
|
27
|
+
* wind with the rest of the world is the point: smoke drifting one way while
|
|
28
|
+
* foliage leans another is the clearest tell that a scene is a pile of effects
|
|
29
|
+
* rather than a place.
|
|
30
|
+
*/
|
|
31
|
+
uniform vec2 uWind;
|
|
32
|
+
/**
|
|
33
|
+
* Whole-batch offset. Plume centres live in a static buffer because braziers
|
|
34
|
+
* never move; a batch that *does* move — a tornado — shifts by a uniform rather
|
|
35
|
+
* than rewriting geometry every frame.
|
|
36
|
+
*/
|
|
37
|
+
uniform vec3 uOrigin;
|
|
38
|
+
/** How strongly this plume type answers the wind; smoke far more than flame. */
|
|
39
|
+
uniform float uWindResponse;
|
|
40
|
+
|
|
41
|
+
out vec2 vUv;
|
|
42
|
+
out float vSeed;
|
|
43
|
+
out float vDistance;
|
|
44
|
+
out vec3 vWorldPos;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Plumes are not a constant size: a fire flares and dies back, a smoke column
|
|
48
|
+
* swells and thins. Two out-of-phase sines, offset per plume, so the whole
|
|
49
|
+
* effect breathes rather than only its interior pattern animating.
|
|
50
|
+
*/
|
|
51
|
+
float sizePulse(float seed) {
|
|
52
|
+
return 1.0 + uSizePulse * (
|
|
53
|
+
sin(uTime * 1.7 + seed * 9.1) * 0.62 +
|
|
54
|
+
sin(uTime * 3.3 + seed * 4.7) * 0.38
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void main() {
|
|
59
|
+
// Height swells more than width, the way a real flame stretches upward.
|
|
60
|
+
vec3 anchor = aCenter + uOrigin;
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* No billboarding at all: the blade's heading is fixed in the world.
|
|
64
|
+
*
|
|
65
|
+
* Each plume is drawn as a CROSS of two blades 90 degrees apart (see BLADES in
|
|
66
|
+
* plumeRenderer), and aSeed advances by the golden ratio per plume, so the crosses
|
|
67
|
+
* themselves are scattered by the golden angle rather than aligned into a grid.
|
|
68
|
+
*
|
|
69
|
+
* Nothing here reads the camera, and that is the fix. Anything that does - a full
|
|
70
|
+
* billboard, or merely leaning edge-on cards toward the viewer - rotates geometry
|
|
71
|
+
* as the camera moves, which is exactly what reads as flat: orbiting a fire showed
|
|
72
|
+
* the same silhouette from every angle. A cross cannot track the viewer, so turning
|
|
73
|
+
* around a fire genuinely brings one blade broadside while the other goes edge-on.
|
|
74
|
+
* That is the parallax a volume has, and it is also why no blade needs to be turned
|
|
75
|
+
* to stay visible - its partner is square-on whenever it is not.
|
|
76
|
+
*
|
|
77
|
+
* World up stays the vertical axis: a flame that tilts with the camera reads as a
|
|
78
|
+
* decal.
|
|
79
|
+
*/
|
|
80
|
+
vec3 up = vec3(0.0, 1.0, 0.0);
|
|
81
|
+
float yaw = aSeed * 6.28318530718 + aBlade * 1.57079632679;
|
|
82
|
+
vec3 right = vec3(cos(yaw), 0.0, sin(yaw));
|
|
83
|
+
float pulse = sizePulse(aSeed);
|
|
84
|
+
vec2 size = vec2(aSize.x * mix(1.0, pulse, 0.55), aSize.y * pulse);
|
|
85
|
+
|
|
86
|
+
float rise = aCorner.y * 0.5 + 0.5;
|
|
87
|
+
vec3 world = anchor
|
|
88
|
+
+ right * (aCorner.x * size.x)
|
|
89
|
+
+ up * (rise * size.y);
|
|
90
|
+
|
|
91
|
+
// Quadratic in height: a column bends away from its anchor rather than
|
|
92
|
+
// shearing uniformly, which would slide its base off the fire.
|
|
93
|
+
world.xz += uWind * (uWindResponse * rise * rise * size.y);
|
|
94
|
+
|
|
95
|
+
vUv = vec2(aCorner.x * 0.5 + 0.5, aCorner.y * 0.5 + 0.5);
|
|
96
|
+
vSeed = aSeed;
|
|
97
|
+
vDistance = distance(world, uCameraPos);
|
|
98
|
+
vWorldPos = world;
|
|
99
|
+
gl_Position = uViewProj * vec4(world, 1.0);
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
export const FIRE_FRAG = `#version 300 es
|
|
103
|
+
precision highp float;
|
|
104
|
+
|
|
105
|
+
in vec2 vUv;
|
|
106
|
+
in float vSeed;
|
|
107
|
+
in float vDistance;
|
|
108
|
+
in vec3 vWorldPos;
|
|
109
|
+
|
|
110
|
+
uniform float uTime;
|
|
111
|
+
${FOG_GLSL}
|
|
112
|
+
uniform int uNoiseOctaves;
|
|
113
|
+
uniform vec4 uClipPlane;
|
|
114
|
+
uniform int uClipEnabled;
|
|
115
|
+
|
|
116
|
+
out vec4 outColor;
|
|
117
|
+
|
|
118
|
+
float hash21(vec2 p) {
|
|
119
|
+
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
float valueNoise(vec2 p) {
|
|
123
|
+
vec2 i = floor(p);
|
|
124
|
+
vec2 f = fract(p);
|
|
125
|
+
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
126
|
+
return mix(
|
|
127
|
+
mix(hash21(i), hash21(i + vec2(1.0, 0.0)), u.x),
|
|
128
|
+
mix(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(1.0, 1.0)), u.x),
|
|
129
|
+
u.y
|
|
130
|
+
);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** Rising turbulence: octaves scrolled upward at different rates. */
|
|
134
|
+
float turbulence(vec2 p, float t) {
|
|
135
|
+
float v = valueNoise(p * 3.0 + vec2(0.0, -t * 1.9)) * 0.55;
|
|
136
|
+
if (uNoiseOctaves == 1) return v / 0.55;
|
|
137
|
+
v += valueNoise(p * 6.5 + vec2(t * 0.3, -t * 3.1)) * 0.28;
|
|
138
|
+
if (uNoiseOctaves == 2) return v / 0.83;
|
|
139
|
+
return v + valueNoise(p * 13.0 + vec2(-t * 0.2, -t * 4.6)) * 0.17;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
void main() {
|
|
143
|
+
if (uClipEnabled != 0 && dot(vec4(vWorldPos, 1.0), uClipPlane) < 0.0) discard;
|
|
144
|
+
|
|
145
|
+
vec2 uv = vUv;
|
|
146
|
+
float t = uTime + vSeed * 37.0;
|
|
147
|
+
|
|
148
|
+
// Taper toward the tip and pinch the sides, so the quad never shows.
|
|
149
|
+
float sides = 1.0 - abs(uv.x - 0.5) * 2.0;
|
|
150
|
+
float taper = sides * (1.0 - uv.y * 0.72);
|
|
151
|
+
if (taper <= 0.0) discard;
|
|
152
|
+
|
|
153
|
+
// Sway: the column leans and wanders instead of standing to attention.
|
|
154
|
+
float sway = (valueNoise(vec2(t * 0.55, vSeed * 11.0)) - 0.5) * 0.34 * uv.y;
|
|
155
|
+
vec2 p = vec2(uv.x + sway, uv.y);
|
|
156
|
+
|
|
157
|
+
float n = turbulence(p, t);
|
|
158
|
+
// Flame body: noise must beat a threshold that rises with height, which is
|
|
159
|
+
// what makes the tip break into separate licks.
|
|
160
|
+
float body = n * taper * 1.9 - uv.y * 0.55;
|
|
161
|
+
if (body <= 0.02) discard;
|
|
162
|
+
|
|
163
|
+
// Colour ramp: white-hot core through yellow and orange to a dark red edge.
|
|
164
|
+
float heat = clamp(body * 1.5, 0.0, 1.0);
|
|
165
|
+
vec3 col = mix(vec3(0.62, 0.06, 0.02), vec3(1.0, 0.45, 0.06), smoothstep(0.0, 0.45, heat));
|
|
166
|
+
col = mix(col, vec3(1.0, 0.85, 0.35), smoothstep(0.45, 0.75, heat));
|
|
167
|
+
col = mix(col, vec3(1.0, 0.98, 0.88), smoothstep(0.78, 1.0, heat));
|
|
168
|
+
|
|
169
|
+
float alpha = clamp(body * 2.2, 0.0, 1.0) * (1.0 - smoothstep(0.72, 1.0, uv.y));
|
|
170
|
+
// Additive light must lose alpha as it scatters, or mixing its colour alone
|
|
171
|
+
// still makes a distant flame glow through fog and through water.
|
|
172
|
+
float fog = mediumFog(vDistance, vWorldPos.y);
|
|
173
|
+
col = mix(col, mediumColor(), fog);
|
|
174
|
+
alpha *= 1.0 - fog;
|
|
175
|
+
|
|
176
|
+
outColor = vec4(col, alpha);
|
|
177
|
+
}
|
|
178
|
+
`;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const DIRECTIONALSHADOW_GLSL: string;
|