@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,502 @@
|
|
|
1
|
+
import { resolveConditionals } from '../conditionals.ts';
|
|
2
|
+
import { OCTAHEDRAL_GLSL } from '../octahedral.ts';
|
|
3
|
+
import { PROBEGRID_GLSL } from './probeGrid.ts';
|
|
4
|
+
import { TANGENT_FRAME_GLSL } from '../tangentFrame.ts';
|
|
5
|
+
import { preambleGlsl } from './preamble.ts';
|
|
6
|
+
import { LOBES_GLSL } from './lobes.ts';
|
|
7
|
+
import { POINTSHADOW_GLSL } from './pointShadow.ts';
|
|
8
|
+
import { DIRECTIONALSHADOW_GLSL } from './directionalShadow.ts';
|
|
9
|
+
import { MORPH_GLSL } from '../morph.ts';
|
|
10
|
+
import { SKINNING_GLSL } from '../skinning.ts';
|
|
11
|
+
import { SURFACE_GLSL } from './surface.ts';
|
|
12
|
+
import { MAIN_GLSL } from './main.ts';
|
|
13
|
+
import { CHANNEL_ATTRIBUTE, CHANNEL_BEND } from '../vertexChannel.ts';
|
|
14
|
+
import { FULL_LIGHT_BUDGET, type LightBudget } from '../../uniformVectorBudget.ts';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Flat-shaded vertex colours with one dominant directional source, ambient,
|
|
18
|
+
* point lights, emissive geometry, directional + omnidirectional shadows and
|
|
19
|
+
* the shared atmospheric medium. Colour comes from vertex data and shader
|
|
20
|
+
* maths; no image assets are involved.
|
|
21
|
+
*/
|
|
22
|
+
const FLAT_VERT_SOURCE = `#version 300 es
|
|
23
|
+
layout(location = 0) in vec3 aPosition;
|
|
24
|
+
layout(location = 1) in vec3 aNormal;
|
|
25
|
+
layout(location = 2) in vec3 aColor;
|
|
26
|
+
layout(location = 3) in float aEmissive;
|
|
27
|
+
layout(location = 4) in float aSpecular;
|
|
28
|
+
layout(location = 5) in vec2 aUv;
|
|
29
|
+
layout(location = 6) in vec3 aEmissiveColor;
|
|
30
|
+
layout(location = 7) in float aRoughness;
|
|
31
|
+
layout(location = 8) in float aGrain;
|
|
32
|
+
layout(location = 9) in float aRelief;
|
|
33
|
+
/**
|
|
34
|
+
* Which way is along the texture, four floats a vertex.
|
|
35
|
+
*
|
|
36
|
+
* xyz is the tangent and w is the bitangent sign, which is what a mirrored UV island needs: an
|
|
37
|
+
* artist mapping the left and right of a model onto one patch gives one side a flipped frame, and
|
|
38
|
+
* a bitangent computed without the sign lights that side inside out. See geometry/tangents.ts.
|
|
39
|
+
*
|
|
40
|
+
* Location 10 because that is where both backends already upload it — buffers.ts lists it and
|
|
41
|
+
* mesh.ts attaches it — and nothing consumed it until now.
|
|
42
|
+
*/
|
|
43
|
+
layout(location = 10) in vec4 aTangent;
|
|
44
|
+
#if SKINNED
|
|
45
|
+
${SKINNING_GLSL}
|
|
46
|
+
#endif
|
|
47
|
+
|
|
48
|
+
uniform mat4 uViewProj;
|
|
49
|
+
/** 1 when the mesh carries a tangent frame. See vHasTangents. */
|
|
50
|
+
uniform int uHasTangents;
|
|
51
|
+
uniform mat4 uLightViewProj;
|
|
52
|
+
/**
|
|
53
|
+
* How often the surface texture repeats across this mesh's UV range, per axis.
|
|
54
|
+
*
|
|
55
|
+
* Per-draw rather than baked into vertex data, so geometry built once in metres can be
|
|
56
|
+
* textured at whatever density a material wants without rebuilding it — and so the same
|
|
57
|
+
* wall mesh can carry a fine tile in one biome and a coarse one in another. Ignored
|
|
58
|
+
* when no texture is bound.
|
|
59
|
+
*/
|
|
60
|
+
uniform vec2 uUvScale;
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* **Placement and tint are declared last of the shared uniforms, and the position is the
|
|
64
|
+
* requirement** — the same requirement, and for the same reason, that morph's uniforms are
|
|
65
|
+
* declared after everything below.
|
|
66
|
+
*
|
|
67
|
+
* A uniform block is packed in declaration order and the renderer writes it by offset. The
|
|
68
|
+
* instanced variant does not declare these two at all, so anything declared *after* them moves
|
|
69
|
+
* when they go: with uModel second, the instanced block put uHasTangents at 64 where the plain
|
|
70
|
+
* one has it at 128, and a renderer writing by the plain table would have written the tangent
|
|
71
|
+
* flag into the model matrix. Measured, not feared — that is what the generated bindings said
|
|
72
|
+
* before this block moved down here.
|
|
73
|
+
*
|
|
74
|
+
* Declared last, every field the two variants share keeps the offset it had, and the instanced
|
|
75
|
+
* block is simply shorter.
|
|
76
|
+
*/
|
|
77
|
+
#if INSTANCED
|
|
78
|
+
/**
|
|
79
|
+
* One instance's placement, four vec4 columns because GLSL ES 3.00 has no mat4 attribute, and
|
|
80
|
+
* its tint.
|
|
81
|
+
*
|
|
82
|
+
* Locations 11 to 15, which is exactly the five left once the base mesh has spent eleven of
|
|
83
|
+
* WebGL2's guaranteed sixteen.
|
|
84
|
+
*
|
|
85
|
+
* What it gives up is skinning: 11 and 12 are the joint indices and weights, so a draw cannot be
|
|
86
|
+
* both, and flatVert refuses the pair rather than silently dropping one of them. Morphing goes
|
|
87
|
+
* with it, for a different reason — a morph weight is per draw, so thirty instances would wear
|
|
88
|
+
* one expression between them, which is a wrong picture rather than a refused one.
|
|
89
|
+
*
|
|
90
|
+
* What would make it wrong is a twelfth base attribute. The escape hatch is to carry the tint in
|
|
91
|
+
* the w lanes of these four columns, which an affine matrix leaves unused, at the cost of
|
|
92
|
+
* narrowing this to affine transforms and making a projective one silently wrong.
|
|
93
|
+
*/
|
|
94
|
+
layout(location = 11) in vec4 aInstanceModel0;
|
|
95
|
+
layout(location = 12) in vec4 aInstanceModel1;
|
|
96
|
+
layout(location = 13) in vec4 aInstanceModel2;
|
|
97
|
+
layout(location = 14) in vec4 aInstanceModel3;
|
|
98
|
+
layout(location = 15) in vec3 aInstanceTint;
|
|
99
|
+
#else
|
|
100
|
+
uniform mat4 uModel;
|
|
101
|
+
/**
|
|
102
|
+
* Per-draw colour multiplier. White is the identity and the default, so nothing that
|
|
103
|
+
* does not ask for one changes by a floating-point bit.
|
|
104
|
+
*
|
|
105
|
+
* Exists because colour in this engine is *vertex data* — that is what makes the whole
|
|
106
|
+
* world a single flat-shaded draw call — and vertex data cannot answer a question about
|
|
107
|
+
* the current frame. A caller that wants a mesh to take on a colour it learns at runtime
|
|
108
|
+
* had only one option before this: rebuild the geometry, which for anything per-frame is
|
|
109
|
+
* absurd. One uniform gives that whole class of effect a home without touching the
|
|
110
|
+
* payload rule: still no textures, still colour from vertices, just scaled.
|
|
111
|
+
*/
|
|
112
|
+
uniform vec3 uTint;
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* **The per-vertex channel lives in this branch and not above it.** Location 13 is
|
|
116
|
+
* aInstanceModel2 in the instanced variant and one location cannot hold both, so an instanced
|
|
117
|
+
* draw compiles no channel at all -- and InstancedMesh refuses a mesh that carries one, so the
|
|
118
|
+
* absence is a loud error at construction rather than leaves that quietly never move.
|
|
119
|
+
*
|
|
120
|
+
* Declared after uModel and uTint and before the morph block, which is what keeps every variant
|
|
121
|
+
* agreeing about where the shared uniforms sit: the instanced variant drops these five along with
|
|
122
|
+
* the two above it, and a dropped field moves nothing. flatPass.ts asserts exactly that.
|
|
123
|
+
*/
|
|
124
|
+
${CHANNEL_ATTRIBUTE}
|
|
125
|
+
${CHANNEL_BEND}
|
|
126
|
+
#endif
|
|
127
|
+
|
|
128
|
+
/*
|
|
129
|
+
* **After every uniform above it, and the position is the requirement.** A uniform block is packed
|
|
130
|
+
* in declaration order, so morph's four uniforms declared *before* uViewProj move the offset of
|
|
131
|
+
* every field the renderer already writes — and the renderer writes them by offset. That does not
|
|
132
|
+
* fail: it puts the model matrix where the view projection should be and draws a scrambled frame.
|
|
133
|
+
* Declared last, every shared field keeps the offset it had and all four vertex variants agree
|
|
134
|
+
* about the block they share.
|
|
135
|
+
*/
|
|
136
|
+
#if MORPHED
|
|
137
|
+
${MORPH_GLSL}
|
|
138
|
+
#endif
|
|
139
|
+
|
|
140
|
+
out vec3 vNormal;
|
|
141
|
+
out vec3 vColor;
|
|
142
|
+
out vec3 vWorldPos;
|
|
143
|
+
out float vEmissive;
|
|
144
|
+
out float vSpecular;
|
|
145
|
+
out vec4 vLightPos;
|
|
146
|
+
out vec2 vUv;
|
|
147
|
+
out vec3 vEmissiveColor;
|
|
148
|
+
out float vRoughness;
|
|
149
|
+
out float vGrain;
|
|
150
|
+
out float vRelief;
|
|
151
|
+
out vec4 vTangent;
|
|
152
|
+
/**
|
|
153
|
+
* How much of the directional term this vertex receives, and how opaque it is.
|
|
154
|
+
*
|
|
155
|
+
* Declared in every variant, including the instanced one that carries no channel: that variant
|
|
156
|
+
* writes the neutral 1.0 for both, so the fragment stage reads one shape whatever drew it and
|
|
157
|
+
* needs no permutation of its own.
|
|
158
|
+
*
|
|
159
|
+
* vSkyDirect scales the directional term and never the albedo, which is the whole reason it is a
|
|
160
|
+
* lane rather than something folded into vColor. A sky factor in the vertex colour multiplies
|
|
161
|
+
* ambient and sun together, so an enclosed face is darkened twice -- once for having no sky, once
|
|
162
|
+
* for the ambient it should still have received. See MeshData.channel.
|
|
163
|
+
*/
|
|
164
|
+
out float vSkyDirect;
|
|
165
|
+
out float vAlpha;
|
|
166
|
+
/*
|
|
167
|
+
* How much medium a refracting surface has behind this vertex, as a multiplier on the thickness
|
|
168
|
+
* the draw states. The channel's .w lane, which 3.42.0 declared reserved and unread.
|
|
169
|
+
*
|
|
170
|
+
* It costs a varying and no attribute, where a fifteenth attribute would have spent one of the
|
|
171
|
+
* two vertex locations left. Absent means 1.0, so a mesh with no channel refracts at exactly the
|
|
172
|
+
* thickness its draw asked for.
|
|
173
|
+
*/
|
|
174
|
+
out float vThickness;
|
|
175
|
+
/**
|
|
176
|
+
* Whether aTangent is a real frame or the absent-attribute constant.
|
|
177
|
+
*
|
|
178
|
+
* vertexDefaults.ts hands a mesh without tangents (1, 0, 0, 1) — a usable frame rather than a
|
|
179
|
+
* sentinel, because a zero tangent normalises to a NaN and a NaN in a fragment takes the pixel
|
|
180
|
+
* with it. So the attribute cannot report its own absence and the renderer has to.
|
|
181
|
+
*
|
|
182
|
+
* flat, because there is nothing to interpolate: it is one value for the whole draw.
|
|
183
|
+
*/
|
|
184
|
+
flat out int vHasTangents;
|
|
185
|
+
|
|
186
|
+
void main() {
|
|
187
|
+
/*
|
|
188
|
+
* **Morph before skin, and the order is the definition.** A morph target deforms the *bind pose*
|
|
189
|
+
* — an expression on a face the skeleton has not moved yet — and the skeleton then carries that
|
|
190
|
+
* shape wherever the joint goes. Skinning first would deform the posed vertex, so an expression
|
|
191
|
+
* would drift as a limb moved.
|
|
192
|
+
*/
|
|
193
|
+
#if MORPHED
|
|
194
|
+
vec3 basePosition = aPosition + morphOffset();
|
|
195
|
+
#else
|
|
196
|
+
vec3 basePosition = aPosition;
|
|
197
|
+
#endif
|
|
198
|
+
#if SKINNED
|
|
199
|
+
/*
|
|
200
|
+
* The skin matrix is applied in model space, before uModel, because a palette entry already
|
|
201
|
+
* carries the joint's inverse bind — it takes a vertex from the model's bind pose to where the
|
|
202
|
+
* joint has moved it, and uModel then places the whole character.
|
|
203
|
+
*
|
|
204
|
+
* The normal takes the same upper 3x3. **Uniform joint scale is assumed**: a non-uniformly
|
|
205
|
+
* scaled joint wants the inverse transpose, and this is not it, so such a joint lights slightly
|
|
206
|
+
* wrong rather than being wrong in shape. What would make it right is a second palette of
|
|
207
|
+
* inverse transposes, which doubles the texture — not worth it until a rig that squashes asks.
|
|
208
|
+
*/
|
|
209
|
+
mat4 skin = skinMatrix();
|
|
210
|
+
vec4 local = skin * vec4(basePosition, 1.0);
|
|
211
|
+
vec3 localNormal = mat3(skin) * aNormal;
|
|
212
|
+
#else
|
|
213
|
+
vec4 local = vec4(basePosition, 1.0);
|
|
214
|
+
vec3 localNormal = aNormal;
|
|
215
|
+
#endif
|
|
216
|
+
#if INSTANCED
|
|
217
|
+
mat4 model = mat4(aInstanceModel0, aInstanceModel1, aInstanceModel2, aInstanceModel3);
|
|
218
|
+
vec3 tint = aInstanceTint;
|
|
219
|
+
#else
|
|
220
|
+
mat4 model = uModel;
|
|
221
|
+
vec3 tint = uTint;
|
|
222
|
+
#endif
|
|
223
|
+
vec4 world = model * local;
|
|
224
|
+
/*
|
|
225
|
+
* **The bend lands here, before vWorldPos, vLightPos and gl_Position read it.** All three have
|
|
226
|
+
* to see the same displaced vertex: a fragment shaded at one position and shadow-tested at
|
|
227
|
+
* another self-shadows as the gust changes, which is a defect that only appears in motion.
|
|
228
|
+
*/
|
|
229
|
+
#if INSTANCED
|
|
230
|
+
vec3 bent = world.xyz;
|
|
231
|
+
#else
|
|
232
|
+
vec3 bent = channelBend(world.xyz, aChannel.x);
|
|
233
|
+
#endif
|
|
234
|
+
world = vec4(bent, world.w);
|
|
235
|
+
vWorldPos = world.xyz;
|
|
236
|
+
// Rotation/translation-only models (our case): mat3 is a valid normal matrix.
|
|
237
|
+
vec3 worldNormal = mat3(model) * localNormal;
|
|
238
|
+
vNormal = worldNormal;
|
|
239
|
+
vLightPos = uLightViewProj * world;
|
|
240
|
+
vColor = aColor * tint;
|
|
241
|
+
vEmissive = aEmissive;
|
|
242
|
+
vSpecular = aSpecular;
|
|
243
|
+
vUv = aUv * uUvScale;
|
|
244
|
+
vEmissiveColor = aEmissiveColor;
|
|
245
|
+
vRoughness = aRoughness;
|
|
246
|
+
vGrain = aGrain;
|
|
247
|
+
vRelief = aRelief;
|
|
248
|
+
vTangent = aTangent;
|
|
249
|
+
#if INSTANCED
|
|
250
|
+
/* No channel on this path; the neutral values are what every mesh read before it existed. */
|
|
251
|
+
vSkyDirect = 1.0;
|
|
252
|
+
vAlpha = 1.0;
|
|
253
|
+
vThickness = 1.0;
|
|
254
|
+
#else
|
|
255
|
+
vSkyDirect = aChannel.y;
|
|
256
|
+
vAlpha = aChannel.z;
|
|
257
|
+
vThickness = aChannel.w;
|
|
258
|
+
#endif
|
|
259
|
+
vHasTangents = uHasTangents;
|
|
260
|
+
gl_Position = uViewProj * world;
|
|
261
|
+
}
|
|
262
|
+
`;
|
|
263
|
+
|
|
264
|
+
/** What the flat *vertex* stage compiles, as opposed to what it decides per frame. */
|
|
265
|
+
export interface FlatVertexOptions {
|
|
266
|
+
/**
|
|
267
|
+
* Whether this variant reads morph deltas and adds them to the bind-pose position.
|
|
268
|
+
*
|
|
269
|
+
* The vertex stage's second axis, which takes it from two variants to four, for **1,674 gzipped
|
|
270
|
+
* bytes** against the 246,925 one more *fragment* flag costs. §3.2 of the plan asked for a
|
|
271
|
+
* re-measurement before adding this on the assumption four diverging variants would dedupe far
|
|
272
|
+
* worse than two; they dedupe somewhat worse, which is a different answer from the one feared.
|
|
273
|
+
*/
|
|
274
|
+
readonly morphed: boolean;
|
|
275
|
+
/**
|
|
276
|
+
* Whether this variant reads a joint palette and moves the vertex by it.
|
|
277
|
+
*
|
|
278
|
+
* A permutation rather than a uniform gate, and the difference is measured rather than argued.
|
|
279
|
+
* The vertex shader had no permutation axis at all until skinning, so a second variant costs
|
|
280
|
+
* **1,118 bytes gzipped**, measured on the regenerated file. The two strings are 4.4 KB and
|
|
281
|
+
* mostly alike, so deflate's 32 KB window dedupes most of it. One more *fragment* flag costs
|
|
282
|
+
* **246,925** by the same measurement, because a fragment permutation is larger than that
|
|
283
|
+
* window and sixteen copies cannot dedupe — so this is 0.45% of what the rule is written about.
|
|
284
|
+
*
|
|
285
|
+
* The estimate before it was built was 357, taken by duplicating the existing string with a
|
|
286
|
+
* hand-written skinning body spliced in. It was a floor and is recorded as one: naga's real
|
|
287
|
+
* output carries the palette binding, two more entry-point parameters and its own temporaries,
|
|
288
|
+
* which the hand-written delta did not model. Three times an estimate is worth knowing about;
|
|
289
|
+
* three orders of magnitude is what the decision turned on, and that did not move. So the 2^n rule `ARCHITECTURE.md` §1 states is a fact about the fragment
|
|
290
|
+
* corpus and not about permutation itself.
|
|
291
|
+
*
|
|
292
|
+
* What a uniform gate would have cost instead is a branch on every vertex of every static mesh
|
|
293
|
+
* in the engine, forever, for a feature most scenes never use. What would make the permutation
|
|
294
|
+
* wrong is a second vertex flag: four diverging variants dedupe less well than two, so
|
|
295
|
+
* re-measure before adding one.
|
|
296
|
+
*/
|
|
297
|
+
readonly skinned: boolean;
|
|
298
|
+
/**
|
|
299
|
+
* Whether placement and tint arrive once per instance instead of once per draw.
|
|
300
|
+
*
|
|
301
|
+
* Excludes `skinned`: the joint attributes and the instance matrix want the same locations.
|
|
302
|
+
*/
|
|
303
|
+
readonly instanced: boolean;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* The flat vertex shader, built for one variant.
|
|
308
|
+
*
|
|
309
|
+
* `resolveConditionals` cuts the skinning prelude and both attribute declarations out entirely
|
|
310
|
+
* when `skinned` is false, so an unskinned pipeline declares locations 11 and 12 nowhere and a
|
|
311
|
+
* driver is never handed a palette sampler it cannot reach.
|
|
312
|
+
*/
|
|
313
|
+
export function flatVert(options: FlatVertexOptions): string {
|
|
314
|
+
if (options.skinned && options.instanced) {
|
|
315
|
+
throw new Error(
|
|
316
|
+
'flatVert: a variant cannot be both skinned and instanced — the joint attributes and the ' +
|
|
317
|
+
'instance matrix want locations 11 and 12, and WebGL2 guarantees only sixteen in all.',
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
if (options.morphed && options.instanced) {
|
|
321
|
+
throw new Error(
|
|
322
|
+
'flatVert: a variant cannot be both morphed and instanced — a morph weight is per draw, ' +
|
|
323
|
+
'so every instance of the batch would wear one expression between them.',
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
return resolveConditionals(
|
|
327
|
+
FLAT_VERT_SOURCE,
|
|
328
|
+
{ SKINNED: options.skinned, MORPHED: options.morphed, INSTANCED: options.instanced },
|
|
329
|
+
'flatVert',
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/** What the flat pass *compiles*, as opposed to what it decides per frame. */
|
|
334
|
+
export interface FlatShaderOptions {
|
|
335
|
+
readonly pointShadows: boolean;
|
|
336
|
+
readonly directionalShadows: boolean;
|
|
337
|
+
/**
|
|
338
|
+
* Whether the mirror direction samples a baked cubemap of the scene.
|
|
339
|
+
*
|
|
340
|
+
* Cut out of the source rather than left in and multiplied by zero, and that is a
|
|
341
|
+
* correctness matter rather than a saving. The lit pass already binds sixteen texture
|
|
342
|
+
* units, which is exactly what WebGL2 guarantees, so a seventeenth sampler that is
|
|
343
|
+
* *declared* would default to unit 0 and share it with a `sampler2D` shadow map. Two
|
|
344
|
+
* sampler types on one unit is undefined at best and an INVALID_OPERATION at worst, for
|
|
345
|
+
* a fetch whose result was going to be discarded.
|
|
346
|
+
*/
|
|
347
|
+
readonly environmentProbe: boolean;
|
|
348
|
+
/**
|
|
349
|
+
* Whether the night-side emissive term is compiled in at all.
|
|
350
|
+
*
|
|
351
|
+
* **Cut out rather than multiplied by zero, and that is measured rather than tidiness.** The
|
|
352
|
+
* term names `emissiveTint` and `vEmissive`, which the ordinary emissive line above it also
|
|
353
|
+
* names, and giving those a second consumer lets the compiler re-plan the arithmetic they
|
|
354
|
+
* share. Held on the gilded chamber with the amount at 0, against the build before the term
|
|
355
|
+
* existed: **109 pixels of 750,080 moved**, mean delta 17, where a shadow tap sat exactly on
|
|
356
|
+
* its boundary and flipped sides on an emissive surface.
|
|
357
|
+
*
|
|
358
|
+
* Isolated by elimination rather than guessed. The uniform declared and never used moves 0
|
|
359
|
+
* pixels; the branch present with an empty body moves 1, which is that scene's own floor; a
|
|
360
|
+
* body naming nothing the emissive line names moves 0; the real expression moves 109. So the
|
|
361
|
+
* cost is the operands, and the only way to charge nothing for a feature nobody asked for is
|
|
362
|
+
* for its instructions not to be there.
|
|
363
|
+
*/
|
|
364
|
+
readonly nightEmissive: boolean;
|
|
365
|
+
/**
|
|
366
|
+
* How many point lights this build declares room for. `MAX_POINT_LIGHTS` when absent.
|
|
367
|
+
*
|
|
368
|
+
* **Not a permutation axis and not a picture setting: a way to fit the uniform grid.** Ten of
|
|
369
|
+
* this shader's uniform arrays are sized by it with point shadows off and twenty with them on,
|
|
370
|
+
* and GLSL ES gives an array one row of the grid per element whatever its base type — so
|
|
371
|
+
* `uniform float uLightRadius[16]` costs the same sixteen rows a `vec3` array of sixteen does.
|
|
372
|
+
* At the full budget the lit fragment stage declares **440** rows with point shadows and **248**
|
|
373
|
+
* without; an Adreno 740 offers **256** and WebGL2 guarantees only **224**. So a phone could not
|
|
374
|
+
* link this shader at all, and switching point shadows off — the only lever a consumer had — pays
|
|
375
|
+
* a whole feature and still does not reach a conforming device.
|
|
376
|
+
*
|
|
377
|
+
* Lowering it costs lights, which is a picture decision, and that is why it is stated rather
|
|
378
|
+
* than derived: 8 lights and 2 rectangles is 252 rows **with** point shadows compiled in.
|
|
379
|
+
*
|
|
380
|
+
* **WebGL2 only in effect.** The generated WGSL is built at the full budget and committed, and
|
|
381
|
+
* WebGPU has no per-stage uniform-vector ceiling to be short of — its whole block is about 7 KB
|
|
382
|
+
* against a 64 KB guaranteed binding size. A consumer that sets this and lands on WebGPU gets
|
|
383
|
+
* the full budget, which is the better picture and the one the device can afford.
|
|
384
|
+
*/
|
|
385
|
+
readonly maxLights?: number;
|
|
386
|
+
/** How many rectangular emitters this build declares room for. `MAX_AREA_LIGHTS` when absent. */
|
|
387
|
+
readonly maxAreaLights?: number;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* The flat fragment shader, built for one quality profile.
|
|
392
|
+
*
|
|
393
|
+
* A permutation rather than a constant, because a profile with shadows off was still
|
|
394
|
+
* compiling every line of shadow code it could never reach: ten `samplerCube` uniforms, a
|
|
395
|
+
* ten-way branch chain over them, a 190-line cubemap filter and two PCF loops. GLSL has no
|
|
396
|
+
* way to prove at compile time that `uPointShadowIndex[k]` is always -1, so none of it is
|
|
397
|
+
* eliminated — it becomes register pressure and sampler state paid by every fragment of
|
|
398
|
+
* every frame, in a shader whose author had already switched the feature off.
|
|
399
|
+
*
|
|
400
|
+
* That is ordinary waste on most parts and not ordinary on all of them. On a Radeon RX
|
|
401
|
+
* 9070 XT (RDNA4, Mesa 25.2.8) a dense interior world drawn with the full shader faults the
|
|
402
|
+
* GPU within seconds — an `SQC (data)` page fault, then a `gfx_0.0.0` ring timeout and a
|
|
403
|
+
* driver reset that takes the WebGL context with it. The fault scales with fragment count:
|
|
404
|
+
* a quarter of the pixels bought four times the survival time, and the same scene under
|
|
405
|
+
* the renderer this replaced never faults at all. A driver should not fault whatever it is
|
|
406
|
+
* handed, so that half is a driver bug worth reporting — but a shader carrying five times
|
|
407
|
+
* the work it needs is ours, and this is the half we own.
|
|
408
|
+
*
|
|
409
|
+
* `#if` rather than stripping by hand, so the enabled path stays one readable shader and
|
|
410
|
+
* the disabled one is genuinely absent rather than merely unreachable.
|
|
411
|
+
*/
|
|
412
|
+
/**
|
|
413
|
+
* The fragment shader, assembled from its sections.
|
|
414
|
+
*
|
|
415
|
+
* The sections concatenate in exactly the order they occupied when this was one file, and
|
|
416
|
+
* `flatSource.test.ts` is what holds that: sixteen permutations pinned by hash and one in
|
|
417
|
+
* full. A reordering here changes the picture, and the snapshot is what says it has not.
|
|
418
|
+
*/
|
|
419
|
+
export function flatFrag(options: FlatShaderOptions): string {
|
|
420
|
+
/*
|
|
421
|
+
* `??` per field rather than a spread over the defaults, because a spread copies a key whose
|
|
422
|
+
* value is an explicit `undefined` and destroys the default under it — which is what 3.60.2 was.
|
|
423
|
+
*/
|
|
424
|
+
const budget: LightBudget = {
|
|
425
|
+
maxLights: options.maxLights ?? FULL_LIGHT_BUDGET.maxLights,
|
|
426
|
+
maxAreaLights: options.maxAreaLights ?? FULL_LIGHT_BUDGET.maxAreaLights,
|
|
427
|
+
};
|
|
428
|
+
/*
|
|
429
|
+
* Refused rather than clamped, at the only moment anybody can act on it. A budget of zero
|
|
430
|
+
* declares `uniform vec3 uLightPos[0]`, which does not compile, and a fractional one interpolates
|
|
431
|
+
* `[7.5]` into the source — both arrive as a shader compile error naming a line nobody wrote.
|
|
432
|
+
*/
|
|
433
|
+
for (const [name, value] of [
|
|
434
|
+
['maxLights', budget.maxLights],
|
|
435
|
+
['maxAreaLights', budget.maxAreaLights],
|
|
436
|
+
] as const) {
|
|
437
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
438
|
+
throw new Error(
|
|
439
|
+
`flatFrag: ${name} must be a whole number of at least 1, not ${String(value)} — it is an ` +
|
|
440
|
+
`array size interpolated straight into the shader.`,
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
return resolveConditionals(
|
|
445
|
+
/*
|
|
446
|
+
* Joined with a newline, not concatenated bare. Each section holds the lines it owned
|
|
447
|
+
* and no trailing break, so a bare `+` would run the last line of one section into the
|
|
448
|
+
* first line of the next — which is a GLSL syntax error at best and a changed shader at
|
|
449
|
+
* worst. The snapshot caught it on the first run.
|
|
450
|
+
*/
|
|
451
|
+
[
|
|
452
|
+
preambleGlsl(budget),
|
|
453
|
+
/*
|
|
454
|
+
* **Before `LOBES_GLSL`, and that position is a correction rather than a preference.**
|
|
455
|
+
*
|
|
456
|
+
* This used to sit between `LOBES_GLSL` and `POINTSHADOW_GLSL` under a comment saying it was
|
|
457
|
+
* "outside every `#if`". It was not: `LOBES_GLSL` opens a conditional that
|
|
458
|
+
* `DIRECTIONALSHADOW_GLSL` closes, so everything between them is inside it, and `octEncode`
|
|
459
|
+
* was compiled only into the permutations with point shadows. Nothing noticed, because the
|
|
460
|
+
* only caller was `pointShadow`, which is inside the same arm.
|
|
461
|
+
*
|
|
462
|
+
* A probe grid calls `octInsetUv` from an arm that has nothing to do with shadows, so the
|
|
463
|
+
* claim had to become true. Here it is: the preamble balances its own conditionals, so this
|
|
464
|
+
* is at depth zero, and it is still declared before `pointShadow` uses it.
|
|
465
|
+
*/
|
|
466
|
+
OCTAHEDRAL_GLSL,
|
|
467
|
+
LOBES_GLSL,
|
|
468
|
+
POINTSHADOW_GLSL,
|
|
469
|
+
DIRECTIONALSHADOW_GLSL,
|
|
470
|
+
SURFACE_GLSL,
|
|
471
|
+
/*
|
|
472
|
+
* **Here because this is depth zero, which is what the chunk needs and where it was not.**
|
|
473
|
+
*
|
|
474
|
+
* Placed after `OCTAHEDRAL_GLSL` it landed inside the conditional `LOBES_GLSL` opens, so
|
|
475
|
+
* `gridIrradiance` was compiled out of every permutation without point shadows while `main`
|
|
476
|
+
* still called it — glslang answering "no matching overloaded function found" for a function
|
|
477
|
+
* whose definition was in the source, which is the same failure the note below records.
|
|
478
|
+
* Measured by counting `#if` against `#endif` per chunk rather than by reading them.
|
|
479
|
+
*/
|
|
480
|
+
PROBEGRID_GLSL,
|
|
481
|
+
/*
|
|
482
|
+
* **Immediately before `MAIN_GLSL`, and the position is the requirement.**
|
|
483
|
+
*
|
|
484
|
+
* These chunks are not a flat list: several of them open an `#if` that a later one closes,
|
|
485
|
+
* so a chunk placed between two of them lands *inside* a conditional. Put beside
|
|
486
|
+
* `OCTAHEDRAL_GLSL` this was inside `#if POINT_SHADOWS` and compiled out of all eight
|
|
487
|
+
* permutations without them — glslang answering "no matching overloaded function found" for
|
|
488
|
+
* a function whose definition was there in the source. Here it cannot be: `main` follows,
|
|
489
|
+
* and `main` is unconditional by construction.
|
|
490
|
+
*/
|
|
491
|
+
TANGENT_FRAME_GLSL,
|
|
492
|
+
MAIN_GLSL,
|
|
493
|
+
].join('\n'),
|
|
494
|
+
{
|
|
495
|
+
POINT_SHADOWS: options.pointShadows,
|
|
496
|
+
ENVIRONMENT_PROBE: options.environmentProbe,
|
|
497
|
+
NIGHT_EMISSIVE: options.nightEmissive,
|
|
498
|
+
DIRECTIONAL_SHADOWS: options.directionalShadows,
|
|
499
|
+
},
|
|
500
|
+
'flat',
|
|
501
|
+
);
|
|
502
|
+
}
|