@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,153 @@
|
|
|
1
|
+
import { DEPTH_COMPARE } from '../../depthConvention.js';
|
|
2
|
+
import { WINDSTREAKS_BINDINGS, WIND_STREAK_FRAG_WGSL, WIND_STREAK_VERT_WGSL, } from '../../shaders/generated/windStreaks.wgsl.js';
|
|
3
|
+
import { buildWindStreakLattice } from '../../windStreakDraw.js';
|
|
4
|
+
import { DEPTH_FORMAT } from './flatPass.js';
|
|
5
|
+
import { shaderModule } from './shaderModules.js';
|
|
6
|
+
/**
|
|
7
|
+
* The wind-streak pass: a lattice of debris that follows the camera and wraps.
|
|
8
|
+
*
|
|
9
|
+
* **Nothing here is per frame except ten uniforms.** The whole effect lives in the vertex
|
|
10
|
+
* shader — a particle's place comes from its index and the clock, and the box it sits in wraps
|
|
11
|
+
* around the camera — so there is no spawning, no pooling and no upload once the lattice is
|
|
12
|
+
* built.
|
|
13
|
+
*
|
|
14
|
+
* Blended over what is behind it rather than added, because dust in air occludes: this is the
|
|
15
|
+
* one effect in this backend that is neither opaque nor additive.
|
|
16
|
+
*/
|
|
17
|
+
export const WIND_STREAK_VERT_FIELDS = WINDSTREAKS_BINDINGS.WIND_STREAK_VERT.fields;
|
|
18
|
+
export const WIND_STREAK_VERT_SIZE = WINDSTREAKS_BINDINGS.WIND_STREAK_VERT.uniformSize;
|
|
19
|
+
export const WIND_STREAK_FRAG_FIELDS = WINDSTREAKS_BINDINGS.WIND_STREAK_FRAG.fields;
|
|
20
|
+
export const WIND_STREAK_FRAG_SIZE = WINDSTREAKS_BINDINGS.WIND_STREAK_FRAG.uniformSize;
|
|
21
|
+
const VERT_BINDING = WINDSTREAKS_BINDINGS.WIND_STREAK_VERT.uniforms;
|
|
22
|
+
const FRAG_BINDING = WINDSTREAKS_BINDINGS.WIND_STREAK_FRAG.uniforms;
|
|
23
|
+
const VISIBILITY_VERTEX = 0x1;
|
|
24
|
+
const VISIBILITY_FRAGMENT = 0x2;
|
|
25
|
+
const USAGE_VERTEX = 0x0020 | 0x0008;
|
|
26
|
+
export function createGpuWindStreaks(device, count, cellSize, onsetSpeed, fullSpeed) {
|
|
27
|
+
const lattice = buildWindStreakLattice(count);
|
|
28
|
+
const upload = (data, label) => {
|
|
29
|
+
const buffer = device.createBuffer({
|
|
30
|
+
label,
|
|
31
|
+
size: Math.max(4, data.byteLength),
|
|
32
|
+
usage: USAGE_VERTEX,
|
|
33
|
+
});
|
|
34
|
+
device.queue.writeBuffer(buffer, 0, data);
|
|
35
|
+
return buffer;
|
|
36
|
+
};
|
|
37
|
+
const corners = upload(lattice.corners, 'windStreaks.corners');
|
|
38
|
+
const indices = upload(lattice.indices, 'windStreaks.indices');
|
|
39
|
+
return {
|
|
40
|
+
corners,
|
|
41
|
+
indices,
|
|
42
|
+
vertexCount: lattice.vertexCount,
|
|
43
|
+
cellSize,
|
|
44
|
+
count,
|
|
45
|
+
onsetSpeed,
|
|
46
|
+
fullSpeed,
|
|
47
|
+
dispose() {
|
|
48
|
+
corners.destroy();
|
|
49
|
+
indices.destroy();
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* `aCorner` and `aIndex`, one buffer each, matching what `WindStreakRenderer` binds.
|
|
55
|
+
*
|
|
56
|
+
* Not interleaved, because they are two separate arrays on both sides and two of eight slots is
|
|
57
|
+
* nothing. The flat pass interleaves only because ten attributes will not fit.
|
|
58
|
+
*/
|
|
59
|
+
export function windStreakVertexLayouts() {
|
|
60
|
+
return [
|
|
61
|
+
{
|
|
62
|
+
arrayStride: 8,
|
|
63
|
+
attributes: [{ shaderLocation: 0, offset: 0, format: 'float32x2' }],
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
arrayStride: 4,
|
|
67
|
+
attributes: [{ shaderLocation: 1, offset: 0, format: 'float32' }],
|
|
68
|
+
},
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
export function createWindStreakBindGroupLayout(device) {
|
|
72
|
+
return device.createBindGroupLayout({
|
|
73
|
+
label: 'windStreaks.layout',
|
|
74
|
+
entries: [
|
|
75
|
+
/*
|
|
76
|
+
* **Addressed by a dynamic offset, so a frame can draw more than one batch.**
|
|
77
|
+
*
|
|
78
|
+
* With one buffer rewritten between draws, every batch reads whatever was written last:
|
|
79
|
+
* `queue.write*` calls are ordered on the queue timeline and the encoder is submitted after
|
|
80
|
+
* every one of them. The picture is each batch wearing the last one's colour, width, time
|
|
81
|
+
* and placement. That is the hazard `UniformRing` exists for, recorded in `AGENTS.md` on
|
|
82
|
+
* 2026-08-27, and this pass was one of four still carrying it — invisible for as long as
|
|
83
|
+
* nothing drew two, which is exactly how water kept it for eight releases.
|
|
84
|
+
*
|
|
85
|
+
* WebGL2 needs none of this: it sets uniforms and draws in one stream.
|
|
86
|
+
*/
|
|
87
|
+
{
|
|
88
|
+
binding: VERT_BINDING,
|
|
89
|
+
visibility: VISIBILITY_VERTEX,
|
|
90
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: WIND_STREAK_VERT_SIZE },
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
binding: FRAG_BINDING,
|
|
94
|
+
visibility: VISIBILITY_FRAGMENT,
|
|
95
|
+
buffer: { type: 'uniform', hasDynamicOffset: true, minBindingSize: WIND_STREAK_FRAG_SIZE },
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
export function createWindStreakBindGroup(device, layout, vertices, fragments) {
|
|
101
|
+
return device.createBindGroup({
|
|
102
|
+
label: 'windStreaks.bindGroup',
|
|
103
|
+
layout,
|
|
104
|
+
entries: [
|
|
105
|
+
{ binding: VERT_BINDING, resource: { buffer: vertices, size: WIND_STREAK_VERT_SIZE } },
|
|
106
|
+
{ binding: FRAG_BINDING, resource: { buffer: fragments, size: WIND_STREAK_FRAG_SIZE } },
|
|
107
|
+
],
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* The pipeline.
|
|
112
|
+
*
|
|
113
|
+
* **Alpha over, depth tested, depth not written, nothing culled.** A streak is a two-sided
|
|
114
|
+
* card carried past the camera at any angle, so culling it would drop half of them for no
|
|
115
|
+
* saving; writing depth would let a translucent smear occlude whatever is drawn after it.
|
|
116
|
+
*/
|
|
117
|
+
export function windStreakPipeline(cache, device, layout) {
|
|
118
|
+
return cache.get('windStreaks', () => ({
|
|
119
|
+
label: 'windStreaks',
|
|
120
|
+
layout: device.createPipelineLayout({ bindGroupLayouts: [layout] }),
|
|
121
|
+
vertex: {
|
|
122
|
+
module: shaderModule(device, {
|
|
123
|
+
label: 'windStreaks.vert',
|
|
124
|
+
code: WIND_STREAK_VERT_WGSL,
|
|
125
|
+
}),
|
|
126
|
+
entryPoint: 'main',
|
|
127
|
+
buffers: windStreakVertexLayouts(),
|
|
128
|
+
},
|
|
129
|
+
fragment: {
|
|
130
|
+
module: shaderModule(device, {
|
|
131
|
+
label: 'windStreaks.frag',
|
|
132
|
+
code: WIND_STREAK_FRAG_WGSL,
|
|
133
|
+
}),
|
|
134
|
+
entryPoint: 'main',
|
|
135
|
+
targets: [
|
|
136
|
+
{
|
|
137
|
+
format: cache.format,
|
|
138
|
+
blend: {
|
|
139
|
+
color: {
|
|
140
|
+
srcFactor: 'src-alpha',
|
|
141
|
+
dstFactor: 'one-minus-src-alpha',
|
|
142
|
+
operation: 'add',
|
|
143
|
+
},
|
|
144
|
+
alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
primitive: { topology: 'triangle-list', cullMode: 'none' },
|
|
150
|
+
multisample: { count: cache.sampleCount },
|
|
151
|
+
depthStencil: { format: DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: DEPTH_COMPARE },
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** Model matrices for geometry that turns to face the viewer. */
|
|
2
|
+
import { mat4 } from 'gl-matrix';
|
|
3
|
+
import type { Camera } from './camera.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Orient a mesh so its +Z faces the camera, writing the model matrix in place.
|
|
6
|
+
*
|
|
7
|
+
* The two variants are a real distinction rather than a convenience pair, and picking
|
|
8
|
+
* the wrong one is the classic billboard mistake:
|
|
9
|
+
*
|
|
10
|
+
* - **Cylindrical** (`billboardMatrixY`) spins about the world Y axis only. Anything
|
|
11
|
+
* standing on the ground uses this — a figure, a sign, a tree. Look down at it from
|
|
12
|
+
* above and it stays upright, because a thing with feet does not tilt to face you.
|
|
13
|
+
* - **Spherical** (`billboardMatrix`) faces the camera on every axis. For something with
|
|
14
|
+
* no up of its own: a spark, a puff of smoke, a glow.
|
|
15
|
+
*
|
|
16
|
+
* Allocation-free: the caller owns the matrix and it is overwritten, so a frame drawing
|
|
17
|
+
* a hundred of these allocates nothing.
|
|
18
|
+
*/
|
|
19
|
+
export declare function billboardMatrixY(out: mat4, x: number, y: number, z: number, cameraX: number, cameraZ: number, scaleX?: number, scaleY?: number): void;
|
|
20
|
+
/**
|
|
21
|
+
* Face the camera on every axis, for geometry with no up of its own.
|
|
22
|
+
*
|
|
23
|
+
* Built from the camera's own basis rather than from the direction to the eye, so a row
|
|
24
|
+
* of these stays mutually parallel instead of fanning out toward the viewer — the
|
|
25
|
+
* difference is obvious the moment two are near each other at the screen edge.
|
|
26
|
+
*/
|
|
27
|
+
export declare function billboardMatrix(out: mat4, x: number, y: number, z: number, camera: Camera, scaleX?: number, scaleY?: number): void;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** Model matrices for geometry that turns to face the viewer. */
|
|
2
|
+
import { mat4 } from 'gl-matrix';
|
|
3
|
+
/**
|
|
4
|
+
* Orient a mesh so its +Z faces the camera, writing the model matrix in place.
|
|
5
|
+
*
|
|
6
|
+
* The two variants are a real distinction rather than a convenience pair, and picking
|
|
7
|
+
* the wrong one is the classic billboard mistake:
|
|
8
|
+
*
|
|
9
|
+
* - **Cylindrical** (`billboardMatrixY`) spins about the world Y axis only. Anything
|
|
10
|
+
* standing on the ground uses this — a figure, a sign, a tree. Look down at it from
|
|
11
|
+
* above and it stays upright, because a thing with feet does not tilt to face you.
|
|
12
|
+
* - **Spherical** (`billboardMatrix`) faces the camera on every axis. For something with
|
|
13
|
+
* no up of its own: a spark, a puff of smoke, a glow.
|
|
14
|
+
*
|
|
15
|
+
* Allocation-free: the caller owns the matrix and it is overwritten, so a frame drawing
|
|
16
|
+
* a hundred of these allocates nothing.
|
|
17
|
+
*/
|
|
18
|
+
export function billboardMatrixY(out, x, y, z, cameraX, cameraZ, scaleX = 1, scaleY = 1) {
|
|
19
|
+
/*
|
|
20
|
+
* Yaw from the camera's *horizontal* offset only. Using the full 3D direction is what
|
|
21
|
+
* makes a standing figure lean back as the camera rises above it.
|
|
22
|
+
*/
|
|
23
|
+
const angle = Math.atan2(cameraX - x, cameraZ - z);
|
|
24
|
+
const sin = Math.sin(angle);
|
|
25
|
+
const cos = Math.cos(angle);
|
|
26
|
+
out[0] = cos * scaleX;
|
|
27
|
+
out[1] = 0;
|
|
28
|
+
out[2] = -sin * scaleX;
|
|
29
|
+
out[3] = 0;
|
|
30
|
+
out[4] = 0;
|
|
31
|
+
out[5] = scaleY;
|
|
32
|
+
out[6] = 0;
|
|
33
|
+
out[7] = 0;
|
|
34
|
+
out[8] = sin;
|
|
35
|
+
out[9] = 0;
|
|
36
|
+
out[10] = cos;
|
|
37
|
+
out[11] = 0;
|
|
38
|
+
out[12] = x;
|
|
39
|
+
out[13] = y;
|
|
40
|
+
out[14] = z;
|
|
41
|
+
out[15] = 1;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Face the camera on every axis, for geometry with no up of its own.
|
|
45
|
+
*
|
|
46
|
+
* Built from the camera's own basis rather than from the direction to the eye, so a row
|
|
47
|
+
* of these stays mutually parallel instead of fanning out toward the viewer — the
|
|
48
|
+
* difference is obvious the moment two are near each other at the screen edge.
|
|
49
|
+
*/
|
|
50
|
+
export function billboardMatrix(out, x, y, z, camera, scaleX = 1, scaleY = 1) {
|
|
51
|
+
// The view matrix's upper 3x3 is the camera basis, transposed; its rows are the
|
|
52
|
+
// world-space right/up/forward we want the quad's axes to be.
|
|
53
|
+
const view = camera.view;
|
|
54
|
+
const rightX = view[0];
|
|
55
|
+
const rightY = view[4];
|
|
56
|
+
const rightZ = view[8];
|
|
57
|
+
const upX = view[1];
|
|
58
|
+
const upY = view[5];
|
|
59
|
+
const upZ = view[9];
|
|
60
|
+
const forwardX = view[2];
|
|
61
|
+
const forwardY = view[6];
|
|
62
|
+
const forwardZ = view[10];
|
|
63
|
+
out[0] = rightX * scaleX;
|
|
64
|
+
out[1] = rightY * scaleX;
|
|
65
|
+
out[2] = rightZ * scaleX;
|
|
66
|
+
out[3] = 0;
|
|
67
|
+
out[4] = upX * scaleY;
|
|
68
|
+
out[5] = upY * scaleY;
|
|
69
|
+
out[6] = upZ * scaleY;
|
|
70
|
+
out[7] = 0;
|
|
71
|
+
out[8] = forwardX;
|
|
72
|
+
out[9] = forwardY;
|
|
73
|
+
out[10] = forwardZ;
|
|
74
|
+
out[11] = 0;
|
|
75
|
+
out[12] = x;
|
|
76
|
+
out[13] = y;
|
|
77
|
+
out[14] = z;
|
|
78
|
+
out[15] = 1;
|
|
79
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How wide the bloom pyramid is, how far it reaches, and where it stops.
|
|
3
|
+
*
|
|
4
|
+
* **Backend-neutral because both backends build the same pyramid**, and a difference in any of
|
|
5
|
+
* these three numbers is a difference in the picture that nothing else would explain. The WebGL2
|
|
6
|
+
* pass held the only copy and the WebGPU composite was written without it, which is how one
|
|
7
|
+
* backend ended up running the first stage of eleven and calling it bloom: it drew, it validated,
|
|
8
|
+
* and the frame it produced was a thresholded image with no blur in it at all. Measured on
|
|
9
|
+
* night-court, that was 7,512 pixels moved against WebGL2's 47,574.
|
|
10
|
+
*
|
|
11
|
+
* `bloomPass.ts` binds these on one side and `webgpu/renderer.ts` on the other.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* How many halvings the chain may take.
|
|
15
|
+
*
|
|
16
|
+
* Six covers a 4K frame down to about 30 pixels across, which is where a level stops describing
|
|
17
|
+
* a halo and starts describing the whole screen. Fewer would put an end on the falloff; more
|
|
18
|
+
* would spend draws on levels that add a flat tint.
|
|
19
|
+
*/
|
|
20
|
+
export declare const BLOOM_LEVELS = 6;
|
|
21
|
+
/** Below this a level is too small to describe anything but an average of the frame. */
|
|
22
|
+
export declare const BLOOM_MIN_SIDE = 8;
|
|
23
|
+
/**
|
|
24
|
+
* How far the tent reaches on the way back up, in UV.
|
|
25
|
+
*
|
|
26
|
+
* In UV rather than in texels, so the spread is the same fraction of the picture on every
|
|
27
|
+
* display and at every level of the chain. This is the "one radius" of the three numbers this
|
|
28
|
+
* effect is allowed: it is fixed rather than exposed because nobody has asked to move it, and a
|
|
29
|
+
* caller who does gets it as a construction-time option rather than as a magic literal here.
|
|
30
|
+
*/
|
|
31
|
+
export declare const BLOOM_FILTER_RADIUS_UV = 0.005;
|
|
32
|
+
/**
|
|
33
|
+
* What is wrong with a profile that asked for bloom, in words, or null when nothing is.
|
|
34
|
+
*
|
|
35
|
+
* **Shared because it is a fact about the profile rather than about a backend**, and because a
|
|
36
|
+
* warning that only one backend says is a warning half the consumers never see. WebGL2 said both
|
|
37
|
+
* of these at init and this backend said something else entirely from its setters — that the
|
|
38
|
+
* composite did not exist yet, which stopped being true the day it landed and went on being
|
|
39
|
+
* printed. A stale warning is worse than none: it tells somebody a working feature is broken.
|
|
40
|
+
*
|
|
41
|
+
* Not a clamp and not a refusal. The effect still runs and still spreads whatever passes its
|
|
42
|
+
* threshold. What it cannot do is separate a light from a white wall, because on a target that
|
|
43
|
+
* does not keep the range they arrive as the same colour. That is the class of fault this engine
|
|
44
|
+
* has shipped twice under other names — a shadow strength of zero behind an enabled shadow pass,
|
|
45
|
+
* an exposure with no curve to be exposed into — where everything is switched on, nothing is
|
|
46
|
+
* wrong, and nothing happens.
|
|
47
|
+
*/
|
|
48
|
+
export declare function bloomProfileWarning(quality: {
|
|
49
|
+
readonly bloom: number;
|
|
50
|
+
readonly screenEffects: boolean;
|
|
51
|
+
readonly hdrScene: boolean;
|
|
52
|
+
readonly bloomThreshold: number;
|
|
53
|
+
}): string | null;
|
|
54
|
+
/** One level of the pyramid: level 0 is half the frame and each one after it half again. */
|
|
55
|
+
export interface BloomLevelSize {
|
|
56
|
+
readonly width: number;
|
|
57
|
+
readonly height: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The pyramid for a frame of this size, largest first, or an empty list where none would fit.
|
|
61
|
+
*
|
|
62
|
+
* Empty is a real answer rather than a failure: a frame small enough that its half is under
|
|
63
|
+
* `BLOOM_MIN_SIDE` has nowhere for a halo to live, and a caller reads that as "no bloom this
|
|
64
|
+
* frame" exactly as it reads a target that would not allocate.
|
|
65
|
+
*/
|
|
66
|
+
export declare function bloomLevelSizes(width: number, height: number): BloomLevelSize[];
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How wide the bloom pyramid is, how far it reaches, and where it stops.
|
|
3
|
+
*
|
|
4
|
+
* **Backend-neutral because both backends build the same pyramid**, and a difference in any of
|
|
5
|
+
* these three numbers is a difference in the picture that nothing else would explain. The WebGL2
|
|
6
|
+
* pass held the only copy and the WebGPU composite was written without it, which is how one
|
|
7
|
+
* backend ended up running the first stage of eleven and calling it bloom: it drew, it validated,
|
|
8
|
+
* and the frame it produced was a thresholded image with no blur in it at all. Measured on
|
|
9
|
+
* night-court, that was 7,512 pixels moved against WebGL2's 47,574.
|
|
10
|
+
*
|
|
11
|
+
* `bloomPass.ts` binds these on one side and `webgpu/renderer.ts` on the other.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* How many halvings the chain may take.
|
|
15
|
+
*
|
|
16
|
+
* Six covers a 4K frame down to about 30 pixels across, which is where a level stops describing
|
|
17
|
+
* a halo and starts describing the whole screen. Fewer would put an end on the falloff; more
|
|
18
|
+
* would spend draws on levels that add a flat tint.
|
|
19
|
+
*/
|
|
20
|
+
export const BLOOM_LEVELS = 6;
|
|
21
|
+
/** Below this a level is too small to describe anything but an average of the frame. */
|
|
22
|
+
export const BLOOM_MIN_SIDE = 8;
|
|
23
|
+
/**
|
|
24
|
+
* How far the tent reaches on the way back up, in UV.
|
|
25
|
+
*
|
|
26
|
+
* In UV rather than in texels, so the spread is the same fraction of the picture on every
|
|
27
|
+
* display and at every level of the chain. This is the "one radius" of the three numbers this
|
|
28
|
+
* effect is allowed: it is fixed rather than exposed because nobody has asked to move it, and a
|
|
29
|
+
* caller who does gets it as a construction-time option rather than as a magic literal here.
|
|
30
|
+
*/
|
|
31
|
+
export const BLOOM_FILTER_RADIUS_UV = 0.005;
|
|
32
|
+
/**
|
|
33
|
+
* What is wrong with a profile that asked for bloom, in words, or null when nothing is.
|
|
34
|
+
*
|
|
35
|
+
* **Shared because it is a fact about the profile rather than about a backend**, and because a
|
|
36
|
+
* warning that only one backend says is a warning half the consumers never see. WebGL2 said both
|
|
37
|
+
* of these at init and this backend said something else entirely from its setters — that the
|
|
38
|
+
* composite did not exist yet, which stopped being true the day it landed and went on being
|
|
39
|
+
* printed. A stale warning is worse than none: it tells somebody a working feature is broken.
|
|
40
|
+
*
|
|
41
|
+
* Not a clamp and not a refusal. The effect still runs and still spreads whatever passes its
|
|
42
|
+
* threshold. What it cannot do is separate a light from a white wall, because on a target that
|
|
43
|
+
* does not keep the range they arrive as the same colour. That is the class of fault this engine
|
|
44
|
+
* has shipped twice under other names — a shadow strength of zero behind an enabled shadow pass,
|
|
45
|
+
* an exposure with no curve to be exposed into — where everything is switched on, nothing is
|
|
46
|
+
* wrong, and nothing happens.
|
|
47
|
+
*/
|
|
48
|
+
export function bloomProfileWarning(quality) {
|
|
49
|
+
if (quality.bloom <= 0)
|
|
50
|
+
return null;
|
|
51
|
+
if (!quality.screenEffects) {
|
|
52
|
+
return ('bloom needs screenEffects, since without the off-screen target there is no finished ' +
|
|
53
|
+
'frame to threshold. It is off.');
|
|
54
|
+
}
|
|
55
|
+
if (!quality.hdrScene) {
|
|
56
|
+
return (`bloom is on with hdrScene off, so the scene is clipped to 0..1 before the composite ` +
|
|
57
|
+
`sees it and a threshold of ${quality.bloomThreshold} in scene units can only mean ` +
|
|
58
|
+
`whiteness. Turn hdrScene on, or set a threshold below 1.`);
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The pyramid for a frame of this size, largest first, or an empty list where none would fit.
|
|
64
|
+
*
|
|
65
|
+
* Empty is a real answer rather than a failure: a frame small enough that its half is under
|
|
66
|
+
* `BLOOM_MIN_SIDE` has nowhere for a halo to live, and a caller reads that as "no bloom this
|
|
67
|
+
* frame" exactly as it reads a target that would not allocate.
|
|
68
|
+
*/
|
|
69
|
+
export function bloomLevelSizes(width, height) {
|
|
70
|
+
const sizes = [];
|
|
71
|
+
let levelWidth = width;
|
|
72
|
+
let levelHeight = height;
|
|
73
|
+
for (let level = 0; level < BLOOM_LEVELS; level++) {
|
|
74
|
+
levelWidth = Math.floor(levelWidth / 2);
|
|
75
|
+
levelHeight = Math.floor(levelHeight / 2);
|
|
76
|
+
/* Below this a level is a handful of texels describing the whole frame, which adds a
|
|
77
|
+
flat tint rather than a halo, and one more halving of a 3-pixel side is 1. */
|
|
78
|
+
if (levelWidth < BLOOM_MIN_SIDE || levelHeight < BLOOM_MIN_SIDE)
|
|
79
|
+
break;
|
|
80
|
+
sizes.push({ width: levelWidth, height: levelHeight });
|
|
81
|
+
}
|
|
82
|
+
return sizes;
|
|
83
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The bloom chain: threshold the frame, halve it repeatedly, and add it back up.
|
|
3
|
+
*
|
|
4
|
+
* Its own module rather than more of `SceneTarget`, for the same reason `AmbientOcclusionPass`
|
|
5
|
+
* is: that class owns where the frame lands and how it reaches the canvas, and this owns one
|
|
6
|
+
* effect's targets and programs. The composite adds the texture this returns and knows nothing
|
|
7
|
+
* else about it.
|
|
8
|
+
*
|
|
9
|
+
* **A pyramid rather than one wide blur.** A gaussian broad enough to look like glare is
|
|
10
|
+
* hundreds of taps at full resolution. Halving the frame six times and adding the levels back
|
|
11
|
+
* costs about a third of a full-resolution pass in total, and the sum of the octaves is a
|
|
12
|
+
* falloff with no end to it, which is what a real glare has and a single kernel does not.
|
|
13
|
+
*/
|
|
14
|
+
export declare class BloomPass {
|
|
15
|
+
private readonly gl;
|
|
16
|
+
/** The chain, level 0 at half the frame and each one after it half again. */
|
|
17
|
+
private readonly levels;
|
|
18
|
+
private width;
|
|
19
|
+
private height;
|
|
20
|
+
/**
|
|
21
|
+
* Set once if a target will not complete, after which this pass does nothing and says so once.
|
|
22
|
+
*
|
|
23
|
+
* The alternative to an honest "off" is a frame with a texture nobody wrote added into it,
|
|
24
|
+
* and the last time an effect here sampled an unwritten target the failure presented as the
|
|
25
|
+
* driver being at fault. See `sceneTarget.ts`.
|
|
26
|
+
*/
|
|
27
|
+
private unavailable;
|
|
28
|
+
/** Half floats where the part will render to them. See the note in `allocate`. */
|
|
29
|
+
private readonly floatColor;
|
|
30
|
+
private readonly prefilterProgram;
|
|
31
|
+
private readonly prefilterUniforms;
|
|
32
|
+
private readonly downsampleProgram;
|
|
33
|
+
private readonly downsampleUniforms;
|
|
34
|
+
private readonly upsampleProgram;
|
|
35
|
+
private readonly upsampleUniforms;
|
|
36
|
+
private readonly vao;
|
|
37
|
+
/** Scratch for the source texel size, so a per-frame pass allocates nothing. */
|
|
38
|
+
private readonly texel;
|
|
39
|
+
constructor(gl: WebGL2RenderingContext);
|
|
40
|
+
private ensureSize;
|
|
41
|
+
private allocate;
|
|
42
|
+
/**
|
|
43
|
+
* Build the frame's bloom. Returns the texture to add, or null if this pass could not run,
|
|
44
|
+
* which the caller must read as "no bloom" rather than as black.
|
|
45
|
+
*
|
|
46
|
+
* `threshold` is in scene units, so it only separates a light from white paint on a target
|
|
47
|
+
* that kept the range. The caller owns that decision and the warning that goes with it.
|
|
48
|
+
*/
|
|
49
|
+
run(scene: WebGLTexture, width: number, height: number, threshold: number): WebGLTexture | null;
|
|
50
|
+
/** One source texel in UV, which is what the thirteen taps are laid out in. */
|
|
51
|
+
private uploadTexel;
|
|
52
|
+
private release;
|
|
53
|
+
dispose(): void;
|
|
54
|
+
}
|