@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,399 @@
|
|
|
1
|
+
/** How light falls off with distance, and the specular lobes a highlight is made of. */
|
|
2
|
+
import { POINT_SHADOW_FADE_START } from '../../renderQuality.ts';
|
|
3
|
+
|
|
4
|
+
export const LOBES_GLSL = `float shadowReach(float distance, float maxDistance) {
|
|
5
|
+
return 1.0 - smoothstep(
|
|
6
|
+
maxDistance * ${POINT_SHADOW_FADE_START.toFixed(2)},
|
|
7
|
+
maxDistance,
|
|
8
|
+
distance
|
|
9
|
+
);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* How quickly a point shadow gives way to its own penumbra.
|
|
14
|
+
*
|
|
15
|
+
* Tuned by eye against a brazier: at 1.6 a column's shadow is crisp for about
|
|
16
|
+
* two metres, readable for four, and gone by eight — which is what a metre-wide
|
|
17
|
+
* flame actually does, and what stops a long throw reading as a hard-edged cone.
|
|
18
|
+
*/
|
|
19
|
+
const float PENUMBRA_FADE = 1.6;
|
|
20
|
+
/**
|
|
21
|
+
* Widest the filter may open, in radians of direction.
|
|
22
|
+
*
|
|
23
|
+
* **Was 0.07, and that floor was a cube map's fault.** Anything wide enough to soften a long
|
|
24
|
+
* shadow was wide enough to straddle a face boundary, and a tap across a seam read a face
|
|
25
|
+
* rendered under a different projection — a straight line running outward from beneath the
|
|
26
|
+
* light, in seven separate reports and four failed attempts at widening. There are no faces
|
|
27
|
+
* now: an octahedral map is one projection over the whole sphere, so a tap that would have
|
|
28
|
+
* crossed a join lands on the adjacent texel.
|
|
29
|
+
*
|
|
30
|
+
* **0.25 rather than further, and the ceiling is arithmetic rather than taste.** Both this and
|
|
31
|
+
* the fade below are driven by the same quantity, sourceRadius * spread:
|
|
32
|
+
*
|
|
33
|
+
* 0.07 penumbra 0.11, strength 0.99 the shadow is essentially whole
|
|
34
|
+
* 0.25 penumbra 0.40, strength 0.84 soft, and still plainly a shadow
|
|
35
|
+
* 0.40 penumbra 0.64, strength 0.59 more than half faded out
|
|
36
|
+
* 0.625 penumbra 1.00, strength 0.00 gone: nothing left to blur
|
|
37
|
+
*
|
|
38
|
+
* So the cap can never matter to a shadow at more than 0.625, and past about 0.25 it is
|
|
39
|
+
* widening the filter on something already fading away — paying scattered taps for softness
|
|
40
|
+
* nobody can see. A sweep at 0.07, 0.15, 0.25, 0.40 and 0.625 was captured on both point-lit
|
|
41
|
+
* scenes: no value drew a straight line, a band or a speckle, the visible difference was
|
|
42
|
+
* concentrated in gilded-chamber and was slight in night-court, and **the GPU timings were too
|
|
43
|
+
* noisy to choose on** — two runs of one build differed by more than two runs of two builds, so
|
|
44
|
+
* the number comes from the arithmetic above rather than from a stopwatch.
|
|
45
|
+
*/
|
|
46
|
+
const float MAX_FILTER_RADIUS = 0.25;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* How much of a self-lit surface's glow a lamp's shadow may take.
|
|
50
|
+
*
|
|
51
|
+
* Zero is the old behaviour — emission entirely unshadowed, and bands that float free of
|
|
52
|
+
* the floor when a character's shadow crosses them. One would darken a lamp head because
|
|
53
|
+
* something passed in front of it, which is worse. Just over half reads as an inlay lit
|
|
54
|
+
* from within a deck that is itself in shade.
|
|
55
|
+
*/
|
|
56
|
+
const float EMISSIVE_SHADOW_SHARE = 0.55;
|
|
57
|
+
|
|
58
|
+
/*
|
|
59
|
+
* Trowbridge-Reitz, because the width of a highlight is the whole effect.
|
|
60
|
+
*
|
|
61
|
+
* The pow() lobe this replaces is tight and short-tailed: it makes a small round dot and
|
|
62
|
+
* nothing else, however hard it is driven. A real rough surface seen at a grazing angle
|
|
63
|
+
* smears a light along the view direction, and that smear is the long tail GGX has and
|
|
64
|
+
* Blinn-Phong does not. It is the difference between a floor that looks pale and a floor
|
|
65
|
+
* that looks polished, and no amount of intensity crosses it.
|
|
66
|
+
*
|
|
67
|
+
* Normalised to a peak of one, which is the part that took a regression to get right.
|
|
68
|
+
* The distribution's own normalisation puts its peak at 1/(pi*a^2) so that it integrates
|
|
69
|
+
* to unity over the hemisphere, which is what a BRDF wants and not what this term is.
|
|
70
|
+
* This is a look control: the specular attribute says how strong a highlight is and
|
|
71
|
+
* roughness says how wide, and the two must not be entangled. Un-normalised they were —
|
|
72
|
+
* at the default roughness the peak came out 52 times the pow() lobe it replaced, so
|
|
73
|
+
* every surface authored before roughness existed went from a soft highlight to a blown
|
|
74
|
+
* white speck, with nothing in the API to say it would.
|
|
75
|
+
*
|
|
76
|
+
* So divide by the peak: a2*a2/(d*d) is D(ndh)/D(1) with the constants cancelled, which
|
|
77
|
+
* is a multiply cheaper than the honest spelling as well.
|
|
78
|
+
*/
|
|
79
|
+
float specularLobe(float ndh, float roughness) {
|
|
80
|
+
float a = max(roughness * roughness, 1e-3);
|
|
81
|
+
float a2 = a * a;
|
|
82
|
+
float d = ndh * ndh * (a2 - 1.0) + 1.0;
|
|
83
|
+
return (a2 * a2) / max(d * d, 1e-8);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The same lobe from a source that has a size, rather than from a point.
|
|
88
|
+
*
|
|
89
|
+
* **A light with no size has a reflection with no size**, and a reflection smaller than a
|
|
90
|
+
* fragment cannot be sampled: it lands in some pixels and not the ones beside them. That is the
|
|
91
|
+
* bright speckle a dark glossy surface shows under a close lamp, and no amount of multisampling
|
|
92
|
+
* touches it, because multisampling resolves coverage and this is a value varying inside one
|
|
93
|
+
* triangle. The information to fix it was already in the scene and only the shadow pass was
|
|
94
|
+
* reading it: sourceRadius gave the penumbra its width while the highlight stayed a point.
|
|
95
|
+
*
|
|
96
|
+
* A sphere of radius r at distance d subtends r/d, so that is added to the lobe's own width.
|
|
97
|
+
* The standard representative-point approximation, and the important half is the **energy
|
|
98
|
+
* term**: widening a lobe without it makes the highlight brighter rather than broader, because
|
|
99
|
+
* this distribution peaks at 1 whatever its width. Measured, that mistake took speckle from 893
|
|
100
|
+
* to 3313 on the reproduction. Scaling by (a / a')^2 puts the same energy under the wider curve.
|
|
101
|
+
*
|
|
102
|
+
* A headlight is the case this exists for. It sits closer to a wing than anything else in a
|
|
103
|
+
* scene ever does, so r/d is large and its highlight is genuinely broad.
|
|
104
|
+
*/
|
|
105
|
+
float sphereLobe(float ndh, float roughness, float sourceRadius, float dist) {
|
|
106
|
+
float a = max(roughness * roughness, 1e-3);
|
|
107
|
+
float widened = clamp(a + sourceRadius / max(2.0 * dist, 1e-3), a, 1.0);
|
|
108
|
+
float energy = (a / widened) * (a / widened);
|
|
109
|
+
float w2 = widened * widened;
|
|
110
|
+
float d = ndh * ndh * (w2 - 1.0) + 1.0;
|
|
111
|
+
return energy * (w2 * w2) / max(d * d, 1e-8);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* The other half of the split-sum approximation: what fraction of an environment a surface returns.
|
|
116
|
+
*
|
|
117
|
+
* The convolution decides *what* a surface reflects at a given roughness; this decides *how much*.
|
|
118
|
+
* Before it the amount was fresnel times one-minus-roughness, which is a curve somebody chose
|
|
119
|
+
* standing in for an integral.
|
|
120
|
+
*
|
|
121
|
+
* Karis's analytic fit to the environment BRDF, so there is **no lookup texture and no texture
|
|
122
|
+
* unit**: a few multiply-adds against roughness and the view angle. x scales the surface's own
|
|
123
|
+
* reflectance at normal incidence and y is the additive grazing term, so a smooth dielectric at
|
|
124
|
+
* f0 0.04 returns about 0.046 head-on and approaches 1 at the edge, which is what a dielectric
|
|
125
|
+
* does. At roughness 1 it returns about 0.016 rather than the zero one-minus-roughness gave, which
|
|
126
|
+
* is the substantive difference: a fully rough dielectric does reflect its surroundings.
|
|
127
|
+
*
|
|
128
|
+
* **It replaces the Fresnel factor as well as the thinning**, because the fit already contains the
|
|
129
|
+
* angular dependence; multiplying by a separate Fresnel term would apply it twice.
|
|
130
|
+
*
|
|
131
|
+
* **How much this is worth was measured, and it is worth less than it looks on a dark room.**
|
|
132
|
+
* On demo/dev/ibl.html?ladder=1 the whole ladder moved by at most 0.2 of 255 when the old term was
|
|
133
|
+
* replaced. That is not the term failing: at high roughness the surface reads the coarsest levels
|
|
134
|
+
* of the chain, and in a room of five dark walls and one bright one those levels are dark, so a
|
|
135
|
+
* weight three times larger against a near-zero radiance is still near zero. It is worth much more
|
|
136
|
+
* against a bright environment, which is what a loaded sky is and what no captured room here is.
|
|
137
|
+
*
|
|
138
|
+
* **A warning about reading that page, paid for once.** The ladder falls about five-fold from
|
|
139
|
+
* mirror to rough, and that reads as energy being lost. It is not: a mirror concentrates the one
|
|
140
|
+
* bright wall into a sharp image and a rough surface averages it against five dark ones, so the
|
|
141
|
+
* falloff is the room's own content. The normalised falloff also happens to track one-minus-
|
|
142
|
+
* roughness closely, which made the old term look like the cause — and removing that term entirely
|
|
143
|
+
* changed nothing, which is what settled it. Perturb before believing a match.
|
|
144
|
+
*
|
|
145
|
+
* **What it costs** is a fit rather than the integral: the published error is around one per cent
|
|
146
|
+
* of the tabulated term, far below what an eight-bit frame can show. **What would make it wrong**
|
|
147
|
+
* is a material model this shader does not have — a clearcoat or a sheen lobe carries its own BRDF
|
|
148
|
+
* and its own integral, and this fit is Trowbridge-Reitz with Smith masking and nothing else.
|
|
149
|
+
*/
|
|
150
|
+
vec2 envBrdfApprox(float ndv, float roughness) {
|
|
151
|
+
const vec4 c0 = vec4(-1.0, -0.0275, -0.572, 0.022);
|
|
152
|
+
const vec4 c1 = vec4(1.0, 0.0425, 1.04, -0.04);
|
|
153
|
+
vec4 r = roughness * c0 + c1;
|
|
154
|
+
float a004 = min(r.x * r.x, exp2(-9.28 * ndv)) * r.x + r.y;
|
|
155
|
+
return vec2(-1.04, 1.04) * a004 + r.zw;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* How much of a prefiltered environment a surface returns, with the light that bounces more than
|
|
160
|
+
* once inside the microsurface put back.
|
|
161
|
+
*
|
|
162
|
+
* **\`envBrdfApprox\` alone is not energy conserving, and on a metal that is not a subtlety.** The
|
|
163
|
+
* split sum's second half integrates a *single* scattering event, so it silently discards every ray
|
|
164
|
+
* that strikes one microfacet, bounces, and leaves. Roughness scatters light; it does not absorb
|
|
165
|
+
* it — so a surface with \`f0\` 1, a perfect reflector, has to return **everything** at every
|
|
166
|
+
* roughness. \`dfg.x + dfg.y\` returns \`1 - 0.55 * roughness\`: measured 1.000 at roughness 0,
|
|
167
|
+
* 0.725 at 0.5 and 0.450 at 1.0, which asserts that a perfect mirror absorbs 55% of the light if
|
|
168
|
+
* you roughen it.
|
|
169
|
+
*
|
|
170
|
+
* **That shipped, and it was reported from a consumer as metals reading opaque and flat.** Its
|
|
171
|
+
* acceptance measurement — the roughness ladder on \`demo/dev/ibl.html\` — could not have caught
|
|
172
|
+
* it: \`metal\` reaches the shader only through an ORM map, that page binds none, so every rung on
|
|
173
|
+
* it is a dielectric at \`f0\` 0.04 where the same defect is worth about a thousandth of what it is
|
|
174
|
+
* worth on a metal. The instrument measured the one material the term is nearly right for.
|
|
175
|
+
*
|
|
176
|
+
* The compensation is Fdez-Agüera's: the energy the single-scatter integral is missing, returned at
|
|
177
|
+
* the surface's average Fresnel over the hemisphere, summed as a geometric series over repeated
|
|
178
|
+
* bounces. **At \`f0\` 1 it comes back to exactly 1.0 at every roughness** — \`average\` is 1,
|
|
179
|
+
* \`multi\` is \`energy / energy\`, and \`single + missing\` telescopes — so a fully metallic surface
|
|
180
|
+
* returns precisely what it did before the split sum was introduced, and a dielectric gains the
|
|
181
|
+
* small amount it was always owed.
|
|
182
|
+
*
|
|
183
|
+
* **No divide guard, because the denominator cannot reach zero here.** \`missing\` is at most 0.55
|
|
184
|
+
* and \`average\` at most 1, so \`1 - missing * average\` bottoms out at 0.45 — at \`f0\` 1 and
|
|
185
|
+
* roughness 1, the worst case in both variables at once.
|
|
186
|
+
*
|
|
187
|
+
* **What it gives up:** the multiply-scattered share is returned against the *prefiltered radiance*
|
|
188
|
+
* rather than against the irradiance the paper uses, because this expression has one environment
|
|
189
|
+
* value and not two. The two converge exactly where the term is large — the coarsest level of a
|
|
190
|
+
* prefiltered chain is nearly the average of the environment — and where they differ, at low
|
|
191
|
+
* roughness, \`missing\` is near zero and the choice cannot show. **What would make it wrong** is a
|
|
192
|
+
* surface model with a second lobe: a clearcoat or a sheen carries its own integral and its own
|
|
193
|
+
* missing energy, and neither is this.
|
|
194
|
+
*/
|
|
195
|
+
float envSpecularEnergy(float f0, vec2 dfg) {
|
|
196
|
+
float single = f0 * dfg.x + dfg.y;
|
|
197
|
+
float energy = dfg.x + dfg.y;
|
|
198
|
+
float missing = 1.0 - energy;
|
|
199
|
+
float average = f0 + (1.0 - f0) / 21.0;
|
|
200
|
+
float multi = single * average / (1.0 - missing * average);
|
|
201
|
+
return single + multi * missing;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* The irradiance a Lambertian surface receives from a quadrilateral emitter, exactly, **signed**.
|
|
206
|
+
*
|
|
207
|
+
* **This is not an approximation of the diffuse term, it is the diffuse term.** The cosine-weighted
|
|
208
|
+
* integral over a polygon has a closed form — the sum over edges of the angle each subtends times
|
|
209
|
+
* how much the plane it spans faces the surface — and it is the same expression a linearly
|
|
210
|
+
* transformed cosine reduces to when its matrix is the identity, which is exactly what a Lambertian
|
|
211
|
+
* lobe is. An implementation that fits an LTC matrix computes the same number for this half; the
|
|
212
|
+
* fit is only doing work for the specular half.
|
|
213
|
+
*
|
|
214
|
+
* **The sign is which side of the emitter the surface is on, and that is the whole of one-sidedness.**
|
|
215
|
+
* With the corners wound so a surface on the emitting side sees them counter-clockwise, this comes
|
|
216
|
+
* back positive there and negative behind — measured: +0.09443 under a 3.2 by 1.0 panel three
|
|
217
|
+
* metres up, and −0.09443 the same distance above it. So a one-sided light is \`max(0, form)\` and a
|
|
218
|
+
* two-sided one is \`abs(form)\`, and neither needs a separate facing test.
|
|
219
|
+
*
|
|
220
|
+
* **That is better than the test it replaces**, which compared the emitter's normal against the
|
|
221
|
+
* direction to the shaded point — a decision about the rectangle's *centre* applied to a whole
|
|
222
|
+
* fragment. The sign is exact per fragment, so a surface level with the emitter's plane fades
|
|
223
|
+
* through zero rather than switching.
|
|
224
|
+
*
|
|
225
|
+
* **The winding is the thing to get wrong**, and it was wrong first: corners in the natural order
|
|
226
|
+
* \`-r-u, +r-u, +r+u, -r+u\` wind the other way seen from the emitting side, so every surface got a
|
|
227
|
+
* negative form factor, every one-sided light clamped it to zero, and the frame was black with
|
|
228
|
+
* nothing to point at.
|
|
229
|
+
*
|
|
230
|
+
* **Clipped to the horizon.** A polygon partly below the surface must contribute only the part
|
|
231
|
+
* above it, and corners below the tangent plane are projected onto it rather than dropped —
|
|
232
|
+
* dropping one leaves the polygon open and the sum meaningless.
|
|
233
|
+
*
|
|
234
|
+
* **What it costs** is four normalisations, four cross products and four inverse cosines, about the
|
|
235
|
+
* same as one shadow tap. **What would make it wrong** is a non-planar quadrilateral: the form
|
|
236
|
+
* factor is defined for a planar polygon, and four corners off-plane describe no surface at all.
|
|
237
|
+
* Nothing checks that, because the check costs as much as the term — \`selectAreaLights\`
|
|
238
|
+
* orthogonalises the axes on the way in so a caller cannot easily produce one.
|
|
239
|
+
*/
|
|
240
|
+
float quadFormFactor(vec3 n, vec3 p, vec3 c0, vec3 c1, vec3 c2, vec3 c3) {
|
|
241
|
+
vec3 v0 = c0 - p;
|
|
242
|
+
vec3 v1 = c1 - p;
|
|
243
|
+
vec3 v2 = c2 - p;
|
|
244
|
+
vec3 v3 = c3 - p;
|
|
245
|
+
|
|
246
|
+
float d0 = dot(v0, n);
|
|
247
|
+
float d1 = dot(v1, n);
|
|
248
|
+
float d2 = dot(v2, n);
|
|
249
|
+
float d3 = dot(v3, n);
|
|
250
|
+
if (d0 < 0.0 && d1 < 0.0 && d2 < 0.0 && d3 < 0.0) return 0.0;
|
|
251
|
+
v0 -= n * min(d0, 0.0);
|
|
252
|
+
v1 -= n * min(d1, 0.0);
|
|
253
|
+
v2 -= n * min(d2, 0.0);
|
|
254
|
+
v3 -= n * min(d3, 0.0);
|
|
255
|
+
|
|
256
|
+
vec3 u0 = normalize(v0);
|
|
257
|
+
vec3 u1 = normalize(v1);
|
|
258
|
+
vec3 u2 = normalize(v2);
|
|
259
|
+
vec3 u3 = normalize(v3);
|
|
260
|
+
|
|
261
|
+
float sum = 0.0;
|
|
262
|
+
sum += acos(clamp(dot(u0, u1), -1.0, 1.0)) * dot(normalize(cross(u0, u1)), n);
|
|
263
|
+
sum += acos(clamp(dot(u1, u2), -1.0, 1.0)) * dot(normalize(cross(u1, u2)), n);
|
|
264
|
+
sum += acos(clamp(dot(u2, u3), -1.0, 1.0)) * dot(normalize(cross(u2, u3)), n);
|
|
265
|
+
sum += acos(clamp(dot(u3, u0), -1.0, 1.0)) * dot(normalize(cross(u3, u0)), n);
|
|
266
|
+
|
|
267
|
+
/* Two pi rather than pi: the sum is twice the projected solid angle. Signed; see above. */
|
|
268
|
+
return sum / (2.0 * 3.14159265359);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* The fraction of a surface's specular lobe that a rectangle covers.
|
|
273
|
+
*
|
|
274
|
+
* **This is the specular half of an area light, and it replaces a representative point that was
|
|
275
|
+
* measured wrong by 90% to 100% on a smooth surface.** The old term handed the closest point on the
|
|
276
|
+
* rectangle to \`sphereLobe\` and multiplied by the rectangle's *diffuse* form factor: on polished
|
|
277
|
+
* metal facing a softbox it returned 0.000233 where the integral is 0.9207, and head-on on a rough
|
|
278
|
+
* surface it was 3.7 times too bright. \`scripts/areaSpecular.mjs\` is that measurement and the one
|
|
279
|
+
* below.
|
|
280
|
+
*
|
|
281
|
+
* **A linearly transformed cosine with an analytic matrix rather than a fitted one.** The idea an
|
|
282
|
+
* LTC rests on is that the clamped-cosine integral over a polygon has a closed form, so if you can
|
|
283
|
+
* map the specular lobe onto a clamped cosine you can integrate the lobe over the polygon by
|
|
284
|
+
* transforming the polygon instead. A fitted LTC stores that map in tables; this builds it: an
|
|
285
|
+
* orthonormal frame on the lobe's direction, scaled across it by the lobe's width. **So there is no
|
|
286
|
+
* table, no polynomial and no texture unit** — \`quadFormFactor\` above does the integral, and it
|
|
287
|
+
* already clips to the horizon, which in this space is the transformed cosine's own horizon.
|
|
288
|
+
*
|
|
289
|
+
* **Both numbers in it were measured rather than chosen**, in \`areaSpecular.mjs\`:
|
|
290
|
+
*
|
|
291
|
+
* - **Where the lobe points.** The mirror ray only while the surface is smooth; at roughness 1 the
|
|
292
|
+
* lobe is broad and leans back toward the normal. Framing on the mirror ray instead is worth 213%
|
|
293
|
+
* against 42% on a rectangle the surface is reflecting. The interpolation below agrees with the
|
|
294
|
+
* lobe's sampled direction to within a per cent.
|
|
295
|
+
* - **How wide it is.** Fitting one isotropic scale per grid entry against the lobe lands at
|
|
296
|
+
* \`2 * alpha\` for alpha up to about a quarter and \`1.15 * alpha\` at alpha 1.
|
|
297
|
+
*
|
|
298
|
+
* **What it costs**: one \`quadFormFactor\`, a normalise and a cross product for the frame, and four
|
|
299
|
+
* transformed corners. The old term cost a ray-plane intersection, a \`sphereLobe\` and its own
|
|
300
|
+
* \`quadFormFactor\` call, so this is close to a wash and is not why it changed.
|
|
301
|
+
*
|
|
302
|
+
* **What is left in it** is the anisotropy an isotropic scale cannot carry: a real lobe stretches
|
|
303
|
+
* along the view at grazing angles and this one stays round, which is what a fitted matrix's shear
|
|
304
|
+
* terms are for. Worst 40.1% against the integral where the light is what the surface reflects, and
|
|
305
|
+
* 79.0% for a rectangle overhead, against 287% for the term it replaces.
|
|
306
|
+
*/
|
|
307
|
+
float quadCoverage(
|
|
308
|
+
vec3 n,
|
|
309
|
+
vec3 p,
|
|
310
|
+
vec3 toEye,
|
|
311
|
+
float roughness,
|
|
312
|
+
vec3 c0,
|
|
313
|
+
vec3 c1,
|
|
314
|
+
vec3 c2,
|
|
315
|
+
vec3 c3
|
|
316
|
+
) {
|
|
317
|
+
float alpha = clamp(roughness * roughness, 1e-3, 1.0);
|
|
318
|
+
|
|
319
|
+
float lean = (1.0 - alpha) * (sqrt(1.0 - alpha) + alpha);
|
|
320
|
+
vec3 axis = normalize(mix(n, reflect(-toEye, n), lean));
|
|
321
|
+
|
|
322
|
+
/*
|
|
323
|
+
* Any orthonormal pair across the axis will do, because the scaling is isotropic in both — so
|
|
324
|
+
* this picks a helper that cannot be parallel to the axis rather than branching on which one is.
|
|
325
|
+
*
|
|
326
|
+
* **The first axis is across the view plane, and that costs nothing today and is load-bearing
|
|
327
|
+
* later.** With an isotropic scale the two tangents are interchangeable — the transformed corners
|
|
328
|
+
* differ by a rotation about \`axis\`, and the form factor about that axis is rotation-invariant,
|
|
329
|
+
* so any pair draws the same picture. A *fitted* matrix has shear terms coupling the first axis
|
|
330
|
+
* to the third, and those are only meaningful in the frame they were fitted in:
|
|
331
|
+
* \`scripts/ltcFit.mjs\` builds \`normalize(n x d)\`, so this does too, and a table dropped in later
|
|
332
|
+
* lands in the frame it was measured in rather than in an arbitrary one.
|
|
333
|
+
*
|
|
334
|
+
* \`cross(n, axis)\` degenerates exactly where the lobe points along the normal, which is normal
|
|
335
|
+
* incidence — and there the lobe is rotationally symmetric, so the frame genuinely is arbitrary
|
|
336
|
+
* and the helper below is the right answer rather than a fallback. Chosen branchlessly, because
|
|
337
|
+
* this sits in the largest shader in the engine and a branch here is a branch per rectangle.
|
|
338
|
+
*/
|
|
339
|
+
vec3 across = cross(n, axis);
|
|
340
|
+
vec3 helper = mix(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), step(0.9, abs(axis.x)));
|
|
341
|
+
vec3 tangent = normalize(mix(cross(helper, axis), across, step(1e-4, length(across))));
|
|
342
|
+
vec3 bitangent = cross(axis, tangent);
|
|
343
|
+
|
|
344
|
+
float inverseScale = 1.0 / max(alpha * (1.15 + 0.85 * (1.0 - alpha)), 1e-4);
|
|
345
|
+
|
|
346
|
+
vec3 d0 = c0 - p;
|
|
347
|
+
vec3 d1 = c1 - p;
|
|
348
|
+
vec3 d2 = c2 - p;
|
|
349
|
+
vec3 d3 = c3 - p;
|
|
350
|
+
vec3 l0 = vec3(dot(d0, tangent) * inverseScale, dot(d0, bitangent) * inverseScale, dot(d0, axis));
|
|
351
|
+
vec3 l1 = vec3(dot(d1, tangent) * inverseScale, dot(d1, bitangent) * inverseScale, dot(d1, axis));
|
|
352
|
+
vec3 l2 = vec3(dot(d2, tangent) * inverseScale, dot(d2, bitangent) * inverseScale, dot(d2, axis));
|
|
353
|
+
vec3 l3 = vec3(dot(d3, tangent) * inverseScale, dot(d3, bitangent) * inverseScale, dot(d3, axis));
|
|
354
|
+
|
|
355
|
+
/*
|
|
356
|
+
* The magnitude, not the signed value: the frame above is built from a helper vector, so whether
|
|
357
|
+
* the transformed corners wind one way or the other about the axis depends on which helper the
|
|
358
|
+
* step chose. Sidedness is already settled before this is called — \`main.ts\` skips a rectangle
|
|
359
|
+
* whose signed diffuse form factor is not positive.
|
|
360
|
+
*/
|
|
361
|
+
return abs(quadFormFactor(vec3(0.0, 0.0, 1.0), vec3(0.0), l0, l1, l2, l3));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Procedural grain: how fine it is, and how far it swings the surface either way.
|
|
367
|
+
*
|
|
368
|
+
* 26 cycles per metre puts several across a hand-sized facet, which is the scale mineral
|
|
369
|
+
* grain actually reads at.
|
|
370
|
+
*
|
|
371
|
+
* **The swing was 0.8 to 1.16 and that is 18% either side, which is far too much.** It was
|
|
372
|
+
* documented as a surface being slightly uneven and it read as *veining*: a pattern with
|
|
373
|
+
* structure, which is what marble has and sandstone does not. Reported as the papyrus
|
|
374
|
+
* columns looking like marble even once grain became a property they legitimately declare.
|
|
375
|
+
* 6% is unevenness. Past about 10% the eye starts reading figure rather than surface.
|
|
376
|
+
*
|
|
377
|
+
* **And one frequency is one material.** A single scale across a column, a floor tile and a
|
|
378
|
+
* cliff makes them all the same stone seen at three sizes, because a repeated frequency is
|
|
379
|
+
* exactly what the eye uses to judge what something is made of. A second, much coarser
|
|
380
|
+
* octave mixed in gives the pattern structure at two sizes at once, which is what real
|
|
381
|
+
* stone has: fine crystal grain inside broader mottling. It costs one more noise evaluation
|
|
382
|
+
* inside a branch almost nothing takes.
|
|
383
|
+
*/
|
|
384
|
+
const float GRAIN_SCALE = 26.0;
|
|
385
|
+
const float GRAIN_COARSE_SCALE = 4.5;
|
|
386
|
+
const float GRAIN_COARSE_MIX = 0.45;
|
|
387
|
+
const float GRAIN_FLOOR = 0.94;
|
|
388
|
+
const float GRAIN_CEIL = 1.06;
|
|
389
|
+
|
|
390
|
+
|
|
391
|
+
/**
|
|
392
|
+
* Nudge a cube direction to stay inside the face it already belongs to.
|
|
393
|
+
*
|
|
394
|
+
* Every component except the dominant one is clamped to a fraction of the
|
|
395
|
+
* dominant magnitude, which is exactly the condition for "this direction is
|
|
396
|
+
* inside that face". The dominant component is restored untouched, so the face
|
|
397
|
+
* choice itself never changes.
|
|
398
|
+
*/
|
|
399
|
+
#if POINT_SHADOWS`;
|