@driftengine/core 3.63.0 → 4.1.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 +69 -4
- package/dist/index.js +112 -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 +19 -9
- package/dist/render/backend/webgpu/surfaceTexturePass.js +58 -32
- 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 +246 -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 +63 -36
- 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
|
@@ -103,8 +103,27 @@ export const VERTEX_LAYOUT: readonly VertexAttribute[] = [
|
|
|
103
103
|
|
|
104
104
|
/** Geometry on the device, with the buffers bound in layout order. */
|
|
105
105
|
export interface GpuMesh {
|
|
106
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* The buffers a draw binds, in the order `vertexBufferLayouts` describes them.
|
|
108
|
+
*
|
|
109
|
+
* **Two, and the first is interleaved** — every attribute this mesh actually supplied, woven
|
|
110
|
+
* into one stride — while the second holds one value per *absent* optional attribute at a stride
|
|
111
|
+
* of zero. It is emphatically not one buffer per attribute, which this comment said until
|
|
112
|
+
* 2026-09-17 and which cost the motion pass an afternoon: a pipeline built to that description
|
|
113
|
+
* reads a position out of every twelve bytes of an interleaved vertex, draws geometry that is
|
|
114
|
+
* not the mesh, and fails no validation at all.
|
|
115
|
+
*/
|
|
107
116
|
readonly vertexBuffers: readonly GPUBuffer[];
|
|
117
|
+
/**
|
|
118
|
+
* Bytes a vertex takes in the first of those buffers.
|
|
119
|
+
*
|
|
120
|
+
* Kept because it is a function of which *optional* attributes this mesh supplied, so it differs
|
|
121
|
+
* between two meshes drawn by the same pipeline — and a pass that reads only the position still
|
|
122
|
+
* has to step by the whole of it. `submitMesh` never needs it, the generated pipelines being
|
|
123
|
+
* keyed by the same `present` map that decides it; anything drawing a mesh through a shader of
|
|
124
|
+
* its own does.
|
|
125
|
+
*/
|
|
126
|
+
readonly vertexStride: number;
|
|
108
127
|
readonly indexBuffer: GPUBuffer;
|
|
109
128
|
readonly indexCount: number;
|
|
110
129
|
/**
|
|
@@ -332,53 +351,24 @@ export function createGpuMeshIncremental(
|
|
|
332
351
|
Math.max(1, Math.ceil(vertexCount / verticesPerStep)) +
|
|
333
352
|
Math.max(1, Math.ceil(data.indices.length / indicesPerStep));
|
|
334
353
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
source[vertex * width + component] ?? 0;
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
fieldOffset += width;
|
|
352
|
-
}
|
|
353
|
-
device.queue.writeBuffer(
|
|
354
|
-
vertices,
|
|
355
|
-
from * stride,
|
|
356
|
-
interleaved,
|
|
357
|
-
from * step,
|
|
358
|
-
(to - from) * step,
|
|
359
|
-
);
|
|
360
|
-
taken += 1;
|
|
361
|
-
if (taken < totalSteps) yield;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
for (let from = 0; from < data.indices.length; from += indicesPerStep) {
|
|
365
|
-
const to = Math.min(from + indicesPerStep, data.indices.length);
|
|
366
|
-
device.queue.writeBuffer(indexBuffer, from * indexWidth, data.indices, from, to - from);
|
|
367
|
-
taken += 1;
|
|
368
|
-
if (taken < totalSteps) yield;
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
uploaded = true;
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
const mesh: GpuMesh = {
|
|
375
|
-
vertexBuffers: [vertices, constants],
|
|
354
|
+
/*
|
|
355
|
+
* **The mesh is assembled out here, by functions of its own, and that is the fix for a copy
|
|
356
|
+
* nobody named.** It was an object literal in this scope, and its `complete` getter shared this
|
|
357
|
+
* scope's context with the upload generator and the `filter` above, which both read `data` — V8
|
|
358
|
+
* gives every closure in a scope one context — so a getter returning a boolean held the whole
|
|
359
|
+
* `MeshData` and the interleaved rows for as long as the mesh lived. The voxel sandbox's forward
|
|
360
|
+
* path held 2,058 MB of ArrayBuffers at radius 32 against the second pipeline's 368.
|
|
361
|
+
* `meshRetention.test.ts` holds it: a mesh keeps its buffers, and a dynamic one its rows.
|
|
362
|
+
*/
|
|
363
|
+
const progress = { uploaded: false };
|
|
364
|
+
const mesh = gpuMeshOf({
|
|
365
|
+
vertices,
|
|
366
|
+
constants,
|
|
376
367
|
indexBuffer,
|
|
368
|
+
stride,
|
|
377
369
|
indexCount: data.indices.length,
|
|
378
370
|
bounds,
|
|
379
|
-
|
|
380
|
-
return uploaded;
|
|
381
|
-
},
|
|
371
|
+
progress,
|
|
382
372
|
hasTangents: data.tangents !== undefined,
|
|
383
373
|
isSkinned: data.joints !== undefined,
|
|
384
374
|
hasChannel: data.channel !== undefined,
|
|
@@ -393,37 +383,160 @@ export function createGpuMeshIncremental(
|
|
|
393
383
|
),
|
|
394
384
|
update: !dynamic
|
|
395
385
|
? null
|
|
396
|
-
: (
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
386
|
+
: dynamicUpdate(interleaved, vertices, bounds, vertexCount, step, positionField, normalField),
|
|
387
|
+
});
|
|
388
|
+
|
|
389
|
+
const job: UploadJob = {
|
|
390
|
+
data,
|
|
391
|
+
interleaved,
|
|
392
|
+
device,
|
|
393
|
+
supplied,
|
|
394
|
+
vertices,
|
|
395
|
+
indexBuffer,
|
|
396
|
+
vertexCount,
|
|
397
|
+
step,
|
|
398
|
+
stride,
|
|
399
|
+
verticesPerStep,
|
|
400
|
+
indicesPerStep,
|
|
401
|
+
totalSteps,
|
|
402
|
+
progress,
|
|
403
|
+
};
|
|
404
|
+
return { mesh, upload: uploadSteps(job) };
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* What an upload reads, held by the upload alone and let go when it finishes — so a caller that
|
|
409
|
+
* keeps its iterator, as a streamer keeps the handle it was given, keeps nothing through it.
|
|
410
|
+
*/
|
|
411
|
+
interface UploadJob {
|
|
412
|
+
data: MeshData | null;
|
|
413
|
+
interleaved: Float32Array | null;
|
|
414
|
+
readonly device: GPUDevice;
|
|
415
|
+
readonly supplied: readonly VertexAttribute[];
|
|
416
|
+
readonly vertices: GPUBuffer;
|
|
417
|
+
readonly indexBuffer: GPUBuffer;
|
|
418
|
+
readonly vertexCount: number;
|
|
419
|
+
readonly step: number;
|
|
420
|
+
readonly stride: number;
|
|
421
|
+
readonly verticesPerStep: number;
|
|
422
|
+
readonly indicesPerStep: number;
|
|
423
|
+
readonly totalSteps: number;
|
|
424
|
+
readonly progress: { uploaded: boolean };
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
function* uploadSteps(job: UploadJob): Generator<void, void, void> {
|
|
428
|
+
const { device, supplied, vertices, indexBuffer, vertexCount, step, stride } = job;
|
|
429
|
+
let taken = 0;
|
|
430
|
+
for (let from = 0; from < vertexCount; from += job.verticesPerStep) {
|
|
431
|
+
const data = job.data as MeshData;
|
|
432
|
+
const interleaved = job.interleaved as Float32Array;
|
|
433
|
+
const to = Math.min(from + job.verticesPerStep, vertexCount);
|
|
434
|
+
let fieldOffset = 0;
|
|
435
|
+
for (const attribute of supplied) {
|
|
436
|
+
const source = data[attribute.name as keyof MeshData] as Float32Array;
|
|
437
|
+
const width = attribute.components;
|
|
438
|
+
for (let vertex = from; vertex < to; vertex++) {
|
|
439
|
+
for (let component = 0; component < width; component++) {
|
|
440
|
+
interleaved[vertex * step + fieldOffset + component] =
|
|
441
|
+
source[vertex * width + component] ?? 0;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
fieldOffset += width;
|
|
445
|
+
}
|
|
446
|
+
device.queue.writeBuffer(vertices, from * stride, interleaved, from * step, (to - from) * step);
|
|
447
|
+
taken += 1;
|
|
448
|
+
if (taken < job.totalSteps) yield;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
const indices = (job.data as MeshData).indices;
|
|
452
|
+
const indexWidth = indices.BYTES_PER_ELEMENT;
|
|
453
|
+
for (let from = 0; from < indices.length; from += job.indicesPerStep) {
|
|
454
|
+
const to = Math.min(from + job.indicesPerStep, indices.length);
|
|
455
|
+
device.queue.writeBuffer(indexBuffer, from * indexWidth, indices, from, to - from);
|
|
456
|
+
taken += 1;
|
|
457
|
+
if (taken < job.totalSteps) yield;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
job.data = null;
|
|
461
|
+
job.interleaved = null;
|
|
462
|
+
job.progress.uploaded = true;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
/** The handle, made where it can see only what it hands out. */
|
|
466
|
+
function gpuMeshOf(parts: {
|
|
467
|
+
readonly vertices: GPUBuffer;
|
|
468
|
+
readonly constants: GPUBuffer;
|
|
469
|
+
readonly indexBuffer: GPUBuffer;
|
|
470
|
+
readonly stride: number;
|
|
471
|
+
readonly indexCount: number;
|
|
472
|
+
readonly bounds: Bounds;
|
|
473
|
+
readonly progress: { readonly uploaded: boolean };
|
|
474
|
+
readonly hasTangents: boolean;
|
|
475
|
+
readonly isSkinned: boolean;
|
|
476
|
+
readonly hasChannel: boolean;
|
|
477
|
+
readonly morph: MorphTexture | null;
|
|
478
|
+
readonly update: GpuMesh['update'];
|
|
479
|
+
}): GpuMesh {
|
|
480
|
+
const { vertices, constants, indexBuffer, progress } = parts;
|
|
481
|
+
return {
|
|
482
|
+
vertexBuffers: [vertices, constants],
|
|
483
|
+
vertexStride: parts.stride,
|
|
484
|
+
indexBuffer,
|
|
485
|
+
indexCount: parts.indexCount,
|
|
486
|
+
bounds: parts.bounds,
|
|
487
|
+
get complete(): boolean {
|
|
488
|
+
return progress.uploaded;
|
|
489
|
+
},
|
|
490
|
+
hasTangents: parts.hasTangents,
|
|
491
|
+
isSkinned: parts.isSkinned,
|
|
492
|
+
hasChannel: parts.hasChannel,
|
|
493
|
+
morph: parts.morph,
|
|
494
|
+
update: parts.update,
|
|
419
495
|
dispose(): void {
|
|
420
496
|
vertices.destroy();
|
|
421
497
|
constants.destroy();
|
|
422
498
|
indexBuffer.destroy();
|
|
423
499
|
},
|
|
424
500
|
};
|
|
501
|
+
}
|
|
425
502
|
|
|
426
|
-
|
|
503
|
+
/**
|
|
504
|
+
* A dynamic mesh's `update`, which keeps the interleaved rows and nothing else: it rewrites the
|
|
505
|
+
* positions and normals in them and uploads the whole buffer, so the other attributes it does not
|
|
506
|
+
* receive have to still be there.
|
|
507
|
+
*/
|
|
508
|
+
function dynamicUpdate(
|
|
509
|
+
interleaved: Float32Array,
|
|
510
|
+
vertices: GPUBuffer,
|
|
511
|
+
bounds: Bounds,
|
|
512
|
+
vertexCount: number,
|
|
513
|
+
step: number,
|
|
514
|
+
positionField: number,
|
|
515
|
+
normalField: number,
|
|
516
|
+
): NonNullable<GpuMesh['update']> {
|
|
517
|
+
return (target: GPUDevice, positions: Float32Array, normals?: Float32Array): void => {
|
|
518
|
+
if (positions.length !== vertexCount * 3) {
|
|
519
|
+
throw new Error(
|
|
520
|
+
`this mesh has ${vertexCount} vertices and the update has ${positions.length / 3}. ` +
|
|
521
|
+
"A mesh's vertex count is fixed at creation: the index buffer, the pipeline and " +
|
|
522
|
+
'every other attribute are sized against it.',
|
|
523
|
+
);
|
|
524
|
+
}
|
|
525
|
+
/* Everything that decides whether this is on screen starts from the bounds, so a cloth
|
|
526
|
+
that blew sideways out of its original box would be culled while still visible. */
|
|
527
|
+
boundsOfPositions(positions, bounds);
|
|
528
|
+
for (let vertex = 0; vertex < vertexCount; vertex++) {
|
|
529
|
+
const at = vertex * step;
|
|
530
|
+
interleaved[at + positionField] = positions[vertex * 3] ?? 0;
|
|
531
|
+
interleaved[at + positionField + 1] = positions[vertex * 3 + 1] ?? 0;
|
|
532
|
+
interleaved[at + positionField + 2] = positions[vertex * 3 + 2] ?? 0;
|
|
533
|
+
if (normals === undefined) continue;
|
|
534
|
+
interleaved[at + normalField] = normals[vertex * 3] ?? 0;
|
|
535
|
+
interleaved[at + normalField + 1] = normals[vertex * 3 + 1] ?? 0;
|
|
536
|
+
interleaved[at + normalField + 2] = normals[vertex * 3 + 2] ?? 0;
|
|
537
|
+
}
|
|
538
|
+
target.queue.writeBuffer(vertices, 0, interleaved);
|
|
539
|
+
};
|
|
427
540
|
}
|
|
428
541
|
|
|
429
542
|
/**
|