@driftengine/core 3.62.0 → 4.0.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/CHANGELOG.json +122 -0
- package/NOTICE +20 -0
- package/README.md +1 -1
- package/dist/core/loop.js +18 -2
- package/dist/core/storage.js +5 -0
- package/dist/geometry/meshBuilder.d.ts +1 -1
- package/dist/geometry/meshBuilder.js +6 -2
- package/dist/index.d.ts +70 -4
- package/dist/index.js +123 -2
- package/dist/input/input.js +6 -1
- package/dist/math/exact.d.ts +13 -3
- package/dist/math/exact.js +68 -3
- package/dist/math/frustum.d.ts +17 -2
- package/dist/math/frustum.js +24 -0
- package/dist/render/backend/api.d.ts +34 -1
- package/dist/render/backend/api.js +22 -1
- package/dist/render/backend/budget.d.ts +7 -6
- package/dist/render/backend/budget.js +7 -6
- package/dist/render/backend/createRenderer.d.ts +57 -0
- package/dist/render/backend/createRenderer.js +51 -2
- package/dist/render/backend/materialChanges.d.ts +41 -0
- package/dist/render/backend/materialChanges.js +38 -0
- package/dist/render/backend/select.js +8 -0
- package/dist/render/backend/webgl2/renderer.d.ts +80 -1
- package/dist/render/backend/webgl2/renderer.js +208 -10
- package/dist/render/backend/webgpu/buffers.d.ts +20 -1
- package/dist/render/backend/webgpu/buffers.js +116 -58
- package/dist/render/backend/webgpu/fieldCompose.d.ts +156 -0
- package/dist/render/backend/webgpu/fieldCompose.js +396 -0
- package/dist/render/backend/webgpu/giFieldPass.d.ts +66 -0
- package/dist/render/backend/webgpu/giFieldPass.js +137 -0
- package/dist/render/backend/webgpu/gpuDrivenPass.d.ts +728 -0
- package/dist/render/backend/webgpu/gpuDrivenPass.js +2473 -0
- package/dist/render/backend/webgpu/linePass.d.ts +4 -14
- package/dist/render/backend/webgpu/linePass.js +4 -33
- package/dist/render/backend/webgpu/probeBake.d.ts +148 -0
- package/dist/render/backend/webgpu/probeBake.js +493 -0
- package/dist/render/backend/webgpu/renderer.d.ts +379 -24
- package/dist/render/backend/webgpu/renderer.js +1369 -76
- package/dist/render/backend/webgpu/scatterPass.js +15 -1
- package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +47 -14
- package/dist/render/backend/webgpu/surfaceTexturePass.js +128 -80
- package/dist/render/causticsRenderer.d.ts +3 -1
- package/dist/render/causticsRenderer.js +4 -1
- package/dist/render/depthConvention.d.ts +12 -0
- package/dist/render/depthConvention.js +14 -0
- package/dist/render/deviceFeatures.d.ts +32 -0
- package/dist/render/deviceFeatures.js +41 -0
- package/dist/render/fog.d.ts +79 -0
- package/dist/render/fog.js +138 -0
- package/dist/render/frame/alias.d.ts +30 -0
- package/dist/render/frame/alias.js +61 -0
- package/dist/render/frame/deps.d.ts +37 -0
- package/dist/render/frame/deps.js +122 -0
- package/dist/render/frame/flushGraph.d.ts +43 -0
- package/dist/render/frame/flushGraph.js +84 -0
- package/dist/render/frame/graphSchedule.d.ts +49 -0
- package/dist/render/frame/graphSchedule.js +120 -0
- package/dist/render/frame/index.d.ts +15 -0
- package/dist/render/frame/index.js +8 -0
- package/dist/render/frame/lifetime.d.ts +24 -0
- package/dist/render/frame/lifetime.js +36 -0
- package/dist/render/frame/passTimings.d.ts +42 -0
- package/dist/render/frame/passTimings.js +38 -0
- package/dist/render/frame/validate.d.ts +15 -0
- package/dist/render/frame/validate.js +22 -0
- package/dist/render/frame/virtual.d.ts +44 -0
- package/dist/render/frame/virtual.js +61 -0
- package/dist/render/gi/chain.d.ts +82 -0
- package/dist/render/gi/chain.js +135 -0
- package/dist/render/gi/denoise.d.ts +114 -0
- package/dist/render/gi/denoise.js +169 -0
- package/dist/render/gi/fieldScene.d.ts +125 -0
- package/dist/render/gi/fieldScene.js +219 -0
- package/dist/render/gi/globalField.d.ts +157 -0
- package/dist/render/gi/globalField.js +373 -0
- package/dist/render/gi/probeGridFit.d.ts +24 -0
- package/dist/render/gi/probeGridFit.js +71 -0
- package/dist/render/gi/probeTrace.d.ts +82 -0
- package/dist/render/gi/probeTrace.js +128 -0
- package/dist/render/gi/probeVolume.d.ts +136 -0
- package/dist/render/gi/probeVolume.js +191 -0
- package/dist/render/gi/reflection.d.ts +73 -0
- package/dist/render/gi/reflection.js +109 -0
- package/dist/render/gi/traceField.d.ts +91 -0
- package/dist/render/gi/traceField.js +129 -0
- package/dist/render/gi/traceScreen.d.ts +68 -0
- package/dist/render/gi/traceScreen.js +82 -0
- package/dist/render/gpuScene.d.ts +38 -0
- package/dist/render/gpuScene.js +41 -0
- package/dist/render/gpudriven/alphaTest.d.ts +28 -0
- package/dist/render/gpudriven/alphaTest.js +32 -0
- package/dist/render/gpudriven/clusterUpload.d.ts +59 -0
- package/dist/render/gpudriven/clusterUpload.js +75 -0
- package/dist/render/gpudriven/clusterWorld.d.ts +57 -0
- package/dist/render/gpudriven/clusterWorld.js +155 -0
- package/dist/render/gpudriven/compact.d.ts +51 -0
- package/dist/render/gpudriven/compact.js +68 -0
- package/dist/render/gpudriven/cullClusters.d.ts +129 -0
- package/dist/render/gpudriven/cullClusters.js +237 -0
- package/dist/render/gpudriven/decodeTables.d.ts +64 -0
- package/dist/render/gpudriven/decodeTables.js +219 -0
- package/dist/render/gpudriven/frustum.d.ts +25 -0
- package/dist/render/gpudriven/frustum.js +59 -0
- package/dist/render/gpudriven/geometryHarness.d.ts +15 -0
- package/dist/render/gpudriven/geometryHarness.js +31 -0
- package/dist/render/gpudriven/hzb.d.ts +60 -0
- package/dist/render/gpudriven/hzb.js +97 -0
- package/dist/render/gpudriven/ibl.d.ts +85 -0
- package/dist/render/gpudriven/ibl.js +129 -0
- package/dist/render/gpudriven/indirect.d.ts +67 -0
- package/dist/render/gpudriven/indirect.js +77 -0
- package/dist/render/gpudriven/instances.d.ts +43 -0
- package/dist/render/gpudriven/instances.js +172 -0
- package/dist/render/gpudriven/lit.d.ts +165 -0
- package/dist/render/gpudriven/lit.js +165 -0
- package/dist/render/gpudriven/lodCut.d.ts +28 -0
- package/dist/render/gpudriven/lodCut.js +38 -0
- package/dist/render/gpudriven/materialBin.d.ts +60 -0
- package/dist/render/gpudriven/materialBin.js +108 -0
- package/dist/render/gpudriven/materialTable.d.ts +88 -0
- package/dist/render/gpudriven/materialTable.js +115 -0
- package/dist/render/gpudriven/pipeline.d.ts +135 -0
- package/dist/render/gpudriven/pipeline.js +237 -0
- package/dist/render/gpudriven/rangeAlloc.d.ts +50 -0
- package/dist/render/gpudriven/rangeAlloc.js +112 -0
- package/dist/render/gpudriven/sceneUpload.d.ts +96 -0
- package/dist/render/gpudriven/sceneUpload.js +115 -0
- package/dist/render/gpudriven/shadeBins.d.ts +92 -0
- package/dist/render/gpudriven/shadeBins.js +182 -0
- package/dist/render/gpudriven/shadow.d.ts +136 -0
- package/dist/render/gpudriven/shadow.js +224 -0
- package/dist/render/gpudriven/shadowCamera.d.ts +87 -0
- package/dist/render/gpudriven/shadowCamera.js +345 -0
- package/dist/render/gpudriven/streamScene.d.ts +194 -0
- package/dist/render/gpudriven/streamScene.js +459 -0
- package/dist/render/gpudriven/surfaceFrame.d.ts +25 -0
- package/dist/render/gpudriven/surfaceFrame.js +51 -0
- package/dist/render/gpudriven/twoPhase.d.ts +122 -0
- package/dist/render/gpudriven/twoPhase.js +160 -0
- package/dist/render/gpudriven/visbuffer.d.ts +25 -0
- package/dist/render/gpudriven/visbuffer.js +37 -0
- package/dist/render/halfFloat.d.ts +10 -0
- package/dist/render/halfFloat.js +23 -4
- package/dist/render/inference/attentionTiled.d.ts +27 -0
- package/dist/render/inference/attentionTiled.js +117 -0
- package/dist/render/inference/denseKernels.d.ts +29 -0
- package/dist/render/inference/denseKernels.js +312 -0
- package/dist/render/inference/device.d.ts +21 -0
- package/dist/render/inference/device.js +32 -0
- package/dist/render/inference/deviceGraph.d.ts +34 -0
- package/dist/render/inference/deviceGraph.js +17 -0
- package/dist/render/inference/fuse.d.ts +15 -0
- package/dist/render/inference/fuse.js +37 -0
- package/dist/render/inference/kernelKit.d.ts +52 -0
- package/dist/render/inference/kernelKit.js +70 -0
- package/dist/render/inference/kernels.d.ts +3 -0
- package/dist/render/inference/kernels.js +11 -0
- package/dist/render/inference/plan.d.ts +13 -0
- package/dist/render/inference/plan.js +18 -0
- package/dist/render/inference/reuse.d.ts +39 -0
- package/dist/render/inference/reuse.js +65 -0
- package/dist/render/inference/runner.d.ts +31 -0
- package/dist/render/inference/runner.js +175 -0
- package/dist/render/inference/schedule.d.ts +39 -0
- package/dist/render/inference/schedule.js +59 -0
- package/dist/render/inference/shapeKernels.d.ts +10 -0
- package/dist/render/inference/shapeKernels.js +80 -0
- package/dist/render/inference/spatialKernels.d.ts +21 -0
- package/dist/render/inference/spatialKernels.js +179 -0
- package/dist/render/inference/splatRaster.wgsl.d.ts +75 -0
- package/dist/render/inference/splatRaster.wgsl.js +337 -0
- package/dist/render/inference/splatTiles.d.ts +79 -0
- package/dist/render/inference/splatTiles.js +161 -0
- package/dist/render/lineBatch.d.ts +2 -5
- package/dist/render/lineBatch.js +4 -24
- package/dist/render/mesh.d.ts +4 -0
- package/dist/render/mesh.js +45 -1
- package/dist/render/pass.d.ts +145 -8
- package/dist/render/prefilterEnvMap.d.ts +22 -0
- package/dist/render/prefilterEnvMap.js +31 -0
- package/dist/render/readback.d.ts +30 -0
- package/dist/render/readback.js +47 -0
- package/dist/render/recon/clamp.d.ts +36 -0
- package/dist/render/recon/clamp.js +92 -0
- package/dist/render/recon/disocclusion.d.ts +60 -0
- package/dist/render/recon/disocclusion.js +109 -0
- package/dist/render/recon/frameGen.d.ts +81 -0
- package/dist/render/recon/frameGen.js +150 -0
- package/dist/render/recon/frameSizes.d.ts +34 -0
- package/dist/render/recon/frameSizes.js +58 -0
- package/dist/render/recon/jitter.d.ts +60 -0
- package/dist/render/recon/jitter.js +118 -0
- package/dist/render/recon/motionVectors.d.ts +55 -0
- package/dist/render/recon/motionVectors.js +107 -0
- package/dist/render/recon/reproject.d.ts +41 -0
- package/dist/render/recon/reproject.js +131 -0
- package/dist/render/recon/resolve.d.ts +90 -0
- package/dist/render/recon/resolve.js +313 -0
- package/dist/render/recon/tier.d.ts +24 -0
- package/dist/render/recon/tier.js +8 -0
- package/dist/render/reflectionProbe.d.ts +26 -0
- package/dist/render/reflectionProbe.js +33 -0
- package/dist/render/renderQuality.d.ts +69 -0
- package/dist/render/renderQuality.js +22 -0
- package/dist/render/screenSpaceReflection.d.ts +23 -0
- package/dist/render/screenSpaceReflection.js +22 -3
- package/dist/render/sdfFont.js +2 -0
- package/dist/render/segmentQuads.d.ts +13 -0
- package/dist/render/segmentQuads.js +32 -0
- package/dist/render/shaders/flat/lobes.d.ts +27 -0
- package/dist/render/shaders/flat/lobes.js +33 -3
- package/dist/render/shaders/flat/preamble.d.ts +7 -0
- package/dist/render/shaders/flat/preamble.js +24 -1
- package/dist/render/shaders/flat/probeGrid.d.ts +1 -1
- package/dist/render/shaders/flat/probeGrid.js +71 -2
- package/dist/render/shaders/generated/flat.wgsl.d.ts +48 -8
- package/dist/render/shaders/generated/flat.wgsl.js +64 -24
- package/dist/render/shaders/gi/composeField.wgsl.d.ts +56 -0
- package/dist/render/shaders/gi/composeField.wgsl.js +231 -0
- package/dist/render/shaders/gi/marchField.wgsl.d.ts +30 -0
- package/dist/render/shaders/gi/marchField.wgsl.js +141 -0
- package/dist/render/shaders/gi/probeBake.wgsl.d.ts +113 -0
- package/dist/render/shaders/gi/probeBake.wgsl.js +635 -0
- package/dist/render/shaders/gi/probeTrace.wgsl.d.ts +72 -0
- package/dist/render/shaders/gi/probeTrace.wgsl.js +261 -0
- package/dist/render/shaders/gi/probeVolume.wgsl.d.ts +49 -0
- package/dist/render/shaders/gi/probeVolume.wgsl.js +242 -0
- package/dist/render/shaders/gi/sampleField.wgsl.d.ts +32 -0
- package/dist/render/shaders/gi/sampleField.wgsl.js +134 -0
- package/dist/render/shaders/gpudriven/blendRaster.wgsl.d.ts +26 -0
- package/dist/render/shaders/gpudriven/blendRaster.wgsl.js +339 -0
- package/dist/render/shaders/gpudriven/compact.wgsl.d.ts +29 -0
- package/dist/render/shaders/gpudriven/compact.wgsl.js +58 -0
- package/dist/render/shaders/gpudriven/cull.wgsl.d.ts +90 -0
- package/dist/render/shaders/gpudriven/cull.wgsl.js +423 -0
- package/dist/render/shaders/gpudriven/decode.wgsl.d.ts +72 -0
- package/dist/render/shaders/gpudriven/decode.wgsl.js +349 -0
- package/dist/render/shaders/gpudriven/environment.wgsl.d.ts +44 -0
- package/dist/render/shaders/gpudriven/environment.wgsl.js +137 -0
- package/dist/render/shaders/gpudriven/fog.wgsl.d.ts +28 -0
- package/dist/render/shaders/gpudriven/fog.wgsl.js +107 -0
- package/dist/render/shaders/gpudriven/frameBlock.wgsl.d.ts +13 -0
- package/dist/render/shaders/gpudriven/frameBlock.wgsl.js +62 -0
- package/dist/render/shaders/gpudriven/materialBin.wgsl.d.ts +51 -0
- package/dist/render/shaders/gpudriven/materialBin.wgsl.js +112 -0
- package/dist/render/shaders/gpudriven/materialTable.wgsl.d.ts +25 -0
- package/dist/render/shaders/gpudriven/materialTable.wgsl.js +43 -0
- package/dist/render/shaders/gpudriven/meshTransform.wgsl.d.ts +18 -0
- package/dist/render/shaders/gpudriven/meshTransform.wgsl.js +37 -0
- package/dist/render/shaders/gpudriven/present.wgsl.d.ts +43 -0
- package/dist/render/shaders/gpudriven/present.wgsl.js +127 -0
- package/dist/render/shaders/gpudriven/shade.wgsl.d.ts +127 -0
- package/dist/render/shaders/gpudriven/shade.wgsl.js +874 -0
- package/dist/render/shaders/gpudriven/shadow.wgsl.d.ts +44 -0
- package/dist/render/shaders/gpudriven/shadow.wgsl.js +308 -0
- package/dist/render/shaders/gpudriven/visbufferRaster.wgsl.d.ts +28 -0
- package/dist/render/shaders/gpudriven/visbufferRaster.wgsl.js +245 -0
- package/dist/render/shaders/network.wgsl.d.ts +101 -0
- package/dist/render/shaders/network.wgsl.js +206 -0
- package/dist/render/shaders/recon/motion.wgsl.d.ts +44 -0
- package/dist/render/shaders/recon/motion.wgsl.js +96 -0
- package/dist/render/shaders/recon/resolve.wgsl.d.ts +51 -0
- package/dist/render/shaders/recon/resolve.wgsl.js +733 -0
- package/dist/render/temporalAa.js +8 -33
- package/dist/render/textLayout.js +12 -6
- package/dist/render/textRenderer.d.ts +3 -1
- package/dist/render/textRenderer.js +4 -1
- package/dist/render/translucentQueue.d.ts +6 -0
- package/dist/render/translucentQueue.js +11 -0
- package/dist/render/windStreakRenderer.d.ts +2 -1
- package/dist/render/windStreakRenderer.js +3 -1
- package/dist/world/cell.d.ts +63 -0
- package/dist/world/cell.js +181 -0
- package/dist/world/cellStream.d.ts +103 -0
- package/dist/world/cellStream.js +198 -0
- package/dist/world/freeze.d.ts +81 -0
- package/dist/world/freeze.js +114 -0
- package/dist/world/rebase.d.ts +29 -0
- package/dist/world/rebase.js +41 -0
- package/package.json +8 -3
- package/scripts/frames.mjs +92 -0
- package/scripts/gpuCompute.mjs +323 -0
- package/scripts/png.d.mts +16 -0
- package/scripts/png.mjs +25 -0
- package/src/core/loop.ts +19 -2
- package/src/core/storage.ts +5 -0
- package/src/geometry/meshBuilder.ts +5 -1
- package/src/index.ts +261 -4
- package/src/input/input.ts +6 -1
- package/src/math/exact.ts +69 -3
- package/src/math/frustum.ts +52 -3
- package/src/render/backend/api.ts +42 -1
- package/src/render/backend/budget.ts +7 -6
- package/src/render/backend/createRenderer.ts +92 -3
- package/src/render/backend/materialChanges.ts +54 -0
- package/src/render/backend/select.ts +8 -0
- package/src/render/backend/webgl2/renderer.ts +211 -9
- package/src/render/backend/webgpu/buffers.ts +182 -69
- package/src/render/backend/webgpu/fieldCompose.ts +482 -0
- package/src/render/backend/webgpu/giFieldPass.ts +200 -0
- package/src/render/backend/webgpu/gpuDrivenPass.ts +2993 -0
- package/src/render/backend/webgpu/linePass.ts +4 -39
- package/src/render/backend/webgpu/probeBake.ts +588 -0
- package/src/render/backend/webgpu/renderer.ts +1481 -76
- package/src/render/backend/webgpu/scatterPass.ts +15 -1
- package/src/render/backend/webgpu/surfaceTexturePass.ts +158 -88
- package/src/render/causticsRenderer.ts +5 -2
- package/src/render/depthConvention.ts +15 -0
- package/src/render/deviceFeatures.ts +77 -0
- package/src/render/fog.ts +185 -0
- package/src/render/frame/alias.ts +97 -0
- package/src/render/frame/deps.ts +155 -0
- package/src/render/frame/flushGraph.ts +135 -0
- package/src/render/frame/graphSchedule.ts +170 -0
- package/src/render/frame/index.ts +52 -0
- package/src/render/frame/lifetime.ts +61 -0
- package/src/render/frame/passTimings.ts +69 -0
- package/src/render/frame/validate.ts +40 -0
- package/src/render/frame/virtual.ts +91 -0
- package/src/render/gi/chain.ts +225 -0
- package/src/render/gi/denoise.ts +276 -0
- package/src/render/gi/fieldScene.ts +264 -0
- package/src/render/gi/globalField.ts +543 -0
- package/src/render/gi/probeGridFit.ts +89 -0
- package/src/render/gi/probeTrace.ts +143 -0
- package/src/render/gi/probeVolume.ts +288 -0
- package/src/render/gi/reflection.ts +163 -0
- package/src/render/gi/traceField.ts +223 -0
- package/src/render/gi/traceScreen.ts +106 -0
- package/src/render/gpuScene.ts +80 -0
- package/src/render/gpudriven/alphaTest.ts +33 -0
- package/src/render/gpudriven/clusterUpload.ts +123 -0
- package/src/render/gpudriven/clusterWorld.ts +239 -0
- package/src/render/gpudriven/compact.ts +80 -0
- package/src/render/gpudriven/cullClusters.ts +333 -0
- package/src/render/gpudriven/decodeTables.ts +332 -0
- package/src/render/gpudriven/frustum.ts +70 -0
- package/src/render/gpudriven/geometryHarness.ts +51 -0
- package/src/render/gpudriven/hzb.ts +113 -0
- package/src/render/gpudriven/ibl.ts +147 -0
- package/src/render/gpudriven/indirect.ts +89 -0
- package/src/render/gpudriven/instances.ts +234 -0
- package/src/render/gpudriven/lit.ts +329 -0
- package/src/render/gpudriven/lodCut.ts +62 -0
- package/src/render/gpudriven/materialBin.ts +131 -0
- package/src/render/gpudriven/materialTable.ts +164 -0
- package/src/render/gpudriven/pipeline.ts +336 -0
- package/src/render/gpudriven/rangeAlloc.ts +122 -0
- package/src/render/gpudriven/sceneUpload.ts +173 -0
- package/src/render/gpudriven/shadeBins.ts +222 -0
- package/src/render/gpudriven/shadow.ts +285 -0
- package/src/render/gpudriven/shadowCamera.ts +406 -0
- package/src/render/gpudriven/streamScene.ts +575 -0
- package/src/render/gpudriven/surfaceFrame.ts +68 -0
- package/src/render/gpudriven/twoPhase.ts +214 -0
- package/src/render/gpudriven/visbuffer.ts +41 -0
- package/src/render/halfFloat.ts +22 -4
- package/src/render/inference/attentionTiled.ts +132 -0
- package/src/render/inference/denseKernels.ts +369 -0
- package/src/render/inference/device.ts +44 -0
- package/src/render/inference/deviceGraph.ts +39 -0
- package/src/render/inference/fuse.ts +47 -0
- package/src/render/inference/kernelKit.ts +120 -0
- package/src/render/inference/kernels.ts +18 -0
- package/src/render/inference/plan.ts +26 -0
- package/src/render/inference/reuse.ts +79 -0
- package/src/render/inference/runner.ts +204 -0
- package/src/render/inference/schedule.ts +80 -0
- package/src/render/inference/shapeKernels.ts +112 -0
- package/src/render/inference/spatialKernels.ts +220 -0
- package/src/render/inference/splatRaster.wgsl.ts +348 -0
- package/src/render/inference/splatTiles.ts +186 -0
- package/src/render/lineBatch.ts +4 -24
- package/src/render/mesh.ts +46 -1
- package/src/render/pass.ts +155 -10
- package/src/render/prefilterEnvMap.ts +33 -0
- package/src/render/readback.ts +73 -0
- package/src/render/recon/clamp.ts +113 -0
- package/src/render/recon/disocclusion.ts +143 -0
- package/src/render/recon/frameGen.ts +191 -0
- package/src/render/recon/frameSizes.ts +64 -0
- package/src/render/recon/jitter.ts +126 -0
- package/src/render/recon/motionVectors.ts +138 -0
- package/src/render/recon/reproject.ts +179 -0
- package/src/render/recon/resolve.ts +444 -0
- package/src/render/recon/tier.ts +31 -0
- package/src/render/reflectionProbe.ts +34 -0
- package/src/render/renderQuality.ts +87 -0
- package/src/render/screenSpaceReflection.ts +37 -3
- package/src/render/sdfFont.ts +2 -0
- package/src/render/segmentQuads.ts +39 -0
- package/src/render/shaders/flat/lobes.ts +35 -3
- package/src/render/shaders/flat/preamble.ts +25 -1
- package/src/render/shaders/flat/probeGrid.ts +77 -2
- package/src/render/shaders/generated/flat.wgsl.ts +64 -24
- package/src/render/shaders/gi/composeField.wgsl.ts +239 -0
- package/src/render/shaders/gi/marchField.wgsl.ts +146 -0
- package/src/render/shaders/gi/probeBake.wgsl.ts +649 -0
- package/src/render/shaders/gi/probeTrace.wgsl.ts +269 -0
- package/src/render/shaders/gi/probeVolume.wgsl.ts +246 -0
- package/src/render/shaders/gi/sampleField.wgsl.ts +140 -0
- package/src/render/shaders/gpudriven/blendRaster.wgsl.ts +343 -0
- package/src/render/shaders/gpudriven/compact.wgsl.ts +59 -0
- package/src/render/shaders/gpudriven/cull.wgsl.ts +433 -0
- package/src/render/shaders/gpudriven/decode.wgsl.ts +373 -0
- package/src/render/shaders/gpudriven/environment.wgsl.ts +141 -0
- package/src/render/shaders/gpudriven/fog.wgsl.ts +110 -0
- package/src/render/shaders/gpudriven/frameBlock.wgsl.ts +62 -0
- package/src/render/shaders/gpudriven/materialBin.wgsl.ts +116 -0
- package/src/render/shaders/gpudriven/materialTable.wgsl.ts +46 -0
- package/src/render/shaders/gpudriven/meshTransform.wgsl.ts +37 -0
- package/src/render/shaders/gpudriven/present.wgsl.ts +129 -0
- package/src/render/shaders/gpudriven/shade.wgsl.ts +884 -0
- package/src/render/shaders/gpudriven/shadow.wgsl.ts +322 -0
- package/src/render/shaders/gpudriven/visbufferRaster.wgsl.ts +251 -0
- package/src/render/shaders/network.wgsl.ts +238 -0
- package/src/render/shaders/recon/motion.wgsl.ts +101 -0
- package/src/render/shaders/recon/resolve.wgsl.ts +741 -0
- package/src/render/temporalAa.ts +9 -33
- package/src/render/textLayout.ts +12 -6
- package/src/render/textRenderer.ts +5 -2
- package/src/render/translucentQueue.ts +11 -0
- package/src/render/windStreakRenderer.ts +4 -2
- package/src/world/cell.ts +231 -0
- package/src/world/cellStream.ts +278 -0
- package/src/world/freeze.ts +157 -0
- package/src/world/rebase.ts +56 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What counts as a material change: the rule both backends count their `materials` line by.
|
|
3
|
+
*
|
|
4
|
+
* **A material is the shading state a draw reads that is not its own placement**, and the WebGPU
|
|
5
|
+
* backend keeps it in a ring of per-frame slots: a draw copies the open material into a new slot
|
|
6
|
+
* when something has changed it since the last draw, and otherwise shares the slot before it. So
|
|
7
|
+
* the slots a frame takes are its material changes, and that is what the backend's ceiling
|
|
8
|
+
* rations. WebGL2 sets the same state as loose uniforms and has nothing to run out of — but a
|
|
9
|
+
* consumer developing there is building the frame the other backend will ration, so it counts the
|
|
10
|
+
* same changes by the same rule, and draws them all.
|
|
11
|
+
*
|
|
12
|
+
* **What changes it**: a material setter; the start of a frame or of a mesh pass, which reopens
|
|
13
|
+
* the pass's own material; a probe bake, which sets its own and puts the pass's back; and a draw
|
|
14
|
+
* carrying options of its own (`ownsMaterial`), whose state is written for it and restored after
|
|
15
|
+
* it, so that it and the draw after it each open one.
|
|
16
|
+
*
|
|
17
|
+
* What it gives up: a setter called with the value already set still counts, because it takes a
|
|
18
|
+
* slot on the backend that keeps slots, and comparing every field would cost more than the slot.
|
|
19
|
+
*/
|
|
20
|
+
/** What of a draw's own options its material carries. */
|
|
21
|
+
export interface DrawMaterialOptions {
|
|
22
|
+
readonly opacity: number;
|
|
23
|
+
readonly lit: boolean;
|
|
24
|
+
readonly fog: boolean;
|
|
25
|
+
readonly toneMapped: boolean;
|
|
26
|
+
/** Whether the draw refracts this time, which a backend decides by whether it has a snapshot. */
|
|
27
|
+
readonly refracting: boolean;
|
|
28
|
+
}
|
|
29
|
+
/** Whether a draw's options differ from the pass's, so it takes a material and leaves one to restore. */
|
|
30
|
+
export declare function ownsMaterial(options: DrawMaterialOptions): boolean;
|
|
31
|
+
/** Whether the next draw shares the open material or opens a new one. */
|
|
32
|
+
export declare class MaterialChanges {
|
|
33
|
+
/**
|
|
34
|
+
* The slot the open material occupies on a backend that keeps slots, or -1 when the next draw
|
|
35
|
+
* opens one. A backend without slots writes 0 when it opens one.
|
|
36
|
+
*/
|
|
37
|
+
slot: number;
|
|
38
|
+
get open(): boolean;
|
|
39
|
+
/** Something the material holds changed, or a pass reopened it: the next draw opens a new one. */
|
|
40
|
+
dirty(): void;
|
|
41
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What counts as a material change: the rule both backends count their `materials` line by.
|
|
3
|
+
*
|
|
4
|
+
* **A material is the shading state a draw reads that is not its own placement**, and the WebGPU
|
|
5
|
+
* backend keeps it in a ring of per-frame slots: a draw copies the open material into a new slot
|
|
6
|
+
* when something has changed it since the last draw, and otherwise shares the slot before it. So
|
|
7
|
+
* the slots a frame takes are its material changes, and that is what the backend's ceiling
|
|
8
|
+
* rations. WebGL2 sets the same state as loose uniforms and has nothing to run out of — but a
|
|
9
|
+
* consumer developing there is building the frame the other backend will ration, so it counts the
|
|
10
|
+
* same changes by the same rule, and draws them all.
|
|
11
|
+
*
|
|
12
|
+
* **What changes it**: a material setter; the start of a frame or of a mesh pass, which reopens
|
|
13
|
+
* the pass's own material; a probe bake, which sets its own and puts the pass's back; and a draw
|
|
14
|
+
* carrying options of its own (`ownsMaterial`), whose state is written for it and restored after
|
|
15
|
+
* it, so that it and the draw after it each open one.
|
|
16
|
+
*
|
|
17
|
+
* What it gives up: a setter called with the value already set still counts, because it takes a
|
|
18
|
+
* slot on the backend that keeps slots, and comparing every field would cost more than the slot.
|
|
19
|
+
*/
|
|
20
|
+
/** Whether a draw's options differ from the pass's, so it takes a material and leaves one to restore. */
|
|
21
|
+
export function ownsMaterial(options) {
|
|
22
|
+
return (options.opacity < 1 || !options.lit || !options.fog || !options.toneMapped || options.refracting);
|
|
23
|
+
}
|
|
24
|
+
/** Whether the next draw shares the open material or opens a new one. */
|
|
25
|
+
export class MaterialChanges {
|
|
26
|
+
/**
|
|
27
|
+
* The slot the open material occupies on a backend that keeps slots, or -1 when the next draw
|
|
28
|
+
* opens one. A backend without slots writes 0 when it opens one.
|
|
29
|
+
*/
|
|
30
|
+
slot = -1;
|
|
31
|
+
get open() {
|
|
32
|
+
return this.slot >= 0;
|
|
33
|
+
}
|
|
34
|
+
/** Something the material holds changed, or a pass reopened it: the next draw opens a new one. */
|
|
35
|
+
dirty() {
|
|
36
|
+
this.slot = -1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -160,11 +160,19 @@ async function acquireWebGpu(gpu, wantsGpuTiming, shaders, stage) {
|
|
|
160
160
|
* the default still refuses the model, and `WebGPURenderer.createMesh` says so in one line
|
|
161
161
|
* rather than letting the driver say it a hundred times.
|
|
162
162
|
*/
|
|
163
|
+
/*
|
|
164
|
+
* **And the storage binding ceiling, for the same reason one level down.** A buffer that can be
|
|
165
|
+
* created is not a buffer that can be bound: `maxStorageBufferBindingSize` defaults to 128 MiB
|
|
166
|
+
* against this machine's 4 GiB, and the GPU-driven pipeline binds its whole vertex buffer as
|
|
167
|
+
* one storage binding. The voxel sandbox's port at a radius of ten asked for 262,807,200 bytes
|
|
168
|
+
* and came back as a hundred device warnings and a world with no terrain.
|
|
169
|
+
*/
|
|
163
170
|
const required = {};
|
|
164
171
|
for (const limit of [
|
|
165
172
|
'maxSampledTexturesPerShaderStage',
|
|
166
173
|
'maxSamplersPerShaderStage',
|
|
167
174
|
'maxBufferSize',
|
|
175
|
+
'maxStorageBufferBindingSize',
|
|
168
176
|
]) {
|
|
169
177
|
const ceiling = adapter.limits[limit];
|
|
170
178
|
if (typeof ceiling === 'number' && ceiling > 0)
|
|
@@ -4,6 +4,7 @@ import type { Camera } from '../../camera.ts';
|
|
|
4
4
|
import type { PickHit, PickableSource } from '../../pickable.ts';
|
|
5
5
|
import type { ReflectiveSurface } from '../../screenSpaceReflection.ts';
|
|
6
6
|
import type { DecalProjector } from '../../decalProjector.ts';
|
|
7
|
+
import type { FieldSource } from '../../gi/globalField.ts';
|
|
7
8
|
import type { Bounds } from '../../../math/bounds.ts';
|
|
8
9
|
import type { ComputeDefinition, ComputeHandle } from '../../compute.ts';
|
|
9
10
|
import type { PassDefinition, PassHandle } from '../../pass.ts';
|
|
@@ -1067,6 +1068,13 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
1067
1068
|
reversedDepth: boolean;
|
|
1068
1069
|
/** `GL_DEPTH_REMAP * camera.viewProjection`, rebuilt once a frame. */
|
|
1069
1070
|
private readonly sceneViewProj;
|
|
1071
|
+
/**
|
|
1072
|
+
* The same matrix with clip y negated, for the six faces of a probe.
|
|
1073
|
+
*
|
|
1074
|
+
* Its own buffer rather than `sceneViewProj`, because `cubeFaceProjection` reads what
|
|
1075
|
+
* `sceneMatrix` just wrote and the two would be the same array.
|
|
1076
|
+
*/
|
|
1077
|
+
private readonly cubeFaceViewProj;
|
|
1070
1078
|
/**
|
|
1071
1079
|
* One buffer per shadow matrix that outlives a call, and that is not fussiness.
|
|
1072
1080
|
*
|
|
@@ -1210,6 +1218,29 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
1210
1218
|
* visible, which is a hole in the world. `OcclusionBuffer` carries the rest of the reasoning.
|
|
1211
1219
|
*/
|
|
1212
1220
|
addOccluder(min: ArrayLike<number>, max: ArrayLike<number>, model: ReadonlyMat4): void;
|
|
1221
|
+
/**
|
|
1222
|
+
* Declare a baked distance field that indirect light may be traced against.
|
|
1223
|
+
*
|
|
1224
|
+
* **Recorded by nothing on this backend, and that is the refusal rather than an oversight.**
|
|
1225
|
+
* Composing the world's field and marching probes through it is compute, and WebGL2 has no
|
|
1226
|
+
* compute stage — `INDIRECT_LIGHT_WEBGL2_REFUSAL` says so once a frame-loop when
|
|
1227
|
+
* `quality.indirectLight` is on. The method exists here because `RendererApi` is this class's
|
|
1228
|
+
* shape, and a consumer that declares its fields unconditionally must not have to ask which
|
|
1229
|
+
* backend it got: this is a no-op for the same reason `addOccluder` is one when the profile
|
|
1230
|
+
* asked for no occlusion buffer.
|
|
1231
|
+
*
|
|
1232
|
+
* The field is in the model matrix's own space and the matrix must carry uniform scale only.
|
|
1233
|
+
* `composeGlobalField` gives the reason: a distance is not preserved by a non-uniform scale.
|
|
1234
|
+
*/
|
|
1235
|
+
addDistanceField(_field: FieldSource, _model: ReadonlyMat4, _albedo?: ArrayLike<number>): void;
|
|
1236
|
+
/** Forget the fields declared this frame. A no-op here, as `addDistanceField` is. */
|
|
1237
|
+
clearDistanceFields(): void;
|
|
1238
|
+
/** Never measured here, because nothing is composed. See `addDistanceField`. */
|
|
1239
|
+
get distanceFieldMs(): number | null;
|
|
1240
|
+
/** Never traced here either, so there is no refresh to time. See `addDistanceField`. */
|
|
1241
|
+
get indirectBakeMs(): number | null;
|
|
1242
|
+
/** Nothing to read, for the same reason. A consumer may call it unconditionally. */
|
|
1243
|
+
readDistanceFieldTimings(): void;
|
|
1213
1244
|
/**
|
|
1214
1245
|
* Whether a mesh is entirely behind the occluders declared this frame.
|
|
1215
1246
|
*
|
|
@@ -2052,6 +2083,17 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
2052
2083
|
beginPlanarReflection(source: Camera, planeY: number, clearColor: Vec3): Camera | null;
|
|
2053
2084
|
endPlanarReflection(): void;
|
|
2054
2085
|
get aspect(): number;
|
|
2086
|
+
/**
|
|
2087
|
+
* The size the world is drawn at, which on this backend is always the drawing buffer.
|
|
2088
|
+
*
|
|
2089
|
+
* **Here so that a contributed pass has one question to ask on both backends.** WebGPU can draw
|
|
2090
|
+
* the world smaller than the canvas and let its composite enlarge it — `quality.reconstruction`
|
|
2091
|
+
* — and a pass filling a target of its own has to follow that size or draw a picture the frame
|
|
2092
|
+
* pass clips. This backend has no compute stage and no reconstruction, so the answer never moves;
|
|
2093
|
+
* a pass that reads it is correct on both, and one that reads `canvas.width` is correct on one.
|
|
2094
|
+
*/
|
|
2095
|
+
get sceneWidth(): number;
|
|
2096
|
+
get sceneHeight(): number;
|
|
2055
2097
|
/**
|
|
2056
2098
|
* Point rendering back at the frame's own target, whole.
|
|
2057
2099
|
*
|
|
@@ -2609,6 +2651,20 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
2609
2651
|
*/
|
|
2610
2652
|
private readonly budget;
|
|
2611
2653
|
private readonly drawBudget;
|
|
2654
|
+
/**
|
|
2655
|
+
* Every line the other backend declares, in its order and with none of its ceilings.
|
|
2656
|
+
*
|
|
2657
|
+
* **Counted after the same guards**, so one scene reports one number on both: the verbs each
|
|
2658
|
+
* ask once they are past the checks that make them draw nothing on either backend — a panel
|
|
2659
|
+
* with no alpha, a string with no glyphs, a beam with no strength, a calm wind — and a material
|
|
2660
|
+
* change is counted by the rule both share (`materialChanges.ts`). `webgpu/renderer.test.ts`
|
|
2661
|
+
* runs one scene through both and compares every line.
|
|
2662
|
+
*/
|
|
2663
|
+
private readonly materialBudget;
|
|
2664
|
+
/** Whether the next mesh draw shares the open material or opens one, by the rule both count. */
|
|
2665
|
+
private readonly materials;
|
|
2666
|
+
/** A mesh draw: counted as a material change when something has changed the material since. */
|
|
2667
|
+
private takeMaterial;
|
|
2612
2668
|
/**
|
|
2613
2669
|
* Declared here and never asked, because this backend builds none.
|
|
2614
2670
|
*
|
|
@@ -2620,6 +2676,19 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
2620
2676
|
* being compared against should also be zero once the other backend's cache is warm.
|
|
2621
2677
|
*/
|
|
2622
2678
|
private readonly bindGroupBudget;
|
|
2679
|
+
private readonly shadowDrawBudget;
|
|
2680
|
+
private readonly scatterDepthBudget;
|
|
2681
|
+
private readonly waterBudget;
|
|
2682
|
+
private readonly lightVolumeBudget;
|
|
2683
|
+
private readonly windStreakBudget;
|
|
2684
|
+
private readonly flockBudget;
|
|
2685
|
+
private readonly boltBudget;
|
|
2686
|
+
private readonly causticsBudget;
|
|
2687
|
+
private readonly textBudget;
|
|
2688
|
+
private readonly sdfTextBudget;
|
|
2689
|
+
private readonly lineBudget;
|
|
2690
|
+
/** The other backend's panel ceiling, reported here as a count with none. */
|
|
2691
|
+
private readonly panelBudget;
|
|
2623
2692
|
/** What the frame just drawn asked for. See `budget.ts`, and the note on `budget` above. */
|
|
2624
2693
|
get frameBudget(): FrameBudget;
|
|
2625
2694
|
/**
|
|
@@ -2677,6 +2746,8 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
2677
2746
|
* from one `RenderQuality` — see `OIT_MULTISAMPLE_REFUSAL` for why it is a constant and not two
|
|
2678
2747
|
* literals kept in step by hand.
|
|
2679
2748
|
*/
|
|
2749
|
+
/** Said once rather than every frame, as the translucent set's own refusal is. */
|
|
2750
|
+
private indirectLightRefused;
|
|
2680
2751
|
private refuseOitMultisampled;
|
|
2681
2752
|
beginFrame(clearColor: Vec3): void;
|
|
2682
2753
|
/**
|
|
@@ -2794,7 +2865,15 @@ export declare class WebGL2Renderer implements RendererApi {
|
|
|
2794
2865
|
* rebuilding vertex data every frame. Reset to white after the call, so a caller that
|
|
2795
2866
|
* passes one cannot leak it into the next draw.
|
|
2796
2867
|
*/
|
|
2797
|
-
tint?: Vec3 | null
|
|
2868
|
+
tint?: Vec3 | null,
|
|
2869
|
+
/**
|
|
2870
|
+
* Where the mesh was last frame, which this backend takes and ignores.
|
|
2871
|
+
*
|
|
2872
|
+
* Accepted rather than absent so that one scene draws through both renderers unchanged — the
|
|
2873
|
+
* parity rule this repository is built on. Reconstruction is WebGPU's, having no compute stage
|
|
2874
|
+
* here, so there is no motion target for this to be written into.
|
|
2875
|
+
*/
|
|
2876
|
+
_previousModel?: ReadonlyMat4 | null): void;
|
|
2798
2877
|
/**
|
|
2799
2878
|
* Draw a mesh you can see through, in the same material as everything else by default.
|
|
2800
2879
|
*
|