@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,546 @@
|
|
|
1
|
+
import { colliderFromShape } from '@driftengine/physics';
|
|
2
|
+
import { hullShape } from '@driftengine/physics';
|
|
3
|
+
import { Spline, createSplineSample } from './spline.js';
|
|
4
|
+
/**
|
|
5
|
+
* Spacing of the cross-sections a ribbon's mesh is built from, metres.
|
|
6
|
+
*
|
|
7
|
+
* Exported because it is not only the builder's business: `RibbonSurface` has to know it to
|
|
8
|
+
* agree with the geometry at a hole's edge, where the mesh deliberately keeps the bordering
|
|
9
|
+
* section. A copy of this number in the physics module is a copy that drifts.
|
|
10
|
+
*/
|
|
11
|
+
export const RIBBON_STEP_M = 2;
|
|
12
|
+
const DEFAULT_STEP_M = RIBBON_STEP_M;
|
|
13
|
+
const DEFAULT_THICKNESS_M = 0.6;
|
|
14
|
+
/**
|
|
15
|
+
* Default collider give: comfortably past the sagitta of a `RIBBON_STEP_M`
|
|
16
|
+
* facet at the tightest curvature a route reaches (a hairpin near 6 m radius:
|
|
17
|
+
* 2² / (8 · 6) ≈ 0.08), because a give that only just covers the facet error
|
|
18
|
+
* still brushes the character at every ridge — felt as braking on exactly the
|
|
19
|
+
* curves a route wants taken at speed. Small enough that nothing passes
|
|
20
|
+
* through the gap: it is backed by solid hull immediately beneath, and only
|
|
21
|
+
* the top eases — sides and underside collide exactly where they are drawn.
|
|
22
|
+
*/
|
|
23
|
+
export const RIBBON_COLLIDER_GIVE_M = 0.15;
|
|
24
|
+
/**
|
|
25
|
+
* How far a drawn facet may fall short of the curve it approximates, metres.
|
|
26
|
+
*
|
|
27
|
+
* Comfortably inside `RIBBON_COLLIDER_GIVE_M`, because that give is the whole
|
|
28
|
+
* budget for the two representations of a deck disagreeing: the smooth curve a
|
|
29
|
+
* ground query rides, and the facets that are drawn and collided. Spend the
|
|
30
|
+
* budget on the facet error and there is nothing left for the give's own job.
|
|
31
|
+
*/
|
|
32
|
+
const MAX_FACET_SLIP_M = 0.05;
|
|
33
|
+
/**
|
|
34
|
+
* Ceiling on the cuts one step may be divided into.
|
|
35
|
+
*
|
|
36
|
+
* A route that still slips past `MAX_FACET_SLIP_M` at eight cuts is turning
|
|
37
|
+
* roughly sixty times faster than the geometry it is made of, and no amount of
|
|
38
|
+
* subdivision makes that stretch good — it is a generator bug, and quietly
|
|
39
|
+
* spending a hundred facets on it would hide the bug rather than the seam.
|
|
40
|
+
*/
|
|
41
|
+
const MAX_FACET_CUTS = 8;
|
|
42
|
+
/**
|
|
43
|
+
* How far a quad's fourth corner may sit off the plane of the other three and
|
|
44
|
+
* still be collided as one hull rather than two wedges, metres.
|
|
45
|
+
*
|
|
46
|
+
* A flat quad is its own convex hull, so splitting it buys nothing and costs a
|
|
47
|
+
* collider — and most of a route is flat in this sense: it is only where the
|
|
48
|
+
* bank rolls that a quad warps at all. A centimetre is far below the give, so
|
|
49
|
+
* a quad that passes here cannot stand meaningfully proud of itself.
|
|
50
|
+
*/
|
|
51
|
+
const FLAT_QUAD_M = 0.01;
|
|
52
|
+
function inHole(holes, d) {
|
|
53
|
+
if (holes === undefined)
|
|
54
|
+
return false;
|
|
55
|
+
for (const hole of holes) {
|
|
56
|
+
if (d > hole.fromM && d < hole.toM)
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Accumulator for one ribbon. Kept local rather than reusing `MeshBuilder`
|
|
63
|
+
* because that one only knows how to emit axis-aligned boxes, and every face
|
|
64
|
+
* here is oblique.
|
|
65
|
+
*/
|
|
66
|
+
class Strip {
|
|
67
|
+
positions = [];
|
|
68
|
+
normals = [];
|
|
69
|
+
colors = [];
|
|
70
|
+
emissive = [];
|
|
71
|
+
indices = [];
|
|
72
|
+
count = 0;
|
|
73
|
+
quad(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz, color, emissive) {
|
|
74
|
+
// Flat-shaded, so the normal is the triangle's own and every face carries
|
|
75
|
+
// its own four vertices. Computing it rather than passing it in means the
|
|
76
|
+
// stored normal cannot disagree with the winding.
|
|
77
|
+
const ux = bx - ax;
|
|
78
|
+
const uy = by - ay;
|
|
79
|
+
const uz = bz - az;
|
|
80
|
+
const vx = cx - ax;
|
|
81
|
+
const vy = cy - ay;
|
|
82
|
+
const vz = cz - az;
|
|
83
|
+
let nx = uy * vz - uz * vy;
|
|
84
|
+
let ny = uz * vx - ux * vz;
|
|
85
|
+
let nz = ux * vy - uy * vx;
|
|
86
|
+
const len = Math.hypot(nx, ny, nz);
|
|
87
|
+
if (len < 1e-12)
|
|
88
|
+
return;
|
|
89
|
+
nx /= len;
|
|
90
|
+
ny /= len;
|
|
91
|
+
nz /= len;
|
|
92
|
+
const i = this.count;
|
|
93
|
+
this.positions.push(ax, ay, az, bx, by, bz, cx, cy, cz, dx, dy, dz);
|
|
94
|
+
for (let v = 0; v < 4; v++) {
|
|
95
|
+
this.normals.push(nx, ny, nz);
|
|
96
|
+
this.colors.push(color[0], color[1], color[2]);
|
|
97
|
+
this.emissive.push(emissive);
|
|
98
|
+
}
|
|
99
|
+
this.indices.push(i, i + 1, i + 2, i, i + 2, i + 3);
|
|
100
|
+
this.count += 4;
|
|
101
|
+
}
|
|
102
|
+
build() {
|
|
103
|
+
return {
|
|
104
|
+
positions: new Float32Array(this.positions),
|
|
105
|
+
normals: new Float32Array(this.normals),
|
|
106
|
+
colors: new Float32Array(this.colors),
|
|
107
|
+
emissive: new Float32Array(this.emissive),
|
|
108
|
+
indices: new Uint32Array(this.indices),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function makeSection() {
|
|
113
|
+
return {
|
|
114
|
+
lx: 0,
|
|
115
|
+
ly: 0,
|
|
116
|
+
lz: 0,
|
|
117
|
+
rx: 0,
|
|
118
|
+
ry: 0,
|
|
119
|
+
rz: 0,
|
|
120
|
+
lbx: 0,
|
|
121
|
+
lby: 0,
|
|
122
|
+
lbz: 0,
|
|
123
|
+
rbx: 0,
|
|
124
|
+
rby: 0,
|
|
125
|
+
rbz: 0,
|
|
126
|
+
gx: 0,
|
|
127
|
+
gy: 0,
|
|
128
|
+
gz: 0,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
export function buildRibbon(spline, options) {
|
|
132
|
+
const step = options.stepM ?? DEFAULT_STEP_M;
|
|
133
|
+
const thickness = options.thicknessM ?? DEFAULT_THICKNESS_M;
|
|
134
|
+
const emissive = options.emissive ?? 0;
|
|
135
|
+
const strip = new Strip();
|
|
136
|
+
const colliders = [];
|
|
137
|
+
if (spline.lengthM <= 0 || step <= 0) {
|
|
138
|
+
return { mesh: strip.build(), colliders };
|
|
139
|
+
}
|
|
140
|
+
const sample = createSplineSample();
|
|
141
|
+
const color = [options.color[0], options.color[1], options.color[2]];
|
|
142
|
+
let emissiveNow = emissive;
|
|
143
|
+
const previous = makeSection();
|
|
144
|
+
const current = makeSection();
|
|
145
|
+
/** Scratch: the midpoint a facet is measured against, and the cuts it earns. */
|
|
146
|
+
const probe = makeSection();
|
|
147
|
+
const sub = makeSection();
|
|
148
|
+
let havePrevious = false;
|
|
149
|
+
const wedgePoints = [];
|
|
150
|
+
/**
|
|
151
|
+
* Extra ease for the quad being emitted, on top of the constant give.
|
|
152
|
+
*
|
|
153
|
+
* The give is sized for a facet's own sagitta; what it cannot know is how far
|
|
154
|
+
* *this* quad falls short of the curve, which on a fast camber reversal is
|
|
155
|
+
* several times larger and does not shrink to nothing even at the cut ceiling.
|
|
156
|
+
* A collider standing proud of the smooth surface is the worst failure this
|
|
157
|
+
* builder has: the ground query puts a character at the curve's height, the hull
|
|
158
|
+
* is above them, and a body inside its own floor cannot move in any direction
|
|
159
|
+
* — on that camber, a hill simply cannot be climbed. So whatever the cuts
|
|
160
|
+
* could not remove is handed to the ease instead. Sitting *below* the drawn
|
|
161
|
+
* deck costs nothing; the surface owns the ride, and the slab is solid the
|
|
162
|
+
* whole way down.
|
|
163
|
+
*/
|
|
164
|
+
let extraEase = 0;
|
|
165
|
+
/**
|
|
166
|
+
* Extra ease across the section, on top of `extraEase` along it.
|
|
167
|
+
*
|
|
168
|
+
* `extraEase` was sized for camber: it travels along a section's normal, and
|
|
169
|
+
* a normal-direction push cannot touch an error that lives in a completely
|
|
170
|
+
* different direction. On a curve tight enough that the half-width is a real
|
|
171
|
+
* fraction of the radius — a hairpin's inner rail, a chicane's apex — the
|
|
172
|
+
* chord between two cross-sections' inner corners cuts across the true
|
|
173
|
+
* offset curve rather than following it, because the inner boundary sweeps a
|
|
174
|
+
* *tighter* radius than the centreline (`radius − half`, shrinking toward
|
|
175
|
+
* zero as the half-width closes on the radius) while the chord stays
|
|
176
|
+
* straight. The result stands proud sideways instead of vertically: a hull
|
|
177
|
+
* a hand's width into the lane a character is looking straight down, on
|
|
178
|
+
* flat, ordinary-looking track. It reads as the player colliding with the
|
|
179
|
+
* track itself, worst while sliding — measured at a hairpin
|
|
180
|
+
* where the chord missed the true inner boundary by most of a metre and
|
|
181
|
+
* cost a character their whole speed on an axis nothing was drawn across.
|
|
182
|
+
*
|
|
183
|
+
* `cuts` already measures this: `leftSlip`/`rightSlip` below are the same
|
|
184
|
+
* per-edge chord error the cut count is chosen from. What was missing was
|
|
185
|
+
* anywhere for the *leftover* of that specific error to go once the cut
|
|
186
|
+
* ceiling was reached — `extraEase` only ever paid down the diagonal
|
|
187
|
+
* (camber) term. This pays the lateral remainder by drawing both top
|
|
188
|
+
* corners in toward the section's own centreline, which can only ever
|
|
189
|
+
* shrink the hull — the ground a character stands on is still the smooth
|
|
190
|
+
* curve `RibbonSurface` answers from, never this mesh, so a hull inset by
|
|
191
|
+
* centimetres at an extreme apex changes nothing about where a body can
|
|
192
|
+
* walk, only how snugly its sides are held.
|
|
193
|
+
*/
|
|
194
|
+
let lateralEase = 0;
|
|
195
|
+
/** One corner of a wedge: the eased top corner, and the bottom under it. */
|
|
196
|
+
const corner = (s, right) => {
|
|
197
|
+
// The give travels along the section's own normal; so does the extra.
|
|
198
|
+
const ex = s.gx === 0 && s.gy === 0 && s.gz === 0 ? 0 : extraEase / Math.hypot(s.gx, s.gy, s.gz);
|
|
199
|
+
const gx = s.gx * (1 + ex);
|
|
200
|
+
const gy = s.gy * (1 + ex);
|
|
201
|
+
const gz = s.gz * (1 + ex);
|
|
202
|
+
let topX = right ? s.rx : s.lx;
|
|
203
|
+
let topY = right ? s.ry : s.ly;
|
|
204
|
+
let topZ = right ? s.rz : s.lz;
|
|
205
|
+
if (lateralEase > 0) {
|
|
206
|
+
let dx = s.rx - s.lx;
|
|
207
|
+
let dy = s.ry - s.ly;
|
|
208
|
+
let dz = s.rz - s.lz;
|
|
209
|
+
const dl = Math.hypot(dx, dy, dz);
|
|
210
|
+
if (dl > 1e-9) {
|
|
211
|
+
const inset = (Math.min(lateralEase, dl * 0.45) / dl) * (right ? -1 : 1);
|
|
212
|
+
dx *= inset;
|
|
213
|
+
dy *= inset;
|
|
214
|
+
dz *= inset;
|
|
215
|
+
topX += dx;
|
|
216
|
+
topY += dy;
|
|
217
|
+
topZ += dz;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
if (right) {
|
|
221
|
+
wedgePoints.push(topX - gx, topY - gy, topZ - gz, s.rbx, s.rby, s.rbz);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
wedgePoints.push(topX - gx, topY - gy, topZ - gz, s.lbx, s.lby, s.lbz);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* The collision under one drawn quad: two wedges, one per drawn triangle.
|
|
229
|
+
*
|
|
230
|
+
* A convex hull's *top face is a plane*, and the deck between two
|
|
231
|
+
* cross-sections is not one. Hulling the whole quad therefore bridged its
|
|
232
|
+
* warp, and the bridge stood proud of the deck the player walks on: measured
|
|
233
|
+
* across a day's route, up to **6 m** of warp on one in eight spans, leaving
|
|
234
|
+
* hull tops as much as 0.6 m above the drawn surface. A character standing where
|
|
235
|
+
* the deck is drawn was then *inside* solid collision — unable to lift, so
|
|
236
|
+
* auto-step could not fire, unable to move, so a full run died against
|
|
237
|
+
* nothing visible. Reported on the same span every time: on a steep hill the
|
|
238
|
+
* player stops climbing, forward input leaves them standing still, and they
|
|
239
|
+
* are stuck inside the track's own parts.
|
|
240
|
+
*
|
|
241
|
+
* Splitting the quad laterally was an attempt to bound that bridge, and it
|
|
242
|
+
* could not: following a 24° roll to within four centimetres needs ninety
|
|
243
|
+
* strips, and the cap of six left five sixths of the error in place. A
|
|
244
|
+
* triangle needs no bound. Its three corners *define* a plane, so this wedge's
|
|
245
|
+
* top face is the drawn triangle exactly — the same corners, the same diagonal
|
|
246
|
+
* `Strip.quad` indexes — and the pair of them tiles the quad with no seam
|
|
247
|
+
* between and none to the neighbouring span. Two wedges per quad is also
|
|
248
|
+
* fewer colliders than the strips averaged.
|
|
249
|
+
*
|
|
250
|
+
* The bottom corners hang under their own cross-section's normal, so a side
|
|
251
|
+
* face can still be a little warped where the bank rolls. That bulge is
|
|
252
|
+
* lateral, under the deck, bounded by the slab's own depth, and shared with
|
|
253
|
+
* the wedge next door: it is not somewhere anyone stands.
|
|
254
|
+
*/
|
|
255
|
+
const wedgeQuad = (p, c) => {
|
|
256
|
+
/*
|
|
257
|
+
* Flat enough to be its own hull? Then one collider, not two. The warp is
|
|
258
|
+
* the current-left corner's distance from the plane of the other three.
|
|
259
|
+
*/
|
|
260
|
+
const ax = p.lx - p.gx;
|
|
261
|
+
const ay = p.ly - p.gy;
|
|
262
|
+
const az = p.lz - p.gz;
|
|
263
|
+
const e1x = p.rx - p.gx - ax;
|
|
264
|
+
const e1y = p.ry - p.gy - ay;
|
|
265
|
+
const e1z = p.rz - p.gz - az;
|
|
266
|
+
const e2x = c.rx - c.gx - ax;
|
|
267
|
+
const e2y = c.ry - c.gy - ay;
|
|
268
|
+
const e2z = c.rz - c.gz - az;
|
|
269
|
+
let nx = e1y * e2z - e1z * e2y;
|
|
270
|
+
let ny = e1z * e2x - e1x * e2z;
|
|
271
|
+
let nz = e1x * e2y - e1y * e2x;
|
|
272
|
+
const nl = Math.hypot(nx, ny, nz);
|
|
273
|
+
if (nl > 1e-9) {
|
|
274
|
+
nx /= nl;
|
|
275
|
+
ny /= nl;
|
|
276
|
+
nz /= nl;
|
|
277
|
+
const warp = Math.abs((c.lx - c.gx - ax) * nx + (c.ly - c.gy - ay) * ny + (c.lz - c.gz - az) * nz);
|
|
278
|
+
if (warp <= FLAT_QUAD_M) {
|
|
279
|
+
wedgePoints.length = 0;
|
|
280
|
+
corner(p, false);
|
|
281
|
+
corner(p, true);
|
|
282
|
+
corner(c, true);
|
|
283
|
+
corner(c, false);
|
|
284
|
+
colliders.push(colliderFromShape(hullShape(wedgePoints)));
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// The diagonal the mesh indexes: previous-left to current-right.
|
|
289
|
+
wedgePoints.length = 0;
|
|
290
|
+
corner(p, false);
|
|
291
|
+
corner(p, true);
|
|
292
|
+
corner(c, true);
|
|
293
|
+
colliders.push(colliderFromShape(hullShape(wedgePoints)));
|
|
294
|
+
wedgePoints.length = 0;
|
|
295
|
+
corner(p, false);
|
|
296
|
+
corner(c, true);
|
|
297
|
+
corner(c, false);
|
|
298
|
+
colliders.push(colliderFromShape(hullShape(wedgePoints)));
|
|
299
|
+
};
|
|
300
|
+
const band = options.edgeBandM ?? 0;
|
|
301
|
+
const edgeSide = options.edgeSide ?? 1;
|
|
302
|
+
const lift = options.liftM ?? 0;
|
|
303
|
+
const give = options.colliderGiveM ?? RIBBON_COLLIDER_GIVE_M;
|
|
304
|
+
/*
|
|
305
|
+
* The lateral range is normalised, and that is a correctness fix rather than tidiness.
|
|
306
|
+
*
|
|
307
|
+
* A slab built from a *descending* range comes out inside-out: measured signed volume
|
|
308
|
+
* +256 one way round and -256 the other. With back-face culling — which the renderer
|
|
309
|
+
* uses everywhere — an inside-out slab is **invisible from outside**, so you look
|
|
310
|
+
* straight through it. That is exactly what shows up under a canal bridge: the ceiling
|
|
311
|
+
* looks glassy and transparent from below, and fixing one side leaves the opposite one
|
|
312
|
+
* untouched — because a canal on one hand
|
|
313
|
+
* multiplies every offset by -1, which reverses the order and turns every band it
|
|
314
|
+
* builds inside out.
|
|
315
|
+
*
|
|
316
|
+
* Fixing it here rather than at the call sites is the point: a caller expressing
|
|
317
|
+
* "from the coping to the far bank" has said something about *space*, not about winding,
|
|
318
|
+
* and no caller should have to know that the difference is visible.
|
|
319
|
+
*/
|
|
320
|
+
const rangeA = options.lateralFromM;
|
|
321
|
+
const rangeB = options.lateralToM;
|
|
322
|
+
const swap = rangeA !== undefined && rangeB !== undefined && rangeA > rangeB;
|
|
323
|
+
const lateralFrom = swap ? rangeB : rangeA;
|
|
324
|
+
const lateralTo = swap ? rangeA : rangeB;
|
|
325
|
+
const absolute = lateralFrom !== undefined && lateralTo !== undefined;
|
|
326
|
+
const fill = (d, into) => {
|
|
327
|
+
spline.sampleAt(d, sample);
|
|
328
|
+
const half = sample.widthM * 0.5;
|
|
329
|
+
/*
|
|
330
|
+
* Three ways to span a cross-section: the whole surface, a band inset from
|
|
331
|
+
* one edge (a kerb), or a band between two given offsets (a marking).
|
|
332
|
+
*/
|
|
333
|
+
/*
|
|
334
|
+
* Ordered, and the order is what decides the triangle winding.
|
|
335
|
+
*
|
|
336
|
+
* Every quad in this builder puts the first offset at the section's *left* corner
|
|
337
|
+
* and the second at its right, and back faces are culled — so if the two ever
|
|
338
|
+
* arrive the other way round, the piece is built inside out. That is exactly what
|
|
339
|
+
* happened, and it was invisible for as long as it was symmetric:
|
|
340
|
+
*
|
|
341
|
+
* - the full surface spans `-half` to `+half`, left before right, correct;
|
|
342
|
+
* - a kerb at `edgeSide = -1` spans `-half` to `-half + band`, also correct;
|
|
343
|
+
* - a kerb at `edgeSide = +1` spans `+half` to `+half - band` — **reversed**, so
|
|
344
|
+
* its top face points into the deck and is culled, and what shows through is the
|
|
345
|
+
* surface underneath and the band's own underside.
|
|
346
|
+
*
|
|
347
|
+
* One kerb of the two, on one side of every route, worst where a curve brings it to
|
|
348
|
+
* a grazing angle. Once the depth layers had cleaned up the left, the right was
|
|
349
|
+
* unchanged: borders and lines still fighting the main surface, worst on curves.
|
|
350
|
+
*
|
|
351
|
+
* The `absolute` case has the same hazard from the same cause — the canal passes its
|
|
352
|
+
* two offsets multiplied by a side — so this is not special-cased to kerbs. Sorting
|
|
353
|
+
* the pair costs nothing and makes the winding a property of the builder rather than
|
|
354
|
+
* of what a caller happened to pass.
|
|
355
|
+
*/
|
|
356
|
+
const edgeA = absolute ? lateralFrom : band > 0 ? half * edgeSide : -half;
|
|
357
|
+
const edgeB = absolute ? lateralTo : band > 0 ? (half - band) * edgeSide : half;
|
|
358
|
+
const outer = Math.min(edgeA, edgeB);
|
|
359
|
+
const inner = Math.max(edgeA, edgeB);
|
|
360
|
+
const cx = sample.x + sample.normalX * lift;
|
|
361
|
+
const cy = sample.y + sample.normalY * lift;
|
|
362
|
+
const cz = sample.z + sample.normalZ * lift;
|
|
363
|
+
const lx = cx + sample.rightX * outer;
|
|
364
|
+
const ly = cy + sample.rightY * outer;
|
|
365
|
+
const lz = cz + sample.rightZ * outer;
|
|
366
|
+
const rx = cx + sample.rightX * inner;
|
|
367
|
+
const ry = cy + sample.rightY * inner;
|
|
368
|
+
const rz = cz + sample.rightZ * inner;
|
|
369
|
+
into.lx = lx;
|
|
370
|
+
into.ly = ly;
|
|
371
|
+
into.lz = lz;
|
|
372
|
+
into.rx = rx;
|
|
373
|
+
into.ry = ry;
|
|
374
|
+
into.rz = rz;
|
|
375
|
+
into.lbx = lx - sample.normalX * thickness;
|
|
376
|
+
into.lby = ly - sample.normalY * thickness;
|
|
377
|
+
into.lbz = lz - sample.normalZ * thickness;
|
|
378
|
+
into.rbx = rx - sample.normalX * thickness;
|
|
379
|
+
into.rby = ry - sample.normalY * thickness;
|
|
380
|
+
into.rbz = rz - sample.normalZ * thickness;
|
|
381
|
+
// The collider's top eases below the drawn one by the give, never past the slab.
|
|
382
|
+
const ease = Math.min(give, thickness * 0.5);
|
|
383
|
+
into.gx = sample.normalX * ease;
|
|
384
|
+
into.gy = sample.normalY * ease;
|
|
385
|
+
into.gz = sample.normalZ * ease;
|
|
386
|
+
};
|
|
387
|
+
/** One drawn facet of the slab: four faces, and the collision under them. */
|
|
388
|
+
const slab = (p, c) => {
|
|
389
|
+
// Top, then bottom, then the two sides. Orders chosen so each quad's
|
|
390
|
+
// computed normal points out of the slab; the winding test proves it.
|
|
391
|
+
strip.quad(p.lx, p.ly, p.lz, p.rx, p.ry, p.rz, c.rx, c.ry, c.rz, c.lx, c.ly, c.lz, color, emissiveNow);
|
|
392
|
+
strip.quad(c.lbx, c.lby, c.lbz, c.rbx, c.rby, c.rbz, p.rbx, p.rby, p.rbz, p.lbx, p.lby, p.lbz, color, emissiveNow);
|
|
393
|
+
strip.quad(p.rx, p.ry, p.rz, p.rbx, p.rby, p.rbz, c.rbx, c.rby, c.rbz, c.rx, c.ry, c.rz, color, emissiveNow);
|
|
394
|
+
strip.quad(p.lbx, p.lby, p.lbz, p.lx, p.ly, p.lz, c.lx, c.ly, c.lz, c.lbx, c.lby, c.lbz, color, emissiveNow);
|
|
395
|
+
// Drawn and collided in the same breath, from the same corners.
|
|
396
|
+
wedgeQuad(p, c);
|
|
397
|
+
};
|
|
398
|
+
const copy = (from, to) => {
|
|
399
|
+
to.lx = from.lx;
|
|
400
|
+
to.ly = from.ly;
|
|
401
|
+
to.lz = from.lz;
|
|
402
|
+
to.rx = from.rx;
|
|
403
|
+
to.ry = from.ry;
|
|
404
|
+
to.rz = from.rz;
|
|
405
|
+
to.lbx = from.lbx;
|
|
406
|
+
to.lby = from.lby;
|
|
407
|
+
to.lbz = from.lbz;
|
|
408
|
+
to.rbx = from.rbx;
|
|
409
|
+
to.rby = from.rby;
|
|
410
|
+
to.rbz = from.rbz;
|
|
411
|
+
// The give travels with the section it was measured on. It did not have to
|
|
412
|
+
// before, when only `current` was ever collided; now a wedge takes two
|
|
413
|
+
// cross-sections and half of every quad would have stood flush with the
|
|
414
|
+
// drawn deck — a micro-wall at each facet ridge, the whole way along.
|
|
415
|
+
to.gx = from.gx;
|
|
416
|
+
to.gy = from.gy;
|
|
417
|
+
to.gz = from.gz;
|
|
418
|
+
};
|
|
419
|
+
/** Seal the open end of a piece so the slab is a closed solid. */
|
|
420
|
+
const cap = (s, facingForward) => {
|
|
421
|
+
if (facingForward) {
|
|
422
|
+
strip.quad(s.rx, s.ry, s.rz, s.rbx, s.rby, s.rbz, s.lbx, s.lby, s.lbz, s.lx, s.ly, s.lz, color, emissiveNow);
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
strip.quad(s.lx, s.ly, s.lz, s.lbx, s.lby, s.lbz, s.rbx, s.rby, s.rbz, s.rx, s.ry, s.rz, color, emissiveNow);
|
|
426
|
+
}
|
|
427
|
+
};
|
|
428
|
+
// One extra step so the final cross-section lands exactly on the end.
|
|
429
|
+
const startAt = Math.max(0, options.fromM ?? 0);
|
|
430
|
+
const endAt = Math.min(spline.lengthM, options.toM ?? spline.lengthM);
|
|
431
|
+
const span = endAt - startAt;
|
|
432
|
+
if (span <= 0)
|
|
433
|
+
return { mesh: strip.build(), colliders };
|
|
434
|
+
const steps = Math.max(1, Math.ceil(span / step));
|
|
435
|
+
const exactStep = span / steps;
|
|
436
|
+
for (let i = 0; i <= steps; i++) {
|
|
437
|
+
const d = startAt + i * exactStep;
|
|
438
|
+
/*
|
|
439
|
+
* A cross-section is present when the surface exists on at least one side
|
|
440
|
+
* of it. That is what makes a hole's edge sharp: the section bordering a
|
|
441
|
+
* hole is still built, so the piece before it gets its end cap in the right
|
|
442
|
+
* place rather than stopping a step short.
|
|
443
|
+
*/
|
|
444
|
+
const before = i > 0 && !inHole(options.holes, d - exactStep * 0.5);
|
|
445
|
+
const after = i < steps && !inHole(options.holes, d + exactStep * 0.5);
|
|
446
|
+
if (!before && !after) {
|
|
447
|
+
if (havePrevious) {
|
|
448
|
+
cap(previous, true);
|
|
449
|
+
havePrevious = false;
|
|
450
|
+
}
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
fill(d, current);
|
|
454
|
+
if (options.shade !== undefined)
|
|
455
|
+
emissiveNow = options.shade(d, color);
|
|
456
|
+
if (!before) {
|
|
457
|
+
// Opening a new piece.
|
|
458
|
+
cap(current, false);
|
|
459
|
+
copy(current, previous);
|
|
460
|
+
havePrevious = true;
|
|
461
|
+
continue;
|
|
462
|
+
}
|
|
463
|
+
if (havePrevious) {
|
|
464
|
+
/*
|
|
465
|
+
* As many facets as this stretch of curve needs, never fewer.
|
|
466
|
+
*
|
|
467
|
+
* `step` is one number for a whole route, and a route does not turn at one
|
|
468
|
+
* rate. Where a route reverses its camber — one measured case rolls 17° one
|
|
469
|
+
* way to 16° the other inside nine metres, across a deck 17 m wide — a 2 m facet
|
|
470
|
+
* cuts that corner by **0.85 m**. Everything downstream then disagrees
|
|
471
|
+
* about where the deck is: `RibbonSurface` answers from the smooth curve
|
|
472
|
+
* and puts a character most of a metre inside the drawn slab, where they are
|
|
473
|
+
* buried in their own floor. Buried, they cannot lift, so auto-step cannot
|
|
474
|
+
* fire, so they cannot walk — on that exact camber the player stays stuck
|
|
475
|
+
* the moment they try to run, with impacts on every ridge from the same gap.
|
|
476
|
+
*
|
|
477
|
+
* So the builder measures its own error and subdivides until it is small,
|
|
478
|
+
* rather than trusting a constant. Only the fast-turning spans pay, and
|
|
479
|
+
* they are the ones that were broken.
|
|
480
|
+
*/
|
|
481
|
+
const dPrev = d - exactStep;
|
|
482
|
+
fill((dPrev + d) * 0.5, probe);
|
|
483
|
+
/*
|
|
484
|
+
* Measured at the *diagonal*, which is where a quad is furthest from the
|
|
485
|
+
* curve it stands for.
|
|
486
|
+
*
|
|
487
|
+
* Two cross-sections that differ in bank are skew lines, and the surface
|
|
488
|
+
* ruled between them is not flat — but two triangles are. Both of them
|
|
489
|
+
* share the diagonal, so along that diagonal the drawn deck is the plain
|
|
490
|
+
* average of two opposite corners, while the real deck at the same place
|
|
491
|
+
* is the mid-section's own centre. The gap between those is the whole
|
|
492
|
+
* error, and it is *linear* in the step: half a metre of bank roll across
|
|
493
|
+
* a seventeen-metre deck puts fourteen centimetres of it under a character's
|
|
494
|
+
* feet, which is the give's entire budget spent before the give does any
|
|
495
|
+
* of its own work.
|
|
496
|
+
*
|
|
497
|
+
* Measuring the edges instead — the obvious thing, and what this did
|
|
498
|
+
* first — sees almost none of it: a chord along an edge is out by
|
|
499
|
+
* millimetres where the diagonal is out by a hand's width.
|
|
500
|
+
*/
|
|
501
|
+
const diagSlip = Math.hypot((probe.lx + probe.rx) * 0.5 - (previous.lx + current.rx) * 0.5, (probe.ly + probe.ry) * 0.5 - (previous.ly + current.ry) * 0.5, (probe.lz + probe.rz) * 0.5 - (previous.lz + current.rz) * 0.5);
|
|
502
|
+
const leftSlip = Math.hypot(probe.lx - (previous.lx + current.lx) * 0.5, probe.ly - (previous.ly + current.ly) * 0.5, probe.lz - (previous.lz + current.lz) * 0.5);
|
|
503
|
+
const rightSlip = Math.hypot(probe.rx - (previous.rx + current.rx) * 0.5, probe.ry - (previous.ry + current.ry) * 0.5, probe.rz - (previous.rz + current.rz) * 0.5);
|
|
504
|
+
const slip = Math.max(diagSlip, leftSlip, rightSlip);
|
|
505
|
+
const cuts = slip > MAX_FACET_SLIP_M ? Math.min(MAX_FACET_CUTS, Math.ceil(slip / MAX_FACET_SLIP_M)) : 1;
|
|
506
|
+
/*
|
|
507
|
+
* Whatever a whole number of cuts could not take out, the ease takes.
|
|
508
|
+
* Never past the slab's own depth, so a wedge cannot turn inside out.
|
|
509
|
+
*/
|
|
510
|
+
extraEase = Math.min(Math.max(0, slip / cuts - MAX_FACET_SLIP_M), thickness * 0.5);
|
|
511
|
+
/*
|
|
512
|
+
* The edge-specific half of the same leftover, paid across the section
|
|
513
|
+
* instead of along it — see `lateralEase` above. `leftSlip`/`rightSlip`
|
|
514
|
+
* are exactly the per-edge error `cuts` was chosen from; only their
|
|
515
|
+
* share of what the cut ceiling could not remove needs paying here.
|
|
516
|
+
*/
|
|
517
|
+
lateralEase = Math.min(Math.max(0, Math.max(leftSlip, rightSlip) / cuts - MAX_FACET_SLIP_M), 1.5);
|
|
518
|
+
for (let s = 1; s <= cuts; s++) {
|
|
519
|
+
if (s < cuts) {
|
|
520
|
+
const dSub = dPrev + exactStep * (s / cuts);
|
|
521
|
+
fill(dSub, sub);
|
|
522
|
+
if (options.shade !== undefined)
|
|
523
|
+
emissiveNow = options.shade(dSub, color);
|
|
524
|
+
slab(previous, sub);
|
|
525
|
+
copy(sub, previous);
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
if (options.shade !== undefined)
|
|
529
|
+
emissiveNow = options.shade(d, color);
|
|
530
|
+
slab(previous, current);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
extraEase = 0;
|
|
534
|
+
lateralEase = 0;
|
|
535
|
+
}
|
|
536
|
+
copy(current, previous);
|
|
537
|
+
havePrevious = true;
|
|
538
|
+
if (!after) {
|
|
539
|
+
cap(current, true);
|
|
540
|
+
havePrevious = false;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
if (havePrevious)
|
|
544
|
+
cap(previous, true);
|
|
545
|
+
return { mesh: strip.build(), colliders };
|
|
546
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Closing the inside of a model that is only a surface.
|
|
3
|
+
*
|
|
4
|
+
* **The problem is common and it is not a defect in any one asset.** A great many bought models
|
|
5
|
+
* are exterior shells: a car with no cabin, a building with no rooms, a figure that is skin and
|
|
6
|
+
* nothing under it. Drawn on their own they are correct, and the moment a viewer can see through
|
|
7
|
+
* an opening in them — a grille, a vent, a window aperture, a doorway — they look straight
|
|
8
|
+
* through the object and out the far side. It reads as a rendering fault and is not one.
|
|
9
|
+
*
|
|
10
|
+
* Two pieces are needed and neither replaces the other, which is the whole design here:
|
|
11
|
+
*
|
|
12
|
+
* - **A copy of the model, drawn inside itself.** It follows every curve exactly, because it *is*
|
|
13
|
+
* every curve, so it backs each panel with no tuning and no knowledge of what the model is. It
|
|
14
|
+
* cannot help with an opening, because a copy of a shell has the same hole in the same place.
|
|
15
|
+
* - **A generated solid, behind it.** It has no holes, so it is what a viewer sees through one.
|
|
16
|
+
* It cannot follow a surface, so it is held well inside and never asked to.
|
|
17
|
+
*
|
|
18
|
+
* **Everything here takes sizes and numbers.** What a subject looks like is the caller's to state,
|
|
19
|
+
* through `profile`: this module knows about bounds and fractions and nothing about cars.
|
|
20
|
+
*/
|
|
21
|
+
import type { MeshData } from '../render/mesh.ts';
|
|
22
|
+
import type { Vec3 } from '../math/color.ts';
|
|
23
|
+
/**
|
|
24
|
+
* One station along the model, from one end to the other.
|
|
25
|
+
*
|
|
26
|
+
* Every value is a fraction, so a profile is a shape rather than a size and the same one fits a
|
|
27
|
+
* model of any dimensions. `width` and `roofWidth` are of the half width; `waist` and `top` are
|
|
28
|
+
* of the height.
|
|
29
|
+
*/
|
|
30
|
+
export interface ShellStation {
|
|
31
|
+
/** Where along the long axis this station sits, 0 at one end and 1 at the other. */
|
|
32
|
+
readonly at: number;
|
|
33
|
+
/** Half width of the lower mass here. */
|
|
34
|
+
readonly width: number;
|
|
35
|
+
/** Where the lower mass stops and the upper one begins. Equal to `top` for a single mass. */
|
|
36
|
+
readonly waist: number;
|
|
37
|
+
/** Half width of the upper mass. Zero where there is none. */
|
|
38
|
+
readonly roofWidth: number;
|
|
39
|
+
/** The top of the upper mass, or of the lower one where there is no upper. */
|
|
40
|
+
readonly top: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* A plain inset block, which is the safe answer for a shape nothing is known about.
|
|
44
|
+
*
|
|
45
|
+
* Deliberately not clever. A profile that guessed at a silhouette would be wrong for most models
|
|
46
|
+
* and wrong in the one direction that shows: standing out through the surface it is meant to sit
|
|
47
|
+
* behind. A caller that knows what its subject looks like passes a better one.
|
|
48
|
+
*/
|
|
49
|
+
export declare const DEFAULT_SHELL_PROFILE: readonly ShellStation[];
|
|
50
|
+
export interface ShellFillOptions {
|
|
51
|
+
/** Near black by default, because a fill is read as the absence of a hole rather than as a thing. */
|
|
52
|
+
readonly color?: Vec3;
|
|
53
|
+
/**
|
|
54
|
+
* How far inside the model's own width and height the solid sits, 0 to 1.
|
|
55
|
+
*
|
|
56
|
+
* **Well inside, and the default says so.** A stack of boxes is a bounding volume and most
|
|
57
|
+
* models are curved, so a solid sized to touch the surface stands through it somewhere. It does
|
|
58
|
+
* not need to reach: the copy of the model backs the surface, and this only has to sit behind
|
|
59
|
+
* the openings.
|
|
60
|
+
*/
|
|
61
|
+
readonly inset?: number;
|
|
62
|
+
/** The same, along the long axis, where a shape usually tapers hardest. */
|
|
63
|
+
readonly lengthInset?: number;
|
|
64
|
+
/** How many boxes the solid is built from. More follows a profile more closely. */
|
|
65
|
+
readonly slices?: number;
|
|
66
|
+
/** What the subject looks like from the side. See `ShellStation`. */
|
|
67
|
+
readonly profile?: readonly ShellStation[];
|
|
68
|
+
/** Lifts the solid off the model's floor, as a fraction of height. */
|
|
69
|
+
readonly floor?: number;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A solid to stand inside a hollow model, sized from the space it has to fill.
|
|
73
|
+
*
|
|
74
|
+
* `size` is the model's own extent in metres and `baseY` where its underside sits, which is all
|
|
75
|
+
* this needs: the solid is centred on the origin in x and z, as a fitted model is.
|
|
76
|
+
*/
|
|
77
|
+
export declare function buildShellFill(size: {
|
|
78
|
+
readonly x: number;
|
|
79
|
+
readonly y: number;
|
|
80
|
+
readonly z: number;
|
|
81
|
+
}, baseY: number, options?: ShellFillOptions): MeshData;
|
|
82
|
+
/**
|
|
83
|
+
* The same surface, in one flat colour and facing both ways.
|
|
84
|
+
*
|
|
85
|
+
* This is the half that follows the model exactly. Drawn slightly smaller and inside the original
|
|
86
|
+
* it backs every panel with no tuning at all, and it is given a single colour because otherwise
|
|
87
|
+
* an opening shows the model's own brightwork through it, which is what it exists to hide.
|
|
88
|
+
*
|
|
89
|
+
* Both windings are emitted for the reason `addSolidBox` emits both: a shell is opaque only from
|
|
90
|
+
* the side its triangles face, and this one is looked at from inside as often as out. Normals are
|
|
91
|
+
* negated with the reversed copy, or the inward face is shaded as though lit from within.
|
|
92
|
+
*/
|
|
93
|
+
export declare function shellSkin(mesh: MeshData, color?: Vec3): MeshData;
|
|
94
|
+
/**
|
|
95
|
+
* A uniform scale about a height, for drawing a skin just inside the model it came from.
|
|
96
|
+
*
|
|
97
|
+
* The translation column is what keeps the shrink centred on the model rather than on the world
|
|
98
|
+
* origin: scaling about zero would drop it through whatever it stands on by a fraction of its own
|
|
99
|
+
* height, which is small enough to look like a shadow fault rather than like this.
|
|
100
|
+
*/
|
|
101
|
+
export declare function shellFillMatrix(scale: number, centreY: number, out: Float32Array): Float32Array;
|