@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,527 @@
|
|
|
1
|
+
export function createSplineSample() {
|
|
2
|
+
return {
|
|
3
|
+
x: 0,
|
|
4
|
+
y: 0,
|
|
5
|
+
z: 0,
|
|
6
|
+
tangentX: 1,
|
|
7
|
+
tangentY: 0,
|
|
8
|
+
tangentZ: 0,
|
|
9
|
+
normalX: 0,
|
|
10
|
+
normalY: 1,
|
|
11
|
+
normalZ: 0,
|
|
12
|
+
rightX: 0,
|
|
13
|
+
rightY: 0,
|
|
14
|
+
rightZ: 1,
|
|
15
|
+
bankRad: 0,
|
|
16
|
+
widthM: 0,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Target spacing of the internal arc-length table.
|
|
21
|
+
*
|
|
22
|
+
* Fine enough that interpolating the curve parameter within one cell is
|
|
23
|
+
* indistinguishable from solving for it, and coarse enough that a 400 m track
|
|
24
|
+
* costs a few thousand entries.
|
|
25
|
+
*/
|
|
26
|
+
const TABLE_STEP_M = 0.25;
|
|
27
|
+
const MIN_STEPS_PER_SEGMENT = 4;
|
|
28
|
+
/** Centripetal parameterisation: the exponent that avoids cusps and loops. */
|
|
29
|
+
const KNOT_ALPHA = 0.5;
|
|
30
|
+
/** Chord length below which two control points count as the same place. */
|
|
31
|
+
const DEGENERATE_CHORD = 1e-6;
|
|
32
|
+
/** Parameter offset used for the finite-difference tangent. */
|
|
33
|
+
const TANGENT_DU = 1e-3;
|
|
34
|
+
/** One component of a centripetal Catmull-Rom, via Barry–Goldman. */
|
|
35
|
+
function barryGoldman(p0, p1, p2, p3, t0, t1, t2, t3, t) {
|
|
36
|
+
const a1 = ((t1 - t) * p0 + (t - t0) * p1) / (t1 - t0);
|
|
37
|
+
const a2 = ((t2 - t) * p1 + (t - t1) * p2) / (t2 - t1);
|
|
38
|
+
const a3 = ((t3 - t) * p2 + (t - t2) * p3) / (t3 - t2);
|
|
39
|
+
const b1 = ((t2 - t) * a1 + (t - t0) * a2) / (t2 - t0);
|
|
40
|
+
const b2 = ((t3 - t) * a2 + (t - t1) * a3) / (t3 - t1);
|
|
41
|
+
return ((t2 - t) * b1 + (t - t1) * b2) / (t2 - t1);
|
|
42
|
+
}
|
|
43
|
+
function smoothstep01(u) {
|
|
44
|
+
return u * u * (3 - 2 * u);
|
|
45
|
+
}
|
|
46
|
+
export class Spline {
|
|
47
|
+
px;
|
|
48
|
+
py;
|
|
49
|
+
pz;
|
|
50
|
+
bank;
|
|
51
|
+
width;
|
|
52
|
+
/** Number of curve segments: one fewer than the control points. */
|
|
53
|
+
segments;
|
|
54
|
+
/**
|
|
55
|
+
* The control points with a reflected phantom at each end, so a segment reads its
|
|
56
|
+
* four points as `ex[s] … ex[s + 3]` with no bounds test and no end case.
|
|
57
|
+
*
|
|
58
|
+
* The reflection is what makes the curve reach its own endpoints rather than
|
|
59
|
+
* stopping one control point short, and it used to be recomputed — with its two
|
|
60
|
+
* branches — inside every evaluation. It is a property of the point list, so it is
|
|
61
|
+
* computed once with the point list.
|
|
62
|
+
*/
|
|
63
|
+
ex;
|
|
64
|
+
ey;
|
|
65
|
+
ez;
|
|
66
|
+
/**
|
|
67
|
+
* Centripetal knots per segment, as the three non-zero values: `t0` is always 0.
|
|
68
|
+
*
|
|
69
|
+
* These cost three `hypot`s and three square roots, and they depend only on which
|
|
70
|
+
* segment you are in — never on where you are inside it. Evaluating the curve
|
|
71
|
+
* recomputed them every time regardless, which was the single most expensive thing
|
|
72
|
+
* the engine did: **`sampleAt` alone evaluates three times** (the point, and one
|
|
73
|
+
* either side for the central-difference tangent), so one sample paid for nine of
|
|
74
|
+
* each. The arc-length table is thousands of evaluations per curve, `buildRibbon`
|
|
75
|
+
* is thousands more, and the simulation samples the route every tick.
|
|
76
|
+
*
|
|
77
|
+
* Hoisting them changes no arithmetic: the same expression on the same inputs, run
|
|
78
|
+
* once per segment instead of once per ask.
|
|
79
|
+
*/
|
|
80
|
+
knot1;
|
|
81
|
+
knot2;
|
|
82
|
+
knot3;
|
|
83
|
+
/** Arc-length table, in parallel columns. */
|
|
84
|
+
tableParam;
|
|
85
|
+
tableDist;
|
|
86
|
+
tableX;
|
|
87
|
+
tableY;
|
|
88
|
+
tableZ;
|
|
89
|
+
tableUpX;
|
|
90
|
+
tableUpY;
|
|
91
|
+
tableUpZ;
|
|
92
|
+
length;
|
|
93
|
+
constructor(points) {
|
|
94
|
+
const count = points.length;
|
|
95
|
+
this.px = new Float64Array(Math.max(count, 1));
|
|
96
|
+
this.py = new Float64Array(Math.max(count, 1));
|
|
97
|
+
this.pz = new Float64Array(Math.max(count, 1));
|
|
98
|
+
this.bank = new Float64Array(Math.max(count, 1));
|
|
99
|
+
this.width = new Float64Array(Math.max(count, 1));
|
|
100
|
+
for (let i = 0; i < count; i++) {
|
|
101
|
+
const p = points[i];
|
|
102
|
+
this.px[i] = p.x;
|
|
103
|
+
this.py[i] = p.y;
|
|
104
|
+
this.pz[i] = p.z;
|
|
105
|
+
this.bank[i] = p.bankRad;
|
|
106
|
+
this.width[i] = p.widthM;
|
|
107
|
+
}
|
|
108
|
+
this.segments = Math.max(count - 1, 0);
|
|
109
|
+
// --- Phantom ends and knots -------------------------------------------
|
|
110
|
+
// Four entries even for a curve with no segments, so nothing here can read past
|
|
111
|
+
// its own array. A single point reflects onto itself, which is the same
|
|
112
|
+
// degenerate answer the branched form gave.
|
|
113
|
+
const extended = Math.max(count + 2, 4);
|
|
114
|
+
this.ex = new Float64Array(extended);
|
|
115
|
+
this.ey = new Float64Array(extended);
|
|
116
|
+
this.ez = new Float64Array(extended);
|
|
117
|
+
for (let i = 0; i < count; i++) {
|
|
118
|
+
this.ex[i + 1] = this.px[i];
|
|
119
|
+
this.ey[i + 1] = this.py[i];
|
|
120
|
+
this.ez[i + 1] = this.pz[i];
|
|
121
|
+
}
|
|
122
|
+
if (count < 2) {
|
|
123
|
+
const x = this.px[0] ?? 0;
|
|
124
|
+
const y = this.py[0] ?? 0;
|
|
125
|
+
const z = this.pz[0] ?? 0;
|
|
126
|
+
this.ex.fill(x);
|
|
127
|
+
this.ey.fill(y);
|
|
128
|
+
this.ez.fill(z);
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this.ex[0] = 2 * this.px[0] - this.px[1];
|
|
132
|
+
this.ey[0] = 2 * this.py[0] - this.py[1];
|
|
133
|
+
this.ez[0] = 2 * this.pz[0] - this.pz[1];
|
|
134
|
+
const last = count - 1;
|
|
135
|
+
this.ex[count + 1] = 2 * this.px[last] - this.px[last - 1];
|
|
136
|
+
this.ey[count + 1] = 2 * this.py[last] - this.py[last - 1];
|
|
137
|
+
this.ez[count + 1] = 2 * this.pz[last] - this.pz[last - 1];
|
|
138
|
+
}
|
|
139
|
+
this.knot1 = new Float64Array(Math.max(this.segments, 1));
|
|
140
|
+
this.knot2 = new Float64Array(Math.max(this.segments, 1));
|
|
141
|
+
this.knot3 = new Float64Array(Math.max(this.segments, 1));
|
|
142
|
+
for (let s = 0; s < this.segments; s++) {
|
|
143
|
+
// Every gap is floored: a repeated control point would otherwise divide by
|
|
144
|
+
// zero and take the whole track with it.
|
|
145
|
+
const k1 = Math.max(Math.hypot(this.ex[s + 1] - this.ex[s], this.ey[s + 1] - this.ey[s], this.ez[s + 1] - this.ez[s]) ** KNOT_ALPHA, DEGENERATE_CHORD);
|
|
146
|
+
const k2 = k1 +
|
|
147
|
+
Math.max(Math.hypot(this.ex[s + 2] - this.ex[s + 1], this.ey[s + 2] - this.ey[s + 1], this.ez[s + 2] - this.ez[s + 1]) ** KNOT_ALPHA, DEGENERATE_CHORD);
|
|
148
|
+
this.knot1[s] = k1;
|
|
149
|
+
this.knot2[s] = k2;
|
|
150
|
+
this.knot3[s] =
|
|
151
|
+
k2 +
|
|
152
|
+
Math.max(Math.hypot(this.ex[s + 3] - this.ex[s + 2], this.ey[s + 3] - this.ey[s + 2], this.ez[s + 3] - this.ez[s + 2]) ** KNOT_ALPHA, DEGENERATE_CHORD);
|
|
153
|
+
}
|
|
154
|
+
// --- Arc-length table -------------------------------------------------
|
|
155
|
+
// Step counts first, so the columns can be sized exactly rather than grown.
|
|
156
|
+
let total = 1;
|
|
157
|
+
const stepsPerSegment = new Int32Array(Math.max(this.segments, 1));
|
|
158
|
+
for (let s = 0; s < this.segments; s++) {
|
|
159
|
+
const chord = Math.hypot((this.px[s + 1] ?? 0) - (this.px[s] ?? 0), (this.py[s + 1] ?? 0) - (this.py[s] ?? 0), (this.pz[s + 1] ?? 0) - (this.pz[s] ?? 0));
|
|
160
|
+
const steps = Math.max(MIN_STEPS_PER_SEGMENT, Math.ceil(chord / TABLE_STEP_M));
|
|
161
|
+
stepsPerSegment[s] = steps;
|
|
162
|
+
total += steps;
|
|
163
|
+
}
|
|
164
|
+
this.tableParam = new Float64Array(total);
|
|
165
|
+
this.tableDist = new Float64Array(total);
|
|
166
|
+
this.tableX = new Float64Array(total);
|
|
167
|
+
this.tableY = new Float64Array(total);
|
|
168
|
+
this.tableZ = new Float64Array(total);
|
|
169
|
+
this.tableUpX = new Float64Array(total);
|
|
170
|
+
this.tableUpY = new Float64Array(total);
|
|
171
|
+
this.tableUpZ = new Float64Array(total);
|
|
172
|
+
let n = 0;
|
|
173
|
+
let dist = 0;
|
|
174
|
+
let lastX = 0;
|
|
175
|
+
let lastY = 0;
|
|
176
|
+
let lastZ = 0;
|
|
177
|
+
for (let s = 0; s < this.segments; s++) {
|
|
178
|
+
const steps = stepsPerSegment[s] ?? MIN_STEPS_PER_SEGMENT;
|
|
179
|
+
for (let k = s === 0 ? 0 : 1; k <= steps; k++) {
|
|
180
|
+
const u = k / steps;
|
|
181
|
+
this.evaluate(s, u, TEMP);
|
|
182
|
+
if (n > 0)
|
|
183
|
+
dist += Math.hypot(TEMP[0] - lastX, TEMP[1] - lastY, TEMP[2] - lastZ);
|
|
184
|
+
this.tableParam[n] = s + u;
|
|
185
|
+
this.tableDist[n] = dist;
|
|
186
|
+
this.tableX[n] = TEMP[0];
|
|
187
|
+
this.tableY[n] = TEMP[1];
|
|
188
|
+
this.tableZ[n] = TEMP[2];
|
|
189
|
+
lastX = TEMP[0];
|
|
190
|
+
lastY = TEMP[1];
|
|
191
|
+
lastZ = TEMP[2];
|
|
192
|
+
n++;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (this.segments === 0) {
|
|
196
|
+
this.tableParam[0] = 0;
|
|
197
|
+
this.tableDist[0] = 0;
|
|
198
|
+
this.tableX[0] = this.px[0] ?? 0;
|
|
199
|
+
this.tableY[0] = this.py[0] ?? 0;
|
|
200
|
+
this.tableZ[0] = this.pz[0] ?? 0;
|
|
201
|
+
n = 1;
|
|
202
|
+
}
|
|
203
|
+
/*
|
|
204
|
+
* A curve through coincident control points has a length of a few floating
|
|
205
|
+
* point crumbs rather than exactly zero, and every consumer that loops
|
|
206
|
+
* `for (d = 0; d < length; d += step)` would build one degenerate
|
|
207
|
+
* cross-section from it. Floor it: below a micrometre this is a point.
|
|
208
|
+
*/
|
|
209
|
+
const measured = this.tableDist[n - 1] ?? 0;
|
|
210
|
+
this.length = measured < DEGENERATE_CHORD ? 0 : measured;
|
|
211
|
+
this.transportFrames(n);
|
|
212
|
+
}
|
|
213
|
+
get lengthM() {
|
|
214
|
+
return this.length;
|
|
215
|
+
}
|
|
216
|
+
/** Control points, for callers that need the authored shape back. */
|
|
217
|
+
get pointCount() {
|
|
218
|
+
return this.segments + 1;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Where an arc length falls in control-point terms: `index + fraction`.
|
|
222
|
+
*
|
|
223
|
+
* The inverse of `distanceAtPoint`, for a caller that measured something along
|
|
224
|
+
* the curve and needs to write the answer back onto the points that produced it.
|
|
225
|
+
* The fraction matters as much as the index — bank and width are blended between
|
|
226
|
+
* two control points, so attributing a measurement to one of them without
|
|
227
|
+
* knowing which one dominates there gets the wrong point by half the time.
|
|
228
|
+
*/
|
|
229
|
+
pointParamAt(distanceM) {
|
|
230
|
+
if (this.segments === 0)
|
|
231
|
+
return 0;
|
|
232
|
+
const d = Math.min(Math.max(distanceM, 0), this.length);
|
|
233
|
+
const i = Math.min(this.findCell(d), this.tableParam.length - 1);
|
|
234
|
+
return Math.min(this.tableParam[i] ?? 0, this.segments);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Arc length at control point `index`.
|
|
238
|
+
*
|
|
239
|
+
* A generator authors in control points — "the gap runs from the sixth point
|
|
240
|
+
* to the eighth" — but everything downstream is in metres, and the conversion
|
|
241
|
+
* is only knowable once the curve exists. Without this the caller has to
|
|
242
|
+
* guess, and a guessed hole is a hole in the wrong place.
|
|
243
|
+
*/
|
|
244
|
+
distanceAtPoint(index) {
|
|
245
|
+
if (this.segments === 0)
|
|
246
|
+
return 0;
|
|
247
|
+
const target = Math.min(Math.max(index, 0), this.segments);
|
|
248
|
+
// The table always contains an entry at each integer parameter, because
|
|
249
|
+
// every segment is walked from its own u = 0.
|
|
250
|
+
let lo = 0;
|
|
251
|
+
let hi = this.tableParam.length - 1;
|
|
252
|
+
while (lo < hi) {
|
|
253
|
+
const mid = (lo + hi) >> 1;
|
|
254
|
+
if ((this.tableParam[mid] ?? 0) < target - 1e-9)
|
|
255
|
+
lo = mid + 1;
|
|
256
|
+
else
|
|
257
|
+
hi = mid;
|
|
258
|
+
}
|
|
259
|
+
return this.tableDist[lo] ?? 0;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Carry an up-vector along the curve rather than deriving one at each sample.
|
|
263
|
+
*
|
|
264
|
+
* Each step rotates the previous up by the rotation that takes the previous
|
|
265
|
+
* tangent onto this one — the discrete rotation-minimising frame. On a planar
|
|
266
|
+
* curve it holds up exactly constant; through a climb past vertical it simply
|
|
267
|
+
* follows, because it never consults world up again after the first sample.
|
|
268
|
+
*/
|
|
269
|
+
transportFrames(count) {
|
|
270
|
+
if (count === 0)
|
|
271
|
+
return;
|
|
272
|
+
this.tangentAt(0, count, TEMP);
|
|
273
|
+
let tx = TEMP[0];
|
|
274
|
+
let ty = TEMP[1];
|
|
275
|
+
let tz = TEMP[2];
|
|
276
|
+
// Seed from world up, or from world forward where the curve starts
|
|
277
|
+
// vertical and world up would give nothing to cross with.
|
|
278
|
+
let ux = 0;
|
|
279
|
+
let uy = 1;
|
|
280
|
+
let uz = 0;
|
|
281
|
+
if (Math.abs(ty) > 0.999) {
|
|
282
|
+
ux = 0;
|
|
283
|
+
uy = 0;
|
|
284
|
+
uz = 1;
|
|
285
|
+
}
|
|
286
|
+
let dot = ux * tx + uy * ty + uz * tz;
|
|
287
|
+
ux -= tx * dot;
|
|
288
|
+
uy -= ty * dot;
|
|
289
|
+
uz -= tz * dot;
|
|
290
|
+
let inv = 1 / (Math.hypot(ux, uy, uz) || 1);
|
|
291
|
+
ux *= inv;
|
|
292
|
+
uy *= inv;
|
|
293
|
+
uz *= inv;
|
|
294
|
+
this.tableUpX[0] = ux;
|
|
295
|
+
this.tableUpY[0] = uy;
|
|
296
|
+
this.tableUpZ[0] = uz;
|
|
297
|
+
for (let i = 1; i < count; i++) {
|
|
298
|
+
this.tangentAt(i, count, TEMP);
|
|
299
|
+
const nx = TEMP[0];
|
|
300
|
+
const ny = TEMP[1];
|
|
301
|
+
const nz = TEMP[2];
|
|
302
|
+
// Rodrigues about (previous tangent × this tangent), by the angle
|
|
303
|
+
// between them. Degenerate when they are parallel, which is the common
|
|
304
|
+
// case on a straight — hence the guard rather than a branchless form.
|
|
305
|
+
const ax = ty * nz - tz * ny;
|
|
306
|
+
const ay = tz * nx - tx * nz;
|
|
307
|
+
const az = tx * ny - ty * nx;
|
|
308
|
+
const sin = Math.hypot(ax, ay, az);
|
|
309
|
+
if (sin > 1e-9) {
|
|
310
|
+
const cos = tx * nx + ty * ny + tz * nz;
|
|
311
|
+
const kx = ax / sin;
|
|
312
|
+
const ky = ay / sin;
|
|
313
|
+
const kz = az / sin;
|
|
314
|
+
const kDotU = kx * ux + ky * uy + kz * uz;
|
|
315
|
+
const cx = ky * uz - kz * uy;
|
|
316
|
+
const cy = kz * ux - kx * uz;
|
|
317
|
+
const cz = kx * uy - ky * ux;
|
|
318
|
+
const rx = ux * cos + cx * sin + kx * kDotU * (1 - cos);
|
|
319
|
+
const ry = uy * cos + cy * sin + ky * kDotU * (1 - cos);
|
|
320
|
+
const rz = uz * cos + cz * sin + kz * kDotU * (1 - cos);
|
|
321
|
+
ux = rx;
|
|
322
|
+
uy = ry;
|
|
323
|
+
uz = rz;
|
|
324
|
+
}
|
|
325
|
+
// Re-orthogonalise every step. Without it the transported frame drifts
|
|
326
|
+
// off the plane over a few thousand samples and the surface shears.
|
|
327
|
+
dot = ux * nx + uy * ny + uz * nz;
|
|
328
|
+
ux -= nx * dot;
|
|
329
|
+
uy -= ny * dot;
|
|
330
|
+
uz -= nz * dot;
|
|
331
|
+
inv = 1 / (Math.hypot(ux, uy, uz) || 1);
|
|
332
|
+
ux *= inv;
|
|
333
|
+
uy *= inv;
|
|
334
|
+
uz *= inv;
|
|
335
|
+
this.tableUpX[i] = ux;
|
|
336
|
+
this.tableUpY[i] = uy;
|
|
337
|
+
this.tableUpZ[i] = uz;
|
|
338
|
+
tx = nx;
|
|
339
|
+
ty = ny;
|
|
340
|
+
tz = nz;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
/** Unit tangent at table entry `i`, from its neighbours' positions. */
|
|
344
|
+
tangentAt(i, count, out) {
|
|
345
|
+
const a = Math.max(i - 1, 0);
|
|
346
|
+
const b = Math.min(i + 1, count - 1);
|
|
347
|
+
let dx = (this.tableX[b] ?? 0) - (this.tableX[a] ?? 0);
|
|
348
|
+
let dy = (this.tableY[b] ?? 0) - (this.tableY[a] ?? 0);
|
|
349
|
+
let dz = (this.tableZ[b] ?? 0) - (this.tableZ[a] ?? 0);
|
|
350
|
+
const len = Math.hypot(dx, dy, dz);
|
|
351
|
+
if (len < 1e-12) {
|
|
352
|
+
dx = 1;
|
|
353
|
+
dy = 0;
|
|
354
|
+
dz = 0;
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
dx /= len;
|
|
358
|
+
dy /= len;
|
|
359
|
+
dz /= len;
|
|
360
|
+
}
|
|
361
|
+
out[0] = dx;
|
|
362
|
+
out[1] = dy;
|
|
363
|
+
out[2] = dz;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Curve position at segment `s`, local parameter `u`, into `out[0..2]`.
|
|
367
|
+
*
|
|
368
|
+
* Nothing here depends on anything but `u`: the four points are read straight out
|
|
369
|
+
* of the phantom-extended arrays and the knots were measured when the curve was
|
|
370
|
+
* built. What is left is the interpolation itself, which is the only part that
|
|
371
|
+
* could not have been done in advance.
|
|
372
|
+
*/
|
|
373
|
+
evaluate(s, u, out) {
|
|
374
|
+
const x0 = this.ex[s];
|
|
375
|
+
const y0 = this.ey[s];
|
|
376
|
+
const z0 = this.ez[s];
|
|
377
|
+
const x1 = this.ex[s + 1];
|
|
378
|
+
const y1 = this.ey[s + 1];
|
|
379
|
+
const z1 = this.ez[s + 1];
|
|
380
|
+
const x2 = this.ex[s + 2];
|
|
381
|
+
const y2 = this.ey[s + 2];
|
|
382
|
+
const z2 = this.ez[s + 2];
|
|
383
|
+
const x3 = this.ex[s + 3];
|
|
384
|
+
const y3 = this.ey[s + 3];
|
|
385
|
+
const z3 = this.ez[s + 3];
|
|
386
|
+
const t0 = 0;
|
|
387
|
+
const t1 = this.knot1[s];
|
|
388
|
+
const t2 = this.knot2[s];
|
|
389
|
+
const t3 = this.knot3[s];
|
|
390
|
+
const t = t1 + (t2 - t1) * u;
|
|
391
|
+
out[0] = barryGoldman(x0, x1, x2, x3, t0, t1, t2, t3, t);
|
|
392
|
+
out[1] = barryGoldman(y0, y1, y2, y3, t0, t1, t2, t3, t);
|
|
393
|
+
out[2] = barryGoldman(z0, z1, z2, z3, t0, t1, t2, t3, t);
|
|
394
|
+
}
|
|
395
|
+
/** Curve position at a global parameter (segment index plus local u). */
|
|
396
|
+
evaluateParam(param, out) {
|
|
397
|
+
const clamped = Math.min(Math.max(param, 0), this.segments);
|
|
398
|
+
let s = Math.floor(clamped);
|
|
399
|
+
let u = clamped - s;
|
|
400
|
+
if (s >= this.segments) {
|
|
401
|
+
s = Math.max(this.segments - 1, 0);
|
|
402
|
+
u = 1;
|
|
403
|
+
}
|
|
404
|
+
this.evaluate(s, u, out);
|
|
405
|
+
}
|
|
406
|
+
/** Largest table index whose distance is at most `d`. */
|
|
407
|
+
findCell(d) {
|
|
408
|
+
let lo = 0;
|
|
409
|
+
let hi = this.tableDist.length - 1;
|
|
410
|
+
while (lo < hi) {
|
|
411
|
+
const mid = (lo + hi + 1) >> 1;
|
|
412
|
+
if ((this.tableDist[mid] ?? 0) <= d)
|
|
413
|
+
lo = mid;
|
|
414
|
+
else
|
|
415
|
+
hi = mid - 1;
|
|
416
|
+
}
|
|
417
|
+
return lo;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Evaluate the curve at an arc length, clamped to its ends.
|
|
421
|
+
*
|
|
422
|
+
* Allocation-free by contract: it is called from the simulation, from the
|
|
423
|
+
* generator and from the mesh builder, and the first of those makes it a hot
|
|
424
|
+
* path rule rather than a preference.
|
|
425
|
+
*/
|
|
426
|
+
sampleAt(distanceM, out) {
|
|
427
|
+
if (this.segments === 0 || this.length <= 0) {
|
|
428
|
+
out.x = this.px[0] ?? 0;
|
|
429
|
+
out.y = this.py[0] ?? 0;
|
|
430
|
+
out.z = this.pz[0] ?? 0;
|
|
431
|
+
out.tangentX = 1;
|
|
432
|
+
out.tangentY = 0;
|
|
433
|
+
out.tangentZ = 0;
|
|
434
|
+
out.normalX = 0;
|
|
435
|
+
out.normalY = 1;
|
|
436
|
+
out.normalZ = 0;
|
|
437
|
+
out.rightX = 0;
|
|
438
|
+
out.rightY = 0;
|
|
439
|
+
out.rightZ = 1;
|
|
440
|
+
out.bankRad = this.bank[0] ?? 0;
|
|
441
|
+
out.widthM = this.width[0] ?? 0;
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
const d = Math.min(Math.max(distanceM, 0), this.length);
|
|
445
|
+
const i = Math.min(this.findCell(d), this.tableDist.length - 2);
|
|
446
|
+
const d0 = this.tableDist[i] ?? 0;
|
|
447
|
+
const d1 = this.tableDist[i + 1] ?? d0;
|
|
448
|
+
const span = d1 - d0;
|
|
449
|
+
const alpha = span > 1e-12 ? (d - d0) / span : 0;
|
|
450
|
+
const param = (this.tableParam[i] ?? 0) +
|
|
451
|
+
((this.tableParam[i + 1] ?? 0) - (this.tableParam[i] ?? 0)) * alpha;
|
|
452
|
+
this.evaluateParam(param, TEMP);
|
|
453
|
+
out.x = TEMP[0];
|
|
454
|
+
out.y = TEMP[1];
|
|
455
|
+
out.z = TEMP[2];
|
|
456
|
+
// Tangent from a central difference on the curve itself rather than from
|
|
457
|
+
// the table, so it stays exact where the table is coarse.
|
|
458
|
+
this.evaluateParam(param - TANGENT_DU, TEMP);
|
|
459
|
+
const ax = TEMP[0];
|
|
460
|
+
const ay = TEMP[1];
|
|
461
|
+
const az = TEMP[2];
|
|
462
|
+
this.evaluateParam(param + TANGENT_DU, TEMP);
|
|
463
|
+
let tx = TEMP[0] - ax;
|
|
464
|
+
let ty = TEMP[1] - ay;
|
|
465
|
+
let tz = TEMP[2] - az;
|
|
466
|
+
const tLen = Math.hypot(tx, ty, tz);
|
|
467
|
+
if (tLen < 1e-12) {
|
|
468
|
+
tx = 1;
|
|
469
|
+
ty = 0;
|
|
470
|
+
tz = 0;
|
|
471
|
+
}
|
|
472
|
+
else {
|
|
473
|
+
tx /= tLen;
|
|
474
|
+
ty /= tLen;
|
|
475
|
+
tz /= tLen;
|
|
476
|
+
}
|
|
477
|
+
out.tangentX = tx;
|
|
478
|
+
out.tangentY = ty;
|
|
479
|
+
out.tangentZ = tz;
|
|
480
|
+
let ux = (this.tableUpX[i] ?? 0) + ((this.tableUpX[i + 1] ?? 0) - (this.tableUpX[i] ?? 0)) * alpha;
|
|
481
|
+
let uy = (this.tableUpY[i] ?? 1) + ((this.tableUpY[i + 1] ?? 1) - (this.tableUpY[i] ?? 1)) * alpha;
|
|
482
|
+
let uz = (this.tableUpZ[i] ?? 0) + ((this.tableUpZ[i + 1] ?? 0) - (this.tableUpZ[i] ?? 0)) * alpha;
|
|
483
|
+
const uDot = ux * tx + uy * ty + uz * tz;
|
|
484
|
+
ux -= tx * uDot;
|
|
485
|
+
uy -= ty * uDot;
|
|
486
|
+
uz -= tz * uDot;
|
|
487
|
+
const uLen = Math.hypot(ux, uy, uz) || 1;
|
|
488
|
+
ux /= uLen;
|
|
489
|
+
uy /= uLen;
|
|
490
|
+
uz /= uLen;
|
|
491
|
+
// right = tangent × up, normal = right × tangent. Both unit, both exactly
|
|
492
|
+
// perpendicular to the tangent, which is what the surface frame promises.
|
|
493
|
+
let rx = ty * uz - tz * uy;
|
|
494
|
+
let ry = tz * ux - tx * uz;
|
|
495
|
+
let rz = tx * uy - ty * ux;
|
|
496
|
+
const rLen = Math.hypot(rx, ry, rz) || 1;
|
|
497
|
+
rx /= rLen;
|
|
498
|
+
ry /= rLen;
|
|
499
|
+
rz /= rLen;
|
|
500
|
+
const nx = ry * tz - rz * ty;
|
|
501
|
+
const ny = rz * tx - rx * tz;
|
|
502
|
+
const nz = rx * ty - ry * tx;
|
|
503
|
+
// Bank and width follow the control points through a smoothstep. Linear
|
|
504
|
+
// would put a crease across the surface at every control point, and the
|
|
505
|
+
// character would hit it as a bump nobody authored.
|
|
506
|
+
const clamped = Math.min(Math.max(param, 0), this.segments);
|
|
507
|
+
const seg = Math.min(Math.floor(clamped), Math.max(this.segments - 1, 0));
|
|
508
|
+
const blend = smoothstep01(Math.min(Math.max(clamped - seg, 0), 1));
|
|
509
|
+
const bank0 = this.bank[seg] ?? 0;
|
|
510
|
+
const bank1 = this.bank[seg + 1] ?? bank0;
|
|
511
|
+
const width0 = this.width[seg] ?? 0;
|
|
512
|
+
const width1 = this.width[seg + 1] ?? width0;
|
|
513
|
+
const bank = bank0 + (bank1 - bank0) * blend;
|
|
514
|
+
out.bankRad = bank;
|
|
515
|
+
out.widthM = width0 + (width1 - width0) * blend;
|
|
516
|
+
const cos = Math.cos(bank);
|
|
517
|
+
const sin = Math.sin(bank);
|
|
518
|
+
out.rightX = rx * cos + nx * sin;
|
|
519
|
+
out.rightY = ry * cos + ny * sin;
|
|
520
|
+
out.rightZ = rz * cos + nz * sin;
|
|
521
|
+
out.normalX = nx * cos - rx * sin;
|
|
522
|
+
out.normalY = ny * cos - ry * sin;
|
|
523
|
+
out.normalZ = nz * cos - rz * sin;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
/** Module-level scratch. One curve is evaluated at a time, on one thread. */
|
|
527
|
+
const TEMP = new Float64Array(3);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A tangent frame: which way is *along the texture*.
|
|
3
|
+
*
|
|
4
|
+
* **Every map in Phase 1.3 needs one and nothing in this engine had it.** A normal map stores its
|
|
5
|
+
* directions in the surface's own space, and turning those into world directions takes three
|
|
6
|
+
* axes: the normal, a tangent running with u, and a bitangent running with v. Two of the three
|
|
7
|
+
* come from geometry the engine already has; this derives the third.
|
|
8
|
+
*
|
|
9
|
+
* **Four floats a vertex, and `w` is the interesting one.** The bitangent is
|
|
10
|
+
* `cross(normal, tangent) * w`, and the sign is needed because a UV layout can mirror: an artist
|
|
11
|
+
* mapping the left and right of a model onto one patch of texture gives one side a flipped frame,
|
|
12
|
+
* and a bitangent computed without the sign lights that side inside out. Storing it costs a float
|
|
13
|
+
* a vertex, and every format that has been through this — glTF included — settled on the same
|
|
14
|
+
* four rather than storing the bitangent outright, which costs three.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Derive a tangent frame from positions, normals and texture coordinates.
|
|
18
|
+
*
|
|
19
|
+
* **Accumulated per triangle, then orthogonalised per vertex.** A vertex shared by two triangles
|
|
20
|
+
* gets the sum of their tangents, which is what makes a smooth surface's frame smooth; the sum is
|
|
21
|
+
* then no longer square to the interpolated normal, and Gram-Schmidt is what puts it back.
|
|
22
|
+
* Dropping that step is a normal map that shears wherever the geometry curves.
|
|
23
|
+
*
|
|
24
|
+
* Never returns a NaN. A triangle whose three vertices share one texture coordinate has no
|
|
25
|
+
* direction along the texture at all and the arithmetic divides by zero — which is the common
|
|
26
|
+
* case in a bought asset rather than an edge case, and a NaN in a vertex buffer takes the whole
|
|
27
|
+
* triangle off the screen. Those vertices get some unit vector perpendicular to their normal,
|
|
28
|
+
* which is arbitrary and finite, and arbitrary is the honest answer to an unanswerable question.
|
|
29
|
+
*/
|
|
30
|
+
export declare function generateTangents(positions: Float32Array, normals: Float32Array, uvs: Float32Array, indices: Uint16Array | Uint32Array, out?: Float32Array): Float32Array;
|