@driftengine/core 3.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (955) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +9 -0
  3. package/README.md +9 -0
  4. package/dist/behavior/behaviorTree.d.ts +140 -0
  5. package/dist/behavior/behaviorTree.js +289 -0
  6. package/dist/build/shaderComments.d.ts +64 -0
  7. package/dist/build/shaderComments.js +0 -0
  8. package/dist/cinematic/player.d.ts +80 -0
  9. package/dist/cinematic/player.js +184 -0
  10. package/dist/cinematic/script.d.ts +63 -0
  11. package/dist/cinematic/script.js +141 -0
  12. package/dist/core/bootGate.d.ts +37 -0
  13. package/dist/core/bootGate.js +47 -0
  14. package/dist/core/loadTracker.d.ts +78 -0
  15. package/dist/core/loadTracker.js +106 -0
  16. package/dist/core/loop.d.ts +118 -0
  17. package/dist/core/loop.js +84 -0
  18. package/dist/core/messageQueue.d.ts +61 -0
  19. package/dist/core/messageQueue.js +104 -0
  20. package/dist/core/onceSet.d.ts +27 -0
  21. package/dist/core/onceSet.js +62 -0
  22. package/dist/core/preferences.d.ts +47 -0
  23. package/dist/core/preferences.js +140 -0
  24. package/dist/core/remoteSave.d.ts +154 -0
  25. package/dist/core/remoteSave.js +249 -0
  26. package/dist/core/rng.d.ts +64 -0
  27. package/dist/core/rng.js +72 -0
  28. package/dist/core/stepBudget.d.ts +91 -0
  29. package/dist/core/stepBudget.js +105 -0
  30. package/dist/core/storage.d.ts +52 -0
  31. package/dist/core/storage.js +85 -0
  32. package/dist/core/tickTrace.d.ts +72 -0
  33. package/dist/core/tickTrace.js +102 -0
  34. package/dist/core/timeCurve.d.ts +83 -0
  35. package/dist/core/timeCurve.js +107 -0
  36. package/dist/core/withDefaults.d.ts +21 -0
  37. package/dist/core/withDefaults.js +29 -0
  38. package/dist/dev/contactProbe.d.ts +41 -0
  39. package/dist/dev/contactProbe.js +58 -0
  40. package/dist/dev/fpsMeter.d.ts +45 -0
  41. package/dist/dev/fpsMeter.js +86 -0
  42. package/dist/environment/celestialClock.d.ts +141 -0
  43. package/dist/environment/celestialClock.js +262 -0
  44. package/dist/geometry/decal.d.ts +61 -0
  45. package/dist/geometry/decal.js +178 -0
  46. package/dist/geometry/filmPatch.d.ts +35 -0
  47. package/dist/geometry/filmPatch.js +112 -0
  48. package/dist/geometry/growable.d.ts +70 -0
  49. package/dist/geometry/growable.js +167 -0
  50. package/dist/geometry/lightVolume.d.ts +76 -0
  51. package/dist/geometry/lightVolume.js +65 -0
  52. package/dist/geometry/meshBuilder.d.ts +426 -0
  53. package/dist/geometry/meshBuilder.js +1184 -0
  54. package/dist/geometry/pixelFont.d.ts +59 -0
  55. package/dist/geometry/pixelFont.js +179 -0
  56. package/dist/geometry/ribbon.d.ts +101 -0
  57. package/dist/geometry/ribbon.js +546 -0
  58. package/dist/geometry/shellFill.d.ts +101 -0
  59. package/dist/geometry/shellFill.js +203 -0
  60. package/dist/geometry/spline.d.ts +162 -0
  61. package/dist/geometry/spline.js +527 -0
  62. package/dist/geometry/tangents.d.ts +30 -0
  63. package/dist/geometry/tangents.js +142 -0
  64. package/dist/geometry/textMesh.d.ts +51 -0
  65. package/dist/geometry/textMesh.js +57 -0
  66. package/dist/geometry/treeBuilder.d.ts +37 -0
  67. package/dist/geometry/treeBuilder.js +56 -0
  68. package/dist/host/display.d.ts +135 -0
  69. package/dist/host/display.js +114 -0
  70. package/dist/host/files.d.ts +25 -0
  71. package/dist/host/files.js +44 -0
  72. package/dist/host/lifecycle.d.ts +45 -0
  73. package/dist/host/lifecycle.js +28 -0
  74. package/dist/host/platformServices.d.ts +23 -0
  75. package/dist/host/platformServices.js +1 -0
  76. package/dist/host/screen.d.ts +49 -0
  77. package/dist/host/screen.js +90 -0
  78. package/dist/index.d.ts +289 -0
  79. package/dist/index.js +320 -0
  80. package/dist/input/actionMap.d.ts +181 -0
  81. package/dist/input/actionMap.js +314 -0
  82. package/dist/input/activeDevice.d.ts +55 -0
  83. package/dist/input/activeDevice.js +83 -0
  84. package/dist/input/gamepadIdentity.d.ts +43 -0
  85. package/dist/input/gamepadIdentity.js +108 -0
  86. package/dist/input/gamepadMapping.d.ts +56 -0
  87. package/dist/input/gamepadMapping.js +91 -0
  88. package/dist/input/input.d.ts +281 -0
  89. package/dist/input/input.js +703 -0
  90. package/dist/input/inputHarness.d.ts +42 -0
  91. package/dist/input/inputHarness.js +193 -0
  92. package/dist/input/rightGesture.d.ts +57 -0
  93. package/dist/input/rightGesture.js +49 -0
  94. package/dist/input/rumble.d.ts +71 -0
  95. package/dist/input/rumble.js +119 -0
  96. package/dist/input/touchControls.d.ts +138 -0
  97. package/dist/input/touchControls.js +352 -0
  98. package/dist/input/typingTarget.d.ts +6 -0
  99. package/dist/input/typingTarget.js +27 -0
  100. package/dist/math/bounds.d.ts +61 -0
  101. package/dist/math/bounds.js +121 -0
  102. package/dist/math/color.d.ts +8 -0
  103. package/dist/math/color.js +35 -0
  104. package/dist/math/exact.d.ts +66 -0
  105. package/dist/math/exact.js +262 -0
  106. package/dist/math/frustum.d.ts +44 -0
  107. package/dist/math/frustum.js +90 -0
  108. package/dist/math/intersect.d.ts +76 -0
  109. package/dist/math/intersect.js +185 -0
  110. package/dist/math/scalar.d.ts +51 -0
  111. package/dist/math/scalar.js +99 -0
  112. package/dist/math/spring.d.ts +59 -0
  113. package/dist/math/spring.js +88 -0
  114. package/dist/nav/navGraph.d.ts +71 -0
  115. package/dist/nav/navGraph.js +111 -0
  116. package/dist/nav/navPath.d.ts +93 -0
  117. package/dist/nav/navPath.js +162 -0
  118. package/dist/nav/navSearch.d.ts +74 -0
  119. package/dist/nav/navSearch.js +198 -0
  120. package/dist/physics/boxSurface.d.ts +48 -0
  121. package/dist/physics/boxSurface.js +73 -0
  122. package/dist/physics/colliderSurface.d.ts +46 -0
  123. package/dist/physics/colliderSurface.js +146 -0
  124. package/dist/physics/compositeSurface.d.ts +33 -0
  125. package/dist/physics/compositeSurface.js +108 -0
  126. package/dist/physics/heightSurface.d.ts +103 -0
  127. package/dist/physics/heightSurface.js +153 -0
  128. package/dist/physics/ribbonSurface.d.ts +239 -0
  129. package/dist/physics/ribbonSurface.js +522 -0
  130. package/dist/render/ambientOcclusionPass.d.ts +53 -0
  131. package/dist/render/ambientOcclusionPass.js +179 -0
  132. package/dist/render/areaLights.d.ts +116 -0
  133. package/dist/render/areaLights.js +91 -0
  134. package/dist/render/areaShadowSet.d.ts +184 -0
  135. package/dist/render/areaShadowSet.js +277 -0
  136. package/dist/render/atmosphere.d.ts +94 -0
  137. package/dist/render/atmosphere.js +91 -0
  138. package/dist/render/backend/api.d.ts +496 -0
  139. package/dist/render/backend/api.js +1 -0
  140. package/dist/render/backend/budget.d.ts +82 -0
  141. package/dist/render/backend/budget.js +99 -0
  142. package/dist/render/backend/createRenderer.d.ts +135 -0
  143. package/dist/render/backend/createRenderer.js +201 -0
  144. package/dist/render/backend/deadline.d.ts +24 -0
  145. package/dist/render/backend/deadline.js +38 -0
  146. package/dist/render/backend/probe.d.ts +30 -0
  147. package/dist/render/backend/probe.js +129 -0
  148. package/dist/render/backend/select.d.ts +70 -0
  149. package/dist/render/backend/select.js +249 -0
  150. package/dist/render/backend/timer.d.ts +50 -0
  151. package/dist/render/backend/timer.js +1 -0
  152. package/dist/render/backend/webgl2/instanced.d.ts +21 -0
  153. package/dist/render/backend/webgl2/instanced.js +42 -0
  154. package/dist/render/backend/webgl2/morphTexture.d.ts +21 -0
  155. package/dist/render/backend/webgl2/morphTexture.js +55 -0
  156. package/dist/render/backend/webgl2/renderer.d.ts +3027 -0
  157. package/dist/render/backend/webgl2/renderer.js +6041 -0
  158. package/dist/render/backend/webgl2/skinPaletteTexture.d.ts +32 -0
  159. package/dist/render/backend/webgl2/skinPaletteTexture.js +68 -0
  160. package/dist/render/backend/webgpu/boltPass.d.ts +42 -0
  161. package/dist/render/backend/webgpu/boltPass.js +160 -0
  162. package/dist/render/backend/webgpu/buffers.d.ts +159 -0
  163. package/dist/render/backend/webgpu/buffers.js +402 -0
  164. package/dist/render/backend/webgpu/causticsPass.d.ts +36 -0
  165. package/dist/render/backend/webgpu/causticsPass.js +138 -0
  166. package/dist/render/backend/webgpu/clusterBinner.d.ts +51 -0
  167. package/dist/render/backend/webgpu/clusterBinner.js +206 -0
  168. package/dist/render/backend/webgpu/depthPass.d.ts +114 -0
  169. package/dist/render/backend/webgpu/depthPass.js +228 -0
  170. package/dist/render/backend/webgpu/device.d.ts +52 -0
  171. package/dist/render/backend/webgpu/device.js +121 -0
  172. package/dist/render/backend/webgpu/drawCommand.d.ts +43 -0
  173. package/dist/render/backend/webgpu/drawCommand.js +54 -0
  174. package/dist/render/backend/webgpu/environmentTexels.d.ts +28 -0
  175. package/dist/render/backend/webgpu/environmentTexels.js +79 -0
  176. package/dist/render/backend/webgpu/filmPass.d.ts +29 -0
  177. package/dist/render/backend/webgpu/filmPass.js +97 -0
  178. package/dist/render/backend/webgpu/flatPass.d.ts +213 -0
  179. package/dist/render/backend/webgpu/flatPass.js +482 -0
  180. package/dist/render/backend/webgpu/flockPass.d.ts +34 -0
  181. package/dist/render/backend/webgpu/flockPass.js +129 -0
  182. package/dist/render/backend/webgpu/gpuTimestamps.d.ts +94 -0
  183. package/dist/render/backend/webgpu/gpuTimestamps.js +213 -0
  184. package/dist/render/backend/webgpu/insetPass.d.ts +19 -0
  185. package/dist/render/backend/webgpu/insetPass.js +108 -0
  186. package/dist/render/backend/webgpu/instanced.d.ts +27 -0
  187. package/dist/render/backend/webgpu/instanced.js +49 -0
  188. package/dist/render/backend/webgpu/lightVolumePass.d.ts +75 -0
  189. package/dist/render/backend/webgpu/lightVolumePass.js +154 -0
  190. package/dist/render/backend/webgpu/linePass.d.ts +90 -0
  191. package/dist/render/backend/webgpu/linePass.js +220 -0
  192. package/dist/render/backend/webgpu/morphTexture.d.ts +18 -0
  193. package/dist/render/backend/webgpu/morphTexture.js +51 -0
  194. package/dist/render/backend/webgpu/panelPass.d.ts +37 -0
  195. package/dist/render/backend/webgpu/panelPass.js +114 -0
  196. package/dist/render/backend/webgpu/particlePass.d.ts +89 -0
  197. package/dist/render/backend/webgpu/particlePass.js +280 -0
  198. package/dist/render/backend/webgpu/pipelineCache.d.ts +93 -0
  199. package/dist/render/backend/webgpu/pipelineCache.js +140 -0
  200. package/dist/render/backend/webgpu/plumePass.d.ts +69 -0
  201. package/dist/render/backend/webgpu/plumePass.js +213 -0
  202. package/dist/render/backend/webgpu/pointShadowPass.d.ts +88 -0
  203. package/dist/render/backend/webgpu/pointShadowPass.js +280 -0
  204. package/dist/render/backend/webgpu/postPass.d.ts +342 -0
  205. package/dist/render/backend/webgpu/postPass.js +366 -0
  206. package/dist/render/backend/webgpu/probePass.d.ts +108 -0
  207. package/dist/render/backend/webgpu/probePass.js +188 -0
  208. package/dist/render/backend/webgpu/reflectionPass.d.ts +29 -0
  209. package/dist/render/backend/webgpu/reflectionPass.js +87 -0
  210. package/dist/render/backend/webgpu/renderer.d.ts +3082 -0
  211. package/dist/render/backend/webgpu/renderer.js +10911 -0
  212. package/dist/render/backend/webgpu/scatterPass.d.ts +95 -0
  213. package/dist/render/backend/webgpu/scatterPass.js +266 -0
  214. package/dist/render/backend/webgpu/sdfTextPass.d.ts +86 -0
  215. package/dist/render/backend/webgpu/sdfTextPass.js +190 -0
  216. package/dist/render/backend/webgpu/shaderModules.d.ts +9 -0
  217. package/dist/render/backend/webgpu/shaderModules.js +45 -0
  218. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.d.ts +23 -0
  219. package/dist/render/backend/webgpu/shaders/clusterBin.wgsl.js +208 -0
  220. package/dist/render/backend/webgpu/skinPaletteRing.d.ts +67 -0
  221. package/dist/render/backend/webgpu/skinPaletteRing.js +97 -0
  222. package/dist/render/backend/webgpu/skinPaletteTexture.d.ts +17 -0
  223. package/dist/render/backend/webgpu/skinPaletteTexture.js +68 -0
  224. package/dist/render/backend/webgpu/skyPass.d.ts +102 -0
  225. package/dist/render/backend/webgpu/skyPass.js +70 -0
  226. package/dist/render/backend/webgpu/surfaceTexturePass.d.ts +41 -0
  227. package/dist/render/backend/webgpu/surfaceTexturePass.js +228 -0
  228. package/dist/render/backend/webgpu/textPass.d.ts +73 -0
  229. package/dist/render/backend/webgpu/textPass.js +190 -0
  230. package/dist/render/backend/webgpu/uniformRing.d.ts +133 -0
  231. package/dist/render/backend/webgpu/uniformRing.js +208 -0
  232. package/dist/render/backend/webgpu/waterPass.d.ts +73 -0
  233. package/dist/render/backend/webgpu/waterPass.js +160 -0
  234. package/dist/render/backend/webgpu/windStreakPass.d.ts +46 -0
  235. package/dist/render/backend/webgpu/windStreakPass.js +153 -0
  236. package/dist/render/billboard.d.ts +27 -0
  237. package/dist/render/billboard.js +79 -0
  238. package/dist/render/bloomChain.d.ts +66 -0
  239. package/dist/render/bloomChain.js +83 -0
  240. package/dist/render/bloomPass.d.ts +54 -0
  241. package/dist/render/bloomPass.js +219 -0
  242. package/dist/render/boltBatch.d.ts +39 -0
  243. package/dist/render/boltBatch.js +121 -0
  244. package/dist/render/boltPool.d.ts +135 -0
  245. package/dist/render/boltPool.js +259 -0
  246. package/dist/render/boom.d.ts +46 -0
  247. package/dist/render/boom.js +81 -0
  248. package/dist/render/camera.d.ts +119 -0
  249. package/dist/render/camera.js +304 -0
  250. package/dist/render/causticsRenderer.d.ts +63 -0
  251. package/dist/render/causticsRenderer.js +119 -0
  252. package/dist/render/cinematicCamera.d.ts +102 -0
  253. package/dist/render/cinematicCamera.js +227 -0
  254. package/dist/render/clusteredLights.d.ts +260 -0
  255. package/dist/render/clusteredLights.js +479 -0
  256. package/dist/render/colourGrade.d.ts +62 -0
  257. package/dist/render/colourGrade.js +91 -0
  258. package/dist/render/compute.d.ts +74 -0
  259. package/dist/render/compute.js +8 -0
  260. package/dist/render/contextLoss.d.ts +32 -0
  261. package/dist/render/contextLoss.js +46 -0
  262. package/dist/render/debugLines.d.ts +75 -0
  263. package/dist/render/debugLines.js +281 -0
  264. package/dist/render/decalPass.d.ts +34 -0
  265. package/dist/render/decalPass.js +103 -0
  266. package/dist/render/decalProjector.d.ts +140 -0
  267. package/dist/render/decalProjector.js +282 -0
  268. package/dist/render/decalQueue.d.ts +53 -0
  269. package/dist/render/decalQueue.js +87 -0
  270. package/dist/render/depthConvention.d.ts +314 -0
  271. package/dist/render/depthConvention.js +346 -0
  272. package/dist/render/drawingBuffer.d.ts +52 -0
  273. package/dist/render/drawingBuffer.js +67 -0
  274. package/dist/render/emptyTexture.d.ts +60 -0
  275. package/dist/render/emptyTexture.js +103 -0
  276. package/dist/render/envProbeArray.d.ts +85 -0
  277. package/dist/render/envProbeArray.js +164 -0
  278. package/dist/render/equirectToCube.d.ts +54 -0
  279. package/dist/render/equirectToCube.js +123 -0
  280. package/dist/render/flockGeometry.d.ts +23 -0
  281. package/dist/render/flockGeometry.js +43 -0
  282. package/dist/render/flockRenderer.d.ts +37 -0
  283. package/dist/render/flockRenderer.js +70 -0
  284. package/dist/render/frame/arena.d.ts +32 -0
  285. package/dist/render/frame/arena.js +65 -0
  286. package/dist/render/frame/index.d.ts +18 -0
  287. package/dist/render/frame/index.js +4 -0
  288. package/dist/render/frame/replay.d.ts +34 -0
  289. package/dist/render/frame/replay.js +48 -0
  290. package/dist/render/frame/resources.d.ts +25 -0
  291. package/dist/render/frame/resources.js +55 -0
  292. package/dist/render/frame/schedule.d.ts +37 -0
  293. package/dist/render/frame/schedule.js +61 -0
  294. package/dist/render/frameView.d.ts +19 -0
  295. package/dist/render/frameView.js +1 -0
  296. package/dist/render/gizmo.d.ts +236 -0
  297. package/dist/render/gizmo.js +727 -0
  298. package/dist/render/globalMedium.d.ts +124 -0
  299. package/dist/render/globalMedium.js +100 -0
  300. package/dist/render/globalMediumPass.d.ts +101 -0
  301. package/dist/render/globalMediumPass.js +250 -0
  302. package/dist/render/gpuCapability.d.ts +111 -0
  303. package/dist/render/gpuCapability.js +194 -0
  304. package/dist/render/gpuTimer.d.ts +87 -0
  305. package/dist/render/gpuTimer.js +145 -0
  306. package/dist/render/halfFloat.d.ts +4 -0
  307. package/dist/render/halfFloat.js +38 -0
  308. package/dist/render/handleRegistry.d.ts +54 -0
  309. package/dist/render/handleRegistry.js +84 -0
  310. package/dist/render/iesProfile.d.ts +64 -0
  311. package/dist/render/iesProfile.js +179 -0
  312. package/dist/render/imageTexels.d.ts +50 -0
  313. package/dist/render/imageTexels.js +91 -0
  314. package/dist/render/instancedMesh.d.ts +48 -0
  315. package/dist/render/instancedMesh.js +127 -0
  316. package/dist/render/instances.d.ts +69 -0
  317. package/dist/render/instances.js +52 -0
  318. package/dist/render/lightBudget.d.ts +397 -0
  319. package/dist/render/lightBudget.js +524 -0
  320. package/dist/render/lightMatrix.d.ts +3 -0
  321. package/dist/render/lightMatrix.js +45 -0
  322. package/dist/render/lightVolumeDraw.d.ts +132 -0
  323. package/dist/render/lightVolumeDraw.js +181 -0
  324. package/dist/render/lineBatch.d.ts +60 -0
  325. package/dist/render/lineBatch.js +160 -0
  326. package/dist/render/linePoints.d.ts +33 -0
  327. package/dist/render/linePoints.js +46 -0
  328. package/dist/render/livePointShadowSet.d.ts +72 -0
  329. package/dist/render/livePointShadowSet.js +258 -0
  330. package/dist/render/lod.d.ts +35 -0
  331. package/dist/render/lod.js +65 -0
  332. package/dist/render/mesh.d.ts +177 -0
  333. package/dist/render/mesh.js +466 -0
  334. package/dist/render/occlusion.d.ts +81 -0
  335. package/dist/render/occlusion.js +378 -0
  336. package/dist/render/oitPass.d.ts +67 -0
  337. package/dist/render/oitPass.js +213 -0
  338. package/dist/render/orderIndependent.d.ts +92 -0
  339. package/dist/render/orderIndependent.js +108 -0
  340. package/dist/render/particleBatch.d.ts +140 -0
  341. package/dist/render/particleBatch.js +186 -0
  342. package/dist/render/particleMaterial.d.ts +54 -0
  343. package/dist/render/particleMaterial.js +42 -0
  344. package/dist/render/particlePool.d.ts +124 -0
  345. package/dist/render/particlePool.js +182 -0
  346. package/dist/render/pass.d.ts +195 -0
  347. package/dist/render/pass.js +9 -0
  348. package/dist/render/passTarget.d.ts +86 -0
  349. package/dist/render/passTarget.js +121 -0
  350. package/dist/render/pickable.d.ts +31 -0
  351. package/dist/render/pickable.js +172 -0
  352. package/dist/render/planarReflection.d.ts +59 -0
  353. package/dist/render/planarReflection.js +194 -0
  354. package/dist/render/planarReflectionDraw.d.ts +31 -0
  355. package/dist/render/planarReflectionDraw.js +65 -0
  356. package/dist/render/plumeGeometry.d.ts +25 -0
  357. package/dist/render/plumeGeometry.js +61 -0
  358. package/dist/render/plumeMaterial.d.ts +31 -0
  359. package/dist/render/plumeMaterial.js +64 -0
  360. package/dist/render/plumeRenderer.d.ts +96 -0
  361. package/dist/render/plumeRenderer.js +185 -0
  362. package/dist/render/pointLightSelection.d.ts +175 -0
  363. package/dist/render/pointLightSelection.js +301 -0
  364. package/dist/render/pointShadowArray.d.ts +95 -0
  365. package/dist/render/pointShadowArray.js +219 -0
  366. package/dist/render/pointShadowBudget.d.ts +118 -0
  367. package/dist/render/pointShadowBudget.js +221 -0
  368. package/dist/render/pointShadowImage.d.ts +265 -0
  369. package/dist/render/pointShadowImage.js +339 -0
  370. package/dist/render/pointShadowMap.d.ts +93 -0
  371. package/dist/render/pointShadowMap.js +167 -0
  372. package/dist/render/pointShadowSystem.d.ts +195 -0
  373. package/dist/render/pointShadowSystem.js +336 -0
  374. package/dist/render/prefilterEnvMap.d.ts +124 -0
  375. package/dist/render/prefilterEnvMap.js +146 -0
  376. package/dist/render/prefilterPass.d.ts +44 -0
  377. package/dist/render/prefilterPass.js +98 -0
  378. package/dist/render/probeGrid.d.ts +122 -0
  379. package/dist/render/probeGrid.js +174 -0
  380. package/dist/render/rainField.d.ts +99 -0
  381. package/dist/render/rainField.js +168 -0
  382. package/dist/render/reflectionProbe.d.ts +188 -0
  383. package/dist/render/reflectionProbe.js +437 -0
  384. package/dist/render/renderQuality.d.ts +699 -0
  385. package/dist/render/renderQuality.js +293 -0
  386. package/dist/render/rendererHarness.d.ts +39 -0
  387. package/dist/render/rendererHarness.js +185 -0
  388. package/dist/render/resolutionGovernor.d.ts +107 -0
  389. package/dist/render/resolutionGovernor.js +144 -0
  390. package/dist/render/scatterDeform.d.ts +17 -0
  391. package/dist/render/scatterDeform.js +46 -0
  392. package/dist/render/sceneTarget.d.ts +288 -0
  393. package/dist/render/sceneTarget.js +856 -0
  394. package/dist/render/screenSpaceReflection.d.ts +233 -0
  395. package/dist/render/screenSpaceReflection.js +415 -0
  396. package/dist/render/sdfFont.d.ts +77 -0
  397. package/dist/render/sdfFont.js +86 -0
  398. package/dist/render/sdfTextLayout.d.ts +46 -0
  399. package/dist/render/sdfTextLayout.js +145 -0
  400. package/dist/render/sdfTextRenderer.d.ts +75 -0
  401. package/dist/render/sdfTextRenderer.js +194 -0
  402. package/dist/render/seaState.d.ts +25 -0
  403. package/dist/render/seaState.js +34 -0
  404. package/dist/render/segmentQuads.d.ts +29 -0
  405. package/dist/render/segmentQuads.js +75 -0
  406. package/dist/render/shader.d.ts +5 -0
  407. package/dist/render/shader.js +172 -0
  408. package/dist/render/shaders/ambientOcclusion.d.ts +45 -0
  409. package/dist/render/shaders/ambientOcclusion.js +352 -0
  410. package/dist/render/shaders/arcane.d.ts +19 -0
  411. package/dist/render/shaders/arcane.js +102 -0
  412. package/dist/render/shaders/bloom.d.ts +70 -0
  413. package/dist/render/shaders/bloom.js +227 -0
  414. package/dist/render/shaders/bolt.d.ts +17 -0
  415. package/dist/render/shaders/bolt.js +161 -0
  416. package/dist/render/shaders/caustics.d.ts +38 -0
  417. package/dist/render/shaders/caustics.js +167 -0
  418. package/dist/render/shaders/conditionals.d.ts +21 -0
  419. package/dist/render/shaders/conditionals.js +55 -0
  420. package/dist/render/shaders/decalProject.d.ts +25 -0
  421. package/dist/render/shaders/decalProject.js +125 -0
  422. package/dist/render/shaders/depth.d.ts +14 -0
  423. package/dist/render/shaders/depth.js +114 -0
  424. package/dist/render/shaders/depthOfField.d.ts +41 -0
  425. package/dist/render/shaders/depthOfField.js +139 -0
  426. package/dist/render/shaders/film.d.ts +15 -0
  427. package/dist/render/shaders/film.js +283 -0
  428. package/dist/render/shaders/fire.d.ts +12 -0
  429. package/dist/render/shaders/fire.js +178 -0
  430. package/dist/render/shaders/flat/directionalShadow.d.ts +1 -0
  431. package/dist/render/shaders/flat/directionalShadow.js +195 -0
  432. package/dist/render/shaders/flat/index.d.ts +135 -0
  433. package/dist/render/shaders/flat/index.js +387 -0
  434. package/dist/render/shaders/flat/lobes.d.ts +1 -0
  435. package/dist/render/shaders/flat/lobes.js +398 -0
  436. package/dist/render/shaders/flat/main.d.ts +2 -0
  437. package/dist/render/shaders/flat/main.js +1630 -0
  438. package/dist/render/shaders/flat/pointShadow.d.ts +1 -0
  439. package/dist/render/shaders/flat/pointShadow.js +322 -0
  440. package/dist/render/shaders/flat/preamble.d.ts +15 -0
  441. package/dist/render/shaders/flat/preamble.js +864 -0
  442. package/dist/render/shaders/flat/probeGrid.d.ts +21 -0
  443. package/dist/render/shaders/flat/probeGrid.js +151 -0
  444. package/dist/render/shaders/flat/surface.d.ts +2 -0
  445. package/dist/render/shaders/flat/surface.js +40 -0
  446. package/dist/render/shaders/flock.d.ts +11 -0
  447. package/dist/render/shaders/flock.js +102 -0
  448. package/dist/render/shaders/fog.d.ts +37 -0
  449. package/dist/render/shaders/fog.js +98 -0
  450. package/dist/render/shaders/fullscreen.d.ts +16 -0
  451. package/dist/render/shaders/fullscreen.js +27 -0
  452. package/dist/render/shaders/generated/ambientOcclusion.wgsl.d.ts +65 -0
  453. package/dist/render/shaders/generated/ambientOcclusion.wgsl.js +71 -0
  454. package/dist/render/shaders/generated/arcane.wgsl.d.ts +90 -0
  455. package/dist/render/shaders/generated/arcane.wgsl.js +96 -0
  456. package/dist/render/shaders/generated/bloom.wgsl.d.ts +69 -0
  457. package/dist/render/shaders/generated/bloom.wgsl.js +75 -0
  458. package/dist/render/shaders/generated/bolt.wgsl.d.ts +118 -0
  459. package/dist/render/shaders/generated/bolt.wgsl.js +124 -0
  460. package/dist/render/shaders/generated/caustics.wgsl.d.ts +118 -0
  461. package/dist/render/shaders/generated/caustics.wgsl.js +124 -0
  462. package/dist/render/shaders/generated/decalProject.wgsl.d.ts +61 -0
  463. package/dist/render/shaders/generated/decalProject.wgsl.js +67 -0
  464. package/dist/render/shaders/generated/depth.wgsl.d.ts +131 -0
  465. package/dist/render/shaders/generated/depth.wgsl.js +137 -0
  466. package/dist/render/shaders/generated/film.wgsl.d.ts +134 -0
  467. package/dist/render/shaders/generated/film.wgsl.js +140 -0
  468. package/dist/render/shaders/generated/fire.wgsl.d.ts +128 -0
  469. package/dist/render/shaders/generated/fire.wgsl.js +134 -0
  470. package/dist/render/shaders/generated/flat.wgsl.d.ts +9163 -0
  471. package/dist/render/shaders/generated/flat.wgsl.js +9192 -0
  472. package/dist/render/shaders/generated/flock.wgsl.d.ts +73 -0
  473. package/dist/render/shaders/generated/flock.wgsl.js +79 -0
  474. package/dist/render/shaders/generated/fullscreen.wgsl.d.ts +12 -0
  475. package/dist/render/shaders/generated/fullscreen.wgsl.js +18 -0
  476. package/dist/render/shaders/generated/globalMedium.wgsl.d.ts +130 -0
  477. package/dist/render/shaders/generated/globalMedium.wgsl.js +136 -0
  478. package/dist/render/shaders/generated/lightVolume.wgsl.d.ts +230 -0
  479. package/dist/render/shaders/generated/lightVolume.wgsl.js +239 -0
  480. package/dist/render/shaders/generated/line.wgsl.d.ts +128 -0
  481. package/dist/render/shaders/generated/line.wgsl.js +134 -0
  482. package/dist/render/shaders/generated/octahedralResolve.wgsl.d.ts +51 -0
  483. package/dist/render/shaders/generated/octahedralResolve.wgsl.js +57 -0
  484. package/dist/render/shaders/generated/oitResolve.wgsl.d.ts +23 -0
  485. package/dist/render/shaders/generated/oitResolve.wgsl.js +29 -0
  486. package/dist/render/shaders/generated/panel.wgsl.d.ts +48 -0
  487. package/dist/render/shaders/generated/panel.wgsl.js +54 -0
  488. package/dist/render/shaders/generated/particle.wgsl.d.ts +332 -0
  489. package/dist/render/shaders/generated/particle.wgsl.js +338 -0
  490. package/dist/render/shaders/generated/prefilter.wgsl.d.ts +61 -0
  491. package/dist/render/shaders/generated/prefilter.wgsl.js +67 -0
  492. package/dist/render/shaders/generated/rush.wgsl.d.ts +131 -0
  493. package/dist/render/shaders/generated/rush.wgsl.js +137 -0
  494. package/dist/render/shaders/generated/scatter.wgsl.d.ts +195 -0
  495. package/dist/render/shaders/generated/scatter.wgsl.js +201 -0
  496. package/dist/render/shaders/generated/sdfText.wgsl.d.ts +69 -0
  497. package/dist/render/shaders/generated/sdfText.wgsl.js +75 -0
  498. package/dist/render/shaders/generated/sky.wgsl.d.ts +100 -0
  499. package/dist/render/shaders/generated/sky.wgsl.js +106 -0
  500. package/dist/render/shaders/generated/smoke.wgsl.d.ts +85 -0
  501. package/dist/render/shaders/generated/smoke.wgsl.js +91 -0
  502. package/dist/render/shaders/generated/ssrResolve.wgsl.d.ts +18 -0
  503. package/dist/render/shaders/generated/ssrResolve.wgsl.js +24 -0
  504. package/dist/render/shaders/generated/ssrTrace.wgsl.d.ts +86 -0
  505. package/dist/render/shaders/generated/ssrTrace.wgsl.js +92 -0
  506. package/dist/render/shaders/generated/temporalResolve.wgsl.d.ts +46 -0
  507. package/dist/render/shaders/generated/temporalResolve.wgsl.js +52 -0
  508. package/dist/render/shaders/generated/text.wgsl.d.ts +98 -0
  509. package/dist/render/shaders/generated/text.wgsl.js +104 -0
  510. package/dist/render/shaders/generated/water.wgsl.d.ts +247 -0
  511. package/dist/render/shaders/generated/water.wgsl.js +253 -0
  512. package/dist/render/shaders/generated/windStreaks.wgsl.d.ts +73 -0
  513. package/dist/render/shaders/generated/windStreaks.wgsl.js +79 -0
  514. package/dist/render/shaders/gerstner.d.ts +21 -0
  515. package/dist/render/shaders/gerstner.js +110 -0
  516. package/dist/render/shaders/globalMedium.d.ts +56 -0
  517. package/dist/render/shaders/globalMedium.js +393 -0
  518. package/dist/render/shaders/lightVolume.d.ts +61 -0
  519. package/dist/render/shaders/lightVolume.js +527 -0
  520. package/dist/render/shaders/line.d.ts +18 -0
  521. package/dist/render/shaders/line.js +122 -0
  522. package/dist/render/shaders/morph.d.ts +26 -0
  523. package/dist/render/shaders/morph.js +61 -0
  524. package/dist/render/shaders/octahedral.d.ts +76 -0
  525. package/dist/render/shaders/octahedral.js +161 -0
  526. package/dist/render/shaders/octahedralResolve.d.ts +25 -0
  527. package/dist/render/shaders/octahedralResolve.js +81 -0
  528. package/dist/render/shaders/oitResolve.d.ts +17 -0
  529. package/dist/render/shaders/oitResolve.js +42 -0
  530. package/dist/render/shaders/outputTransform.d.ts +37 -0
  531. package/dist/render/shaders/outputTransform.js +106 -0
  532. package/dist/render/shaders/panel.d.ts +17 -0
  533. package/dist/render/shaders/panel.js +50 -0
  534. package/dist/render/shaders/particle.d.ts +82 -0
  535. package/dist/render/shaders/particle.js +431 -0
  536. package/dist/render/shaders/prefilter.d.ts +37 -0
  537. package/dist/render/shaders/prefilter.js +276 -0
  538. package/dist/render/shaders/rush.d.ts +21 -0
  539. package/dist/render/shaders/rush.js +355 -0
  540. package/dist/render/shaders/scatter.d.ts +14 -0
  541. package/dist/render/shaders/scatter.js +206 -0
  542. package/dist/render/shaders/sdfText.d.ts +9 -0
  543. package/dist/render/shaders/sdfText.js +65 -0
  544. package/dist/render/shaders/skinning.d.ts +17 -0
  545. package/dist/render/shaders/skinning.js +59 -0
  546. package/dist/render/shaders/sky.d.ts +10 -0
  547. package/dist/render/shaders/sky.js +242 -0
  548. package/dist/render/shaders/smoke.d.ts +8 -0
  549. package/dist/render/shaders/smoke.js +88 -0
  550. package/dist/render/shaders/ssrResolve.d.ts +15 -0
  551. package/dist/render/shaders/ssrResolve.js +28 -0
  552. package/dist/render/shaders/ssrTrace.d.ts +22 -0
  553. package/dist/render/shaders/ssrTrace.js +230 -0
  554. package/dist/render/shaders/tangentFrame.d.ts +17 -0
  555. package/dist/render/shaders/tangentFrame.js +70 -0
  556. package/dist/render/shaders/temporalResolve.d.ts +1 -0
  557. package/dist/render/shaders/temporalResolve.js +150 -0
  558. package/dist/render/shaders/text.d.ts +17 -0
  559. package/dist/render/shaders/text.js +155 -0
  560. package/dist/render/shaders/vertexChannel.d.ts +39 -0
  561. package/dist/render/shaders/vertexChannel.js +69 -0
  562. package/dist/render/shaders/water.d.ts +18 -0
  563. package/dist/render/shaders/water.js +354 -0
  564. package/dist/render/shaders/windStreaks.d.ts +14 -0
  565. package/dist/render/shaders/windStreaks.js +129 -0
  566. package/dist/render/shadowCasters.d.ts +107 -0
  567. package/dist/render/shadowCasters.js +1 -0
  568. package/dist/render/shadowMap.d.ts +10 -0
  569. package/dist/render/shadowMap.js +80 -0
  570. package/dist/render/shotPlacement.d.ts +80 -0
  571. package/dist/render/shotPlacement.js +183 -0
  572. package/dist/render/skinPalette.d.ts +90 -0
  573. package/dist/render/skinPalette.js +136 -0
  574. package/dist/render/ssrPass.d.ts +59 -0
  575. package/dist/render/ssrPass.js +196 -0
  576. package/dist/render/surfaceSheet.d.ts +52 -0
  577. package/dist/render/surfaceSheet.js +99 -0
  578. package/dist/render/surfaceTexture.d.ts +197 -0
  579. package/dist/render/surfaceTexture.js +116 -0
  580. package/dist/render/temporalAa.d.ts +104 -0
  581. package/dist/render/temporalAa.js +194 -0
  582. package/dist/render/temporalPass.d.ts +54 -0
  583. package/dist/render/temporalPass.js +135 -0
  584. package/dist/render/textLayout.d.ts +88 -0
  585. package/dist/render/textLayout.js +201 -0
  586. package/dist/render/textRenderer.d.ts +32 -0
  587. package/dist/render/textRenderer.js +176 -0
  588. package/dist/render/thirdPersonCamera.d.ts +272 -0
  589. package/dist/render/thirdPersonCamera.js +479 -0
  590. package/dist/render/trample.d.ts +57 -0
  591. package/dist/render/trample.js +134 -0
  592. package/dist/render/translucentQueue.d.ts +76 -0
  593. package/dist/render/translucentQueue.js +90 -0
  594. package/dist/render/uniformVectorBudget.d.ts +105 -0
  595. package/dist/render/uniformVectorBudget.js +201 -0
  596. package/dist/render/uploadStep.d.ts +14 -0
  597. package/dist/render/uploadStep.js +14 -0
  598. package/dist/render/vertexDefaults.d.ts +48 -0
  599. package/dist/render/vertexDefaults.js +111 -0
  600. package/dist/render/visibility.d.ts +22 -0
  601. package/dist/render/visibility.js +47 -0
  602. package/dist/render/waterDraw.d.ts +57 -0
  603. package/dist/render/waterDraw.js +102 -0
  604. package/dist/render/waterGrid.d.ts +62 -0
  605. package/dist/render/waterGrid.js +151 -0
  606. package/dist/render/waterRenderer.d.ts +163 -0
  607. package/dist/render/waterRenderer.js +165 -0
  608. package/dist/render/wind.d.ts +45 -0
  609. package/dist/render/wind.js +32 -0
  610. package/dist/render/windField.d.ts +34 -0
  611. package/dist/render/windField.js +13 -0
  612. package/dist/render/windStreakDraw.d.ts +73 -0
  613. package/dist/render/windStreakDraw.js +86 -0
  614. package/dist/render/windStreakRenderer.d.ts +37 -0
  615. package/dist/render/windStreakRenderer.js +86 -0
  616. package/dist/scene/node.d.ts +128 -0
  617. package/dist/scene/node.js +319 -0
  618. package/dist/scene/visit.d.ts +38 -0
  619. package/dist/scene/visit.js +43 -0
  620. package/dist/ui/clipMime.d.ts +46 -0
  621. package/dist/ui/clipMime.js +88 -0
  622. package/dist/ui/exportTarget.d.ts +305 -0
  623. package/dist/ui/exportTarget.js +368 -0
  624. package/dist/ui/frameOverlay.d.ts +59 -0
  625. package/dist/ui/frameOverlay.js +76 -0
  626. package/dist/ui/framePacer.d.ts +142 -0
  627. package/dist/ui/framePacer.js +284 -0
  628. package/dist/ui/frameRecorder.d.ts +188 -0
  629. package/dist/ui/frameRecorder.js +221 -0
  630. package/dist/ui/fullscreen.d.ts +72 -0
  631. package/dist/ui/fullscreen.js +92 -0
  632. package/dist/ui/pixelCursor.d.ts +28 -0
  633. package/dist/ui/pixelCursor.js +66 -0
  634. package/dist/ui/splash.d.ts +86 -0
  635. package/dist/ui/splash.js +300 -0
  636. package/dist/ui/stillFrame.d.ts +22 -0
  637. package/dist/ui/stillFrame.js +40 -0
  638. package/package.json +60 -0
  639. package/src/behavior/behaviorTree.ts +346 -0
  640. package/src/build/shaderComments.ts +0 -0
  641. package/src/cinematic/player.ts +209 -0
  642. package/src/cinematic/script.ts +231 -0
  643. package/src/core/bootGate.ts +49 -0
  644. package/src/core/loadTracker.ts +144 -0
  645. package/src/core/loop.ts +211 -0
  646. package/src/core/messageQueue.ts +145 -0
  647. package/src/core/onceSet.ts +65 -0
  648. package/src/core/preferences.ts +177 -0
  649. package/src/core/remoteSave.ts +347 -0
  650. package/src/core/rng.ts +101 -0
  651. package/src/core/stepBudget.ts +136 -0
  652. package/src/core/storage.ts +114 -0
  653. package/src/core/tickTrace.ts +129 -0
  654. package/src/core/timeCurve.ts +175 -0
  655. package/src/core/withDefaults.ts +28 -0
  656. package/src/dev/contactProbe.ts +115 -0
  657. package/src/dev/fpsMeter.ts +101 -0
  658. package/src/environment/celestialClock.ts +385 -0
  659. package/src/geometry/decal.ts +260 -0
  660. package/src/geometry/filmPatch.ts +158 -0
  661. package/src/geometry/growable.ts +165 -0
  662. package/src/geometry/lightVolume.ts +161 -0
  663. package/src/geometry/meshBuilder.ts +1397 -0
  664. package/src/geometry/pixelFont.ts +189 -0
  665. package/src/geometry/ribbon.ts +790 -0
  666. package/src/geometry/shellFill.ts +265 -0
  667. package/src/geometry/spline.ts +659 -0
  668. package/src/geometry/tangents.ts +173 -0
  669. package/src/geometry/textMesh.ts +96 -0
  670. package/src/geometry/treeBuilder.ts +114 -0
  671. package/src/host/display.ts +180 -0
  672. package/src/host/files.ts +77 -0
  673. package/src/host/lifecycle.ts +63 -0
  674. package/src/host/platformServices.ts +23 -0
  675. package/src/host/screen.ts +134 -0
  676. package/src/index.ts +730 -0
  677. package/src/input/actionMap.ts +377 -0
  678. package/src/input/activeDevice.ts +86 -0
  679. package/src/input/gamepadIdentity.ts +131 -0
  680. package/src/input/gamepadMapping.ts +121 -0
  681. package/src/input/input.ts +872 -0
  682. package/src/input/inputHarness.ts +226 -0
  683. package/src/input/rightGesture.ts +76 -0
  684. package/src/input/rumble.ts +138 -0
  685. package/src/input/touchControls.ts +451 -0
  686. package/src/input/typingTarget.ts +26 -0
  687. package/src/math/bounds.ts +153 -0
  688. package/src/math/color.ts +37 -0
  689. package/src/math/exact.ts +274 -0
  690. package/src/math/frustum.ts +115 -0
  691. package/src/math/intersect.ts +228 -0
  692. package/src/math/scalar.ts +109 -0
  693. package/src/math/spring.ts +106 -0
  694. package/src/nav/navGraph.ts +168 -0
  695. package/src/nav/navPath.ts +217 -0
  696. package/src/nav/navSearch.ts +200 -0
  697. package/src/physics/boxSurface.ts +96 -0
  698. package/src/physics/colliderSurface.ts +213 -0
  699. package/src/physics/compositeSurface.ts +111 -0
  700. package/src/physics/heightSurface.ts +234 -0
  701. package/src/physics/ribbonSurface.ts +642 -0
  702. package/src/render/ambientOcclusionPass.ts +200 -0
  703. package/src/render/areaLights.ts +194 -0
  704. package/src/render/areaShadowSet.ts +405 -0
  705. package/src/render/atmosphere.ts +186 -0
  706. package/src/render/backend/api.ts +802 -0
  707. package/src/render/backend/budget.ts +139 -0
  708. package/src/render/backend/createRenderer.ts +343 -0
  709. package/src/render/backend/deadline.ts +37 -0
  710. package/src/render/backend/probe.ts +152 -0
  711. package/src/render/backend/select.ts +288 -0
  712. package/src/render/backend/timer.ts +59 -0
  713. package/src/render/backend/webgl2/instanced.ts +46 -0
  714. package/src/render/backend/webgl2/morphTexture.ts +58 -0
  715. package/src/render/backend/webgl2/renderer.ts +7484 -0
  716. package/src/render/backend/webgl2/skinPaletteTexture.ts +70 -0
  717. package/src/render/backend/webgpu/boltPass.ts +205 -0
  718. package/src/render/backend/webgpu/buffers.ts +553 -0
  719. package/src/render/backend/webgpu/causticsPass.ts +174 -0
  720. package/src/render/backend/webgpu/clusterBinner.ts +259 -0
  721. package/src/render/backend/webgpu/depthPass.ts +261 -0
  722. package/src/render/backend/webgpu/device.ts +148 -0
  723. package/src/render/backend/webgpu/drawCommand.ts +79 -0
  724. package/src/render/backend/webgpu/environmentTexels.ts +96 -0
  725. package/src/render/backend/webgpu/filmPass.ts +123 -0
  726. package/src/render/backend/webgpu/flatPass.ts +635 -0
  727. package/src/render/backend/webgpu/flockPass.ts +163 -0
  728. package/src/render/backend/webgpu/gpuTimestamps.ts +255 -0
  729. package/src/render/backend/webgpu/insetPass.ts +123 -0
  730. package/src/render/backend/webgpu/instanced.ts +55 -0
  731. package/src/render/backend/webgpu/lightVolumePass.ts +203 -0
  732. package/src/render/backend/webgpu/linePass.ts +270 -0
  733. package/src/render/backend/webgpu/morphTexture.ts +61 -0
  734. package/src/render/backend/webgpu/panelPass.ts +138 -0
  735. package/src/render/backend/webgpu/particlePass.ts +370 -0
  736. package/src/render/backend/webgpu/pipelineCache.ts +152 -0
  737. package/src/render/backend/webgpu/plumePass.ts +292 -0
  738. package/src/render/backend/webgpu/pointShadowPass.ts +368 -0
  739. package/src/render/backend/webgpu/postPass.ts +470 -0
  740. package/src/render/backend/webgpu/probePass.ts +218 -0
  741. package/src/render/backend/webgpu/reflectionPass.ts +137 -0
  742. package/src/render/backend/webgpu/renderer.ts +13004 -0
  743. package/src/render/backend/webgpu/scatterPass.ts +354 -0
  744. package/src/render/backend/webgpu/sdfTextPass.ts +220 -0
  745. package/src/render/backend/webgpu/shaderModules.ts +49 -0
  746. package/src/render/backend/webgpu/shaders/clusterBin.wgsl.ts +219 -0
  747. package/src/render/backend/webgpu/skinPaletteRing.ts +105 -0
  748. package/src/render/backend/webgpu/skinPaletteTexture.ts +79 -0
  749. package/src/render/backend/webgpu/skyPass.ts +85 -0
  750. package/src/render/backend/webgpu/surfaceTexturePass.ts +257 -0
  751. package/src/render/backend/webgpu/textPass.ts +224 -0
  752. package/src/render/backend/webgpu/uniformRing.ts +228 -0
  753. package/src/render/backend/webgpu/waterPass.ts +211 -0
  754. package/src/render/backend/webgpu/windStreakPass.ts +196 -0
  755. package/src/render/billboard.ts +108 -0
  756. package/src/render/bloomChain.ts +101 -0
  757. package/src/render/bloomPass.ts +256 -0
  758. package/src/render/boltBatch.ts +141 -0
  759. package/src/render/boltPool.ts +360 -0
  760. package/src/render/boom.ts +123 -0
  761. package/src/render/camera.ts +348 -0
  762. package/src/render/causticsRenderer.ts +171 -0
  763. package/src/render/cinematicCamera.ts +278 -0
  764. package/src/render/clusteredLights.ts +598 -0
  765. package/src/render/colourGrade.ts +109 -0
  766. package/src/render/compute.ts +83 -0
  767. package/src/render/contextLoss.ts +50 -0
  768. package/src/render/debugLines.ts +411 -0
  769. package/src/render/decalPass.ts +124 -0
  770. package/src/render/decalProjector.ts +390 -0
  771. package/src/render/decalQueue.ts +110 -0
  772. package/src/render/depthConvention.ts +383 -0
  773. package/src/render/drawingBuffer.ts +89 -0
  774. package/src/render/emptyTexture.ts +130 -0
  775. package/src/render/envProbeArray.ts +201 -0
  776. package/src/render/equirectToCube.ts +160 -0
  777. package/src/render/flockGeometry.ts +53 -0
  778. package/src/render/flockRenderer.ts +111 -0
  779. package/src/render/frame/arena.ts +93 -0
  780. package/src/render/frame/index.ts +29 -0
  781. package/src/render/frame/replay.ts +50 -0
  782. package/src/render/frame/resources.ts +61 -0
  783. package/src/render/frame/schedule.ts +85 -0
  784. package/src/render/frameView.ts +20 -0
  785. package/src/render/gizmo.ts +923 -0
  786. package/src/render/globalMedium.ts +154 -0
  787. package/src/render/globalMediumPass.ts +323 -0
  788. package/src/render/gpuCapability.ts +244 -0
  789. package/src/render/gpuTimer.ts +182 -0
  790. package/src/render/halfFloat.ts +39 -0
  791. package/src/render/handleRegistry.ts +96 -0
  792. package/src/render/iesProfile.ts +215 -0
  793. package/src/render/imageTexels.ts +109 -0
  794. package/src/render/instancedMesh.ts +187 -0
  795. package/src/render/instances.ts +92 -0
  796. package/src/render/lightBudget.ts +655 -0
  797. package/src/render/lightMatrix.ts +69 -0
  798. package/src/render/lightVolumeDraw.ts +216 -0
  799. package/src/render/lineBatch.ts +180 -0
  800. package/src/render/linePoints.ts +61 -0
  801. package/src/render/livePointShadowSet.ts +285 -0
  802. package/src/render/lod.ts +86 -0
  803. package/src/render/mesh.ts +536 -0
  804. package/src/render/occlusion.ts +406 -0
  805. package/src/render/oitPass.ts +230 -0
  806. package/src/render/orderIndependent.ts +136 -0
  807. package/src/render/particleBatch.ts +299 -0
  808. package/src/render/particleMaterial.ts +84 -0
  809. package/src/render/particlePool.ts +291 -0
  810. package/src/render/pass.ts +203 -0
  811. package/src/render/passTarget.ts +225 -0
  812. package/src/render/pickable.ts +222 -0
  813. package/src/render/planarReflection.ts +233 -0
  814. package/src/render/planarReflectionDraw.ts +87 -0
  815. package/src/render/plumeGeometry.ts +75 -0
  816. package/src/render/plumeMaterial.ts +99 -0
  817. package/src/render/plumeRenderer.ts +272 -0
  818. package/src/render/pointLightSelection.ts +447 -0
  819. package/src/render/pointShadowArray.ts +276 -0
  820. package/src/render/pointShadowBudget.ts +305 -0
  821. package/src/render/pointShadowImage.ts +470 -0
  822. package/src/render/pointShadowMap.ts +228 -0
  823. package/src/render/pointShadowSystem.ts +408 -0
  824. package/src/render/prefilterEnvMap.ts +162 -0
  825. package/src/render/prefilterPass.ts +115 -0
  826. package/src/render/probeGrid.ts +248 -0
  827. package/src/render/rainField.ts +240 -0
  828. package/src/render/reflectionProbe.ts +530 -0
  829. package/src/render/renderQuality.ts +1054 -0
  830. package/src/render/rendererHarness.ts +214 -0
  831. package/src/render/resolutionGovernor.ts +189 -0
  832. package/src/render/scatterDeform.ts +72 -0
  833. package/src/render/sceneTarget.ts +1032 -0
  834. package/src/render/screenSpaceReflection.ts +524 -0
  835. package/src/render/sdfFont.ts +157 -0
  836. package/src/render/sdfTextLayout.ts +206 -0
  837. package/src/render/sdfTextRenderer.ts +233 -0
  838. package/src/render/seaState.ts +55 -0
  839. package/src/render/segmentQuads.ts +92 -0
  840. package/src/render/shader.ts +190 -0
  841. package/src/render/shaders/ambientOcclusion.ts +354 -0
  842. package/src/render/shaders/arcane.ts +103 -0
  843. package/src/render/shaders/bloom.ts +232 -0
  844. package/src/render/shaders/bolt.ts +164 -0
  845. package/src/render/shaders/caustics.ts +169 -0
  846. package/src/render/shaders/conditionals.ts +58 -0
  847. package/src/render/shaders/decalProject.ts +127 -0
  848. package/src/render/shaders/depth.ts +131 -0
  849. package/src/render/shaders/depthOfField.ts +141 -0
  850. package/src/render/shaders/film.ts +285 -0
  851. package/src/render/shaders/fire.ts +180 -0
  852. package/src/render/shaders/flat/directionalShadow.ts +196 -0
  853. package/src/render/shaders/flat/index.ts +502 -0
  854. package/src/render/shaders/flat/lobes.ts +399 -0
  855. package/src/render/shaders/flat/main.ts +1631 -0
  856. package/src/render/shaders/flat/pointShadow.ts +323 -0
  857. package/src/render/shaders/flat/preamble.ts +875 -0
  858. package/src/render/shaders/flat/probeGrid.ts +152 -0
  859. package/src/render/shaders/flat/surface.ts +41 -0
  860. package/src/render/shaders/flock.ts +103 -0
  861. package/src/render/shaders/fog.ts +99 -0
  862. package/src/render/shaders/fullscreen.ts +28 -0
  863. package/src/render/shaders/generated/ambientOcclusion.wgsl.ts +74 -0
  864. package/src/render/shaders/generated/arcane.wgsl.ts +98 -0
  865. package/src/render/shaders/generated/bloom.wgsl.ts +79 -0
  866. package/src/render/shaders/generated/bolt.wgsl.ts +127 -0
  867. package/src/render/shaders/generated/caustics.wgsl.ts +127 -0
  868. package/src/render/shaders/generated/decalProject.wgsl.ts +69 -0
  869. package/src/render/shaders/generated/depth.wgsl.ts +142 -0
  870. package/src/render/shaders/generated/film.wgsl.ts +143 -0
  871. package/src/render/shaders/generated/fire.wgsl.ts +137 -0
  872. package/src/render/shaders/generated/flat.wgsl.ts +9195 -0
  873. package/src/render/shaders/generated/flock.wgsl.ts +82 -0
  874. package/src/render/shaders/generated/fullscreen.wgsl.ts +20 -0
  875. package/src/render/shaders/generated/globalMedium.wgsl.ts +139 -0
  876. package/src/render/shaders/generated/lightVolume.wgsl.ts +242 -0
  877. package/src/render/shaders/generated/line.wgsl.ts +137 -0
  878. package/src/render/shaders/generated/octahedralResolve.wgsl.ts +60 -0
  879. package/src/render/shaders/generated/oitResolve.wgsl.ts +31 -0
  880. package/src/render/shaders/generated/panel.wgsl.ts +57 -0
  881. package/src/render/shaders/generated/particle.wgsl.ts +343 -0
  882. package/src/render/shaders/generated/prefilter.wgsl.ts +69 -0
  883. package/src/render/shaders/generated/rush.wgsl.ts +139 -0
  884. package/src/render/shaders/generated/scatter.wgsl.ts +205 -0
  885. package/src/render/shaders/generated/sdfText.wgsl.ts +78 -0
  886. package/src/render/shaders/generated/sky.wgsl.ts +109 -0
  887. package/src/render/shaders/generated/smoke.wgsl.ts +93 -0
  888. package/src/render/shaders/generated/ssrResolve.wgsl.ts +26 -0
  889. package/src/render/shaders/generated/ssrTrace.wgsl.ts +94 -0
  890. package/src/render/shaders/generated/temporalResolve.wgsl.ts +54 -0
  891. package/src/render/shaders/generated/text.wgsl.ts +107 -0
  892. package/src/render/shaders/generated/water.wgsl.ts +256 -0
  893. package/src/render/shaders/generated/windStreaks.wgsl.ts +82 -0
  894. package/src/render/shaders/gerstner.ts +110 -0
  895. package/src/render/shaders/globalMedium.ts +396 -0
  896. package/src/render/shaders/lightVolume.ts +546 -0
  897. package/src/render/shaders/line.ts +125 -0
  898. package/src/render/shaders/morph.ts +62 -0
  899. package/src/render/shaders/octahedral.ts +170 -0
  900. package/src/render/shaders/octahedralResolve.ts +83 -0
  901. package/src/render/shaders/oitResolve.ts +42 -0
  902. package/src/render/shaders/outputTransform.ts +107 -0
  903. package/src/render/shaders/panel.ts +51 -0
  904. package/src/render/shaders/particle.ts +438 -0
  905. package/src/render/shaders/prefilter.ts +278 -0
  906. package/src/render/shaders/rush.ts +357 -0
  907. package/src/render/shaders/scatter.ts +211 -0
  908. package/src/render/shaders/sdfText.ts +68 -0
  909. package/src/render/shaders/skinning.ts +59 -0
  910. package/src/render/shaders/sky.ts +243 -0
  911. package/src/render/shaders/smoke.ts +89 -0
  912. package/src/render/shaders/ssrResolve.ts +28 -0
  913. package/src/render/shaders/ssrTrace.ts +233 -0
  914. package/src/render/shaders/tangentFrame.ts +70 -0
  915. package/src/render/shaders/temporalResolve.ts +151 -0
  916. package/src/render/shaders/text.ts +156 -0
  917. package/src/render/shaders/vertexChannel.ts +71 -0
  918. package/src/render/shaders/water.ts +356 -0
  919. package/src/render/shaders/windStreaks.ts +130 -0
  920. package/src/render/shadowCasters.ts +124 -0
  921. package/src/render/shadowMap.ts +89 -0
  922. package/src/render/shotPlacement.ts +266 -0
  923. package/src/render/skinPalette.ts +157 -0
  924. package/src/render/ssrPass.ts +241 -0
  925. package/src/render/surfaceSheet.ts +158 -0
  926. package/src/render/surfaceTexture.ts +310 -0
  927. package/src/render/temporalAa.ts +221 -0
  928. package/src/render/temporalPass.ts +153 -0
  929. package/src/render/textLayout.ts +239 -0
  930. package/src/render/textRenderer.ts +201 -0
  931. package/src/render/thirdPersonCamera.ts +578 -0
  932. package/src/render/trample.ts +140 -0
  933. package/src/render/translucentQueue.ts +161 -0
  934. package/src/render/uniformVectorBudget.ts +246 -0
  935. package/src/render/uploadStep.ts +14 -0
  936. package/src/render/vertexDefaults.ts +115 -0
  937. package/src/render/visibility.ts +56 -0
  938. package/src/render/waterDraw.ts +167 -0
  939. package/src/render/waterGrid.ts +180 -0
  940. package/src/render/waterRenderer.ts +352 -0
  941. package/src/render/wind.ts +79 -0
  942. package/src/render/windField.ts +50 -0
  943. package/src/render/windStreakDraw.ts +131 -0
  944. package/src/render/windStreakRenderer.ts +130 -0
  945. package/src/scene/node.ts +336 -0
  946. package/src/scene/visit.ts +82 -0
  947. package/src/ui/clipMime.ts +109 -0
  948. package/src/ui/exportTarget.ts +491 -0
  949. package/src/ui/frameOverlay.ts +159 -0
  950. package/src/ui/framePacer.ts +351 -0
  951. package/src/ui/frameRecorder.ts +333 -0
  952. package/src/ui/fullscreen.ts +113 -0
  953. package/src/ui/pixelCursor.ts +99 -0
  954. package/src/ui/splash.ts +347 -0
  955. package/src/ui/stillFrame.ts +44 -0
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The screen-space reflection resolve: what the trace found, composited over the scene.
3
+ *
4
+ * **One fetch, because the compositing is the blend state.** The trace writes premultiplied colour
5
+ * and coverage into a target of its own — it has to, since it samples the scene and a pass that
6
+ * read the colour it was writing would be a feedback loop — and this hands those texels to a
7
+ * `(one, one-minus-src-alpha)` blend, which is `over`. So the resolve never samples the target it
8
+ * is compositing onto, which is the arrangement `oitResolve.ts` reaches by the same argument.
9
+ *
10
+ * Premultiplied is what makes several reflective surfaces overlapping accumulate the way two
11
+ * blended layers do rather than the way two independent guesses do.
12
+ *
13
+ * The vertex stage is `FULLSCREEN_VERT`, shared with the occlusion pass, its blur and the rush.
14
+ */
15
+ export const SSR_RESOLVE_FRAG = `#version 300 es
16
+ precision highp float;
17
+
18
+ in vec2 vUv;
19
+
20
+ /** Premultiplied reflection in rgb, coverage in a. Cleared to zero: nothing found is nothing. */
21
+ uniform sampler2D uSsrReflection;
22
+
23
+ out vec4 fragColor;
24
+
25
+ void main() {
26
+ fragColor = textureLod(uSsrReflection, vUv, 0.0);
27
+ }
28
+ `;
@@ -0,0 +1,233 @@
1
+ /**
2
+ * The screen-space reflection trace: a reflected ray marched against the frame's own depth.
3
+ *
4
+ * **This mirrors `traceScreenSpaceRay` line for line**, and that is the point of writing it twice.
5
+ * When a crossing counts as a hit, how far behind a surface it may land, what happens at the edge
6
+ * of the frame and what happens over a gap in the geometry are each a defect that draws a
7
+ * *plausible* picture rather than failing — and each of them is settled by arithmetic that needs no
8
+ * GPU. The TypeScript beside this file is the specification and its tests are where those cases are
9
+ * pinned; this is the same walk, in the language that can sample a depth buffer.
10
+ *
11
+ * **It writes into a target of its own rather than onto the scene**, because it samples the scene:
12
+ * a pass that read the colour it was writing would be a feedback loop, reported once per draw on
13
+ * WebGL2 and rejected outright on WebGPU. `ssrPass.ts` composites the result afterwards, which is
14
+ * the arrangement `oitPass.ts` already uses and for the same reason.
15
+ *
16
+ * **The derivatives come first and the march comes second.** The surface normal is the cross
17
+ * product of the reconstructed position's screen derivatives — there being no normal buffer to read
18
+ * one from — and a derivative taken inside non-uniform control flow is undefined. So everything
19
+ * that could branch happens after them, and every fetch inside the march takes an explicit level
20
+ * for the same rule read the other way.
21
+ */
22
+
23
+ import { glslIsFarDepth } from '../depthConvention.ts';
24
+
25
+ /**
26
+ * The most samples the march may take. `uSsrSteps` breaks out early.
27
+ *
28
+ * A constant bound because a loop the compiler cannot bound is one it cannot unroll or budget, and
29
+ * because thirty-two two-metre steps is sixty-four metres — further than a screen-space method can
30
+ * usefully see, since a ray that long has almost certainly left the frame.
31
+ */
32
+ const MAX_STEPS = 32;
33
+ /** How many times a bracketed crossing is halved. Matches `REFINE_STEPS` in the TypeScript. */
34
+ const REFINE_STEPS = 6;
35
+
36
+ export const SSR_TRACE_FRAG = `#version 300 es
37
+ precision highp float;
38
+
39
+ in vec2 vUv;
40
+
41
+ /**
42
+ * The depth the frame drew, as a copy.
43
+ *
44
+ * \`highp\` because a sampler's default precision is lowp whatever \`precision highp float\` says,
45
+ * and every world position below is reconstructed by dividing through it.
46
+ */
47
+ uniform highp sampler2D uSsrDepth;
48
+ /** The finished scene colour — what a ray finds is a pixel of this. */
49
+ uniform sampler2D uSsrScene;
50
+ /** Screen position and stored depth back to the world. See \`DEPTH_01_TO_CLIP\`. */
51
+ uniform mat4 uSsrDepthToWorld;
52
+ /**
53
+ * World back to a screen position, with the framebuffer's own Y sense already in it.
54
+ *
55
+ * **The flip is in the matrix rather than in a branch here**, so the shader is one expression on
56
+ * both backends and the convention lives in one place — the lesson \`DEPTH_01_TO_CLIP_Y_DOWN\`
57
+ * records at length, arriving through the other door.
58
+ */
59
+ uniform mat4 uSsrViewProj;
60
+ /** World into the reflective box, \`[-1, 1]\` on each axis. */
61
+ uniform mat4 uWorldToSurface;
62
+ uniform vec3 uSsrEye;
63
+ /** The box's own axis. A surface reflects when it faces back along this. */
64
+ uniform vec3 uSsrAxis;
65
+ uniform vec3 uSsrTint;
66
+ uniform float uSsrStrength;
67
+ uniform float uSsrFacingCos;
68
+ uniform float uSsrReach;
69
+ uniform float uSsrThickness;
70
+ uniform float uSsrSteps;
71
+ /** How much of the frame each side is fade, as a fraction. */
72
+ uniform float uSsrEdgeFade;
73
+
74
+ out vec4 fragColor;
75
+
76
+ /** What the frame drew at a screen position, as a world point. */
77
+ vec3 worldAt(vec2 uv, float stored) {
78
+ vec4 world = uSsrDepthToWorld * vec4(uv * 2.0 - 1.0, stored, 1.0);
79
+ return world.xyz / world.w;
80
+ }
81
+
82
+ /**
83
+ * How far the eye is from whatever the frame drew there, and a huge number where it drew nothing.
84
+ *
85
+ * The sky is not a surface. A march that treated an untouched depth as one would reflect the whole
86
+ * world in the horizon, which is the failure that looks like a working effect from one angle.
87
+ */
88
+ float sceneDistanceAt(vec2 uv) {
89
+ float stored = textureLod(uSsrDepth, uv, 0.0).r;
90
+ if (${glslIsFarDepth('stored')}) return 1.0e9;
91
+ return length(worldAt(uv, stored) - uSsrEye);
92
+ }
93
+
94
+ /** A world point to a screen position. False where it is behind the eye or outside the frame. */
95
+ bool projectPoint(vec3 point, out vec2 uv) {
96
+ vec4 clip = uSsrViewProj * vec4(point, 1.0);
97
+ if (clip.w <= 0.0) return false;
98
+ uv = (clip.xy / clip.w) * 0.5 + 0.5;
99
+ return uv.x >= 0.0 && uv.x <= 1.0 && uv.y >= 0.0 && uv.y <= 1.0;
100
+ }
101
+
102
+ void main() {
103
+ float stored = textureLod(uSsrDepth, vUv, 0.0).r;
104
+ vec3 point = worldAt(vUv, stored);
105
+
106
+ /*
107
+ * **The normal from the reconstruction's own derivatives, turned to face the eye.**
108
+ *
109
+ * There is no normal buffer here and adding one is a second colour attachment written by every
110
+ * draw path in the engine. Two neighbouring pixels of the same surface span its plane, so their
111
+ * cross product is its normal — noisy along a silhouette and exact everywhere else. Which way
112
+ * that cross product points depends on which way the framebuffer's rows run, and the two
113
+ * backends disagree about that; a visible surface faces the eye by definition, which is what
114
+ * fixes the sign. \`decalProject.ts\` carries the same pair of facts.
115
+ *
116
+ * Taken here, before anything branches, because a derivative in non-uniform control flow is
117
+ * undefined and the whole of the march below is a branch.
118
+ */
119
+ vec3 plane = cross(dFdx(point), dFdy(point));
120
+ float span = length(plane);
121
+ vec3 normal = span > 0.0 ? plane / span : -uSsrAxis;
122
+ vec3 toEye = uSsrEye - point;
123
+ normal *= sign(dot(toEye, normal));
124
+
125
+ vec3 box = (uWorldToSurface * vec4(point, 1.0)).xyz;
126
+ vec3 inside = step(abs(box), vec3(1.0));
127
+ float mask = inside.x * inside.y * inside.z;
128
+
129
+ /* A surface turned away from the box's axis is not the one the caller called reflective — a wall
130
+ inside the volume of a wet floor is still a wall. Faded rather than cut, so the edge of the
131
+ rule is not an edge in the picture. */
132
+ float facing = dot(normal, -uSsrAxis);
133
+ mask *= smoothstep(uSsrFacingCos, min(1.0, uSsrFacingCos + 0.25), facing);
134
+ /* Nothing was drawn here, so there is no surface to reflect in. */
135
+ mask *= ${glslIsFarDepth('stored')} ? 0.0 : 1.0;
136
+ mask *= uSsrStrength;
137
+
138
+ vec3 found = vec3(0.0);
139
+ float weight = 0.0;
140
+
141
+ if (mask > 0.0) {
142
+ vec3 view = normalize(point - uSsrEye);
143
+ vec3 ray = reflect(view, normal);
144
+
145
+ float steps = max(1.0, uSsrSteps);
146
+ /*
147
+ * Zero to begin with, because the ray starts on the surface it is reflecting off. A crossing
148
+ * needs the previous sample strictly in front, so the first step cannot form one on its own —
149
+ * which is the self-intersection guard, and without it every pixel of a reflective floor takes
150
+ * the comparison on rounding at once.
151
+ */
152
+ float behind = 0.0;
153
+ float previous = 0.0;
154
+ vec2 hitUv = vec2(0.0);
155
+ float hitDistance = 0.0;
156
+ bool found_hit = false;
157
+
158
+ for (int i = 1; i <= ${MAX_STEPS}; i++) {
159
+ if (float(i) > steps) break;
160
+ /* Quadratic rather than even: a first step of centimetres, where the contact seam is, and a
161
+ last step of nearly a metre, out where a reflection is faint and about to leave the frame.
162
+ \`marchDistance\` in the TypeScript is the same expression and the reason is written there. */
163
+ float at = float(i) / steps;
164
+ float t = uSsrReach * at * at;
165
+ vec3 sample_point = point + ray * t;
166
+ vec2 uv;
167
+ if (!projectPoint(sample_point, uv)) break;
168
+
169
+ float scene = sceneDistanceAt(uv);
170
+ float gap = length(sample_point - uSsrEye) - scene;
171
+
172
+ if (behind < 0.0 && gap >= 0.0) {
173
+ /* A crossing, bracketed. Halved rather than reported: the coarse answer is a whole step
174
+ out, which puts a reflection visibly beside the thing reflected. */
175
+ float near = previous;
176
+ float far = t;
177
+ vec2 refinedUv = uv;
178
+ float refinedGap = gap;
179
+ for (int refine = 0; refine < ${REFINE_STEPS}; refine++) {
180
+ float mid = (near + far) * 0.5;
181
+ vec3 midPoint = point + ray * mid;
182
+ vec2 midUv;
183
+ if (!projectPoint(midPoint, midUv)) break;
184
+ float midScene = sceneDistanceAt(midUv);
185
+ float midGap = length(midPoint - uSsrEye) - midScene;
186
+ if (midGap >= 0.0) {
187
+ far = mid;
188
+ refinedUv = midUv;
189
+ refinedGap = midGap;
190
+ } else {
191
+ near = mid;
192
+ }
193
+ }
194
+
195
+ /* Believed only if the refined crossing landed within the thickness. A depth buffer says
196
+ nothing about how thick the thing at a pixel is, so without this a ray that slides onto
197
+ a foreground object pastes that object into the reflection. */
198
+ if (refinedGap <= uSsrThickness) {
199
+ found_hit = true;
200
+ hitUv = refinedUv;
201
+ hitDistance = far;
202
+ }
203
+ break;
204
+ }
205
+
206
+ behind = gap;
207
+ previous = t;
208
+ }
209
+
210
+ if (found_hit) {
211
+ /*
212
+ * Three fades, and they are most of what keeps this from looking wrong.
213
+ *
214
+ * A hit near the edge of the frame is about to leave it, so it leaves gradually rather than
215
+ * along a line. A ray pointing back toward the eye can only find what is between the surface
216
+ * and the camera, which is usually nothing and occasionally the viewer's own geometry. And a
217
+ * hit at the far end of the reach is the least reliable one the march can report, since it
218
+ * had the most chances to slide onto something.
219
+ */
220
+ float edge = clamp(min(min(hitUv.x, 1.0 - hitUv.x), min(hitUv.y, 1.0 - hitUv.y)) /
221
+ max(uSsrEdgeFade, 1.0e-4), 0.0, 1.0);
222
+ float away = clamp((dot(normalize(ray), view) + 1.0) * 0.5, 0.0, 1.0);
223
+ float reach = 1.0 - clamp(hitDistance / max(uSsrReach, 1.0e-4), 0.0, 1.0);
224
+ weight = mask * edge * away * reach;
225
+ found = textureLod(uSsrScene, hitUv, 0.0).rgb * uSsrTint;
226
+ }
227
+ }
228
+
229
+ /* Premultiplied, so the pass composites with (one, one-minus-src-alpha) and several reflective
230
+ surfaces overlapping accumulate the way two blended layers do. */
231
+ fragColor = vec4(found * weight, weight);
232
+ }
233
+ `;
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Which way is along the texture, at a fragment.
3
+ *
4
+ * Two sources and a selection. The attribute frame is what `geometry/tangents.ts` generated,
5
+ * interpolated across the triangle and re-orthogonalised here; the derived frame is the standard
6
+ * cotangent construction from screen-space derivatives, for a mesh that never went through the
7
+ * generator — which is every mesh `meshBuilder` makes procedurally.
8
+ *
9
+ * **Both are computed and one is chosen, rather than one being computed under a branch.** The
10
+ * derivatives below are legal only under uniform control flow, and `hasTangents` arrives as a
11
+ * varying — flat, but a compiler cannot prove a varying uniform. The caller puts this inside its
12
+ * branch on `uNormalStrength`, which is a real uniform, and the selection here is a ternary rather
13
+ * than a branch. `main.ts` carries the same arrangement for `fwidth(vWorldPos)` and the long
14
+ * reason beside it; `AGENTS.md` 2026-08-07 is the rule, and WGSL refuses the module outright
15
+ * rather than leaving a derivative in non-uniform control flow undefined.
16
+ */
17
+ export const TANGENT_FRAME_GLSL = `mat3 tangentFrame(vec3 n, vec3 worldPos, vec2 uv, vec4 tangent, int hasTangents) {
18
+ /*
19
+ * The derived frame: solve for the axis along u from how position and uv change together over
20
+ * the pixel. Exact where the surface is locally planar, approximate where it curves, which is
21
+ * the trade for working at all on geometry that carries no frame.
22
+ */
23
+ vec3 dp1 = dFdx(worldPos);
24
+ vec3 dp2 = dFdy(worldPos);
25
+ vec2 duv1 = dFdx(uv);
26
+ vec2 duv2 = dFdy(uv);
27
+ vec3 dp2perp = cross(dp2, n);
28
+ vec3 dp1perp = cross(n, dp1);
29
+ vec3 dt = dp2perp * duv1.x + dp1perp * duv2.x;
30
+ vec3 db = dp2perp * duv1.y + dp1perp * duv2.y;
31
+ /*
32
+ * **The determinant's sign, which magnitude-normalising throws away — and it is the difference
33
+ * between the two backends.**
34
+ *
35
+ * dFdy measures along *upward* window y in GLSL and along *downward* framebuffer y in WGSL, so
36
+ * dp2 and duv2 both arrive negated on WebGPU. The system this solves is invariant under that —
37
+ * both sides of its second equation flip — but the closed form above is not: dt and db each come
38
+ * out negated, and dividing by their *length* keeps the negation instead of cancelling it. The
39
+ * frame then points the other way on one backend, which reads as a surface lit from the wrong
40
+ * side and nothing else.
41
+ *
42
+ * The UV determinant flips with them, so folding its sign back in restores the invariance the
43
+ * solve always had. Measured before and after on demo/dev/normal.html: the derived panel stood
44
+ * 86 of 255 rms from the attribute panel on WebGPU and 8.8 on WebGL2; with this they agree.
45
+ */
46
+ float det = duv1.x * duv2.y - duv2.x * duv1.y;
47
+ float handed = det < 0.0 ? -1.0 : 1.0;
48
+ /* One scale for both axes, so a stretched UV layout does not shear the frame it produces. */
49
+ float invmax = inversesqrt(max(max(dot(dt, dt), dot(db, db)), 1e-12)) * handed;
50
+ vec3 derivedT = dt * invmax;
51
+ vec3 derivedB = db * invmax;
52
+
53
+ /*
54
+ * The attribute frame, re-orthogonalised. Interpolating a tangent across a triangle leaves it
55
+ * no longer square to the interpolated normal, and Gram-Schmidt is what puts it back —
56
+ * generateTangents does the same per vertex and says why: dropping it is a normal map that
57
+ * shears wherever the geometry curves.
58
+ */
59
+ vec3 attrT = normalize(tangent.xyz - n * dot(n, tangent.xyz));
60
+ /*
61
+ * The bitangent's sign, which is the whole reason w is stored. An artist mapping the left and
62
+ * right of a model onto one patch of texture gives one side a mirrored frame, and a bitangent
63
+ * computed without the sign lights that side inside out.
64
+ */
65
+ vec3 attrB = cross(n, attrT) * tangent.w;
66
+
67
+ vec3 t = hasTangents != 0 ? attrT : derivedT;
68
+ vec3 b = hasTangents != 0 ? attrB : derivedB;
69
+ return mat3(t, b, n);
70
+ }`;
@@ -0,0 +1,151 @@
1
+ /**
2
+ * The temporal resolve: this frame blended into where the last one was.
3
+ *
4
+ * **Antialiasing by moving the camera instead of by multiplying the fill rate.** The projection is
5
+ * shifted a fraction of a pixel each frame, so an edge that fell one side of a pixel centre falls
6
+ * the other side next frame; blending the two puts the edge where it actually is. What MSAA buys
7
+ * inside a frame this buys across frames, for one extra texture and one extra fullscreen pass —
8
+ * which is the trade a browser target wants, where MSAA on a float target is not free and on
9
+ * WebGL2 is not always available at all.
10
+ *
11
+ * **The motion is the camera's, and that is a stated limit rather than an oversight.** The
12
+ * reprojection matrix carries a pixel back through the previous view, which is exact for a static
13
+ * world under a moving camera and wrong for a moving object under a still one. A velocity buffer
14
+ * would fix the second, and it means a second colour attachment on the scene pass and every draw
15
+ * path writing into it — the README carries that as its own gap. What stands in for it here is the
16
+ * neighbourhood clip below, which rejects a history that no longer resembles what is around it;
17
+ * that covers a moving object crossing a background of a different colour, and does not cover one
18
+ * crossing a background of its own.
19
+ *
20
+ * The vertex stage is `FULLSCREEN_VERT`, shared with the occlusion pass, its blur and the rush.
21
+ */
22
+ import { glslSceneDepthToNdc } from '../depthConvention.ts';
23
+
24
+ export const TEMPORAL_RESOLVE_FRAG = `#version 300 es
25
+ precision highp float;
26
+
27
+ in vec2 vUv;
28
+
29
+ /** This frame, rasterised with the projection jittered by \`jitterOffset\`. */
30
+ uniform sampler2D uScene;
31
+ /** What this pass wrote last frame: resolved, and conceptually unjittered. */
32
+ uniform sampler2D uHistory;
33
+ /**
34
+ * The frame's depth.
35
+ *
36
+ * **highp, and it is not decoration.** GLSL ES gives a fragment shader's samplers a default
37
+ * precision of *lowp* whatever \`precision highp float\` says at the top of the file — that line
38
+ * sets the default for float and not for a sampler. A lowp sampler may hand back eight bits, and
39
+ * a depth buffer read at eight bits reprojects to visibly the wrong place. \`rush.ts\` carries the
40
+ * same note for the same reason.
41
+ */
42
+ uniform highp sampler2D uDepth;
43
+ /**
44
+ * The previous view-projection times the inverse of this frame's, so one multiply carries a point
45
+ * from this frame's clip space to the last one's.
46
+ *
47
+ * **Built from the unjittered matrices**, which is why the jitter is applied to a copy used only
48
+ * for rasterising and never to the \`viewProj\` the renderer keeps. The history holds a resolved
49
+ * picture that stands for the unjittered scene, so reprojecting into it through a jittered matrix
50
+ * would look the sample up half a pixel from where it is and undo the accumulation it is trying to
51
+ * build. Camera motion blur reads this same matrix and has a test on it.
52
+ */
53
+ uniform mat4 uReprojection;
54
+ /** One texel of the target, for walking the neighbourhood. */
55
+ uniform vec2 uTexel;
56
+ /**
57
+ * How much of the clipped history to keep, 0 to 1.
58
+ *
59
+ * **Zero is the whole switch.** The first frame, the frame after a resize and the frame after a
60
+ * cut have nothing to sample, and they pass this as zero; so does a renderer with the effect off.
61
+ * The branch on it is the first thing in \`main\`, so an untouched frame costs one compare and the
62
+ * pass is not run at all when the effect is off.
63
+ */
64
+ uniform float uHistoryBlend;
65
+
66
+ out vec4 fragColor;
67
+
68
+ /**
69
+ * The colours actually present around this pixel this frame, as a box.
70
+ *
71
+ * Nine taps rather than five: the diagonals are what catch a thin edge running corner to corner,
72
+ * which is exactly the geometry temporal antialiasing exists for, and a cross-shaped
73
+ * neighbourhood lets a history through along it.
74
+ *
75
+ * **Every fetch is an explicit level.** An implicit derivative under a branch that is not provably
76
+ * uniform fails to compile in WGSL, which invalidates the pipeline and the command buffer while
77
+ * the frame still presents — a failure this repository has paid for more than once, and the reason
78
+ * \`film.ts\` carries the same note.
79
+ */
80
+ void neighbourhood(out vec3 lo, out vec3 hi) {
81
+ lo = vec3(1e9);
82
+ hi = vec3(-1e9);
83
+ for (int y = -1; y <= 1; y++) {
84
+ for (int x = -1; x <= 1; x++) {
85
+ vec3 c = textureLod(uScene, vUv + vec2(float(x), float(y)) * uTexel, 0.0).rgb;
86
+ lo = min(lo, c);
87
+ hi = max(hi, c);
88
+ }
89
+ }
90
+ }
91
+
92
+ /**
93
+ * \`history\` pulled into the box, along the line towards its centre.
94
+ *
95
+ * Clipped towards the centre rather than clamped per channel: a clamp moves each channel on its
96
+ * own, so a history merely brighter than its surroundings lands on a corner of the box and comes
97
+ * back a different hue, which reads as coloured fringing along every moving edge. Shortening the
98
+ * whole offset by one ratio keeps the direction and changes only the length.
99
+ *
100
+ * The same arithmetic is \`clipToNeighbourhood\` in \`temporalAa.ts\`, which is where it is asserted
101
+ * against numbers; the test beside this file asserts the shader still spells it this way.
102
+ */
103
+ vec3 clipToNeighbourhood(vec3 history, vec3 lo, vec3 hi) {
104
+ vec3 centre = (lo + hi) * 0.5;
105
+ vec3 extent = (hi - lo) * 0.5;
106
+ vec3 offset = history - centre;
107
+ /* A channel with no extent cannot bound anything; the max below then answers for the others. */
108
+ vec3 ratios = abs(offset) / max(extent, vec3(1e-7));
109
+ float ratio = max(ratios.x, max(ratios.y, ratios.z));
110
+ if (ratio <= 1.0) return history;
111
+ return centre + offset / ratio;
112
+ }
113
+
114
+ void main() {
115
+ vec3 current = textureLod(uScene, vUv, 0.0).rgb;
116
+
117
+ /* Nothing to blend towards: the first frame, a resize, a cut, or the effect switched off. */
118
+ if (uHistoryBlend <= 0.0) {
119
+ fragColor = vec4(current, 1.0);
120
+ return;
121
+ }
122
+
123
+ float depth = textureLod(uDepth, vUv, 0.0).r;
124
+ vec4 clip = vec4(vUv * 2.0 - 1.0, ${glslSceneDepthToNdc('depth')}, 1.0);
125
+ vec4 previous = uReprojection * clip;
126
+ /* Behind the previous eye: there is no last-frame position to sample. */
127
+ if (previous.w <= 0.0) {
128
+ fragColor = vec4(current, 1.0);
129
+ return;
130
+ }
131
+
132
+ vec2 wasUv = (previous.xy / previous.w) * 0.5 + 0.5;
133
+ /*
134
+ * **Off the edge of the last frame is a disocclusion**, and the honest answer is this frame's
135
+ * colour rather than a clamped sample of the border, which would drag one row of pixels inward
136
+ * as a smear for as long as the camera kept turning.
137
+ */
138
+ if (wasUv.x < 0.0 || wasUv.x > 1.0 || wasUv.y < 0.0 || wasUv.y > 1.0) {
139
+ fragColor = vec4(current, 1.0);
140
+ return;
141
+ }
142
+
143
+ vec3 lo;
144
+ vec3 hi;
145
+ neighbourhood(lo, hi);
146
+ vec3 history = textureLod(uHistory, wasUv, 0.0).rgb;
147
+ vec3 bounded = clipToNeighbourhood(history, lo, hi);
148
+
149
+ fragColor = vec4(mix(current, bounded, uHistoryBlend), 1.0);
150
+ }
151
+ `;
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Screen-space 3D text.
3
+ *
4
+ * Every lit cell of every glyph is one instanced cube. That sounds extravagant
5
+ * and is not: a fifteen-character message is a few hundred boxes, one draw
6
+ * call, and it buys real geometry — text that catches light, casts its own
7
+ * shading, and can rotate in depth. Drawing it as a textured quad would put a
8
+ * flat sticker over a flat-shaded world, which is exactly the "HTML on top"
9
+ * look this exists to get rid of.
10
+ *
11
+ * The projection is built here rather than taken from the scene camera. Text is
12
+ * laid out in pixels and must land where the UI says it lands, whatever the
13
+ * gameplay camera is doing — but it still wants perspective, or a rotating
14
+ * letter shears instead of turning.
15
+ */
16
+ export const TEXT_VERT = `#version 300 es
17
+ precision highp float;
18
+
19
+ layout(location = 0) in vec3 aCorner;
20
+ layout(location = 1) in vec3 aNormal;
21
+ /** Cell position in pixels, relative to the string's origin. */
22
+ layout(location = 2) in vec2 aCell;
23
+ /** Which character this cell belongs to, for staggered animation. */
24
+ layout(location = 3) in float aCharIndex;
25
+
26
+ uniform vec2 uViewport;
27
+ /** Where the string's baseline-left sits, in pixels from the top left. */
28
+ uniform vec2 uOrigin;
29
+ uniform float uCellSize;
30
+ /** Distance from the virtual camera; larger flattens the perspective. */
31
+ uniform float uDepth;
32
+
33
+ /** 0 before a character has arrived, 1 once it has settled. */
34
+ uniform float uReveal;
35
+ /** How many characters the stagger spans — the whole line, not this piece. */
36
+ uniform float uCharCount;
37
+ /**
38
+ * Where this piece starts within that line.
39
+ *
40
+ * A line drawn in several pieces — words around a keycap — must stagger as one
41
+ * sentence. Without this each piece restarts at zero, so the second word begins
42
+ * arriving before the first has finished and they sit at different heights
43
+ * through the whole animation.
44
+ */
45
+ uniform float uCharOffset;
46
+ /** Radians of entry rotation, decaying to zero as a character settles. */
47
+ uniform float uSpin;
48
+ /** Extra scale at the moment of arrival — the overshoot. */
49
+ uniform float uPunch;
50
+ /** Vertical bob amplitude in pixels, and its phase. */
51
+ uniform float uBob;
52
+ uniform float uTime;
53
+ /**
54
+ * Clip space, as the backend drawing this defines it. Identity on WebGL2.
55
+ *
56
+ * This draw builds its own clip position from pixels and never multiplies by a camera, so
57
+ * the correction every other draw carries in its view-projection cannot reach it — the same
58
+ * gap that left the sky unprojecting through the wrong space. Two things are wrong without
59
+ * it on WebGPU, and only one of them is visible: the generated vertex shader negates Y, so
60
+ * the message renders upside down; and z here is a narrow slice about zero, which is inside
61
+ * OpenGL's [-1, 1] and *outside* WebGPU's [0, 1], so half of every glyph is clipped away.
62
+ */
63
+ uniform mat4 uClipCorrection;
64
+
65
+ out vec3 vNormal;
66
+ out float vDepth;
67
+ out float vChar;
68
+
69
+ /**
70
+ * Spring settle: overshoots once and comes back.
71
+ *
72
+ * A character that eases into place reads as an element appearing; one that
73
+ * overshoots and settles reads as an object arriving. That difference is most
74
+ * of what makes text feel like part of a game rather than part of a page.
75
+ */
76
+ float settle(float t) {
77
+ if (t <= 0.0) return 0.0;
78
+ if (t >= 1.0) return 1.0;
79
+ float d = 1.0 - t;
80
+ return 1.0 - d * d * cos(t * 12.0) ;
81
+ }
82
+
83
+ mat2 rot(float a) {
84
+ float s = sin(a);
85
+ float c = cos(a);
86
+ return mat2(c, -s, s, c);
87
+ }
88
+
89
+ void main() {
90
+ // Stagger: each character starts a fraction of the reveal later than the
91
+ // one before it, so the message assembles left to right.
92
+ float span = max(uCharCount, 1.0);
93
+ float start = ((aCharIndex + uCharOffset) / span) * 0.55;
94
+ float local = clamp((uReveal - start) / max(0.45, 1.0 - start), 0.0, 1.0);
95
+ float eased = settle(local);
96
+
97
+ // Arrives spinning about its own horizontal axis and dropping into place.
98
+ float spin = uSpin * (1.0 - eased);
99
+ float rise = (1.0 - eased) * uCellSize * 6.0;
100
+ float punch = 1.0 + uPunch * (1.0 - abs(eased * 2.0 - 1.0));
101
+
102
+ vec3 local3 = aCorner * uCellSize * 0.5 * punch;
103
+ local3.yz = rot(spin) * local3.yz;
104
+
105
+ vec2 cell = aCell * uCellSize;
106
+ float bob = sin(uTime * 3.1 + aCharIndex * 0.7) * uBob;
107
+
108
+ // Pixels, y down from the top-left corner of the viewport.
109
+ vec2 screen = uOrigin + vec2(cell.x, -cell.y) + vec2(0.0, rise - bob);
110
+ vec3 view = vec3(screen + local3.xy, -uDepth + local3.z);
111
+
112
+ // A hand-built perspective divide. The near plane is the viewport itself, so
113
+ // a cell at depth uDepth is exactly its pixel size on screen.
114
+ float invDepth = uDepth / max(0.001, -view.z);
115
+ vec2 ndc = ((view.xy * invDepth) / uViewport) * 2.0 - 1.0;
116
+ // Depth from the cube's own extrusion, mapped into a narrow slice of the
117
+ // range so a message sorts against itself without ever reaching the scene.
118
+ float depth = clamp(-local3.z / max(1.0, uCellSize * 2.0), -1.0, 1.0) * 0.4;
119
+ gl_Position = uClipCorrection * vec4(ndc.x, -ndc.y, depth, 1.0);
120
+
121
+ vec3 n = aNormal;
122
+ n.yz = rot(spin) * n.yz;
123
+ vNormal = n;
124
+ vDepth = local3.z;
125
+ vChar = eased;
126
+ }`;
127
+
128
+ export const TEXT_FRAG = `#version 300 es
129
+ precision highp float;
130
+
131
+ in vec3 vNormal;
132
+ in float vDepth;
133
+ in float vChar;
134
+
135
+ uniform vec3 uColor;
136
+ /** Self-illumination on top of the shaded colour. */
137
+ uniform float uGlow;
138
+ uniform float uAlpha;
139
+
140
+ out vec4 fragColor;
141
+
142
+ void main() {
143
+ /*
144
+ * A fixed key light rather than the world's. Text has to stay legible at
145
+ * midnight and at noon, and lighting it with the scene would make a
146
+ * notification unreadable on exactly the night runs where it matters most.
147
+ * The light only exists to give the cubes an edge.
148
+ */
149
+ vec3 key = normalize(vec3(-0.35, 0.7, 0.6));
150
+ float lambert = 0.55 + 0.45 * max(dot(normalize(vNormal), key), 0.0);
151
+
152
+ vec3 lit = uColor * lambert;
153
+ // The glow rides the arrival: brightest as a character lands, settling after.
154
+ vec3 emissive = uColor * uGlow * (0.45 + 0.55 * vChar);
155
+ fragColor = vec4(lit + emissive, uAlpha);
156
+ }`;