@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,76 @@
|
|
|
1
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
2
|
+
import type { TranslucentMeshOptions } from './backend/webgl2/renderer.ts';
|
|
3
|
+
/**
|
|
4
|
+
* The frame's translucent draws, held so they can be submitted more than once.
|
|
5
|
+
*
|
|
6
|
+
* **Order-independent transparency needs the same geometry in two passes** — one accumulating
|
|
7
|
+
* weighted colour, one multiplying revealage — and they are two blend states, which a single pass
|
|
8
|
+
* cannot hold without a second fragment output. Writing both from one pass would mean another
|
|
9
|
+
* `flatFrag` permutation, measured at about 247 KB gzipped and paid by every consumer whether or
|
|
10
|
+
* not they enable the effect. So the geometry is submitted twice instead, and this is what makes
|
|
11
|
+
* that possible in a renderer that otherwise draws immediately.
|
|
12
|
+
*
|
|
13
|
+
* **Everything a draw carries is copied, and that is the whole correctness of this file.** Callers
|
|
14
|
+
* build their model matrix into a scratch they reuse — `rings.ts` submits the same `Float32Array` a
|
|
15
|
+
* thousand times with different contents — so a queue holding the reference would replay every
|
|
16
|
+
* draw wearing the last transform. That is a plausible picture rather than an obviously broken
|
|
17
|
+
* one, which is the kind that gets blamed on the blending.
|
|
18
|
+
*
|
|
19
|
+
* **Records are pooled and never released.** A translucent set is submitted every frame and
|
|
20
|
+
* `AGENTS.md` forbids allocating in the frame loop, so `reset` returns the count to zero and keeps
|
|
21
|
+
* the storage: a steady scene allocates on its first frame and never again.
|
|
22
|
+
*/
|
|
23
|
+
/** One recorded draw. The fields are the arguments `drawTranslucentMesh` was called with. */
|
|
24
|
+
export interface TranslucentDraw {
|
|
25
|
+
/** The mesh handle, held by reference — the caller does not rebuild one per frame. */
|
|
26
|
+
mesh: unknown;
|
|
27
|
+
/** A copy, for the reason this file exists. */
|
|
28
|
+
readonly model: Float32Array;
|
|
29
|
+
opacity: number;
|
|
30
|
+
lit: boolean;
|
|
31
|
+
fog: boolean;
|
|
32
|
+
toneMapped: boolean;
|
|
33
|
+
depthWrite: boolean;
|
|
34
|
+
depthLayer: number;
|
|
35
|
+
/** Null where the draw asked for no tint; otherwise a copy, like the matrix. */
|
|
36
|
+
tint: Float32Array | null;
|
|
37
|
+
/**
|
|
38
|
+
* How far this draw bends what is behind it, 0 for not at all.
|
|
39
|
+
*
|
|
40
|
+
* **Carried rather than dropped, and that is what this field is for.** Order-independent
|
|
41
|
+
* transparency replays this set twice; a queue that forgot these would give a pane that refracts
|
|
42
|
+
* under sorted blending and stands clear under OIT, which reads as a bug in the transparency
|
|
43
|
+
* mode rather than as a queue that lost a field.
|
|
44
|
+
*/
|
|
45
|
+
refraction: number;
|
|
46
|
+
/** What survives one metre of the medium. Null where the draw named none; otherwise a copy. */
|
|
47
|
+
refractTint: Float32Array | null;
|
|
48
|
+
thicknessM: number;
|
|
49
|
+
}
|
|
50
|
+
export declare class TranslucentQueue {
|
|
51
|
+
private readonly pool;
|
|
52
|
+
private count;
|
|
53
|
+
/** How many draws this frame has recorded. */
|
|
54
|
+
get length(): number;
|
|
55
|
+
/** How many records are pooled, which a test uses to assert a steady scene stops allocating. */
|
|
56
|
+
get capacity(): number;
|
|
57
|
+
/**
|
|
58
|
+
* Take a copy of one draw.
|
|
59
|
+
*
|
|
60
|
+
* The defaults match `drawTranslucentMesh`'s own, so a queued draw and an immediate one are the
|
|
61
|
+
* same draw — a divergence here would be a scene that changes when the effect is switched on for
|
|
62
|
+
* reasons that have nothing to do with transparency.
|
|
63
|
+
*/
|
|
64
|
+
record(mesh: unknown, model: ReadonlyMat4, opacity: number, options: TranslucentMeshOptions): void;
|
|
65
|
+
/**
|
|
66
|
+
* Walk what was recorded, in the order it arrived.
|
|
67
|
+
*
|
|
68
|
+
* **Walkable more than once**, which is the reason this exists: the accumulation and the
|
|
69
|
+
* revealage are two passes over the same set, and a queue that could only be drained once would
|
|
70
|
+
* give the second a different set from the first. Order is preserved for determinism rather than
|
|
71
|
+
* for correctness — the whole point of the effect is that the result does not depend on it.
|
|
72
|
+
*/
|
|
73
|
+
replay(each: (draw: TranslucentDraw) => void): void;
|
|
74
|
+
/** Empty it for the next frame, keeping the storage. */
|
|
75
|
+
reset(): void;
|
|
76
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
function newRecord() {
|
|
2
|
+
return {
|
|
3
|
+
mesh: null,
|
|
4
|
+
model: new Float32Array(16),
|
|
5
|
+
opacity: 1,
|
|
6
|
+
lit: true,
|
|
7
|
+
fog: true,
|
|
8
|
+
toneMapped: true,
|
|
9
|
+
depthWrite: true,
|
|
10
|
+
depthLayer: 0,
|
|
11
|
+
tint: null,
|
|
12
|
+
tintStore: new Float32Array(3),
|
|
13
|
+
refraction: 0,
|
|
14
|
+
refractTint: null,
|
|
15
|
+
thicknessM: 0,
|
|
16
|
+
refractTintStore: new Float32Array(3),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export class TranslucentQueue {
|
|
20
|
+
pool = [];
|
|
21
|
+
count = 0;
|
|
22
|
+
/** How many draws this frame has recorded. */
|
|
23
|
+
get length() {
|
|
24
|
+
return this.count;
|
|
25
|
+
}
|
|
26
|
+
/** How many records are pooled, which a test uses to assert a steady scene stops allocating. */
|
|
27
|
+
get capacity() {
|
|
28
|
+
return this.pool.length;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Take a copy of one draw.
|
|
32
|
+
*
|
|
33
|
+
* The defaults match `drawTranslucentMesh`'s own, so a queued draw and an immediate one are the
|
|
34
|
+
* same draw — a divergence here would be a scene that changes when the effect is switched on for
|
|
35
|
+
* reasons that have nothing to do with transparency.
|
|
36
|
+
*/
|
|
37
|
+
record(mesh, model, opacity, options) {
|
|
38
|
+
let record = this.pool[this.count];
|
|
39
|
+
if (record === undefined) {
|
|
40
|
+
record = newRecord();
|
|
41
|
+
this.pool.push(record);
|
|
42
|
+
}
|
|
43
|
+
record.mesh = mesh;
|
|
44
|
+
record.model.set(model);
|
|
45
|
+
record.opacity = Math.min(opacity, 1);
|
|
46
|
+
record.lit = options.lit ?? true;
|
|
47
|
+
record.fog = options.fog ?? true;
|
|
48
|
+
record.toneMapped = options.toneMapped ?? true;
|
|
49
|
+
record.depthWrite = options.depthWrite ?? true;
|
|
50
|
+
record.depthLayer = options.depthLayer ?? 0;
|
|
51
|
+
const tint = options.tint ?? null;
|
|
52
|
+
if (tint === null) {
|
|
53
|
+
record.tint = null;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
record.tintStore.set(tint);
|
|
57
|
+
record.tint = record.tintStore;
|
|
58
|
+
}
|
|
59
|
+
record.refraction = options.refraction ?? 0;
|
|
60
|
+
record.thicknessM = options.thicknessM ?? 0;
|
|
61
|
+
const refractTint = options.refractTint ?? null;
|
|
62
|
+
if (refractTint === null) {
|
|
63
|
+
record.refractTint = null;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
record.refractTintStore.set(refractTint);
|
|
67
|
+
record.refractTint = record.refractTintStore;
|
|
68
|
+
}
|
|
69
|
+
this.count++;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Walk what was recorded, in the order it arrived.
|
|
73
|
+
*
|
|
74
|
+
* **Walkable more than once**, which is the reason this exists: the accumulation and the
|
|
75
|
+
* revealage are two passes over the same set, and a queue that could only be drained once would
|
|
76
|
+
* give the second a different set from the first. Order is preserved for determinism rather than
|
|
77
|
+
* for correctness — the whole point of the effect is that the result does not depend on it.
|
|
78
|
+
*/
|
|
79
|
+
replay(each) {
|
|
80
|
+
for (let i = 0; i < this.count; i++) {
|
|
81
|
+
const record = this.pool[i];
|
|
82
|
+
if (record !== undefined)
|
|
83
|
+
each(record);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Empty it for the next frame, keeping the storage. */
|
|
87
|
+
reset() {
|
|
88
|
+
this.count = 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How many lights a build of the lit shader declares room for.
|
|
3
|
+
*
|
|
4
|
+
* Two numbers rather than one because they buy different things and cost differently: a point
|
|
5
|
+
* light is ten uniform arrays with point shadows off and twenty with them on, a rectangle is six
|
|
6
|
+
* and fourteen. A scene with four lamps and one window wants a different pair from one with
|
|
7
|
+
* sixteen lamps and no windows, and until this existed neither could ask.
|
|
8
|
+
*/
|
|
9
|
+
export interface LightBudget {
|
|
10
|
+
/** Slots in every `uLight*` array, and the bound of the light loop. `MAX_LIGHTS` in the source. */
|
|
11
|
+
readonly maxLights: number;
|
|
12
|
+
/** Slots in every `uAreaLight*` array. `MAX_AREA_LIGHTS` in the source. */
|
|
13
|
+
readonly maxAreaLights: number;
|
|
14
|
+
}
|
|
15
|
+
/** What the engine declares when nobody says otherwise, and what the generated WGSL is built at. */
|
|
16
|
+
export declare const FULL_LIGHT_BUDGET: LightBudget;
|
|
17
|
+
/**
|
|
18
|
+
* What WebGL2 guarantees every conforming implementation offers a fragment shader.
|
|
19
|
+
*
|
|
20
|
+
* Not a number to design against on any particular device — a desktop part reports thousands and
|
|
21
|
+
* an Adreno 740 reports 256 — but the floor beneath all of them, and therefore the only number a
|
|
22
|
+
* budget can be called *reachable* against. `uniformVectorBudget.test.ts` asserts the ladder's
|
|
23
|
+
* last rung fits inside it with every feature still compiled in.
|
|
24
|
+
*/
|
|
25
|
+
export declare const GUARANTEED_FRAGMENT_UNIFORM_VECTORS = 224;
|
|
26
|
+
/**
|
|
27
|
+
* What one build of a shader spends, in rows of the uniform grid, counted from its own source.
|
|
28
|
+
*
|
|
29
|
+
* **Counted rather than stated, and that is the whole point of this function.** The alternative is
|
|
30
|
+
* a constant somebody measured once, and a constant measured once against a shader that moves is a
|
|
31
|
+
* black screen waiting for the next uniform somebody adds. A consumer that had to work around this
|
|
32
|
+
* wrote the same counter over its vendored copy of the engine for exactly that reason.
|
|
33
|
+
*
|
|
34
|
+
* **It is an upper bound, not the driver's own answer.** GLSL ES 3.00 Appendix A lets an
|
|
35
|
+
* implementation pack loose scalars and small vectors together — four `float`s can share one row —
|
|
36
|
+
* and this counts a row each. Arrays are exact, because Appendix A gives an array a whole row per
|
|
37
|
+
* element whatever its base type, which is why a `float uLightRadius[16]` costs the same sixteen
|
|
38
|
+
* rows a `vec3` array of sixteen does and why the light arrays dominate everything else here.
|
|
39
|
+
*
|
|
40
|
+
* Erring high is the direction that is safe to be wrong in: a build this says fits will link, and a
|
|
41
|
+
* build this says will not fit may still have linked — which costs one rung of the ladder in a
|
|
42
|
+
* marginal case and never costs a picture. The driver is the authority either way, which is why
|
|
43
|
+
* `Renderer` also catches the link failure rather than trusting this number alone.
|
|
44
|
+
*/
|
|
45
|
+
export declare function countUniformVectors(source: string): number;
|
|
46
|
+
/**
|
|
47
|
+
* Every light budget worth trying, largest first.
|
|
48
|
+
*
|
|
49
|
+
* **A ladder rather than arithmetic**, because the numbers are a picture decision and not a
|
|
50
|
+
* solution to an inequality: halving the lamps a scene can shade is a visible change and the steps
|
|
51
|
+
* are where somebody thought about it. Each rung roughly halves what the arrays cost, and the last
|
|
52
|
+
* one fits the whole shader — point shadows, area lights and all — inside
|
|
53
|
+
* `GUARANTEED_FRAGMENT_UNIFORM_VECTORS`, so there is a rung for every conforming device rather
|
|
54
|
+
* than a floor the engine cannot reach.
|
|
55
|
+
*/
|
|
56
|
+
export declare const LIGHT_BUDGET_LADDER: readonly LightBudget[];
|
|
57
|
+
/**
|
|
58
|
+
* The next rung down from a budget, or null when there is nothing smaller to try.
|
|
59
|
+
*
|
|
60
|
+
* For the caller that has been refused by the driver rather than by arithmetic: `planLightBudget`
|
|
61
|
+
* counts an upper bound, so a build it passed can still fail to link, and the only honest answer to
|
|
62
|
+
* a refusal is to ask for less. A budget between rungs — a consumer's own ceiling — steps to the
|
|
63
|
+
* largest rung strictly under it.
|
|
64
|
+
*/
|
|
65
|
+
export declare function nextLightBudget(budget: LightBudget): LightBudget | null;
|
|
66
|
+
/** What `planLightBudget` decided, and what it decided it from. */
|
|
67
|
+
export interface PlannedLightBudget {
|
|
68
|
+
/** The budget to build at. Never larger than the ceiling it was given. */
|
|
69
|
+
readonly budget: LightBudget;
|
|
70
|
+
/** That budget's source, already built — the caller compiles this rather than rebuilding it. */
|
|
71
|
+
readonly source: string;
|
|
72
|
+
/** What `countUniformVectors` makes of that source. */
|
|
73
|
+
readonly vectors: number;
|
|
74
|
+
/** Whether the ceiling itself fits, so a caller knows whether to say anything out loud. */
|
|
75
|
+
readonly fits: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* What the ceiling would have spent, for the sentence a caller prints when it could not have it.
|
|
78
|
+
*
|
|
79
|
+
* Carried rather than left to the caller to re-derive, because re-deriving it means building the
|
|
80
|
+
* whole source a second time — 1.7 ms, measured, on the one path that is already the slow one.
|
|
81
|
+
*/
|
|
82
|
+
readonly ceilingVectors: number;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The largest budget at or under `ceiling` whose shader fits this device's fragment uniform grid.
|
|
86
|
+
*
|
|
87
|
+
* **Why the engine does this rather than the consumer.** `flat` at the full budget declares 440
|
|
88
|
+
* rows and an Adreno 740 offers 256, so the program does not link, `new WebGL2Renderer` throws,
|
|
89
|
+
* and a game that awaited `createRenderer` gets no renderer, no reason and no frame — the page's
|
|
90
|
+
* background colour for as long as the player is willing to look at it. Reported from outside
|
|
91
|
+
* exactly that way. The only lever a consumer had was to switch point shadows off, which pays a
|
|
92
|
+
* whole feature to save 192 of the 184 rows that needed saving, and still cannot reach a
|
|
93
|
+
* conforming 224-row device: the lit path without point shadows is 248.
|
|
94
|
+
*
|
|
95
|
+
* Sizing the arrays instead keeps the feature and fits the part: 8 lights and 2 rectangles is 252
|
|
96
|
+
* rows **with** point shadows compiled in.
|
|
97
|
+
*
|
|
98
|
+
* Walking the ladder costs one shader build and one count per rung — about 1.7 ms each, measured —
|
|
99
|
+
* and a device with room spends exactly one, because the first rung is the ceiling and it fits.
|
|
100
|
+
*
|
|
101
|
+
* Returns the last rung when nothing fits, with `fits: false`. That is not a failure to report
|
|
102
|
+
* here: this counts an upper bound (see `countUniformVectors`) and the driver may well link what
|
|
103
|
+
* this says it will not, so the caller tries it and lets the link be the answer.
|
|
104
|
+
*/
|
|
105
|
+
export declare function planLightBudget(limitVectors: number, ceiling: LightBudget, build: (budget: LightBudget) => string): PlannedLightBudget;
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/** What a fragment shader's uniforms cost against `MAX_FRAGMENT_UNIFORM_VECTORS`, counted from it. */
|
|
2
|
+
import { MAX_AREA_LIGHTS } from './areaLights.js';
|
|
3
|
+
import { MAX_POINT_LIGHTS } from './lightBudget.js';
|
|
4
|
+
/** What the engine declares when nobody says otherwise, and what the generated WGSL is built at. */
|
|
5
|
+
export const FULL_LIGHT_BUDGET = Object.freeze({
|
|
6
|
+
maxLights: MAX_POINT_LIGHTS,
|
|
7
|
+
maxAreaLights: MAX_AREA_LIGHTS,
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* What WebGL2 guarantees every conforming implementation offers a fragment shader.
|
|
11
|
+
*
|
|
12
|
+
* Not a number to design against on any particular device — a desktop part reports thousands and
|
|
13
|
+
* an Adreno 740 reports 256 — but the floor beneath all of them, and therefore the only number a
|
|
14
|
+
* budget can be called *reachable* against. `uniformVectorBudget.test.ts` asserts the ladder's
|
|
15
|
+
* last rung fits inside it with every feature still compiled in.
|
|
16
|
+
*/
|
|
17
|
+
export const GUARANTEED_FRAGMENT_UNIFORM_VECTORS = 224;
|
|
18
|
+
/**
|
|
19
|
+
* How many rows of the uniform grid one variable of each type occupies.
|
|
20
|
+
*
|
|
21
|
+
* A matrix is one row per column; everything else is one row. Samplers are absent deliberately:
|
|
22
|
+
* they are opaque handles counted against `MAX_TEXTURE_IMAGE_UNITS`, which `renderer.ts` budgets
|
|
23
|
+
* separately, and `countUniformVectors` skips them by name rather than by looking here.
|
|
24
|
+
*/
|
|
25
|
+
const ROWS = Object.freeze({
|
|
26
|
+
float: 1,
|
|
27
|
+
int: 1,
|
|
28
|
+
uint: 1,
|
|
29
|
+
bool: 1,
|
|
30
|
+
vec2: 1,
|
|
31
|
+
ivec2: 1,
|
|
32
|
+
uvec2: 1,
|
|
33
|
+
bvec2: 1,
|
|
34
|
+
vec3: 1,
|
|
35
|
+
ivec3: 1,
|
|
36
|
+
uvec3: 1,
|
|
37
|
+
bvec3: 1,
|
|
38
|
+
vec4: 1,
|
|
39
|
+
ivec4: 1,
|
|
40
|
+
uvec4: 1,
|
|
41
|
+
bvec4: 1,
|
|
42
|
+
mat2: 2,
|
|
43
|
+
mat3: 3,
|
|
44
|
+
mat4: 4,
|
|
45
|
+
mat2x3: 2,
|
|
46
|
+
mat2x4: 2,
|
|
47
|
+
mat3x2: 3,
|
|
48
|
+
mat3x4: 3,
|
|
49
|
+
mat4x2: 4,
|
|
50
|
+
mat4x3: 4,
|
|
51
|
+
});
|
|
52
|
+
/** `uniform [precision] type name[size];`, which is the only form this engine's shaders use. */
|
|
53
|
+
const DECLARATION = /^\s*uniform\s+(?:(?:highp|mediump|lowp)\s+)?([A-Za-z0-9_]+)\s+([A-Za-z0-9_]+)\s*(?:\[\s*([A-Za-z0-9_]+)\s*\])?\s*;/;
|
|
54
|
+
/** `#define NAME 12`, and `#define A B` where B is already known. */
|
|
55
|
+
const DEFINE = /^#define\s+([A-Za-z_][A-Za-z0-9_]*)\s+(.+)$/;
|
|
56
|
+
/**
|
|
57
|
+
* What one build of a shader spends, in rows of the uniform grid, counted from its own source.
|
|
58
|
+
*
|
|
59
|
+
* **Counted rather than stated, and that is the whole point of this function.** The alternative is
|
|
60
|
+
* a constant somebody measured once, and a constant measured once against a shader that moves is a
|
|
61
|
+
* black screen waiting for the next uniform somebody adds. A consumer that had to work around this
|
|
62
|
+
* wrote the same counter over its vendored copy of the engine for exactly that reason.
|
|
63
|
+
*
|
|
64
|
+
* **It is an upper bound, not the driver's own answer.** GLSL ES 3.00 Appendix A lets an
|
|
65
|
+
* implementation pack loose scalars and small vectors together — four `float`s can share one row —
|
|
66
|
+
* and this counts a row each. Arrays are exact, because Appendix A gives an array a whole row per
|
|
67
|
+
* element whatever its base type, which is why a `float uLightRadius[16]` costs the same sixteen
|
|
68
|
+
* rows a `vec3` array of sixteen does and why the light arrays dominate everything else here.
|
|
69
|
+
*
|
|
70
|
+
* Erring high is the direction that is safe to be wrong in: a build this says fits will link, and a
|
|
71
|
+
* build this says will not fit may still have linked — which costs one rung of the ladder in a
|
|
72
|
+
* marginal case and never costs a picture. The driver is the authority either way, which is why
|
|
73
|
+
* `Renderer` also catches the link failure rather than trusting this number alone.
|
|
74
|
+
*/
|
|
75
|
+
export function countUniformVectors(source) {
|
|
76
|
+
const defines = new Map();
|
|
77
|
+
let total = 0;
|
|
78
|
+
for (const raw of source.split('\n')) {
|
|
79
|
+
const line = raw.trim();
|
|
80
|
+
const define = DEFINE.exec(line);
|
|
81
|
+
if (define !== null) {
|
|
82
|
+
const [, name, body] = define;
|
|
83
|
+
const literal = Number(body.trim());
|
|
84
|
+
if (Number.isInteger(literal))
|
|
85
|
+
defines.set(name, literal);
|
|
86
|
+
else {
|
|
87
|
+
const alias = defines.get(body.trim());
|
|
88
|
+
if (alias !== undefined)
|
|
89
|
+
defines.set(name, alias);
|
|
90
|
+
}
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const declaration = DECLARATION.exec(raw);
|
|
94
|
+
if (declaration === null)
|
|
95
|
+
continue;
|
|
96
|
+
const [, type, , dimension] = declaration;
|
|
97
|
+
if (/^[iu]?sampler/.test(type))
|
|
98
|
+
continue;
|
|
99
|
+
const rows = ROWS[type];
|
|
100
|
+
if (rows === undefined)
|
|
101
|
+
continue;
|
|
102
|
+
if (dimension === undefined) {
|
|
103
|
+
total += rows;
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const literal = Number(dimension);
|
|
107
|
+
const size = Number.isInteger(literal) ? literal : defines.get(dimension);
|
|
108
|
+
/*
|
|
109
|
+
* An array whose size this cannot resolve is counted as one element rather than skipped.
|
|
110
|
+
* Undercounting a budget is the failure mode that ends in a refused link, so an unreadable
|
|
111
|
+
* declaration must still cost something — and every array in this engine's shaders is sized by
|
|
112
|
+
* a `#define` above it, so reaching this at all would be a shader written in a new shape.
|
|
113
|
+
*/
|
|
114
|
+
total += rows * (size ?? 1);
|
|
115
|
+
}
|
|
116
|
+
return total;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Every light budget worth trying, largest first.
|
|
120
|
+
*
|
|
121
|
+
* **A ladder rather than arithmetic**, because the numbers are a picture decision and not a
|
|
122
|
+
* solution to an inequality: halving the lamps a scene can shade is a visible change and the steps
|
|
123
|
+
* are where somebody thought about it. Each rung roughly halves what the arrays cost, and the last
|
|
124
|
+
* one fits the whole shader — point shadows, area lights and all — inside
|
|
125
|
+
* `GUARANTEED_FRAGMENT_UNIFORM_VECTORS`, so there is a rung for every conforming device rather
|
|
126
|
+
* than a floor the engine cannot reach.
|
|
127
|
+
*/
|
|
128
|
+
export const LIGHT_BUDGET_LADDER = Object.freeze([
|
|
129
|
+
FULL_LIGHT_BUDGET,
|
|
130
|
+
Object.freeze({ maxLights: 12, maxAreaLights: 3 }),
|
|
131
|
+
Object.freeze({ maxLights: 8, maxAreaLights: 2 }),
|
|
132
|
+
Object.freeze({ maxLights: 4, maxAreaLights: 1 }),
|
|
133
|
+
Object.freeze({ maxLights: 2, maxAreaLights: 1 }),
|
|
134
|
+
]);
|
|
135
|
+
/**
|
|
136
|
+
* The next rung down from a budget, or null when there is nothing smaller to try.
|
|
137
|
+
*
|
|
138
|
+
* For the caller that has been refused by the driver rather than by arithmetic: `planLightBudget`
|
|
139
|
+
* counts an upper bound, so a build it passed can still fail to link, and the only honest answer to
|
|
140
|
+
* a refusal is to ask for less. A budget between rungs — a consumer's own ceiling — steps to the
|
|
141
|
+
* largest rung strictly under it.
|
|
142
|
+
*/
|
|
143
|
+
export function nextLightBudget(budget) {
|
|
144
|
+
for (const rung of LIGHT_BUDGET_LADDER) {
|
|
145
|
+
if (rung.maxLights < budget.maxLights || rung.maxAreaLights < budget.maxAreaLights) {
|
|
146
|
+
return {
|
|
147
|
+
maxLights: Math.min(rung.maxLights, budget.maxLights),
|
|
148
|
+
maxAreaLights: Math.min(rung.maxAreaLights, budget.maxAreaLights),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* The largest budget at or under `ceiling` whose shader fits this device's fragment uniform grid.
|
|
156
|
+
*
|
|
157
|
+
* **Why the engine does this rather than the consumer.** `flat` at the full budget declares 440
|
|
158
|
+
* rows and an Adreno 740 offers 256, so the program does not link, `new WebGL2Renderer` throws,
|
|
159
|
+
* and a game that awaited `createRenderer` gets no renderer, no reason and no frame — the page's
|
|
160
|
+
* background colour for as long as the player is willing to look at it. Reported from outside
|
|
161
|
+
* exactly that way. The only lever a consumer had was to switch point shadows off, which pays a
|
|
162
|
+
* whole feature to save 192 of the 184 rows that needed saving, and still cannot reach a
|
|
163
|
+
* conforming 224-row device: the lit path without point shadows is 248.
|
|
164
|
+
*
|
|
165
|
+
* Sizing the arrays instead keeps the feature and fits the part: 8 lights and 2 rectangles is 252
|
|
166
|
+
* rows **with** point shadows compiled in.
|
|
167
|
+
*
|
|
168
|
+
* Walking the ladder costs one shader build and one count per rung — about 1.7 ms each, measured —
|
|
169
|
+
* and a device with room spends exactly one, because the first rung is the ceiling and it fits.
|
|
170
|
+
*
|
|
171
|
+
* Returns the last rung when nothing fits, with `fits: false`. That is not a failure to report
|
|
172
|
+
* here: this counts an upper bound (see `countUniformVectors`) and the driver may well link what
|
|
173
|
+
* this says it will not, so the caller tries it and lets the link be the answer.
|
|
174
|
+
*/
|
|
175
|
+
export function planLightBudget(limitVectors, ceiling, build) {
|
|
176
|
+
const under = LIGHT_BUDGET_LADDER.filter((rung) => rung.maxLights <= ceiling.maxLights && rung.maxAreaLights <= ceiling.maxAreaLights);
|
|
177
|
+
/*
|
|
178
|
+
* The ceiling itself is tried first even when it is not a rung, because a consumer that asked
|
|
179
|
+
* for 6 lights means 6 and should not be handed 4 by a ladder that has no 6 on it. Compared by
|
|
180
|
+
* value rather than by identity: a caller that writes the full budget out as a fresh object
|
|
181
|
+
* means the same thing the frozen constant does, and building that source twice would cost a
|
|
182
|
+
* rung's worth of work to learn nothing.
|
|
183
|
+
*/
|
|
184
|
+
const same = (a, b) => a.maxLights === b.maxLights && a.maxAreaLights === b.maxAreaLights;
|
|
185
|
+
const tried = under[0] !== undefined && same(under[0], ceiling) ? under : [ceiling, ...under];
|
|
186
|
+
let last = null;
|
|
187
|
+
let ceilingVectors = 0;
|
|
188
|
+
for (const budget of tried) {
|
|
189
|
+
const source = build(budget);
|
|
190
|
+
const vectors = countUniformVectors(source);
|
|
191
|
+
/* The first rung tried is the ceiling, by construction above. */
|
|
192
|
+
if (last === null)
|
|
193
|
+
ceilingVectors = vectors;
|
|
194
|
+
if (vectors <= limitVectors) {
|
|
195
|
+
return { budget, source, vectors, fits: same(budget, ceiling), ceilingVectors };
|
|
196
|
+
}
|
|
197
|
+
last = { budget, source, vectors, fits: false, ceilingVectors };
|
|
198
|
+
}
|
|
199
|
+
/* `tried` always holds the ceiling, so `last` is set by the time the loop ends. */
|
|
200
|
+
return last;
|
|
201
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much of a mesh one upload step moves, in bytes.
|
|
3
|
+
*
|
|
4
|
+
* A quarter of a megabyte. Measured on the interleave, which is the CPU half of the cost and the
|
|
5
|
+
* half a test can time: on a desktop part, 65,536 floats interleave in 0.14 ms and a whole
|
|
6
|
+
* 250,000-vertex group in 5.5 ms. A megabyte a step was the first choice and is 2.2 ms here,
|
|
7
|
+
* which is most of a 4 ms streaming budget before the GPU half is counted and several times that
|
|
8
|
+
* on a phone. A quarter buys a step small enough that a slow device still fits one.
|
|
9
|
+
*
|
|
10
|
+
* The same number bounds the `writeBuffer` beside it, in the same bytes, because the two are one
|
|
11
|
+
* stop and a consumer's report suspects the queue rather than the arithmetic: a whole square's
|
|
12
|
+
* geometry landing at once measured 57 ms where this interleave accounts for six.
|
|
13
|
+
*/
|
|
14
|
+
export declare const UPLOAD_BYTES_PER_STEP: number;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How much of a mesh one upload step moves, in bytes.
|
|
3
|
+
*
|
|
4
|
+
* A quarter of a megabyte. Measured on the interleave, which is the CPU half of the cost and the
|
|
5
|
+
* half a test can time: on a desktop part, 65,536 floats interleave in 0.14 ms and a whole
|
|
6
|
+
* 250,000-vertex group in 5.5 ms. A megabyte a step was the first choice and is 2.2 ms here,
|
|
7
|
+
* which is most of a 4 ms streaming budget before the GPU half is counted and several times that
|
|
8
|
+
* on a phone. A quarter buys a step small enough that a slow device still fits one.
|
|
9
|
+
*
|
|
10
|
+
* The same number bounds the `writeBuffer` beside it, in the same bytes, because the two are one
|
|
11
|
+
* stop and a consumer's report suspects the queue rather than the arithmetic: a whole square's
|
|
12
|
+
* geometry landing at once measured 57 ms where this interleave accounts for six.
|
|
13
|
+
*/
|
|
14
|
+
export const UPLOAD_BYTES_PER_STEP = 1 << 18;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a vertex attribute reads as when a mesh does not supply it.
|
|
3
|
+
*
|
|
4
|
+
* **One decision, and it was being made twice.** WebGL2 disables the attribute and hands the
|
|
5
|
+
* driver a constant; WebGPU has no such thing as a disabled attribute, so it reads a
|
|
6
|
+
* one-element buffer at a stride of zero. Two mechanisms, one question — *what does a mesh that
|
|
7
|
+
* said nothing about this mean?* — and `AGENTS.md` is explicit that a question both backends
|
|
8
|
+
* answer belongs in one module and is bound twice.
|
|
9
|
+
*
|
|
10
|
+
* **It was not a tidiness problem.** The values had drifted apart and two of them mattered:
|
|
11
|
+
*
|
|
12
|
+
* - `emissiveColor` is a **sentinel**, not a colour. `flat.ts` reads
|
|
13
|
+
* `vEmissiveColor.r < 0.0 ? albedo : vEmissiveColor`, so −1 means *"glow in my own colour"*
|
|
14
|
+
* and 0 means *"glow black"*. WebGPU was filling zeroes, so **every emissive surface whose
|
|
15
|
+
* mesh omitted the attribute stopped emitting**. `night-street`'s far windows went dark and
|
|
16
|
+
* its near ones only looked right because they were clipped at white already — which is how
|
|
17
|
+
* it survived a whole session of being attributed to fog, ambient occlusion and relief.
|
|
18
|
+
* - `roughness` absent is the engine's long-standing lobe, not a mirror. Zero is the shiniest
|
|
19
|
+
* surface expressible, which is the opposite of "unstated".
|
|
20
|
+
*
|
|
21
|
+
* The rest are genuinely zero, and are written down here anyway so the next attribute added
|
|
22
|
+
* has somewhere obvious to state its answer instead of inheriting one by accident.
|
|
23
|
+
*/
|
|
24
|
+
/** The engine's fixed lobe, for geometry that never says how rough it is. */
|
|
25
|
+
export declare const DEFAULT_ROUGHNESS = 0.4277;
|
|
26
|
+
/**
|
|
27
|
+
* Keyed by the attribute's name in `MeshData`, with one entry per optional attribute.
|
|
28
|
+
*
|
|
29
|
+
* Lengths match the attribute's component count; `vertexDefaults.test.ts` pins that, because a
|
|
30
|
+
* short entry would write a default into the next attribute's slot rather than fail.
|
|
31
|
+
*/
|
|
32
|
+
export declare const ABSENT_ATTRIBUTE: Readonly<Record<string, readonly number[]>>;
|
|
33
|
+
/**
|
|
34
|
+
* What `uOutputTransform` means, as the shader's own integers.
|
|
35
|
+
*
|
|
36
|
+
* Shared because both backends have to agree about which curve a profile named, and because
|
|
37
|
+
* getting it wrong is invisible: the codes are small integers and every one of them is a legal
|
|
38
|
+
* value that produces a picture. `flat.ts` reads `0` as none, `1` as sRGB and `2` as ACES.
|
|
39
|
+
*/
|
|
40
|
+
export declare const OUTPUT_TRANSFORM_CODE: Readonly<Record<string, number>>;
|
|
41
|
+
/**
|
|
42
|
+
* How far the speed rush reaches, and how far a motion-blurred pixel may travel, both in UV.
|
|
43
|
+
*
|
|
44
|
+
* Shared because both backends run the same composite shader and a difference here is a
|
|
45
|
+
* difference in the picture that nothing else would explain. `renderer.ts` held the only copy.
|
|
46
|
+
*/
|
|
47
|
+
export declare const RUSH_REACH_UV = 0.012;
|
|
48
|
+
export declare const MOTION_BLUR_MAX_UV = 0.03;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a vertex attribute reads as when a mesh does not supply it.
|
|
3
|
+
*
|
|
4
|
+
* **One decision, and it was being made twice.** WebGL2 disables the attribute and hands the
|
|
5
|
+
* driver a constant; WebGPU has no such thing as a disabled attribute, so it reads a
|
|
6
|
+
* one-element buffer at a stride of zero. Two mechanisms, one question — *what does a mesh that
|
|
7
|
+
* said nothing about this mean?* — and `AGENTS.md` is explicit that a question both backends
|
|
8
|
+
* answer belongs in one module and is bound twice.
|
|
9
|
+
*
|
|
10
|
+
* **It was not a tidiness problem.** The values had drifted apart and two of them mattered:
|
|
11
|
+
*
|
|
12
|
+
* - `emissiveColor` is a **sentinel**, not a colour. `flat.ts` reads
|
|
13
|
+
* `vEmissiveColor.r < 0.0 ? albedo : vEmissiveColor`, so −1 means *"glow in my own colour"*
|
|
14
|
+
* and 0 means *"glow black"*. WebGPU was filling zeroes, so **every emissive surface whose
|
|
15
|
+
* mesh omitted the attribute stopped emitting**. `night-street`'s far windows went dark and
|
|
16
|
+
* its near ones only looked right because they were clipped at white already — which is how
|
|
17
|
+
* it survived a whole session of being attributed to fog, ambient occlusion and relief.
|
|
18
|
+
* - `roughness` absent is the engine's long-standing lobe, not a mirror. Zero is the shiniest
|
|
19
|
+
* surface expressible, which is the opposite of "unstated".
|
|
20
|
+
*
|
|
21
|
+
* The rest are genuinely zero, and are written down here anyway so the next attribute added
|
|
22
|
+
* has somewhere obvious to state its answer instead of inheriting one by accident.
|
|
23
|
+
*/
|
|
24
|
+
/** The engine's fixed lobe, for geometry that never says how rough it is. */
|
|
25
|
+
export const DEFAULT_ROUGHNESS = 0.4277;
|
|
26
|
+
/**
|
|
27
|
+
* Keyed by the attribute's name in `MeshData`, with one entry per optional attribute.
|
|
28
|
+
*
|
|
29
|
+
* Lengths match the attribute's component count; `vertexDefaults.test.ts` pins that, because a
|
|
30
|
+
* short entry would write a default into the next attribute's slot rather than fail.
|
|
31
|
+
*/
|
|
32
|
+
export const ABSENT_ATTRIBUTE = {
|
|
33
|
+
/** No highlight, for geometry that never claimed one. */
|
|
34
|
+
specular: [0],
|
|
35
|
+
uvs: [0, 0],
|
|
36
|
+
/** The sentinel `flat.ts` tests for: inherit the albedo. Never a colour. */
|
|
37
|
+
emissiveColor: [-1, -1, -1],
|
|
38
|
+
roughness: [DEFAULT_ROUGHNESS],
|
|
39
|
+
/**
|
|
40
|
+
* No grain and no relief at all, and that is the point of these attributes rather than a
|
|
41
|
+
* default chosen for convenience: a surface that never says it is mineral is not mineral.
|
|
42
|
+
* `mesh.ts` records that the two versions which inferred it were both wrong.
|
|
43
|
+
*/
|
|
44
|
+
grain: [0],
|
|
45
|
+
relief: [0],
|
|
46
|
+
/**
|
|
47
|
+
* A usable frame rather than zero, for the reason `generateTangents` gives about degenerate
|
|
48
|
+
* UVs: a zero tangent normalises to a NaN in any shader that eventually reads one, and a NaN
|
|
49
|
+
* in a fragment takes the pixel with it. `(1, 0, 0)` with a right-handed bitangent is
|
|
50
|
+
* arbitrary and finite, and arbitrary is the honest answer for geometry that has no texture
|
|
51
|
+
* to be oriented against in the first place.
|
|
52
|
+
*/
|
|
53
|
+
tangents: [1, 0, 0, 1],
|
|
54
|
+
/**
|
|
55
|
+
* All four influences on joint 0, for a mesh a skinned pipeline draws without a rig.
|
|
56
|
+
*
|
|
57
|
+
* Zero is a trap here rather than a neutral value: four zero weights build a zero matrix, and a
|
|
58
|
+
* zero matrix collapses every vertex it touches onto the origin — so the mesh would not shade
|
|
59
|
+
* oddly, it would vanish. The identity influence is one and three zeroes, which for a mesh with
|
|
60
|
+
* no rig leaves every vertex where it already was.
|
|
61
|
+
*
|
|
62
|
+
* What it costs is nothing; a mesh with joints never reads these. What would make it wrong is a
|
|
63
|
+
* palette whose entry 0 is not identity, which is a rig the importer sorted incorrectly rather
|
|
64
|
+
* than a case to defend against here.
|
|
65
|
+
*/
|
|
66
|
+
joints: [0, 0, 0, 0],
|
|
67
|
+
weights: [1, 0, 0, 0],
|
|
68
|
+
/**
|
|
69
|
+
* The four-lane channel: planted, fully sunlit, opaque, and a reserved lane.
|
|
70
|
+
*
|
|
71
|
+
* **Two of these are ones and that is load bearing.** Zero for `skyDirect` would take the
|
|
72
|
+
* directional light off every mesh in the engine that has never heard of this attribute, and
|
|
73
|
+
* zero for `alpha` would make all of them invisible — so the wrong default here is not a subtle
|
|
74
|
+
* shading difference, it is the whole world going dark or vanishing. `vertexDefaults.test.ts`
|
|
75
|
+
* pins the tuple for that reason.
|
|
76
|
+
*
|
|
77
|
+
* Sway is the one honest zero: geometry that never said it bends does not bend.
|
|
78
|
+
*
|
|
79
|
+
* **The fourth lane was 0 while it was reserved and is 1 now that it carries thickness**, and the
|
|
80
|
+
* difference is not cosmetic. It multiplies the thickness a refracting draw states, so a zero
|
|
81
|
+
* makes the path length zero, `pow(tint, 0)` one, and a pane of coloured glass absorb nothing at
|
|
82
|
+
* all — a draw naming a tint and a thickness would bend the scene behind it and take no colour
|
|
83
|
+
* out of it. Every lane here is a multiplier or an amount, and the identity for a multiplier is
|
|
84
|
+
* one.
|
|
85
|
+
*
|
|
86
|
+
* It survived as 0 because the lane was declared and unread, and because the check that exercises
|
|
87
|
+
* refraction supplies a channel array on every subject it draws — so the absent case was never
|
|
88
|
+
* the thing being measured.
|
|
89
|
+
*/
|
|
90
|
+
channel: [0, 1, 1, 1],
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* What `uOutputTransform` means, as the shader's own integers.
|
|
94
|
+
*
|
|
95
|
+
* Shared because both backends have to agree about which curve a profile named, and because
|
|
96
|
+
* getting it wrong is invisible: the codes are small integers and every one of them is a legal
|
|
97
|
+
* value that produces a picture. `flat.ts` reads `0` as none, `1` as sRGB and `2` as ACES.
|
|
98
|
+
*/
|
|
99
|
+
export const OUTPUT_TRANSFORM_CODE = {
|
|
100
|
+
none: 0,
|
|
101
|
+
srgb: 1,
|
|
102
|
+
aces: 2,
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* How far the speed rush reaches, and how far a motion-blurred pixel may travel, both in UV.
|
|
106
|
+
*
|
|
107
|
+
* Shared because both backends run the same composite shader and a difference here is a
|
|
108
|
+
* difference in the picture that nothing else would explain. `renderer.ts` held the only copy.
|
|
109
|
+
*/
|
|
110
|
+
export const RUSH_REACH_UV = 0.012;
|
|
111
|
+
export const MOTION_BLUR_MAX_UV = 0.03;
|