@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,165 @@
1
+ import { compileProgram, uniformLocations } from './shader.js';
2
+ import { PATCH_RESOLUTION, buildUnitSheet, buildWaterGrid } from './waterGrid.js';
3
+ import { WATER_FRAG, WATER_VERT } from './shaders/water.js';
4
+ import { bindAtmosphere } from './atmosphere.js';
5
+ import { bindPointLights } from './lightBudget.js';
6
+ import { DEFAULT_RENDER_QUALITY } from './renderQuality.js';
7
+ import { createResolvedWater, resolveWater, waterAppearance } from './waterDraw.js';
8
+ /** Vertices per side of a bounded body's sheet. A pool is not an ocean. */
9
+ export class WaterRenderer {
10
+ program;
11
+ uniforms;
12
+ vao;
13
+ /** A unit sheet, scaled per draw: every bounded body shares this one mesh. */
14
+ patchVao;
15
+ patchIndexCount;
16
+ buffers = [];
17
+ indexCount;
18
+ cellSize;
19
+ nearHalfExtent;
20
+ farHalfExtent;
21
+ reflectionFilterTaps;
22
+ /** Refilled per draw rather than allocated; see `createResolvedWater`. */
23
+ resolved = createResolvedWater();
24
+ /**
25
+ * @param resolution cells per side of the wave-bearing near sheet.
26
+ * @param nearExtent total width of that sheet, in world metres.
27
+ * @param farHalfExtent how far the flat skirt carries the ocean out. There is
28
+ * no point setting this far beyond the camera's far plane — geometry past it
29
+ * is clipped, not drawn — so this only has to outrun the fog. See
30
+ * `buildWaterGrid` for why these are two meshes and not one.
31
+ */
32
+ constructor(gl, resolution = 128, nearExtent = 500, farHalfExtent = 4000, reflectionFilterTaps = DEFAULT_RENDER_QUALITY.waterReflectionFilterTaps) {
33
+ this.program = compileProgram(gl, WATER_VERT, WATER_FRAG, 'water');
34
+ this.uniforms = uniformLocations(gl, this.program, 'waterRenderer');
35
+ this.reflectionFilterTaps = reflectionFilterTaps;
36
+ const grid = buildWaterGrid(resolution, nearExtent, farHalfExtent);
37
+ // Exactly the near cell size: snapping by anything else re-samples the wave
38
+ // field as the camera moves, which reads as the surface swimming.
39
+ this.cellSize = grid.cellSize;
40
+ this.nearHalfExtent = grid.nearHalfExtent;
41
+ this.farHalfExtent = grid.farHalfExtent;
42
+ const indices = grid.indices;
43
+ this.indexCount = indices.length;
44
+ const vao = gl.createVertexArray();
45
+ if (vao === null)
46
+ throw new Error('WaterRenderer: createVertexArray failed');
47
+ this.vao = vao;
48
+ gl.bindVertexArray(vao);
49
+ const gridBuffer = gl.createBuffer();
50
+ if (gridBuffer === null)
51
+ throw new Error('WaterRenderer: createBuffer failed');
52
+ this.buffers.push(gridBuffer);
53
+ gl.bindBuffer(gl.ARRAY_BUFFER, gridBuffer);
54
+ gl.bufferData(gl.ARRAY_BUFFER, grid.offsets, gl.STATIC_DRAW);
55
+ gl.enableVertexAttribArray(0);
56
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
57
+ const indexBuffer = gl.createBuffer();
58
+ if (indexBuffer === null)
59
+ throw new Error('WaterRenderer: createBuffer failed');
60
+ this.buffers.push(indexBuffer);
61
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
62
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
63
+ gl.bindVertexArray(null);
64
+ /*
65
+ * And the unit sheet every bounded body is drawn from. One mesh in [-1, 1],
66
+ * scaled by the body's own half-extent in the vertex shader — so a fountain
67
+ * costs a uniform rather than a mesh, and a hundred puddles cost the same.
68
+ */
69
+ const patch = buildUnitSheet(PATCH_RESOLUTION);
70
+ this.patchIndexCount = patch.indices.length;
71
+ const patchVao = gl.createVertexArray();
72
+ if (patchVao === null)
73
+ throw new Error('WaterRenderer: createVertexArray failed');
74
+ this.patchVao = patchVao;
75
+ gl.bindVertexArray(patchVao);
76
+ const patchGrid = gl.createBuffer();
77
+ if (patchGrid === null)
78
+ throw new Error('WaterRenderer: createBuffer failed');
79
+ this.buffers.push(patchGrid);
80
+ gl.bindBuffer(gl.ARRAY_BUFFER, patchGrid);
81
+ gl.bufferData(gl.ARRAY_BUFFER, patch.offsets, gl.STATIC_DRAW);
82
+ gl.enableVertexAttribArray(0);
83
+ gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);
84
+ const patchIndices = gl.createBuffer();
85
+ if (patchIndices === null)
86
+ throw new Error('WaterRenderer: createBuffer failed');
87
+ this.buffers.push(patchIndices);
88
+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, patchIndices);
89
+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, patch.indices, gl.STATIC_DRAW);
90
+ gl.bindVertexArray(null);
91
+ }
92
+ /**
93
+ * Draw the surface. Call *after* the sky: water writes depth and is occluded
94
+ * by geometry in front of it, but its far edge fades out, and that fade needs
95
+ * the sky already behind it to blend into.
96
+ */
97
+ draw(gl, camera, timeSeconds, settings, directionalDir, directionalColor, ambient, atmosphere, underwaterEnabled, reflection, lights = null, lightFalloff = 'smooth', windX = 0, windZ = 0) {
98
+ const u = this.uniforms;
99
+ const reflectionReady = reflection?.isReadyFor(settings.level) ?? false;
100
+ gl.useProgram(this.program);
101
+ gl.uniformMatrix4fv(u['uViewProj'] ?? null, false, camera.viewProjection);
102
+ gl.uniformMatrix4fv(u['uReflectionViewProj'] ?? null, false, reflection?.viewProjection ?? camera.viewProjection);
103
+ gl.uniform3fv(u['uCameraPos'] ?? null, camera.position);
104
+ gl.uniform1f(u['uTime'] ?? null, timeSeconds);
105
+ /*
106
+ * Where the sheet is laid, and how far one unit of it reaches. The ocean
107
+ * snaps to whole cells under the camera — anything else re-samples the wave
108
+ * field as it moves, which reads as the surface swimming — and a bounded body
109
+ * simply sits where it was put.
110
+ */
111
+ /* Laid and settled in `waterDraw.ts`, so both backends get the same sea. */
112
+ const w = resolveWater(settings, camera.position[0] ?? 0, camera.position[2] ?? 0, this.cellSize, this.nearHalfExtent, this.farHalfExtent, windX, windZ, this.resolved);
113
+ gl.uniform2fv(u['uGridOrigin'] ?? null, w.origin);
114
+ /* Pairs since 2026-08-28: a body is bounded along each of its own axes, and the direction
115
+ those axes take is the fourth of them. The ocean passes one number twice. */
116
+ gl.uniform2fv(u['uGridSpan'] ?? null, w.span);
117
+ gl.uniform2fv(u['uGridHalf'] ?? null, w.half);
118
+ gl.uniform2fv(u['uNearHalf'] ?? null, w.nearHalf);
119
+ gl.uniform2fv(u['uGridForward'] ?? null, w.forward);
120
+ /*
121
+ * `uGridScale` used to be uploaded here and is not, because the shader stopped reading it
122
+ * when the grid snapping moved to the CPU. The uniform went on being written to a location
123
+ * that no longer existed, which uploads to nothing and says nothing.
124
+ */
125
+ const look = waterAppearance(settings);
126
+ gl.uniform1f(u['uNadirOpacity'] ?? null, look.nadirOpacity);
127
+ gl.uniform1f(u['uVisibility'] ?? null, look.visibility);
128
+ gl.uniform1f(u['uMirror'] ?? null, look.mirror);
129
+ gl.uniform2fv(u['uWindDir'] ?? null, w.windDir);
130
+ gl.uniform1f(u['uWaveGain'] ?? null, w.waveGain);
131
+ gl.uniform1f(u['uFoamGain'] ?? null, w.foamGain);
132
+ gl.uniform1f(u['uWaterLevel'] ?? null, settings.level);
133
+ gl.uniform3fv(u['uDeepColor'] ?? null, settings.deepColor);
134
+ gl.uniform3fv(u['uShallowColor'] ?? null, settings.shallowColor);
135
+ gl.uniform3fv(u['uDirectionalDir'] ?? null, directionalDir);
136
+ gl.uniform3fv(u['uDirectionalColor'] ?? null, directionalColor);
137
+ gl.uniform3fv(u['uAmbient'] ?? null, ambient);
138
+ // Water is lit by the world's lamps as well as by its sky. Indoors they are all of it.
139
+ bindPointLights(gl, u, lights, lightFalloff);
140
+ bindAtmosphere(gl, u, atmosphere, camera.position[1] ?? 0, underwaterEnabled);
141
+ gl.activeTexture(gl.TEXTURE0);
142
+ gl.bindTexture(gl.TEXTURE_2D, reflectionReady && reflection !== null ? reflection.texture : null);
143
+ gl.uniform1i(u['uReflectionMap'] ?? null, 0);
144
+ gl.uniform1i(u['uReflectionEnabled'] ?? null, reflectionReady ? 1 : 0);
145
+ gl.uniform2f(u['uReflectionTexelSize'] ?? null, reflectionReady && reflection !== null ? 1 / reflection.textureWidth : 1, reflectionReady && reflection !== null ? 1 / reflection.textureHeight : 1);
146
+ gl.uniform1i(u['uReflectionFilterTaps'] ?? null, this.reflectionFilterTaps);
147
+ gl.enable(gl.BLEND);
148
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
149
+ // Waves are displaced far enough that back faces show at grazing angles.
150
+ gl.disable(gl.CULL_FACE);
151
+ gl.bindVertexArray(w.bounded ? this.patchVao : this.vao);
152
+ gl.drawElements(gl.TRIANGLES, w.bounded ? this.patchIndexCount : this.indexCount, gl.UNSIGNED_INT, 0);
153
+ gl.bindVertexArray(null);
154
+ gl.enable(gl.CULL_FACE);
155
+ gl.disable(gl.BLEND);
156
+ gl.bindTexture(gl.TEXTURE_2D, null);
157
+ }
158
+ dispose(gl) {
159
+ for (const buffer of this.buffers)
160
+ gl.deleteBuffer(buffer);
161
+ gl.deleteVertexArray(this.vao);
162
+ gl.deleteVertexArray(this.patchVao);
163
+ gl.deleteProgram(this.program);
164
+ }
165
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * One wind, sampled by everything that moves in it.
3
+ *
4
+ * Grass, foliage, smoke, clouds and water all bend to weather. If each system
5
+ * animates on its own noise they disagree — smoke drifting one way while grass
6
+ * leans another is the single clearest tell that a scene is a collection of
7
+ * effects rather than a place. So the signal lives here, once, and every
8
+ * consumer samples it.
9
+ *
10
+ * Cyclic by construction: the sum of a fundamental and integer harmonics
11
+ * repeats exactly at the fundamental's period. That matters because a run is
12
+ * recorded and replayed — a replay watched an hour later must see the same gust
13
+ * the character did, and a signal that drifts cannot offer that.
14
+ *
15
+ * Game-agnostic: a profile carries no date, no biome, no game-specific meaning.
16
+ */
17
+ export interface WindProfile {
18
+ /** Prevailing direction; normalised on sampling, so any non-zero pair works. */
19
+ directionX: number;
20
+ directionZ: number;
21
+ /** Speed with no gust, in metres per second. */
22
+ baseSpeed: number;
23
+ /** Peak deviation from the base, either way. */
24
+ gustSpeed: number;
25
+ /** How far the direction swings from prevailing, radians. */
26
+ directionWander: number;
27
+ /** Period after which the whole signal repeats exactly. */
28
+ cycleSeconds: number;
29
+ /** Offset into the cycle, so two profiles are not in lockstep. */
30
+ phase: number;
31
+ }
32
+ export interface WindState {
33
+ velocityX: number;
34
+ velocityZ: number;
35
+ /** Magnitude of the velocity, always non-negative. */
36
+ speed: number;
37
+ /** Gust component alone, -1..1, for effects that want the deviation. */
38
+ gust: number;
39
+ }
40
+ export declare function createWindState(): WindState;
41
+ /**
42
+ * Sample the profile at a time. Writes into `out` and allocates nothing — this
43
+ * runs every frame for every system that cares about weather.
44
+ */
45
+ export declare function sampleWind(profile: WindProfile, timeSeconds: number, out: WindState): void;
@@ -0,0 +1,32 @@
1
+ export function createWindState() {
2
+ return { velocityX: 0, velocityZ: 0, speed: 0, gust: 0 };
3
+ }
4
+ /**
5
+ * Sample the profile at a time. Writes into `out` and allocates nothing — this
6
+ * runs every frame for every system that cares about weather.
7
+ */
8
+ export function sampleWind(profile, timeSeconds, out) {
9
+ if (!(profile.cycleSeconds > 0)) {
10
+ throw new Error('WindProfile.cycleSeconds must be positive');
11
+ }
12
+ const fundamental = (Math.PI * 2) / profile.cycleSeconds;
13
+ const t = timeSeconds + profile.phase;
14
+ /*
15
+ * Integer harmonics only. A non-integer multiple would give a signal that
16
+ * looks organic but never actually closes, so a replay hours later would show
17
+ * different weather from the run it is replaying.
18
+ */
19
+ const a = Math.sin(fundamental * t);
20
+ const b = Math.sin(fundamental * 2 * t + 1.1);
21
+ const c = Math.sin(fundamental * 3 * t + 2.7);
22
+ // Weights sum to 1, so the gust stays inside ±gustSpeed however the
23
+ // harmonics happen to line up.
24
+ const gust = a * 0.55 + b * 0.3 + c * 0.15;
25
+ const speed = Math.max(0, profile.baseSpeed + gust * profile.gustSpeed);
26
+ const baseAngle = Math.atan2(profile.directionZ, profile.directionX);
27
+ const angle = baseAngle + (b * 0.6 + c * 0.4) * profile.directionWander;
28
+ out.gust = gust;
29
+ out.speed = speed;
30
+ out.velocityX = Math.cos(angle) * speed;
31
+ out.velocityZ = Math.sin(angle) * speed;
32
+ }
@@ -0,0 +1,34 @@
1
+ import type { WindProfile, WindState } from './wind.ts';
2
+ /**
3
+ * The world's wind, as one value passed to everything that moves in it.
4
+ *
5
+ * Six draw calls each taking two or three loose floats is a contract nobody can
6
+ * see: the rule "everything shares one wind" lives only in the discipline of
7
+ * whoever writes the next call site. As a type it is checkable at a glance, and
8
+ * adding a seventh consumer is a matter of accepting the same object rather
9
+ * than remembering to pass matching numbers.
10
+ *
11
+ * Sample once per frame and pass it down. A system that samples its own is a
12
+ * second wind however identical the inputs, because nothing then guarantees the
13
+ * two stay in step.
14
+ */
15
+ export interface WindField extends WindState {
16
+ /**
17
+ * Accumulated travel, for anything positioned by wind rather than displaced
18
+ * by it — clouds, most obviously.
19
+ *
20
+ * Accumulated rather than derived from `velocity x time`, and that is the
21
+ * whole reason this lives on the type. The bearing wanders, so multiplying a
22
+ * *changing* direction by an absolute clock jumps whatever it positions the
23
+ * instant the direction moves, by an amount proportional to how long the game
24
+ * has been running. It is invisible in a short test and violent later.
25
+ */
26
+ driftX: number;
27
+ driftZ: number;
28
+ }
29
+ export declare function createWindField(): WindField;
30
+ /**
31
+ * Advance the field one frame. `driftScale` converts wind speed into travel for
32
+ * whatever the drift is positioning.
33
+ */
34
+ export declare function advanceWindField(field: WindField, profile: WindProfile, timeSeconds: number, frameDt: number, driftScale: number): void;
@@ -0,0 +1,13 @@
1
+ import { sampleWind } from './wind.js';
2
+ export function createWindField() {
3
+ return { velocityX: 0, velocityZ: 0, speed: 0, gust: 0, driftX: 0, driftZ: 0 };
4
+ }
5
+ /**
6
+ * Advance the field one frame. `driftScale` converts wind speed into travel for
7
+ * whatever the drift is positioning.
8
+ */
9
+ export function advanceWindField(field, profile, timeSeconds, frameDt, driftScale) {
10
+ sampleWind(profile, timeSeconds, field);
11
+ field.driftX += field.velocityX * driftScale * frameDt;
12
+ field.driftZ += field.velocityZ * driftScale * frameDt;
13
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Visible wind: how much of it to show, where it has drifted to, and its lattice.
3
+ *
4
+ * **Three rules and one geometry, held once for both backends.** Each of them is the kind of
5
+ * thing a second implementation gets *nearly* right, which is the failure mode `AGENTS.md`
6
+ * 2026-08-13 is about: debris that thins in at a different wind speed, or travels at a
7
+ * different rate from the clouds, is weather that does not cohere, and nothing raises.
8
+ */
9
+ /** What the caller wants of a lattice, before any of it reaches the device. */
10
+ export interface WindStreakSettings {
11
+ /** How many streaks the lattice holds. */
12
+ count?: number;
13
+ /** Side of the box that follows the camera, metres. */
14
+ cellSize?: number;
15
+ /** Wind speed at which streaks begin to appear. */
16
+ onsetSpeed?: number;
17
+ /** Wind speed at which they are at full strength. */
18
+ fullSpeed?: number;
19
+ }
20
+ /**
21
+ * The defaults, in one place because two copies is two thresholds.
22
+ *
23
+ * Calibrated against the wind the game actually produces rather than against a
24
+ * plausible-sounding number. An early pass used an onset of 3.4 and full strength at 8 while
25
+ * the windiest day of the year peaked at 7.3, so the effect would have shipped essentially
26
+ * invisible. Raised again afterwards: at the lower onset it showed on ordinary breezy days,
27
+ * where visible debris is not what a breeze looks like. It belongs to storms, which is also the
28
+ * only time it is telling the player anything.
29
+ */
30
+ export declare const WIND_STREAK_DEFAULTS: {
31
+ readonly count: 520;
32
+ readonly cellSize: 110;
33
+ readonly onsetSpeed: 6;
34
+ readonly fullSpeed: 11;
35
+ };
36
+ /** Six vertices a streak, as two triangles. Shared so both backends build one lattice. */
37
+ export declare const WIND_STREAK_CORNERS: readonly (readonly [number, number])[];
38
+ /** The two static attribute streams a lattice is drawn from: the corner, and which streak. */
39
+ export interface WindStreakLattice {
40
+ readonly corners: Float32Array;
41
+ readonly indices: Float32Array;
42
+ readonly vertexCount: number;
43
+ }
44
+ /**
45
+ * Build the lattice for `count` streaks.
46
+ *
47
+ * Nothing here is per frame: the whole effect is a repeating box that follows the camera and
48
+ * wraps, computed in the vertex shader from an index and the clock, so this runs once and the
49
+ * frame loop uploads nothing.
50
+ */
51
+ export declare function buildWindStreakLattice(count: number): WindStreakLattice;
52
+ /** What one frame's draw needs beyond the camera and the tint. */
53
+ export interface ResolvedWindStreaks {
54
+ /** How visible the wind is right now, 0 to 1. */
55
+ strength: number;
56
+ /** Where the field has drifted to, in metres. */
57
+ driftX: number;
58
+ driftZ: number;
59
+ /** Whether the draw is worth making at all. A calm day costs no draw, not a faded one. */
60
+ visible: boolean;
61
+ }
62
+ export declare function createResolvedWindStreaks(): ResolvedWindStreaks;
63
+ /** How visible the wind is at one speed. Its own function because callers size budgets on it. */
64
+ export declare function windStreakStrength(speed: number, onsetSpeed: number, fullSpeed: number): number;
65
+ /**
66
+ * Settle a frame's streaks into a target the caller owns.
67
+ *
68
+ * **`submerged` is decided by the engine and not by the call site.** Every pass already knows
69
+ * where the waterline is, and leaving it to each caller is how one of them ends up raining dust
70
+ * into the sea. Nothing blows through water: it is the kind of detail that, once noticed,
71
+ * cannot be unnoticed.
72
+ */
73
+ export declare function resolveWindStreaks(speed: number, driftX: number, driftZ: number, onsetSpeed: number, fullSpeed: number, submerged: boolean, out: ResolvedWindStreaks): ResolvedWindStreaks;
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Visible wind: how much of it to show, where it has drifted to, and its lattice.
3
+ *
4
+ * **Three rules and one geometry, held once for both backends.** Each of them is the kind of
5
+ * thing a second implementation gets *nearly* right, which is the failure mode `AGENTS.md`
6
+ * 2026-08-13 is about: debris that thins in at a different wind speed, or travels at a
7
+ * different rate from the clouds, is weather that does not cohere, and nothing raises.
8
+ */
9
+ /**
10
+ * The defaults, in one place because two copies is two thresholds.
11
+ *
12
+ * Calibrated against the wind the game actually produces rather than against a
13
+ * plausible-sounding number. An early pass used an onset of 3.4 and full strength at 8 while
14
+ * the windiest day of the year peaked at 7.3, so the effect would have shipped essentially
15
+ * invisible. Raised again afterwards: at the lower onset it showed on ordinary breezy days,
16
+ * where visible debris is not what a breeze looks like. It belongs to storms, which is also the
17
+ * only time it is telling the player anything.
18
+ */
19
+ export const WIND_STREAK_DEFAULTS = {
20
+ count: 520,
21
+ cellSize: 110,
22
+ onsetSpeed: 6,
23
+ fullSpeed: 11,
24
+ };
25
+ /**
26
+ * How far the debris field trails the wind's own accumulated drift.
27
+ *
28
+ * Debris rides the same drift the clouds do, multiplied, so near and far weather travel
29
+ * together instead of at two unrelated rates. A second copy of this number is exactly that
30
+ * disagreement, and it would read as the sky and the air being blown by different winds.
31
+ */
32
+ const DRIFT_GAIN = 14;
33
+ /** Six vertices a streak, as two triangles. Shared so both backends build one lattice. */
34
+ export const WIND_STREAK_CORNERS = [
35
+ [-1, -1],
36
+ [1, -1],
37
+ [1, 1],
38
+ [-1, -1],
39
+ [1, 1],
40
+ [-1, 1],
41
+ ];
42
+ /**
43
+ * Build the lattice for `count` streaks.
44
+ *
45
+ * Nothing here is per frame: the whole effect is a repeating box that follows the camera and
46
+ * wraps, computed in the vertex shader from an index and the clock, so this runs once and the
47
+ * frame loop uploads nothing.
48
+ */
49
+ export function buildWindStreakLattice(count) {
50
+ const perStreak = WIND_STREAK_CORNERS.length;
51
+ const corners = new Float32Array(count * perStreak * 2);
52
+ const indices = new Float32Array(count * perStreak);
53
+ let c = 0;
54
+ let i = 0;
55
+ for (let streak = 0; streak < count; streak++) {
56
+ for (const corner of WIND_STREAK_CORNERS) {
57
+ corners[c++] = corner[0];
58
+ corners[c++] = corner[1];
59
+ indices[i++] = streak;
60
+ }
61
+ }
62
+ return { corners, indices, vertexCount: count * perStreak };
63
+ }
64
+ export function createResolvedWindStreaks() {
65
+ return { strength: 0, driftX: 0, driftZ: 0, visible: false };
66
+ }
67
+ /** How visible the wind is at one speed. Its own function because callers size budgets on it. */
68
+ export function windStreakStrength(speed, onsetSpeed, fullSpeed) {
69
+ const t = (speed - onsetSpeed) / Math.max(fullSpeed - onsetSpeed, 1e-4);
70
+ return Math.min(Math.max(t, 0), 1);
71
+ }
72
+ /**
73
+ * Settle a frame's streaks into a target the caller owns.
74
+ *
75
+ * **`submerged` is decided by the engine and not by the call site.** Every pass already knows
76
+ * where the waterline is, and leaving it to each caller is how one of them ends up raining dust
77
+ * into the sea. Nothing blows through water: it is the kind of detail that, once noticed,
78
+ * cannot be unnoticed.
79
+ */
80
+ export function resolveWindStreaks(speed, driftX, driftZ, onsetSpeed, fullSpeed, submerged, out) {
81
+ out.strength = windStreakStrength(speed, onsetSpeed, fullSpeed);
82
+ out.driftX = driftX * DRIFT_GAIN;
83
+ out.driftZ = driftZ * DRIFT_GAIN;
84
+ out.visible = !submerged && out.strength > 0.001;
85
+ return out;
86
+ }
@@ -0,0 +1,37 @@
1
+ import type { FrameView } from './frameView.ts';
2
+ import type { Vec3 } from '../math/color.ts';
3
+ import { type WindStreakSettings } from './windStreakDraw.ts';
4
+ import type { WindField } from './windField.ts';
5
+ /**
6
+ * Makes the wind visible once it is strong enough to be worth seeing.
7
+ *
8
+ * The threshold matters as much as the effect. Debris in a light breeze is
9
+ * visual noise across the whole game; debris only when it is genuinely blowing
10
+ * is information — it tells the player why their glide is drifting, at the one
11
+ * moment they need to know.
12
+ *
13
+ * **The thresholds, the drift rate and the lattice are in `windStreakDraw.ts`**, so the WebGPU
14
+ * pass shows the same weather rather than its own approximation of it.
15
+ */
16
+ export type WindStreakOptions = WindStreakSettings;
17
+ export declare class WindStreakRenderer {
18
+ private readonly program;
19
+ private readonly uniforms;
20
+ private readonly vao;
21
+ private readonly buffers;
22
+ private readonly vertexCount;
23
+ private readonly count;
24
+ /** Exposed so callers can size their own budgets against it. */
25
+ private readonly cellSize;
26
+ private readonly onsetSpeed;
27
+ private readonly fullSpeed;
28
+ constructor(gl: WebGL2RenderingContext, options?: WindStreakOptions);
29
+ /** How visible the wind is right now, 0 when there is nothing to show. */
30
+ strengthFor(speed: number): number;
31
+ /** Refilled per call rather than allocated; this is a per-frame path. */
32
+ private readonly resolved;
33
+ draw(gl: WebGL2RenderingContext, camera: FrameView, wind: WindField, timeSeconds: number, tint: Vec3,
34
+ /** True when the camera is below the waterline. */
35
+ submerged?: boolean): void;
36
+ dispose(gl: WebGL2RenderingContext): void;
37
+ }
@@ -0,0 +1,86 @@
1
+ import { compileProgram, uniformLocations } from './shader.js';
2
+ import { WIND_STREAK_FRAG, WIND_STREAK_VERT } from './shaders/windStreaks.js';
3
+ import { WIND_STREAK_DEFAULTS, buildWindStreakLattice, createResolvedWindStreaks, resolveWindStreaks, windStreakStrength, } from './windStreakDraw.js';
4
+ export class WindStreakRenderer {
5
+ program;
6
+ uniforms;
7
+ vao;
8
+ buffers = [];
9
+ vertexCount;
10
+ count;
11
+ /** Exposed so callers can size their own budgets against it. */
12
+ cellSize;
13
+ onsetSpeed;
14
+ fullSpeed;
15
+ constructor(gl, options = {}) {
16
+ this.count = options.count ?? WIND_STREAK_DEFAULTS.count;
17
+ this.cellSize = options.cellSize ?? WIND_STREAK_DEFAULTS.cellSize;
18
+ this.onsetSpeed = options.onsetSpeed ?? WIND_STREAK_DEFAULTS.onsetSpeed;
19
+ this.fullSpeed = options.fullSpeed ?? WIND_STREAK_DEFAULTS.fullSpeed;
20
+ this.program = compileProgram(gl, WIND_STREAK_VERT, WIND_STREAK_FRAG, 'windStreaks');
21
+ this.uniforms = uniformLocations(gl, this.program, 'windStreakRenderer');
22
+ const lattice = buildWindStreakLattice(this.count);
23
+ const { corners, indices } = lattice;
24
+ this.vertexCount = lattice.vertexCount;
25
+ const vao = gl.createVertexArray();
26
+ if (vao === null)
27
+ throw new Error('WindStreakRenderer: createVertexArray failed');
28
+ this.vao = vao;
29
+ gl.bindVertexArray(vao);
30
+ const attach = (data, location, size) => {
31
+ const buffer = gl.createBuffer();
32
+ if (buffer === null)
33
+ throw new Error('WindStreakRenderer: createBuffer failed');
34
+ this.buffers.push(buffer);
35
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
36
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
37
+ gl.enableVertexAttribArray(location);
38
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
39
+ };
40
+ attach(corners, 0, 2);
41
+ attach(indices, 1, 1);
42
+ gl.bindVertexArray(null);
43
+ }
44
+ /** How visible the wind is right now, 0 when there is nothing to show. */
45
+ strengthFor(speed) {
46
+ return windStreakStrength(speed, this.onsetSpeed, this.fullSpeed);
47
+ }
48
+ /** Refilled per call rather than allocated; this is a per-frame path. */
49
+ resolved = createResolvedWindStreaks();
50
+ draw(gl, camera, wind, timeSeconds, tint,
51
+ /** True when the camera is below the waterline. */
52
+ submerged = false) {
53
+ /* Chosen in `windStreakDraw.ts` so both backends show the same weather. */
54
+ const settled = resolveWindStreaks(wind.speed, wind.driftX, wind.driftZ, this.onsetSpeed, this.fullSpeed, submerged, this.resolved);
55
+ if (!settled.visible)
56
+ return;
57
+ const u = this.uniforms;
58
+ gl.useProgram(this.program);
59
+ gl.uniformMatrix4fv(u['uViewProj'] ?? null, false, camera.viewProjection);
60
+ gl.uniform3fv(u['uCameraPos'] ?? null, camera.position);
61
+ gl.uniform2f(u['uWind'] ?? null, wind.velocityX, wind.velocityZ);
62
+ gl.uniform2f(u['uDrift'] ?? null, settled.driftX, settled.driftZ);
63
+ gl.uniform1f(u['uSpeed'] ?? null, wind.speed);
64
+ gl.uniform1f(u['uStrength'] ?? null, settled.strength);
65
+ gl.uniform1f(u['uCount'] ?? null, this.count);
66
+ gl.uniform1f(u['uCellSize'] ?? null, this.cellSize);
67
+ gl.uniform1f(u['uTime'] ?? null, timeSeconds);
68
+ gl.uniform3fv(u['uTint'] ?? null, tint);
69
+ gl.enable(gl.BLEND);
70
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
71
+ gl.depthMask(false);
72
+ gl.disable(gl.CULL_FACE);
73
+ gl.bindVertexArray(this.vao);
74
+ gl.drawArrays(gl.TRIANGLES, 0, this.vertexCount);
75
+ gl.bindVertexArray(null);
76
+ gl.enable(gl.CULL_FACE);
77
+ gl.depthMask(true);
78
+ gl.disable(gl.BLEND);
79
+ }
80
+ dispose(gl) {
81
+ for (const buffer of this.buffers)
82
+ gl.deleteBuffer(buffer);
83
+ gl.deleteVertexArray(this.vao);
84
+ gl.deleteProgram(this.program);
85
+ }
86
+ }