@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,219 @@
|
|
|
1
|
+
import { BLOOM_DOWNSAMPLE_FRAG, BLOOM_PREFILTER_FRAG, BLOOM_UPSAMPLE_FRAG, } from './shaders/bloom.js';
|
|
2
|
+
import { FULLSCREEN_VERT } from './shaders/fullscreen.js';
|
|
3
|
+
import { compileProgram, uniformLocations } from './shader.js';
|
|
4
|
+
import { BLOOM_FILTER_RADIUS_UV, bloomLevelSizes } from './bloomChain.js';
|
|
5
|
+
/**
|
|
6
|
+
* The bloom chain: threshold the frame, halve it repeatedly, and add it back up.
|
|
7
|
+
*
|
|
8
|
+
* Its own module rather than more of `SceneTarget`, for the same reason `AmbientOcclusionPass`
|
|
9
|
+
* is: that class owns where the frame lands and how it reaches the canvas, and this owns one
|
|
10
|
+
* effect's targets and programs. The composite adds the texture this returns and knows nothing
|
|
11
|
+
* else about it.
|
|
12
|
+
*
|
|
13
|
+
* **A pyramid rather than one wide blur.** A gaussian broad enough to look like glare is
|
|
14
|
+
* hundreds of taps at full resolution. Halving the frame six times and adding the levels back
|
|
15
|
+
* costs about a third of a full-resolution pass in total, and the sum of the octaves is a
|
|
16
|
+
* falloff with no end to it, which is what a real glare has and a single kernel does not.
|
|
17
|
+
*/
|
|
18
|
+
export class BloomPass {
|
|
19
|
+
gl;
|
|
20
|
+
/** The chain, level 0 at half the frame and each one after it half again. */
|
|
21
|
+
levels = [];
|
|
22
|
+
width = 0;
|
|
23
|
+
height = 0;
|
|
24
|
+
/**
|
|
25
|
+
* Set once if a target will not complete, after which this pass does nothing and says so once.
|
|
26
|
+
*
|
|
27
|
+
* The alternative to an honest "off" is a frame with a texture nobody wrote added into it,
|
|
28
|
+
* and the last time an effect here sampled an unwritten target the failure presented as the
|
|
29
|
+
* driver being at fault. See `sceneTarget.ts`.
|
|
30
|
+
*/
|
|
31
|
+
unavailable = false;
|
|
32
|
+
/** Half floats where the part will render to them. See the note in `allocate`. */
|
|
33
|
+
floatColor;
|
|
34
|
+
prefilterProgram;
|
|
35
|
+
prefilterUniforms;
|
|
36
|
+
downsampleProgram;
|
|
37
|
+
downsampleUniforms;
|
|
38
|
+
upsampleProgram;
|
|
39
|
+
upsampleUniforms;
|
|
40
|
+
vao;
|
|
41
|
+
/** Scratch for the source texel size, so a per-frame pass allocates nothing. */
|
|
42
|
+
texel = new Float32Array(2);
|
|
43
|
+
constructor(gl) {
|
|
44
|
+
this.gl = gl;
|
|
45
|
+
/*
|
|
46
|
+
* The same extension the scene target asks for, and asked for here too rather than passed
|
|
47
|
+
* in: a chain of eight-bit levels would clip the very values it exists to spread, so a
|
|
48
|
+
* threshold above 1 would produce a black bloom on a part that has the extension for the
|
|
49
|
+
* scene and not for this. Without it the levels are eight-bit and bloom still works on
|
|
50
|
+
* whatever survives below 1, which is what the scene target itself is doing in that case.
|
|
51
|
+
*/
|
|
52
|
+
this.floatColor = gl.getExtension('EXT_color_buffer_float') !== null;
|
|
53
|
+
this.prefilterProgram = compileProgram(gl, FULLSCREEN_VERT, BLOOM_PREFILTER_FRAG, 'bloomPrefilter');
|
|
54
|
+
this.prefilterUniforms = uniformLocations(gl, this.prefilterProgram, 'bloomPrefilter');
|
|
55
|
+
this.downsampleProgram = compileProgram(gl, FULLSCREEN_VERT, BLOOM_DOWNSAMPLE_FRAG, 'bloomDownsample');
|
|
56
|
+
this.downsampleUniforms = uniformLocations(gl, this.downsampleProgram, 'bloomDownsample');
|
|
57
|
+
this.upsampleProgram = compileProgram(gl, FULLSCREEN_VERT, BLOOM_UPSAMPLE_FRAG, 'bloomUpsample');
|
|
58
|
+
this.upsampleUniforms = uniformLocations(gl, this.upsampleProgram, 'bloomUpsample');
|
|
59
|
+
const vao = gl.createVertexArray();
|
|
60
|
+
if (vao === null)
|
|
61
|
+
throw new Error('BloomPass: createVertexArray failed');
|
|
62
|
+
this.vao = vao;
|
|
63
|
+
}
|
|
64
|
+
ensureSize(width, height) {
|
|
65
|
+
if (this.unavailable)
|
|
66
|
+
return false;
|
|
67
|
+
if (this.width === width && this.height === height && this.levels.length > 0)
|
|
68
|
+
return true;
|
|
69
|
+
const { gl } = this;
|
|
70
|
+
this.width = width;
|
|
71
|
+
this.height = height;
|
|
72
|
+
this.release();
|
|
73
|
+
/* The shape of the pyramid is shared, so the other backend cannot build a different one. */
|
|
74
|
+
for (const { width: levelWidth, height: levelHeight } of bloomLevelSizes(width, height)) {
|
|
75
|
+
const texture = this.allocate(levelWidth, levelHeight);
|
|
76
|
+
const framebuffer = gl.createFramebuffer();
|
|
77
|
+
if (texture === null || framebuffer === null)
|
|
78
|
+
break;
|
|
79
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
|
|
80
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
|
|
81
|
+
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
|
|
82
|
+
gl.deleteFramebuffer(framebuffer);
|
|
83
|
+
gl.deleteTexture(texture);
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
this.levels.push({ texture, framebuffer, width: levelWidth, height: levelHeight });
|
|
87
|
+
}
|
|
88
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
89
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
90
|
+
if (this.levels.length === 0) {
|
|
91
|
+
this.unavailable = true;
|
|
92
|
+
console.warn('BloomPass: no level of the chain would allocate, so bloom is off. The frame itself ' +
|
|
93
|
+
'is unaffected.');
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
allocate(width, height) {
|
|
99
|
+
const { gl } = this;
|
|
100
|
+
const texture = gl.createTexture();
|
|
101
|
+
if (texture === null)
|
|
102
|
+
return null;
|
|
103
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
104
|
+
/*
|
|
105
|
+
* `RGBA16F` where it is renderable. Half floats are filterable in WebGL2 without an
|
|
106
|
+
* extension — it is *rendering* to them that needs `EXT_color_buffer_float` — so linear
|
|
107
|
+
* filtering below is safe either way.
|
|
108
|
+
*/
|
|
109
|
+
if (this.floatColor) {
|
|
110
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA16F, width, height, 0, gl.RGBA, gl.HALF_FLOAT, null);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
|
|
114
|
+
}
|
|
115
|
+
/* Linear, because every stage samples between texels on purpose: that is where the spread
|
|
116
|
+
comes from, and NEAREST here would show the pyramid as blocks. */
|
|
117
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
118
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
119
|
+
/* Clamped, or a tap past the edge pulls the opposite side of the screen into the corner —
|
|
120
|
+
and at the deepest level, where one texel is a large part of the frame, that is a bright
|
|
121
|
+
smear from somewhere the viewer is not looking. */
|
|
122
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
123
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
124
|
+
return texture;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Build the frame's bloom. Returns the texture to add, or null if this pass could not run,
|
|
128
|
+
* which the caller must read as "no bloom" rather than as black.
|
|
129
|
+
*
|
|
130
|
+
* `threshold` is in scene units, so it only separates a light from white paint on a target
|
|
131
|
+
* that kept the range. The caller owns that decision and the warning that goes with it.
|
|
132
|
+
*/
|
|
133
|
+
run(scene, width, height, threshold) {
|
|
134
|
+
if (!this.ensureSize(width, height))
|
|
135
|
+
return null;
|
|
136
|
+
const { gl } = this;
|
|
137
|
+
const levels = this.levels;
|
|
138
|
+
const top = levels[0];
|
|
139
|
+
if (top === undefined)
|
|
140
|
+
return null;
|
|
141
|
+
/* One triangle over targets with no depth attachment. Anything inherited from the scene
|
|
142
|
+
pass would be tested against a buffer that is not there. */
|
|
143
|
+
gl.disable(gl.DEPTH_TEST);
|
|
144
|
+
gl.disable(gl.BLEND);
|
|
145
|
+
gl.disable(gl.CULL_FACE);
|
|
146
|
+
gl.depthMask(false);
|
|
147
|
+
gl.bindVertexArray(this.vao);
|
|
148
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
149
|
+
/* Threshold, full resolution into level 0. The only stage that reads the scene. */
|
|
150
|
+
gl.useProgram(this.prefilterProgram);
|
|
151
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, top.framebuffer);
|
|
152
|
+
gl.viewport(0, 0, top.width, top.height);
|
|
153
|
+
gl.bindTexture(gl.TEXTURE_2D, scene);
|
|
154
|
+
gl.uniform1i(this.prefilterUniforms['uSource'] ?? null, 0);
|
|
155
|
+
gl.uniform1f(this.prefilterUniforms['uThreshold'] ?? null, threshold);
|
|
156
|
+
this.uploadTexel(this.prefilterUniforms, width, height);
|
|
157
|
+
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
158
|
+
/* Down the chain. Each level reads the one above it, which was written a draw ago. */
|
|
159
|
+
gl.useProgram(this.downsampleProgram);
|
|
160
|
+
gl.uniform1i(this.downsampleUniforms['uSource'] ?? null, 0);
|
|
161
|
+
for (let index = 1; index < levels.length; index++) {
|
|
162
|
+
const target = levels[index];
|
|
163
|
+
const source = levels[index - 1];
|
|
164
|
+
if (target === undefined || source === undefined)
|
|
165
|
+
break;
|
|
166
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, target.framebuffer);
|
|
167
|
+
gl.viewport(0, 0, target.width, target.height);
|
|
168
|
+
gl.bindTexture(gl.TEXTURE_2D, source.texture);
|
|
169
|
+
this.uploadTexel(this.downsampleUniforms, source.width, source.height);
|
|
170
|
+
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
171
|
+
}
|
|
172
|
+
/*
|
|
173
|
+
* And back up, adding into each level rather than replacing it, so level 0 ends up holding
|
|
174
|
+
* every octave at once. Additive blending rather than a second target to ping-pong through:
|
|
175
|
+
* a level is only ever read while a *different* level is bound, so there is no feedback.
|
|
176
|
+
*/
|
|
177
|
+
gl.enable(gl.BLEND);
|
|
178
|
+
gl.blendFunc(gl.ONE, gl.ONE);
|
|
179
|
+
gl.useProgram(this.upsampleProgram);
|
|
180
|
+
gl.uniform1i(this.upsampleUniforms['uSource'] ?? null, 0);
|
|
181
|
+
gl.uniform1f(this.upsampleUniforms['uRadius'] ?? null, BLOOM_FILTER_RADIUS_UV);
|
|
182
|
+
for (let index = levels.length - 1; index > 0; index--) {
|
|
183
|
+
const target = levels[index - 1];
|
|
184
|
+
const source = levels[index];
|
|
185
|
+
if (target === undefined || source === undefined)
|
|
186
|
+
break;
|
|
187
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, target.framebuffer);
|
|
188
|
+
gl.viewport(0, 0, target.width, target.height);
|
|
189
|
+
gl.bindTexture(gl.TEXTURE_2D, source.texture);
|
|
190
|
+
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
191
|
+
}
|
|
192
|
+
gl.disable(gl.BLEND);
|
|
193
|
+
gl.bindVertexArray(null);
|
|
194
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
195
|
+
return top.texture;
|
|
196
|
+
}
|
|
197
|
+
/** One source texel in UV, which is what the thirteen taps are laid out in. */
|
|
198
|
+
uploadTexel(uniforms, width, height) {
|
|
199
|
+
this.texel[0] = 1 / width;
|
|
200
|
+
this.texel[1] = 1 / height;
|
|
201
|
+
this.gl.uniform2fv(uniforms['uTexel'] ?? null, this.texel);
|
|
202
|
+
}
|
|
203
|
+
release() {
|
|
204
|
+
const { gl } = this;
|
|
205
|
+
for (const level of this.levels) {
|
|
206
|
+
gl.deleteFramebuffer(level.framebuffer);
|
|
207
|
+
gl.deleteTexture(level.texture);
|
|
208
|
+
}
|
|
209
|
+
this.levels.length = 0;
|
|
210
|
+
}
|
|
211
|
+
dispose() {
|
|
212
|
+
const { gl } = this;
|
|
213
|
+
this.release();
|
|
214
|
+
gl.deleteProgram(this.prefilterProgram);
|
|
215
|
+
gl.deleteProgram(this.downsampleProgram);
|
|
216
|
+
gl.deleteProgram(this.upsampleProgram);
|
|
217
|
+
gl.deleteVertexArray(this.vao);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { BoltSegments } from './boltPool.ts';
|
|
2
|
+
/**
|
|
3
|
+
* One draw call for a pool of electrical arcs.
|
|
4
|
+
*
|
|
5
|
+
* Four vertices per segment rather than instancing, because a segment's two
|
|
6
|
+
* endpoints *are* its geometry — there is no repeated base shape to instance, and
|
|
7
|
+
* an instanced version would upload the same two positions per vertex anyway.
|
|
8
|
+
*
|
|
9
|
+
* Additive and depth-tested without writing depth, like every other emissive
|
|
10
|
+
* effect here: an arc adds light to what is behind it and must not occlude
|
|
11
|
+
* whatever is drawn next.
|
|
12
|
+
*/
|
|
13
|
+
export declare class BoltBatch {
|
|
14
|
+
readonly program: WebGLProgram;
|
|
15
|
+
readonly uniforms: Record<string, WebGLUniformLocation>;
|
|
16
|
+
private readonly vao;
|
|
17
|
+
private readonly buffers;
|
|
18
|
+
private readonly fromBuffer;
|
|
19
|
+
private readonly toBuffer;
|
|
20
|
+
private readonly arcBuffer;
|
|
21
|
+
/** Scratch, expanded from the pool's per-segment arrays to per-vertex ones. */
|
|
22
|
+
private readonly from;
|
|
23
|
+
private readonly to;
|
|
24
|
+
private readonly arc;
|
|
25
|
+
private readonly capacity;
|
|
26
|
+
constructor(gl: WebGL2RenderingContext, capacity: number, label: string);
|
|
27
|
+
/**
|
|
28
|
+
* Send this frame's arcs, expanding each segment to its four vertices.
|
|
29
|
+
*
|
|
30
|
+
* The expansion is `segmentQuads.ts`'s because it is a fact about how the geometry is drawn
|
|
31
|
+
* rather than about GL — the pool is deliberately GL-free and testable, and the WebGPU batch
|
|
32
|
+
* needs exactly the same four vertices.
|
|
33
|
+
*/
|
|
34
|
+
upload(gl: WebGL2RenderingContext, data: BoltSegments): number;
|
|
35
|
+
drawTo(gl: WebGL2RenderingContext, segmentCount: number): void;
|
|
36
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
37
|
+
private dynamic;
|
|
38
|
+
private staticAttr;
|
|
39
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { compileProgram, uniformLocations } from './shader.js';
|
|
2
|
+
import { BOLT_FRAG, BOLT_VERT } from './shaders/bolt.js';
|
|
3
|
+
import { buildSegmentQuads, expandBoltSegments } from './segmentQuads.js';
|
|
4
|
+
/**
|
|
5
|
+
* One draw call for a pool of electrical arcs.
|
|
6
|
+
*
|
|
7
|
+
* Four vertices per segment rather than instancing, because a segment's two
|
|
8
|
+
* endpoints *are* its geometry — there is no repeated base shape to instance, and
|
|
9
|
+
* an instanced version would upload the same two positions per vertex anyway.
|
|
10
|
+
*
|
|
11
|
+
* Additive and depth-tested without writing depth, like every other emissive
|
|
12
|
+
* effect here: an arc adds light to what is behind it and must not occlude
|
|
13
|
+
* whatever is drawn next.
|
|
14
|
+
*/
|
|
15
|
+
export class BoltBatch {
|
|
16
|
+
program;
|
|
17
|
+
uniforms;
|
|
18
|
+
vao;
|
|
19
|
+
buffers = [];
|
|
20
|
+
fromBuffer;
|
|
21
|
+
toBuffer;
|
|
22
|
+
arcBuffer;
|
|
23
|
+
/** Scratch, expanded from the pool's per-segment arrays to per-vertex ones. */
|
|
24
|
+
from;
|
|
25
|
+
to;
|
|
26
|
+
arc;
|
|
27
|
+
capacity;
|
|
28
|
+
constructor(gl, capacity, label) {
|
|
29
|
+
this.program = compileProgram(gl, BOLT_VERT, BOLT_FRAG, label);
|
|
30
|
+
this.uniforms = uniformLocations(gl, this.program, 'boltBatch');
|
|
31
|
+
this.capacity = capacity;
|
|
32
|
+
const verts = capacity * 4;
|
|
33
|
+
this.from = new Float32Array(verts * 3);
|
|
34
|
+
this.to = new Float32Array(verts * 3);
|
|
35
|
+
this.arc = new Float32Array(verts * 4);
|
|
36
|
+
/*
|
|
37
|
+
* The corner layout and the index list are the only static data: which end of
|
|
38
|
+
* the segment a vertex sits at, and which side of it. Everything else arrives
|
|
39
|
+
* per frame. Built in `segmentQuads.ts`, so both backends draw one arc.
|
|
40
|
+
*/
|
|
41
|
+
const { corners, indices } = buildSegmentQuads(capacity);
|
|
42
|
+
const vao = gl.createVertexArray();
|
|
43
|
+
if (vao === null)
|
|
44
|
+
throw new Error(`${label}: createVertexArray failed`);
|
|
45
|
+
this.vao = vao;
|
|
46
|
+
gl.bindVertexArray(vao);
|
|
47
|
+
this.fromBuffer = this.dynamic(gl, 0, verts * 3, 3, label);
|
|
48
|
+
this.toBuffer = this.dynamic(gl, 1, verts * 3, 3, label);
|
|
49
|
+
this.staticAttr(gl, 2, corners, 2, label);
|
|
50
|
+
this.arcBuffer = this.dynamic(gl, 3, verts * 4, 4, label);
|
|
51
|
+
const indexBuffer = gl.createBuffer();
|
|
52
|
+
if (indexBuffer === null)
|
|
53
|
+
throw new Error(`${label}: createBuffer failed`);
|
|
54
|
+
this.buffers.push(indexBuffer);
|
|
55
|
+
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
|
|
56
|
+
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
|
|
57
|
+
gl.bindVertexArray(null);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Send this frame's arcs, expanding each segment to its four vertices.
|
|
61
|
+
*
|
|
62
|
+
* The expansion is `segmentQuads.ts`'s because it is a fact about how the geometry is drawn
|
|
63
|
+
* rather than about GL — the pool is deliberately GL-free and testable, and the WebGPU batch
|
|
64
|
+
* needs exactly the same four vertices.
|
|
65
|
+
*/
|
|
66
|
+
upload(gl, data) {
|
|
67
|
+
const count = expandBoltSegments(data, this.capacity, this.from, this.to, this.arc);
|
|
68
|
+
if (count === 0)
|
|
69
|
+
return 0;
|
|
70
|
+
const verts = count * 4;
|
|
71
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.fromBuffer);
|
|
72
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.from, 0, verts * 3);
|
|
73
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.toBuffer);
|
|
74
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.to, 0, verts * 3);
|
|
75
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, this.arcBuffer);
|
|
76
|
+
gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.arc, 0, verts * 4);
|
|
77
|
+
return count;
|
|
78
|
+
}
|
|
79
|
+
drawTo(gl, segmentCount) {
|
|
80
|
+
if (segmentCount === 0)
|
|
81
|
+
return;
|
|
82
|
+
gl.enable(gl.BLEND);
|
|
83
|
+
gl.blendFunc(gl.SRC_ALPHA, gl.ONE);
|
|
84
|
+
gl.depthMask(false);
|
|
85
|
+
gl.disable(gl.CULL_FACE);
|
|
86
|
+
gl.bindVertexArray(this.vao);
|
|
87
|
+
gl.drawElements(gl.TRIANGLES, segmentCount * 6, gl.UNSIGNED_INT, 0);
|
|
88
|
+
gl.bindVertexArray(null);
|
|
89
|
+
gl.enable(gl.CULL_FACE);
|
|
90
|
+
gl.depthMask(true);
|
|
91
|
+
gl.disable(gl.BLEND);
|
|
92
|
+
}
|
|
93
|
+
dispose(gl) {
|
|
94
|
+
for (const buffer of this.buffers)
|
|
95
|
+
gl.deleteBuffer(buffer);
|
|
96
|
+
this.buffers.length = 0;
|
|
97
|
+
gl.deleteVertexArray(this.vao);
|
|
98
|
+
gl.deleteProgram(this.program);
|
|
99
|
+
}
|
|
100
|
+
dynamic(gl, location, floats, size, label) {
|
|
101
|
+
const buffer = gl.createBuffer();
|
|
102
|
+
if (buffer === null)
|
|
103
|
+
throw new Error(`${label}: createBuffer failed`);
|
|
104
|
+
this.buffers.push(buffer);
|
|
105
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
106
|
+
gl.bufferData(gl.ARRAY_BUFFER, floats * 4, gl.DYNAMIC_DRAW);
|
|
107
|
+
gl.enableVertexAttribArray(location);
|
|
108
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
109
|
+
return buffer;
|
|
110
|
+
}
|
|
111
|
+
staticAttr(gl, location, data, size, label) {
|
|
112
|
+
const buffer = gl.createBuffer();
|
|
113
|
+
if (buffer === null)
|
|
114
|
+
throw new Error(`${label}: createBuffer failed`);
|
|
115
|
+
this.buffers.push(buffer);
|
|
116
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
117
|
+
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
|
|
118
|
+
gl.enableVertexAttribArray(location);
|
|
119
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import type { Vec3 } from '../math/color.ts';
|
|
2
|
+
/**
|
|
3
|
+
* A pool of short-lived electrical arcs — lightning, and anything else that
|
|
4
|
+
* strikes between two points and crackles while it lasts.
|
|
5
|
+
*
|
|
6
|
+
* The simulation half only, exactly like `ParticlePool`: this class holds no GL
|
|
7
|
+
* resources, so it is testable without a context, and the drawing lives in
|
|
8
|
+
* `BoltBatch` where the standing rule says WebGL belongs. What comes out is a
|
|
9
|
+
* flat array of *segment endpoints*, which is the one thing a ribbon of quads
|
|
10
|
+
* needs and the one thing a caller can check.
|
|
11
|
+
*
|
|
12
|
+
* **It advances rather than evaluates, so it is for real-time scenes only.** `update(dt)` steps
|
|
13
|
+
* an internal cursor, which means the same plan stepped by two different sequences of `dt`
|
|
14
|
+
* produces different arcs. A consumer that renders one plan twice, once against a wall clock for
|
|
15
|
+
* a preview and once against a frame index for an export, cannot make the two agree. Reported
|
|
16
|
+
* from outside, alongside the observation that `PlumeRenderer.draw` has the signature that does
|
|
17
|
+
* work: it takes the time to *evaluate at* rather than a step to advance by, so the same second
|
|
18
|
+
* draws the same smoke however the frames were spaced. A stateless variant here is not built.
|
|
19
|
+
*
|
|
20
|
+
* A bolt is a jagged polyline between its two ends, and the jaggedness is
|
|
21
|
+
* **re-drawn while it lives** rather than animated. That is what separates
|
|
22
|
+
* lightning from a wire: real arcs do not bend smoothly, they are replaced, many
|
|
23
|
+
* times a second, by a different path between the same two points. Interpolating
|
|
24
|
+
* node positions produces a wobbling snake, which reads as a rope or a tentacle;
|
|
25
|
+
* re-striking produces the crackle.
|
|
26
|
+
*
|
|
27
|
+
* Displacement is mid-point subdivision, seeded, so a replay strikes the same
|
|
28
|
+
* bolts the run did. Nothing here reads a clock or `Math.random`.
|
|
29
|
+
*/
|
|
30
|
+
export interface BoltPoolOptions {
|
|
31
|
+
/** How many arcs may be alive at once. */
|
|
32
|
+
capacity: number;
|
|
33
|
+
/**
|
|
34
|
+
* Nodes per arc, both ends included. Must be `2^k + 1` so mid-point
|
|
35
|
+
* subdivision lands exactly on it; anything else is rounded up to the next.
|
|
36
|
+
*/
|
|
37
|
+
nodes: number;
|
|
38
|
+
/** Seconds an arc lives. */
|
|
39
|
+
lifeSec: number;
|
|
40
|
+
/** How far a node may wander off the straight line, as a share of the span. */
|
|
41
|
+
jitter: number;
|
|
42
|
+
/** How many times a second a live arc re-draws its path. */
|
|
43
|
+
restrikeHz: number;
|
|
44
|
+
}
|
|
45
|
+
/** One arc's worth of geometry, as the caller reads it back. */
|
|
46
|
+
/**
|
|
47
|
+
* The arcs a batch draws, as plain arrays with a live count.
|
|
48
|
+
*
|
|
49
|
+
* **Fillable from outside, and that is the answer to wanting bolts without a pool.** `BoltPool`
|
|
50
|
+
* advances rather than evaluates, so it cannot serve a consumer that renders one plan twice, once
|
|
51
|
+
* against a wall clock and once against a frame index, and expects the same pixels. Nothing here
|
|
52
|
+
* requires the pool: write `from`, `to`, `along`, `fade`, `seed` and `brightness` from any
|
|
53
|
+
* function of a seed and an absolute time, set `count`, and hand it to the batch. That is exactly
|
|
54
|
+
* the route a consumer already took with `ParticleInstances`, and it works for the same reason:
|
|
55
|
+
* the *material* is the valuable half and it is separable from whatever decides where things are.
|
|
56
|
+
*
|
|
57
|
+
* Reported from outside, where the pool's own note that a stateless variant is not built read as
|
|
58
|
+
* "there is no way to do this" rather than "there is no second pool". There is no second pool and
|
|
59
|
+
* none is needed.
|
|
60
|
+
*/
|
|
61
|
+
export interface BoltSegments {
|
|
62
|
+
/** `from` and `to` per segment, three floats each, live segments first. */
|
|
63
|
+
from: Float32Array;
|
|
64
|
+
to: Float32Array;
|
|
65
|
+
/** Per segment: normalised distance along its arc, and the arc's own fade. */
|
|
66
|
+
along: Float32Array;
|
|
67
|
+
fade: Float32Array;
|
|
68
|
+
/** Per segment: the arc's seed, and how bright the caller asked for it. */
|
|
69
|
+
seed: Float32Array;
|
|
70
|
+
brightness: Float32Array;
|
|
71
|
+
/** How many segments of the above are live. */
|
|
72
|
+
count: number;
|
|
73
|
+
capacity: number;
|
|
74
|
+
}
|
|
75
|
+
export declare class BoltPool {
|
|
76
|
+
private readonly options;
|
|
77
|
+
readonly segments: BoltSegments;
|
|
78
|
+
private readonly nodeCount;
|
|
79
|
+
private readonly segmentsPerBolt;
|
|
80
|
+
/** Node positions, `capacity * nodeCount * 3`. */
|
|
81
|
+
private readonly nodes;
|
|
82
|
+
/** Both ends, held so a re-strike draws a new path between the same points. */
|
|
83
|
+
private readonly ends;
|
|
84
|
+
private readonly age;
|
|
85
|
+
/** Per-arc lifetime, so a volley is not a row of identically-timed flashes. */
|
|
86
|
+
private readonly life;
|
|
87
|
+
private readonly seed;
|
|
88
|
+
private readonly brightness;
|
|
89
|
+
/** Seconds until this arc re-draws its path. */
|
|
90
|
+
private readonly restrike;
|
|
91
|
+
private next;
|
|
92
|
+
constructor(options: BoltPoolOptions);
|
|
93
|
+
/** How many arcs are alive. */
|
|
94
|
+
get live(): number;
|
|
95
|
+
/**
|
|
96
|
+
* Strike an arc between two points.
|
|
97
|
+
*
|
|
98
|
+
* `seed` drives the path instead of `Math.random`, so a caller inside a
|
|
99
|
+
* deterministic system can pass a tick count and get the same lightning twice.
|
|
100
|
+
*/
|
|
101
|
+
strike(x0: number, y0: number, z0: number, x1: number, y1: number, z1: number, seed: number, brightness?: number,
|
|
102
|
+
/**
|
|
103
|
+
* Multiplier on the pool's lifetime for this arc alone.
|
|
104
|
+
*
|
|
105
|
+
* A volley of arcs that all die on the same frame reads as one object being
|
|
106
|
+
* switched off, which is the most predictable thing a flash can do. Varying it
|
|
107
|
+
* per strike is the cheapest way to make a burst decay like several discharges.
|
|
108
|
+
*/
|
|
109
|
+
lifeScale?: number): void;
|
|
110
|
+
/**
|
|
111
|
+
* Age every arc, re-strike the ones whose path is due, and rebuild the
|
|
112
|
+
* segment arrays.
|
|
113
|
+
*
|
|
114
|
+
* Compacting as it goes, like the particle pool: live segments are written to
|
|
115
|
+
* the front, so a draw submits exactly the live count and a dead arc costs one
|
|
116
|
+
* loop iteration.
|
|
117
|
+
*/
|
|
118
|
+
update(dt: number): void;
|
|
119
|
+
/** Drop everything, for a respawn or a scene change. */
|
|
120
|
+
clear(): void;
|
|
121
|
+
/**
|
|
122
|
+
* Lay one arc's nodes out: the straight line, then mid-point displacement.
|
|
123
|
+
*
|
|
124
|
+
* Displacement is perpendicular to the span and halves with each subdivision,
|
|
125
|
+
* which is what gives an arc detail at every scale instead of one big zigzag —
|
|
126
|
+
* the same construction a fractal terrain uses, in one dimension. The ends
|
|
127
|
+
* never move, because they are where the arc was asked to strike.
|
|
128
|
+
*/
|
|
129
|
+
private drawPath;
|
|
130
|
+
}
|
|
131
|
+
/** A hot core and an outer glow, as a caller-facing pair. */
|
|
132
|
+
export interface BoltColors {
|
|
133
|
+
core: Vec3;
|
|
134
|
+
edge: Vec3;
|
|
135
|
+
}
|