@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.
Files changed (428) hide show
  1. package/CHANGELOG.json +122 -0
  2. package/NOTICE +20 -0
  3. package/README.md +1 -1
  4. package/dist/core/loop.js +18 -2
  5. package/dist/core/storage.js +5 -0
  6. package/dist/geometry/meshBuilder.d.ts +1 -1
  7. package/dist/geometry/meshBuilder.js +6 -2
  8. package/dist/index.d.ts +69 -4
  9. package/dist/index.js +112 -2
  10. package/dist/input/input.js +6 -1
  11. package/dist/math/exact.d.ts +13 -3
  12. package/dist/math/exact.js +68 -3
  13. package/dist/math/frustum.d.ts +17 -2
  14. package/dist/math/frustum.js +24 -0
  15. package/dist/render/backend/api.d.ts +34 -1
  16. package/dist/render/backend/api.js +22 -1
  17. package/dist/render/backend/budget.d.ts +7 -6
  18. package/dist/render/backend/budget.js +7 -6
  19. package/dist/render/backend/createRenderer.d.ts +57 -0
  20. package/dist/render/backend/createRenderer.js +51 -2
  21. package/dist/render/backend/materialChanges.d.ts +41 -0
  22. package/dist/render/backend/materialChanges.js +38 -0
  23. package/dist/render/backend/select.js +8 -0
  24. package/dist/render/backend/webgl2/renderer.d.ts +80 -1
  25. package/dist/render/backend/webgl2/renderer.js +208 -10
  26. package/dist/render/backend/webgpu/buffers.d.ts +20 -1
  27. package/dist/render/backend/webgpu/buffers.js +116 -58
  28. package/dist/render/backend/webgpu/fieldCompose.d.ts +156 -0
  29. package/dist/render/backend/webgpu/fieldCompose.js +396 -0
  30. package/dist/render/backend/webgpu/giFieldPass.d.ts +66 -0
  31. package/dist/render/backend/webgpu/giFieldPass.js +137 -0
  32. package/dist/render/backend/webgpu/gpuDrivenPass.d.ts +728 -0
  33. package/dist/render/backend/webgpu/gpuDrivenPass.js +2473 -0
  34. package/dist/render/backend/webgpu/linePass.d.ts +4 -14
  35. package/dist/render/backend/webgpu/linePass.js +4 -33
  36. package/dist/render/backend/webgpu/probeBake.d.ts +148 -0
  37. package/dist/render/backend/webgpu/probeBake.js +493 -0
  38. package/dist/render/backend/webgpu/renderer.d.ts +379 -24
  39. package/dist/render/backend/webgpu/renderer.js +1369 -76
  40. package/dist/render/backend/webgpu/scatterPass.js +15 -1
  41. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +19 -9
  42. package/dist/render/backend/webgpu/surfaceTexturePass.js +58 -32
  43. package/dist/render/causticsRenderer.d.ts +3 -1
  44. package/dist/render/causticsRenderer.js +4 -1
  45. package/dist/render/depthConvention.d.ts +12 -0
  46. package/dist/render/depthConvention.js +14 -0
  47. package/dist/render/deviceFeatures.d.ts +32 -0
  48. package/dist/render/deviceFeatures.js +41 -0
  49. package/dist/render/fog.d.ts +79 -0
  50. package/dist/render/fog.js +138 -0
  51. package/dist/render/frame/alias.d.ts +30 -0
  52. package/dist/render/frame/alias.js +61 -0
  53. package/dist/render/frame/deps.d.ts +37 -0
  54. package/dist/render/frame/deps.js +122 -0
  55. package/dist/render/frame/flushGraph.d.ts +43 -0
  56. package/dist/render/frame/flushGraph.js +84 -0
  57. package/dist/render/frame/graphSchedule.d.ts +49 -0
  58. package/dist/render/frame/graphSchedule.js +120 -0
  59. package/dist/render/frame/index.d.ts +15 -0
  60. package/dist/render/frame/index.js +8 -0
  61. package/dist/render/frame/lifetime.d.ts +24 -0
  62. package/dist/render/frame/lifetime.js +36 -0
  63. package/dist/render/frame/passTimings.d.ts +42 -0
  64. package/dist/render/frame/passTimings.js +38 -0
  65. package/dist/render/frame/validate.d.ts +15 -0
  66. package/dist/render/frame/validate.js +22 -0
  67. package/dist/render/frame/virtual.d.ts +44 -0
  68. package/dist/render/frame/virtual.js +61 -0
  69. package/dist/render/gi/chain.d.ts +82 -0
  70. package/dist/render/gi/chain.js +135 -0
  71. package/dist/render/gi/denoise.d.ts +114 -0
  72. package/dist/render/gi/denoise.js +169 -0
  73. package/dist/render/gi/fieldScene.d.ts +125 -0
  74. package/dist/render/gi/fieldScene.js +219 -0
  75. package/dist/render/gi/globalField.d.ts +157 -0
  76. package/dist/render/gi/globalField.js +373 -0
  77. package/dist/render/gi/probeGridFit.d.ts +24 -0
  78. package/dist/render/gi/probeGridFit.js +71 -0
  79. package/dist/render/gi/probeTrace.d.ts +82 -0
  80. package/dist/render/gi/probeTrace.js +128 -0
  81. package/dist/render/gi/probeVolume.d.ts +136 -0
  82. package/dist/render/gi/probeVolume.js +191 -0
  83. package/dist/render/gi/reflection.d.ts +73 -0
  84. package/dist/render/gi/reflection.js +109 -0
  85. package/dist/render/gi/traceField.d.ts +91 -0
  86. package/dist/render/gi/traceField.js +129 -0
  87. package/dist/render/gi/traceScreen.d.ts +68 -0
  88. package/dist/render/gi/traceScreen.js +82 -0
  89. package/dist/render/gpuScene.d.ts +38 -0
  90. package/dist/render/gpuScene.js +41 -0
  91. package/dist/render/gpudriven/alphaTest.d.ts +28 -0
  92. package/dist/render/gpudriven/alphaTest.js +32 -0
  93. package/dist/render/gpudriven/clusterUpload.d.ts +59 -0
  94. package/dist/render/gpudriven/clusterUpload.js +75 -0
  95. package/dist/render/gpudriven/clusterWorld.d.ts +57 -0
  96. package/dist/render/gpudriven/clusterWorld.js +155 -0
  97. package/dist/render/gpudriven/compact.d.ts +51 -0
  98. package/dist/render/gpudriven/compact.js +68 -0
  99. package/dist/render/gpudriven/cullClusters.d.ts +129 -0
  100. package/dist/render/gpudriven/cullClusters.js +237 -0
  101. package/dist/render/gpudriven/decodeTables.d.ts +64 -0
  102. package/dist/render/gpudriven/decodeTables.js +219 -0
  103. package/dist/render/gpudriven/frustum.d.ts +25 -0
  104. package/dist/render/gpudriven/frustum.js +59 -0
  105. package/dist/render/gpudriven/geometryHarness.d.ts +15 -0
  106. package/dist/render/gpudriven/geometryHarness.js +31 -0
  107. package/dist/render/gpudriven/hzb.d.ts +60 -0
  108. package/dist/render/gpudriven/hzb.js +97 -0
  109. package/dist/render/gpudriven/ibl.d.ts +85 -0
  110. package/dist/render/gpudriven/ibl.js +129 -0
  111. package/dist/render/gpudriven/indirect.d.ts +67 -0
  112. package/dist/render/gpudriven/indirect.js +77 -0
  113. package/dist/render/gpudriven/instances.d.ts +43 -0
  114. package/dist/render/gpudriven/instances.js +172 -0
  115. package/dist/render/gpudriven/lit.d.ts +165 -0
  116. package/dist/render/gpudriven/lit.js +165 -0
  117. package/dist/render/gpudriven/lodCut.d.ts +28 -0
  118. package/dist/render/gpudriven/lodCut.js +38 -0
  119. package/dist/render/gpudriven/materialBin.d.ts +60 -0
  120. package/dist/render/gpudriven/materialBin.js +108 -0
  121. package/dist/render/gpudriven/materialTable.d.ts +88 -0
  122. package/dist/render/gpudriven/materialTable.js +115 -0
  123. package/dist/render/gpudriven/pipeline.d.ts +135 -0
  124. package/dist/render/gpudriven/pipeline.js +237 -0
  125. package/dist/render/gpudriven/rangeAlloc.d.ts +50 -0
  126. package/dist/render/gpudriven/rangeAlloc.js +112 -0
  127. package/dist/render/gpudriven/sceneUpload.d.ts +96 -0
  128. package/dist/render/gpudriven/sceneUpload.js +115 -0
  129. package/dist/render/gpudriven/shadeBins.d.ts +92 -0
  130. package/dist/render/gpudriven/shadeBins.js +182 -0
  131. package/dist/render/gpudriven/shadow.d.ts +136 -0
  132. package/dist/render/gpudriven/shadow.js +224 -0
  133. package/dist/render/gpudriven/shadowCamera.d.ts +87 -0
  134. package/dist/render/gpudriven/shadowCamera.js +345 -0
  135. package/dist/render/gpudriven/streamScene.d.ts +194 -0
  136. package/dist/render/gpudriven/streamScene.js +459 -0
  137. package/dist/render/gpudriven/surfaceFrame.d.ts +25 -0
  138. package/dist/render/gpudriven/surfaceFrame.js +51 -0
  139. package/dist/render/gpudriven/twoPhase.d.ts +122 -0
  140. package/dist/render/gpudriven/twoPhase.js +160 -0
  141. package/dist/render/gpudriven/visbuffer.d.ts +25 -0
  142. package/dist/render/gpudriven/visbuffer.js +37 -0
  143. package/dist/render/halfFloat.d.ts +10 -0
  144. package/dist/render/halfFloat.js +23 -4
  145. package/dist/render/inference/attentionTiled.d.ts +27 -0
  146. package/dist/render/inference/attentionTiled.js +117 -0
  147. package/dist/render/inference/denseKernels.d.ts +29 -0
  148. package/dist/render/inference/denseKernels.js +312 -0
  149. package/dist/render/inference/device.d.ts +21 -0
  150. package/dist/render/inference/device.js +32 -0
  151. package/dist/render/inference/deviceGraph.d.ts +34 -0
  152. package/dist/render/inference/deviceGraph.js +17 -0
  153. package/dist/render/inference/fuse.d.ts +15 -0
  154. package/dist/render/inference/fuse.js +37 -0
  155. package/dist/render/inference/kernelKit.d.ts +52 -0
  156. package/dist/render/inference/kernelKit.js +70 -0
  157. package/dist/render/inference/kernels.d.ts +3 -0
  158. package/dist/render/inference/kernels.js +11 -0
  159. package/dist/render/inference/plan.d.ts +13 -0
  160. package/dist/render/inference/plan.js +18 -0
  161. package/dist/render/inference/reuse.d.ts +39 -0
  162. package/dist/render/inference/reuse.js +65 -0
  163. package/dist/render/inference/runner.d.ts +31 -0
  164. package/dist/render/inference/runner.js +175 -0
  165. package/dist/render/inference/schedule.d.ts +39 -0
  166. package/dist/render/inference/schedule.js +59 -0
  167. package/dist/render/inference/shapeKernels.d.ts +10 -0
  168. package/dist/render/inference/shapeKernels.js +80 -0
  169. package/dist/render/inference/spatialKernels.d.ts +21 -0
  170. package/dist/render/inference/spatialKernels.js +179 -0
  171. package/dist/render/inference/splatRaster.wgsl.d.ts +75 -0
  172. package/dist/render/inference/splatRaster.wgsl.js +337 -0
  173. package/dist/render/inference/splatTiles.d.ts +79 -0
  174. package/dist/render/inference/splatTiles.js +161 -0
  175. package/dist/render/lineBatch.d.ts +2 -5
  176. package/dist/render/lineBatch.js +4 -24
  177. package/dist/render/mesh.d.ts +4 -0
  178. package/dist/render/mesh.js +45 -1
  179. package/dist/render/pass.d.ts +145 -8
  180. package/dist/render/prefilterEnvMap.d.ts +22 -0
  181. package/dist/render/prefilterEnvMap.js +31 -0
  182. package/dist/render/readback.d.ts +30 -0
  183. package/dist/render/readback.js +47 -0
  184. package/dist/render/recon/clamp.d.ts +36 -0
  185. package/dist/render/recon/clamp.js +92 -0
  186. package/dist/render/recon/disocclusion.d.ts +60 -0
  187. package/dist/render/recon/disocclusion.js +109 -0
  188. package/dist/render/recon/frameGen.d.ts +81 -0
  189. package/dist/render/recon/frameGen.js +150 -0
  190. package/dist/render/recon/frameSizes.d.ts +34 -0
  191. package/dist/render/recon/frameSizes.js +58 -0
  192. package/dist/render/recon/jitter.d.ts +60 -0
  193. package/dist/render/recon/jitter.js +118 -0
  194. package/dist/render/recon/motionVectors.d.ts +55 -0
  195. package/dist/render/recon/motionVectors.js +107 -0
  196. package/dist/render/recon/reproject.d.ts +41 -0
  197. package/dist/render/recon/reproject.js +131 -0
  198. package/dist/render/recon/resolve.d.ts +90 -0
  199. package/dist/render/recon/resolve.js +313 -0
  200. package/dist/render/recon/tier.d.ts +24 -0
  201. package/dist/render/recon/tier.js +8 -0
  202. package/dist/render/reflectionProbe.d.ts +26 -0
  203. package/dist/render/reflectionProbe.js +33 -0
  204. package/dist/render/renderQuality.d.ts +69 -0
  205. package/dist/render/renderQuality.js +22 -0
  206. package/dist/render/screenSpaceReflection.d.ts +23 -0
  207. package/dist/render/screenSpaceReflection.js +22 -3
  208. package/dist/render/sdfFont.js +2 -0
  209. package/dist/render/segmentQuads.d.ts +13 -0
  210. package/dist/render/segmentQuads.js +32 -0
  211. package/dist/render/shaders/flat/lobes.d.ts +27 -0
  212. package/dist/render/shaders/flat/lobes.js +33 -3
  213. package/dist/render/shaders/flat/preamble.d.ts +7 -0
  214. package/dist/render/shaders/flat/preamble.js +24 -1
  215. package/dist/render/shaders/flat/probeGrid.d.ts +1 -1
  216. package/dist/render/shaders/flat/probeGrid.js +71 -2
  217. package/dist/render/shaders/generated/flat.wgsl.d.ts +48 -8
  218. package/dist/render/shaders/generated/flat.wgsl.js +64 -24
  219. package/dist/render/shaders/gi/composeField.wgsl.d.ts +56 -0
  220. package/dist/render/shaders/gi/composeField.wgsl.js +231 -0
  221. package/dist/render/shaders/gi/marchField.wgsl.d.ts +30 -0
  222. package/dist/render/shaders/gi/marchField.wgsl.js +141 -0
  223. package/dist/render/shaders/gi/probeBake.wgsl.d.ts +113 -0
  224. package/dist/render/shaders/gi/probeBake.wgsl.js +635 -0
  225. package/dist/render/shaders/gi/probeTrace.wgsl.d.ts +72 -0
  226. package/dist/render/shaders/gi/probeTrace.wgsl.js +261 -0
  227. package/dist/render/shaders/gi/probeVolume.wgsl.d.ts +49 -0
  228. package/dist/render/shaders/gi/probeVolume.wgsl.js +242 -0
  229. package/dist/render/shaders/gi/sampleField.wgsl.d.ts +32 -0
  230. package/dist/render/shaders/gi/sampleField.wgsl.js +134 -0
  231. package/dist/render/shaders/gpudriven/blendRaster.wgsl.d.ts +26 -0
  232. package/dist/render/shaders/gpudriven/blendRaster.wgsl.js +339 -0
  233. package/dist/render/shaders/gpudriven/compact.wgsl.d.ts +29 -0
  234. package/dist/render/shaders/gpudriven/compact.wgsl.js +58 -0
  235. package/dist/render/shaders/gpudriven/cull.wgsl.d.ts +90 -0
  236. package/dist/render/shaders/gpudriven/cull.wgsl.js +423 -0
  237. package/dist/render/shaders/gpudriven/decode.wgsl.d.ts +72 -0
  238. package/dist/render/shaders/gpudriven/decode.wgsl.js +349 -0
  239. package/dist/render/shaders/gpudriven/environment.wgsl.d.ts +44 -0
  240. package/dist/render/shaders/gpudriven/environment.wgsl.js +137 -0
  241. package/dist/render/shaders/gpudriven/fog.wgsl.d.ts +28 -0
  242. package/dist/render/shaders/gpudriven/fog.wgsl.js +107 -0
  243. package/dist/render/shaders/gpudriven/frameBlock.wgsl.d.ts +13 -0
  244. package/dist/render/shaders/gpudriven/frameBlock.wgsl.js +62 -0
  245. package/dist/render/shaders/gpudriven/materialBin.wgsl.d.ts +51 -0
  246. package/dist/render/shaders/gpudriven/materialBin.wgsl.js +112 -0
  247. package/dist/render/shaders/gpudriven/materialTable.wgsl.d.ts +25 -0
  248. package/dist/render/shaders/gpudriven/materialTable.wgsl.js +43 -0
  249. package/dist/render/shaders/gpudriven/meshTransform.wgsl.d.ts +18 -0
  250. package/dist/render/shaders/gpudriven/meshTransform.wgsl.js +37 -0
  251. package/dist/render/shaders/gpudriven/present.wgsl.d.ts +43 -0
  252. package/dist/render/shaders/gpudriven/present.wgsl.js +127 -0
  253. package/dist/render/shaders/gpudriven/shade.wgsl.d.ts +127 -0
  254. package/dist/render/shaders/gpudriven/shade.wgsl.js +874 -0
  255. package/dist/render/shaders/gpudriven/shadow.wgsl.d.ts +44 -0
  256. package/dist/render/shaders/gpudriven/shadow.wgsl.js +308 -0
  257. package/dist/render/shaders/gpudriven/visbufferRaster.wgsl.d.ts +28 -0
  258. package/dist/render/shaders/gpudriven/visbufferRaster.wgsl.js +245 -0
  259. package/dist/render/shaders/network.wgsl.d.ts +101 -0
  260. package/dist/render/shaders/network.wgsl.js +206 -0
  261. package/dist/render/shaders/recon/motion.wgsl.d.ts +44 -0
  262. package/dist/render/shaders/recon/motion.wgsl.js +96 -0
  263. package/dist/render/shaders/recon/resolve.wgsl.d.ts +51 -0
  264. package/dist/render/shaders/recon/resolve.wgsl.js +733 -0
  265. package/dist/render/temporalAa.js +8 -33
  266. package/dist/render/textLayout.js +12 -6
  267. package/dist/render/textRenderer.d.ts +3 -1
  268. package/dist/render/textRenderer.js +4 -1
  269. package/dist/render/translucentQueue.d.ts +6 -0
  270. package/dist/render/translucentQueue.js +11 -0
  271. package/dist/render/windStreakRenderer.d.ts +2 -1
  272. package/dist/render/windStreakRenderer.js +3 -1
  273. package/dist/world/cell.d.ts +63 -0
  274. package/dist/world/cell.js +181 -0
  275. package/dist/world/cellStream.d.ts +103 -0
  276. package/dist/world/cellStream.js +198 -0
  277. package/dist/world/freeze.d.ts +81 -0
  278. package/dist/world/freeze.js +114 -0
  279. package/dist/world/rebase.d.ts +29 -0
  280. package/dist/world/rebase.js +41 -0
  281. package/package.json +8 -3
  282. package/scripts/frames.mjs +92 -0
  283. package/scripts/gpuCompute.mjs +323 -0
  284. package/scripts/png.d.mts +16 -0
  285. package/scripts/png.mjs +25 -0
  286. package/src/core/loop.ts +19 -2
  287. package/src/core/storage.ts +5 -0
  288. package/src/geometry/meshBuilder.ts +5 -1
  289. package/src/index.ts +246 -4
  290. package/src/input/input.ts +6 -1
  291. package/src/math/exact.ts +69 -3
  292. package/src/math/frustum.ts +52 -3
  293. package/src/render/backend/api.ts +42 -1
  294. package/src/render/backend/budget.ts +7 -6
  295. package/src/render/backend/createRenderer.ts +92 -3
  296. package/src/render/backend/materialChanges.ts +54 -0
  297. package/src/render/backend/select.ts +8 -0
  298. package/src/render/backend/webgl2/renderer.ts +211 -9
  299. package/src/render/backend/webgpu/buffers.ts +182 -69
  300. package/src/render/backend/webgpu/fieldCompose.ts +482 -0
  301. package/src/render/backend/webgpu/giFieldPass.ts +200 -0
  302. package/src/render/backend/webgpu/gpuDrivenPass.ts +2993 -0
  303. package/src/render/backend/webgpu/linePass.ts +4 -39
  304. package/src/render/backend/webgpu/probeBake.ts +588 -0
  305. package/src/render/backend/webgpu/renderer.ts +1481 -76
  306. package/src/render/backend/webgpu/scatterPass.ts +15 -1
  307. package/src/render/backend/webgpu/surfaceTexturePass.ts +63 -36
  308. package/src/render/causticsRenderer.ts +5 -2
  309. package/src/render/depthConvention.ts +15 -0
  310. package/src/render/deviceFeatures.ts +77 -0
  311. package/src/render/fog.ts +185 -0
  312. package/src/render/frame/alias.ts +97 -0
  313. package/src/render/frame/deps.ts +155 -0
  314. package/src/render/frame/flushGraph.ts +135 -0
  315. package/src/render/frame/graphSchedule.ts +170 -0
  316. package/src/render/frame/index.ts +52 -0
  317. package/src/render/frame/lifetime.ts +61 -0
  318. package/src/render/frame/passTimings.ts +69 -0
  319. package/src/render/frame/validate.ts +40 -0
  320. package/src/render/frame/virtual.ts +91 -0
  321. package/src/render/gi/chain.ts +225 -0
  322. package/src/render/gi/denoise.ts +276 -0
  323. package/src/render/gi/fieldScene.ts +264 -0
  324. package/src/render/gi/globalField.ts +543 -0
  325. package/src/render/gi/probeGridFit.ts +89 -0
  326. package/src/render/gi/probeTrace.ts +143 -0
  327. package/src/render/gi/probeVolume.ts +288 -0
  328. package/src/render/gi/reflection.ts +163 -0
  329. package/src/render/gi/traceField.ts +223 -0
  330. package/src/render/gi/traceScreen.ts +106 -0
  331. package/src/render/gpuScene.ts +80 -0
  332. package/src/render/gpudriven/alphaTest.ts +33 -0
  333. package/src/render/gpudriven/clusterUpload.ts +123 -0
  334. package/src/render/gpudriven/clusterWorld.ts +239 -0
  335. package/src/render/gpudriven/compact.ts +80 -0
  336. package/src/render/gpudriven/cullClusters.ts +333 -0
  337. package/src/render/gpudriven/decodeTables.ts +332 -0
  338. package/src/render/gpudriven/frustum.ts +70 -0
  339. package/src/render/gpudriven/geometryHarness.ts +51 -0
  340. package/src/render/gpudriven/hzb.ts +113 -0
  341. package/src/render/gpudriven/ibl.ts +147 -0
  342. package/src/render/gpudriven/indirect.ts +89 -0
  343. package/src/render/gpudriven/instances.ts +234 -0
  344. package/src/render/gpudriven/lit.ts +329 -0
  345. package/src/render/gpudriven/lodCut.ts +62 -0
  346. package/src/render/gpudriven/materialBin.ts +131 -0
  347. package/src/render/gpudriven/materialTable.ts +164 -0
  348. package/src/render/gpudriven/pipeline.ts +336 -0
  349. package/src/render/gpudriven/rangeAlloc.ts +122 -0
  350. package/src/render/gpudriven/sceneUpload.ts +173 -0
  351. package/src/render/gpudriven/shadeBins.ts +222 -0
  352. package/src/render/gpudriven/shadow.ts +285 -0
  353. package/src/render/gpudriven/shadowCamera.ts +406 -0
  354. package/src/render/gpudriven/streamScene.ts +575 -0
  355. package/src/render/gpudriven/surfaceFrame.ts +68 -0
  356. package/src/render/gpudriven/twoPhase.ts +214 -0
  357. package/src/render/gpudriven/visbuffer.ts +41 -0
  358. package/src/render/halfFloat.ts +22 -4
  359. package/src/render/inference/attentionTiled.ts +132 -0
  360. package/src/render/inference/denseKernels.ts +369 -0
  361. package/src/render/inference/device.ts +44 -0
  362. package/src/render/inference/deviceGraph.ts +39 -0
  363. package/src/render/inference/fuse.ts +47 -0
  364. package/src/render/inference/kernelKit.ts +120 -0
  365. package/src/render/inference/kernels.ts +18 -0
  366. package/src/render/inference/plan.ts +26 -0
  367. package/src/render/inference/reuse.ts +79 -0
  368. package/src/render/inference/runner.ts +204 -0
  369. package/src/render/inference/schedule.ts +80 -0
  370. package/src/render/inference/shapeKernels.ts +112 -0
  371. package/src/render/inference/spatialKernels.ts +220 -0
  372. package/src/render/inference/splatRaster.wgsl.ts +348 -0
  373. package/src/render/inference/splatTiles.ts +186 -0
  374. package/src/render/lineBatch.ts +4 -24
  375. package/src/render/mesh.ts +46 -1
  376. package/src/render/pass.ts +155 -10
  377. package/src/render/prefilterEnvMap.ts +33 -0
  378. package/src/render/readback.ts +73 -0
  379. package/src/render/recon/clamp.ts +113 -0
  380. package/src/render/recon/disocclusion.ts +143 -0
  381. package/src/render/recon/frameGen.ts +191 -0
  382. package/src/render/recon/frameSizes.ts +64 -0
  383. package/src/render/recon/jitter.ts +126 -0
  384. package/src/render/recon/motionVectors.ts +138 -0
  385. package/src/render/recon/reproject.ts +179 -0
  386. package/src/render/recon/resolve.ts +444 -0
  387. package/src/render/recon/tier.ts +31 -0
  388. package/src/render/reflectionProbe.ts +34 -0
  389. package/src/render/renderQuality.ts +87 -0
  390. package/src/render/screenSpaceReflection.ts +37 -3
  391. package/src/render/sdfFont.ts +2 -0
  392. package/src/render/segmentQuads.ts +39 -0
  393. package/src/render/shaders/flat/lobes.ts +35 -3
  394. package/src/render/shaders/flat/preamble.ts +25 -1
  395. package/src/render/shaders/flat/probeGrid.ts +77 -2
  396. package/src/render/shaders/generated/flat.wgsl.ts +64 -24
  397. package/src/render/shaders/gi/composeField.wgsl.ts +239 -0
  398. package/src/render/shaders/gi/marchField.wgsl.ts +146 -0
  399. package/src/render/shaders/gi/probeBake.wgsl.ts +649 -0
  400. package/src/render/shaders/gi/probeTrace.wgsl.ts +269 -0
  401. package/src/render/shaders/gi/probeVolume.wgsl.ts +246 -0
  402. package/src/render/shaders/gi/sampleField.wgsl.ts +140 -0
  403. package/src/render/shaders/gpudriven/blendRaster.wgsl.ts +343 -0
  404. package/src/render/shaders/gpudriven/compact.wgsl.ts +59 -0
  405. package/src/render/shaders/gpudriven/cull.wgsl.ts +433 -0
  406. package/src/render/shaders/gpudriven/decode.wgsl.ts +373 -0
  407. package/src/render/shaders/gpudriven/environment.wgsl.ts +141 -0
  408. package/src/render/shaders/gpudriven/fog.wgsl.ts +110 -0
  409. package/src/render/shaders/gpudriven/frameBlock.wgsl.ts +62 -0
  410. package/src/render/shaders/gpudriven/materialBin.wgsl.ts +116 -0
  411. package/src/render/shaders/gpudriven/materialTable.wgsl.ts +46 -0
  412. package/src/render/shaders/gpudriven/meshTransform.wgsl.ts +37 -0
  413. package/src/render/shaders/gpudriven/present.wgsl.ts +129 -0
  414. package/src/render/shaders/gpudriven/shade.wgsl.ts +884 -0
  415. package/src/render/shaders/gpudriven/shadow.wgsl.ts +322 -0
  416. package/src/render/shaders/gpudriven/visbufferRaster.wgsl.ts +251 -0
  417. package/src/render/shaders/network.wgsl.ts +238 -0
  418. package/src/render/shaders/recon/motion.wgsl.ts +101 -0
  419. package/src/render/shaders/recon/resolve.wgsl.ts +741 -0
  420. package/src/render/temporalAa.ts +9 -33
  421. package/src/render/textLayout.ts +12 -6
  422. package/src/render/textRenderer.ts +5 -2
  423. package/src/render/translucentQueue.ts +11 -0
  424. package/src/render/windStreakRenderer.ts +4 -2
  425. package/src/world/cell.ts +231 -0
  426. package/src/world/cellStream.ts +278 -0
  427. package/src/world/freeze.ts +157 -0
  428. package/src/world/rebase.ts +56 -0
@@ -0,0 +1,238 @@
1
+ /**
2
+ * The one network evaluator the device has, in single or half precision.
3
+ *
4
+ * **Every network the engine evaluates on a device goes through this text.** A DriftTexture's
5
+ * decode interpreter reads its networks from uniform tables; reconstruction's refinement tier and
6
+ * capture's priors read theirs from storage buffers, in half precision where the device has it.
7
+ * Those are different bindings and the same arithmetic, so the arithmetic is written once and the
8
+ * weights are reached through a function the including module defines — the arrangement
9
+ * `shadow.wgsl.ts` uses for its map. A second evaluator would be a second set of numerical
10
+ * conventions to keep in step, which `@driftengine/texture`'s `inference.ts` names as the thing this
11
+ * engine refuses.
12
+ *
13
+ * **The reference is `evalNetwork`, and in half precision `evalNetworkHalf`**, operation for
14
+ * operation: the weighted inputs summed in index order, then the bias, then the rectifier on hidden
15
+ * layers and nothing on the output. The weights are laid out as `NNET` stores them — each layer's
16
+ * matrix row by row by output, then its biases.
17
+ *
18
+ * **Half precision needs `enable f16;` at the top of the including module** and a device created
19
+ * with `shader-f16`. It is chosen per network by its consumer, and `activationBound` is what that
20
+ * consumer asks first: past 65,504 the format has no finite value.
21
+ *
22
+ * `scripts/gpu-parity.mjs` runs both instantiations against the references, and
23
+ * `scripts/wgsl-handwritten.test.mjs` has `naga` validate them without a device.
24
+ */
25
+
26
+ export interface NetworkWgslOptions {
27
+ /** The prefix every function this defines carries, so a module can include more than one. */
28
+ readonly name: string;
29
+ /** The scalar the network computes in. `f16` needs `enable f16;` in the including module. */
30
+ readonly scalar: 'f32' | 'f16';
31
+ /** The widest layer, which is the length of the function-scope arrays the layers pass through. */
32
+ readonly width: number;
33
+ /** The most hidden layers a network may have here. */
34
+ readonly hidden: number;
35
+ }
36
+
37
+ /**
38
+ * The evaluator, as text.
39
+ *
40
+ * Defines `fn <name>Eval(first, inputs, hidden, widths, outputs, input) -> array<S, width>`:
41
+ * `first` is where the network's weights start, `widths` its hidden widths, and `input` its first
42
+ * `inputs` values. The including module defines `fn <name>Weight(index: u32) -> S`.
43
+ *
44
+ * **Every count is clamped to what the arrays hold.** A loader refuses a network wider or deeper
45
+ * than this was instantiated for; the clamps are what keep a malformed one from indexing past a
46
+ * function-scope array, which the language would otherwise clamp silently and differently.
47
+ */
48
+ export function networkWgsl(options: NetworkWgslOptions): string {
49
+ const { name, scalar: s, width: w, hidden: h } = options;
50
+ return /* wgsl */ `
51
+ fn ${name}Eval(
52
+ first: u32,
53
+ inputs: u32,
54
+ hidden: u32,
55
+ widths: array<u32, ${h}>,
56
+ outputs: u32,
57
+ input: array<${s}, ${w}>,
58
+ ) -> array<${s}, ${w}> {
59
+ var current = input;
60
+ var next: array<${s}, ${w}>;
61
+ var at = first;
62
+ var previous = min(inputs, ${w}u);
63
+ let layers = min(hidden, ${h}u);
64
+ for (var layer = 0u; layer < layers; layer = layer + 1u) {
65
+ let width = min(widths[layer], ${w}u);
66
+ for (var o = 0u; o < width; o = o + 1u) {
67
+ var total = ${s}(0.0);
68
+ for (var i = 0u; i < previous; i = i + 1u) {
69
+ total = total + current[i] * ${name}Weight(at + o * previous + i);
70
+ }
71
+ /* Rectified linear on hidden layers and nothing on the output, as inference.ts insists. */
72
+ next[o] = max(total + ${name}Weight(at + width * previous + o), ${s}(0.0));
73
+ }
74
+ at = at + previous * width + width;
75
+ previous = width;
76
+ current = next;
77
+ }
78
+ var result: array<${s}, ${w}>;
79
+ let count = min(outputs, ${w}u);
80
+ for (var o = 0u; o < count; o = o + 1u) {
81
+ var total = ${s}(0.0);
82
+ for (var i = 0u; i < previous; i = i + 1u) {
83
+ total = total + current[i] * ${name}Weight(at + o * previous + i);
84
+ }
85
+ result[o] = total + ${name}Weight(at + count * previous + o);
86
+ }
87
+ return result;
88
+ }
89
+ `;
90
+ }
91
+
92
+ /** A network's shape, which the fixed form bakes in. The same shape `evalNetwork` takes. */
93
+ export interface FixedNetworkShape {
94
+ readonly inputs: number;
95
+ readonly hidden: readonly number[];
96
+ readonly outputs: number;
97
+ }
98
+
99
+ export interface FixedNetworkWgslOptions {
100
+ /** The prefix every function this defines carries, as for the variable form. */
101
+ readonly name: string;
102
+ readonly scalar: 'f32' | 'f16';
103
+ readonly shape: FixedNetworkShape;
104
+ /** Where the network's weights start in what `<name>Weight` reads. */
105
+ readonly first?: number;
106
+ }
107
+
108
+ /**
109
+ * The same evaluator with its shape fixed when the pipeline is built, for a consumer whose network
110
+ * is known then — reconstruction's refinement tier, capture's priors.
111
+ *
112
+ * **Nine to fourteen times faster, measured**, 2026-09-19 on an RX 9070 XT, once per pixel of a
113
+ * 1280×720 frame: a network of 11-8-3 in 0.031 ms against the variable form's 0.286, and 11-16-16-3
114
+ * in 0.076 against 1.09 (`tools/recon-train/budget.ts`). The variable form indexes function-scope
115
+ * arrays with counts it reads at run time, which a compiler cannot keep in registers; with every
116
+ * count a constant the loops unroll and the arrays are registers. The DriftTexture interpreter keeps
117
+ * the variable form, because its networks change per material and its pipeline does not.
118
+ *
119
+ * **The arithmetic is the variable form's, in the same order** — the weighted inputs summed in index
120
+ * order, then the bias, then the rectifier on hidden layers and nothing on the output, over weights
121
+ * laid out as `NNET` stores them — so `evalNetwork` and `evalNetworkHalf` are its references too,
122
+ * and `gpu-parity.mjs` holds it to them the same way.
123
+ *
124
+ * Defines `fn <name>Eval(input: array<S, inputs>) -> array<S, outputs>`. The including module
125
+ * defines `fn <name>Weight(index: u32) -> S`, as for the variable form.
126
+ */
127
+ export function networkFixedWgsl(options: FixedNetworkWgslOptions): string {
128
+ const { name, scalar: s, shape } = options;
129
+ const layers = [shape.inputs, ...shape.hidden, shape.outputs];
130
+ let at = options.first ?? 0;
131
+ let body = '';
132
+ let previous = 'input';
133
+ for (let layer = 1; layer < layers.length; layer += 1) {
134
+ const width = layers[layer] as number;
135
+ const fanIn = layers[layer - 1] as number;
136
+ const output = layer === layers.length - 1;
137
+ const target = output ? 'result' : `layer${layer}`;
138
+ const bias = at + width * fanIn;
139
+ const value = output
140
+ ? `total + ${name}Weight(${bias}u + o)`
141
+ : `max(total + ${name}Weight(${bias}u + o), ${s}(0.0))`;
142
+ body += `
143
+ var ${target}: array<${s}, ${width}>;
144
+ for (var o = 0u; o < ${width}u; o = o + 1u) {
145
+ var total = ${s}(0.0);
146
+ for (var i = 0u; i < ${fanIn}u; i = i + 1u) {
147
+ total = total + ${previous}[i] * ${name}Weight(${at}u + o * ${fanIn}u + i);
148
+ }
149
+ ${target}[o] = ${value};
150
+ }`;
151
+ at = bias + width;
152
+ previous = target;
153
+ }
154
+ return /* wgsl */ `
155
+ fn ${name}Eval(input: array<${s}, ${shape.inputs}>) -> array<${s}, ${shape.outputs}> {${body}
156
+ return result;
157
+ }
158
+ `;
159
+ }
160
+
161
+ /**
162
+ * An entry point that evaluates one fixed-shape network over many inputs, so a harness can hold
163
+ * the fixed form to `evalNetwork` and `evalNetworkHalf` as it holds the variable one. Inputs and
164
+ * outputs cross as `f32`, as the variable form's parity entry point has them.
165
+ */
166
+ export function networkFixedParityWgsl(scalar: 'f32' | 'f16', shape: FixedNetworkShape): string {
167
+ return /* wgsl */ `${scalar === 'f16' ? 'enable f16;\n' : ''}
168
+ @group(0) @binding(0) var<storage, read> weights: array<${scalar}>;
169
+ @group(0) @binding(1) var<storage, read> inputs: array<f32>;
170
+ @group(0) @binding(2) var<storage, read_write> outputs: array<f32>;
171
+
172
+ fn parityWeight(index: u32) -> ${scalar} {
173
+ return weights[index];
174
+ }
175
+ ${networkFixedWgsl({ name: 'parity', scalar, shape })}
176
+ @compute @workgroup_size(64)
177
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
178
+ let count = arrayLength(&inputs) / ${shape.inputs}u;
179
+ if (id.x >= count) { return; }
180
+ var input: array<${scalar}, ${shape.inputs}>;
181
+ for (var i = 0u; i < ${shape.inputs}u; i = i + 1u) {
182
+ input[i] = ${scalar}(inputs[id.x * ${shape.inputs}u + i]);
183
+ }
184
+ let result = parityEval(input);
185
+ for (var o = 0u; o < ${shape.outputs}u; o = o + 1u) {
186
+ outputs[id.x * ${shape.outputs}u + o] = f32(result[o]);
187
+ }
188
+ }
189
+ `;
190
+ }
191
+
192
+ /** The widest network the parity entry points evaluate. */
193
+ export const NETWORK_PARITY_WIDTH = 16;
194
+ /** The deepest. */
195
+ export const NETWORK_PARITY_HIDDEN = 4;
196
+ /** Unsigned words per case: first, inputs, hidden count, outputs, then the hidden widths. */
197
+ export const NETWORK_CASE_WORDS = 4 + NETWORK_PARITY_HIDDEN;
198
+
199
+ /**
200
+ * An entry point that evaluates one network per invocation from storage buffers, so a harness can
201
+ * compare the device with `evalNetwork` or `evalNetworkHalf`.
202
+ *
203
+ * Inputs and outputs cross as `f32` whatever the network computes in: a half-precision network's
204
+ * inputs are converted on the way in, as `evalNetworkHalf` rounds them, and its outputs widen on
205
+ * the way out, which loses nothing.
206
+ */
207
+ export function networkParityWgsl(scalar: 'f32' | 'f16'): string {
208
+ const w = NETWORK_PARITY_WIDTH;
209
+ return /* wgsl */ `${scalar === 'f16' ? 'enable f16;\n' : ''}
210
+ @group(0) @binding(0) var<storage, read> cases: array<u32>;
211
+ @group(0) @binding(1) var<storage, read> weights: array<${scalar}>;
212
+ @group(0) @binding(2) var<storage, read> inputs: array<f32>;
213
+ @group(0) @binding(3) var<storage, read_write> outputs: array<f32>;
214
+
215
+ fn parityWeight(index: u32) -> ${scalar} {
216
+ return weights[index];
217
+ }
218
+ ${networkWgsl({ name: 'parity', scalar, width: w, hidden: NETWORK_PARITY_HIDDEN })}
219
+ @compute @workgroup_size(64)
220
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
221
+ let count = arrayLength(&cases) / ${NETWORK_CASE_WORDS}u;
222
+ if (id.x >= count) { return; }
223
+ let at = id.x * ${NETWORK_CASE_WORDS}u;
224
+ var widths: array<u32, ${NETWORK_PARITY_HIDDEN}>;
225
+ for (var layer = 0u; layer < ${NETWORK_PARITY_HIDDEN}u; layer = layer + 1u) {
226
+ widths[layer] = cases[at + 4u + layer];
227
+ }
228
+ var input: array<${scalar}, ${w}>;
229
+ for (var i = 0u; i < ${w}u; i = i + 1u) {
230
+ input[i] = ${scalar}(inputs[id.x * ${w}u + i]);
231
+ }
232
+ let result = parityEval(cases[at], cases[at + 1u], cases[at + 2u], widths, cases[at + 3u], input);
233
+ for (var o = 0u; o < ${w}u; o = o + 1u) {
234
+ outputs[id.x * ${w}u + o] = f32(result[o]);
235
+ }
236
+ }
237
+ `;
238
+ }
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Where a drawn surface was last frame, written into the reconstruction's motion target.
3
+ *
4
+ * **A pass of its own rather than a second output on every material.** The alternative is a second
5
+ * colour attachment on every generated fragment stage, which `ARCHITECTURE.md` §1 prices at 196,910
6
+ * gzipped bytes for one flag — and it would be paid by every consumer, including the ones who never
7
+ * reconstruct anything. This draws only the meshes a caller said had moved, with one small shader
8
+ * over the position buffer alone.
9
+ *
10
+ * **What a pixel carries**: the offset from where it is now to where its surface was, in the uv the
11
+ * resolve measures in; the view depth it had then, which is what the disocclusion compares against
12
+ * last frame's depth; and a flag. `recon/resolve.ts`'s `historyWeight` is the reader, and a texel
13
+ * this pass did not write is a zero flag, which means *derive the camera's motion from the depth* —
14
+ * so a scene that says nothing about its movers is exactly the scene this pass never ran for.
15
+ *
16
+ * **The rasterisation matrix is handed over whole, and that is deliberate.** The scene is drawn by
17
+ * shaders `naga` generated, every one of which ends its vertex stage with `gl_Position.y = -y`, and
18
+ * `CLIP_CORRECTION` carries a negation to cancel it — §3 rows 56 and 57. This shader is hand
19
+ * written and has no such negation, so rather than reason about halves of that pair per draw, the
20
+ * renderer multiplies the two together once a frame and passes the product. The vertex stage then
21
+ * has one job: put the position exactly where the scene put it, so the depth test compares like
22
+ * with like.
23
+ *
24
+ * **The motion itself is measured from the *unjittered* matrices**, which is the whole of §3 row
25
+ * 121: the history stands for a picture of the scene as it would have been drawn with no jitter, so
26
+ * a motion vector that carried the jitter difference would move every sample by a fraction of a
27
+ * pixel in a pattern that repeats with the jitter period — shimmer, diagnosed as anything but its
28
+ * cause.
29
+ */
30
+
31
+ /** Floats in the per-frame block: three matrices. */
32
+ export const MOTION_FRAME_FLOATS = 48;
33
+
34
+ /**
35
+ * Bytes a draw's own block takes.
36
+ *
37
+ * Two matrices is 128, and a dynamic uniform offset must be a multiple of 256 — the same alignment
38
+ * §3 row 50's neighbours are about. So each draw takes a whole 256 and half of it is padding, which
39
+ * is the cheaper half of the trade against a bind group per draw inside the frame loop.
40
+ */
41
+ export const MOTION_DRAW_STRIDE = 256;
42
+
43
+ /** Floats a draw actually writes inside that stride. */
44
+ export const MOTION_DRAW_FLOATS = 32;
45
+
46
+ /** The motion target's format. Half float holds a uv to a hundredth of a pixel and a view depth. */
47
+ export const MOTION_TARGET_FORMAT: GPUTextureFormat = 'rgba16float';
48
+
49
+ export const RECON_MOTION_WGSL = /* wgsl */ `
50
+ struct MotionFrame {
51
+ /* The scene's own clip transform, with the generated shaders' y negation already folded in. */
52
+ raster: mat4x4<f32>,
53
+ /* This frame's and last frame's view-projections, unjittered, in the matrices' own convention. */
54
+ viewProj: mat4x4<f32>,
55
+ previousViewProj: mat4x4<f32>,
56
+ }
57
+
58
+ struct MotionDraw {
59
+ model: mat4x4<f32>,
60
+ previousModel: mat4x4<f32>,
61
+ }
62
+
63
+ @group(0) @binding(0) var<uniform> frame: MotionFrame;
64
+ @group(0) @binding(1) var<uniform> draw: MotionDraw;
65
+
66
+ struct Varyings {
67
+ @builtin(position) clip: vec4<f32>,
68
+ /* Clip positions rather than uv: an interpolator divides by w for us, so dividing these by their
69
+ own interpolated w in the fragment stage is the perspective-correct answer at every pixel. */
70
+ @location(0) now: vec4<f32>,
71
+ @location(1) was: vec4<f32>,
72
+ }
73
+
74
+ @vertex
75
+ fn motionVert(@location(0) position: vec3<f32>) -> Varyings {
76
+ let world = draw.model * vec4<f32>(position, 1.0);
77
+ let wasWorld = draw.previousModel * vec4<f32>(position, 1.0);
78
+ var out: Varyings;
79
+ out.clip = frame.raster * world;
80
+ out.now = frame.viewProj * world;
81
+ out.was = frame.previousViewProj * wasWorld;
82
+ return out;
83
+ }
84
+
85
+ /* Normalised device coordinates to the uv the resolve measures in: v increases upward, as the
86
+ references' images do, and the accessor that reads this target is what flips the texture's rows. */
87
+ fn motionUv(clip: vec4<f32>) -> vec2<f32> {
88
+ return clip.xy / clip.w * 0.5 + vec2<f32>(0.5);
89
+ }
90
+
91
+ @fragment
92
+ fn motionFrag(in: Varyings) -> @location(0) vec4<f32> {
93
+ /*
94
+ * A surface behind last frame's eye has a w that is not positive, and there is no uv for it. The
95
+ * flag stays set: the disocclusion refuses a depth that is not positive, so the resolve drops the
96
+ * history rather than reading it from wherever a divide by a negative w would have pointed.
97
+ */
98
+ let offset = select(vec2<f32>(0.0), motionUv(in.was) - motionUv(in.now), in.was.w > 0.0);
99
+ return vec4<f32>(offset, in.was.w, 1.0);
100
+ }
101
+ `;