@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,22 @@
1
+ import type { ReadonlyMat4 } from 'gl-matrix';
2
+ import type { Bounds } from '../math/bounds.ts';
3
+ import type { Frustum } from '../math/frustum.ts';
4
+ /**
5
+ * Whether a mesh placed by a model matrix is anywhere inside a frustum.
6
+ *
7
+ * Shared by both backends rather than written twice, for the reason the resource table is: two
8
+ * copies of a decision are two chances to answer it differently, and a culling disagreement
9
+ * between backends is an object that is present on one and missing on the other.
10
+ *
11
+ * **Scale is the trap, and it is why this is not two lines at each call site.** A bounding sphere
12
+ * put through a scaling matrix is a sphere of a different size, so the world radius is the local
13
+ * radius times the *largest* of the three axis scales. Taking the average, or the x scale, or
14
+ * forgetting entirely, culls an enlarged object while it is plainly on screen — and the failure
15
+ * looks like a threshold to tune rather than a factor that is missing.
16
+ *
17
+ * Non-uniform scale makes the transformed shape an ellipsoid, and the largest axis is the sphere
18
+ * that contains it. Conservative, which is the only direction a cull may err in.
19
+ *
20
+ * Allocates nothing.
21
+ */
22
+ export declare function boundsVisible(frustum: Frustum, bounds: Bounds, model: ReadonlyMat4): boolean;
@@ -0,0 +1,47 @@
1
+ import { sphereInFrustum } from '../math/frustum.js';
2
+ /**
3
+ * Whether a mesh placed by a model matrix is anywhere inside a frustum.
4
+ *
5
+ * Shared by both backends rather than written twice, for the reason the resource table is: two
6
+ * copies of a decision are two chances to answer it differently, and a culling disagreement
7
+ * between backends is an object that is present on one and missing on the other.
8
+ *
9
+ * **Scale is the trap, and it is why this is not two lines at each call site.** A bounding sphere
10
+ * put through a scaling matrix is a sphere of a different size, so the world radius is the local
11
+ * radius times the *largest* of the three axis scales. Taking the average, or the x scale, or
12
+ * forgetting entirely, culls an enlarged object while it is plainly on screen — and the failure
13
+ * looks like a threshold to tune rather than a factor that is missing.
14
+ *
15
+ * Non-uniform scale makes the transformed shape an ellipsoid, and the largest axis is the sphere
16
+ * that contains it. Conservative, which is the only direction a cull may err in.
17
+ *
18
+ * Allocates nothing.
19
+ */
20
+ export function boundsVisible(frustum, bounds, model) {
21
+ const cx = bounds.centre[0] ?? 0;
22
+ const cy = bounds.centre[1] ?? 0;
23
+ const cz = bounds.centre[2] ?? 0;
24
+ /* The centre through the model matrix. Column-major, so a column is four consecutive entries. */
25
+ const m0 = model[0] ?? 0;
26
+ const m1 = model[1] ?? 0;
27
+ const m2 = model[2] ?? 0;
28
+ const m4 = model[4] ?? 0;
29
+ const m5 = model[5] ?? 0;
30
+ const m6 = model[6] ?? 0;
31
+ const m8 = model[8] ?? 0;
32
+ const m9 = model[9] ?? 0;
33
+ const m10 = model[10] ?? 0;
34
+ const x = m0 * cx + m4 * cy + m8 * cz + (model[12] ?? 0);
35
+ const y = m1 * cx + m5 * cy + m9 * cz + (model[13] ?? 0);
36
+ const z = m2 * cx + m6 * cy + m10 * cz + (model[14] ?? 0);
37
+ /*
38
+ * The length of each basis vector is that axis' scale, rotation included: a rotation preserves
39
+ * length, so this reads the scale out of a matrix that also rotates without having to
40
+ * decompose it.
41
+ */
42
+ const sx = Math.sqrt(m0 * m0 + m1 * m1 + m2 * m2);
43
+ const sy = Math.sqrt(m4 * m4 + m5 * m5 + m6 * m6);
44
+ const sz = Math.sqrt(m8 * m8 + m9 * m9 + m10 * m10);
45
+ const radius = bounds.radius * Math.max(sx, sy, sz);
46
+ return sphereInFrustum(frustum, x, y, z, radius);
47
+ }
@@ -0,0 +1,57 @@
1
+ import type { Vec3 } from '../math/color.ts';
2
+ import type { WaterBody } from './waterRenderer.ts';
3
+ /**
4
+ * Where the sheet is laid and how hard it is blowing on it, decided for both backends.
5
+ *
6
+ * **The interesting half of `WaterRenderer.draw` is arithmetic, not binding.** Snapping the
7
+ * ocean to whole cells, choosing a sea state from the wind or from an authored agitation,
8
+ * falling back to a bearing in a dead calm — each is a rule with a reason, and a second copy
9
+ * of any of them is a sea that behaves differently depending on which backend drew it. That is
10
+ * the 2026-08-13 rule in `AGENTS.md`.
11
+ */
12
+ /**
13
+ * Everything the water shader needs that is not a colour, a matrix or the medium.
14
+ *
15
+ * **The three extents are pairs, and were single numbers until 2026-08-28.** A body bounded by one
16
+ * number is a square, and the shape a consumer actually has is a channel: long in one axis, narrow
17
+ * in the other. Each is measured along the body's **own** axes, which `forward` then turns into the
18
+ * world — so the rim and the wave fade follow the rectangle however it is laid, and the ocean passes
19
+ * the same number twice and is unchanged.
20
+ */
21
+ export interface ResolvedWater {
22
+ /** Where the sheet is centred: snapped under the camera, or the body's own middle. */
23
+ readonly origin: Float32Array;
24
+ /** Metres per unit of the sheet's own grid, per axis. The ocean's grid is metres, so (1, 1). */
25
+ readonly span: Float32Array;
26
+ /** How far the sheet carries out, per axis. */
27
+ readonly half: Float32Array;
28
+ /** What the wave fade is measured against, so a bowl is flat at its rim. */
29
+ readonly nearHalf: Float32Array;
30
+ /** The body's own +z in world XZ, unit length. (0, 1) for anything unturned. */
31
+ readonly forward: Float32Array;
32
+ /** Unit wind bearing, or the authored fallback in a dead calm. */
33
+ readonly windDir: Float32Array;
34
+ waveGain: number;
35
+ foamGain: number;
36
+ /** Whether this body is a bounded patch rather than the ocean. */
37
+ bounded: boolean;
38
+ }
39
+ export declare function createResolvedWater(): ResolvedWater;
40
+ /**
41
+ * Lay the sheet and settle the sea, into a target the caller owns.
42
+ *
43
+ * `cellSize`, `nearHalfExtent` and `farHalfExtent` come from the grid the renderer built, so
44
+ * they differ per renderer rather than being global — which is why they are arguments.
45
+ */
46
+ export declare function resolveWater(settings: WaterBody, cameraX: number, cameraZ: number, cellSize: number, nearHalfExtent: number, farHalfExtent: number, windX: number, windZ: number, out: ResolvedWater): ResolvedWater;
47
+ /** The body's own colours and scalars, read the same way by both backends. */
48
+ export interface WaterAppearance {
49
+ readonly deepColor: Vec3;
50
+ readonly shallowColor: Vec3;
51
+ readonly level: number;
52
+ readonly nadirOpacity: number;
53
+ readonly visibility: number;
54
+ readonly mirror: number;
55
+ }
56
+ /** Defaults applied once, so neither backend invents its own. */
57
+ export declare function waterAppearance(settings: WaterBody): WaterAppearance;
@@ -0,0 +1,102 @@
1
+ import { seaStateForAgitation, seaStateForWind } from './seaState.js';
2
+ export function createResolvedWater() {
3
+ return {
4
+ origin: new Float32Array(2),
5
+ span: new Float32Array([1, 1]),
6
+ half: new Float32Array(2),
7
+ nearHalf: new Float32Array(2),
8
+ forward: new Float32Array([0, 1]),
9
+ windDir: new Float32Array([1, 0]),
10
+ waveGain: 0,
11
+ foamGain: 0,
12
+ bounded: false,
13
+ };
14
+ }
15
+ /**
16
+ * Lay the sheet and settle the sea, into a target the caller owns.
17
+ *
18
+ * `cellSize`, `nearHalfExtent` and `farHalfExtent` come from the grid the renderer built, so
19
+ * they differ per renderer rather than being global — which is why they are arguments.
20
+ */
21
+ export function resolveWater(settings, cameraX, cameraZ, cellSize, nearHalfExtent, farHalfExtent, windX, windZ, out) {
22
+ const bounds = settings.bounds;
23
+ out.bounded = bounds !== undefined;
24
+ if (bounds === undefined) {
25
+ /*
26
+ * Snapped to whole cells. Anything else re-samples the wave field as the camera moves,
27
+ * which reads as the surface swimming rather than as the camera travelling over it.
28
+ */
29
+ out.origin[0] = Math.floor(cameraX / cellSize) * cellSize;
30
+ out.origin[1] = Math.floor(cameraZ / cellSize) * cellSize;
31
+ out.span[0] = 1;
32
+ out.span[1] = 1;
33
+ out.half[0] = farHalfExtent;
34
+ out.half[1] = farHalfExtent;
35
+ out.nearHalf[0] = nearHalfExtent;
36
+ out.nearHalf[1] = nearHalfExtent;
37
+ out.forward[0] = 0;
38
+ out.forward[1] = 1;
39
+ }
40
+ else {
41
+ out.origin[0] = bounds.centreX;
42
+ out.origin[1] = bounds.centreZ;
43
+ /*
44
+ * **`halfM` is the square shorthand and a per-axis extent overrides it on that axis alone.**
45
+ * The rule is applied here and nowhere else, which is what makes two spellings of a square
46
+ * affordable: a second place resolving them is where they would begin to disagree. A body given
47
+ * none of the three is zero-sized and draws nothing, which is a defined state and the right
48
+ * one — the other reading of "no extent" is the unbounded ocean, and omitting `bounds` already
49
+ * says that.
50
+ */
51
+ const halfX = bounds.halfX ?? bounds.halfM ?? 0;
52
+ const halfZ = bounds.halfZ ?? bounds.halfM ?? 0;
53
+ out.span[0] = halfX;
54
+ out.span[1] = halfZ;
55
+ out.half[0] = halfX;
56
+ out.half[1] = halfZ;
57
+ /* The wave fade measures against this, so a bounded body is flat at its own rim. */
58
+ out.nearHalf[0] = halfX;
59
+ out.nearHalf[1] = halfZ;
60
+ /*
61
+ * The direction the body's own +z takes, normalised here so that no backend has to.
62
+ *
63
+ * A direction of no length is read as unturned instead of divided by: the basis the shader
64
+ * builds from this places every vertex of the sheet, so a NaN here is not a wrong sheet, it is
65
+ * a sheet that is nowhere. `Math.sqrt` and not `Math.hypot`, as everywhere else here.
66
+ */
67
+ const fx = bounds.forwardX ?? 0;
68
+ const fz = bounds.forwardZ ?? 1;
69
+ const length = Math.sqrt(fx * fx + fz * fz);
70
+ out.forward[0] = length > 1e-6 ? fx / length : 0;
71
+ out.forward[1] = length > 1e-6 ? fz / length : 1;
72
+ }
73
+ const windSpeed = Math.hypot(windX, windZ);
74
+ /*
75
+ * **`agitation` is an override, not an addition.** Wind builds waves, which is right under
76
+ * the sky and wrong for a cistern, a flooded corridor or a tank below deck — those have a
77
+ * surface that moves with no wind to explain it, and tying them to the weather means a gale
78
+ * outside makes the water in a sealed room choppy.
79
+ */
80
+ const sea = settings.agitation === undefined
81
+ ? seaStateForWind(windSpeed)
82
+ : seaStateForAgitation(settings.agitation);
83
+ const inv = windSpeed > 1e-5 ? 1 / windSpeed : 0;
84
+ /* Falls back to the authored bearing in a dead calm rather than collapsing every wave
85
+ direction onto zero. */
86
+ out.windDir[0] = inv === 0 ? 1 : windX * inv;
87
+ out.windDir[1] = inv === 0 ? 0 : windZ * inv;
88
+ out.waveGain = sea.steepness * (settings.waveScale ?? 1);
89
+ out.foamGain = sea.foam;
90
+ return out;
91
+ }
92
+ /** Defaults applied once, so neither backend invents its own. */
93
+ export function waterAppearance(settings) {
94
+ return {
95
+ deepColor: settings.deepColor,
96
+ shallowColor: settings.shallowColor,
97
+ level: settings.level,
98
+ nadirOpacity: settings.density ?? 0.22,
99
+ visibility: settings.visibility ?? 1,
100
+ mirror: settings.mirror ?? 0,
101
+ };
102
+ }
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The ocean's tessellation: a near sheet that carries waves, and a ringed skirt
3
+ * that carries distance.
4
+ *
5
+ * These are two different problems and one mesh cannot serve both.
6
+ *
7
+ * The near sheet must be *uniform* and snapped to whole cells. That combination
8
+ * is what makes the wave lattice invariant in world space: shifting by exactly
9
+ * one cell lands every vertex where its neighbour was, so the reconstructed
10
+ * surface does not change as the camera moves. Break the uniformity — grade the
11
+ * cells to buy reach, say — and that invariance goes with it. Cells wider than
12
+ * the snap quantum are re-sampled at a new phase on every snap, and the surface
13
+ * visibly swims underfoot.
14
+ *
15
+ * The skirt carries no displacement, so its tessellation cannot distort
16
+ * anything, and it can stretch to tens of kilometres. That reach is not
17
+ * decoration: a sheet that stops short ends in a straight line with a corner in
18
+ * it, and no alpha ramp hides that. At eye height the horizon of a flat plane is
19
+ * at infinity, so a fade measured in world metres compresses into a pixel or two
20
+ * of skyline and the corner survives. The rim has to be too small to resolve.
21
+ *
22
+ * But the skirt cannot be a single leap to the far edge either, even though its
23
+ * *shape* would be identical. Fog is evaluated per fragment from world position,
24
+ * so one triangle spanning 150 m to 30 km squeezes the entire fog gradient into
25
+ * the handful of pixels that triangle covers — which puts a hard line right back
26
+ * at the near sheet's rim, in exactly the place the skirt was meant to hide. So
27
+ * the skirt is a set of concentric rings whose radii grow geometrically, giving
28
+ * the gradient somewhere to happen. They are cheap: being flat, they need only
29
+ * enough vertices per side to stay a square.
30
+ */
31
+ export interface WaterGrid {
32
+ /** Grid-local xz pairs, metres from the camera-snapped origin. */
33
+ readonly offsets: Float32Array;
34
+ readonly indices: Uint32Array;
35
+ /**
36
+ * Cell size of the near sheet. The grid origin snaps to whole multiples of
37
+ * this — see above for why that must equal the cell size exactly.
38
+ */
39
+ readonly cellSize: number;
40
+ /** Half-width of the wave-bearing near sheet. */
41
+ readonly nearHalfExtent: number;
42
+ /** Half-width of the outermost ring, i.e. how far the ocean reaches. */
43
+ readonly farHalfExtent: number;
44
+ }
45
+ export declare function buildWaterGrid(resolution: number, nearExtent: number, farHalfExtent: number): WaterGrid;
46
+ /**
47
+ * Cells per side of the bounded-body patch.
48
+ *
49
+ * Exported so neither backend keeps its own copy: a patch built at two resolutions is two
50
+ * different meshes for the same pool, and nothing would raise.
51
+ */
52
+ export declare const PATCH_RESOLUTION = 24;
53
+ /**
54
+ * A flat square sheet in [-1, 1], for any body of water with edges.
55
+ *
56
+ * Here rather than in `waterRenderer.ts` because both backends build the same patch, and a
57
+ * second copy of a mesh generator is a bounded body whose triangles differ per backend.
58
+ */
59
+ export declare function buildUnitSheet(resolution: number): {
60
+ offsets: Float32Array;
61
+ indices: Uint32Array;
62
+ };
@@ -0,0 +1,151 @@
1
+ /**
2
+ * The ocean's tessellation: a near sheet that carries waves, and a ringed skirt
3
+ * that carries distance.
4
+ *
5
+ * These are two different problems and one mesh cannot serve both.
6
+ *
7
+ * The near sheet must be *uniform* and snapped to whole cells. That combination
8
+ * is what makes the wave lattice invariant in world space: shifting by exactly
9
+ * one cell lands every vertex where its neighbour was, so the reconstructed
10
+ * surface does not change as the camera moves. Break the uniformity — grade the
11
+ * cells to buy reach, say — and that invariance goes with it. Cells wider than
12
+ * the snap quantum are re-sampled at a new phase on every snap, and the surface
13
+ * visibly swims underfoot.
14
+ *
15
+ * The skirt carries no displacement, so its tessellation cannot distort
16
+ * anything, and it can stretch to tens of kilometres. That reach is not
17
+ * decoration: a sheet that stops short ends in a straight line with a corner in
18
+ * it, and no alpha ramp hides that. At eye height the horizon of a flat plane is
19
+ * at infinity, so a fade measured in world metres compresses into a pixel or two
20
+ * of skyline and the corner survives. The rim has to be too small to resolve.
21
+ *
22
+ * But the skirt cannot be a single leap to the far edge either, even though its
23
+ * *shape* would be identical. Fog is evaluated per fragment from world position,
24
+ * so one triangle spanning 150 m to 30 km squeezes the entire fog gradient into
25
+ * the handful of pixels that triangle covers — which puts a hard line right back
26
+ * at the near sheet's rim, in exactly the place the skirt was meant to hide. So
27
+ * the skirt is a set of concentric rings whose radii grow geometrically, giving
28
+ * the gradient somewhere to happen. They are cheap: being flat, they need only
29
+ * enough vertices per side to stay a square.
30
+ */
31
+ /** Concentric rings between the near sheet and the far edge. */
32
+ const SKIRT_RINGS = 12;
33
+ /** Vertices per side of each ring. A flat square needs very few. */
34
+ const SKIRT_SEGMENTS_PER_SIDE = 8;
35
+ /**
36
+ * Point at parameter `t` (in [0, 4)) around a square of the given half-width,
37
+ * walked anticlockwise from the -x/-z corner. Consistent ordering across rings
38
+ * is what lets consecutive rings be stitched by index arithmetic alone.
39
+ */
40
+ function squarePerimeter(t, radius) {
41
+ const side = Math.floor(t) % 4;
42
+ const u = t - Math.floor(t);
43
+ const span = radius * 2;
44
+ if (side === 0)
45
+ return [-radius + span * u, -radius];
46
+ if (side === 1)
47
+ return [radius, -radius + span * u];
48
+ if (side === 2)
49
+ return [radius - span * u, radius];
50
+ return [-radius, radius - span * u];
51
+ }
52
+ export function buildWaterGrid(resolution, nearExtent, farHalfExtent) {
53
+ const side = resolution + 1;
54
+ const cellSize = nearExtent / resolution;
55
+ const nearHalfExtent = nearExtent * 0.5;
56
+ const perimeter = SKIRT_SEGMENTS_PER_SIDE * 4;
57
+ const nearVertices = side * side;
58
+ const skirtVertices = (SKIRT_RINGS + 1) * perimeter;
59
+ const offsets = new Float32Array((nearVertices + skirtVertices) * 2);
60
+ for (let z = 0; z < side; z++) {
61
+ const gz = z * cellSize - nearHalfExtent;
62
+ for (let x = 0; x < side; x++) {
63
+ const v = (z * side + x) * 2;
64
+ offsets[v] = x * cellSize - nearHalfExtent;
65
+ offsets[v + 1] = gz;
66
+ }
67
+ }
68
+ // Geometric radii: each ring is the same factor wider than the last, so the
69
+ // fog gradient gets roughly equal screen space in every band.
70
+ const growth = (farHalfExtent / nearHalfExtent) ** (1 / SKIRT_RINGS);
71
+ for (let ring = 0; ring <= SKIRT_RINGS; ring++) {
72
+ const radius = ring === SKIRT_RINGS ? farHalfExtent : nearHalfExtent * growth ** ring;
73
+ for (let i = 0; i < perimeter; i++) {
74
+ const [px, pz] = squarePerimeter(i / SKIRT_SEGMENTS_PER_SIDE, radius);
75
+ const v = (nearVertices + ring * perimeter + i) * 2;
76
+ offsets[v] = px;
77
+ offsets[v + 1] = pz;
78
+ }
79
+ }
80
+ const indices = new Uint32Array(resolution * resolution * 6 + SKIRT_RINGS * perimeter * 6);
81
+ let i = 0;
82
+ for (let z = 0; z < resolution; z++) {
83
+ for (let x = 0; x < resolution; x++) {
84
+ const a = z * side + x;
85
+ const b = a + 1;
86
+ const c = a + side;
87
+ const d = c + 1;
88
+ indices[i++] = a;
89
+ indices[i++] = c;
90
+ indices[i++] = b;
91
+ indices[i++] = b;
92
+ indices[i++] = c;
93
+ indices[i++] = d;
94
+ }
95
+ }
96
+ for (let ring = 0; ring < SKIRT_RINGS; ring++) {
97
+ const inner = nearVertices + ring * perimeter;
98
+ const outer = inner + perimeter;
99
+ for (let k = 0; k < perimeter; k++) {
100
+ const next = (k + 1) % perimeter;
101
+ indices[i++] = inner + k;
102
+ indices[i++] = outer + k;
103
+ indices[i++] = inner + next;
104
+ indices[i++] = inner + next;
105
+ indices[i++] = outer + k;
106
+ indices[i++] = outer + next;
107
+ }
108
+ }
109
+ return { offsets, indices, cellSize, nearHalfExtent, farHalfExtent };
110
+ }
111
+ /**
112
+ * Cells per side of the bounded-body patch.
113
+ *
114
+ * Exported so neither backend keeps its own copy: a patch built at two resolutions is two
115
+ * different meshes for the same pool, and nothing would raise.
116
+ */
117
+ export const PATCH_RESOLUTION = 24;
118
+ /**
119
+ * A flat square sheet in [-1, 1], for any body of water with edges.
120
+ *
121
+ * Here rather than in `waterRenderer.ts` because both backends build the same patch, and a
122
+ * second copy of a mesh generator is a bounded body whose triangles differ per backend.
123
+ */
124
+ export function buildUnitSheet(resolution) {
125
+ const side = resolution + 1;
126
+ const offsets = new Float32Array(side * side * 2);
127
+ let v = 0;
128
+ for (let z = 0; z < side; z++) {
129
+ for (let x = 0; x < side; x++) {
130
+ offsets[v++] = (x / resolution) * 2 - 1;
131
+ offsets[v++] = (z / resolution) * 2 - 1;
132
+ }
133
+ }
134
+ const indices = new Uint32Array(resolution * resolution * 6);
135
+ let i = 0;
136
+ for (let z = 0; z < resolution; z++) {
137
+ for (let x = 0; x < resolution; x++) {
138
+ const a = z * side + x;
139
+ const b = a + 1;
140
+ const c = a + side;
141
+ const d = c + 1;
142
+ indices[i++] = a;
143
+ indices[i++] = c;
144
+ indices[i++] = b;
145
+ indices[i++] = b;
146
+ indices[i++] = c;
147
+ indices[i++] = d;
148
+ }
149
+ }
150
+ return { offsets, indices };
151
+ }
@@ -0,0 +1,163 @@
1
+ import type { FrameView } from './frameView.ts';
2
+ import type { Vec3 } from '../math/color.ts';
3
+ import type { Atmosphere } from './atmosphere.ts';
4
+ import type { PlanarReflection } from './planarReflection.ts';
5
+ import type { PointLightSet } from './lightBudget.ts';
6
+ /**
7
+ * An endless wave surface. Game-agnostic: it takes a height, colours and a
8
+ * lighting environment, and knows nothing about what the water is for.
9
+ *
10
+ * The mesh is a fixed grid that follows the camera and is snapped to whole
11
+ * cells in the vertex shader, so a bounded vertex budget covers an unbounded
12
+ * ocean without the surface sliding underfoot. Displacement is Gerstner, so
13
+ * crests are sharp and troughs broad rather than a rolling sine blanket.
14
+ */
15
+ /**
16
+ * A body of water: the sea, a fountain's basin, a tank, a puddle.
17
+ *
18
+ * One description and one material for all of them. The sea is not a special
19
+ * case with a shader of its own — it is this, unbounded and dense, and a
20
+ * fountain is this, bounded and clear. The first attempt gave a basin its own
21
+ * faked surface, and the correction was the right one: water should be a single
22
+ * configurable concept — density, visibility, up to fully transparent — rather
23
+ * than a trick per body of water. The sea is water too, and it gets the same
24
+ * reusable component with the same abilities.
25
+ *
26
+ * So every body gets the waves, the Fresnel, the specular, the fog and the
27
+ * planar reflection, and differs only in these numbers.
28
+ */
29
+ export interface WaterBody {
30
+ /** Resting height of the surface. */
31
+ level: number;
32
+ deepColor: Vec3;
33
+ shallowColor: Vec3;
34
+ /**
35
+ * How much of what lies beneath it the water hides, looked straight down,
36
+ * 0 to 1. A sea hides its own floor; a fountain shows the tiles at the bottom
37
+ * of it; zero is glass. Only this end is configurable — at a grazing angle
38
+ * every water surface goes reflective, which is Fresnel rather than a property
39
+ * of the liquid.
40
+ */
41
+ density?: number;
42
+ /** The surface's overall visibility, 0 to 1. Zero draws nothing. */
43
+ visibility?: number;
44
+ /**
45
+ * How much it mirrors regardless of viewing angle, 0 to 1.
46
+ *
47
+ * Zero is physics — reflection by Fresnel alone, which is what an ocean does and
48
+ * what leaves a basin looking blank from directly above, since at that angle the
49
+ * Fresnel term is a few percent. A pool is looked *into*, so it is allowed to
50
+ * cheat; the sea is not, and keeps zero.
51
+ */
52
+ mirror?: number;
53
+ /**
54
+ * How built-up its waves are, as a multiple of what the wind is doing.
55
+ *
56
+ * One is the open sea. A basin wants a fraction of it: the same wave field at
57
+ * a scale where it reads as a surface breathing rather than as a swell rolling
58
+ * through somebody's fountain.
59
+ */
60
+ waveScale?: number;
61
+ /**
62
+ * How worked-up this body is on its own, 0 to 1, ignoring the wind entirely.
63
+ *
64
+ * For water the weather cannot reach: a cistern, a flooded corridor, a tank. Zero is
65
+ * as near still as this surface goes — never glass, because dead-flat water reads as a
66
+ * mirror rather than as calm — and one matches a fully developed sea.
67
+ *
68
+ * Omitted, the body takes its state from the wind it is drawn with, which is what an
69
+ * ocean, a lake or a fountain in a courtyard should do.
70
+ */
71
+ agitation?: number;
72
+ /**
73
+ * A bounded body: where it is, how far it reaches along each of its own axes, and which way
74
+ * those axes point.
75
+ *
76
+ * Omitted, the body is the endless ocean — the camera-following sheet the sea has always been.
77
+ * Given, it is a fixed rectangle of water sitting exactly where it was put.
78
+ *
79
+ * **It was a centre and one half-extent until 2026-08-28, and a square cannot bound a channel.**
80
+ * Reported from outside: a 3 by 21 metre ditch bounded by the square that contains it floods
81
+ * eighteen metres of field either side, so the workaround was a single *unbounded* body at the
82
+ * ditches' water level with the world's whole ground raised above it — a technically flooded
83
+ * world, held up by a rule nobody can see, that nothing anywhere may be drawn below the water
84
+ * line. It cost that consumer one bug already: a distant ground plane 1.6 m down, correct for its
85
+ * own reasons, put the village in a lake.
86
+ *
87
+ * **What this cannot do is bend.** A canal that turns is one body per straight run, and where two
88
+ * runs meet at a corner their sheets overlap and the blend doubles there. That is cheap to place
89
+ * and honest about what it draws; **what would change it** is a consumer measuring that seam as
90
+ * the problem, which is the day `bounds` grows a polyline and a width.
91
+ */
92
+ bounds?: WaterBounds;
93
+ }
94
+ /**
95
+ * Where a bounded body sits, how far it reaches and which way it faces.
96
+ *
97
+ * **Extents are measured along the body's own axes**, `x` across and `z` along `forward`, which is
98
+ * how `addOrientedBox` measures a box: one convention for an oriented thing in this engine, so a
99
+ * reader who has met one has met both.
100
+ */
101
+ export interface WaterBounds {
102
+ centreX: number;
103
+ centreZ: number;
104
+ /**
105
+ * Half-extent along both axes, metres: the shorthand for a square.
106
+ *
107
+ * A pool, a tank and a puddle are square often enough to be worth one number, and this is that
108
+ * number. `halfX` and `halfZ` override it **per axis**, so `{ halfM: 9, halfX: 2 }` is two metres
109
+ * across and nine along. The cost is two ways to say one square; the rule is stated here and
110
+ * applied in exactly one place, `resolveWater`.
111
+ */
112
+ halfM?: number;
113
+ /** Half-extent across the body, metres. A channel is narrow in this one. */
114
+ halfX?: number;
115
+ /** Half-extent along `forward`, metres. A channel is long in this one. */
116
+ halfZ?: number;
117
+ /**
118
+ * Which way the body's own +z points, in world XZ. Unset, it points along world +z.
119
+ *
120
+ * **A direction and not an angle**, because a consumer bounding a channel, a ditch or a gutter
121
+ * arrives holding the direction the run takes — from a road graph, a spline's tangent, two
122
+ * endpoints — and converting that to radians and back is arithmetic nobody needs. It is
123
+ * normalised on the way in, so a length here is not a scale, and a direction of no length at all
124
+ * is read as unturned instead of producing a sheet at NaN.
125
+ */
126
+ forwardX?: number;
127
+ forwardZ?: number;
128
+ }
129
+ /** @deprecated The old name for an unbounded {@link WaterBody}. */
130
+ export type WaterSettings = WaterBody;
131
+ /** Vertices per side of a bounded body's sheet. A pool is not an ocean. */
132
+ export declare class WaterRenderer {
133
+ private readonly program;
134
+ private readonly uniforms;
135
+ private readonly vao;
136
+ /** A unit sheet, scaled per draw: every bounded body shares this one mesh. */
137
+ private readonly patchVao;
138
+ private readonly patchIndexCount;
139
+ private readonly buffers;
140
+ private readonly indexCount;
141
+ private readonly cellSize;
142
+ private readonly nearHalfExtent;
143
+ private readonly farHalfExtent;
144
+ private readonly reflectionFilterTaps;
145
+ /** Refilled per draw rather than allocated; see `createResolvedWater`. */
146
+ private readonly resolved;
147
+ /**
148
+ * @param resolution cells per side of the wave-bearing near sheet.
149
+ * @param nearExtent total width of that sheet, in world metres.
150
+ * @param farHalfExtent how far the flat skirt carries the ocean out. There is
151
+ * no point setting this far beyond the camera's far plane — geometry past it
152
+ * is clipped, not drawn — so this only has to outrun the fog. See
153
+ * `buildWaterGrid` for why these are two meshes and not one.
154
+ */
155
+ constructor(gl: WebGL2RenderingContext, resolution?: number, nearExtent?: number, farHalfExtent?: number, reflectionFilterTaps?: import("./renderQuality.ts").WaterReflectionFilterTaps);
156
+ /**
157
+ * Draw the surface. Call *after* the sky: water writes depth and is occluded
158
+ * by geometry in front of it, but its far edge fades out, and that fade needs
159
+ * the sky already behind it to blend into.
160
+ */
161
+ draw(gl: WebGL2RenderingContext, camera: FrameView, timeSeconds: number, settings: WaterBody, directionalDir: Vec3, directionalColor: Vec3, ambient: Vec3, atmosphere: Atmosphere, underwaterEnabled: boolean, reflection: PlanarReflection | null, lights?: PointLightSet | null, lightFalloff?: 'smooth' | 'inverseSquare', windX?: number, windZ?: number): void;
162
+ dispose(gl: WebGL2RenderingContext): void;
163
+ }