@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,51 @@
1
+ export declare const TAU: number;
2
+ export declare const DEG_TO_RAD: number;
3
+ export declare function clamp(value: number, min: number, max: number): number;
4
+ export declare function lerp(a: number, b: number, t: number): number;
5
+ /** Hermite interpolation between two edges: 0 below `a`, 1 above `b`. */
6
+ export declare function smoothstep(a: number, b: number, x: number): number;
7
+ /**
8
+ * Framerate-independent exponential approach of `a` toward `b`.
9
+ * `lambda` is the convergence rate in 1/seconds (higher = snappier).
10
+ */
11
+ export declare function damp(a: number, b: number, lambda: number, dt: number): number;
12
+ /**
13
+ * Exponential approach of `a` toward a target that is itself **moving**, at `velocity`.
14
+ *
15
+ * `damp` above is `lerp(a, b, 1 - exp(-lambda dt))`, which is the exact solution of
16
+ * `a' = lambda (b - a)` for a `b` that holds still across the interval — a zero-order hold. For a
17
+ * target that is moving it is wrong in two ways that both show up as the frame rate changes,
18
+ * because the error is a function of `dt`:
19
+ *
20
+ * - the settled gap becomes `v dt (1-k)/k` for `k = 1 - exp(-lambda dt)`, which *shrinks as the
21
+ * frame time grows*, so a machine that drops rate quietly re-frames the shot;
22
+ * - and under uneven frames the gap oscillates rather than settling at all.
23
+ *
24
+ * This solves the same equation for `b(t) = b - v (dt - t)`, a target arriving at `b` having
25
+ * travelled at `v`. Substituting `e = a - b` gives `e' = -lambda e - v`, whose solution is
26
+ * `e(t) = (e0 + v/lambda) exp(-lambda t) - v/lambda` — so the settled gap is `v/lambda` at every
27
+ * rate and there is nothing left for jitter to move. `b` is the target **now**, at the end of the
28
+ * interval, which is what a caller has.
29
+ *
30
+ * **What it costs is a velocity the caller has to supply**, and a caller that passes zero gets
31
+ * `damp` back exactly. A finite difference of the target over the frame is the usual source and is
32
+ * exact for a target that is moving smoothly; what it is not good for is a target that *steps*,
33
+ * where one frame of `delta/dt` is a spike and this will aim `v/lambda` ahead of it.
34
+ *
35
+ * Zero or negative `lambda` returns `a` rather than dividing by it. The limit as `lambda` goes to
36
+ * zero is `a` — no pull, no movement — so the guard agrees with the arithmetic rather than merely
37
+ * avoiding an infinity.
38
+ */
39
+ export declare function dampTracking(a: number, b: number, velocity: number, lambda: number, dt: number): number;
40
+ /** Signed shortest angular distance from `a` to `b`, in (-π, π]. */
41
+ export declare function angleDelta(a: number, b: number): number;
42
+ /**
43
+ * Fold an angle into (-π, π]. Simulation state uses this so a long session
44
+ * cannot accumulate an unbounded angle and lose float precision. Anything
45
+ * replaying a recorded session depends on staying bit-stable over its length.
46
+ */
47
+ export declare function wrapAngle(a: number): number;
48
+ /** `lerp` along the shortest arc — the angular counterpart for render interpolation. */
49
+ export declare function lerpAngle(a: number, b: number, t: number): number;
50
+ /** `damp` along the shortest arc between two angles. */
51
+ export declare function dampAngle(a: number, b: number, lambda: number, dt: number): number;
@@ -0,0 +1,99 @@
1
+ export const TAU = Math.PI * 2;
2
+ export const DEG_TO_RAD = Math.PI / 180;
3
+ export function clamp(value, min, max) {
4
+ return value < min ? min : value > max ? max : value;
5
+ }
6
+ export function lerp(a, b, t) {
7
+ return a + (b - a) * t;
8
+ }
9
+ /** Hermite interpolation between two edges: 0 below `a`, 1 above `b`. */
10
+ export function smoothstep(a, b, x) {
11
+ const t = clamp((x - a) / (b - a), 0, 1);
12
+ return t * t * (3 - 2 * t);
13
+ }
14
+ /**
15
+ * Framerate-independent exponential approach of `a` toward `b`.
16
+ * `lambda` is the convergence rate in 1/seconds (higher = snappier).
17
+ */
18
+ export function damp(a, b, lambda, dt) {
19
+ /*
20
+ * **Presentation smoothing, which is why the marker is here and not a rewrite.** `damp`,
21
+ * `dampAngle` and `dampTracking` converge a *drawn* value toward a target over wall-clock
22
+ * seconds: a camera following a car, a dial settling. `scripts/determinism.mjs` refuses `Math.exp`
23
+ * inside the simulation set because ECMAScript does not specify it, and that refusal is right for
24
+ * anything a tick's state depends on — but none of these three is that.
25
+ *
26
+ * **What a simulation wants instead**, if it ever wants exponential approach inside the fixed
27
+ * step, is a per-tick factor computed once from `lambda` and the fixed `dt` and passed in as a
28
+ * number: at a constant step the factor is a constant, so nothing has to call `exp` on a tick at
29
+ * all. `exactExp` in `math/exact.ts` is the other answer, and is the one to reach for when the
30
+ * rate itself varies.
31
+ */
32
+ // determinism: build-time — presentation smoothing; see the note above for a simulation
33
+ return lerp(a, b, 1 - Math.exp(-lambda * dt));
34
+ }
35
+ /**
36
+ * Exponential approach of `a` toward a target that is itself **moving**, at `velocity`.
37
+ *
38
+ * `damp` above is `lerp(a, b, 1 - exp(-lambda dt))`, which is the exact solution of
39
+ * `a' = lambda (b - a)` for a `b` that holds still across the interval — a zero-order hold. For a
40
+ * target that is moving it is wrong in two ways that both show up as the frame rate changes,
41
+ * because the error is a function of `dt`:
42
+ *
43
+ * - the settled gap becomes `v dt (1-k)/k` for `k = 1 - exp(-lambda dt)`, which *shrinks as the
44
+ * frame time grows*, so a machine that drops rate quietly re-frames the shot;
45
+ * - and under uneven frames the gap oscillates rather than settling at all.
46
+ *
47
+ * This solves the same equation for `b(t) = b - v (dt - t)`, a target arriving at `b` having
48
+ * travelled at `v`. Substituting `e = a - b` gives `e' = -lambda e - v`, whose solution is
49
+ * `e(t) = (e0 + v/lambda) exp(-lambda t) - v/lambda` — so the settled gap is `v/lambda` at every
50
+ * rate and there is nothing left for jitter to move. `b` is the target **now**, at the end of the
51
+ * interval, which is what a caller has.
52
+ *
53
+ * **What it costs is a velocity the caller has to supply**, and a caller that passes zero gets
54
+ * `damp` back exactly. A finite difference of the target over the frame is the usual source and is
55
+ * exact for a target that is moving smoothly; what it is not good for is a target that *steps*,
56
+ * where one frame of `delta/dt` is a spike and this will aim `v/lambda` ahead of it.
57
+ *
58
+ * Zero or negative `lambda` returns `a` rather than dividing by it. The limit as `lambda` goes to
59
+ * zero is `a` — no pull, no movement — so the guard agrees with the arithmetic rather than merely
60
+ * avoiding an infinity.
61
+ */
62
+ export function dampTracking(a, b, velocity, lambda, dt) {
63
+ if (lambda <= 0)
64
+ return a;
65
+ const lag = velocity / lambda;
66
+ // determinism: build-time — presentation smoothing, like `damp`; see the note there
67
+ return b - lag + (a - b + lag + velocity * dt) * Math.exp(-lambda * dt);
68
+ }
69
+ /** Signed shortest angular distance from `a` to `b`, in (-π, π]. */
70
+ export function angleDelta(a, b) {
71
+ let d = (b - a) % TAU;
72
+ if (d > Math.PI)
73
+ d -= TAU;
74
+ if (d < -Math.PI)
75
+ d += TAU;
76
+ return d;
77
+ }
78
+ /**
79
+ * Fold an angle into (-π, π]. Simulation state uses this so a long session
80
+ * cannot accumulate an unbounded angle and lose float precision. Anything
81
+ * replaying a recorded session depends on staying bit-stable over its length.
82
+ */
83
+ export function wrapAngle(a) {
84
+ let w = a % TAU;
85
+ if (w > Math.PI)
86
+ w -= TAU;
87
+ if (w <= -Math.PI)
88
+ w += TAU;
89
+ return w;
90
+ }
91
+ /** `lerp` along the shortest arc — the angular counterpart for render interpolation. */
92
+ export function lerpAngle(a, b, t) {
93
+ return a + angleDelta(a, b) * t;
94
+ }
95
+ /** `damp` along the shortest arc between two angles. */
96
+ export function dampAngle(a, b, lambda, dt) {
97
+ // determinism: build-time — presentation smoothing; see `damp`
98
+ return a + angleDelta(a, b) * (1 - Math.exp(-lambda * dt));
99
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * A critically damped spring: a value that *accelerates* toward a target and
3
+ * settles on it.
4
+ *
5
+ * The counterpart to `damp`, and the difference is the whole reason this exists.
6
+ * `damp` is a first-order lag: its speed is proportional to the error it has
7
+ * already accumulated, so it is fastest on the first frame of a move and
8
+ * asymptotic for the rest of it. It cannot ease in, cannot settle, and — the
9
+ * part that bites — cannot follow a *moving* target without falling behind,
10
+ * because the only way it can travel at the target's speed is to build up an
11
+ * error of `speed / lambda` and hold it. A replay camera damping onto a character
12
+ * at 14 m/s was measured framing every shot 2.2 m further out than the shot
13
+ * asked for, and re-accumulating that error as a straight slide after every cut.
14
+ *
15
+ * This carries a velocity, so it has an acceleration profile — it leads into a
16
+ * move and comes to rest at the end of one — and it is stepped against the
17
+ * target's *own* velocity, so a target moving smoothly is ridden along with at
18
+ * zero steady-state error rather than trailed.
19
+ *
20
+ * Long-lived and stateful by nature, hence a class: one per axis, constructed
21
+ * once and mutated in place, so a per-frame caller allocates nothing.
22
+ */
23
+ export declare class Spring {
24
+ value: number;
25
+ velocity: number;
26
+ /** Place the spring, with no motion unless one is given. Use on a cut. */
27
+ reset(value: number, velocity?: number): void;
28
+ /**
29
+ * Step toward `target`, which is itself travelling at `targetVelocity`.
30
+ *
31
+ * `rate` is the convergence rate in 1/seconds, as `damp`'s lambda is — higher
32
+ * is tighter — though the two are not numerically interchangeable: a spring at
33
+ * the same figure is gentler, because it spends the start of a move
34
+ * accelerating rather than covering ground.
35
+ */
36
+ step(target: number, targetVelocity: number, rate: number, dt: number): number;
37
+ /**
38
+ * The same, along the shortest arc, for angles. The value stays folded into
39
+ * (-π, π] so a long session cannot accumulate an unbounded angle.
40
+ */
41
+ stepAngle(target: number, targetVelocity: number, rate: number, dt: number): number;
42
+ /**
43
+ * The analytic solution of `e'' = -ω²e - 2ωe'` over one step, in the target's
44
+ * own frame of reference — which is what makes a moving target free of lag,
45
+ * and only if the error going in is measured in that same frame. See
46
+ * `startOf`: solving from an error taken against where the target has *got to*
47
+ * while integrating to where it is *going* leaves a step's worth of target
48
+ * motion unaccounted for every frame, which converges on twice the target's
49
+ * velocity and 2V/ω of standing error — 4.56 m of the 4.667 m predicted, in
50
+ * the first measurement taken of this.
51
+ *
52
+ * Solved rather than integrated because a spring stepped by Euler diverges
53
+ * once `ω·dt` approaches 1, and this runs on a frame that can be 250 ms long
54
+ * when a tab wakes up. `decay` stands in for `e^-x` with a rational
55
+ * approximation that stays inside (0, 1] for every non-negative x, so a long
56
+ * frame overshoots nothing — it just arrives.
57
+ */
58
+ private advance;
59
+ }
@@ -0,0 +1,88 @@
1
+ import { angleDelta, wrapAngle } from './scalar.js';
2
+ /**
3
+ * A critically damped spring: a value that *accelerates* toward a target and
4
+ * settles on it.
5
+ *
6
+ * The counterpart to `damp`, and the difference is the whole reason this exists.
7
+ * `damp` is a first-order lag: its speed is proportional to the error it has
8
+ * already accumulated, so it is fastest on the first frame of a move and
9
+ * asymptotic for the rest of it. It cannot ease in, cannot settle, and — the
10
+ * part that bites — cannot follow a *moving* target without falling behind,
11
+ * because the only way it can travel at the target's speed is to build up an
12
+ * error of `speed / lambda` and hold it. A replay camera damping onto a character
13
+ * at 14 m/s was measured framing every shot 2.2 m further out than the shot
14
+ * asked for, and re-accumulating that error as a straight slide after every cut.
15
+ *
16
+ * This carries a velocity, so it has an acceleration profile — it leads into a
17
+ * move and comes to rest at the end of one — and it is stepped against the
18
+ * target's *own* velocity, so a target moving smoothly is ridden along with at
19
+ * zero steady-state error rather than trailed.
20
+ *
21
+ * Long-lived and stateful by nature, hence a class: one per axis, constructed
22
+ * once and mutated in place, so a per-frame caller allocates nothing.
23
+ */
24
+ export class Spring {
25
+ value = 0;
26
+ velocity = 0;
27
+ /** Place the spring, with no motion unless one is given. Use on a cut. */
28
+ reset(value, velocity = 0) {
29
+ this.value = value;
30
+ this.velocity = velocity;
31
+ }
32
+ /**
33
+ * Step toward `target`, which is itself travelling at `targetVelocity`.
34
+ *
35
+ * `rate` is the convergence rate in 1/seconds, as `damp`'s lambda is — higher
36
+ * is tighter — though the two are not numerically interchangeable: a spring at
37
+ * the same figure is gentler, because it spends the start of a move
38
+ * accelerating rather than covering ground.
39
+ */
40
+ step(target, targetVelocity, rate, dt) {
41
+ this.advance(this.value - startOf(target, targetVelocity, dt), target, targetVelocity, rate, dt);
42
+ return this.value;
43
+ }
44
+ /**
45
+ * The same, along the shortest arc, for angles. The value stays folded into
46
+ * (-π, π] so a long session cannot accumulate an unbounded angle.
47
+ */
48
+ stepAngle(target, targetVelocity, rate, dt) {
49
+ const from = startOf(target, targetVelocity, dt);
50
+ this.advance(-angleDelta(this.value, from), target, targetVelocity, rate, dt);
51
+ this.value = wrapAngle(this.value);
52
+ return this.value;
53
+ }
54
+ /**
55
+ * The analytic solution of `e'' = -ω²e - 2ωe'` over one step, in the target's
56
+ * own frame of reference — which is what makes a moving target free of lag,
57
+ * and only if the error going in is measured in that same frame. See
58
+ * `startOf`: solving from an error taken against where the target has *got to*
59
+ * while integrating to where it is *going* leaves a step's worth of target
60
+ * motion unaccounted for every frame, which converges on twice the target's
61
+ * velocity and 2V/ω of standing error — 4.56 m of the 4.667 m predicted, in
62
+ * the first measurement taken of this.
63
+ *
64
+ * Solved rather than integrated because a spring stepped by Euler diverges
65
+ * once `ω·dt` approaches 1, and this runs on a frame that can be 250 ms long
66
+ * when a tab wakes up. `decay` stands in for `e^-x` with a rational
67
+ * approximation that stays inside (0, 1] for every non-negative x, so a long
68
+ * frame overshoots nothing — it just arrives.
69
+ */
70
+ advance(error, target, targetVelocity, rate, dt) {
71
+ const omega = rate > 0 ? rate : 0;
72
+ const relative = this.velocity - targetVelocity;
73
+ const x = omega * dt;
74
+ const decay = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);
75
+ const slope = relative + omega * error;
76
+ this.value = target + (error + slope * dt) * decay;
77
+ this.velocity = targetVelocity + (relative - omega * slope * dt) * decay;
78
+ }
79
+ }
80
+ /**
81
+ * Where a target travelling at `targetVelocity` was when this step began.
82
+ *
83
+ * `target` is where it has arrived, which is the natural thing for a caller to
84
+ * have and the wrong end of the step to measure an error against.
85
+ */
86
+ function startOf(target, targetVelocity, dt) {
87
+ return target - targetVelocity * dt;
88
+ }
@@ -0,0 +1,71 @@
1
+ /**
2
+ * A graph to path over: nodes somewhere in the world, edges between them, and a cost per edge.
3
+ *
4
+ * **A graph rather than a navigation mesh, and that is a decision rather than a first step.** A
5
+ * mesh is what you build when walkable space is an arbitrary region and an agent may cross it
6
+ * anywhere; a graph is what you build when the ways through a world are *already* a network —
7
+ * roads, corridors, rails, docking lanes, the connections between rooms. Consumers of this engine
8
+ * keep arriving with the second: one reported that they extract a road graph from their world
9
+ * already and that their agents still walk straight at the target and wedge against a wall on the
10
+ * way, about once every two minutes of play. A mesh would have asked them to throw that away and
11
+ * start from geometry.
12
+ *
13
+ * What it costs is honest and worth saying at the top: **an agent on a graph travels along edges,
14
+ * so it takes corners the graph has and none it does not.** Open ground crossed by two nodes is
15
+ * crossed in one straight line. If a world's walkable space genuinely is a region, this is the
16
+ * wrong structure and a mesh is the row that is still open.
17
+ *
18
+ * **Structure of arrays, CSR adjacency, everything typed.** The search below runs inside a frame
19
+ * budget against a graph a consumer may rebuild when the world changes, so nothing here holds an
20
+ * object per node and nothing allocates during a query.
21
+ */
22
+ export interface NavGraph {
23
+ /** xyz per node, in world units. */
24
+ readonly positions: Float32Array;
25
+ readonly nodeCount: number;
26
+ /** CSR offsets: node `i`'s edges are `[edgeStart[i], edgeStart[i + 1])`. Length `nodeCount + 1`. */
27
+ readonly edgeStart: Uint32Array;
28
+ /** The node at the far end of each edge. */
29
+ readonly edgeTarget: Uint32Array;
30
+ /** What each edge costs to traverse. Distance unless the caller said otherwise. */
31
+ readonly edgeCost: Float32Array;
32
+ }
33
+ export interface NavEdge {
34
+ readonly from: number;
35
+ readonly to: number;
36
+ /**
37
+ * What crossing it costs. Defaults to the distance between its ends.
38
+ *
39
+ * **A cost is not a distance and the difference is the whole of route quality.** Mud, a hill, a
40
+ * toll, a road an agent should prefer, a corridor it should avoid unless there is nothing else:
41
+ * all of them are this number, and a consumer that never sets it gets shortest-path behaviour.
42
+ * The one rule the search depends on is that a cost is **never less than the straight-line
43
+ * distance between the two ends** — see `navSearch`, where the heuristic that makes A* exact
44
+ * assumes exactly that. Faster-than-flying edges are refused at build time rather than producing
45
+ * a route that is quietly not the best one.
46
+ */
47
+ readonly cost?: number;
48
+ /** Whether it may also be crossed the other way. Default true. */
49
+ readonly bidirectional?: boolean;
50
+ }
51
+ /**
52
+ * Build the graph, checking the two things that make a wrong route look like a working one.
53
+ *
54
+ * An edge naming a node that does not exist, and an edge cheaper than flying: both produce a graph
55
+ * that searches happily and answers wrongly, one by reading past the end of an array and one by
56
+ * breaking the admissibility A* needs. Refused here, at build time, which is where this engine
57
+ * refuses things.
58
+ */
59
+ export declare function buildNavGraph(positions: Float32Array | readonly number[], edges: readonly NavEdge[]): NavGraph;
60
+ /**
61
+ * The node nearest a world position, or −1 for a graph with none in reach.
62
+ *
63
+ * **A linear scan, and the ceiling is stated rather than discovered.** A road network is hundreds
64
+ * of nodes and a scan over it is microseconds; a graph of tens of thousands wants a spatial index,
65
+ * and a consumer with one should keep their own and pass the answer to `navSearch` directly, which
66
+ * is why that function takes node indices and not positions.
67
+ *
68
+ * `maxDistance` is what stops an agent that has walked off the network being snapped onto the far
69
+ * side of the map. Absent means the nearest node however far away it is.
70
+ */
71
+ export declare function nearestNavNode(graph: NavGraph, x: number, y: number, z: number, maxDistance?: number): number;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * A graph to path over: nodes somewhere in the world, edges between them, and a cost per edge.
3
+ *
4
+ * **A graph rather than a navigation mesh, and that is a decision rather than a first step.** A
5
+ * mesh is what you build when walkable space is an arbitrary region and an agent may cross it
6
+ * anywhere; a graph is what you build when the ways through a world are *already* a network —
7
+ * roads, corridors, rails, docking lanes, the connections between rooms. Consumers of this engine
8
+ * keep arriving with the second: one reported that they extract a road graph from their world
9
+ * already and that their agents still walk straight at the target and wedge against a wall on the
10
+ * way, about once every two minutes of play. A mesh would have asked them to throw that away and
11
+ * start from geometry.
12
+ *
13
+ * What it costs is honest and worth saying at the top: **an agent on a graph travels along edges,
14
+ * so it takes corners the graph has and none it does not.** Open ground crossed by two nodes is
15
+ * crossed in one straight line. If a world's walkable space genuinely is a region, this is the
16
+ * wrong structure and a mesh is the row that is still open.
17
+ *
18
+ * **Structure of arrays, CSR adjacency, everything typed.** The search below runs inside a frame
19
+ * budget against a graph a consumer may rebuild when the world changes, so nothing here holds an
20
+ * object per node and nothing allocates during a query.
21
+ */
22
+ /**
23
+ * Build the graph, checking the two things that make a wrong route look like a working one.
24
+ *
25
+ * An edge naming a node that does not exist, and an edge cheaper than flying: both produce a graph
26
+ * that searches happily and answers wrongly, one by reading past the end of an array and one by
27
+ * breaking the admissibility A* needs. Refused here, at build time, which is where this engine
28
+ * refuses things.
29
+ */
30
+ export function buildNavGraph(positions, edges) {
31
+ const points = positions instanceof Float32Array ? positions : new Float32Array(positions);
32
+ if (points.length % 3 !== 0) {
33
+ throw new Error(`buildNavGraph: positions must be xyz-packed, got ${points.length} floats`);
34
+ }
35
+ const nodeCount = points.length / 3;
36
+ if (nodeCount === 0)
37
+ throw new Error('buildNavGraph: a graph with no nodes has nothing to path over');
38
+ const degree = new Uint32Array(nodeCount);
39
+ for (const edge of edges) {
40
+ check(edge.from, nodeCount, 'from');
41
+ check(edge.to, nodeCount, 'to');
42
+ degree[edge.from] = (degree[edge.from] ?? 0) + 1;
43
+ if (edge.bidirectional !== false)
44
+ degree[edge.to] = (degree[edge.to] ?? 0) + 1;
45
+ }
46
+ const edgeStart = new Uint32Array(nodeCount + 1);
47
+ for (let i = 0; i < nodeCount; i++)
48
+ edgeStart[i + 1] = (edgeStart[i] ?? 0) + (degree[i] ?? 0);
49
+ const total = edgeStart[nodeCount] ?? 0;
50
+ const edgeTarget = new Uint32Array(total);
51
+ const edgeCost = new Float32Array(total);
52
+ const cursor = new Uint32Array(nodeCount);
53
+ for (const edge of edges) {
54
+ const span = distance(points, edge.from, edge.to);
55
+ const cost = edge.cost ?? span;
56
+ if (!(cost >= span)) {
57
+ throw new Error(`buildNavGraph: edge ${edge.from}->${edge.to} costs ${cost} over a span of ${span}. ` +
58
+ 'A cost below the straight-line distance breaks the search heuristic and returns routes ' +
59
+ 'that are not the cheapest, silently.');
60
+ }
61
+ write(edgeStart, cursor, edgeTarget, edgeCost, edge.from, edge.to, cost);
62
+ if (edge.bidirectional !== false) {
63
+ write(edgeStart, cursor, edgeTarget, edgeCost, edge.to, edge.from, cost);
64
+ }
65
+ }
66
+ return { positions: points, nodeCount, edgeStart, edgeTarget, edgeCost };
67
+ }
68
+ /**
69
+ * The node nearest a world position, or −1 for a graph with none in reach.
70
+ *
71
+ * **A linear scan, and the ceiling is stated rather than discovered.** A road network is hundreds
72
+ * of nodes and a scan over it is microseconds; a graph of tens of thousands wants a spatial index,
73
+ * and a consumer with one should keep their own and pass the answer to `navSearch` directly, which
74
+ * is why that function takes node indices and not positions.
75
+ *
76
+ * `maxDistance` is what stops an agent that has walked off the network being snapped onto the far
77
+ * side of the map. Absent means the nearest node however far away it is.
78
+ */
79
+ export function nearestNavNode(graph, x, y, z, maxDistance = Infinity) {
80
+ let best = -1;
81
+ let bestSquared = maxDistance === Infinity ? Infinity : maxDistance * maxDistance;
82
+ for (let i = 0; i < graph.nodeCount; i++) {
83
+ const dx = (graph.positions[i * 3] ?? 0) - x;
84
+ const dy = (graph.positions[i * 3 + 1] ?? 0) - y;
85
+ const dz = (graph.positions[i * 3 + 2] ?? 0) - z;
86
+ const squared = dx * dx + dy * dy + dz * dz;
87
+ /* Strictly nearer, so an exact tie keeps the lower index and two runs agree. */
88
+ if (squared < bestSquared) {
89
+ bestSquared = squared;
90
+ best = i;
91
+ }
92
+ }
93
+ return best;
94
+ }
95
+ function check(node, count, which) {
96
+ if (!Number.isInteger(node) || node < 0 || node >= count) {
97
+ throw new Error(`buildNavGraph: edge ${which} is ${node}, which is not a node of ${count}`);
98
+ }
99
+ }
100
+ function distance(points, a, b) {
101
+ const dx = (points[a * 3] ?? 0) - (points[b * 3] ?? 0);
102
+ const dy = (points[a * 3 + 1] ?? 0) - (points[b * 3 + 1] ?? 0);
103
+ const dz = (points[a * 3 + 2] ?? 0) - (points[b * 3 + 2] ?? 0);
104
+ return Math.sqrt(dx * dx + dy * dy + dz * dz);
105
+ }
106
+ function write(edgeStart, cursor, edgeTarget, edgeCost, from, to, cost) {
107
+ const at = (edgeStart[from] ?? 0) + (cursor[from] ?? 0);
108
+ cursor[from] = (cursor[from] ?? 0) + 1;
109
+ edgeTarget[at] = to;
110
+ edgeCost[at] = cost;
111
+ }
@@ -0,0 +1,93 @@
1
+ import type { NavGraph } from './navGraph.ts';
2
+ /**
3
+ * Following a route, which is the half of navigation that is not the search.
4
+ *
5
+ * **A path is a list of nodes and an agent is not.** Between the two sits a set of decisions every
6
+ * consumer makes and none of them enjoys: when has a waypoint been reached, what happens when the
7
+ * agent is pushed off the line, what does the last waypoint mean, and — the one that is always got
8
+ * wrong first — what do you steer *at*. Steering at the next node makes an agent visibly zigzag
9
+ * between waypoints on a curved road; steering at a point a fixed distance ahead *along* the path
10
+ * makes it cut the corner smoothly, and that is what this returns.
11
+ *
12
+ * **It does not move anything.** It answers where to aim, in world units, and the caller applies
13
+ * their own speed, acceleration, turn rate and physics — which is the same boundary
14
+ * `CharacterController` and `groundMotor` draw, and for the same reason: how a thing moves is the
15
+ * game's, where it should go is the engine's.
16
+ *
17
+ * Nothing here allocates and nothing reads a clock.
18
+ */
19
+ export interface NavSteer {
20
+ /** Where to aim, in world units. */
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ /** How far along the path is left, following the line rather than as the crow flies. */
25
+ remainingM: number;
26
+ /** True once the agent is within `arriveM` of the final node. */
27
+ arrived: boolean;
28
+ }
29
+ export declare function createNavSteer(): NavSteer;
30
+ export interface NavPathOptions {
31
+ /**
32
+ * How far ahead along the path to aim, metres.
33
+ *
34
+ * **The one number that decides whether following looks like driving or like a wind-up toy.**
35
+ * Short and the agent snaps at each waypoint in turn; long and it cuts corners so hard it leaves
36
+ * the road. A useful value is a little more than the agent's turning radius, and the default of
37
+ * two metres suits somebody walking.
38
+ */
39
+ readonly lookaheadM?: number;
40
+ /** Within this of the last node, the agent has arrived. Default half a metre. */
41
+ readonly arriveM?: number;
42
+ }
43
+ /**
44
+ * A route being walked: the nodes, and how far along them the agent is.
45
+ *
46
+ * **Progress is a distance along the path, not an index into it**, and that is what makes this
47
+ * survive an agent being shoved. An index only ever counts up when a waypoint is reached, so an
48
+ * agent knocked backwards past one keeps aiming at the waypoint behind it; a distance is recovered
49
+ * from the agent's own position every update, against the segment it is nearest to, so being pushed
50
+ * about costs progress and never correctness.
51
+ */
52
+ export declare class NavPath {
53
+ private readonly graph;
54
+ private readonly lookaheadM;
55
+ private readonly arriveM;
56
+ /** Node indices of the route, and how many are live. */
57
+ private readonly nodes;
58
+ private length;
59
+ /** Cumulative distance to the start of each segment, so a lookahead is a lookup. */
60
+ private readonly distanceTo;
61
+ private total;
62
+ /** Which segment the agent was on last update: where the search for the nearest one starts. */
63
+ private segment;
64
+ constructor(graph: NavGraph, capacity: number, options?: NavPathOptions);
65
+ get nodeCount(): number;
66
+ get lengthM(): number;
67
+ /** Whether there is a route to follow at all. */
68
+ get active(): boolean;
69
+ /**
70
+ * Take a route, as `NavSearch.find` filled it.
71
+ *
72
+ * A route of one node is a route to where the agent already is, and is stored as no route: it
73
+ * has no direction to steer along and every caller would otherwise have to special-case it.
74
+ */
75
+ set(path: Uint32Array, count: number): void;
76
+ clear(): void;
77
+ /**
78
+ * Where an agent at `(x, y, z)` should aim next.
79
+ *
80
+ * With no route, the agent is told to aim where it stands and that it has arrived, so a caller
81
+ * driving off `arrived` needs no separate check for having no path at all.
82
+ */
83
+ steer(x: number, y: number, z: number, out: NavSteer): void;
84
+ /** How far along segment `i` the point `(x, y, z)` projects, clamped to the segment. */
85
+ private project;
86
+ private distanceSquaredTo;
87
+ /** The world point a given distance along the route. */
88
+ private pointAt;
89
+ private span;
90
+ private px;
91
+ private py;
92
+ private pz;
93
+ }