@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,138 @@
1
+ /**
2
+ * Where each pixel's surface was last frame.
3
+ *
4
+ * **A motion vector is the offset from this frame's pixel to where its surface was, in the
5
+ * coordinates of an unjittered frame**, and every step of the reconstruction after this reads it
6
+ * that way. The history is a picture of the unjittered scene; a vector that carried either frame's
7
+ * jitter would look every sample up a fraction of a pixel away, in a pattern that repeats with the
8
+ * jitter period — which reads as shimmer and is diagnosed as everything except its cause. So the
9
+ * jitter is taken out of where a pixel was *observed* (`unjitteredUv`) and never put into the
10
+ * matrices a vector is built from.
11
+ *
12
+ * **Two sources, one meaning.** Most of a frame did not move: its motion is the camera's, derived in
13
+ * the resolve from depth through the reprojection matrix both renderers already build
14
+ * (`cameraMotion`). A draw that states where it was last frame — a previous model matrix, a
15
+ * previous skin palette — is drawn again into a motion target, and there the vector is the
16
+ * difference of the vertex's two clip positions (`objectMotion`). A skinned vertex's previous
17
+ * position comes from its previous *pose*, not from its previous model matrix: a character standing
18
+ * still and swinging an arm has the same model both frames.
19
+ *
20
+ * **What this does not follow**: wind bending (`channelBend`) and morph targets move vertices by the
21
+ * clock and by weights nothing keeps a previous value of. Their surfaces take the model's motion,
22
+ * and the neighbourhood clip catches what is left.
23
+ *
24
+ * Coordinates are clip-up throughout: `u` and `v` run 0 to 1, with `v = 0` where clip y is -1.
25
+ */
26
+
27
+ /** The motion target's format: the vector in two channels, and a flag where a draw wrote one. */
28
+ export const MOTION_FORMAT = 'rgba16float' as const;
29
+
30
+ /**
31
+ * The camera's motion at a pixel: where the surface at `(u, v)` and `clipDepth` was last frame,
32
+ * less where it is. `reprojection` is `previousViewProj × inverse(currentViewProj)`, unjittered,
33
+ * in whatever depth convention `clipDepth` is given in.
34
+ *
35
+ * Returns false, and a zero vector, where the surface was behind last frame's eye: there is no
36
+ * position to have been at, and a vector through the eye points anywhere.
37
+ */
38
+ export function cameraMotion(
39
+ reprojection: ArrayLike<number>,
40
+ u: number,
41
+ v: number,
42
+ clipDepth: number,
43
+ out: Float32Array,
44
+ ): boolean {
45
+ const x = u * 2 - 1;
46
+ const y = v * 2 - 1;
47
+ const m = reprojection;
48
+ const w =
49
+ (m[3] as number) * x + (m[7] as number) * y + (m[11] as number) * clipDepth + (m[15] as number);
50
+ if (!(w > 0)) {
51
+ out[0] = 0;
52
+ out[1] = 0;
53
+ return false;
54
+ }
55
+ const px =
56
+ (m[0] as number) * x + (m[4] as number) * y + (m[8] as number) * clipDepth + (m[12] as number);
57
+ const py =
58
+ (m[1] as number) * x + (m[5] as number) * y + (m[9] as number) * clipDepth + (m[13] as number);
59
+ out[0] = (px / w) * 0.5 + 0.5 - u;
60
+ out[1] = (py / w) * 0.5 + 0.5 - v;
61
+ return true;
62
+ }
63
+
64
+ /**
65
+ * A drawn vertex's motion: its previous clip position less its current one, in uv units.
66
+ *
67
+ * Both positions are unjittered — the motion pass draws with the frame's unjittered matrices and
68
+ * the vertex's two transforms. Returns false, and a zero vector, where either is behind its eye.
69
+ */
70
+ export function objectMotion(
71
+ currentClip: ArrayLike<number>,
72
+ previousClip: ArrayLike<number>,
73
+ out: Float32Array,
74
+ ): boolean {
75
+ const cw = currentClip[3] as number;
76
+ const pw = previousClip[3] as number;
77
+ if (!(cw > 0) || !(pw > 0)) {
78
+ out[0] = 0;
79
+ out[1] = 0;
80
+ return false;
81
+ }
82
+ out[0] = ((previousClip[0] as number) / pw - (currentClip[0] as number) / cw) * 0.5;
83
+ out[1] = ((previousClip[1] as number) / pw - (currentClip[1] as number) / cw) * 0.5;
84
+ return true;
85
+ }
86
+
87
+ /**
88
+ * A vertex through a skin palette: the four joints' matrices weighted and summed, then applied —
89
+ * `SKINNING_GLSL`'s `skinMatrix()` times the position, in model space, before the model matrix.
90
+ * `palette` is sixteen floats a joint, column-major. Written into `out`, four values.
91
+ */
92
+ export function skinVertex(
93
+ palette: ArrayLike<number>,
94
+ joints: ArrayLike<number>,
95
+ weights: ArrayLike<number>,
96
+ position: ArrayLike<number>,
97
+ out: Float64Array,
98
+ ): void {
99
+ const px = position[0] as number;
100
+ const py = position[1] as number;
101
+ const pz = position[2] as number;
102
+ out[0] = 0;
103
+ out[1] = 0;
104
+ out[2] = 0;
105
+ out[3] = 0;
106
+ for (let influence = 0; influence < 4; influence += 1) {
107
+ const weight = weights[influence] as number;
108
+ if (weight === 0) continue;
109
+ const at = (joints[influence] as number) * 16;
110
+ for (let row = 0; row < 4; row += 1) {
111
+ out[row] =
112
+ (out[row] as number) +
113
+ weight *
114
+ ((palette[at + row] as number) * px +
115
+ (palette[at + 4 + row] as number) * py +
116
+ (palette[at + 8 + row] as number) * pz +
117
+ (palette[at + 12 + row] as number));
118
+ }
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Where a sample observed at `(u, v)` in a frame jittered by `jitterX`, `jitterY` pixels of a
124
+ * `width` by `height` target stands in the unjittered frame. `jitterProjection` moved the picture by
125
+ * the jitter; this moves the observation back.
126
+ */
127
+ export function unjitteredUv(
128
+ u: number,
129
+ v: number,
130
+ jitterX: number,
131
+ jitterY: number,
132
+ width: number,
133
+ height: number,
134
+ out: Float32Array,
135
+ ): void {
136
+ out[0] = u - jitterX / width;
137
+ out[1] = v - jitterY / height;
138
+ }
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Where a pixel's surface was, and the history sampled there.
3
+ *
4
+ * **Off the edge is a disocclusion, not a clamp.** A surface that was outside last frame's picture
5
+ * has no history; sampling the border instead drags one row of pixels inward as a smear for as long
6
+ * as the camera keeps turning. The temporal resolve already refuses it, and this keeps the rule.
7
+ *
8
+ * **The history is read bicubically**, because a bilinear read of an accumulated picture blurs it a
9
+ * little more every frame it is carried: a history reprojected by half a pixel sixty times a second
10
+ * is a history bilinearly filtered sixty times a second. Catmull-Rom interpolates — a texel centre
11
+ * returns that texel — and its weights sum to one, so the picture neither brightens nor darkens as
12
+ * it accumulates. Its negative lobes can undershoot beside a bright edge; a colour cannot be
13
+ * negative, so the sample is floored at zero, and the neighbourhood clip bounds the rest.
14
+ *
15
+ * **The shader uses five bilinear taps for the sixteen texels**: the middle pair of each axis folded
16
+ * into one tap, the four corners dropped, the weights renormalised. On an accumulated picture the
17
+ * corners carry almost nothing, and the test beside this says how little.
18
+ *
19
+ * Images are rows from `v = 0` upward, texel centres at whole texel coordinates, clamped at the
20
+ * border.
21
+ */
22
+
23
+ /**
24
+ * Reproject pixel `(x, y)` of a `width` by `height` target by a motion vector in uv units, into the
25
+ * texel coordinate its surface had. Returns false where that is off the picture — past the outer
26
+ * edge of the border texels, or not a number.
27
+ */
28
+ export function reprojectPixel(
29
+ x: number,
30
+ y: number,
31
+ motion: ArrayLike<number>,
32
+ width: number,
33
+ height: number,
34
+ out: Float32Array,
35
+ ): boolean {
36
+ const u = (x + 0.5) / width + (motion[0] as number);
37
+ const v = (y + 0.5) / height + (motion[1] as number);
38
+ out[0] = u * width - 0.5;
39
+ out[1] = v * height - 0.5;
40
+ return u >= 0 && u <= 1 && v >= 0 && v <= 1;
41
+ }
42
+
43
+ /** Catmull-Rom's four weights for the texels at -1, 0, 1 and 2 about a fraction `t`. */
44
+ export function catmullRomWeights(t: number, out: Float64Array): void {
45
+ const t2 = t * t;
46
+ const t3 = t2 * t;
47
+ out[0] = -0.5 * t3 + t2 - 0.5 * t;
48
+ out[1] = 1.5 * t3 - 2.5 * t2 + 1;
49
+ out[2] = -1.5 * t3 + 2 * t2 + 0.5 * t;
50
+ out[3] = 0.5 * t3 - 0.5 * t2;
51
+ }
52
+
53
+ function clampIndex(value: number, size: number): number {
54
+ return value < 0 ? 0 : value >= size ? size - 1 : value;
55
+ }
56
+
57
+ /** One texel, clamped to the image. */
58
+ function texel(
59
+ image: ArrayLike<number>,
60
+ x: number,
61
+ y: number,
62
+ width: number,
63
+ height: number,
64
+ channels: number,
65
+ c: number,
66
+ ): number {
67
+ return image[(clampIndex(y, height) * width + clampIndex(x, width)) * channels + c] as number;
68
+ }
69
+
70
+ /** A bilinear read at texel coordinate `(x, y)`, clamped at the border. */
71
+ export function sampleBilinear(
72
+ image: ArrayLike<number>,
73
+ x: number,
74
+ y: number,
75
+ width: number,
76
+ height: number,
77
+ channels: number,
78
+ out: Float32Array,
79
+ ): void {
80
+ const x0 = Math.floor(x);
81
+ const y0 = Math.floor(y);
82
+ const fx = x - x0;
83
+ const fy = y - y0;
84
+ for (let c = 0; c < channels; c += 1) {
85
+ const top =
86
+ texel(image, x0, y0, width, height, channels, c) * (1 - fx) +
87
+ texel(image, x0 + 1, y0, width, height, channels, c) * fx;
88
+ const bottom =
89
+ texel(image, x0, y0 + 1, width, height, channels, c) * (1 - fx) +
90
+ texel(image, x0 + 1, y0 + 1, width, height, channels, c) * fx;
91
+ out[c] = top * (1 - fy) + bottom * fy;
92
+ }
93
+ }
94
+
95
+ const WX = new Float64Array(4);
96
+ const WY = new Float64Array(4);
97
+
98
+ /** The full sixteen-texel Catmull-Rom read at texel coordinate `(x, y)`, floored at zero. */
99
+ export function sampleHistoryBicubic(
100
+ image: ArrayLike<number>,
101
+ x: number,
102
+ y: number,
103
+ width: number,
104
+ height: number,
105
+ channels: number,
106
+ out: Float32Array,
107
+ ): void {
108
+ const x1 = Math.floor(x);
109
+ const y1 = Math.floor(y);
110
+ catmullRomWeights(x - x1, WX);
111
+ catmullRomWeights(y - y1, WY);
112
+ for (let c = 0; c < channels; c += 1) {
113
+ let sum = 0;
114
+ for (let j = 0; j < 4; j += 1) {
115
+ let row = 0;
116
+ for (let i = 0; i < 4; i += 1) {
117
+ row += (WX[i] as number) * texel(image, x1 - 1 + i, y1 - 1 + j, width, height, channels, c);
118
+ }
119
+ sum += (WY[j] as number) * row;
120
+ }
121
+ out[c] = Math.max(0, sum);
122
+ }
123
+ }
124
+
125
+ const TAP = new Float32Array(4);
126
+
127
+ /**
128
+ * The five-tap approximation the shader uses, at texel coordinate `(x, y)`, floored at zero.
129
+ *
130
+ * Each axis's middle two texels are one bilinear tap placed at `w2 / (w1 + w2)` between them, which
131
+ * is exact for those four texels; the edge taps read a row or column the same way; the corners are
132
+ * dropped and the five weights renormalised.
133
+ */
134
+ export function sampleHistoryBicubic5(
135
+ image: ArrayLike<number>,
136
+ x: number,
137
+ y: number,
138
+ width: number,
139
+ height: number,
140
+ channels: number,
141
+ out: Float32Array,
142
+ ): void {
143
+ const x1 = Math.floor(x);
144
+ const y1 = Math.floor(y);
145
+ catmullRomWeights(x - x1, WX);
146
+ catmullRomWeights(y - y1, WY);
147
+ const wx12 = (WX[1] as number) + (WX[2] as number);
148
+ const wy12 = (WY[1] as number) + (WY[2] as number);
149
+ const x12 = x1 + (WX[2] as number) / wx12;
150
+ const y12 = y1 + (WY[2] as number) / wy12;
151
+ const x0 = x1 - 1;
152
+ const y0 = y1 - 1;
153
+ const x3 = x1 + 2;
154
+ const y3 = y1 + 2;
155
+ const weights = [
156
+ wx12 * (WY[0] as number),
157
+ (WX[0] as number) * wy12,
158
+ wx12 * wy12,
159
+ (WX[3] as number) * wy12,
160
+ wx12 * (WY[3] as number),
161
+ ];
162
+ const at = [
163
+ [x12, y0],
164
+ [x0, y12],
165
+ [x12, y12],
166
+ [x3, y12],
167
+ [x12, y3],
168
+ ];
169
+ const total = weights.reduce((sum, w) => sum + w, 0);
170
+ for (let c = 0; c < channels; c += 1) out[c] = 0;
171
+ for (let k = 0; k < 5; k += 1) {
172
+ const place = at[k] as number[];
173
+ sampleBilinear(image, place[0] as number, place[1] as number, width, height, channels, TAP);
174
+ for (let c = 0; c < channels; c += 1) {
175
+ out[c] = (out[c] as number) + (weights[k] as number) * (TAP[c] as number);
176
+ }
177
+ }
178
+ for (let c = 0; c < channels; c += 1) out[c] = Math.max(0, (out[c] as number) / total);
179
+ }