@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,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-cascade directional shadow map: one depth texture, one extra draw of
|
|
3
|
+
* the static world per update.
|
|
4
|
+
*
|
|
5
|
+
* Filtering belongs to the receiving material shader, so the depth target can
|
|
6
|
+
* stay a single-sample texture shared by every mesh pass.
|
|
7
|
+
*
|
|
8
|
+
* Note this is a depth *render target*, not an art texture: AGENTS.md's
|
|
9
|
+
* "zero textures" rule is about the art direction (no image assets in the
|
|
10
|
+
* payload), and nothing here adds a byte to it.
|
|
11
|
+
*/
|
|
12
|
+
import { DEFAULT_RENDER_QUALITY } from './renderQuality.ts';
|
|
13
|
+
|
|
14
|
+
export class ShadowMap {
|
|
15
|
+
readonly size: number;
|
|
16
|
+
readonly texture: WebGLTexture;
|
|
17
|
+
|
|
18
|
+
private readonly framebuffer: WebGLFramebuffer;
|
|
19
|
+
|
|
20
|
+
constructor(gl: WebGL2RenderingContext, size = DEFAULT_RENDER_QUALITY.directionalShadowMapSize) {
|
|
21
|
+
this.size = size;
|
|
22
|
+
|
|
23
|
+
const texture = gl.createTexture();
|
|
24
|
+
if (texture === null) throw new Error('ShadowMap: createTexture failed');
|
|
25
|
+
this.texture = texture;
|
|
26
|
+
|
|
27
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
28
|
+
gl.texStorage2D(gl.TEXTURE_2D, 1, gl.DEPTH_COMPONENT24, size, size);
|
|
29
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
|
|
30
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
|
|
31
|
+
// Clamp so anything outside the light frustum samples the border and is
|
|
32
|
+
// treated as lit, rather than wrapping into a spurious shadow.
|
|
33
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
34
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
35
|
+
|
|
36
|
+
const framebuffer = gl.createFramebuffer();
|
|
37
|
+
if (framebuffer === null) throw new Error('ShadowMap: createFramebuffer failed');
|
|
38
|
+
this.framebuffer = framebuffer;
|
|
39
|
+
|
|
40
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
|
|
41
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, texture, 0);
|
|
42
|
+
// Depth-only: without this WebGL expects a colour attachment.
|
|
43
|
+
gl.drawBuffers([gl.NONE]);
|
|
44
|
+
gl.readBuffer(gl.NONE);
|
|
45
|
+
|
|
46
|
+
const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
|
|
47
|
+
if (status !== gl.FRAMEBUFFER_COMPLETE) {
|
|
48
|
+
/*
|
|
49
|
+
* A lost context reports every attachment unusable, and that is not a
|
|
50
|
+
* misconfiguration the caller can fix — see planarReflection.ts. Init still throws,
|
|
51
|
+
* because the context cannot be lost before it exists.
|
|
52
|
+
*/
|
|
53
|
+
if (gl.isContextLost()) return;
|
|
54
|
+
throw new Error(`ShadowMap: framebuffer incomplete (0x${status.toString(16)})`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
58
|
+
gl.bindTexture(gl.TEXTURE_2D, null);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/** Bind as the render target and clear. Caller then draws the casters. */
|
|
62
|
+
begin(gl: WebGL2RenderingContext): void {
|
|
63
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
|
64
|
+
gl.viewport(0, 0, this.size, this.size);
|
|
65
|
+
gl.clear(gl.DEPTH_BUFFER_BIT);
|
|
66
|
+
/*
|
|
67
|
+
* Store the face nearest the sun. Culling front faces stores the far side
|
|
68
|
+
* and moves a box or limb through its own thickness, which is exactly the
|
|
69
|
+
* detached-shadow failure. A small slope-aware raster offset separates the
|
|
70
|
+
* stored caster from its receiver without moving the receiver differently
|
|
71
|
+
* on each face; receiver-plane compensation handles the PCF taps.
|
|
72
|
+
*/
|
|
73
|
+
gl.enable(gl.CULL_FACE);
|
|
74
|
+
gl.cullFace(gl.BACK);
|
|
75
|
+
gl.enable(gl.POLYGON_OFFSET_FILL);
|
|
76
|
+
gl.polygonOffset(1.1, 4);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
end(gl: WebGL2RenderingContext): void {
|
|
80
|
+
gl.disable(gl.POLYGON_OFFSET_FILL);
|
|
81
|
+
gl.cullFace(gl.BACK);
|
|
82
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
dispose(gl: WebGL2RenderingContext): void {
|
|
86
|
+
gl.deleteFramebuffer(this.framebuffer);
|
|
87
|
+
gl.deleteTexture(this.texture);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import { clamp } from '../math/scalar.ts';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Where a shot puts the camera, and what it frames.
|
|
5
|
+
*
|
|
6
|
+
* Pure: a shot plus a subject pose plus how far into the shot it is, in and a
|
|
7
|
+
* placement out. No state, no smoothing, no collision — those belong to the rig
|
|
8
|
+
* (`cinematicCamera.ts`), and keeping them apart is what lets the rig evaluate
|
|
9
|
+
* the *same* shot at two poses in a frame, which is how it learns the speed its
|
|
10
|
+
* target is travelling at instead of trailing behind it.
|
|
11
|
+
*
|
|
12
|
+
* Game-agnostic, like the rig: a shot is a placement rule and a subject.
|
|
13
|
+
* Nothing here knows what a character is.
|
|
14
|
+
*/
|
|
15
|
+
export type ShotKind = 'chase' | 'lowWide' | 'orbit' | 'flyby' | 'overhead' | 'lookAt';
|
|
16
|
+
|
|
17
|
+
export interface ShotParams {
|
|
18
|
+
readonly kind: ShotKind;
|
|
19
|
+
/** How far the camera sits from its subject, in metres. */
|
|
20
|
+
readonly distance: number;
|
|
21
|
+
/** How high above it. */
|
|
22
|
+
readonly height: number;
|
|
23
|
+
readonly fovDeg: number;
|
|
24
|
+
/** Radians per second, for `orbit`. */
|
|
25
|
+
readonly orbitRate?: number;
|
|
26
|
+
/**
|
|
27
|
+
* How long this shot is going to hold, in seconds, when the caller knows.
|
|
28
|
+
*
|
|
29
|
+
* Only motion *within* a shot needs it, and only to know where the end is so
|
|
30
|
+
* it can arrive there rather than being cut off mid-travel. An `orbit` given a
|
|
31
|
+
* hold eases across the whole of it; one without eases in and then keeps its
|
|
32
|
+
* rate, because inventing a duration would be worse than not having one.
|
|
33
|
+
*/
|
|
34
|
+
readonly holdSec?: number;
|
|
35
|
+
/**
|
|
36
|
+
* A fixed world point. `lookAt` frames it; `flyby` uses it as the station to
|
|
37
|
+
* shoot from. Ignored by the others.
|
|
38
|
+
*/
|
|
39
|
+
readonly anchor?: readonly [number, number, number];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* How far a `lookAt` shot's aim may sit from its subject, as a share of the shot's own
|
|
44
|
+
* camera distance.
|
|
45
|
+
*
|
|
46
|
+
* A *share of the gap* was the first attempt and it is wrong for the case that matters:
|
|
47
|
+
* a subject thirty metres past its anchor, with even a modest share left behind, pulls the
|
|
48
|
+
* aim further back than the camera stands — so the shot looks the wrong way down its own
|
|
49
|
+
* axis and the subject is behind the lens. Clamping the offset in metres instead cannot do
|
|
50
|
+
* that, because it is measured against the distance the camera is placed at.
|
|
51
|
+
*
|
|
52
|
+
* At half, the aim is never more than half the camera's distance from the subject, which
|
|
53
|
+
* keeps them near the middle of frame at any separation. While the two are closer than
|
|
54
|
+
* that the aim lands on the anchor exactly, which is the composition the shot exists for.
|
|
55
|
+
*/
|
|
56
|
+
const LOOK_AT_ANCHOR_PULL = 0.5;
|
|
57
|
+
|
|
58
|
+
/** Where the subject is and which way it faces. Caller-owned and mutated in place. */
|
|
59
|
+
export interface SubjectPose {
|
|
60
|
+
x: number;
|
|
61
|
+
y: number;
|
|
62
|
+
z: number;
|
|
63
|
+
yaw: number;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/** The answer: caller-owned, written in place, never allocated per frame. */
|
|
67
|
+
export interface ShotPlacement {
|
|
68
|
+
/** Where the shot wants the camera, before smoothing and before collision. */
|
|
69
|
+
wantX: number;
|
|
70
|
+
wantY: number;
|
|
71
|
+
wantZ: number;
|
|
72
|
+
/** What it wants in the middle of frame. */
|
|
73
|
+
lookX: number;
|
|
74
|
+
lookY: number;
|
|
75
|
+
lookZ: number;
|
|
76
|
+
fovDeg: number;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function createShotPlacement(): ShotPlacement {
|
|
80
|
+
return { wantX: 0, wantY: 0, wantZ: 0, lookX: 0, lookY: 0, lookZ: 0, fovDeg: 70 };
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* How long an orbit with no stated hold spends getting up to speed.
|
|
85
|
+
*
|
|
86
|
+
* Long enough to read as a camera being pushed rather than switched on, short
|
|
87
|
+
* enough that a two-second shot still travels. A stated hold is always better —
|
|
88
|
+
* it gets an ease at *both* ends — and the director supplies one.
|
|
89
|
+
*/
|
|
90
|
+
const ORBIT_EASE_SEC = 1.2;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The station a `flyby` shoots from, when the shot did not name one.
|
|
94
|
+
*
|
|
95
|
+
* Split out because the station is captured once, on the cut, and then held: a
|
|
96
|
+
* flyby that follows is a chase cam, and the whole point is a camera the world
|
|
97
|
+
* moves past.
|
|
98
|
+
*/
|
|
99
|
+
export function flybyStation(
|
|
100
|
+
shot: ShotParams,
|
|
101
|
+
pose: SubjectPose,
|
|
102
|
+
out: [number, number, number],
|
|
103
|
+
): void {
|
|
104
|
+
const anchor = shot.anchor;
|
|
105
|
+
if (anchor !== undefined) {
|
|
106
|
+
out[0] = anchor[0] ?? 0;
|
|
107
|
+
out[1] = anchor[1] ?? 0;
|
|
108
|
+
out[2] = anchor[2] ?? 0;
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const distance = shotParam(shot.distance, 6, 0.5, 400);
|
|
112
|
+
const height = shotParam(shot.height, 2, -50, 200);
|
|
113
|
+
out[0] = pose.x + Math.cos(pose.yaw) * distance;
|
|
114
|
+
out[1] = pose.y + height;
|
|
115
|
+
out[2] = pose.z + Math.sin(pose.yaw) * distance;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Place `shot` for a subject at `pose`, `ageSec` into the shot.
|
|
120
|
+
*
|
|
121
|
+
* `station` is only read by `flyby`; pass the rig's held station.
|
|
122
|
+
*/
|
|
123
|
+
export function placeShot(
|
|
124
|
+
shot: ShotParams,
|
|
125
|
+
pose: SubjectPose,
|
|
126
|
+
ageSec: number,
|
|
127
|
+
station: readonly number[],
|
|
128
|
+
out: ShotPlacement,
|
|
129
|
+
): void {
|
|
130
|
+
const distance = shotParam(shot.distance, 6, 0.5, 400);
|
|
131
|
+
const height = shotParam(shot.height, 2, -50, 200);
|
|
132
|
+
const { x, y, z, yaw } = pose;
|
|
133
|
+
|
|
134
|
+
out.fovDeg = shotParam(shot.fovDeg, 70, 20, 140);
|
|
135
|
+
out.wantX = x;
|
|
136
|
+
out.wantY = y + height;
|
|
137
|
+
out.wantZ = z;
|
|
138
|
+
out.lookX = x;
|
|
139
|
+
out.lookY = y;
|
|
140
|
+
out.lookZ = z;
|
|
141
|
+
|
|
142
|
+
switch (shot.kind) {
|
|
143
|
+
case 'chase': {
|
|
144
|
+
// Behind the character's own heading, so the shot reads as following.
|
|
145
|
+
out.wantX = x - Math.sin(yaw) * distance;
|
|
146
|
+
out.wantZ = z + Math.cos(yaw) * distance;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case 'lowWide': {
|
|
150
|
+
// Across the line of travel and near the ground, so the character crosses
|
|
151
|
+
// frame instead of receding — the shot that sells a gap.
|
|
152
|
+
out.wantX = x + Math.cos(yaw) * distance;
|
|
153
|
+
out.wantZ = z + Math.sin(yaw) * distance;
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case 'orbit': {
|
|
157
|
+
const rate = shotParam(shot.orbitRate, 0.6, -3, 3);
|
|
158
|
+
const angle = yaw + sweptAngle(rate, ageSec, shot.holdSec);
|
|
159
|
+
out.wantX = x - Math.sin(angle) * distance;
|
|
160
|
+
out.wantZ = z + Math.cos(angle) * distance;
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case 'overhead': {
|
|
164
|
+
out.wantX = x - Math.sin(yaw) * distance * 0.4;
|
|
165
|
+
out.wantZ = z + Math.cos(yaw) * distance * 0.4;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
case 'flyby': {
|
|
169
|
+
out.wantX = station[0] ?? 0;
|
|
170
|
+
out.wantY = station[1] ?? 0;
|
|
171
|
+
out.wantZ = station[2] ?? 0;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
case 'lookAt': {
|
|
175
|
+
/*
|
|
176
|
+
* Frames a fixed point *and* keeps the subject, handing the frame from one to the
|
|
177
|
+
* other as they separate.
|
|
178
|
+
*
|
|
179
|
+
* The fixed point is the reason this shot kind exists — a grapple shot holds on the
|
|
180
|
+
* ring while the character flies at it, and aiming at the character instead loses the thing
|
|
181
|
+
* the moment is about. But it aimed at the anchor and *nothing else*, and an anchor is
|
|
182
|
+
* a place the character arrives at and then leaves. Once they had swung through it they
|
|
183
|
+
* were simply out of shot, for as long as the cut lasted — reported from a replay
|
|
184
|
+
* as framing that loses the subject entirely, because the camera stops following
|
|
185
|
+
* them in that phase.
|
|
186
|
+
*
|
|
187
|
+
* So the aim is a point on the line between them, pulled toward the anchor by a
|
|
188
|
+
* bounded number of metres. While the two are close the aim *is* the anchor, which is
|
|
189
|
+
* the composition the shot was written for; once the character has flown past, the aim
|
|
190
|
+
* stays with them and the ring slides out toward the edge of frame rather than the
|
|
191
|
+
* character leaving it. Nothing needs to know which phase it is in — the geometry says.
|
|
192
|
+
*/
|
|
193
|
+
const anchor = shot.anchor;
|
|
194
|
+
if (anchor !== undefined) {
|
|
195
|
+
const ax = anchor[0] ?? 0;
|
|
196
|
+
const ay = anchor[1] ?? 0;
|
|
197
|
+
const az = anchor[2] ?? 0;
|
|
198
|
+
const gap = Math.hypot(x - ax, y - ay, z - az);
|
|
199
|
+
/*
|
|
200
|
+
* Aim from the *subject* toward the anchor, by at most half the camera's distance.
|
|
201
|
+
* Nearer than that and the aim is the anchor itself; further and the anchor slides
|
|
202
|
+
* out toward the edge of frame while the subject stays in the middle of it.
|
|
203
|
+
*/
|
|
204
|
+
const pull = Math.min(gap, distance * LOOK_AT_ANCHOR_PULL);
|
|
205
|
+
const k = gap > 1e-6 ? pull / gap : 0;
|
|
206
|
+
out.lookX = x + (ax - x) * k;
|
|
207
|
+
out.lookY = y + (ay - y) * k;
|
|
208
|
+
out.lookZ = z + (az - z) * k;
|
|
209
|
+
}
|
|
210
|
+
out.wantX = x - Math.sin(yaw) * distance;
|
|
211
|
+
out.wantZ = z + Math.cos(yaw) * distance;
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* How far an orbit has swept by `ageSec` — eased, not `age x rate`.
|
|
219
|
+
*
|
|
220
|
+
* The linear version was reported, exactly, as looking *straight*: measured at a
|
|
221
|
+
* dead constant 3.82 m/s from the twentieth frame of the shot to the last one,
|
|
222
|
+
* still at full speed at the instant the shot was cut away from. A dolly on
|
|
223
|
+
* rails. Every other shot kind travelled exactly 0.000 m over two seconds with a
|
|
224
|
+
* still character, so this was the only self-motion in the file and the only place
|
|
225
|
+
* the complaint could come from.
|
|
226
|
+
*
|
|
227
|
+
* The **arc is preserved**: `rate x hold` is what a hold sweeps either way, since
|
|
228
|
+
* where an orbit starts and finishes is a composition decision and the ease is
|
|
229
|
+
* only about how it gets there. It peaks half again as fast in the middle, which
|
|
230
|
+
* is the cost of standing still at both ends.
|
|
231
|
+
*/
|
|
232
|
+
function sweptAngle(rate: number, ageSec: number, holdSec: number | undefined): number {
|
|
233
|
+
const hold = holdSec !== undefined && Number.isFinite(holdSec) && holdSec > 0 ? holdSec : 0;
|
|
234
|
+
if (hold > 0) {
|
|
235
|
+
const t = clamp(ageSec / hold, 0, 1);
|
|
236
|
+
return rate * hold * t * t * (3 - 2 * t);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/*
|
|
240
|
+
* No hold to aim at, so ease in and then keep the rate. This is the integral of
|
|
241
|
+
* `smoothstep(age / EASE)` — which is why the straight part is offset by half
|
|
242
|
+
* the ramp rather than starting from zero, and why the two halves meet with the
|
|
243
|
+
* same speed as well as the same position.
|
|
244
|
+
*/
|
|
245
|
+
if (ageSec >= ORBIT_EASE_SEC) return rate * (ageSec - ORBIT_EASE_SEC * 0.5);
|
|
246
|
+
const u = ageSec / ORBIT_EASE_SEC;
|
|
247
|
+
return rate * ORBIT_EASE_SEC * (u * u * u - 0.5 * u * u * u * u);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Clamp a shot parameter into something a camera can use.
|
|
252
|
+
*
|
|
253
|
+
* Shots are produced by a director working from measured data — a run that
|
|
254
|
+
* lasted no time, an anchor at the origin — and a NaN reaching a view matrix
|
|
255
|
+
* blanks the entire frame without raising anything, which is the worst way for a
|
|
256
|
+
* bad number to fail.
|
|
257
|
+
*/
|
|
258
|
+
export function shotParam(
|
|
259
|
+
value: number | undefined,
|
|
260
|
+
fallback: number,
|
|
261
|
+
min: number,
|
|
262
|
+
max: number,
|
|
263
|
+
): number {
|
|
264
|
+
if (value === undefined || !Number.isFinite(value)) return fallback;
|
|
265
|
+
return clamp(value, min, max);
|
|
266
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The joint palette's shape: how wide its texture is, how many joints fit, and which unit it takes.
|
|
3
|
+
*
|
|
4
|
+
* **Backend-neutral by the 2026-08-13 rule.** Both backends upload a palette and both need the
|
|
5
|
+
* same three answers, so the decision lives here and only the binding is per-backend. A helper
|
|
6
|
+
* that took a `WebGL2RenderingContext` would be a decision the other backend could not reach, and
|
|
7
|
+
* two implementations of one rule drift.
|
|
8
|
+
*
|
|
9
|
+
* **The palette is a texture and not a `uniform mat4[]`, and the rule that would have barred one
|
|
10
|
+
* does not reach here.** The 2026-08-07 rule governs implicit derivatives in non-uniform control
|
|
11
|
+
* flow — a *fragment*-stage hazard. A vertex stage computes no derivatives, so `texelFetch` there
|
|
12
|
+
* is unconditional and that rule has nothing to say about it.
|
|
13
|
+
*
|
|
14
|
+
* What a uniform array would have cost is the reason: `MAX_VERTEX_UNIFORM_VECTORS` is 256 on the
|
|
15
|
+
* WebGL2 floor and `FLAT_VERT` already spends fifteen, so four vectors a matrix caps a rig at
|
|
16
|
+
* **sixty joints** — under a humanoid with fingers, and on exactly the mid-range hardware the
|
|
17
|
+
* engine hard-gates 60 fps on.
|
|
18
|
+
*
|
|
19
|
+
* What the texture costs is an upload per skinned draw where an array would be a uniform write.
|
|
20
|
+
* What would make it wrong is a profile showing that upload is the limit at a realistic character
|
|
21
|
+
* count; the fix is then one texture holding every character's palette with a per-draw row offset,
|
|
22
|
+
* which is a follow-on rather than a starting point.
|
|
23
|
+
*
|
|
24
|
+
* **A palette belongs to a draw, and what it takes to honour that differs per backend.** WebGL2
|
|
25
|
+
* uploads with `texSubImage2D`, a command in the same stream as the draws around it, so one texture
|
|
26
|
+
* rewritten between two draws separates them by construction. WebGPU's `queue.writeTexture` is
|
|
27
|
+
* ordered on the queue timeline and the frame's encoder is submitted after every upload in it, so
|
|
28
|
+
* the same one texture hands *every* skinned draw of the frame the last palette written — and since
|
|
29
|
+
* a rig carries its placement in its palette, that is every character standing where the last one
|
|
30
|
+
* drawn stands. That backend therefore binds a ring of palettes, one slot per palette a frame sets:
|
|
31
|
+
* `backend/webgpu/skinPaletteRing.ts`. The decision here is one; only the binder differs, per the
|
|
32
|
+
* 2026-08-13 rule.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The palette's texture unit, from the lit pass's own budget.
|
|
37
|
+
*
|
|
38
|
+
* Re-exported rather than declared, because a unit number written twice is a collision waiting to
|
|
39
|
+
* happen and `lightBudget.ts` is where every other unit in this pass is decided. It carries the
|
|
40
|
+
* reason it is not 0.
|
|
41
|
+
*/
|
|
42
|
+
export { SKIN_PALETTE_TEXTURE_UNIT } from './lightBudget.ts';
|
|
43
|
+
|
|
44
|
+
/** Four `rgba32float` texels hold one column-major 4x4. */
|
|
45
|
+
const TEXELS_PER_JOINT = 4;
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The most joints one palette can hold.
|
|
49
|
+
*
|
|
50
|
+
* WebGL2 guarantees `MAX_TEXTURE_SIZE` of 2048 and promises nothing above it, so a single-row
|
|
51
|
+
* palette holds 2048 / 4 matrices. A humanoid rig is sixty to ninety joints, so this is not a
|
|
52
|
+
* limit anybody meets by accident — but it is stated, refused at construction and named in the
|
|
53
|
+
* error, because a limit a consumer discovers is a defect and a limit they read is a
|
|
54
|
+
* specification.
|
|
55
|
+
*
|
|
56
|
+
* What it costs is that a crowd cannot share one palette. What would make it wrong is a rig above
|
|
57
|
+
* it, and the fix is wrapping onto more rows — which costs one division in the vertex stage and is
|
|
58
|
+
* why it is not the starting point.
|
|
59
|
+
*/
|
|
60
|
+
export const MAX_JOINTS = 512;
|
|
61
|
+
|
|
62
|
+
/** How wide the palette texture is for a rig of this many joints. */
|
|
63
|
+
export function paletteTextureWidth(jointCount: number): number {
|
|
64
|
+
if (!Number.isInteger(jointCount) || jointCount < 1) {
|
|
65
|
+
throw new Error(`skin palette: a rig needs at least one joint, got ${jointCount}`);
|
|
66
|
+
}
|
|
67
|
+
if (jointCount > MAX_JOINTS) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`skin palette: ${jointCount} joints exceeds the ${MAX_JOINTS} a single-row palette holds. ` +
|
|
70
|
+
`WebGL2 guarantees a texture width of 2048 and four texels carry one matrix, so this is ` +
|
|
71
|
+
`the floor rather than this machine's limit.`,
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
return jointCount * TEXELS_PER_JOINT;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Refuse a palette that is not whole matrices, naming the length.
|
|
79
|
+
*
|
|
80
|
+
* A caller error with exactly one correct outcome, so it throws rather than warns — and it throws
|
|
81
|
+
* where the palette is handed over rather than where a shader reads a partial matrix and draws a
|
|
82
|
+
* rig folded in on itself.
|
|
83
|
+
*/
|
|
84
|
+
export function validateSkinPalette(palette: Float32Array): void {
|
|
85
|
+
if (palette.length % 16 !== 0) {
|
|
86
|
+
throw new Error(
|
|
87
|
+
`skin palette: ${palette.length} floats is not a whole number of 4x4 matrices (16 each)`,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
const joints = palette.length / 16;
|
|
91
|
+
if (joints < 1 || joints > MAX_JOINTS) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
`skin palette: ${joints} joints, which is outside 1 to ${MAX_JOINTS}. See MAX_JOINTS.`,
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* --- Morph targets, on the same mechanism --- */
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* The most morph targets one mesh can carry.
|
|
102
|
+
*
|
|
103
|
+
* Bounded by the weight array in the vertex uniform block rather than by the delta texture, which
|
|
104
|
+
* is why it is small: eight `vec4`-aligned floats is 128 bytes of a block that has fifteen vectors
|
|
105
|
+
* in it already. Eight is what glTF's own tooling emits and what every exporter defaults to.
|
|
106
|
+
*
|
|
107
|
+
* What it costs is a rig wanting nine expressions. What would make it wrong is one, and the fix is
|
|
108
|
+
* a second weight texture rather than a wider block — the block is per draw and the texture is not.
|
|
109
|
+
*/
|
|
110
|
+
export const MAX_MORPH_TARGETS = 8;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Where one target's delta for one vertex sits in the delta texture.
|
|
114
|
+
*
|
|
115
|
+
* Interleaved by vertex rather than by target — every target of a vertex is adjacent — because the
|
|
116
|
+
* shader reads all of them for one vertex and nothing reads one target across many vertices. That
|
|
117
|
+
* is one cache line instead of `targetCount` of them.
|
|
118
|
+
*/
|
|
119
|
+
export function morphTexelIndex(vertex: number, target: number, targetCount: number): number {
|
|
120
|
+
return vertex * targetCount + target;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/** Refuse a weight array that cannot drive the targets a mesh carries, naming both counts. */
|
|
124
|
+
export function validateMorph(weights: Float32Array, targetCount: number): void {
|
|
125
|
+
if (targetCount < 1 || targetCount > MAX_MORPH_TARGETS) {
|
|
126
|
+
throw new Error(
|
|
127
|
+
`morph targets: ${targetCount} is outside 1 to ${MAX_MORPH_TARGETS}. See MAX_MORPH_TARGETS.`,
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
if (weights.length < targetCount) {
|
|
131
|
+
throw new Error(
|
|
132
|
+
`morph targets: ${weights.length} weights for ${targetCount} targets. Every target needs ` +
|
|
133
|
+
`one, or the ones past the end read as zero and that target silently never applies.`,
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** How wide the delta texture is for a mesh of this many vertices and targets. */
|
|
139
|
+
export function morphTextureWidth(vertexCount: number, targetCount: number): number {
|
|
140
|
+
const texels = vertexCount * targetCount;
|
|
141
|
+
if (texels < 1) throw new Error('morph targets: a mesh needs at least one vertex and one target');
|
|
142
|
+
/*
|
|
143
|
+
* One row while it fits, then as many rows as it takes. WebGL2 guarantees a texture width of
|
|
144
|
+
* 2048 and nothing more, and a mesh times its targets passes that at 256 vertices with eight
|
|
145
|
+
* targets — which is a small mesh, so unlike the palette this is the ordinary case rather than
|
|
146
|
+
* the edge one.
|
|
147
|
+
*/
|
|
148
|
+
return Math.min(texels, MORPH_TEXTURE_WIDTH);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/** Rows the delta texture needs, given the width above. */
|
|
152
|
+
export function morphTextureRows(vertexCount: number, targetCount: number): number {
|
|
153
|
+
return Math.ceil((vertexCount * targetCount) / MORPH_TEXTURE_WIDTH);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** WebGL2's guaranteed `MAX_TEXTURE_SIZE`, which is the only width that is safe everywhere. */
|
|
157
|
+
const MORPH_TEXTURE_WIDTH = 2048;
|