@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,304 @@
|
|
|
1
|
+
import { mat4, vec3 } from 'gl-matrix';
|
|
2
|
+
import { DEG_TO_RAD } from '../math/scalar.js';
|
|
3
|
+
/** Reused by `project`; a per-call vec4 would allocate on every pointer move. */
|
|
4
|
+
const projected = new Float32Array(4);
|
|
5
|
+
/** Reused by `rayThrough`; this runs on every pointer move. */
|
|
6
|
+
const nearPoint = new Float32Array(4);
|
|
7
|
+
const farPoint = new Float32Array(4);
|
|
8
|
+
/** One NDC point back through the inverse view-projection, with the perspective divide. */
|
|
9
|
+
function unproject(out, inv, x, y, z) {
|
|
10
|
+
const w = inv[3] * x + inv[7] * y + inv[11] * z + inv[15];
|
|
11
|
+
const scale = w === 0 ? 1 : 1 / w;
|
|
12
|
+
out[0] = (inv[0] * x + inv[4] * y + inv[8] * z + inv[12]) * scale;
|
|
13
|
+
out[1] = (inv[1] * x + inv[5] * y + inv[9] * z + inv[13]) * scale;
|
|
14
|
+
out[2] = (inv[2] * x + inv[6] * y + inv[10] * z + inv[14]) * scale;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Perspective camera. Yaw/pitch convention: yaw 0 looks toward -Z, positive
|
|
18
|
+
* yaw turns right (+X); positive pitch looks up.
|
|
19
|
+
*/
|
|
20
|
+
export class Camera {
|
|
21
|
+
position = vec3.create();
|
|
22
|
+
yaw = 0;
|
|
23
|
+
pitch = 0;
|
|
24
|
+
fovYDeg = 70;
|
|
25
|
+
/**
|
|
26
|
+
* Near plane, metres — and the single biggest control this engine has over
|
|
27
|
+
* z-fighting.
|
|
28
|
+
*
|
|
29
|
+
* A conventional depth buffer spends its precision hyperbolically: the smallest
|
|
30
|
+
* separation it can resolve at distance `z` is about `z² / (near · 2^bits)`. At
|
|
31
|
+
* the old 0.1 that is a quarter of a millimetre at twenty metres, **1.5 mm at
|
|
32
|
+
* fifty, and 6 mm at a hundred** — so any two surfaces closer together than that
|
|
33
|
+
* are decided by float rounding, and which one a pixel shows changes as the
|
|
34
|
+
* camera moves — shown most clearly by a matched pair of screenshots of one seam
|
|
35
|
+
* from two angles, right in one and wrong in the other.
|
|
36
|
+
*
|
|
37
|
+
* Precision scales linearly with this number, so four times the near plane is
|
|
38
|
+
* four times the resolution at every distance, and it costs nothing. Safe at 0.4
|
|
39
|
+
* because a third-person boom never brings the eye closer than `BOOM_MIN` (0.9 m)
|
|
40
|
+
* to the character and keeps its own radius clear of surfaces — there is nothing
|
|
41
|
+
* legitimately within 40 cm of this camera to clip.
|
|
42
|
+
*
|
|
43
|
+
* It is a mitigation and not the cure. A 0.2 mm seam, which the daily generator
|
|
44
|
+
* does produce where two decks meet, still fights past about forty metres. The
|
|
45
|
+
* cure is a reversed-Z float depth buffer; see `docs/bugs/`.
|
|
46
|
+
*/
|
|
47
|
+
near = 0.4;
|
|
48
|
+
far = 500;
|
|
49
|
+
forward = vec3.create();
|
|
50
|
+
view = mat4.create();
|
|
51
|
+
projection = mat4.create();
|
|
52
|
+
viewProjection = mat4.create();
|
|
53
|
+
invViewProjection = mat4.create();
|
|
54
|
+
/**
|
|
55
|
+
* Roll about the view direction, radians. Positive drops the right side.
|
|
56
|
+
* Render-only: nothing about the camera reaches the simulation.
|
|
57
|
+
*/
|
|
58
|
+
roll = 0;
|
|
59
|
+
/**
|
|
60
|
+
* Point the camera at a world position from wherever it currently stands.
|
|
61
|
+
*
|
|
62
|
+
* Added because three callers had each derived this by hand and one of them got it
|
|
63
|
+
* wrong: a preview rig placed itself on a circle around its subject and computed a yaw
|
|
64
|
+
* that was exactly π out, so it rendered the inside of an empty box and the figure it was
|
|
65
|
+
* built to show was behind it. The trig is four lines and the sign conventions are this
|
|
66
|
+
* class's own — `yaw 0` looks toward −Z, positive yaw turns toward +X — so leaving every
|
|
67
|
+
* caller to rediscover them is leaving them a trap.
|
|
68
|
+
*
|
|
69
|
+
* Sets `yaw` and `pitch` only. Roll is a separate decision (it is a lean, not an aim),
|
|
70
|
+
* and `updateMatrices` still has to be called afterwards.
|
|
71
|
+
*/
|
|
72
|
+
lookAt(x, y, z) {
|
|
73
|
+
const dx = x - (this.position[0] ?? 0);
|
|
74
|
+
const dy = y - (this.position[1] ?? 0);
|
|
75
|
+
const dz = z - (this.position[2] ?? 0);
|
|
76
|
+
const flat = Math.hypot(dx, dz);
|
|
77
|
+
// Straight up or down leaves yaw meaningless, so it is left as it was rather than
|
|
78
|
+
// snapped to zero — which would spin the view on the way past vertical.
|
|
79
|
+
if (flat > 1e-6)
|
|
80
|
+
this.yaw = Math.atan2(dx, -dz);
|
|
81
|
+
this.pitch = Math.atan2(dy, flat);
|
|
82
|
+
}
|
|
83
|
+
updateMatrices(aspect) {
|
|
84
|
+
const cosPitch = Math.cos(this.pitch);
|
|
85
|
+
const sinPitch = Math.sin(this.pitch);
|
|
86
|
+
const cosYaw = Math.cos(this.yaw);
|
|
87
|
+
const sinYaw = Math.sin(this.yaw);
|
|
88
|
+
vec3.set(this.forward, sinYaw * cosPitch, sinPitch, -cosYaw * cosPitch);
|
|
89
|
+
/*
|
|
90
|
+
* The view basis is derived from the angles, and **not** by aiming a look-at at
|
|
91
|
+
* `position + forward`, which is what this did for as long as it existed.
|
|
92
|
+
*
|
|
93
|
+
* A look-at builds its right axis by crossing the view direction with world up, so it has
|
|
94
|
+
* nothing to work with when the two are parallel — and at a pitch of ±π/2 they are. What
|
|
95
|
+
* hid that for so long is that `cos(π/2)` is 6.1e-17 rather than 0, so the horizontal part
|
|
96
|
+
* of the direction survives *if it survives the addition*, and in a `Float32Array` that
|
|
97
|
+
* depends on where the camera is standing: at the origin the epsilon is kept and the basis
|
|
98
|
+
* is fine, and past about half a metre on the axis in question it is rounded away, the
|
|
99
|
+
* cross product collapses to zero, and the view matrix is singular.
|
|
100
|
+
*
|
|
101
|
+
* A singular view does not draw a wrong picture, it draws none: every vertex lands on one
|
|
102
|
+
* point, so the frame keeps its clear colour, and `invert` below fails and silently leaves
|
|
103
|
+
* whatever the previous aim put in `invViewProjection` — which the sky pass then reads as
|
|
104
|
+
* though it were this one's. **Measured on a reflection probe**, whose up and down faces are
|
|
105
|
+
* the only two in the engine that ever aim straight at a pole: both came back holding one
|
|
106
|
+
* stale copy of a sideways face, in every world whose subject does not stand at the origin.
|
|
107
|
+
*
|
|
108
|
+
* Right is `(cos yaw, 0, sin yaw)` and does not depend on pitch at all, so it is unit length
|
|
109
|
+
* at every aim including both poles, and up follows from it and the direction. The result
|
|
110
|
+
* matches what the look-at produced everywhere the look-at was well defined, including the
|
|
111
|
+
* mirrored frame it gave past vertical, which `lean` keeps.
|
|
112
|
+
*
|
|
113
|
+
* What it gives up: a camera tilted past vertical still mirrors rather than rolling over the
|
|
114
|
+
* top, because that is the behaviour that shipped and nothing here aims there — every
|
|
115
|
+
* consumer clamps pitch well inside a quarter turn. A camera meant to loop, in a cockpit or
|
|
116
|
+
* a free-flight view, wants `lean` dropped and the basis carried continuously instead.
|
|
117
|
+
*/
|
|
118
|
+
const lean = cosPitch < 0 ? -1 : 1;
|
|
119
|
+
let rightX = lean * cosYaw;
|
|
120
|
+
/* Level until something rolls it: right is horizontal at every pitch. */
|
|
121
|
+
let rightY = 0;
|
|
122
|
+
let rightZ = lean * sinYaw;
|
|
123
|
+
let upX = -lean * sinYaw * sinPitch;
|
|
124
|
+
let upY = lean * cosPitch;
|
|
125
|
+
let upZ = lean * cosYaw * sinPitch;
|
|
126
|
+
/*
|
|
127
|
+
* Up is rolled about the view direction rather than fixed to world up.
|
|
128
|
+
*
|
|
129
|
+
* A camera that stays level while the surface under the subject banks makes
|
|
130
|
+
* the *world* look like it is tilting, which is exactly backwards: the
|
|
131
|
+
* player is the thing that tilted. Rolling with them is what makes a banked
|
|
132
|
+
* corner read as leaning into it.
|
|
133
|
+
*
|
|
134
|
+
* Both axes turn together, which is the same rotation the previous construction reached by
|
|
135
|
+
* rolling world up and letting the look-at re-derive right from it — and unlike that one it
|
|
136
|
+
* still turns something when the camera is aimed at a pole.
|
|
137
|
+
*
|
|
138
|
+
* **The sign is the shipped one and it is the opposite of a positive rotation about the view
|
|
139
|
+
* direction**, which is worth stating because the construction this replaced carried a
|
|
140
|
+
* comment naming the positive form while its code computed the negative one. Following the
|
|
141
|
+
* comment turned every rolled frame the wrong way by twice the angle: measured as 384,242
|
|
142
|
+
* pixels of 921,600 on the one demo scene that rolls, against a floor of 47.
|
|
143
|
+
*/
|
|
144
|
+
if (this.roll !== 0) {
|
|
145
|
+
const cosRoll = Math.cos(this.roll);
|
|
146
|
+
const sinRoll = Math.sin(this.roll);
|
|
147
|
+
const turnedRightX = rightX * cosRoll + upX * sinRoll;
|
|
148
|
+
const turnedRightY = upY * sinRoll;
|
|
149
|
+
const turnedRightZ = rightZ * cosRoll + upZ * sinRoll;
|
|
150
|
+
upX = upX * cosRoll - rightX * sinRoll;
|
|
151
|
+
upY = upY * cosRoll;
|
|
152
|
+
upZ = upZ * cosRoll - rightZ * sinRoll;
|
|
153
|
+
rightX = turnedRightX;
|
|
154
|
+
rightY = turnedRightY;
|
|
155
|
+
rightZ = turnedRightZ;
|
|
156
|
+
}
|
|
157
|
+
const eyeX = this.position[0] ?? 0;
|
|
158
|
+
const eyeY = this.position[1] ?? 0;
|
|
159
|
+
const eyeZ = this.position[2] ?? 0;
|
|
160
|
+
const forwardX = this.forward[0] ?? 0;
|
|
161
|
+
const forwardY = this.forward[1] ?? 0;
|
|
162
|
+
const forwardZ = this.forward[2] ?? 0;
|
|
163
|
+
/* Column major, and the third row is the direction negated: a view looks down -Z. */
|
|
164
|
+
const view = this.view;
|
|
165
|
+
view[0] = rightX;
|
|
166
|
+
view[1] = upX;
|
|
167
|
+
view[2] = -forwardX;
|
|
168
|
+
view[3] = 0;
|
|
169
|
+
view[4] = rightY;
|
|
170
|
+
view[5] = upY;
|
|
171
|
+
view[6] = -forwardY;
|
|
172
|
+
view[7] = 0;
|
|
173
|
+
view[8] = rightZ;
|
|
174
|
+
view[9] = upZ;
|
|
175
|
+
view[10] = -forwardZ;
|
|
176
|
+
view[11] = 0;
|
|
177
|
+
view[12] = -(rightX * eyeX + rightY * eyeY + rightZ * eyeZ);
|
|
178
|
+
view[13] = -(upX * eyeX + upY * eyeY + upZ * eyeZ);
|
|
179
|
+
view[14] = forwardX * eyeX + forwardY * eyeY + forwardZ * eyeZ;
|
|
180
|
+
view[15] = 1;
|
|
181
|
+
/*
|
|
182
|
+
* A **vertical** field of view, which is a promise worth stating because a consumer built an
|
|
183
|
+
* interface on it.
|
|
184
|
+
*
|
|
185
|
+
* Because the vertical extent is what is held, a projection keeps its top and bottom when the
|
|
186
|
+
* aspect changes and trades only horizontal. So a tall export is exactly what a centred
|
|
187
|
+
* rectangle of a wider preview sees, and a frame drawn over that preview is arithmetic rather
|
|
188
|
+
* than an approximation: no second render, no two paths to compare.
|
|
189
|
+
*
|
|
190
|
+
* The corollary belongs beside it. Only a *centred* crop of a symmetric frustum is itself a
|
|
191
|
+
* symmetric frustum; an off-centre one is sheared, which `perspective` cannot produce. A
|
|
192
|
+
* consumer wanting an off-axis preview needs `mat4.frustum`, which gl-matrix already exports
|
|
193
|
+
* and this engine does not wrap. Panning the camera instead is a real pan and lands in an
|
|
194
|
+
* export as one.
|
|
195
|
+
*/
|
|
196
|
+
mat4.perspective(this.projection, this.fovYDeg * DEG_TO_RAD, aspect, this.near, this.far);
|
|
197
|
+
mat4.multiply(this.viewProjection, this.projection, this.view);
|
|
198
|
+
mat4.invert(this.invViewProjection, this.viewProjection);
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Take a view and a projection that were computed somewhere else.
|
|
202
|
+
*
|
|
203
|
+
* **Because an XR eye cannot be described by this class, and this file already says why.**
|
|
204
|
+
* `updateMatrices` derives the view from yaw and pitch and the projection from
|
|
205
|
+
* `mat4.perspective`, and the note above it records the corollary: *only a centred crop of a
|
|
206
|
+
* symmetric frustum is itself a symmetric frustum; an off-centre one is sheared, which
|
|
207
|
+
* `perspective` cannot produce.* A headset's eye projection is exactly that shear, off-axis by
|
|
208
|
+
* the distance from the pupil to the display's centre, and its view comes from a pose no pair of
|
|
209
|
+
* Euler angles was ever asked to describe.
|
|
210
|
+
*
|
|
211
|
+
* So a supplied view is adopted rather than configured. Everything downstream reads `view`,
|
|
212
|
+
* `projection`, `viewProjection` and `invViewProjection`, so frustum culling, picking, the sky
|
|
213
|
+
* and every pass that samples the inverse keep working with nothing changed.
|
|
214
|
+
*
|
|
215
|
+
* **`position` and `forward` are decomposed back out**, and that is not a convenience. A view
|
|
216
|
+
* matrix is the inverse of the camera's world transform, so the eye is `-Rᵀt` and the direction
|
|
217
|
+
* is the third row negated. A consumer reading `camera.position` to place a listener or to score
|
|
218
|
+
* a level of detail would otherwise get whatever the last non-XR frame left there, which is a
|
|
219
|
+
* defect that looks like an audio bug rather than a camera one.
|
|
220
|
+
*
|
|
221
|
+
* **`yaw`, `pitch` and `roll` are deliberately left alone**, and reading them after this is
|
|
222
|
+
* reading the last angles somebody set. A supplied rotation may be one no Euler triple
|
|
223
|
+
* describes without a convention this class does not own, and inventing one here would put a
|
|
224
|
+
* second answer to "where is the camera looking" beside `forward`, which is derived from the
|
|
225
|
+
* matrix and is always right.
|
|
226
|
+
*
|
|
227
|
+
* `near` and `far` are not read and not written: the supplied projection carries its own depth
|
|
228
|
+
* range, which the runtime chose.
|
|
229
|
+
*/
|
|
230
|
+
adoptView(view, projection) {
|
|
231
|
+
mat4.copy(this.view, view);
|
|
232
|
+
mat4.copy(this.projection, projection);
|
|
233
|
+
mat4.multiply(this.viewProjection, this.projection, this.view);
|
|
234
|
+
mat4.invert(this.invViewProjection, this.viewProjection);
|
|
235
|
+
/*
|
|
236
|
+
* The rotation is the upper-left 3x3 and it is orthonormal, so its inverse is its transpose
|
|
237
|
+
* and the eye falls out without a general inverse. Reading the matrix rather than inverting it
|
|
238
|
+
* also keeps this allocation-free, which matters because it runs once per eye per frame.
|
|
239
|
+
*/
|
|
240
|
+
const v = this.view;
|
|
241
|
+
const rx = v[0], ry = v[4], rz = v[8];
|
|
242
|
+
const ux = v[1], uy = v[5], uz = v[9];
|
|
243
|
+
const bx = v[2], by = v[6], bz = v[10];
|
|
244
|
+
const tx = v[12], ty = v[13], tz = v[14];
|
|
245
|
+
vec3.set(this.position, -(rx * tx + ux * ty + bx * tz), -(ry * tx + uy * ty + by * tz), -(rz * tx + uz * ty + bz * tz));
|
|
246
|
+
/* The third row of the rotation is the camera's backward axis, so forward is its negation. */
|
|
247
|
+
vec3.set(this.forward, -bx, -by, -bz);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Where a world point lands on the canvas, in CSS pixels, or false if it is behind.
|
|
251
|
+
*
|
|
252
|
+
* For attaching DOM to a place in the world: a focus ring on a card, a label on a
|
|
253
|
+
* marker. The caller passes the CSS box rather than the drawing buffer, because the
|
|
254
|
+
* answer is for the document and the document does not know the device pixel ratio.
|
|
255
|
+
*
|
|
256
|
+
* **False rather than a coordinate when w <= 1e-6.** The perspective divide by a negative
|
|
257
|
+
* w mirrors the point through the origin, so a thing behind the viewer reports a
|
|
258
|
+
* perfectly plausible position on the opposite side of the screen. A caller that
|
|
259
|
+
* placed an affordance there would be putting it on the wrong object, which is worse
|
|
260
|
+
* than putting it nowhere.
|
|
261
|
+
*/
|
|
262
|
+
project(out, x, y, z, cssWidth, cssHeight) {
|
|
263
|
+
const m = this.viewProjection;
|
|
264
|
+
const w = m[3] * x + m[7] * y + m[11] * z + m[15];
|
|
265
|
+
if (w <= 1e-6)
|
|
266
|
+
return false;
|
|
267
|
+
projected[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
|
|
268
|
+
projected[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
|
|
269
|
+
out[0] = (projected[0] * 0.5 + 0.5) * cssWidth;
|
|
270
|
+
out[1] = (0.5 - projected[1] * 0.5) * cssHeight;
|
|
271
|
+
return true;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* The ray a pixel looks along, in world space.
|
|
275
|
+
*
|
|
276
|
+
* Two points are unprojected rather than one, because a direction cannot be recovered
|
|
277
|
+
* from a single unprojected point without knowing where the eye is in the same space —
|
|
278
|
+
* and for an orthographic camera there is no single eye at all. Unprojecting both ends
|
|
279
|
+
* of the depth range and subtracting is correct for either projection, which is why it
|
|
280
|
+
* is written this way for a camera that is currently only perspective.
|
|
281
|
+
*
|
|
282
|
+
* `cssX`/`cssY` are in the canvas's CSS box, so a caller hands over
|
|
283
|
+
* `event.clientX - rect.left` and nothing has to know the device pixel ratio.
|
|
284
|
+
*/
|
|
285
|
+
rayThrough(origin, direction, cssX, cssY, cssWidth, cssHeight) {
|
|
286
|
+
const ndcX = (cssX / cssWidth) * 2 - 1;
|
|
287
|
+
const ndcY = 1 - (cssY / cssHeight) * 2;
|
|
288
|
+
unproject(nearPoint, this.invViewProjection, ndcX, ndcY, -1);
|
|
289
|
+
unproject(farPoint, this.invViewProjection, ndcX, ndcY, 1);
|
|
290
|
+
origin[0] = nearPoint[0];
|
|
291
|
+
origin[1] = nearPoint[1];
|
|
292
|
+
origin[2] = nearPoint[2];
|
|
293
|
+
let dx = farPoint[0] - nearPoint[0];
|
|
294
|
+
let dy = farPoint[1] - nearPoint[1];
|
|
295
|
+
let dz = farPoint[2] - nearPoint[2];
|
|
296
|
+
const length = Math.hypot(dx, dy, dz) || 1;
|
|
297
|
+
dx /= length;
|
|
298
|
+
dy /= length;
|
|
299
|
+
dz /= length;
|
|
300
|
+
direction[0] = dx;
|
|
301
|
+
direction[1] = dy;
|
|
302
|
+
direction[2] = dz;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { FrameView } from './frameView.ts';
|
|
2
|
+
import type { Vec3 } from '../math/color.ts';
|
|
3
|
+
import type { Atmosphere } from './atmosphere.ts';
|
|
4
|
+
import type { SheetSpan } from './surfaceSheet.ts';
|
|
5
|
+
/**
|
|
6
|
+
* A surface lit by nearby water: the floor of a pool, the bottom of a flooded
|
|
7
|
+
* corridor, the underside of a bridge, an arch, a jetty, a cave mouth.
|
|
8
|
+
*
|
|
9
|
+
* The caller submits the lit surface and says which body of water is throwing the
|
|
10
|
+
* light. Everything else — where the light lands, how sharp the net is, how it
|
|
11
|
+
* moves — comes from the wave field in `shaders/gerstner.ts`, which is the same
|
|
12
|
+
* field the water surface itself is displaced by.
|
|
13
|
+
*
|
|
14
|
+
* Either side of the surface works. The overhead case came first and passed for
|
|
15
|
+
* the whole feature for a while, but a pool floor is the same optics and by far
|
|
16
|
+
* the more ordinary sight; the sheet simply lies under the water instead of over
|
|
17
|
+
* it.
|
|
18
|
+
*/
|
|
19
|
+
export interface CausticSheet {
|
|
20
|
+
/** Cross-sections of the lit surface, in order. */
|
|
21
|
+
spans: readonly SheetSpan[];
|
|
22
|
+
/**
|
|
23
|
+
* Resting height of the water throwing the light.
|
|
24
|
+
*
|
|
25
|
+
* Per sheet rather than per draw, so one batch can carry surfaces above and
|
|
26
|
+
* below water at different heights — and so a caller cannot forget to keep the
|
|
27
|
+
* two in step, which is the whole contract of this feature: the pattern is only
|
|
28
|
+
* worth having because it is the crests the player can see.
|
|
29
|
+
*/
|
|
30
|
+
waterY: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* How far from the water the effect has died out.
|
|
34
|
+
*
|
|
35
|
+
* Not a fade for performance — a physical limit. The net spreads with distance and
|
|
36
|
+
* is gone by the time a soffit is a dozen metres up, or a pool that deep. A road
|
|
37
|
+
* bridge over a canal is around six, which is comfortably inside it; the fade
|
|
38
|
+
* starts at 45% of this so that distance is not already dimmed.
|
|
39
|
+
*/
|
|
40
|
+
export declare const CAUSTICS_MAX_DROP_M = 12;
|
|
41
|
+
/**
|
|
42
|
+
* Cells across a lit surface.
|
|
43
|
+
*
|
|
44
|
+
* The pattern is a fragment computation, so this only has to be fine enough for
|
|
45
|
+
* the linear terms — distance fog and the edge fade — not for the waves.
|
|
46
|
+
*/
|
|
47
|
+
export declare const CAUSTICS_CELL_M = 3;
|
|
48
|
+
export declare class CausticsRenderer {
|
|
49
|
+
private readonly program;
|
|
50
|
+
private readonly uniforms;
|
|
51
|
+
private readonly vao;
|
|
52
|
+
private readonly buffers;
|
|
53
|
+
private readonly vertexCount;
|
|
54
|
+
constructor(gl: WebGL2RenderingContext, sheets: readonly CausticSheet[]);
|
|
55
|
+
/**
|
|
56
|
+
* Add the water's light to an already-shaded scene. Draw after the opaque
|
|
57
|
+
* pass: this is light arriving at a surface, not the surface.
|
|
58
|
+
*
|
|
59
|
+
* @param strength scales the whole effect; 1 is the calibrated default.
|
|
60
|
+
*/
|
|
61
|
+
draw(gl: WebGL2RenderingContext, camera: FrameView, timeSeconds: number, directionalDir: Vec3, directionalColor: Vec3, ambient: Vec3, atmosphere: Atmosphere, underwaterEnabled: boolean, windX?: number, windZ?: number, strength?: number): void;
|
|
62
|
+
dispose(gl: WebGL2RenderingContext): void;
|
|
63
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { compileProgram, uniformLocations } from './shader.js';
|
|
2
|
+
import { CAUSTICS_FRAG, CAUSTICS_VERT } from './shaders/caustics.js';
|
|
3
|
+
import { bindAtmosphere } from './atmosphere.js';
|
|
4
|
+
import { buildSheets } from './surfaceSheet.js';
|
|
5
|
+
import { seaStateForWind } from './seaState.js';
|
|
6
|
+
/**
|
|
7
|
+
* How far from the water the effect has died out.
|
|
8
|
+
*
|
|
9
|
+
* Not a fade for performance — a physical limit. The net spreads with distance and
|
|
10
|
+
* is gone by the time a soffit is a dozen metres up, or a pool that deep. A road
|
|
11
|
+
* bridge over a canal is around six, which is comfortably inside it; the fade
|
|
12
|
+
* starts at 45% of this so that distance is not already dimmed.
|
|
13
|
+
*/
|
|
14
|
+
export const CAUSTICS_MAX_DROP_M = 12;
|
|
15
|
+
const MAX_DROP_M = CAUSTICS_MAX_DROP_M;
|
|
16
|
+
/**
|
|
17
|
+
* Cells across a lit surface.
|
|
18
|
+
*
|
|
19
|
+
* The pattern is a fragment computation, so this only has to be fine enough for
|
|
20
|
+
* the linear terms — distance fog and the edge fade — not for the waves.
|
|
21
|
+
*/
|
|
22
|
+
export const CAUSTICS_CELL_M = 3;
|
|
23
|
+
const CELL_M = CAUSTICS_CELL_M;
|
|
24
|
+
/** Reused per frame: the colour of the light the water is reflecting. */
|
|
25
|
+
const scratchTint = new Float32Array(3);
|
|
26
|
+
export class CausticsRenderer {
|
|
27
|
+
program;
|
|
28
|
+
uniforms;
|
|
29
|
+
vao;
|
|
30
|
+
buffers = [];
|
|
31
|
+
vertexCount;
|
|
32
|
+
constructor(gl, sheets) {
|
|
33
|
+
this.program = compileProgram(gl, CAUSTICS_VERT, CAUSTICS_FRAG, 'caustics');
|
|
34
|
+
this.uniforms = uniformLocations(gl, this.program, 'causticsRenderer');
|
|
35
|
+
const mesh = buildSheets(sheets, CELL_M, (sheet, out) => {
|
|
36
|
+
out[0] = sheet.waterY;
|
|
37
|
+
out[1] = 0;
|
|
38
|
+
});
|
|
39
|
+
this.vertexCount = mesh.vertexCount;
|
|
40
|
+
const vao = gl.createVertexArray();
|
|
41
|
+
if (vao === null)
|
|
42
|
+
throw new Error('CausticsRenderer: createVertexArray failed');
|
|
43
|
+
this.vao = vao;
|
|
44
|
+
gl.bindVertexArray(vao);
|
|
45
|
+
const attach = (data, location, size) => {
|
|
46
|
+
const buffer = gl.createBuffer();
|
|
47
|
+
if (buffer === null)
|
|
48
|
+
throw new Error('CausticsRenderer: createBuffer failed');
|
|
49
|
+
this.buffers.push(buffer);
|
|
50
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
51
|
+
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
|
|
52
|
+
gl.enableVertexAttribArray(location);
|
|
53
|
+
gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
|
|
54
|
+
};
|
|
55
|
+
attach(mesh.positions, 0, 3);
|
|
56
|
+
attach(mesh.locals, 1, 2);
|
|
57
|
+
attach(mesh.params, 2, 2);
|
|
58
|
+
gl.bindVertexArray(null);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Add the water's light to an already-shaded scene. Draw after the opaque
|
|
62
|
+
* pass: this is light arriving at a surface, not the surface.
|
|
63
|
+
*
|
|
64
|
+
* @param strength scales the whole effect; 1 is the calibrated default.
|
|
65
|
+
*/
|
|
66
|
+
draw(gl, camera, timeSeconds, directionalDir, directionalColor, ambient, atmosphere, underwaterEnabled, windX = 0, windZ = 0, strength = 1) {
|
|
67
|
+
if (this.vertexCount === 0)
|
|
68
|
+
return;
|
|
69
|
+
const u = this.uniforms;
|
|
70
|
+
gl.useProgram(this.program);
|
|
71
|
+
gl.uniformMatrix4fv(u['uViewProj'] ?? null, false, camera.viewProjection);
|
|
72
|
+
gl.uniform3fv(u['uCameraPos'] ?? null, camera.position);
|
|
73
|
+
gl.uniform1f(u['uTime'] ?? null, timeSeconds);
|
|
74
|
+
gl.uniform1f(u['uMaxDrop'] ?? null, MAX_DROP_M);
|
|
75
|
+
gl.uniform1f(u['uStrength'] ?? null, strength);
|
|
76
|
+
gl.uniform3fv(u['uLightDir'] ?? null, directionalDir);
|
|
77
|
+
/*
|
|
78
|
+
* What the water is reflecting: the dominant source, plus a share of the
|
|
79
|
+
* ambient standing in for the sky itself.
|
|
80
|
+
*
|
|
81
|
+
* The ambient term is not decoration. Under a bridge at night the sun
|
|
82
|
+
* contributes nothing, and a caustic that switched off with the sun would
|
|
83
|
+
* take the best image in the game with it — while skylight on water is a real
|
|
84
|
+
* source, and it is what a phone camera sees under a bridge after dusk.
|
|
85
|
+
*/
|
|
86
|
+
scratchTint[0] = (directionalColor[0] ?? 0) * 0.85 + (ambient[0] ?? 0) * 1.5;
|
|
87
|
+
scratchTint[1] = (directionalColor[1] ?? 0) * 0.85 + (ambient[1] ?? 0) * 1.5;
|
|
88
|
+
scratchTint[2] = (directionalColor[2] ?? 0) * 0.85 + (ambient[2] ?? 0) * 1.5;
|
|
89
|
+
gl.uniform3fv(u['uTint'] ?? null, scratchTint);
|
|
90
|
+
// The same sea state, from the same wind, as every other body of water.
|
|
91
|
+
const windSpeed = Math.hypot(windX, windZ);
|
|
92
|
+
const sea = seaStateForWind(windSpeed);
|
|
93
|
+
const inv = windSpeed > 1e-5 ? 1 / windSpeed : 0;
|
|
94
|
+
gl.uniform2f(u['uWindDir'] ?? null, inv === 0 ? 1 : windX * inv, inv === 0 ? 0 : windZ * inv);
|
|
95
|
+
gl.uniform1f(u['uWaveGain'] ?? null, sea.steepness);
|
|
96
|
+
bindAtmosphere(gl, u, atmosphere, camera.position[1] ?? 0, underwaterEnabled);
|
|
97
|
+
gl.enable(gl.BLEND);
|
|
98
|
+
gl.blendFunc(gl.ONE, gl.ONE);
|
|
99
|
+
/*
|
|
100
|
+
* No depth write, but depth *testing* stays on: the sheet sits a couple of
|
|
101
|
+
* centimetres under the surface it lights, so geometry in front of it — the
|
|
102
|
+
* character, a lamp, the bridge's own parapet — still occludes the light.
|
|
103
|
+
*/
|
|
104
|
+
gl.depthMask(false);
|
|
105
|
+
gl.disable(gl.CULL_FACE);
|
|
106
|
+
gl.bindVertexArray(this.vao);
|
|
107
|
+
gl.drawArrays(gl.TRIANGLES, 0, this.vertexCount);
|
|
108
|
+
gl.bindVertexArray(null);
|
|
109
|
+
gl.enable(gl.CULL_FACE);
|
|
110
|
+
gl.depthMask(true);
|
|
111
|
+
gl.disable(gl.BLEND);
|
|
112
|
+
}
|
|
113
|
+
dispose(gl) {
|
|
114
|
+
for (const buffer of this.buffers)
|
|
115
|
+
gl.deleteBuffer(buffer);
|
|
116
|
+
gl.deleteVertexArray(this.vao);
|
|
117
|
+
gl.deleteProgram(this.program);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { ColliderSet } from '@driftengine/physics';
|
|
2
|
+
import { Camera } from './camera.ts';
|
|
3
|
+
import type { ShotParams } from './shotPlacement.ts';
|
|
4
|
+
/**
|
|
5
|
+
* A camera that can be *cut*, for replays and cinematics.
|
|
6
|
+
*
|
|
7
|
+
* The gameplay camera has one job — keep the player able to read where they are
|
|
8
|
+
* about to land — so it is a single smoothed rig that never surprises anyone. A
|
|
9
|
+
* replay camera has the opposite job: it is a director, and its whole
|
|
10
|
+
* vocabulary is choosing a new angle at the right instant.
|
|
11
|
+
*
|
|
12
|
+
* Generic on purpose. A shot here is a placement rule and a subject; which shot
|
|
13
|
+
* suits a grapple, and when to cut, are the game's business. Nothing in this
|
|
14
|
+
* file knows what a character is. *Where* a shot puts the camera lives in
|
|
15
|
+
* `shotPlacement.ts`; this is the rig that moves onto it.
|
|
16
|
+
*
|
|
17
|
+
* The two hard requirements pull against each other. A **cut is instantaneous**
|
|
18
|
+
* — a cut that eases is a swoop, and it destroys the sync with the beat that an
|
|
19
|
+
* edit is built on. Motion **within** a shot is smoothed, because footage that
|
|
20
|
+
* steps judders exactly when somebody is watching it frame by frame. So the
|
|
21
|
+
* smoothing state is reset on a cut rather than smoothed through it.
|
|
22
|
+
*/
|
|
23
|
+
export type { ShotKind, ShotParams } from './shotPlacement.ts';
|
|
24
|
+
export declare class CinematicCamera {
|
|
25
|
+
private readonly colliders;
|
|
26
|
+
readonly camera: Camera;
|
|
27
|
+
private shot;
|
|
28
|
+
private shotStartSec;
|
|
29
|
+
private nowSec;
|
|
30
|
+
/**
|
|
31
|
+
* Where the camera wants to be, and where it is looking.
|
|
32
|
+
*
|
|
33
|
+
* Springs rather than first-order lags, which is the fix for *"the transitions
|
|
34
|
+
* between them that it's like straight"*. A lag's speed is proportional to the
|
|
35
|
+
* error it has already built, so the only way it can travel at the subject's
|
|
36
|
+
* speed is to accumulate `speed / lambda` metres of error and hold it: a shot
|
|
37
|
+
* asking for a 7 m boom was measured sitting at 9.219 m behind a 14 m/s
|
|
38
|
+
* character, and re-accumulating that error as a straight slide after every cut —
|
|
39
|
+
* 7.000 → 8.317 → 9.213 over the second after it, peaking on frame 2 and
|
|
40
|
+
* decaying from there. A spring carries a velocity, so it rides along with a
|
|
41
|
+
* target that is moving instead of trailing it, and it accelerates into and
|
|
42
|
+
* settles out of the moves that remain.
|
|
43
|
+
*/
|
|
44
|
+
private readonly followX;
|
|
45
|
+
private readonly followY;
|
|
46
|
+
private readonly followZ;
|
|
47
|
+
private readonly aimYaw;
|
|
48
|
+
private readonly aimPitch;
|
|
49
|
+
/** Place the rig outright on the next update, rather than moving it there. */
|
|
50
|
+
private fresh;
|
|
51
|
+
/**
|
|
52
|
+
* Whether that placement may keep travelling at the target's speed.
|
|
53
|
+
*
|
|
54
|
+
* The difference between the two ways a rig is placed, and only the caller
|
|
55
|
+
* knows which happened. A **cut** changes the shot while the subject carries on
|
|
56
|
+
* as it was, so the speed measured across the frame is real and the new shot
|
|
57
|
+
* should open already moving with it — otherwise every cut opens with the rig
|
|
58
|
+
* accelerating from a standstill, which is the slide this replaced. A **snap**
|
|
59
|
+
* is for a subject that teleported: there is no meaningful speed across that
|
|
60
|
+
* frame, and a rig that inherited one would coast off after the character's
|
|
61
|
+
* ghost.
|
|
62
|
+
*/
|
|
63
|
+
private freshKeepsSpeed;
|
|
64
|
+
/** The arm out to the camera, and its speed limits. See `boom.ts`. */
|
|
65
|
+
private readonly boom;
|
|
66
|
+
/** Frozen for `flyby`, which watches from where it was placed. */
|
|
67
|
+
private readonly station;
|
|
68
|
+
private readonly pose;
|
|
69
|
+
private readonly previousPose;
|
|
70
|
+
private hasPreviousPose;
|
|
71
|
+
private readonly placement;
|
|
72
|
+
private readonly previousPlacement;
|
|
73
|
+
constructor(colliders: ColliderSet);
|
|
74
|
+
/**
|
|
75
|
+
* Switch shots, now.
|
|
76
|
+
*
|
|
77
|
+
* `atSec` is the shot's own start time, used by anything that animates within
|
|
78
|
+
* a shot — an orbit's angle, for instance — so a shot looks the same whenever
|
|
79
|
+
* in the run it is used.
|
|
80
|
+
*/
|
|
81
|
+
cut(shot: ShotParams, atSec: number): void;
|
|
82
|
+
/**
|
|
83
|
+
* Drop the smoothing history, keeping the shot.
|
|
84
|
+
*
|
|
85
|
+
* For a subject that *teleports* — a character who died and is back on a
|
|
86
|
+
* checkpoint, or a scrub bar dropped somewhere else in the run. Smoothing
|
|
87
|
+
* across that is a camera flying the length of the route with nothing in
|
|
88
|
+
* frame, measured at 124 m inside a single shot, and it looks far more like a
|
|
89
|
+
* bug than a cut does.
|
|
90
|
+
*
|
|
91
|
+
* A threshold inside `update` would be the wrong place for this. Only the
|
|
92
|
+
* caller can tell a teleport from a legitimately fast frame: a replay catching
|
|
93
|
+
* up after a freeze advances several simulation ticks in one frame, and a
|
|
94
|
+
* browser that dropped a frame advances a dozen. That is also why this is not
|
|
95
|
+
* `cut` — the two differ over whether the speed across the frame means
|
|
96
|
+
* anything, and the caller is the only one who knows.
|
|
97
|
+
*/
|
|
98
|
+
snap(): void;
|
|
99
|
+
/** Seconds since the current shot began. */
|
|
100
|
+
get shotAgeSec(): number;
|
|
101
|
+
update(frameDt: number, subjectX: number, subjectY: number, subjectZ: number, subjectYaw: number): void;
|
|
102
|
+
}
|