@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,233 @@
1
+ import type { ReadonlyMat4, ReadonlyVec3 } from 'gl-matrix';
2
+ import type { DecalBox } from './decalProjector.ts';
3
+ /**
4
+ * Screen-space reflection: the frame reflected in a surface, by marching against its own depth.
5
+ *
6
+ * **What a planar reflection cannot reach is the whole reason this exists.** `PlanarReflection`
7
+ * re-renders the world from a mirrored camera for one *horizontal plane at one height*, which is
8
+ * exactly right for a lake and gives nothing for anything else: a floor that undulates, a bonnet,
9
+ * a tilted pane, a wet cobbled street. It also costs a second pass over the scene. This costs one
10
+ * fullscreen pass over the pixels a caller says are reflective, follows the surface per pixel
11
+ * whatever shape it is, and is exact about contact — the point where an object meets the floor,
12
+ * which is the part a viewer reads first and the part a reduced-resolution mirror plane loses.
13
+ *
14
+ * **What it cannot do is see anything the frame did not draw.** A reflection of something behind
15
+ * the camera, or hidden behind the reflecting surface itself, is not in the colour buffer and
16
+ * cannot be recovered from it. That is the honest limit of every screen-space method, and the
17
+ * fades below are what keep it from being an obvious one: a ray that leaves the frame, that points
18
+ * back toward the eye, or that runs a long way before hitting anything is faded out rather than
19
+ * being allowed to answer with the wrong pixel.
20
+ *
21
+ * **Reflective is a region rather than a material, and that is a fact about a forward renderer.**
22
+ * There is no G-buffer, so by the time this pass runs nothing on screen records which surface was
23
+ * polished — that would be a second colour attachment written by every draw path in the engine,
24
+ * which is the same price the temporal row declined for a velocity buffer. A caller declares a
25
+ * `ReflectiveSurface` instead: a box, and a facing rule for which surfaces inside it reflect. It is
26
+ * the shape `DecalProjector` already has, for the same reason.
27
+ */
28
+ /**
29
+ * Clip Y negated, for a backend whose framebuffer rows run downward.
30
+ *
31
+ * **Premultiplied into the matrix the shader is handed rather than branched on inside it**, so one
32
+ * expression serves both backends and the convention lives in exactly one place. That is the lesson
33
+ * `DEPTH_01_TO_CLIP_Y_DOWN` records at length, arriving from the other direction: that constant
34
+ * turns a screen position into the world, this turns the world back into a screen position, and a
35
+ * pass that got one of them wrong would march along the mirror image of its own ray.
36
+ *
37
+ * The identity on WebGL2, whose framebuffer origin is the bottom left, so nothing is multiplied
38
+ * there at all.
39
+ */
40
+ export declare const CLIP_Y_FLIP: ReadonlyMat4;
41
+ /**
42
+ * A world point to a screen position, or false where the frame cannot show it.
43
+ *
44
+ * **False rather than a clamped answer, on both counts.** A point behind the eye has a negative
45
+ * `w`, and dividing by it mirrors the point through the origin — so it comes back as a perfectly
46
+ * ordinary screen position somewhere else in the frame, and a march that believed it would read a
47
+ * depth belonging to a place the ray never went. A point outside the frame has no pixel at all, and
48
+ * sampling for one anyway takes the clamped border texel: a reflection acquires a smear of whatever
49
+ * is at the edge of the screen and drags it as the camera turns.
50
+ *
51
+ * `viewProjection` carries the framebuffer's Y sense already. See `CLIP_Y_FLIP`.
52
+ */
53
+ export declare function projectToUv(viewProjection: ReadonlyMat4, x: number, y: number, z: number, uv: Float32Array): boolean;
54
+ /** How a march is walked. */
55
+ export interface ScreenSpaceMarch {
56
+ /** How many samples along the ray. More is a more accurate hit and a slower pass. */
57
+ readonly steps: number;
58
+ /** How far the ray travels in world metres before it gives up. */
59
+ readonly reachM: number;
60
+ /**
61
+ * How deep a depth sample is treated as being, world metres.
62
+ *
63
+ * **A depth buffer holds one distance per pixel and says nothing about how thick the thing at
64
+ * that distance is.** A march that treats it as an infinitely deep wall reports a hit for every
65
+ * ray that ends up behind anything at all, so a reflection acquires a copy of whatever lies
66
+ * between it and the far plane. This is the number that says how far behind a surface a crossing
67
+ * may land and still be believed.
68
+ */
69
+ readonly thicknessM: number;
70
+ }
71
+ /** Where a march ended. Reused rather than returned, because the pass runs per pixel. */
72
+ export interface ScreenSpaceHit {
73
+ hit: boolean;
74
+ /** Screen position of the hit, 0 to 1. */
75
+ u: number;
76
+ v: number;
77
+ /** How far along the ray it was found, world metres. */
78
+ distanceM: number;
79
+ }
80
+ export declare function newScreenSpaceHit(): ScreenSpaceHit;
81
+ /**
82
+ * Where the `i`th of `steps` samples falls along a ray of length `reach`.
83
+ *
84
+ * **Quadratic rather than even, and the difference is the contact seam.** A reflection is read
85
+ * first at the line where an object meets the floor, and that is exactly where an evenly spaced
86
+ * march is worst: the first sample is a whole step out, so every pixel within a step of the contact
87
+ * finds its crossing already behind the object and reports nothing. Measured on
88
+ * `demo/dev/ssr.html`, evenly spaced: a ten-metre reach in 24 steps leaves a visible dark band
89
+ * along the contact and 11,826 reflected pixels, and shortening the reach to four — which is the
90
+ * same thing as a smaller step — closes most of the band and gives 13,184.
91
+ *
92
+ * Spacing the samples by the square of their index buys both: a first step of a few centimetres
93
+ * and a last one of nearly a metre, out where a reflection is faint and about to leave the frame
94
+ * anyway.
95
+ */
96
+ export declare function marchDistance(index: number, steps: number, reachM: number): number;
97
+ /**
98
+ * March a reflected ray against the depth the frame has already drawn.
99
+ *
100
+ * **This is the arithmetic the shader runs, written where it can be tested.** No GPU is needed to
101
+ * decide when a crossing is a hit, how far off the coarse answer is, or what happens at the edge
102
+ * of the frame — and each of those is a defect that draws a plausible picture rather than failing.
103
+ * `orderIndependent.ts` and `temporalAa.ts` are the same split, and the shader beside this file
104
+ * mirrors it line for line.
105
+ *
106
+ * `project` turns a world point into a screen position and answers false where it lands outside
107
+ * the frame. `sceneDistance` says how far the eye is from whatever the frame drew at a screen
108
+ * position, and `Infinity` where it drew nothing — the sky, which is not a surface and must not be
109
+ * reflected as one.
110
+ *
111
+ * **A hit is a crossing and not a comparison.** The ray has to be in front of the scene at one
112
+ * sample and behind it at the next; a ray that is behind from the start never crossed anything and
113
+ * is looking at the back of the world. That is also what keeps a grazing ray off its own surface:
114
+ * the first sample is a whole step along, and at zero the comparison is a coin toss on rounding
115
+ * taken by every pixel of a reflective floor at once.
116
+ */
117
+ export declare function traceScreenSpaceRay(origin: ReadonlyVec3, direction: ReadonlyVec3, eye: ReadonlyVec3, march: ScreenSpaceMarch, project: (x: number, y: number, z: number, uv: Float32Array) => boolean, sceneDistance: (u: number, v: number) => number, out: ScreenSpaceHit): boolean;
118
+ /**
119
+ * How much of a hit survives its distance from the edge of the frame.
120
+ *
121
+ * **A sample off the edge of the frame clamps to the border texel**, so a reflection acquires a
122
+ * smear of whatever is at the edge of the screen and drags it as the camera turns — the failure
123
+ * that looks most like the effect working. The march refuses to sample outside the frame at all;
124
+ * this is the other half, fading a hit *near* the edge so a reflection leaves rather than being
125
+ * cut off along a line.
126
+ *
127
+ * `band` is how much of the frame each side is fade, as a fraction.
128
+ */
129
+ export declare function screenEdgeFade(u: number, v: number, band: number): number;
130
+ /**
131
+ * How much of a reflection survives its ray pointing back toward the eye.
132
+ *
133
+ * A ray coming back at the viewer can only find what is between the surface and the camera, which
134
+ * is usually nothing and occasionally the viewer's own geometry — the artefact that reads as a
135
+ * smear of the foreground pasted onto a floor. One at a ray running directly away from the eye,
136
+ * nothing at one running directly into it.
137
+ */
138
+ export declare function towardCameraFade(direction: ReadonlyVec3, viewDirection: ReadonlyVec3): number;
139
+ export interface ReflectiveSurfaceOptions extends DecalBox {
140
+ /** How much of what the ray finds lands on the surface, 0 to 1. */
141
+ readonly strength?: number;
142
+ /** How far a ray may travel, world metres. */
143
+ readonly reachM?: number;
144
+ /** How deep a depth sample is treated as being. See `ScreenSpaceMarch.thicknessM`. */
145
+ readonly thicknessM?: number;
146
+ /** How many samples along a ray. */
147
+ readonly steps?: number;
148
+ /** How far from facing the box's own axis a surface may be turned and still reflect. */
149
+ readonly facingCos?: number;
150
+ /** What the reflection is multiplied by, for a tinted mirror. */
151
+ readonly tint?: ReadonlyVec3;
152
+ }
153
+ /**
154
+ * A box a consumer declares, inside which surfaces reflect what the frame drew.
155
+ *
156
+ * Held and moved, like `DecalProjector` and for the same reason: a wet patch follows the rain and
157
+ * a polished floor does not move at all, and rebuilding two matrices from four vectors is the whole
158
+ * of a pose. Both matrices live in the object and are rewritten in place.
159
+ */
160
+ export declare class ReflectiveSurface {
161
+ /** World space into the box, `[-1, 1]` on each axis. */
162
+ readonly worldToSurface: Float32Array<ArrayBuffer>;
163
+ /** The box back into the world, for the scissor bound. */
164
+ readonly surfaceToWorld: Float32Array<ArrayBuffer>;
165
+ /** Which way the reflective surfaces inside the box face, normalised and pointing *into* them. */
166
+ readonly axis: Float32Array<ArrayBuffer>;
167
+ readonly tint: Float32Array<ArrayBuffer>;
168
+ strength: number;
169
+ reachM: number;
170
+ thicknessM: number;
171
+ steps: number;
172
+ facingCos: number;
173
+ private readonly box;
174
+ constructor(options: ReflectiveSurfaceOptions);
175
+ /** Move the box. Allocation-free, so a wet patch may follow the weather every frame. */
176
+ setPose(center: ReadonlyVec3, forward: ReadonlyVec3, up: ReadonlyVec3): void;
177
+ setSize(halfExtents: ReadonlyVec3): void;
178
+ private rebuild;
179
+ }
180
+ /**
181
+ * How many reflective surfaces one frame may draw.
182
+ *
183
+ * **A cap rather than an open number**, for the reason `MAX_DRAWN_DECALS` gives: each is a
184
+ * scissored pass with a uniform slot behind it, and the slots are one buffer written before the
185
+ * passes are recorded. Eight is lower than the decal cap on purpose — a mark costs a texture fetch
186
+ * per pixel and a reflection costs a march, so a scene wanting dozens of reflective regions is
187
+ * asking for something a screen-space method should refuse rather than deliver slowly.
188
+ */
189
+ export declare const MAX_REFLECTIVE_SURFACES = 8;
190
+ /**
191
+ * How much of the frame each side fades a hit out, as a fraction.
192
+ *
193
+ * **One number for both backends**, because it decides where a reflection stops and two copies of
194
+ * it is a reflection that ends in a different place on each — the 2026-08-13 rule in `AGENTS.md`
195
+ * applied to a fade. A tenth is wide enough that a reflection leaving the frame reads as leaving
196
+ * rather than as being cut off, and narrow enough that the middle of the picture is untouched.
197
+ */
198
+ export declare const REFLECTION_EDGE_FADE = 0.1;
199
+ /** One recorded surface. Every field is a copy of what it held when it was submitted. */
200
+ export interface RecordedReflection {
201
+ readonly worldToSurface: Float32Array;
202
+ readonly surfaceToWorld: Float32Array;
203
+ readonly axis: Float32Array;
204
+ readonly tint: Float32Array;
205
+ strength: number;
206
+ reachM: number;
207
+ thicknessM: number;
208
+ steps: number;
209
+ facingCos: number;
210
+ }
211
+ /**
212
+ * The frame's reflective surfaces, held until the pass that reads the finished picture can run.
213
+ *
214
+ * **Here rather than in a file of its own**, unlike `DecalQueue`: it is the same twenty lines of
215
+ * pooling around a different record, and this row adds a shader as well as a pass, so the module
216
+ * that would hold it is one more entry in every consumer's bundle for no reader's benefit.
217
+ *
218
+ * Everything is copied, for the reason `TranslucentQueue` states: a surface is an object a consumer
219
+ * keeps and moves, so a queue holding the reference would replay every one of them wearing the last
220
+ * pose written.
221
+ */
222
+ export declare class ReflectionQueue {
223
+ private readonly pool;
224
+ private count;
225
+ private warned;
226
+ get length(): number;
227
+ /** How many records are pooled, which a test uses to assert a steady scene stops allocating. */
228
+ get capacity(): number;
229
+ record(surface: ReflectiveSurface): void;
230
+ replay(each: (surface: RecordedReflection) => void): void;
231
+ /** Empty it for the next frame, keeping the storage. */
232
+ reset(): void;
233
+ }
@@ -0,0 +1,415 @@
1
+ import { decalToWorldMatrix, worldToDecalMatrix } from './decalProjector.js';
2
+ /**
3
+ * Screen-space reflection: the frame reflected in a surface, by marching against its own depth.
4
+ *
5
+ * **What a planar reflection cannot reach is the whole reason this exists.** `PlanarReflection`
6
+ * re-renders the world from a mirrored camera for one *horizontal plane at one height*, which is
7
+ * exactly right for a lake and gives nothing for anything else: a floor that undulates, a bonnet,
8
+ * a tilted pane, a wet cobbled street. It also costs a second pass over the scene. This costs one
9
+ * fullscreen pass over the pixels a caller says are reflective, follows the surface per pixel
10
+ * whatever shape it is, and is exact about contact — the point where an object meets the floor,
11
+ * which is the part a viewer reads first and the part a reduced-resolution mirror plane loses.
12
+ *
13
+ * **What it cannot do is see anything the frame did not draw.** A reflection of something behind
14
+ * the camera, or hidden behind the reflecting surface itself, is not in the colour buffer and
15
+ * cannot be recovered from it. That is the honest limit of every screen-space method, and the
16
+ * fades below are what keep it from being an obvious one: a ray that leaves the frame, that points
17
+ * back toward the eye, or that runs a long way before hitting anything is faded out rather than
18
+ * being allowed to answer with the wrong pixel.
19
+ *
20
+ * **Reflective is a region rather than a material, and that is a fact about a forward renderer.**
21
+ * There is no G-buffer, so by the time this pass runs nothing on screen records which surface was
22
+ * polished — that would be a second colour attachment written by every draw path in the engine,
23
+ * which is the same price the temporal row declined for a velocity buffer. A caller declares a
24
+ * `ReflectiveSurface` instead: a box, and a facing rule for which surfaces inside it reflect. It is
25
+ * the shape `DecalProjector` already has, for the same reason.
26
+ */
27
+ /**
28
+ * Clip Y negated, for a backend whose framebuffer rows run downward.
29
+ *
30
+ * **Premultiplied into the matrix the shader is handed rather than branched on inside it**, so one
31
+ * expression serves both backends and the convention lives in exactly one place. That is the lesson
32
+ * `DEPTH_01_TO_CLIP_Y_DOWN` records at length, arriving from the other direction: that constant
33
+ * turns a screen position into the world, this turns the world back into a screen position, and a
34
+ * pass that got one of them wrong would march along the mirror image of its own ray.
35
+ *
36
+ * The identity on WebGL2, whose framebuffer origin is the bottom left, so nothing is multiplied
37
+ * there at all.
38
+ */
39
+ export const CLIP_Y_FLIP = new Float32Array([
40
+ 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
41
+ ]);
42
+ /**
43
+ * A world point to a screen position, or false where the frame cannot show it.
44
+ *
45
+ * **False rather than a clamped answer, on both counts.** A point behind the eye has a negative
46
+ * `w`, and dividing by it mirrors the point through the origin — so it comes back as a perfectly
47
+ * ordinary screen position somewhere else in the frame, and a march that believed it would read a
48
+ * depth belonging to a place the ray never went. A point outside the frame has no pixel at all, and
49
+ * sampling for one anyway takes the clamped border texel: a reflection acquires a smear of whatever
50
+ * is at the edge of the screen and drags it as the camera turns.
51
+ *
52
+ * `viewProjection` carries the framebuffer's Y sense already. See `CLIP_Y_FLIP`.
53
+ */
54
+ export function projectToUv(viewProjection, x, y, z, uv) {
55
+ const clipX = (viewProjection[0] ?? 0) * x +
56
+ (viewProjection[4] ?? 0) * y +
57
+ (viewProjection[8] ?? 0) * z +
58
+ (viewProjection[12] ?? 0);
59
+ const clipY = (viewProjection[1] ?? 0) * x +
60
+ (viewProjection[5] ?? 0) * y +
61
+ (viewProjection[9] ?? 0) * z +
62
+ (viewProjection[13] ?? 0);
63
+ const clipW = (viewProjection[3] ?? 0) * x +
64
+ (viewProjection[7] ?? 0) * y +
65
+ (viewProjection[11] ?? 0) * z +
66
+ (viewProjection[15] ?? 0);
67
+ if (clipW <= 0)
68
+ return false;
69
+ const u = (clipX / clipW) * 0.5 + 0.5;
70
+ const v = (clipY / clipW) * 0.5 + 0.5;
71
+ if (u < 0 || u > 1 || v < 0 || v > 1)
72
+ return false;
73
+ uv[0] = u;
74
+ uv[1] = v;
75
+ return true;
76
+ }
77
+ export function newScreenSpaceHit() {
78
+ return { hit: false, u: 0, v: 0, distanceM: 0 };
79
+ }
80
+ /**
81
+ * How many times a bracketed crossing is halved.
82
+ *
83
+ * Six, and it was four until the samples stopped being evenly spaced: the brackets at the far end
84
+ * of a quadratic march are several metres wide, and four halvings of one of those is a hit a
85
+ * quarter of a metre out.
86
+ */
87
+ const REFINE_STEPS = 6;
88
+ /**
89
+ * Where the `i`th of `steps` samples falls along a ray of length `reach`.
90
+ *
91
+ * **Quadratic rather than even, and the difference is the contact seam.** A reflection is read
92
+ * first at the line where an object meets the floor, and that is exactly where an evenly spaced
93
+ * march is worst: the first sample is a whole step out, so every pixel within a step of the contact
94
+ * finds its crossing already behind the object and reports nothing. Measured on
95
+ * `demo/dev/ssr.html`, evenly spaced: a ten-metre reach in 24 steps leaves a visible dark band
96
+ * along the contact and 11,826 reflected pixels, and shortening the reach to four — which is the
97
+ * same thing as a smaller step — closes most of the band and gives 13,184.
98
+ *
99
+ * Spacing the samples by the square of their index buys both: a first step of a few centimetres
100
+ * and a last one of nearly a metre, out where a reflection is faint and about to leave the frame
101
+ * anyway.
102
+ */
103
+ export function marchDistance(index, steps, reachM) {
104
+ const at = index / steps;
105
+ return reachM * at * at;
106
+ }
107
+ /** Scratch for a projected sample, so a march allocates nothing. */
108
+ const UV = new Float32Array(2);
109
+ /**
110
+ * March a reflected ray against the depth the frame has already drawn.
111
+ *
112
+ * **This is the arithmetic the shader runs, written where it can be tested.** No GPU is needed to
113
+ * decide when a crossing is a hit, how far off the coarse answer is, or what happens at the edge
114
+ * of the frame — and each of those is a defect that draws a plausible picture rather than failing.
115
+ * `orderIndependent.ts` and `temporalAa.ts` are the same split, and the shader beside this file
116
+ * mirrors it line for line.
117
+ *
118
+ * `project` turns a world point into a screen position and answers false where it lands outside
119
+ * the frame. `sceneDistance` says how far the eye is from whatever the frame drew at a screen
120
+ * position, and `Infinity` where it drew nothing — the sky, which is not a surface and must not be
121
+ * reflected as one.
122
+ *
123
+ * **A hit is a crossing and not a comparison.** The ray has to be in front of the scene at one
124
+ * sample and behind it at the next; a ray that is behind from the start never crossed anything and
125
+ * is looking at the back of the world. That is also what keeps a grazing ray off its own surface:
126
+ * the first sample is a whole step along, and at zero the comparison is a coin toss on rounding
127
+ * taken by every pixel of a reflective floor at once.
128
+ */
129
+ export function traceScreenSpaceRay(origin, direction, eye, march, project, sceneDistance, out) {
130
+ out.hit = false;
131
+ out.u = 0;
132
+ out.v = 0;
133
+ out.distanceM = 0;
134
+ const steps = Math.max(1, Math.round(march.steps));
135
+ const ox = origin[0] ?? 0;
136
+ const oy = origin[1] ?? 0;
137
+ const oz = origin[2] ?? 0;
138
+ const dx = direction[0] ?? 0;
139
+ const dy = direction[1] ?? 0;
140
+ const dz = direction[2] ?? 0;
141
+ const ex = eye[0] ?? 0;
142
+ const ey = eye[1] ?? 0;
143
+ const ez = eye[2] ?? 0;
144
+ /*
145
+ * How far behind the scene the previous sample was; negative is in front of it.
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 exactly the self-intersection guard a screen-space march needs. A ray leaving a
150
+ * surface at any angle moves in front of the scene immediately and earns its crossing on the
151
+ * step after; a ray hugging the surface never does, and a floor full of pixels taking that
152
+ * comparison on rounding is the speckle this effect is remembered for.
153
+ */
154
+ let behind = 0;
155
+ let previous = 0;
156
+ for (let i = 1; i <= steps; i++) {
157
+ const t = marchDistance(i, steps, march.reachM);
158
+ const x = ox + dx * t;
159
+ const y = oy + dy * t;
160
+ const z = oz + dz * t;
161
+ if (!project(x, y, z, UV))
162
+ return false;
163
+ const scene = sceneDistance(UV[0] ?? 0, UV[1] ?? 0);
164
+ /* Nothing was drawn here, so there is no surface to cross. Carried rather than treated as a
165
+ miss so a ray may pass over a gap in the geometry and hit what is beyond it. */
166
+ if (!Number.isFinite(scene)) {
167
+ /* In front of nothing, which is true and is what lets a ray cross a gap in the geometry —
168
+ a skyline, a doorway — and land on what is beyond it. */
169
+ behind = -Infinity;
170
+ previous = t;
171
+ continue;
172
+ }
173
+ const ray = Math.hypot(x - ex, y - ey, z - ez);
174
+ const gap = ray - scene;
175
+ if (behind < 0 && gap >= 0) {
176
+ /*
177
+ * A crossing, bracketed between `previous` and `t`. Halved rather than reported: the coarse
178
+ * answer is a whole step out, which puts a reflection visibly beside the thing reflected.
179
+ */
180
+ let near = previous;
181
+ let far = t;
182
+ let hitU = UV[0] ?? 0;
183
+ let hitV = UV[1] ?? 0;
184
+ let hitGap = gap;
185
+ for (let refine = 0; refine < REFINE_STEPS; refine++) {
186
+ const mid = (near + far) / 2;
187
+ const mx = ox + dx * mid;
188
+ const my = oy + dy * mid;
189
+ const mz = oz + dz * mid;
190
+ if (!project(mx, my, mz, UV))
191
+ break;
192
+ const midScene = sceneDistance(UV[0] ?? 0, UV[1] ?? 0);
193
+ if (!Number.isFinite(midScene))
194
+ break;
195
+ const midGap = Math.hypot(mx - ex, my - ey, mz - ez) - midScene;
196
+ if (midGap > 0) {
197
+ far = mid;
198
+ hitU = UV[0] ?? 0;
199
+ hitV = UV[1] ?? 0;
200
+ hitGap = midGap;
201
+ }
202
+ else {
203
+ near = mid;
204
+ }
205
+ }
206
+ /* Believed only if the refined crossing landed within the thickness. Further behind than
207
+ that and the ray flew past a thin surface rather than landing on it. */
208
+ if (hitGap > march.thicknessM)
209
+ return false;
210
+ out.hit = true;
211
+ out.u = hitU;
212
+ out.v = hitV;
213
+ out.distanceM = far;
214
+ return true;
215
+ }
216
+ behind = gap;
217
+ previous = t;
218
+ }
219
+ return false;
220
+ }
221
+ /**
222
+ * How much of a hit survives its distance from the edge of the frame.
223
+ *
224
+ * **A sample off the edge of the frame clamps to the border texel**, so a reflection acquires a
225
+ * smear of whatever is at the edge of the screen and drags it as the camera turns — the failure
226
+ * that looks most like the effect working. The march refuses to sample outside the frame at all;
227
+ * this is the other half, fading a hit *near* the edge so a reflection leaves rather than being
228
+ * cut off along a line.
229
+ *
230
+ * `band` is how much of the frame each side is fade, as a fraction.
231
+ */
232
+ export function screenEdgeFade(u, v, band) {
233
+ if (band <= 0)
234
+ return u < 0 || u > 1 || v < 0 || v > 1 ? 0 : 1;
235
+ const nearest = Math.min(u, 1 - u, v, 1 - v);
236
+ return Math.min(1, Math.max(0, nearest / band));
237
+ }
238
+ /**
239
+ * How much of a reflection survives its ray pointing back toward the eye.
240
+ *
241
+ * A ray coming back at the viewer can only find what is between the surface and the camera, which
242
+ * is usually nothing and occasionally the viewer's own geometry — the artefact that reads as a
243
+ * smear of the foreground pasted onto a floor. One at a ray running directly away from the eye,
244
+ * nothing at one running directly into it.
245
+ */
246
+ export function towardCameraFade(direction, viewDirection) {
247
+ const dx = direction[0] ?? 0;
248
+ const dy = direction[1] ?? 0;
249
+ const dz = direction[2] ?? 0;
250
+ const vx = viewDirection[0] ?? 0;
251
+ const vy = viewDirection[1] ?? 0;
252
+ const vz = viewDirection[2] ?? 0;
253
+ const dLength = Math.hypot(dx, dy, dz);
254
+ const vLength = Math.hypot(vx, vy, vz);
255
+ if (dLength === 0 || vLength === 0)
256
+ return 0;
257
+ const along = (dx * vx + dy * vy + dz * vz) / (dLength * vLength);
258
+ return Math.min(1, Math.max(0, (along + 1) / 2));
259
+ }
260
+ /**
261
+ * A box a consumer declares, inside which surfaces reflect what the frame drew.
262
+ *
263
+ * Held and moved, like `DecalProjector` and for the same reason: a wet patch follows the rain and
264
+ * a polished floor does not move at all, and rebuilding two matrices from four vectors is the whole
265
+ * of a pose. Both matrices live in the object and are rewritten in place.
266
+ */
267
+ export class ReflectiveSurface {
268
+ /** World space into the box, `[-1, 1]` on each axis. */
269
+ worldToSurface = new Float32Array(16);
270
+ /** The box back into the world, for the scissor bound. */
271
+ surfaceToWorld = new Float32Array(16);
272
+ /** Which way the reflective surfaces inside the box face, normalised and pointing *into* them. */
273
+ axis = new Float32Array(3);
274
+ tint = new Float32Array(3);
275
+ strength;
276
+ reachM;
277
+ thicknessM;
278
+ steps;
279
+ facingCos;
280
+ box;
281
+ constructor(options) {
282
+ this.box = {
283
+ center: Float32Array.from(options.center),
284
+ halfExtents: Float32Array.from(options.halfExtents),
285
+ forward: Float32Array.from(options.forward),
286
+ up: Float32Array.from(options.up),
287
+ };
288
+ this.tint.set(options.tint === undefined ? [1, 1, 1] : options.tint);
289
+ /* Half, because a mirror is the rare case: a wet floor, polished stone and a car bonnet all
290
+ return a fraction of what lands on them, and a consumer who wants a mirror asks for one. */
291
+ this.strength = options.strength ?? 0.5;
292
+ /* Eight metres covers a room and a street corner. Further costs steps rather than accuracy,
293
+ since the step is the reach divided by them. */
294
+ this.reachM = options.reachM ?? 8;
295
+ /* A quarter of a metre. Thinner rejects a real hit on a coarsely stepped ray; thicker starts
296
+ reflecting what is behind a wall. */
297
+ this.thicknessM = options.thicknessM ?? 0.25;
298
+ this.steps = options.steps ?? 24;
299
+ /* The same 0.1 `projectDecal` and `DecalProjector` default to, and for the same reason. */
300
+ this.facingCos = options.facingCos ?? 0.1;
301
+ this.rebuild();
302
+ }
303
+ /** Move the box. Allocation-free, so a wet patch may follow the weather every frame. */
304
+ setPose(center, forward, up) {
305
+ this.box.center.set(center);
306
+ this.box.forward.set(forward);
307
+ this.box.up.set(up);
308
+ this.rebuild();
309
+ }
310
+ setSize(halfExtents) {
311
+ this.box.halfExtents.set(halfExtents);
312
+ this.rebuild();
313
+ }
314
+ rebuild() {
315
+ worldToDecalMatrix(this.worldToSurface, this.box);
316
+ decalToWorldMatrix(this.surfaceToWorld, this.box);
317
+ const f = this.box.forward;
318
+ const length = Math.hypot(f[0] ?? 0, f[1] ?? 0, f[2] ?? 0);
319
+ this.axis[0] = (f[0] ?? 0) / length;
320
+ this.axis[1] = (f[1] ?? 0) / length;
321
+ this.axis[2] = (f[2] ?? 0) / length;
322
+ }
323
+ }
324
+ /**
325
+ * How many reflective surfaces one frame may draw.
326
+ *
327
+ * **A cap rather than an open number**, for the reason `MAX_DRAWN_DECALS` gives: each is a
328
+ * scissored pass with a uniform slot behind it, and the slots are one buffer written before the
329
+ * passes are recorded. Eight is lower than the decal cap on purpose — a mark costs a texture fetch
330
+ * per pixel and a reflection costs a march, so a scene wanting dozens of reflective regions is
331
+ * asking for something a screen-space method should refuse rather than deliver slowly.
332
+ */
333
+ export const MAX_REFLECTIVE_SURFACES = 8;
334
+ /**
335
+ * How much of the frame each side fades a hit out, as a fraction.
336
+ *
337
+ * **One number for both backends**, because it decides where a reflection stops and two copies of
338
+ * it is a reflection that ends in a different place on each — the 2026-08-13 rule in `AGENTS.md`
339
+ * applied to a fade. A tenth is wide enough that a reflection leaving the frame reads as leaving
340
+ * rather than as being cut off, and narrow enough that the middle of the picture is untouched.
341
+ */
342
+ export const REFLECTION_EDGE_FADE = 0.1;
343
+ function newRecord() {
344
+ return {
345
+ worldToSurface: new Float32Array(16),
346
+ surfaceToWorld: new Float32Array(16),
347
+ axis: new Float32Array(3),
348
+ tint: new Float32Array(3),
349
+ strength: 0.5,
350
+ reachM: 8,
351
+ thicknessM: 0.25,
352
+ steps: 24,
353
+ facingCos: 0.1,
354
+ };
355
+ }
356
+ /**
357
+ * The frame's reflective surfaces, held until the pass that reads the finished picture can run.
358
+ *
359
+ * **Here rather than in a file of its own**, unlike `DecalQueue`: it is the same twenty lines of
360
+ * pooling around a different record, and this row adds a shader as well as a pass, so the module
361
+ * that would hold it is one more entry in every consumer's bundle for no reader's benefit.
362
+ *
363
+ * Everything is copied, for the reason `TranslucentQueue` states: a surface is an object a consumer
364
+ * keeps and moves, so a queue holding the reference would replay every one of them wearing the last
365
+ * pose written.
366
+ */
367
+ export class ReflectionQueue {
368
+ pool = [];
369
+ count = 0;
370
+ warned = false;
371
+ get length() {
372
+ return this.count;
373
+ }
374
+ /** How many records are pooled, which a test uses to assert a steady scene stops allocating. */
375
+ get capacity() {
376
+ return this.pool.length;
377
+ }
378
+ record(surface) {
379
+ if (this.count >= MAX_REFLECTIVE_SURFACES) {
380
+ if (!this.warned) {
381
+ this.warned = true;
382
+ console.warn(`driftengine: more than ${MAX_REFLECTIVE_SURFACES} reflective surfaces in one frame, so ` +
383
+ 'the rest are dropped. Each one marches a ray per covered pixel, which is not a cost ' +
384
+ 'to pay for a region nobody is looking at — cull them, or widen one box instead.');
385
+ }
386
+ return;
387
+ }
388
+ let record = this.pool[this.count];
389
+ if (record === undefined) {
390
+ record = newRecord();
391
+ this.pool.push(record);
392
+ }
393
+ record.worldToSurface.set(surface.worldToSurface);
394
+ record.surfaceToWorld.set(surface.surfaceToWorld);
395
+ record.axis.set(surface.axis);
396
+ record.tint.set(surface.tint);
397
+ record.strength = Math.min(1, Math.max(0, surface.strength));
398
+ record.reachM = Math.max(0, surface.reachM);
399
+ record.thicknessM = Math.max(0, surface.thicknessM);
400
+ record.steps = Math.min(32, Math.max(1, Math.round(surface.steps)));
401
+ record.facingCos = surface.facingCos;
402
+ this.count++;
403
+ }
404
+ replay(each) {
405
+ for (let i = 0; i < this.count; i++) {
406
+ const record = this.pool[i];
407
+ if (record !== undefined)
408
+ each(record);
409
+ }
410
+ }
411
+ /** Empty it for the next frame, keeping the storage. */
412
+ reset() {
413
+ this.count = 0;
414
+ }
415
+ }