@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,72 @@
|
|
|
1
|
+
import type { PointShadowSource, ResolvedPointShadows } from './pointShadowImage.ts';
|
|
2
|
+
interface PositionedLight {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
z: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class LivePointShadowSet<M extends PointShadowSource> {
|
|
8
|
+
private readonly releaseMap;
|
|
9
|
+
private readonly maps;
|
|
10
|
+
private readonly owners;
|
|
11
|
+
private readonly weights;
|
|
12
|
+
private primarySlot;
|
|
13
|
+
private transitionFromSlot;
|
|
14
|
+
private transitionToSlot;
|
|
15
|
+
private transitionSeconds;
|
|
16
|
+
/**
|
|
17
|
+
* `createMap` rather than a context and a size, so the pool never names a device.
|
|
18
|
+
* `releaseMap` for the same reason: freeing one is the backend's business.
|
|
19
|
+
*/
|
|
20
|
+
constructor(createMap: (layer: number) => M, releaseMap: (map: M) => void);
|
|
21
|
+
update(lights: readonly PositionedLight[], sampled: Int32Array, sampledCount: number, x: number, y: number, z: number, frameDt: number): void;
|
|
22
|
+
/**
|
|
23
|
+
* A slot changing hands throws its image away, exactly as a pool slot does.
|
|
24
|
+
*
|
|
25
|
+
* **`PointShadowSystem` does this and this class did not**, and the asymmetry is what let a
|
|
26
|
+
* lamp cast a shadow with nothing making it. A live map holds only movers, baked around the
|
|
27
|
+
* light that owned the slot — so a slot handed to a different lamp keeps `hasBaked` true and
|
|
28
|
+
* publishes an image of a mover standing where it stood *near the other light*, at whatever
|
|
29
|
+
* weight the handover gave it. That map's own pool comment states the rule for the static
|
|
30
|
+
* half: sampling a slot before its new owner's bake lands reads "another lamp's shadow, from
|
|
31
|
+
* somewhere else entirely". It is the same rule here and it was not applied.
|
|
32
|
+
*
|
|
33
|
+
* A no-op when the slot was free or is being handed back to the same light, so a steady state
|
|
34
|
+
* does not throw away a good image every frame.
|
|
35
|
+
*/
|
|
36
|
+
private take;
|
|
37
|
+
owner(slot: number, sampled: Int32Array, sampledCount: number): number;
|
|
38
|
+
map(slot: number): M | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* Settle the live pair's shader slots and parameters into the caller's arrays.
|
|
41
|
+
*
|
|
42
|
+
* The maps themselves stay here and are handed out by `map`, because binding a cubemap is
|
|
43
|
+
* the one part of this that differs between backends — see `ResolvedPointShadows`.
|
|
44
|
+
*/
|
|
45
|
+
resolve(sampled: Int32Array, shaderSlots: Int32Array, sampledCount: number, out: ResolvedPointShadows): void;
|
|
46
|
+
/**
|
|
47
|
+
* Ramp both live images toward full presence.
|
|
48
|
+
*
|
|
49
|
+
* **This did not exist, and its absence meant a moving caster was never shadowed by a point
|
|
50
|
+
* light at all.** `resolve` publishes `crossfade weight * presence`, and presence is the map's
|
|
51
|
+
* own arrival ramp — which only moves when something advances it. `PointShadowSystem.advance`
|
|
52
|
+
* walks *its* pool, and these two are not in it, so the ramp stayed at zero for every frame this
|
|
53
|
+
* engine has ever rendered. The shader multiplied a correct occlusion by a weight of zero.
|
|
54
|
+
*
|
|
55
|
+
* Nothing about it was visible from either side. The layer is baked, the layer index and far
|
|
56
|
+
* plane are published, `hasBaked` is true and the crossfade weight is 1 — every part reports
|
|
57
|
+
* itself healthy, and the product of them is nothing. It was found by reading the resolved
|
|
58
|
+
* weights off a live renderer rather than by reading this file, and the octahedral layer had the
|
|
59
|
+
* caster in it the whole time.
|
|
60
|
+
*
|
|
61
|
+
* The pair is advanced whether or not either is owned: an unowned slot has no image, `advance`
|
|
62
|
+
* on it is the branch that holds the ramp at zero, and skipping it here would be a second place
|
|
63
|
+
* that has to know which slots are live.
|
|
64
|
+
*/
|
|
65
|
+
advance(dt: number): void;
|
|
66
|
+
/** See `PointShadowSystem.forgetEveryImage`: the storage under these maps was replaced. */
|
|
67
|
+
forgetEveryImage(): void;
|
|
68
|
+
dispose(): void;
|
|
69
|
+
private finishTransition;
|
|
70
|
+
private clearTransition;
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { LIVE_POINT_SHADOW_MAPS } from './lightBudget.js';
|
|
2
|
+
/**
|
|
3
|
+
* Two live-caster cubemaps with a continuous handoff between owning lights.
|
|
4
|
+
*
|
|
5
|
+
* The steady state uses one map. The second is activated only while a nearer
|
|
6
|
+
* light takes ownership, allowing the old shadow to fade out as the new one
|
|
7
|
+
* fades in instead of switching a moving caster in one frame.
|
|
8
|
+
*
|
|
9
|
+
* **Generic over the map, because none of the handoff is about a device.** Which light owns
|
|
10
|
+
* which slot, how long a crossfade has run and what weight each carries are the same answers
|
|
11
|
+
* whichever API holds the cubemaps, and a second copy of them is a shadow that changes hands
|
|
12
|
+
* differently depending on which backend drew it.
|
|
13
|
+
*/
|
|
14
|
+
/** A quick handoff reads as motion, not as a light switching off. */
|
|
15
|
+
const TRANSITION_SECONDS = 0.18;
|
|
16
|
+
/** A challenger must be 10% nearer before ownership changes. */
|
|
17
|
+
const DISPLACE_RATIO = 0.81;
|
|
18
|
+
export class LivePointShadowSet {
|
|
19
|
+
releaseMap;
|
|
20
|
+
maps = [];
|
|
21
|
+
owners = new Int32Array(LIVE_POINT_SHADOW_MAPS).fill(-1);
|
|
22
|
+
weights = new Float32Array(LIVE_POINT_SHADOW_MAPS);
|
|
23
|
+
primarySlot = 0;
|
|
24
|
+
transitionFromSlot = -1;
|
|
25
|
+
transitionToSlot = -1;
|
|
26
|
+
transitionSeconds = 0;
|
|
27
|
+
/**
|
|
28
|
+
* `createMap` rather than a context and a size, so the pool never names a device.
|
|
29
|
+
* `releaseMap` for the same reason: freeing one is the backend's business.
|
|
30
|
+
*/
|
|
31
|
+
constructor(createMap, releaseMap) {
|
|
32
|
+
this.releaseMap = releaseMap;
|
|
33
|
+
/*
|
|
34
|
+
* The live maps take the array's **first** layers, and that is why they can be built here.
|
|
35
|
+
*
|
|
36
|
+
* They are created when the renderer is, before any world has said how many lights it has, so
|
|
37
|
+
* a layer counted from the end of the array would not yet have a number. Counted from the
|
|
38
|
+
* front they do: 0 and 1, always, with pool slot i at LIVE_POINT_SHADOW_MAPS + i.
|
|
39
|
+
*/
|
|
40
|
+
for (let i = 0; i < LIVE_POINT_SHADOW_MAPS; i++)
|
|
41
|
+
this.maps.push(createMap(i));
|
|
42
|
+
}
|
|
43
|
+
update(lights, sampled, sampledCount, x, y, z, frameDt) {
|
|
44
|
+
if (this.transitionFromSlot >= 0) {
|
|
45
|
+
const fromOwner = this.owners[this.transitionFromSlot] ?? -1;
|
|
46
|
+
const toOwner = this.owners[this.transitionToSlot] ?? -1;
|
|
47
|
+
if (!isSampled(toOwner, sampled, sampledCount)) {
|
|
48
|
+
this.owners[this.transitionToSlot] = -1;
|
|
49
|
+
this.weights[this.transitionToSlot] = 0;
|
|
50
|
+
this.weights[this.transitionFromSlot] = 1;
|
|
51
|
+
this.clearTransition();
|
|
52
|
+
}
|
|
53
|
+
else if (!isSampled(fromOwner, sampled, sampledCount)) {
|
|
54
|
+
this.finishTransition();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.transitionSeconds += frameDt;
|
|
58
|
+
const t = Math.min(this.transitionSeconds / TRANSITION_SECONDS, 1);
|
|
59
|
+
this.weights[this.transitionFromSlot] = 1 - t;
|
|
60
|
+
this.weights[this.transitionToSlot] = t;
|
|
61
|
+
if (t >= 1)
|
|
62
|
+
this.finishTransition();
|
|
63
|
+
}
|
|
64
|
+
if (this.transitionFromSlot >= 0)
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
let nearest = -1;
|
|
68
|
+
let nearestDistance = Infinity;
|
|
69
|
+
for (let slot = 0; slot < sampledCount; slot++) {
|
|
70
|
+
const worldIndex = sampled[slot] ?? -1;
|
|
71
|
+
const light = worldIndex >= 0 ? lights[worldIndex] : undefined;
|
|
72
|
+
if (light === undefined)
|
|
73
|
+
continue;
|
|
74
|
+
const dx = light.x - x;
|
|
75
|
+
const dy = light.y - y;
|
|
76
|
+
const dz = light.z - z;
|
|
77
|
+
const distance = dx * dx + dy * dy + dz * dz;
|
|
78
|
+
if (distance < nearestDistance) {
|
|
79
|
+
nearest = worldIndex;
|
|
80
|
+
nearestDistance = distance;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (nearest < 0) {
|
|
84
|
+
this.owners.fill(-1);
|
|
85
|
+
this.weights.fill(0);
|
|
86
|
+
this.clearTransition();
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const current = this.owners[this.primarySlot] ?? -1;
|
|
90
|
+
if (current < 0 || !isSampled(current, sampled, sampledCount)) {
|
|
91
|
+
this.owners.fill(-1);
|
|
92
|
+
this.weights.fill(0);
|
|
93
|
+
this.owners[this.primarySlot] = nearest;
|
|
94
|
+
this.weights[this.primarySlot] = 1;
|
|
95
|
+
/* The image in that map was baked around whichever light held the slot before, so it is
|
|
96
|
+
another lamp's shadow standing under this one until a bake replaces it. See `take`. */
|
|
97
|
+
this.take(this.primarySlot, current);
|
|
98
|
+
this.clearTransition();
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (nearest === current)
|
|
102
|
+
return;
|
|
103
|
+
const currentLight = lights[current];
|
|
104
|
+
if (currentLight !== undefined) {
|
|
105
|
+
const dx = currentLight.x - x;
|
|
106
|
+
const dy = currentLight.y - y;
|
|
107
|
+
const dz = currentLight.z - z;
|
|
108
|
+
const currentDistance = dx * dx + dy * dy + dz * dz;
|
|
109
|
+
if (nearestDistance >= currentDistance * DISPLACE_RATIO)
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const nextSlot = 1 - this.primarySlot;
|
|
113
|
+
const displaced = this.owners[nextSlot] ?? -1;
|
|
114
|
+
this.owners[nextSlot] = nearest;
|
|
115
|
+
this.weights[nextSlot] = 0;
|
|
116
|
+
this.take(nextSlot, displaced);
|
|
117
|
+
this.transitionFromSlot = this.primarySlot;
|
|
118
|
+
this.transitionToSlot = nextSlot;
|
|
119
|
+
this.transitionSeconds = 0;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* A slot changing hands throws its image away, exactly as a pool slot does.
|
|
123
|
+
*
|
|
124
|
+
* **`PointShadowSystem` does this and this class did not**, and the asymmetry is what let a
|
|
125
|
+
* lamp cast a shadow with nothing making it. A live map holds only movers, baked around the
|
|
126
|
+
* light that owned the slot — so a slot handed to a different lamp keeps `hasBaked` true and
|
|
127
|
+
* publishes an image of a mover standing where it stood *near the other light*, at whatever
|
|
128
|
+
* weight the handover gave it. That map's own pool comment states the rule for the static
|
|
129
|
+
* half: sampling a slot before its new owner's bake lands reads "another lamp's shadow, from
|
|
130
|
+
* somewhere else entirely". It is the same rule here and it was not applied.
|
|
131
|
+
*
|
|
132
|
+
* A no-op when the slot was free or is being handed back to the same light, so a steady state
|
|
133
|
+
* does not throw away a good image every frame.
|
|
134
|
+
*/
|
|
135
|
+
take(slot, previousOwner) {
|
|
136
|
+
if (previousOwner < 0 || previousOwner === this.owners[slot])
|
|
137
|
+
return;
|
|
138
|
+
this.maps[slot]?.forget();
|
|
139
|
+
}
|
|
140
|
+
owner(slot, sampled, sampledCount) {
|
|
141
|
+
const owner = this.owners[slot] ?? -1;
|
|
142
|
+
return isSampled(owner, sampled, sampledCount) ? owner : -1;
|
|
143
|
+
}
|
|
144
|
+
map(slot) {
|
|
145
|
+
return this.maps[slot];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Settle the live pair's shader slots and parameters into the caller's arrays.
|
|
149
|
+
*
|
|
150
|
+
* The maps themselves stay here and are handed out by `map`, because binding a cubemap is
|
|
151
|
+
* the one part of this that differs between backends — see `ResolvedPointShadows`.
|
|
152
|
+
*/
|
|
153
|
+
resolve(sampled, shaderSlots, sampledCount, out) {
|
|
154
|
+
out.liveLayers.fill(-1);
|
|
155
|
+
out.liveFar.fill(1);
|
|
156
|
+
out.liveNear.fill(0.01);
|
|
157
|
+
out.liveSourceRadius.fill(0);
|
|
158
|
+
/*
|
|
159
|
+
* Zero, then written under the owning light below. The weights used to be a straight copy of
|
|
160
|
+
* this set's own two, because the arrays were addressed by live slot; they are addressed by
|
|
161
|
+
* light now, so a copy would put live slot 1's weight on light 1 — a light that has no live
|
|
162
|
+
* map at all in most frames.
|
|
163
|
+
*/
|
|
164
|
+
out.liveWeights.fill(0);
|
|
165
|
+
for (let liveSlot = 0; liveSlot < LIVE_POINT_SHADOW_MAPS; liveSlot++) {
|
|
166
|
+
const map = this.maps[liveSlot];
|
|
167
|
+
const owner = this.owners[liveSlot] ?? -1;
|
|
168
|
+
let shaderSlot = -1;
|
|
169
|
+
for (let sampledSlot = 0; sampledSlot < sampledCount; sampledSlot++) {
|
|
170
|
+
if (sampled[sampledSlot] === owner) {
|
|
171
|
+
shaderSlot = shaderSlots[sampledSlot] ?? -1;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (map === undefined || shaderSlot < 0 || shaderSlot >= out.liveLayers.length)
|
|
176
|
+
continue;
|
|
177
|
+
/*
|
|
178
|
+
* **A map with no image yet contributes nothing**, which is the guard the static pool
|
|
179
|
+
* carries in `PointShadowSystem.resolve` and this half was missing. A bake is spread over
|
|
180
|
+
* frames against a budget, so a live map can be selected before it holds anything — and
|
|
181
|
+
* what a layer holds before its first bake is a zero depth, which the shader reads as an
|
|
182
|
+
* occluder pressed against the lamp. The index stays −1, the path the shader already takes
|
|
183
|
+
* for a light with no map at all.
|
|
184
|
+
*/
|
|
185
|
+
if (!map.hasBaked)
|
|
186
|
+
continue;
|
|
187
|
+
out.liveLayers[shaderSlot] = map.layer;
|
|
188
|
+
out.liveFar[shaderSlot] = map.far;
|
|
189
|
+
out.liveNear[shaderSlot] = map.near;
|
|
190
|
+
out.liveSourceRadius[shaderSlot] = map.sourceRadius;
|
|
191
|
+
/*
|
|
192
|
+
* The handover weight *and* the image's own arrival, multiplied.
|
|
193
|
+
*
|
|
194
|
+
* They answer different questions and both have to be asked: the weight is how far this
|
|
195
|
+
* slot is through a crossfade, and the presence is how long its image has existed. A
|
|
196
|
+
* freshly forgotten map that has just re-baked is at full crossfade weight and no
|
|
197
|
+
* presence, so without the second factor a whole mover's shadow switches on in one frame
|
|
198
|
+
* under a lamp that never moved — which is the pop `advance` exists to remove.
|
|
199
|
+
*/
|
|
200
|
+
out.liveWeights[shaderSlot] = (this.weights[liveSlot] ?? 0) * map.presence;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Ramp both live images toward full presence.
|
|
205
|
+
*
|
|
206
|
+
* **This did not exist, and its absence meant a moving caster was never shadowed by a point
|
|
207
|
+
* light at all.** `resolve` publishes `crossfade weight * presence`, and presence is the map's
|
|
208
|
+
* own arrival ramp — which only moves when something advances it. `PointShadowSystem.advance`
|
|
209
|
+
* walks *its* pool, and these two are not in it, so the ramp stayed at zero for every frame this
|
|
210
|
+
* engine has ever rendered. The shader multiplied a correct occlusion by a weight of zero.
|
|
211
|
+
*
|
|
212
|
+
* Nothing about it was visible from either side. The layer is baked, the layer index and far
|
|
213
|
+
* plane are published, `hasBaked` is true and the crossfade weight is 1 — every part reports
|
|
214
|
+
* itself healthy, and the product of them is nothing. It was found by reading the resolved
|
|
215
|
+
* weights off a live renderer rather than by reading this file, and the octahedral layer had the
|
|
216
|
+
* caster in it the whole time.
|
|
217
|
+
*
|
|
218
|
+
* The pair is advanced whether or not either is owned: an unowned slot has no image, `advance`
|
|
219
|
+
* on it is the branch that holds the ramp at zero, and skipping it here would be a second place
|
|
220
|
+
* that has to know which slots are live.
|
|
221
|
+
*/
|
|
222
|
+
advance(dt) {
|
|
223
|
+
for (const map of this.maps)
|
|
224
|
+
map.advance(dt);
|
|
225
|
+
}
|
|
226
|
+
/** See `PointShadowSystem.forgetEveryImage`: the storage under these maps was replaced. */
|
|
227
|
+
forgetEveryImage() {
|
|
228
|
+
for (const map of this.maps)
|
|
229
|
+
map.forget();
|
|
230
|
+
}
|
|
231
|
+
dispose() {
|
|
232
|
+
for (const map of this.maps)
|
|
233
|
+
this.releaseMap(map);
|
|
234
|
+
}
|
|
235
|
+
finishTransition() {
|
|
236
|
+
const fromSlot = this.transitionFromSlot;
|
|
237
|
+
const toSlot = this.transitionToSlot;
|
|
238
|
+
if (fromSlot < 0 || toSlot < 0)
|
|
239
|
+
return;
|
|
240
|
+
this.owners[fromSlot] = -1;
|
|
241
|
+
this.weights[fromSlot] = 0;
|
|
242
|
+
this.weights[toSlot] = 1;
|
|
243
|
+
this.primarySlot = toSlot;
|
|
244
|
+
this.clearTransition();
|
|
245
|
+
}
|
|
246
|
+
clearTransition() {
|
|
247
|
+
this.transitionFromSlot = -1;
|
|
248
|
+
this.transitionToSlot = -1;
|
|
249
|
+
this.transitionSeconds = 0;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
function isSampled(worldIndex, sampled, sampledCount) {
|
|
253
|
+
for (let slot = 0; slot < sampledCount; slot++) {
|
|
254
|
+
if (sampled[slot] === worldIndex)
|
|
255
|
+
return true;
|
|
256
|
+
}
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ReadonlyMat4 } from 'gl-matrix';
|
|
2
|
+
import type { Bounds } from '../math/bounds.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Which level of detail a piece of geometry has earned, from how big it looks.
|
|
5
|
+
*
|
|
6
|
+
* **Apparent size and not distance, and the difference is the whole of it.** Thresholds in metres
|
|
7
|
+
* make a cathedral and a doorknob swap detail at the same range, so either the cathedral drops to
|
|
8
|
+
* its coarsest form while it still fills the screen or the doorknob keeps its finest while it is
|
|
9
|
+
* two pixels across. Every world with objects of more than one size hits this, and the usual
|
|
10
|
+
* repair is a per-object distance scale — which is apparent size, arrived at by hand, one object
|
|
11
|
+
* at a time.
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* The angular radius of a bounded object, in radians, as seen from a point.
|
|
15
|
+
*
|
|
16
|
+
* `radius / distance` rather than `atan(radius / distance)`: the two agree to within a percent
|
|
17
|
+
* out to about a quarter of a radian, which is far larger than anything a level threshold cares
|
|
18
|
+
* about, and this is a per-object per-frame path.
|
|
19
|
+
*
|
|
20
|
+
* Returns `Infinity` for a viewpoint inside the object's own sphere. That is the honest answer —
|
|
21
|
+
* it fills the view — and it makes the comparison below pick the finest level without a special
|
|
22
|
+
* case.
|
|
23
|
+
*/
|
|
24
|
+
export declare function apparentSize(bounds: Bounds, model: ReadonlyMat4, eyeX: number, eyeY: number, eyeZ: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* The index of the level this object has earned.
|
|
27
|
+
*
|
|
28
|
+
* `thresholds` are apparent sizes in descending order — the size at which each level *stops*
|
|
29
|
+
* being good enough. An object larger than the first threshold gets level 0; one smaller than the
|
|
30
|
+
* last gets the last level, rather than an index off the end of whatever array the caller is
|
|
31
|
+
* about to look this up in.
|
|
32
|
+
*
|
|
33
|
+
* An empty `thresholds` gives 0, which is the only level a caller with no thresholds has.
|
|
34
|
+
*/
|
|
35
|
+
export declare function lodForBounds(bounds: Bounds, model: ReadonlyMat4, eyeX: number, eyeY: number, eyeZ: number, thresholds: readonly number[]): number;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which level of detail a piece of geometry has earned, from how big it looks.
|
|
3
|
+
*
|
|
4
|
+
* **Apparent size and not distance, and the difference is the whole of it.** Thresholds in metres
|
|
5
|
+
* make a cathedral and a doorknob swap detail at the same range, so either the cathedral drops to
|
|
6
|
+
* its coarsest form while it still fills the screen or the doorknob keeps its finest while it is
|
|
7
|
+
* two pixels across. Every world with objects of more than one size hits this, and the usual
|
|
8
|
+
* repair is a per-object distance scale — which is apparent size, arrived at by hand, one object
|
|
9
|
+
* at a time.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* The angular radius of a bounded object, in radians, as seen from a point.
|
|
13
|
+
*
|
|
14
|
+
* `radius / distance` rather than `atan(radius / distance)`: the two agree to within a percent
|
|
15
|
+
* out to about a quarter of a radian, which is far larger than anything a level threshold cares
|
|
16
|
+
* about, and this is a per-object per-frame path.
|
|
17
|
+
*
|
|
18
|
+
* Returns `Infinity` for a viewpoint inside the object's own sphere. That is the honest answer —
|
|
19
|
+
* it fills the view — and it makes the comparison below pick the finest level without a special
|
|
20
|
+
* case.
|
|
21
|
+
*/
|
|
22
|
+
export function apparentSize(bounds, model, eyeX, eyeY, eyeZ) {
|
|
23
|
+
const cx = bounds.centre[0] ?? 0;
|
|
24
|
+
const cy = bounds.centre[1] ?? 0;
|
|
25
|
+
const cz = bounds.centre[2] ?? 0;
|
|
26
|
+
const m0 = model[0] ?? 0;
|
|
27
|
+
const m1 = model[1] ?? 0;
|
|
28
|
+
const m2 = model[2] ?? 0;
|
|
29
|
+
const m4 = model[4] ?? 0;
|
|
30
|
+
const m5 = model[5] ?? 0;
|
|
31
|
+
const m6 = model[6] ?? 0;
|
|
32
|
+
const m8 = model[8] ?? 0;
|
|
33
|
+
const m9 = model[9] ?? 0;
|
|
34
|
+
const m10 = model[10] ?? 0;
|
|
35
|
+
const x = m0 * cx + m4 * cy + m8 * cz + (model[12] ?? 0) - eyeX;
|
|
36
|
+
const y = m1 * cx + m5 * cy + m9 * cz + (model[13] ?? 0) - eyeY;
|
|
37
|
+
const z = m2 * cx + m6 * cy + m10 * cz + (model[14] ?? 0) - eyeZ;
|
|
38
|
+
/* The same largest-axis rule `boundsVisible` uses, and for the same reason. */
|
|
39
|
+
const sx = Math.sqrt(m0 * m0 + m1 * m1 + m2 * m2);
|
|
40
|
+
const sy = Math.sqrt(m4 * m4 + m5 * m5 + m6 * m6);
|
|
41
|
+
const sz = Math.sqrt(m8 * m8 + m9 * m9 + m10 * m10);
|
|
42
|
+
const radius = bounds.radius * Math.max(sx, sy, sz);
|
|
43
|
+
const distance = Math.sqrt(x * x + y * y + z * z);
|
|
44
|
+
if (distance <= radius)
|
|
45
|
+
return Infinity;
|
|
46
|
+
return radius / distance;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The index of the level this object has earned.
|
|
50
|
+
*
|
|
51
|
+
* `thresholds` are apparent sizes in descending order — the size at which each level *stops*
|
|
52
|
+
* being good enough. An object larger than the first threshold gets level 0; one smaller than the
|
|
53
|
+
* last gets the last level, rather than an index off the end of whatever array the caller is
|
|
54
|
+
* about to look this up in.
|
|
55
|
+
*
|
|
56
|
+
* An empty `thresholds` gives 0, which is the only level a caller with no thresholds has.
|
|
57
|
+
*/
|
|
58
|
+
export function lodForBounds(bounds, model, eyeX, eyeY, eyeZ, thresholds) {
|
|
59
|
+
const size = apparentSize(bounds, model, eyeX, eyeY, eyeZ);
|
|
60
|
+
for (let level = 0; level < thresholds.length; level += 1) {
|
|
61
|
+
if (size >= (thresholds[level] ?? 0))
|
|
62
|
+
return level;
|
|
63
|
+
}
|
|
64
|
+
return Math.max(0, thresholds.length - 1);
|
|
65
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/** Static GPU mesh: interleaving is skipped in favor of three tight buffers. */
|
|
2
|
+
import { MorphTexture } from './backend/webgl2/morphTexture.ts';
|
|
3
|
+
import type { Bounds } from '../math/bounds.ts';
|
|
4
|
+
export type { MeshData } from '@driftengine/drft';
|
|
5
|
+
export { validateMeshData } from '@driftengine/drft';
|
|
6
|
+
import type { MeshData } from '@driftengine/drft';
|
|
7
|
+
export declare class Mesh {
|
|
8
|
+
private readonly vao;
|
|
9
|
+
private readonly buffers;
|
|
10
|
+
/**
|
|
11
|
+
* The position and normal buffers, kept so `update` can rewrite them.
|
|
12
|
+
*
|
|
13
|
+
* Null unless the mesh was created `dynamic`. A mesh that never deforms pays nothing for
|
|
14
|
+
* this — two references, and only where a consumer asked.
|
|
15
|
+
*/
|
|
16
|
+
private readonly deformable;
|
|
17
|
+
/** How many floats the position buffer holds, so an update of the wrong size is refused. */
|
|
18
|
+
private readonly positionFloats;
|
|
19
|
+
private readonly indexCount;
|
|
20
|
+
/**
|
|
21
|
+
* The constant values this mesh's *absent* attributes are shaded with, re-applied on
|
|
22
|
+
* every draw.
|
|
23
|
+
*
|
|
24
|
+
* **`vertexAttrib*f` is context state, not vertex-array state.** `enableVertexAttribArray`
|
|
25
|
+
* and the pointers belong to the VAO and are restored when it is bound; the constant a
|
|
26
|
+
* *disabled* attribute reads is global and is not. So setting these once in the
|
|
27
|
+
* constructor and trusting the VAO to carry them is wrong: it makes a mesh's appearance
|
|
28
|
+
* depend on which mesh was constructed last, which is a property of unrelated code
|
|
29
|
+
* somewhere else in the frame.
|
|
30
|
+
*
|
|
31
|
+
* It survived because every mesh here happens to want the same constants, so the global
|
|
32
|
+
* values are correct by coincidence. The first mesh to want a different roughness would
|
|
33
|
+
* have silently changed the shading of every mesh that never mentioned one — a defect
|
|
34
|
+
* with no error, no warning and no plausible connection to its cause.
|
|
35
|
+
*
|
|
36
|
+
* Re-applying per draw costs four calls on a mesh that omits everything and none on a
|
|
37
|
+
* mesh that supplies it all, and makes a draw depend on nothing but itself.
|
|
38
|
+
*/
|
|
39
|
+
private readonly constants;
|
|
40
|
+
/**
|
|
41
|
+
* How big this mesh is, in its own space.
|
|
42
|
+
*
|
|
43
|
+
* Measured here because the positions are already in hand: the upload walks them anyway, so a
|
|
44
|
+
* caller gets bounds for nothing and no `MeshData` producer has to supply them. Everything that
|
|
45
|
+
* wants to know whether this is on screen starts from this object.
|
|
46
|
+
*/
|
|
47
|
+
readonly bounds: Bounds;
|
|
48
|
+
/** Whether this mesh carries a rig, which decides which flat program draws it. */
|
|
49
|
+
readonly isSkinned: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* This mesh's morph deltas, or null for geometry that does not deform.
|
|
52
|
+
*
|
|
53
|
+
* **Owned by the mesh rather than set per draw**, which is the difference between this and the
|
|
54
|
+
* joint palette: a palette belongs to a *pose* and changes every frame, where deltas are
|
|
55
|
+
* geometry and never change. Uploaded once with the vertex buffers; only the weights are
|
|
56
|
+
* per-draw state.
|
|
57
|
+
*/
|
|
58
|
+
readonly morph: MorphTexture | null;
|
|
59
|
+
/**
|
|
60
|
+
* Whether this mesh carries a tangent frame, for the shader that has to be told.
|
|
61
|
+
*
|
|
62
|
+
* The attribute cannot say so itself: `vertexDefaults.ts` supplies `[1, 0, 0, 1]` when it is
|
|
63
|
+
* absent — a usable frame rather than a sentinel, because a zero tangent normalises to a NaN.
|
|
64
|
+
* Read off the same branch below that chooses between the buffer and that constant.
|
|
65
|
+
*/
|
|
66
|
+
readonly hasTangents: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Buffers allocated but not yet filled, in the order the constructor made them.
|
|
69
|
+
*
|
|
70
|
+
* Empty except between the steps of an incremental upload; `uploads` drains it and nothing
|
|
71
|
+
* else touches it. Held as the source arrays rather than as copies, so spreading an upload
|
|
72
|
+
* costs no memory — the caller's `MeshData` is alive until the last step either way.
|
|
73
|
+
*/
|
|
74
|
+
private readonly pending;
|
|
75
|
+
/** Set by the constructor before it allocates anything. See the `spread` parameter. */
|
|
76
|
+
private readonly spread;
|
|
77
|
+
/**
|
|
78
|
+
* Whether all of this mesh's geometry has reached the device.
|
|
79
|
+
*
|
|
80
|
+
* False only between the steps of an incremental upload. **`drawMesh` refuses to draw an
|
|
81
|
+
* incomplete mesh**, and that refusal is the contract: the buffers are allocated and zeroed
|
|
82
|
+
* from the first frame, so drawing one would be a fan of degenerate triangles through the
|
|
83
|
+
* origin. Drawing *what has landed* was the other option and is worse — a mesh whose triangle
|
|
84
|
+
* count grows over several frames is a stranger artefact than a square that is briefly absent.
|
|
85
|
+
*/
|
|
86
|
+
get complete(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* @param spread Allocate the buffers now and fill them from `uploads` later. Off by default,
|
|
89
|
+
* and the default is the fast path: filling a buffer with `bufferData` in one call skips the
|
|
90
|
+
* zero-fill that `bufferData(size)` then `bufferSubData` pays for, and every mesh in the
|
|
91
|
+
* engine that does not need to be spread should keep skipping it.
|
|
92
|
+
*/
|
|
93
|
+
constructor(gl: WebGL2RenderingContext, data: MeshData, dynamic?: boolean, spread?: boolean);
|
|
94
|
+
/** Caller is responsible for having the flat program + uniforms bound. */
|
|
95
|
+
draw(gl: WebGL2RenderingContext): void;
|
|
96
|
+
/**
|
|
97
|
+
* Bind one buffer's per-instance attributes to this mesh's vertex array.
|
|
98
|
+
*
|
|
99
|
+
* **One batch per mesh, and the vertex array is why.** A `Mesh` owns exactly one, so a second
|
|
100
|
+
* batch would rebind locations 11 to 15 on the array the first still draws through — and what
|
|
101
|
+
* comes out is one batch's instances placed by the other's matrices, which reads as a transform
|
|
102
|
+
* bug in the consumer's own code rather than as a misuse of this.
|
|
103
|
+
*
|
|
104
|
+
* **What would make it wrong** is a consumer legitimately wanting two batches of one mesh,
|
|
105
|
+
* which wants a vertex array per batch rather than a flag here.
|
|
106
|
+
*/
|
|
107
|
+
attachInstances(gl: WebGL2RenderingContext, buffer: WebGLBuffer, stride: number): void;
|
|
108
|
+
/** Whether `attachInstances` has already claimed locations 11 to 15 on this mesh's array. */
|
|
109
|
+
private instanced;
|
|
110
|
+
/**
|
|
111
|
+
* Draw `count` instances through the attributes `attachInstances` bound.
|
|
112
|
+
*
|
|
113
|
+
* The constants are re-applied exactly as `draw` does — a vertex array restores the arrays and
|
|
114
|
+
* not the constant attributes, and an absent optional attribute is a constant here.
|
|
115
|
+
*/
|
|
116
|
+
drawInstances(gl: WebGL2RenderingContext, count: number): void;
|
|
117
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
118
|
+
/**
|
|
119
|
+
* Rewrite this mesh's positions, and its normals where the caller has them.
|
|
120
|
+
*
|
|
121
|
+
* **Only the two attributes that move.** Colour, emissive and the rest describe what a surface
|
|
122
|
+
* *is* and do not change because it bent; rewriting them would be uploading unchanged bytes
|
|
123
|
+
* every frame. A caller with genuinely changing colour wants a second mesh or a tint.
|
|
124
|
+
*
|
|
125
|
+
* **The bounds are recomputed**, because everything that decides whether this is on screen
|
|
126
|
+
* starts from them — a cloth that blew sideways out of its original box would be culled while
|
|
127
|
+
* still visible, which is the kind of bug that only shows up at the edge of the frame.
|
|
128
|
+
*/
|
|
129
|
+
update(gl: WebGL2RenderingContext, positions: Float32Array, normals?: Float32Array): void;
|
|
130
|
+
private attachAttribute;
|
|
131
|
+
/**
|
|
132
|
+
* Give a bound buffer its storage, and its contents now or later.
|
|
133
|
+
*
|
|
134
|
+
* The one place the two paths differ, and they differ in exactly one call: eagerly, the data
|
|
135
|
+
* goes in with the allocation; spread, the allocation is sized and the array is queued. Both
|
|
136
|
+
* hand the same bytes to the same buffer, which is what keeps a mesh that lands over six
|
|
137
|
+
* frames identical to one that lands in a single call.
|
|
138
|
+
*/
|
|
139
|
+
private allocate;
|
|
140
|
+
/**
|
|
141
|
+
* Fill the buffers, a bounded step at a time. Done when it returns `done`.
|
|
142
|
+
*
|
|
143
|
+
* A step is one attribute, or a slice of one where the attribute is bigger than
|
|
144
|
+
* `UPLOAD_BYTES_PER_STEP`. **There is still no interleave here** — this backend's three tight
|
|
145
|
+
* buffers are the reason a consumer measured the same drive as smooth on WebGL2 and hitching
|
|
146
|
+
* on the other one, and dividing an upload is not a reason to give that up.
|
|
147
|
+
*
|
|
148
|
+
* The call that returns `done` is the one that does the last step's work, so a mesh of *n*
|
|
149
|
+
* chunks takes exactly *n* calls.
|
|
150
|
+
*
|
|
151
|
+
* The vertex array object is bound around each step because one of these writes an index
|
|
152
|
+
* buffer, and an `ELEMENT_ARRAY_BUFFER` binding belongs to whichever array object is current —
|
|
153
|
+
* writing it with somebody else's bound would quietly repoint their indices at this mesh.
|
|
154
|
+
*/
|
|
155
|
+
uploads(gl: WebGL2RenderingContext): Generator<void, void, void>;
|
|
156
|
+
}
|
|
157
|
+
/** A mesh on its way to the device, and the iterator that gets it there. */
|
|
158
|
+
export interface IncrementalMesh {
|
|
159
|
+
/**
|
|
160
|
+
* Usable at once — it can be held, measured and disposed — but not drawable until the upload
|
|
161
|
+
* finishes. See `Mesh.complete`.
|
|
162
|
+
*/
|
|
163
|
+
readonly mesh: Mesh;
|
|
164
|
+
/** Advance the upload by one bounded step. Done when it returns `done`. */
|
|
165
|
+
readonly upload: Iterator<void, void>;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Upload a mesh over as many frames as the caller gives it.
|
|
169
|
+
*
|
|
170
|
+
* The twin of `createGpuMeshIncremental` on the other backend, and the cheaper of the two: there
|
|
171
|
+
* is no interleave to divide here, so a step is an attribute or a slice of one.
|
|
172
|
+
*
|
|
173
|
+
* What is paid at creation and not spread: validation, the bounds, the vertex array object and
|
|
174
|
+
* the allocations. The bounds are the deliberate one — a streamer places and culls a region from
|
|
175
|
+
* them before a byte of it has landed.
|
|
176
|
+
*/
|
|
177
|
+
export declare function createMeshIncremental(gl: WebGL2RenderingContext, data: MeshData, dynamic?: boolean): IncrementalMesh;
|