@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,437 @@
|
|
|
1
|
+
/** A cubemap of the scene from one point, for surfaces that mirror the room they stand in. */
|
|
2
|
+
import { Camera } from './camera.js';
|
|
3
|
+
import { roughnessForLevel } from './prefilterEnvMap.js';
|
|
4
|
+
/**
|
|
5
|
+
* The six directions of a cubemap, as the yaw and pitch a `Camera` aims with.
|
|
6
|
+
*
|
|
7
|
+
* Written as camera angles rather than as look-at targets because that is what `Camera` takes,
|
|
8
|
+
* and because the order is not free: it is the order WebGL numbers the faces, `+X, -X, +Y, -Y,
|
|
9
|
+
* +Z, -Z`, and a face rendered into the wrong slot gives a reflection that is subtly rotated in
|
|
10
|
+
* a way that reads as the whole probe being wrong rather than as one face being swapped.
|
|
11
|
+
*
|
|
12
|
+
* `yaw 0` looks toward -Z and positive yaw turns toward +X, which is this camera's convention.
|
|
13
|
+
*/
|
|
14
|
+
const FACES = [
|
|
15
|
+
{ yaw: Math.PI / 2, pitch: 0 },
|
|
16
|
+
{ yaw: -Math.PI / 2, pitch: 0 },
|
|
17
|
+
{ yaw: 0, pitch: Math.PI / 2 },
|
|
18
|
+
{ yaw: 0, pitch: -Math.PI / 2 },
|
|
19
|
+
{ yaw: Math.PI, pitch: 0 },
|
|
20
|
+
{ yaw: 0, pitch: 0 },
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* A quarter turn of field of view, which is what makes six faces meet exactly.
|
|
24
|
+
*
|
|
25
|
+
* Anything else leaves a seam or an overlap at every edge, and both read as a crack running
|
|
26
|
+
* across a reflective surface.
|
|
27
|
+
*/
|
|
28
|
+
const FACE_FOV_DEG = 90;
|
|
29
|
+
/**
|
|
30
|
+
* How far the probe's own camera can see.
|
|
31
|
+
*
|
|
32
|
+
* Near is generous because a probe sits in open space in the middle of a room rather than
|
|
33
|
+
* against a wall, and a small near plane spends depth precision on nothing. Far reaches past
|
|
34
|
+
* any room a probe is a reasonable idea for; beyond that, what a reflection needs is a sky.
|
|
35
|
+
*/
|
|
36
|
+
const NEAR_M = 0.1;
|
|
37
|
+
const FAR_M = 200;
|
|
38
|
+
export class ReflectionProbe {
|
|
39
|
+
/**
|
|
40
|
+
* The captured cube, box-filtered, which the convolution reads and the projection reads.
|
|
41
|
+
*
|
|
42
|
+
* **Not what the lit pass samples any more.** A box filter averages a square of texels and a
|
|
43
|
+
* GGX lobe is not square, so sampling this chain by roughness was an approximation whose error
|
|
44
|
+
* was largest exactly where a surface looks most interesting. It stays because filtered
|
|
45
|
+
* importance sampling needs a chain to pick a level from, and because `readFaces` projects
|
|
46
|
+
* *this* onto spherical harmonics — an irradiance integral over a lobe-convolved cube would be
|
|
47
|
+
* a convolution of a convolution.
|
|
48
|
+
*/
|
|
49
|
+
texture;
|
|
50
|
+
/**
|
|
51
|
+
* The prefiltered cube: one GGX-convolved level per roughness, and what `uEnvironment` binds.
|
|
52
|
+
*
|
|
53
|
+
* **A second texture rather than this one rewritten in place**, and it costs one cube of
|
|
54
|
+
* memory. What it buys is worth more than that here: WebGL2's feedback-loop check is per
|
|
55
|
+
* texture object, so rendering into a level of the cube a sampler is holding is the hazard the
|
|
56
|
+
* depth peel already pays for elsewhere, and with two objects it cannot arise. It is also what
|
|
57
|
+
* stops a level being convolved from a level that was already convolved, which applies the lobe
|
|
58
|
+
* twice and compounds up the chain.
|
|
59
|
+
*
|
|
60
|
+
* **What would make it wrong** is a probe large enough for a second cube to be the memory
|
|
61
|
+
* decision; at 128 with a chain that is about a megabyte at half float.
|
|
62
|
+
*/
|
|
63
|
+
prefiltered;
|
|
64
|
+
/** The camera the caller draws each face with. Reused, so a bake allocates nothing. */
|
|
65
|
+
camera = new Camera();
|
|
66
|
+
framebuffer;
|
|
67
|
+
/**
|
|
68
|
+
* The convolution's own framebuffer, with no depth attached.
|
|
69
|
+
*
|
|
70
|
+
* The bake's framebuffer carries a full-size depth renderbuffer, and an attachment whose size
|
|
71
|
+
* does not match the colour one makes the framebuffer *incomplete* — so reusing it above level
|
|
72
|
+
* zero would fail at the first mip rather than at the last. A convolution has nothing to sort
|
|
73
|
+
* against and needs no depth at all.
|
|
74
|
+
*/
|
|
75
|
+
prefilterFramebuffer;
|
|
76
|
+
depth;
|
|
77
|
+
/** Face width in texels. Public because the convolution's solid-angle term needs it. */
|
|
78
|
+
size;
|
|
79
|
+
/**
|
|
80
|
+
* Whether the cube holds radiance above white, or clamps at it.
|
|
81
|
+
*
|
|
82
|
+
* False on a part without `EXT_color_buffer_float`, and on any caller that did not ask for an
|
|
83
|
+
* HDR scene — where the room the probe photographs was itself clamped before it got here, so a
|
|
84
|
+
* float cube would carry the same crushed values at twice the bandwidth.
|
|
85
|
+
*/
|
|
86
|
+
floatColor;
|
|
87
|
+
/**
|
|
88
|
+
* Scratch for the byte path of `readFaces`, allocated on first use and reused after.
|
|
89
|
+
*
|
|
90
|
+
* Null rather than sized at construction, because a probe that is never read back — which is
|
|
91
|
+
* every probe on a scene that bakes one and never asks for irradiance — should not carry a
|
|
92
|
+
* megabyte for it.
|
|
93
|
+
*/
|
|
94
|
+
readBytes = null;
|
|
95
|
+
/** Scratch for the byte path of `upload`, on the same terms as `readBytes`. */
|
|
96
|
+
uploadBytes = null;
|
|
97
|
+
/**
|
|
98
|
+
* Whether anything has ever been rendered into this.
|
|
99
|
+
*
|
|
100
|
+
* The shader must not sample a cubemap nobody has filled: what is in it is whatever the
|
|
101
|
+
* driver left, and a car mirroring uninitialised memory is worse than a car mirroring a
|
|
102
|
+
* gradient. So this gates the uniform rather than the allocation.
|
|
103
|
+
*/
|
|
104
|
+
baked = false;
|
|
105
|
+
/**
|
|
106
|
+
* Set once if the allocation is refused, and never cleared.
|
|
107
|
+
*
|
|
108
|
+
* A reflection is an improvement to an appearance rather than a requirement. The scene still
|
|
109
|
+
* renders without one and `flat.ts` still has the sky-and-ground gradient it used before this
|
|
110
|
+
* existed, so a device that cannot afford six faces loses the room in the paint and keeps
|
|
111
|
+
* everything else.
|
|
112
|
+
*/
|
|
113
|
+
unusable = false;
|
|
114
|
+
constructor(gl, size, wantsRange = false) {
|
|
115
|
+
const maximum = gl.getParameter(gl.MAX_CUBE_MAP_TEXTURE_SIZE);
|
|
116
|
+
this.size = Math.max(16, Math.min(size, Number.isFinite(maximum) ? maximum : size));
|
|
117
|
+
/*
|
|
118
|
+
* **Half-float when the scene keeps its range, and this is the ceiling on what a metal can
|
|
119
|
+
* look like rather than a quality setting.** A metal has no diffuse term: what it shows is
|
|
120
|
+
* `environment * albedo` and nothing else, so an eight-bit cube caps the whole surface at its
|
|
121
|
+
* own albedo. A dark red panel can then never carry a highlight brighter than dark red,
|
|
122
|
+
* whatever the room contains, and the surface reads as paint however good the map is.
|
|
123
|
+
*
|
|
124
|
+
* Measured on `demo/dev/model.html`, which lights a studio whose panels emit well over white.
|
|
125
|
+
* Driving that gain 1 -> 2.6 -> 8 -> 24 moved the mean over the subject's chest:
|
|
126
|
+
*
|
|
127
|
+
* RGBA8 33.4 38.9 44.9 45.4 saturated: 3x the light, half a level
|
|
128
|
+
* RGBA16F 32.2 47.0 83.6 141.4 tracks the room
|
|
129
|
+
*
|
|
130
|
+
* The other backend has always done this — WebGPU's cube takes `pipelines.format` — so this
|
|
131
|
+
* was also the two backends disagreeing about the one thing that decides a metal's appearance.
|
|
132
|
+
*
|
|
133
|
+
* `EXT_color_buffer_float` is what makes a half-float cube *renderable*, and a bake is six
|
|
134
|
+
* render passes into these faces, so its absence is a refusal rather than a slow path. The
|
|
135
|
+
* check mirrors `SceneTarget`'s exactly; filtering needs nothing, being core in WebGL2.
|
|
136
|
+
*/
|
|
137
|
+
this.floatColor = wantsRange && gl.getExtension('EXT_color_buffer_float') !== null;
|
|
138
|
+
const texture = gl.createTexture();
|
|
139
|
+
if (texture === null)
|
|
140
|
+
throw new Error('ReflectionProbe: createTexture failed');
|
|
141
|
+
this.texture = texture;
|
|
142
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, texture);
|
|
143
|
+
/*
|
|
144
|
+
* Mipmapped, and that is the roughness. A polished surface samples level 0 and a satin one
|
|
145
|
+
* samples further up the chain, which is a blur that costs a fetch rather than a pass.
|
|
146
|
+
* `texStorage2D` rather than six `texImage2D` calls because the whole chain has to be
|
|
147
|
+
* declared before a framebuffer will accept a face as an attachment.
|
|
148
|
+
*/
|
|
149
|
+
const levels = Math.floor(Math.log2(this.size)) + 1;
|
|
150
|
+
gl.texStorage2D(gl.TEXTURE_CUBE_MAP, levels, this.floatColor ? gl.RGBA16F : gl.RGBA8, this.size, this.size);
|
|
151
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
|
|
152
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
153
|
+
/*
|
|
154
|
+
* Clamped on every axis. A cube's faces are addressed by direction rather than by UV, so
|
|
155
|
+
* wrapping means nothing here, and leaving it at the default `REPEAT` is how a seam appears
|
|
156
|
+
* along every face edge on the drivers that take it literally.
|
|
157
|
+
*/
|
|
158
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
159
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
160
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
|
|
161
|
+
/*
|
|
162
|
+
* The prefiltered twin: the same storage exactly, because the convolution renders into these
|
|
163
|
+
* levels and a format the bake's own pipeline does not produce is a framebuffer this driver
|
|
164
|
+
* will refuse. Same filters too — the chain is still the roughness, it is simply a chain that
|
|
165
|
+
* now means what the shader assumes it means.
|
|
166
|
+
*/
|
|
167
|
+
const prefiltered = gl.createTexture();
|
|
168
|
+
if (prefiltered === null)
|
|
169
|
+
throw new Error('ReflectionProbe: createTexture failed');
|
|
170
|
+
this.prefiltered = prefiltered;
|
|
171
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, prefiltered);
|
|
172
|
+
gl.texStorage2D(gl.TEXTURE_CUBE_MAP, levels, this.floatColor ? gl.RGBA16F : gl.RGBA8, this.size, this.size);
|
|
173
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR);
|
|
174
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
175
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
176
|
+
gl.texParameteri(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
177
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
|
|
178
|
+
const depth = gl.createRenderbuffer();
|
|
179
|
+
if (depth === null)
|
|
180
|
+
throw new Error('ReflectionProbe: createRenderbuffer failed');
|
|
181
|
+
this.depth = depth;
|
|
182
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, depth);
|
|
183
|
+
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, this.size, this.size);
|
|
184
|
+
gl.bindRenderbuffer(gl.RENDERBUFFER, null);
|
|
185
|
+
const framebuffer = gl.createFramebuffer();
|
|
186
|
+
if (framebuffer === null)
|
|
187
|
+
throw new Error('ReflectionProbe: createFramebuffer failed');
|
|
188
|
+
this.framebuffer = framebuffer;
|
|
189
|
+
const prefilterFramebuffer = gl.createFramebuffer();
|
|
190
|
+
if (prefilterFramebuffer === null)
|
|
191
|
+
throw new Error('ReflectionProbe: createFramebuffer failed');
|
|
192
|
+
this.prefilterFramebuffer = prefilterFramebuffer;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Fill the captured cube from six faces a caller supplies, instead of photographing a room.
|
|
196
|
+
*
|
|
197
|
+
* **The same cube, so everything downstream is the same code.** A loaded environment and a baked
|
|
198
|
+
* one differ only in where the six faces came from; the box chain, the convolution and the
|
|
199
|
+
* spherical-harmonic projection all read this texture either way. That is what keeps a loaded sky
|
|
200
|
+
* from being a second lighting path with its own bugs.
|
|
201
|
+
*
|
|
202
|
+
* **A non-float cube clips rather than tone-maps**, and that is deliberate. The cube stores
|
|
203
|
+
* radiance, and a curve applied here would be a viewing transform baked into stored light — the
|
|
204
|
+
* mistake `bakeReflectionProbe` documents at length on the other side. A part without
|
|
205
|
+
* `EXT_color_buffer_float` gets a clipped environment and a metal that cannot reflect brighter
|
|
206
|
+
* than white, which is the honest degradation and is what `floatColor` already means everywhere
|
|
207
|
+
* else in this file.
|
|
208
|
+
*/
|
|
209
|
+
upload(gl, faces) {
|
|
210
|
+
if (this.unusable)
|
|
211
|
+
return false;
|
|
212
|
+
if (faces.length !== 6) {
|
|
213
|
+
throw new Error(`ReflectionProbe.upload: needs six faces in cubemap order, got ${faces.length}`);
|
|
214
|
+
}
|
|
215
|
+
const wanted = this.size * this.size * 4;
|
|
216
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, this.texture);
|
|
217
|
+
for (let face = 0; face < 6; face++) {
|
|
218
|
+
const pixels = faces[face];
|
|
219
|
+
if (pixels === undefined || pixels.length !== wanted) {
|
|
220
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
|
|
221
|
+
throw new Error(`ReflectionProbe.upload: face ${face} is ${pixels?.length ?? 0} floats and this probe ` +
|
|
222
|
+
`wants ${wanted} — build the faces at the probe's own size`);
|
|
223
|
+
}
|
|
224
|
+
const target = gl.TEXTURE_CUBE_MAP_POSITIVE_X + face;
|
|
225
|
+
if (this.floatColor) {
|
|
226
|
+
gl.texSubImage2D(target, 0, 0, 0, this.size, this.size, gl.RGBA, gl.FLOAT, pixels);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
const bytes = this.clipToBytes(pixels);
|
|
230
|
+
gl.texSubImage2D(target, 0, 0, 0, this.size, this.size, gl.RGBA, gl.UNSIGNED_BYTE, bytes);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/* The source chain the convolution selects a level from, exactly as a bake leaves behind. */
|
|
234
|
+
gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
|
|
235
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
|
|
236
|
+
this.baked = true;
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Linear floats to bytes, clipped at white, for a part with no renderable float cube.
|
|
241
|
+
*
|
|
242
|
+
* Allocated on first use and reused, like `readBytes` above and for the same reason: a probe that
|
|
243
|
+
* is only ever float should not carry a megabyte for a path it never takes.
|
|
244
|
+
*/
|
|
245
|
+
clipToBytes(pixels) {
|
|
246
|
+
let bytes = this.uploadBytes;
|
|
247
|
+
if (bytes === null || bytes.length !== pixels.length) {
|
|
248
|
+
bytes = new Uint8Array(pixels.length);
|
|
249
|
+
this.uploadBytes = bytes;
|
|
250
|
+
}
|
|
251
|
+
for (let i = 0; i < pixels.length; i++) {
|
|
252
|
+
const value = pixels[i] ?? 0;
|
|
253
|
+
bytes[i] = value <= 0 ? 0 : value >= 1 ? 255 : Math.round(value * 255);
|
|
254
|
+
}
|
|
255
|
+
return bytes;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Convolve the captured chain into the prefiltered one, once per bake.
|
|
259
|
+
*
|
|
260
|
+
* **The caller draws, exactly as it does for a face.** This owns the target — which cube, which
|
|
261
|
+
* face, which level, and the viewport that level wants — and `convolve` owns the program, the
|
|
262
|
+
* uniforms and the triangle, which is the same split `bake` makes with `drawFace` and for the
|
|
263
|
+
* same reason: a probe has no business knowing what a shader is.
|
|
264
|
+
*
|
|
265
|
+
* `roughness` is handed over rather than recomputed by the caller, so the level-to-roughness
|
|
266
|
+
* relation lives in exactly one place. `prefilterEnvMap.ts` is that place, and the lit pass's
|
|
267
|
+
* own level selection is the same relation read the other way.
|
|
268
|
+
*/
|
|
269
|
+
prefilter(gl, convolve) {
|
|
270
|
+
if (this.unusable)
|
|
271
|
+
return;
|
|
272
|
+
const levels = this.maxLod + 1;
|
|
273
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this.prefilterFramebuffer);
|
|
274
|
+
for (let level = 0; level < levels; level++) {
|
|
275
|
+
/* A level is half the width of the one below it, and the viewport has to say so or the
|
|
276
|
+
triangle covers a quarter of the target and leaves the rest at the clear colour. */
|
|
277
|
+
const size = Math.max(1, this.size >> level);
|
|
278
|
+
gl.viewport(0, 0, size, size);
|
|
279
|
+
const roughness = roughnessForLevel(level, this.maxLod);
|
|
280
|
+
for (let face = 0; face < 6; face++) {
|
|
281
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, this.prefiltered, level);
|
|
282
|
+
convolve(face, level, roughness);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
286
|
+
}
|
|
287
|
+
/** Whether the shader may sample this. False until a bake has finished. */
|
|
288
|
+
get ready() {
|
|
289
|
+
return this.baked && !this.unusable;
|
|
290
|
+
}
|
|
291
|
+
/** How many mip levels the roughness blur has to work with. */
|
|
292
|
+
get maxLod() {
|
|
293
|
+
return Math.floor(Math.log2(this.size));
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Render the six faces from `origin`, once.
|
|
297
|
+
*
|
|
298
|
+
* `drawFace` is handed a camera already aimed and is expected to submit the scene exactly as
|
|
299
|
+
* it would to the screen. It is called six times, and it must not call anything that binds a
|
|
300
|
+
* framebuffer of its own: a shadow pass or a planar reflection inside a probe bake would
|
|
301
|
+
* leave the probe's own target unbound halfway through a face.
|
|
302
|
+
*
|
|
303
|
+
* Returns whether the bake happened. A false means the allocation was refused and the caller
|
|
304
|
+
* should carry on without a probe, which is a picture with a gradient in its paint rather
|
|
305
|
+
* than a room.
|
|
306
|
+
*/
|
|
307
|
+
bake(gl, origin, clearColor, drawFace) {
|
|
308
|
+
if (this.unusable)
|
|
309
|
+
return false;
|
|
310
|
+
const camera = this.camera;
|
|
311
|
+
camera.position[0] = origin[0];
|
|
312
|
+
camera.position[1] = origin[1];
|
|
313
|
+
camera.position[2] = origin[2];
|
|
314
|
+
camera.fovYDeg = FACE_FOV_DEG;
|
|
315
|
+
camera.near = NEAR_M;
|
|
316
|
+
camera.far = FAR_M;
|
|
317
|
+
camera.roll = 0;
|
|
318
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
|
319
|
+
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.depth);
|
|
320
|
+
gl.viewport(0, 0, this.size, this.size);
|
|
321
|
+
for (let face = 0; face < FACES.length; face++) {
|
|
322
|
+
const aim = FACES[face];
|
|
323
|
+
if (aim === undefined)
|
|
324
|
+
continue;
|
|
325
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, this.texture, 0);
|
|
326
|
+
if (face === 0 && gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
|
|
327
|
+
this.unusable = true;
|
|
328
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
329
|
+
console.warn('ReflectionProbe: this driver will not render to a cubemap face, so reflective ' +
|
|
330
|
+
'surfaces keep the sky-and-ground approximation. Nothing else is affected.');
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
camera.yaw = aim.yaw;
|
|
334
|
+
camera.pitch = aim.pitch;
|
|
335
|
+
/*
|
|
336
|
+
* Square, so the aspect is 1. Handing the drawing buffer's aspect in here is the mistake
|
|
337
|
+
* that stretches every face and shows up as a reflection that slides at the wrong rate
|
|
338
|
+
* across a curved surface.
|
|
339
|
+
*/
|
|
340
|
+
camera.updateMatrices(1);
|
|
341
|
+
gl.clearColor(clearColor[0], clearColor[1], clearColor[2], 1);
|
|
342
|
+
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
|
|
343
|
+
drawFace(camera);
|
|
344
|
+
}
|
|
345
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
346
|
+
/* The blur the roughness reads. Once per bake, not once per frame. */
|
|
347
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, this.texture);
|
|
348
|
+
gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
|
|
349
|
+
gl.bindTexture(gl.TEXTURE_CUBE_MAP, null);
|
|
350
|
+
this.baked = true;
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Read six faces back off the GPU, at one mip level, for the irradiance projection.
|
|
355
|
+
*
|
|
356
|
+
* **Synchronous, and that is the whole reason the two backends' bindings differ.** `readPixels`
|
|
357
|
+
* blocks until the queue reaches it, and on a level this coarse that is a few thousand texels
|
|
358
|
+
* once per bake. The other backend has no synchronous read at all — its cube is not copyable and
|
|
359
|
+
* `mapAsync` answers on a later tick — so it does this over two frames. Both hand the same six
|
|
360
|
+
* arrays to the same projection, which is where the decision lives.
|
|
361
|
+
*
|
|
362
|
+
* `out` must hold six arrays of at least `(size >> level)^2 * 4` floats. Answers false if the
|
|
363
|
+
* driver would not attach a face for reading, which is the same refusal `bake` already handles
|
|
364
|
+
* by carrying on without a probe: the reflection is already in the cube either way, so a false
|
|
365
|
+
* here costs the diffuse term and nothing else.
|
|
366
|
+
*
|
|
367
|
+
* **What would make it wrong** is reading a level the chain does not have. `texStorage2D`
|
|
368
|
+
* allocated `maxLod + 1` levels, so any level up to `maxLod` is in range; a caller asking for
|
|
369
|
+
* `maxLod - 3` needs a probe of at least eight texels, and below that the projection is not
|
|
370
|
+
* worth doing and the caller skips it.
|
|
371
|
+
*/
|
|
372
|
+
readFaces(gl, level, out) {
|
|
373
|
+
if (this.unusable || !this.baked)
|
|
374
|
+
return false;
|
|
375
|
+
const side = Math.max(1, this.size >> level);
|
|
376
|
+
const wanted = side * side * 4;
|
|
377
|
+
for (let face = 0; face < 6; face++) {
|
|
378
|
+
const target = out[face];
|
|
379
|
+
if (target === undefined || target.length < wanted)
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
|
383
|
+
/* Depth is irrelevant to a read, and a renderbuffer sized for level 0 makes the framebuffer
|
|
384
|
+
incomplete at any smaller level. */
|
|
385
|
+
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, null);
|
|
386
|
+
let ok = true;
|
|
387
|
+
for (let face = 0; face < 6 && ok; face++) {
|
|
388
|
+
const target = out[face];
|
|
389
|
+
if (target === undefined) {
|
|
390
|
+
ok = false;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_CUBE_MAP_POSITIVE_X + face, this.texture, level);
|
|
394
|
+
if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE) {
|
|
395
|
+
ok = false;
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
/*
|
|
399
|
+
* **The type has to match what the cube is, and asking for the wrong one is a refusal
|
|
400
|
+
* rather than a conversion.** `RGBA/FLOAT` is readable from the half-float cube this probe
|
|
401
|
+
* allocates when a scene keeps its range, and `INVALID_OPERATION` from the `RGBA8` one it
|
|
402
|
+
* allocates otherwise — *"Invalid format and type combination"*, in the driver's own words,
|
|
403
|
+
* on every face, with the frame drawing perfectly well around it. Most scenes do not ask for
|
|
404
|
+
* range, so the byte path is the common one rather than the fallback.
|
|
405
|
+
*/
|
|
406
|
+
if (this.floatColor) {
|
|
407
|
+
gl.readPixels(0, 0, side, side, gl.RGBA, gl.FLOAT, target);
|
|
408
|
+
}
|
|
409
|
+
else {
|
|
410
|
+
const bytes = this.readBytes;
|
|
411
|
+
if (bytes === null || bytes.length < wanted)
|
|
412
|
+
this.readBytes = new Uint8Array(wanted);
|
|
413
|
+
const buffer = this.readBytes;
|
|
414
|
+
if (buffer === null) {
|
|
415
|
+
ok = false;
|
|
416
|
+
break;
|
|
417
|
+
}
|
|
418
|
+
gl.readPixels(0, 0, side, side, gl.RGBA, gl.UNSIGNED_BYTE, buffer);
|
|
419
|
+
/* The cube holds linear values — it is a render target, not an art texture, and nothing
|
|
420
|
+
encodes on the way in — so a byte is that value over 255 and nothing else. */
|
|
421
|
+
for (let i = 0; i < wanted; i++)
|
|
422
|
+
target[i] = (buffer[i] ?? 0) / 255;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, this.depth);
|
|
426
|
+
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
|
|
427
|
+
return ok && gl.getError() === gl.NO_ERROR;
|
|
428
|
+
}
|
|
429
|
+
dispose(gl) {
|
|
430
|
+
gl.deleteFramebuffer(this.framebuffer);
|
|
431
|
+
gl.deleteFramebuffer(this.prefilterFramebuffer);
|
|
432
|
+
gl.deleteRenderbuffer(this.depth);
|
|
433
|
+
gl.deleteTexture(this.texture);
|
|
434
|
+
gl.deleteTexture(this.prefiltered);
|
|
435
|
+
this.baked = false;
|
|
436
|
+
}
|
|
437
|
+
}
|