@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,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A medium filling the whole frustum: what a caller may say about it, and what that resolves to.
|
|
3
|
+
*
|
|
4
|
+
* **Here rather than in either renderer, for the reason `lightVolumeDraw.ts` states at its own
|
|
5
|
+
* top**: two copies of a clamp is a fog that thins on one backend and not the other, and nothing
|
|
6
|
+
* raises, because either frame is a plausible one. Everything in this file is arithmetic both
|
|
7
|
+
* backends run before they bind anything.
|
|
8
|
+
*
|
|
9
|
+
* The pass this feeds is described in `shaders/globalMedium.ts`. The short version of why it is
|
|
10
|
+
* not `atmosphere.ts`: distance fog asks how much of a *surface* survives the journey to the eye,
|
|
11
|
+
* and this asks what the journey adds — which is every point along it the sun can see, and is the
|
|
12
|
+
* only one of the two that can put the shape of a doorway on a floor.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The most steps a march may take, which is the shader's own loop bound.
|
|
17
|
+
*
|
|
18
|
+
* **Here rather than beside the GLSL, and the reason is bundle size rather than tidiness.**
|
|
19
|
+
* `renderQuality.ts` clamps against this and is imported by everything; importing one integer out
|
|
20
|
+
* of the shader module would carry seventeen kilobytes of shader text into every consumer's
|
|
21
|
+
* bundle, tree-shaken or not. The engine has paid that once already — see
|
|
22
|
+
* `docs/IMPROVEMENTS.md` on a constant imported from an offline module.
|
|
23
|
+
*
|
|
24
|
+
* Sixty-four is well past useful: at that count the step is centimetres across a room, and the
|
|
25
|
+
* picture stopped changing somewhere around a third of it.
|
|
26
|
+
*/
|
|
27
|
+
export const MAX_GLOBAL_MEDIUM_STEPS = 64;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The most steps a part `isWeakGpuFamily` names gets, whatever the profile asked for.
|
|
31
|
+
*
|
|
32
|
+
* **The march is the only ceiling in `RenderQuality` that is a per-pixel loop**, so it is the one
|
|
33
|
+
* a weak part gains most from having lowered and the one a settings screen would otherwise have to
|
|
34
|
+
* know about by name. Sixteen still resolves a shaft across a room; what it gives up is the
|
|
35
|
+
* smoothness of a long march through a low sun, which is where the banding a step count buys off
|
|
36
|
+
* actually lives.
|
|
37
|
+
*
|
|
38
|
+
* A floor and not a verdict, like the two clamps beside it: `capabilityClamp: false` means "this
|
|
39
|
+
* person chose these numbers themselves", and a player who asks a weak part for a thick fog is
|
|
40
|
+
* entitled to it and to the frame rate that comes with it.
|
|
41
|
+
*/
|
|
42
|
+
export const WEAK_GPU_MEDIUM_STEPS = 16;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* How thick the air is, this frame.
|
|
46
|
+
*
|
|
47
|
+
* A per-frame dial and not a quality setting, in the split `renderQuality.ts` draws for depth of
|
|
48
|
+
* field: what a device can afford is `globalMediumSteps`, and what the weather is doing is this.
|
|
49
|
+
* A game walks into a fog bank; a profile decides how expensive being in one is allowed to be.
|
|
50
|
+
*/
|
|
51
|
+
export interface GlobalMediumOptions {
|
|
52
|
+
/**
|
|
53
|
+
* Extinction per metre. **0 is off, and off is free** — no target is allocated, no pass is
|
|
54
|
+
* built and the composite is skipped, so a game that never sets this pays nothing at all.
|
|
55
|
+
*
|
|
56
|
+
* As a scale: 0.02 leaves a wall at 50 m about a third obscured, 0.1 is thick weather, and
|
|
57
|
+
* above about 0.5 nothing is visible past a room.
|
|
58
|
+
*/
|
|
59
|
+
readonly density: number;
|
|
60
|
+
/**
|
|
61
|
+
* How much of what the medium takes out of a ray comes back as light rather than as heat, 0 to 1.
|
|
62
|
+
*
|
|
63
|
+
* Near 1 for water droplets, which is fog, cloud and steam; lower for smoke, which is soot and
|
|
64
|
+
* absorbs most of what it intercepts. It is the difference between a white fog that a torch
|
|
65
|
+
* lights up and a black smoke that swallows the same torch.
|
|
66
|
+
*/
|
|
67
|
+
readonly albedo: number;
|
|
68
|
+
/**
|
|
69
|
+
* Henyey-Greenstein anisotropy, -1 back to 1 forward. 0 is isotropic.
|
|
70
|
+
*
|
|
71
|
+
* **This is the term that makes a medium read as weather rather than as a grey wash.** Real haze
|
|
72
|
+
* is strongly forward-scattering, which is why the air around a low sun glows and the same air
|
|
73
|
+
* behind the viewer does not. Around 0.6 for atmospheric haze; 0 for a medium with nothing
|
|
74
|
+
* directional about it at all.
|
|
75
|
+
*/
|
|
76
|
+
readonly anisotropy: number;
|
|
77
|
+
/**
|
|
78
|
+
* Where the march stops, in metres. Beyond it the medium is not sampled and nothing is added.
|
|
79
|
+
*
|
|
80
|
+
* A bound on the *integral*, not on the fog: extinction is still integrated over the whole
|
|
81
|
+
* distance a ray travels, so a far wall behind this bound is still obscured. What stops is the
|
|
82
|
+
* search for light to scatter, which is what costs — and past a few extinction lengths there is
|
|
83
|
+
* no transmittance left for a sample to contribute through.
|
|
84
|
+
*/
|
|
85
|
+
readonly maxDistance: number;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* What a renderer starts with: off, and everything else at a value that means "ordinary air".
|
|
90
|
+
*
|
|
91
|
+
* The three settings beside `density` are never consulted while it is zero, so they are chosen to
|
|
92
|
+
* make `setGlobalMedium(0.02)`-shaped calls — one number, the rest defaulted — land somewhere
|
|
93
|
+
* recognisable rather than on a black isotropic soup.
|
|
94
|
+
*/
|
|
95
|
+
export const DEFAULT_GLOBAL_MEDIUM: GlobalMediumOptions = {
|
|
96
|
+
density: 0,
|
|
97
|
+
albedo: 0.9,
|
|
98
|
+
anisotropy: 0.6,
|
|
99
|
+
maxDistance: 200,
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* A caller's numbers, clamped to what the shader can be handed.
|
|
104
|
+
*
|
|
105
|
+
* **Every bound here is a picture rather than a guard.** A negative density is `exp(+x)` and a
|
|
106
|
+
* frame that grows brighter with distance; an anisotropy of exactly 1 or -1 divides the phase
|
|
107
|
+
* function by zero, which is a NaN that a half-float target spreads over the whole screen rather
|
|
108
|
+
* than reporting; a `maxDistance` of zero is a march with no length that still costs its steps.
|
|
109
|
+
*/
|
|
110
|
+
export function resolveGlobalMedium(options: Partial<GlobalMediumOptions>): GlobalMediumOptions {
|
|
111
|
+
const d = DEFAULT_GLOBAL_MEDIUM;
|
|
112
|
+
return {
|
|
113
|
+
density: Math.max(0, options.density ?? d.density),
|
|
114
|
+
albedo: Math.min(1, Math.max(0, options.albedo ?? d.albedo)),
|
|
115
|
+
/* Short of the poles, where `(1 - g^2)` over `(1 + g^2 - 2g)^1.5` is 0/0. */
|
|
116
|
+
anisotropy: Math.min(0.95, Math.max(-0.95, options.anisotropy ?? d.anisotropy)),
|
|
117
|
+
maxDistance: Math.max(1e-3, options.maxDistance ?? d.maxDistance),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Whether this frame draws the medium at all.
|
|
123
|
+
*
|
|
124
|
+
* Both halves, in one place, because both backends have to agree about it exactly: the claim that
|
|
125
|
+
* `density: 0` is pixel-identical to the pass being absent is only true if neither backend runs a
|
|
126
|
+
* composite at zero, and a second copy of this test is where that stops being true.
|
|
127
|
+
*/
|
|
128
|
+
export function mediumActive(options: GlobalMediumOptions, steps: number): boolean {
|
|
129
|
+
return options.density > 0 && steps > 0;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* The march's target size.
|
|
134
|
+
*
|
|
135
|
+
* **Half each way is a quarter of the march, which is the whole reason a global medium is
|
|
136
|
+
* affordable.** A step is a shadow lookup and an exponential, tens of times a pixel, where an
|
|
137
|
+
* occlusion tap is one depth fetch — which is why `ambientOcclusionPass.ts` can run at the frame's
|
|
138
|
+
* own size and this cannot. What half resolution costs is bought back by the upsample, which is
|
|
139
|
+
* depth-aware precisely because the one place a half-res medium is visible is a silhouette.
|
|
140
|
+
*
|
|
141
|
+
* Rounded up, never below one: a frame one pixel tall halved is zero, and a zero-height target is
|
|
142
|
+
* refused by both backends at creation.
|
|
143
|
+
*/
|
|
144
|
+
export function mediumTargetSize(
|
|
145
|
+
width: number,
|
|
146
|
+
height: number,
|
|
147
|
+
halfResolution: boolean,
|
|
148
|
+
): { width: number; height: number } {
|
|
149
|
+
const divisor = halfResolution ? 2 : 1;
|
|
150
|
+
return {
|
|
151
|
+
width: Math.max(1, Math.ceil(Math.max(1, width) / divisor)),
|
|
152
|
+
height: Math.max(1, Math.ceil(Math.max(1, height) / divisor)),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { mat4 } from 'gl-matrix';
|
|
2
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
3
|
+
|
|
4
|
+
import { mediumTargetSize } from './globalMedium.ts';
|
|
5
|
+
import type { GlobalMediumOptions } from './globalMedium.ts';
|
|
6
|
+
import { DEPTH_01_TO_CLIP } from './lightVolumeDraw.ts';
|
|
7
|
+
import { compileProgram, uniformLocations } from './shader.ts';
|
|
8
|
+
import { FULLSCREEN_VERT } from './shaders/fullscreen.ts';
|
|
9
|
+
import { MEDIUM_FRAG, MEDIUM_UPSAMPLE_FRAG } from './shaders/globalMedium.ts';
|
|
10
|
+
|
|
11
|
+
/** What the march needs about the light, which is the sun and the sky and nothing else. */
|
|
12
|
+
export interface MediumLight {
|
|
13
|
+
/** Surface → sun, normalised. `Environment.directionalDir` unchanged. */
|
|
14
|
+
readonly sunDir: ArrayLike<number>;
|
|
15
|
+
readonly sunColor: ArrayLike<number>;
|
|
16
|
+
/** The sky's fill, scattered isotropically, so a shadowed medium is grey rather than black. */
|
|
17
|
+
readonly ambient: ArrayLike<number>;
|
|
18
|
+
/** How much of the medium the sun's shadow map removes, 0 to 1. At 0 no map is sampled. */
|
|
19
|
+
readonly sunShadow: number;
|
|
20
|
+
/** World → light clip, **uncorrected**: the shader does its own `* 0.5 + 0.5`. */
|
|
21
|
+
readonly lightViewProj: ReadonlyMat4;
|
|
22
|
+
readonly staticShadowMap: WebGLTexture;
|
|
23
|
+
readonly peeledShadowMap: WebGLTexture;
|
|
24
|
+
readonly dynamicShadowMap: WebGLTexture;
|
|
25
|
+
readonly peeledEnabled: boolean;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The global participating medium on WebGL2: a half-res march, then a depth-aware composite.
|
|
30
|
+
*
|
|
31
|
+
* **Its own module rather than more of `SceneTarget`**, on the split `ambientOcclusionPass.ts`
|
|
32
|
+
* draws: that class owns where the frame lands and how it reaches the canvas, and this owns one
|
|
33
|
+
* effect's target and programs. It is patterned on `SsrPass` more closely than on the occlusion
|
|
34
|
+
* pass, because it has the same shape — a march into a target of its own, then one composite done
|
|
35
|
+
* by the blend state, so neither pass ever samples the colour it is modifying.
|
|
36
|
+
*
|
|
37
|
+
* **One target and no ping-pong.** The march writes scattered light in `rgb` and transmittance in
|
|
38
|
+
* `a`; `(ONE, SRC_ALPHA)` against that is `dst * T + L`, which is the transfer equation for the
|
|
39
|
+
* segment written out. There is nothing to blur — a homogeneous medium is smooth by construction,
|
|
40
|
+
* and the only sharp thing in the integral is the shadow map, which the march dithers.
|
|
41
|
+
*/
|
|
42
|
+
export class GlobalMediumPass {
|
|
43
|
+
private readonly march: WebGLProgram;
|
|
44
|
+
private readonly marchUniforms: Record<string, WebGLUniformLocation | null>;
|
|
45
|
+
private readonly upsample: WebGLProgram;
|
|
46
|
+
private readonly upsampleUniforms: Record<string, WebGLUniformLocation | null>;
|
|
47
|
+
private readonly vao: WebGLVertexArrayObject;
|
|
48
|
+
|
|
49
|
+
private target: WebGLTexture | null = null;
|
|
50
|
+
private framebuffer: WebGLFramebuffer | null = null;
|
|
51
|
+
private width = 0;
|
|
52
|
+
private height = 0;
|
|
53
|
+
/** The frame size the current target was derived from, so a resize is noticed. */
|
|
54
|
+
private frameWidth = 0;
|
|
55
|
+
private frameHeight = 0;
|
|
56
|
+
private half = true;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Set once if the target will not complete, after which this pass does nothing and says so once.
|
|
60
|
+
*
|
|
61
|
+
* The same honest "off" `ambientOcclusionPass.ts` takes, and its note is the argument: *"the
|
|
62
|
+
* alternative to an honest off is a frame multiplied by a target that was never written, and the
|
|
63
|
+
* last time an effect in this renderer sampled a target nobody had filled, the failure presented
|
|
64
|
+
* as the driver being at fault."* Here the multiplication is literal — a composite reading an
|
|
65
|
+
* unwritten alpha would multiply the whole frame by whatever was in that memory.
|
|
66
|
+
*/
|
|
67
|
+
private unavailable = false;
|
|
68
|
+
|
|
69
|
+
/** `inverse(viewProjection) * DEPTH_01_TO_CLIP`, rebuilt once a frame. See `SsrPass`. */
|
|
70
|
+
private readonly depthToWorld = new Float32Array(16);
|
|
71
|
+
/** The four terms the upsample linearises a depth with, so a per-frame pass allocates nothing. */
|
|
72
|
+
private readonly depthToViewZ = new Float32Array(4);
|
|
73
|
+
private readonly mediumTexel = new Float32Array(2);
|
|
74
|
+
private readonly invProjection = new Float32Array(16);
|
|
75
|
+
|
|
76
|
+
constructor(
|
|
77
|
+
private readonly gl: WebGL2RenderingContext,
|
|
78
|
+
/**
|
|
79
|
+
* Whether a half-float target is available, which is `EXT_color_buffer_float`.
|
|
80
|
+
*
|
|
81
|
+
* `RGBA8` is a real fallback rather than a refusal: transmittance lives in 0 to 1 by
|
|
82
|
+
* definition, and the inscatter only leaves that range against an HDR scene — where the
|
|
83
|
+
* fallback clips a bright fog to white instead of losing it. `SceneTarget.keepsRange` makes
|
|
84
|
+
* the same trade for the frame itself.
|
|
85
|
+
*/
|
|
86
|
+
private readonly floatColor: boolean,
|
|
87
|
+
) {
|
|
88
|
+
this.march = compileProgram(gl, FULLSCREEN_VERT, MEDIUM_FRAG, 'medium');
|
|
89
|
+
this.marchUniforms = uniformLocations(gl, this.march, 'medium');
|
|
90
|
+
this.upsample = compileProgram(gl, FULLSCREEN_VERT, MEDIUM_UPSAMPLE_FRAG, 'mediumUpsample');
|
|
91
|
+
this.upsampleUniforms = uniformLocations(gl, this.upsample, 'mediumUpsample');
|
|
92
|
+
const vao = gl.createVertexArray();
|
|
93
|
+
if (vao === null) throw new Error('GlobalMediumPass: createVertexArray failed');
|
|
94
|
+
this.vao = vao;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
private ensureSize(frameWidth: number, frameHeight: number, half: boolean): boolean {
|
|
98
|
+
if (this.unavailable) return false;
|
|
99
|
+
if (
|
|
100
|
+
this.frameWidth === frameWidth &&
|
|
101
|
+
this.frameHeight === frameHeight &&
|
|
102
|
+
this.half === half &&
|
|
103
|
+
this.target !== null
|
|
104
|
+
) {
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
const { gl } = this;
|
|
108
|
+
const size = mediumTargetSize(frameWidth, frameHeight, half);
|
|
109
|
+
this.frameWidth = frameWidth;
|
|
110
|
+
this.frameHeight = frameHeight;
|
|
111
|
+
this.half = half;
|
|
112
|
+
this.width = size.width;
|
|
113
|
+
this.height = size.height;
|
|
114
|
+
|
|
115
|
+
/* Unit 0, chosen rather than inherited, for the reason `SsrPass.ensureSize` gives. */
|
|
116
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
117
|
+
if (this.target === null) this.target = gl.createTexture();
|
|
118
|
+
gl.bindTexture(gl.TEXTURE_2D, this.target);
|
|
119
|
+
gl.texImage2D(
|
|
120
|
+
gl.TEXTURE_2D,
|
|
121
|
+
0,
|
|
122
|
+
this.floatColor ? gl.RGBA16F : gl.RGBA8,
|
|
123
|
+
size.width,
|
|
124
|
+
size.height,
|
|
125
|
+
0,
|
|
126
|
+
gl.RGBA,
|
|
127
|
+
this.floatColor ? gl.HALF_FLOAT : gl.UNSIGNED_BYTE,
|
|
128
|
+
null,
|
|
129
|
+
);
|
|
130
|
+
/*
|
|
131
|
+
* NEAREST, and it is the upsample's design rather than a saving. That pass computes the four
|
|
132
|
+
* bilinear weights itself so that it can *refuse* one of them across a depth edge, and it
|
|
133
|
+
* fetches each texel at its own centre — where a linear filter returns the texel exactly.
|
|
134
|
+
* Asking the hardware to blend as well would blend the taps this pass exists to separate.
|
|
135
|
+
*/
|
|
136
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
137
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
138
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
139
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
140
|
+
|
|
141
|
+
if (this.framebuffer === null) this.framebuffer = gl.createFramebuffer();
|
|
142
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
|
143
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.target, 0);
|
|
144
|
+
const ready = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;
|
|
145
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
146
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
147
|
+
|
|
148
|
+
if (!ready) {
|
|
149
|
+
this.unavailable = true;
|
|
150
|
+
console.warn(
|
|
151
|
+
"GlobalMediumPass: this driver will not render to the medium's target, so the global " +
|
|
152
|
+
'medium is off. The frame itself is unaffected.',
|
|
153
|
+
);
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* March the medium into this pass's own target. Returns false if it could not run, which the
|
|
161
|
+
* caller must read as "no medium" rather than composite something nobody wrote.
|
|
162
|
+
*
|
|
163
|
+
* `viewProjection` and `projection` are the **raw** camera matrices, as `SsrPass` takes them:
|
|
164
|
+
* `DEPTH_01_TO_CLIP` carries a stored depth back into the clip space the first was built in,
|
|
165
|
+
* and pairing either with a clip-corrected matrix applies the remap twice.
|
|
166
|
+
*/
|
|
167
|
+
marchMedium(
|
|
168
|
+
depth: WebGLTexture,
|
|
169
|
+
frameWidth: number,
|
|
170
|
+
frameHeight: number,
|
|
171
|
+
half: boolean,
|
|
172
|
+
steps: number,
|
|
173
|
+
options: GlobalMediumOptions,
|
|
174
|
+
viewProjection: ReadonlyMat4,
|
|
175
|
+
projection: ReadonlyMat4,
|
|
176
|
+
eye: ArrayLike<number>,
|
|
177
|
+
light: MediumLight,
|
|
178
|
+
): boolean {
|
|
179
|
+
if (!this.ensureSize(frameWidth, frameHeight, half)) return false;
|
|
180
|
+
const { gl } = this;
|
|
181
|
+
const u = this.marchUniforms;
|
|
182
|
+
|
|
183
|
+
mat4.invert(this.depthToWorld, viewProjection);
|
|
184
|
+
mat4.multiply(this.depthToWorld, this.depthToWorld, DEPTH_01_TO_CLIP);
|
|
185
|
+
/*
|
|
186
|
+
* The upsample's four terms, taken here because this is the frame the march ran against.
|
|
187
|
+
* Column major, so `[2][2]` is element 10 and `[3][3]` is element 15 — the same four
|
|
188
|
+
* `ambientOcclusionPass.ts` reads, in the same order.
|
|
189
|
+
*/
|
|
190
|
+
mat4.invert(this.invProjection, projection);
|
|
191
|
+
this.depthToViewZ[0] = this.invProjection[10] ?? 0;
|
|
192
|
+
this.depthToViewZ[1] = this.invProjection[14] ?? 0;
|
|
193
|
+
this.depthToViewZ[2] = this.invProjection[11] ?? 0;
|
|
194
|
+
this.depthToViewZ[3] = this.invProjection[15] ?? 1;
|
|
195
|
+
|
|
196
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
|
197
|
+
gl.viewport(0, 0, this.width, this.height);
|
|
198
|
+
/* One triangle over a target with no depth attachment, so nothing inherited from the scene
|
|
199
|
+
pass is tested against a buffer that is not there. */
|
|
200
|
+
gl.disable(gl.DEPTH_TEST);
|
|
201
|
+
gl.depthMask(false);
|
|
202
|
+
gl.disable(gl.CULL_FACE);
|
|
203
|
+
gl.disable(gl.BLEND);
|
|
204
|
+
gl.disable(gl.SCISSOR_TEST);
|
|
205
|
+
|
|
206
|
+
gl.useProgram(this.march);
|
|
207
|
+
gl.bindVertexArray(this.vao);
|
|
208
|
+
|
|
209
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
210
|
+
gl.bindTexture(gl.TEXTURE_2D, depth);
|
|
211
|
+
gl.uniform1i(u['uDepth'] ?? null, 0);
|
|
212
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
213
|
+
gl.bindTexture(gl.TEXTURE_2D, light.staticShadowMap);
|
|
214
|
+
gl.uniform1i(u['uStaticShadowMap'] ?? null, 1);
|
|
215
|
+
gl.activeTexture(gl.TEXTURE2);
|
|
216
|
+
gl.bindTexture(gl.TEXTURE_2D, light.peeledShadowMap);
|
|
217
|
+
gl.uniform1i(u['uPeeledShadowMap'] ?? null, 2);
|
|
218
|
+
gl.activeTexture(gl.TEXTURE3);
|
|
219
|
+
gl.bindTexture(gl.TEXTURE_2D, light.dynamicShadowMap);
|
|
220
|
+
gl.uniform1i(u['uDynamicShadowMap'] ?? null, 3);
|
|
221
|
+
|
|
222
|
+
gl.uniformMatrix4fv(u['uDepthToWorld'] ?? null, false, this.depthToWorld);
|
|
223
|
+
gl.uniform3f(u['uCameraPos'] ?? null, eye[0] ?? 0, eye[1] ?? 0, eye[2] ?? 0);
|
|
224
|
+
gl.uniform3f(
|
|
225
|
+
u['uSunDir'] ?? null,
|
|
226
|
+
light.sunDir[0] ?? 0,
|
|
227
|
+
light.sunDir[1] ?? 1,
|
|
228
|
+
light.sunDir[2] ?? 0,
|
|
229
|
+
);
|
|
230
|
+
gl.uniform3f(
|
|
231
|
+
u['uSunColor'] ?? null,
|
|
232
|
+
light.sunColor[0] ?? 0,
|
|
233
|
+
light.sunColor[1] ?? 0,
|
|
234
|
+
light.sunColor[2] ?? 0,
|
|
235
|
+
);
|
|
236
|
+
gl.uniform3f(
|
|
237
|
+
u['uAmbient'] ?? null,
|
|
238
|
+
light.ambient[0] ?? 0,
|
|
239
|
+
light.ambient[1] ?? 0,
|
|
240
|
+
light.ambient[2] ?? 0,
|
|
241
|
+
);
|
|
242
|
+
gl.uniform1f(u['uDensity'] ?? null, options.density);
|
|
243
|
+
gl.uniform1f(u['uAlbedo'] ?? null, options.albedo);
|
|
244
|
+
gl.uniform1f(u['uAnisotropy'] ?? null, options.anisotropy);
|
|
245
|
+
gl.uniform1f(u['uMaxDistance'] ?? null, options.maxDistance);
|
|
246
|
+
gl.uniform1i(u['uSteps'] ?? null, steps);
|
|
247
|
+
gl.uniform1f(u['uSunShadow'] ?? null, light.sunShadow);
|
|
248
|
+
gl.uniformMatrix4fv(u['uLightViewProj'] ?? null, false, light.lightViewProj as Float32Array);
|
|
249
|
+
gl.uniform1i(u['uPeeledShadowEnabled'] ?? null, light.peeledEnabled ? 1 : 0);
|
|
250
|
+
|
|
251
|
+
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
252
|
+
|
|
253
|
+
gl.bindVertexArray(null);
|
|
254
|
+
/* Released down to unit 0, for the reason `SsrPass` records: a binding outlives the frame that
|
|
255
|
+
made it, and the next frame attaches one of these as a target while a sampler still names it. */
|
|
256
|
+
for (const unit of [gl.TEXTURE3, gl.TEXTURE2, gl.TEXTURE1, gl.TEXTURE0]) {
|
|
257
|
+
gl.activeTexture(unit);
|
|
258
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
259
|
+
}
|
|
260
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
261
|
+
return true;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Composite the march over whatever framebuffer is bound, upsampled depth-aware.
|
|
266
|
+
*
|
|
267
|
+
* `(ONE, SRC_ALPHA)` on colour is `dst * transmittance + inscatter`; alpha is left alone with
|
|
268
|
+
* `(ZERO, ONE)`, because the frame's own alpha is not the medium's to spend.
|
|
269
|
+
*/
|
|
270
|
+
compositeMedium(depth: WebGLTexture, frameWidth: number, frameHeight: number): void {
|
|
271
|
+
if (this.target === null || this.unavailable) return;
|
|
272
|
+
const { gl } = this;
|
|
273
|
+
const u = this.upsampleUniforms;
|
|
274
|
+
|
|
275
|
+
gl.viewport(0, 0, frameWidth, frameHeight);
|
|
276
|
+
gl.disable(gl.DEPTH_TEST);
|
|
277
|
+
gl.depthMask(false);
|
|
278
|
+
gl.disable(gl.CULL_FACE);
|
|
279
|
+
gl.enable(gl.BLEND);
|
|
280
|
+
gl.blendFuncSeparate(gl.ONE, gl.SRC_ALPHA, gl.ZERO, gl.ONE);
|
|
281
|
+
|
|
282
|
+
gl.useProgram(this.upsample);
|
|
283
|
+
gl.bindVertexArray(this.vao);
|
|
284
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
285
|
+
gl.bindTexture(gl.TEXTURE_2D, this.target);
|
|
286
|
+
gl.uniform1i(u['uMedium'] ?? null, 0);
|
|
287
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
288
|
+
gl.bindTexture(gl.TEXTURE_2D, depth);
|
|
289
|
+
gl.uniform1i(u['uDepth'] ?? null, 1);
|
|
290
|
+
this.mediumTexel[0] = 1 / Math.max(1, this.width);
|
|
291
|
+
this.mediumTexel[1] = 1 / Math.max(1, this.height);
|
|
292
|
+
gl.uniform2fv(u['uMediumTexel'] ?? null, this.mediumTexel);
|
|
293
|
+
gl.uniform4fv(u['uDepthToViewZ'] ?? null, this.depthToViewZ);
|
|
294
|
+
|
|
295
|
+
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
296
|
+
|
|
297
|
+
gl.bindVertexArray(null);
|
|
298
|
+
gl.activeTexture(gl.TEXTURE1);
|
|
299
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
300
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
301
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
302
|
+
/* Back to the blend every other pass in this renderer assumes it inherits. */
|
|
303
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
|
|
304
|
+
gl.disable(gl.BLEND);
|
|
305
|
+
gl.depthMask(true);
|
|
306
|
+
gl.enable(gl.DEPTH_TEST);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
dispose(): void {
|
|
310
|
+
const { gl } = this;
|
|
311
|
+
if (this.framebuffer !== null) gl.deleteFramebuffer(this.framebuffer);
|
|
312
|
+
if (this.target !== null) gl.deleteTexture(this.target);
|
|
313
|
+
gl.deleteProgram(this.march);
|
|
314
|
+
gl.deleteProgram(this.upsample);
|
|
315
|
+
gl.deleteVertexArray(this.vao);
|
|
316
|
+
this.framebuffer = null;
|
|
317
|
+
this.target = null;
|
|
318
|
+
this.width = 0;
|
|
319
|
+
this.height = 0;
|
|
320
|
+
this.frameWidth = 0;
|
|
321
|
+
this.frameHeight = 0;
|
|
322
|
+
}
|
|
323
|
+
}
|