@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,447 @@
|
|
|
1
|
+
/** Allocation-free selection and packing of point lights for a fixed shader budget. */
|
|
2
|
+
|
|
3
|
+
import { POINT_LIGHT_COS_INNER, POINT_LIGHT_COS_OUTER } from './clusteredLights.ts';
|
|
4
|
+
import { MAX_POINT_LIGHTS, POINT_SHADOW_POOL } from './lightBudget.ts';
|
|
5
|
+
|
|
6
|
+
export const DEFAULT_POINT_LIGHT_VIEW_RANGE = 180;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* How far out a light fades to nothing, in metres before its cull distance.
|
|
10
|
+
*
|
|
11
|
+
* One of the two boundaries a light can cross. The range is deliberately vast, so that
|
|
12
|
+
* a light never surprises the player by switching on in front of them — and a vaster
|
|
13
|
+
* range only helps if arriving at it is a ramp.
|
|
14
|
+
*/
|
|
15
|
+
const FADE_BAND_M = 40;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* How near the first excluded light has to be before the last chosen ones dim.
|
|
19
|
+
*
|
|
20
|
+
* The other boundary, and the one that actually flickers. A world carries more lights
|
|
21
|
+
* than `MAX_POINT_LIGHTS`, so somebody is always last, and membership used to be a
|
|
22
|
+
* step: the light holding the final slot contributed everything and the one behind it
|
|
23
|
+
* nothing. Ordinary camera drift traded them, and both the light and its shadow
|
|
24
|
+
* switched — reported, plainly, as lights that behave like on/off switches.
|
|
25
|
+
*
|
|
26
|
+
* Measured in a lamp-lit courtyard: six lamps and a brazier sit inside 8.7 m
|
|
27
|
+
* against a budget of eight, and a gate's two lights are 12.52 m away *each*,
|
|
28
|
+
* equidistant by construction. They straddle the cut, so exactly one of them was ever
|
|
29
|
+
* rendered and which one flipped as the camera orbited: one post shadowed, the
|
|
30
|
+
* identical one beside it bare.
|
|
31
|
+
*
|
|
32
|
+
* Hysteresis was tried here first and cannot fix this. A slower swap is still a swap
|
|
33
|
+
* and the loser is still hard off, and worse, an incumbent's advantage puts the
|
|
34
|
+
* newcomer's arrival *inside* the band rather than at its edge, so the crossfade it
|
|
35
|
+
* was paired with reintroduced the pop it exists to remove. Fading against the
|
|
36
|
+
* boundary subsumes it: at the tie both contenders are at nothing, so the trade is
|
|
37
|
+
* free, and nothing is sticky because nothing visible is at stake.
|
|
38
|
+
*
|
|
39
|
+
* Three metres dims only what is genuinely contested. A row of lamps every twelve
|
|
40
|
+
* metres never notices; two lights the same distance away always do. It is also long
|
|
41
|
+
* enough at running pace to cover a six-face bake, so a light finishes its shadow map
|
|
42
|
+
* while it is still too dim to show one.
|
|
43
|
+
*/
|
|
44
|
+
const CONTENTION_BAND_M = 3;
|
|
45
|
+
|
|
46
|
+
/** Sort keys for the shadow list, which is ordered independently of the shaded one. */
|
|
47
|
+
const shadowRank = new Float32Array(POINT_SHADOW_POOL);
|
|
48
|
+
|
|
49
|
+
export interface PointLightSource {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
z: number;
|
|
53
|
+
r: number;
|
|
54
|
+
g: number;
|
|
55
|
+
b: number;
|
|
56
|
+
/** Distance in metres at which illumination falls to zero. */
|
|
57
|
+
radius: number;
|
|
58
|
+
/** Colour modulation amplitude; zero keeps a steady source. */
|
|
59
|
+
flicker: number;
|
|
60
|
+
/** Shadow cubemap near plane in metres. */
|
|
61
|
+
shadowNear: number;
|
|
62
|
+
/** Physical emitter radius in metres, used to derive penumbra width. */
|
|
63
|
+
sourceRadius: number;
|
|
64
|
+
/**
|
|
65
|
+
* Where a spot points, as a world-space direction. Absent makes this a point light.
|
|
66
|
+
*
|
|
67
|
+
* Normalised here rather than trusted, because an un-normalised direction scales the cosine the
|
|
68
|
+
* cone is compared against and shows as a cone of the wrong width — which reads as the angle
|
|
69
|
+
* having been set wrong rather than as the vector.
|
|
70
|
+
*/
|
|
71
|
+
dirX?: number;
|
|
72
|
+
dirY?: number;
|
|
73
|
+
dirZ?: number;
|
|
74
|
+
/**
|
|
75
|
+
* The cone's inner and outer half-angles in degrees. Full brightness inside the inner, nothing
|
|
76
|
+
* outside the outer, a smooth edge between.
|
|
77
|
+
*
|
|
78
|
+
* **A narrow cone is not free**, and the cost is the shadow rather than the shading. A spot's
|
|
79
|
+
* shadow takes a layer of the same octahedral array a point light's does, and that layer covers
|
|
80
|
+
* the whole sphere — so a 45 degree cone uses about 15% of it, roughly 0.38 of the linear
|
|
81
|
+
* resolution, and a 10 degree cone about 0.13. Comfortable for a lamp; visibly coarse for a
|
|
82
|
+
* stage spotlight, which is the measurement that would justify giving spots a perspective map.
|
|
83
|
+
*/
|
|
84
|
+
coneInnerDeg?: number;
|
|
85
|
+
coneOuterDeg?: number;
|
|
86
|
+
/**
|
|
87
|
+
* Which photometric profile shapes this light, as a row of the atlas `setIesProfiles` uploaded.
|
|
88
|
+
*
|
|
89
|
+
* **Applies to a point light as well as a spot.** A bare bulb has a measured distribution too,
|
|
90
|
+
* and a fixture's own profile is usually a better description of it than any cone. Absent, or
|
|
91
|
+
* negative, is a light with no profile.
|
|
92
|
+
*/
|
|
93
|
+
iesProfile?: number;
|
|
94
|
+
/**
|
|
95
|
+
* Whether this light is worth a shadow cubemap. Defaults to true.
|
|
96
|
+
*
|
|
97
|
+
* A light whose `radius` is animated invalidates its own map every frame —
|
|
98
|
+
* `matchesSource` compares the range, because the range *is* the cube's far plane —
|
|
99
|
+
* so it is perpetually stale and takes bake budget forever. With a fixed budget of a
|
|
100
|
+
* couple of faces a frame, a handful of those starve every real lamp in the world,
|
|
101
|
+
* and only the one nearest light ever finishes a bake.
|
|
102
|
+
*
|
|
103
|
+
* That is not hypothetical: pulsing floor markers animate a squared fade into
|
|
104
|
+
* `radius` every frame, and a courtyard full of them left exactly one lamp casting.
|
|
105
|
+
* They are floor lighting 35 cm off the deck and were never meant to cast at all.
|
|
106
|
+
*/
|
|
107
|
+
castsShadow?: boolean;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface PointLightBuffer {
|
|
111
|
+
readonly positions: Float32Array;
|
|
112
|
+
readonly colors: Float32Array;
|
|
113
|
+
readonly radii: Float32Array;
|
|
114
|
+
/**
|
|
115
|
+
* Each selected light's emitter radius, in metres, packed beside its falloff radius.
|
|
116
|
+
*
|
|
117
|
+
* **A light has a size, and a highlight has to know it.** The shading treated every source as
|
|
118
|
+
* a mathematical point, so its reflection in a polished surface was a point too: smaller than
|
|
119
|
+
* a fragment, landing in some pixels and not their neighbours. That is the bright speckle a
|
|
120
|
+
* dark glossy model shows under a close lamp, and it cannot be filtered away afterwards
|
|
121
|
+
* because the information was never sampled. A real emitter subtends an angle, and a headlight
|
|
122
|
+
* a few centimetres from a wing subtends a very large one.
|
|
123
|
+
*
|
|
124
|
+
* `sourceRadius` already said this and only the shadow pass was listening, which is why the
|
|
125
|
+
* penumbra was right and the highlight was not.
|
|
126
|
+
*/
|
|
127
|
+
readonly sourceRadii: Float32Array;
|
|
128
|
+
/**
|
|
129
|
+
* How many sources were offered this frame, against the `count` that won a slot.
|
|
130
|
+
*
|
|
131
|
+
* **Reported from outside, and it turned an afternoon into a glance.** A scene was submitting
|
|
132
|
+
* 63 lights against a budget of 10, so the whole budget went to static scenery between 7 and
|
|
133
|
+
* 23 metres away and the rig that answered the music never got a slot. Nothing flickered and
|
|
134
|
+
* nothing warned, because the selection did exactly what it documents; the symptom reported by
|
|
135
|
+
* a person was "the lights are poor", which leads nobody to a light budget. The count had to be
|
|
136
|
+
* recovered by walking the array in a console.
|
|
137
|
+
*
|
|
138
|
+
* Reading it costs nothing and it is the only figure that makes the ratio visible: 63 offered
|
|
139
|
+
* and 10 bound is a scene to prune, 12 offered and 10 bound is a scene that is fine.
|
|
140
|
+
*/
|
|
141
|
+
considered: number;
|
|
142
|
+
count: number;
|
|
143
|
+
readonly sourceIndex: Int32Array;
|
|
144
|
+
/**
|
|
145
|
+
* How present each chosen light is, 0 to 1, against the two boundaries it can be
|
|
146
|
+
* crossing: the edge of view range, and the budget cut it shares with the nearest
|
|
147
|
+
* light that missed the set.
|
|
148
|
+
*
|
|
149
|
+
* Deliberately not folded into `colors`. Most of the shading is a colour multiply
|
|
150
|
+
* and would not care, but the emissive term is not — a lit inlay is dimmed by
|
|
151
|
+
* *whichever* lamp shadows it hardest, regardless of that lamp's colour, so a light
|
|
152
|
+
* arriving at zero brightness would still switch a shadow onto the start line. The
|
|
153
|
+
* weight has to reach the shader as itself.
|
|
154
|
+
*/
|
|
155
|
+
readonly weights: Float32Array;
|
|
156
|
+
/**
|
|
157
|
+
* Three per slot: where a spot points, normalised. Zeroes for a point light.
|
|
158
|
+
*
|
|
159
|
+
* Filled for every slot rather than only for spots, because a slot keeps whatever the last light
|
|
160
|
+
* to hold it wrote — and a stale direction on a light that is now a point is a cone pointing
|
|
161
|
+
* somewhere it was never aimed.
|
|
162
|
+
*/
|
|
163
|
+
readonly directions: Float32Array;
|
|
164
|
+
/** Two per slot: the cosine of the inner cone angle, then of the outer. */
|
|
165
|
+
readonly coneCos: Float32Array;
|
|
166
|
+
/** One per slot: a row of the photometric atlas, or −1 for a light with no profile. */
|
|
167
|
+
readonly iesProfiles: Float32Array;
|
|
168
|
+
/** Internal insertion-sort storage; exposed only to keep one flat object. */
|
|
169
|
+
readonly scratchDistance: Float32Array;
|
|
170
|
+
/**
|
|
171
|
+
* The nearest `POINT_SHADOW_POOL` lights, nearest first — a superset of the shaded
|
|
172
|
+
* ones, and the reason a light no longer pops when it enters the sampled set.
|
|
173
|
+
*
|
|
174
|
+
* Before the shadow pool every light owned a permanent cubemap, so being chosen for
|
|
175
|
+
* shading meant the shadow was already correct. Borrowed maps broke that: joining
|
|
176
|
+
* the set meant evicting somebody and baking six faces at two a frame. The pool has
|
|
177
|
+
* always had four slots more than the shader can bind; these are the lights they are
|
|
178
|
+
* for, kept baked *before* they are wanted.
|
|
179
|
+
*/
|
|
180
|
+
readonly shadowIndex: Int32Array;
|
|
181
|
+
shadowCount: number;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* A buffer for the selection to fill, sized to what the caller can actually bind.
|
|
186
|
+
*
|
|
187
|
+
* **`capacity` exists because clustered lighting can carry far more than the shader's uniform
|
|
188
|
+
* arrays.** The froxel table takes up to `MAX_CLUSTERED_LIGHTS`, and this helper used to hand it
|
|
189
|
+
* sixteen whatever a world offered — so the capability was real and unreachable through the one
|
|
190
|
+
* path every consumer uses. A consumer with `RenderQuality.clusteredLights` on asks for a wider
|
|
191
|
+
* buffer; everything else takes the default and is unchanged.
|
|
192
|
+
*
|
|
193
|
+
* **`scratchDistance` grows with it**, and that is not incidental: the shaded list is kept sorted
|
|
194
|
+
* in it, so a buffer wider than the array holding its distances writes past the end. It was sized
|
|
195
|
+
* from `POINT_SHADOW_POOL` because the pool happened to be the larger of the two.
|
|
196
|
+
*/
|
|
197
|
+
export function createPointLightBuffer(capacity: number = MAX_POINT_LIGHTS): PointLightBuffer {
|
|
198
|
+
const shaded = Math.max(1, Math.floor(capacity));
|
|
199
|
+
return {
|
|
200
|
+
positions: new Float32Array(shaded * 3),
|
|
201
|
+
colors: new Float32Array(shaded * 3),
|
|
202
|
+
radii: new Float32Array(shaded),
|
|
203
|
+
sourceRadii: new Float32Array(shaded),
|
|
204
|
+
considered: 0,
|
|
205
|
+
count: 0,
|
|
206
|
+
sourceIndex: new Int32Array(shaded),
|
|
207
|
+
weights: new Float32Array(shaded),
|
|
208
|
+
directions: new Float32Array(shaded * 3),
|
|
209
|
+
coneCos: new Float32Array(shaded * 2),
|
|
210
|
+
/* −1 rather than 0, because row 0 is a real fixture and a light that asked for none must not
|
|
211
|
+
be shaped by whichever profile happened to load first. */
|
|
212
|
+
iesProfiles: new Float32Array(shaded).fill(-1),
|
|
213
|
+
scratchDistance: new Float32Array(Math.max(shaded, POINT_SHADOW_POOL)),
|
|
214
|
+
shadowIndex: new Int32Array(POINT_SHADOW_POOL),
|
|
215
|
+
shadowCount: 0,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Select nearest lights whose influence may still be visible and pack them in
|
|
221
|
+
* shader order. The caller owns `out`; no sort arrays or temporary objects are
|
|
222
|
+
* created in this per-frame path.
|
|
223
|
+
*
|
|
224
|
+
* **Two points, because the two lists answer two questions.** `x, y, z` is where the frame is
|
|
225
|
+
* being *shaded* from — the camera — and it orders and culls the shaded list. `castX, castY,
|
|
226
|
+
* castZ` is where whatever might *cast* is standing, and it orders and culls the shadow pool.
|
|
227
|
+
* `AGENTS.md` had already decided which point the pool belongs to: *"a character's shadow only
|
|
228
|
+
* has to exist near the light they are standing at"* — they, not the viewer.
|
|
229
|
+
*
|
|
230
|
+
* They were one argument until 2026-08-25, and a third-person camera is exactly where that
|
|
231
|
+
* hurts: it sits behind its subject, so a fire the subject is standing next to got **no map at
|
|
232
|
+
* all** whenever the camera was further from it than the fire's radius. The scene stayed
|
|
233
|
+
* perfectly lit, which is why nobody could tell it from a bake that never ran.
|
|
234
|
+
*
|
|
235
|
+
* What it gives up: three more numbers on an already-long parameter list, spelled as numbers
|
|
236
|
+
* rather than a vector to match the point above it. What would make it wrong: a consumer with
|
|
237
|
+
* several casters far apart, which one point cannot describe — the pool would then want a set of
|
|
238
|
+
* reference points and a rank over the nearest of them, which is a bigger change than this one
|
|
239
|
+
* and is not what any consumer here has.
|
|
240
|
+
*
|
|
241
|
+
* The default is the shading point, so an existing caller selects bit-identically: `castX = x`
|
|
242
|
+
* makes the distance the *same arithmetic on the same operands*, not merely a close number.
|
|
243
|
+
*/
|
|
244
|
+
export function selectPointLights(
|
|
245
|
+
sources: readonly PointLightSource[],
|
|
246
|
+
x: number,
|
|
247
|
+
y: number,
|
|
248
|
+
z: number,
|
|
249
|
+
out: PointLightBuffer,
|
|
250
|
+
timeSeconds = 0,
|
|
251
|
+
viewRange = DEFAULT_POINT_LIGHT_VIEW_RANGE,
|
|
252
|
+
castX = x,
|
|
253
|
+
castY = y,
|
|
254
|
+
castZ = z,
|
|
255
|
+
): void {
|
|
256
|
+
out.count = 0;
|
|
257
|
+
out.shadowCount = 0;
|
|
258
|
+
/*
|
|
259
|
+
* How many the shaded list holds, read off the buffer rather than from the shader's budget.
|
|
260
|
+
* A caller that asked for a wider one gets it; the default is `MAX_POINT_LIGHTS` exactly.
|
|
261
|
+
*/
|
|
262
|
+
const shadedCapacity = out.radii.length;
|
|
263
|
+
/* Everything offered, whether or not it wins a slot or is even in range. See `considered`. */
|
|
264
|
+
out.considered = sources.length;
|
|
265
|
+
/*
|
|
266
|
+
* The nearest light that did not make the set: the boundary the last chosen ones
|
|
267
|
+
* fade against. `Infinity` while the world has fewer lights in range than the
|
|
268
|
+
* shader binds, which is the case where nothing is contested and nothing dims.
|
|
269
|
+
*/
|
|
270
|
+
let cutSq = Infinity;
|
|
271
|
+
|
|
272
|
+
for (let sourceIndex = 0; sourceIndex < sources.length; sourceIndex++) {
|
|
273
|
+
const light = sources[sourceIndex];
|
|
274
|
+
if (light === undefined) continue;
|
|
275
|
+
/*
|
|
276
|
+
* A light with no radius illuminates nothing, and it must not take a slot from
|
|
277
|
+
* one that does. Consumers switch sources on and off by their radius — an oil
|
|
278
|
+
* slick is dark until it catches, a floor marker until it is stood on — so a world
|
|
279
|
+
* carries far more sources than it ever lights at once, and without this a
|
|
280
|
+
* character standing among forty dark markers would have the braziers around them
|
|
281
|
+
* pushed out of the buffer by markers emitting nothing.
|
|
282
|
+
*/
|
|
283
|
+
if (light.radius <= 0) continue;
|
|
284
|
+
const dx = light.x - x;
|
|
285
|
+
const dy = light.y - y;
|
|
286
|
+
const dz = light.z - z;
|
|
287
|
+
const distanceSq = dx * dx + dy * dy + dz * dz;
|
|
288
|
+
const cullDistance = viewRange + light.radius;
|
|
289
|
+
if (distanceSq > cullDistance * cullDistance) continue;
|
|
290
|
+
|
|
291
|
+
/*
|
|
292
|
+
* Two lists, kept apart on purpose.
|
|
293
|
+
*
|
|
294
|
+
* The **shaded** list is the shader's nearest `MAX_POINT_LIGHTS`, culled at
|
|
295
|
+
* `viewRange + radius` so a light fades out rather than cutting at its own edge.
|
|
296
|
+
*
|
|
297
|
+
* The **shadow** list is who gets a cubemap, and it uses a different, stricter
|
|
298
|
+
* test: a light only qualifies inside its own radius, where the falloff
|
|
299
|
+
* `1 - dist / radius` means it is actually lighting anything. That is `decb3a2`'s
|
|
300
|
+
* rule — *"Acquisition now uses the same range test as release"* — which the pool
|
|
301
|
+
* rewrite lost by driving slots from the shaded list instead. A lamp a hundred
|
|
302
|
+
* metres away then takes a pool slot, thrashes it, and starves the lamp overhead
|
|
303
|
+
* of the map it needs: flashing squares when that bug first shipped, shadows that
|
|
304
|
+
* exist only near an emitter now.
|
|
305
|
+
*
|
|
306
|
+
* Sharing one sorted list is what made them drift apart, so they do not share one.
|
|
307
|
+
*/
|
|
308
|
+
let slot = out.count;
|
|
309
|
+
while (slot > 0 && (out.scratchDistance[slot - 1] ?? 0) > distanceSq) slot--;
|
|
310
|
+
if (slot >= shadedCapacity) {
|
|
311
|
+
// Rejected outright, so it is a candidate for the boundary the set fades against.
|
|
312
|
+
if (distanceSq < cutSq) cutSq = distanceSq;
|
|
313
|
+
} else {
|
|
314
|
+
// Full, so making room drops whoever was last off the end — and that is the
|
|
315
|
+
// nearest light not in the set unless something nearer is rejected later.
|
|
316
|
+
if (out.count >= shadedCapacity) {
|
|
317
|
+
const displaced = out.scratchDistance[shadedCapacity - 1] ?? Infinity;
|
|
318
|
+
if (displaced < cutSq) cutSq = displaced;
|
|
319
|
+
}
|
|
320
|
+
const last = Math.min(out.count, shadedCapacity - 1);
|
|
321
|
+
for (let index = last; index > slot; index--) {
|
|
322
|
+
out.scratchDistance[index] = out.scratchDistance[index - 1] ?? 0;
|
|
323
|
+
out.radii[index] = out.radii[index - 1] ?? 0;
|
|
324
|
+
out.sourceRadii[index] = out.sourceRadii[index - 1] ?? 0;
|
|
325
|
+
out.sourceIndex[index] = out.sourceIndex[index - 1] ?? -1;
|
|
326
|
+
for (let component = 0; component < 3; component++) {
|
|
327
|
+
out.positions[index * 3 + component] = out.positions[(index - 1) * 3 + component] ?? 0;
|
|
328
|
+
out.colors[index * 3 + component] = out.colors[(index - 1) * 3 + component] ?? 0;
|
|
329
|
+
out.directions[index * 3 + component] = out.directions[(index - 1) * 3 + component] ?? 0;
|
|
330
|
+
}
|
|
331
|
+
out.coneCos[index * 2] = out.coneCos[(index - 1) * 2] ?? 0;
|
|
332
|
+
out.coneCos[index * 2 + 1] = out.coneCos[(index - 1) * 2 + 1] ?? 0;
|
|
333
|
+
out.iesProfiles[index] = out.iesProfiles[index - 1] ?? -1;
|
|
334
|
+
}
|
|
335
|
+
out.scratchDistance[slot] = distanceSq;
|
|
336
|
+
out.sourceIndex[slot] = sourceIndex;
|
|
337
|
+
out.radii[slot] = light.radius;
|
|
338
|
+
out.sourceRadii[slot] = Math.max(light.sourceRadius, 0);
|
|
339
|
+
out.positions[slot * 3] = light.x;
|
|
340
|
+
out.positions[slot * 3 + 1] = light.y;
|
|
341
|
+
out.positions[slot * 3 + 2] = light.z;
|
|
342
|
+
const scale = flickerScale(light, timeSeconds);
|
|
343
|
+
out.colors[slot * 3] = light.r * scale;
|
|
344
|
+
out.colors[slot * 3 + 1] = light.g * scale;
|
|
345
|
+
out.colors[slot * 3 + 2] = light.b * scale;
|
|
346
|
+
|
|
347
|
+
/*
|
|
348
|
+
* **Normalised here rather than trusted**, because the cone is a comparison against a cosine
|
|
349
|
+
* and an un-normalised direction scales that cosine — so a vector of length 2 gives a cone of
|
|
350
|
+
* the wrong width, which reads as the angle having been set wrong rather than the vector.
|
|
351
|
+
* A zero-length direction is a light that declared no cone, and it takes the open pair.
|
|
352
|
+
*/
|
|
353
|
+
const dx = light.dirX ?? 0;
|
|
354
|
+
const dy = light.dirY ?? 0;
|
|
355
|
+
const dz = light.dirZ ?? 0;
|
|
356
|
+
const length = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
357
|
+
const aimed = length > 1e-6 && light.coneOuterDeg !== undefined;
|
|
358
|
+
const inverse = aimed ? 1 / length : 0;
|
|
359
|
+
out.directions[slot * 3] = dx * inverse;
|
|
360
|
+
out.directions[slot * 3 + 1] = dy * inverse;
|
|
361
|
+
out.directions[slot * 3 + 2] = dz * inverse;
|
|
362
|
+
if (aimed) {
|
|
363
|
+
/*
|
|
364
|
+
* Clamped so the inner edge never passes the outer. A caller that swaps them would
|
|
365
|
+
* otherwise get `smoothstep` with its edges inverted, which is a cone that is dark in the
|
|
366
|
+
* middle and bright at the rim — a picture nobody would attribute to two numbers being the
|
|
367
|
+
* wrong way round.
|
|
368
|
+
*/
|
|
369
|
+
const outerDeg = Math.min(89.9, Math.max(0, light.coneOuterDeg ?? 45));
|
|
370
|
+
const innerDeg = Math.min(outerDeg, Math.max(0, light.coneInnerDeg ?? outerDeg * 0.75));
|
|
371
|
+
out.coneCos[slot * 2] = Math.cos((innerDeg * Math.PI) / 180);
|
|
372
|
+
out.coneCos[slot * 2 + 1] = Math.cos((outerDeg * Math.PI) / 180);
|
|
373
|
+
} else {
|
|
374
|
+
out.coneCos[slot * 2] = POINT_LIGHT_COS_INNER;
|
|
375
|
+
out.coneCos[slot * 2 + 1] = POINT_LIGHT_COS_OUTER;
|
|
376
|
+
}
|
|
377
|
+
/*
|
|
378
|
+
* The profile applies to a point light as readily as to a spot: a bare bulb has a measured
|
|
379
|
+
* distribution too, and the arithmetic does not care whether a cone is also being applied.
|
|
380
|
+
* Restricting it to spots would be a smaller feature for no saving.
|
|
381
|
+
*/
|
|
382
|
+
out.iesProfiles[slot] = light.iesProfile ?? -1;
|
|
383
|
+
|
|
384
|
+
if (out.count < shadedCapacity) out.count++;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/*
|
|
388
|
+
* Inside its own radius, so it is lighting something and therefore has something
|
|
389
|
+
* to cast. Nearest first, capped at the pool, and independent of whether the
|
|
390
|
+
* shader had a slot left for it.
|
|
391
|
+
*
|
|
392
|
+
* **Measured from the caster and not from the camera**, and the guard and the rank read the
|
|
393
|
+
* same point on purpose: reading two would fill the pool nearest-to-camera and then evict
|
|
394
|
+
* the very lamp the subject is standing under, which is the shape of every pool bug this
|
|
395
|
+
* file already carries a paragraph about.
|
|
396
|
+
*
|
|
397
|
+
* Computed unconditionally rather than behind `castX === x`. At the default the operands are
|
|
398
|
+
* identical, so this is the same product of the same subtractions and the result is bit
|
|
399
|
+
* identical — a branch would buy a few flops per light and cost the guarantee that a caller
|
|
400
|
+
* who says nothing gets exactly what it got before.
|
|
401
|
+
*/
|
|
402
|
+
// A light that animates its radius, or is simply not meant to cast, never takes
|
|
403
|
+
// a slot: it would be stale every frame and starve the lamps that do cast.
|
|
404
|
+
if (light.castsShadow === false) continue;
|
|
405
|
+
const cx = light.x - castX;
|
|
406
|
+
const cy = light.y - castY;
|
|
407
|
+
const cz = light.z - castZ;
|
|
408
|
+
const castDistanceSq = cx * cx + cy * cy + cz * cz;
|
|
409
|
+
if (castDistanceSq >= light.radius * light.radius) continue;
|
|
410
|
+
let shadowSlot = out.shadowCount;
|
|
411
|
+
while (shadowSlot > 0 && (shadowRank[shadowSlot - 1] ?? 0) > castDistanceSq) shadowSlot--;
|
|
412
|
+
if (shadowSlot >= POINT_SHADOW_POOL) continue;
|
|
413
|
+
const lastShadow = Math.min(out.shadowCount, POINT_SHADOW_POOL - 1);
|
|
414
|
+
for (let index = lastShadow; index > shadowSlot; index--) {
|
|
415
|
+
shadowRank[index] = shadowRank[index - 1] ?? 0;
|
|
416
|
+
out.shadowIndex[index] = out.shadowIndex[index - 1] ?? -1;
|
|
417
|
+
}
|
|
418
|
+
shadowRank[shadowSlot] = castDistanceSq;
|
|
419
|
+
out.shadowIndex[shadowSlot] = sourceIndex;
|
|
420
|
+
if (out.shadowCount < POINT_SHADOW_POOL) out.shadowCount++;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/*
|
|
424
|
+
* How present each of them is, now that the set — and with it the boundary — is
|
|
425
|
+
* known. A second pass over at most eight entries, which is why the cut can be a
|
|
426
|
+
* fact about the whole frame rather than a guess made light by light.
|
|
427
|
+
*
|
|
428
|
+
* The two boundaries are independent and a light can be near both, so it takes
|
|
429
|
+
* whichever says it is fainter.
|
|
430
|
+
*/
|
|
431
|
+
const cut = Math.sqrt(cutSq);
|
|
432
|
+
for (let index = 0; index < out.count; index++) {
|
|
433
|
+
const distance = Math.sqrt(out.scratchDistance[index] ?? 0);
|
|
434
|
+
const cullDistance = viewRange + (out.radii[index] ?? 0);
|
|
435
|
+
const arriving = (cullDistance - distance) / FADE_BAND_M;
|
|
436
|
+
const contested = (cut - distance) / CONTENTION_BAND_M;
|
|
437
|
+
out.weights[index] = Math.max(0, Math.min(1, arriving, contested));
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
function flickerScale(light: PointLightSource, timeSeconds: number): number {
|
|
442
|
+
if (light.flicker <= 0) return 1;
|
|
443
|
+
const phase = light.x * 0.7 + light.z * 1.3;
|
|
444
|
+
const wobble =
|
|
445
|
+
Math.sin(timeSeconds * 11.3 + phase) * 0.55 + Math.sin(timeSeconds * 27.7 + phase * 2.1) * 0.45;
|
|
446
|
+
return 1 + light.flicker * wobble;
|
|
447
|
+
}
|