@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,274 @@
1
+ /**
2
+ * Transcendentals that give the same bits on every JavaScript engine.
3
+ *
4
+ * **Not more accurate than `Math`, and that is not what they are for.** These are within a couple
5
+ * of units in the last place of correctly rounded, which is about what a platform `sin` gives you.
6
+ * What they are is *reproducible*: ECMAScript declines to specify `sin`, `cos`, `exp`, `acos` and
7
+ * eighteen more, so two engines may differ by an ulp, and an ulp is enough to make two peers running
8
+ * the same simulation disagree — first invisibly, then completely.
9
+ *
10
+ * `scripts/determinism.mjs` is the gate that refuses the unspecified ones inside the simulation set
11
+ * and names the twenty-two. Its header carries the other half of the argument: `+ - * /` are IEEE
12
+ * 754 operations by specification, JavaScript permits no fused-multiply-add contraction, and
13
+ * `Math.sqrt` is required correctly rounded and is *not* on that list. **So everything below uses
14
+ * only those five operations**, which is the whole design: reproducibility by construction rather
15
+ * than by hoping two engines chose the same algorithm.
16
+ *
17
+ * ---
18
+ *
19
+ * ## What is here, and what is deliberately not
20
+ *
21
+ * `exactSin`, `exactCos`, `exactExp`, `exactAcos`. Four, because four is what the engine and its
22
+ * first consumer actually reach for: the terrain binding's slope angle needs `acos`, a lockstep
23
+ * fixture rotating anything needs `sin` and `cos`, and exponential decay needs `exp`.
24
+ *
25
+ * **`atan2` is absent.** It is the obvious fifth and nothing here needs one: `shape.ts` sorts by a
26
+ * comparison key computed from two in-plane axes rather than by an angle, and `joints.ts` compares
27
+ * a quaternion component against a half-angle's sine. *Reversed by* a site that genuinely needs a
28
+ * signed angle from two components, at which point it arrives with its own golden vectors.
29
+ *
30
+ * ## Nothing in core imports these
31
+ *
32
+ * Deliberately. `core-only` is the one size figure in this repository that every consumer pays, and
33
+ * a module reachable from `createRenderer` is in it whether anybody calls it or not. These are
34
+ * reached by the script bindings and by consumers who ask for them, so tree-shaking keeps them out
35
+ * of a bundle that does not, which is measured rather than assumed.
36
+ *
37
+ * ## The coefficients
38
+ *
39
+ * The polynomial and rational coefficients are fdlibm's, which is the ancestor of most platform
40
+ * libms and is public domain. They are written as literals: **a literal is the same number on
41
+ * every engine, which is the only property being bought.** Their provenance matters less than their
42
+ * fixity — a coefficient somebody re-derived to one more digit is a different function, and
43
+ * `exact.test.ts`'s golden bit patterns are what would catch that.
44
+ */
45
+
46
+ /*
47
+ * π/2 in four pieces, most significant first, so a large multiple of it can be removed without
48
+ * losing the small remainder in the subtraction.
49
+ *
50
+ * **Two pieces are not enough and the measurement says so**: at an angle of 740 radians a two-part
51
+ * reduction leaves `sin` and `cos` 18.5 ulps out, because `k * PIO2_1` needs more than 53 bits once
52
+ * `k` grows. Three brings it under two ulps for the cost of two multiplies.
53
+ *
54
+ * **`PIO2_TAIL` and `PIO2_TAIL_LO` are one number in two halves, not two successive corrections.**
55
+ * fdlibm carries a fourth constant, `pio2_1t`, which is the tail for its *single*-iteration path;
56
+ * `pio2_2` is the same tail rounded differently, with `pio2_2t` as its own tail, and the two paths
57
+ * are alternatives. Refining the first with the second is not more accurate, it is wrong: it
58
+ * subtracts the tail twice and took `sin` to 2.2e11 ulps out, which is how this comment came to be
59
+ * here.
60
+ */
61
+ const PIO2_1 = 1.5707963267341256;
62
+ const PIO2_TAIL = 6.077100506303966e-11;
63
+ const PIO2_TAIL_LO = 2.0222662487959506e-21;
64
+ const TWO_OVER_PI = 0.6366197723675814;
65
+
66
+ const HALF_PI = 1.5707963267948966;
67
+ const PI = 3.141592653589793;
68
+
69
+ /* fdlibm's `__kernel_sin` coefficients. */
70
+ const S1 = -1.6666666666666632e-1;
71
+ const S2 = 8.3333333333224894e-3;
72
+ const S3 = -1.984126982985795e-4;
73
+ const S4 = 2.7557313707070068e-6;
74
+ const S5 = -2.5050760253406863e-8;
75
+ const S6 = 1.5896909952115501e-10;
76
+
77
+ /* fdlibm's `__kernel_cos` coefficients. */
78
+ const C1 = 4.1666666666666602e-2;
79
+ const C2 = -1.3888888888874109e-3;
80
+ const C3 = 2.480158728947673e-5;
81
+ const C4 = -2.7557314351390663e-7;
82
+ const C5 = 2.0875723212981748e-9;
83
+ const C6 = -1.1359647557788195e-11;
84
+
85
+ /* fdlibm's `asin` rational, numerator then denominator. */
86
+ const P0 = 1.6666666666666666e-1;
87
+ const P1 = -3.2556581862240092e-1;
88
+ const P2 = 2.0121253213486293e-1;
89
+ const P3 = -4.0055534500679411e-2;
90
+ const P4 = 7.9153499428981453e-4;
91
+ const P5 = 3.4793310759602117e-5;
92
+ const Q1 = -2.4033949117344142;
93
+ const Q2 = 2.0209457602335057;
94
+ const Q3 = -6.8828397160545329e-1;
95
+ const Q4 = 7.7038150555901935e-2;
96
+
97
+ /** ln 2, split for the same reason π/2 is. */
98
+ const LN2_HI = 0.6931471803691238;
99
+ const LN2_LO = 1.9082149292705877e-10;
100
+ const ONE_OVER_LN2 = 1.4426950408889634;
101
+
102
+ /** 2^(2^i), for i = 0 to 9. Every one is exact, so a product of them is exact. */
103
+ const POW2 = [
104
+ 2, 4, 16, 256, 65536, 4294967296, 1.8446744073709552e19, 3.402823669209385e38,
105
+ 1.157920892373162e77, 1.3407807929942597e154,
106
+ ];
107
+
108
+ /**
109
+ * Two to an integer power, by binary decomposition of the exponent.
110
+ *
111
+ * Multiplication by a power of two is exact in IEEE 754, so this is exact wherever it does not
112
+ * overflow — which is what makes it a legitimate substitute for the `Math.pow` a range reduction
113
+ * would otherwise reach for.
114
+ *
115
+ * A large negative exponent lands on zero instead of a subnormal, because the reciprocal is taken
116
+ * after the product overflows. That is `exp` underflowing to zero, which is where it was going.
117
+ */
118
+ function pow2(exponent: number): number {
119
+ let remaining = exponent < 0 ? -exponent : exponent;
120
+ let result = 1;
121
+ let index = 0;
122
+ while (remaining > 0 && index < POW2.length) {
123
+ if ((remaining & 1) === 1) result *= POW2[index] as number;
124
+ remaining >>= 1;
125
+ index += 1;
126
+ }
127
+ return exponent < 0 ? 1 / result : result;
128
+ }
129
+
130
+ /** sin on [-π/4, π/4]. */
131
+ function sinKernel(x: number): number {
132
+ const z = x * x;
133
+ const poly = S1 + z * (S2 + z * (S3 + z * (S4 + z * (S5 + z * S6))));
134
+ return x + x * z * poly;
135
+ }
136
+
137
+ /** cos on [-π/4, π/4]. */
138
+ function cosKernel(x: number): number {
139
+ const z = x * x;
140
+ const poly = C1 + z * (C2 + z * (C3 + z * (C4 + z * (C5 + z * C6))));
141
+ return 1 - 0.5 * z + z * z * poly;
142
+ }
143
+
144
+ /**
145
+ * Fold an angle into [-π/4, π/4] and say which quadrant it came from.
146
+ *
147
+ * Cody-Waite: the multiple of π/2 is removed in pieces, so the subtraction that produces a small
148
+ * remainder from two large numbers does not lose the bits it is supposed to keep. One-piece
149
+ * reduction is accurate to about 1e-8 at an angle of a thousand radians, which for a simulation
150
+ * that accumulates rotation is the difference between an object facing forward and facing sideways
151
+ * after a few minutes.
152
+ */
153
+ function reduce(x: number): { r: number; quadrant: number } {
154
+ const k = Math.round(x * TWO_OVER_PI);
155
+
156
+ /* The leading piece, whose product with `k` is exact for every `k` a simulation reaches. */
157
+ const head = x - k * PIO2_1;
158
+
159
+ /*
160
+ * The tail, in two halves. `head - tail` loses the bits below its own last place, and
161
+ * `PIO2_TAIL_LO - (head - r - tail)` is exactly those bits recovered — the same
162
+ * subtract-and-recover fdlibm uses on its two-iteration path.
163
+ */
164
+ const tail = k * PIO2_TAIL;
165
+ let r = head - tail;
166
+ const lost = k * PIO2_TAIL_LO - (head - r - tail);
167
+ r = r - lost;
168
+
169
+ return { r, quadrant: ((k % 4) + 4) % 4 };
170
+ }
171
+
172
+ /** `Math.sin`, reproducibly. NaN in, NaN out; an infinity answers NaN, as `Math.sin` does. */
173
+ export function exactSin(x: number): number {
174
+ if (!Number.isFinite(x)) return Number.NaN;
175
+ const { r, quadrant } = reduce(x);
176
+ switch (quadrant) {
177
+ case 0:
178
+ return sinKernel(r);
179
+ case 1:
180
+ return cosKernel(r);
181
+ case 2:
182
+ return -sinKernel(r);
183
+ default:
184
+ return -cosKernel(r);
185
+ }
186
+ }
187
+
188
+ /** `Math.cos`, reproducibly. */
189
+ export function exactCos(x: number): number {
190
+ if (!Number.isFinite(x)) return Number.NaN;
191
+ const { r, quadrant } = reduce(x);
192
+ switch (quadrant) {
193
+ case 0:
194
+ return cosKernel(r);
195
+ case 1:
196
+ return -sinKernel(r);
197
+ case 2:
198
+ return -cosKernel(r);
199
+ default:
200
+ return sinKernel(r);
201
+ }
202
+ }
203
+
204
+ /**
205
+ * `Math.exp`, reproducibly.
206
+ *
207
+ * Reduce by a multiple of ln 2 into [-ln2/2, ln2/2], sum the Taylor series there, and scale by a
208
+ * power of two. **A degree-14 series and not a shorter minimax**, because on that interval the
209
+ * fifteenth term is about 4e-20 — below the precision of a double — so the series is exact to the
210
+ * representation and there is nothing a fitted polynomial would buy.
211
+ */
212
+ export function exactExp(x: number): number {
213
+ if (Number.isNaN(x)) return Number.NaN;
214
+ if (x === Number.POSITIVE_INFINITY) return Number.POSITIVE_INFINITY;
215
+ if (x === Number.NEGATIVE_INFINITY) return 0;
216
+ if (x > 709.782712893384) return Number.POSITIVE_INFINITY;
217
+ if (x < -745.1332191019411) return 0;
218
+
219
+ const k = Math.round(x * ONE_OVER_LN2);
220
+ const r = x - k * LN2_HI - k * LN2_LO;
221
+
222
+ /* Horner over 1/n!, highest term first. */
223
+ let sum = 1 / 87178291200; // 1/14!
224
+ sum = 1 / 6227020800 + r * sum; // 1/13!
225
+ sum = 1 / 479001600 + r * sum; // 1/12!
226
+ sum = 1 / 39916800 + r * sum; // 1/11!
227
+ sum = 1 / 3628800 + r * sum; // 1/10!
228
+ sum = 1 / 362880 + r * sum; // 1/9!
229
+ sum = 1 / 40320 + r * sum; // 1/8!
230
+ sum = 1 / 5040 + r * sum; // 1/7!
231
+ sum = 1 / 720 + r * sum; // 1/6!
232
+ sum = 1 / 120 + r * sum; // 1/5!
233
+ sum = 1 / 24 + r * sum; // 1/4!
234
+ sum = 1 / 6 + r * sum; // 1/3!
235
+ sum = 0.5 + r * sum;
236
+ sum = 1 + r * sum;
237
+ sum = 1 + r * sum;
238
+
239
+ return sum * pow2(k);
240
+ }
241
+
242
+ /** fdlibm's `asin` rational on `z = x²`, valid where `z` is small. */
243
+ function asinRational(z: number): number {
244
+ const numerator = z * (P0 + z * (P1 + z * (P2 + z * (P3 + z * (P4 + z * P5)))));
245
+ const denominator = 1 + z * (Q1 + z * (Q2 + z * (Q3 + z * Q4)));
246
+ return numerator / denominator;
247
+ }
248
+
249
+ /**
250
+ * `Math.acos`, reproducibly. Outside [-1, 1] this answers NaN, as `Math.acos` does.
251
+ *
252
+ * Three branches rather than one, and the split at ±0.5 is the reason it is accurate near the ends:
253
+ * `acos` has infinite derivative at ±1, so a polynomial in `x` loses its footing there. Substituting
254
+ * `s = sqrt((1 ∓ x)/2)` moves the awkward point to zero, where a polynomial is comfortable — which
255
+ * is also why `sqrt` being exactly rounded matters here rather than being a convenience.
256
+ */
257
+ export function exactAcos(x: number): number {
258
+ if (Number.isNaN(x) || x > 1 || x < -1) return Number.NaN;
259
+ if (x === 1) return 0;
260
+ if (x === -1) return PI;
261
+
262
+ if (x >= 0.5) {
263
+ const z = (1 - x) / 2;
264
+ const s = Math.sqrt(z);
265
+ return 2 * (s + s * asinRational(z));
266
+ }
267
+ if (x <= -0.5) {
268
+ const z = (1 + x) / 2;
269
+ const s = Math.sqrt(z);
270
+ return PI - 2 * (s + s * asinRational(z));
271
+ }
272
+ const z = x * x;
273
+ return HALF_PI - (x + x * asinRational(z));
274
+ }
@@ -0,0 +1,115 @@
1
+ import type { ReadonlyMat4 } from 'gl-matrix';
2
+
3
+ /**
4
+ * The six planes bounding what a camera can see, and whether a sphere is among them.
5
+ *
6
+ * **A `Float32Array(24)` rather than six objects**, for the reason every hot path in this engine
7
+ * gives: a visibility test runs per draw per frame, and an array of plane objects is six
8
+ * dereferences a test and an allocation per rebuild.
9
+ *
10
+ * Planes are stored as `(nx, ny, nz, d)` with the normal pointing *inwards*, so a point is inside
11
+ * the frustum when `n · p + d >= 0` for all six.
12
+ */
13
+ export type Frustum = Float32Array;
14
+
15
+ /** Left, right, bottom, top, near, far — the order the extraction below produces. */
16
+ const PLANE_COUNT = 6;
17
+
18
+ export function createFrustum(): Frustum {
19
+ return new Float32Array(PLANE_COUNT * 4);
20
+ }
21
+
22
+ /**
23
+ * Pull the six planes out of a view-projection matrix.
24
+ *
25
+ * **This is Gribb and Hartmann, and it is worth naming because it looks like a trick.** A
26
+ * view-projection takes a world point to clip space, where being inside the frustum is
27
+ * `-w <= x <= w` and the same for y and z. Writing `x >= -w` as `x + w >= 0` and substituting the
28
+ * matrix rows gives a plane equation in world coordinates directly — so the left plane is row 4
29
+ * plus row 1, the right is row 4 minus row 1, and so on. No inversion, no corner extraction.
30
+ *
31
+ * **Normalising is not tidiness.** Straight out of the matrix a plane's normal has an arbitrary
32
+ * length, so `n · p + d` is a distance in some unscaled clip unit. Dividing through by the
33
+ * normal's length makes it a distance in world units, which is the only form a radius in metres
34
+ * can be compared against. Skipping it produces a test that is *nearly* right, and wrong by a
35
+ * factor that changes with the field of view.
36
+ *
37
+ * gl-matrix stores column-major, so `m[column * 4 + row]`.
38
+ */
39
+ export function frustumFromViewProjection(m: ReadonlyMat4, out: Frustum): Frustum {
40
+ const m0 = m[0] ?? 0;
41
+ const m1 = m[1] ?? 0;
42
+ const m2 = m[2] ?? 0;
43
+ const m3 = m[3] ?? 0;
44
+ const m4 = m[4] ?? 0;
45
+ const m5 = m[5] ?? 0;
46
+ const m6 = m[6] ?? 0;
47
+ const m7 = m[7] ?? 0;
48
+ const m8 = m[8] ?? 0;
49
+ const m9 = m[9] ?? 0;
50
+ const m10 = m[10] ?? 0;
51
+ const m11 = m[11] ?? 0;
52
+ const m12 = m[12] ?? 0;
53
+ const m13 = m[13] ?? 0;
54
+ const m14 = m[14] ?? 0;
55
+ const m15 = m[15] ?? 0;
56
+
57
+ /* Row 4 ± row 1, 2, 3. Row r of a column-major matrix is m[r], m[4+r], m[8+r], m[12+r]. */
58
+ setPlane(out, 0, m3 + m0, m7 + m4, m11 + m8, m15 + m12);
59
+ setPlane(out, 1, m3 - m0, m7 - m4, m11 - m8, m15 - m12);
60
+ setPlane(out, 2, m3 + m1, m7 + m5, m11 + m9, m15 + m13);
61
+ setPlane(out, 3, m3 - m1, m7 - m5, m11 - m9, m15 - m13);
62
+ /*
63
+ * **Near is `row4 + row3` and not `row3` alone**, which is the WebGL convention where clip z
64
+ * runs -w..w. WebGPU's runs 0..w and its near plane really is row 3 — but every matrix in this
65
+ * engine is built by gl-matrix's `perspective`, which is the OpenGL convention, and the
66
+ * WebGPU backend corrects it with `CLIP_CORRECTION` at the last moment before drawing. So the
67
+ * matrix reaching here is the OpenGL one on both backends, and one extraction serves both.
68
+ */
69
+ setPlane(out, 4, m3 + m2, m7 + m6, m11 + m10, m15 + m14);
70
+ setPlane(out, 5, m3 - m2, m7 - m6, m11 - m10, m15 - m14);
71
+ return out;
72
+ }
73
+
74
+ function setPlane(out: Frustum, index: number, x: number, y: number, z: number, d: number): void {
75
+ const length = Math.sqrt(x * x + y * y + z * z);
76
+ /* A degenerate matrix gives a zero-length normal; leaving it unscaled is better than NaN,
77
+ and the plane then accepts everything, which is the safe direction for a cull to fail. */
78
+ const scale = length > 1e-12 ? 1 / length : 0;
79
+ const at = index * 4;
80
+ out[at] = x * scale;
81
+ out[at + 1] = y * scale;
82
+ out[at + 2] = z * scale;
83
+ out[at + 3] = d * scale;
84
+ }
85
+
86
+ /**
87
+ * Whether a world-space sphere is anywhere inside the frustum.
88
+ *
89
+ * **The question is "outside any one plane", not "inside every plane".** A sphere is rejected
90
+ * only when it lies entirely on the far side of a single plane; anything else is kept. Asking
91
+ * whether the *centre* is inside all six is the version that looks equivalent and is not — it
92
+ * throws away everything larger than the view, so a room the camera is standing in vanishes.
93
+ *
94
+ * Conservative at the corners: a sphere can be outside the frustum and still be within radius of
95
+ * all six planes, near an edge. That costs a draw that turns out to be invisible and never costs
96
+ * a draw that was visible, which is the only asymmetry a cull may have.
97
+ */
98
+ export function sphereInFrustum(
99
+ frustum: Frustum,
100
+ x: number,
101
+ y: number,
102
+ z: number,
103
+ radius: number,
104
+ ): boolean {
105
+ for (let plane = 0; plane < PLANE_COUNT; plane += 1) {
106
+ const at = plane * 4;
107
+ const distance =
108
+ (frustum[at] ?? 0) * x +
109
+ (frustum[at + 1] ?? 0) * y +
110
+ (frustum[at + 2] ?? 0) * z +
111
+ (frustum[at + 3] ?? 0);
112
+ if (distance < -radius) return false;
113
+ }
114
+ return true;
115
+ }
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Ray against shapes, for picking. Pure arithmetic, no allocation, no renderer.
3
+ *
4
+ * Separate from `src/render/` because none of it touches a context and all of it is
5
+ * testable without one — the same split `textLayout.ts` makes for the same reason.
6
+ */
7
+
8
+ /**
9
+ * The slab method: clip the ray against three pairs of parallel planes and keep the
10
+ * overlap.
11
+ *
12
+ * **The divide by a zero direction component is deliberate.** A ray parallel to an axis
13
+ * gives ±Infinity for that slab, and the min/max below then either keep the interval
14
+ * whole (the origin is between the planes) or collapse it (it is not), which is the right
15
+ * answer both times. Special-casing zero to avoid the divide is how this gets broken.
16
+ *
17
+ * Returns the near distance, `0` when the origin is inside, `-1` on a miss. Distance
18
+ * rather than a boolean because a pick has to choose the nearest of several hits.
19
+ */
20
+ export function rayAabb(
21
+ origin: ArrayLike<number>,
22
+ direction: ArrayLike<number>,
23
+ min: ArrayLike<number>,
24
+ max: ArrayLike<number>,
25
+ ): number {
26
+ let near = -Infinity;
27
+ let far = Infinity;
28
+
29
+ for (let axis = 0; axis < 3; axis++) {
30
+ const inverse = 1 / (direction[axis] as number);
31
+ let t0 = ((min[axis] as number) - (origin[axis] as number)) * inverse;
32
+ let t1 = ((max[axis] as number) - (origin[axis] as number)) * inverse;
33
+ if (t0 > t1) {
34
+ const swap = t0;
35
+ t0 = t1;
36
+ t1 = swap;
37
+ }
38
+ if (t0 > near) near = t0;
39
+ if (t1 < far) far = t1;
40
+ if (near > far) return -1;
41
+ }
42
+
43
+ if (far < 0) return -1;
44
+ return near < 0 ? 0 : near;
45
+ }
46
+
47
+ /**
48
+ * Möller–Trumbore, indexed and two-sided.
49
+ *
50
+ * Takes vertex *indices* into a flat position array rather than three points, so a caller
51
+ * walking an index buffer allocates nothing per triangle — which is the whole reason
52
+ * picking can afford a narrow phase at pointer-move rates.
53
+ *
54
+ * **Two-sided deliberately.** Culling back faces would make a pick miss a surface the
55
+ * camera has got behind, and what that looks like to somebody using it is a click passing
56
+ * through the object to whatever is beyond it.
57
+ */
58
+ export function rayTriangle(
59
+ origin: ArrayLike<number>,
60
+ direction: ArrayLike<number>,
61
+ positions: ArrayLike<number>,
62
+ a: number,
63
+ b: number,
64
+ c: number,
65
+ ): number {
66
+ const ax = positions[a * 3] as number;
67
+ const ay = positions[a * 3 + 1] as number;
68
+ const az = positions[a * 3 + 2] as number;
69
+ const e1x = (positions[b * 3] as number) - ax;
70
+ const e1y = (positions[b * 3 + 1] as number) - ay;
71
+ const e1z = (positions[b * 3 + 2] as number) - az;
72
+ const e2x = (positions[c * 3] as number) - ax;
73
+ const e2y = (positions[c * 3 + 1] as number) - ay;
74
+ const e2z = (positions[c * 3 + 2] as number) - az;
75
+
76
+ const px = (direction[1] as number) * e2z - (direction[2] as number) * e2y;
77
+ const py = (direction[2] as number) * e2x - (direction[0] as number) * e2z;
78
+ const pz = (direction[0] as number) * e2y - (direction[1] as number) * e2x;
79
+
80
+ const determinant = e1x * px + e1y * py + e1z * pz;
81
+ /* Near zero is a ray in the triangle's own plane: no single crossing to report. */
82
+ if (determinant > -1e-9 && determinant < 1e-9) return -1;
83
+ const inverse = 1 / determinant;
84
+
85
+ const tx = (origin[0] as number) - ax;
86
+ const ty = (origin[1] as number) - ay;
87
+ const tz = (origin[2] as number) - az;
88
+
89
+ const u = (tx * px + ty * py + tz * pz) * inverse;
90
+ if (u < 0 || u > 1) return -1;
91
+
92
+ const qx = ty * e1z - tz * e1y;
93
+ const qy = tz * e1x - tx * e1z;
94
+ const qz = tx * e1y - ty * e1x;
95
+
96
+ const v =
97
+ ((direction[0] as number) * qx +
98
+ (direction[1] as number) * qy +
99
+ (direction[2] as number) * qz) *
100
+ inverse;
101
+ if (v < 0 || u + v > 1) return -1;
102
+
103
+ const distance = (e2x * qx + e2y * qy + e2z * qz) * inverse;
104
+ return distance > 1e-6 ? distance : -1;
105
+ }
106
+
107
+ /**
108
+ * Where a ray meets an infinite plane, or `-1`.
109
+ *
110
+ * The plane is a point and a normal rather than four coefficients, because every caller
111
+ * here has a point — a gizmo's origin, a target's position — and would otherwise compute
112
+ * `d` to have it undone one line later.
113
+ *
114
+ * **A ray within `1e-6` of parallel is a miss and not a hit at infinity.** The alternative
115
+ * returns a number that is finite, enormous and wrong, and what a caller does with it is
116
+ * teleport whatever it was dragging. Callers that grab against a plane depend on this
117
+ * refusal; see `gizmo.ts`.
118
+ *
119
+ * The normal does not have to be unit length, but `direction` and `normal` must be in the
120
+ * same space, and a plane behind the ray reports `-1` the way every other miss does.
121
+ */
122
+ export function rayPlane(
123
+ origin: ArrayLike<number>,
124
+ direction: ArrayLike<number>,
125
+ point: ArrayLike<number>,
126
+ normal: ArrayLike<number>,
127
+ ): number {
128
+ const denominator =
129
+ (direction[0] as number) * (normal[0] as number) +
130
+ (direction[1] as number) * (normal[1] as number) +
131
+ (direction[2] as number) * (normal[2] as number);
132
+ if (denominator > -1e-6 && denominator < 1e-6) return -1;
133
+
134
+ const numerator =
135
+ ((point[0] as number) - (origin[0] as number)) * (normal[0] as number) +
136
+ ((point[1] as number) - (origin[1] as number)) * (normal[1] as number) +
137
+ ((point[2] as number) - (origin[2] as number)) * (normal[2] as number);
138
+ const distance = numerator / denominator;
139
+ return distance >= 0 ? distance : -1;
140
+ }
141
+
142
+ /**
143
+ * The closest approach between a ray and an infinite line, written into `out`.
144
+ *
145
+ * `out` receives three numbers: the ray's parameter, the line's parameter, and the
146
+ * distance between the two closest points. Three outputs is why this takes a buffer where
147
+ * everything else in this file returns a number — a caller picking a gizmo handle needs
148
+ * all three at once, and needs them without allocating on every pointer move.
149
+ *
150
+ * Returns `false` for two lines within `1e-6` of parallel, and **writes nothing in that
151
+ * case**. There is no closest pair to report: every point on one line is equidistant from
152
+ * the other, so any answer would be arbitrary, and a caller dragging along the line has to
153
+ * keep what it had rather than jump to whichever point the arithmetic happened to land on.
154
+ *
155
+ * `direction` and `axis` must both be unit length. That is what makes the returned
156
+ * parameters distances rather than multiples of two different vectors' lengths.
157
+ */
158
+ export function rayClosestOnLine(
159
+ origin: ArrayLike<number>,
160
+ direction: ArrayLike<number>,
161
+ point: ArrayLike<number>,
162
+ axis: ArrayLike<number>,
163
+ out: Float32Array,
164
+ ): boolean {
165
+ const dx = direction[0] as number;
166
+ const dy = direction[1] as number;
167
+ const dz = direction[2] as number;
168
+ const ax = axis[0] as number;
169
+ const ay = axis[1] as number;
170
+ const az = axis[2] as number;
171
+
172
+ const dotDA = dx * ax + dy * ay + dz * az;
173
+ /* Both are unit, so this is 1 - cos²: the squared sine of the angle between them. */
174
+ const denominator = 1 - dotDA * dotDA;
175
+ if (denominator < 1e-6) return false;
176
+
177
+ const wx = (origin[0] as number) - (point[0] as number);
178
+ const wy = (origin[1] as number) - (point[1] as number);
179
+ const wz = (origin[2] as number) - (point[2] as number);
180
+ const dotDW = dx * wx + dy * wy + dz * wz;
181
+ const dotAW = ax * wx + ay * wy + az * wz;
182
+
183
+ const rayT = (dotDA * dotAW - dotDW) / denominator;
184
+ const lineS = (dotAW - dotDA * dotDW) / denominator;
185
+
186
+ const px = wx + dx * rayT - ax * lineS;
187
+ const py = wy + dy * rayT - ay * lineS;
188
+ const pz = wz + dz * rayT - az * lineS;
189
+
190
+ out[0] = rayT;
191
+ out[1] = lineS;
192
+ out[2] = Math.sqrt(px * px + py * py + pz * pz);
193
+ return true;
194
+ }
195
+
196
+ /**
197
+ * The nearest positive distance along a ray to a sphere's surface, or `-1`.
198
+ *
199
+ * **An origin inside the sphere reports the far root rather than a miss**, which is the
200
+ * same choice `rayAabb` makes for the same reason: a camera that has got inside something
201
+ * pickable is still looking at it, and reporting a miss makes the object impossible to
202
+ * click from close up.
203
+ *
204
+ * `direction` must be unit length, which is what lets the quadratic drop its leading
205
+ * coefficient.
206
+ */
207
+ export function raySphere(
208
+ origin: ArrayLike<number>,
209
+ direction: ArrayLike<number>,
210
+ centre: ArrayLike<number>,
211
+ radius: number,
212
+ ): number {
213
+ const ox = (origin[0] as number) - (centre[0] as number);
214
+ const oy = (origin[1] as number) - (centre[1] as number);
215
+ const oz = (origin[2] as number) - (centre[2] as number);
216
+
217
+ const b =
218
+ ox * (direction[0] as number) + oy * (direction[1] as number) + oz * (direction[2] as number);
219
+ const c = ox * ox + oy * oy + oz * oz - radius * radius;
220
+ const discriminant = b * b - c;
221
+ if (discriminant < 0) return -1;
222
+
223
+ const root = Math.sqrt(discriminant);
224
+ const near = -b - root;
225
+ if (near >= 0) return near;
226
+ const far = -b + root;
227
+ return far >= 0 ? far : -1;
228
+ }