@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,304 @@
1
+ import { mat4, vec3 } from 'gl-matrix';
2
+ import { DEG_TO_RAD } from '../math/scalar.js';
3
+ /** Reused by `project`; a per-call vec4 would allocate on every pointer move. */
4
+ const projected = new Float32Array(4);
5
+ /** Reused by `rayThrough`; this runs on every pointer move. */
6
+ const nearPoint = new Float32Array(4);
7
+ const farPoint = new Float32Array(4);
8
+ /** One NDC point back through the inverse view-projection, with the perspective divide. */
9
+ function unproject(out, inv, x, y, z) {
10
+ const w = inv[3] * x + inv[7] * y + inv[11] * z + inv[15];
11
+ const scale = w === 0 ? 1 : 1 / w;
12
+ out[0] = (inv[0] * x + inv[4] * y + inv[8] * z + inv[12]) * scale;
13
+ out[1] = (inv[1] * x + inv[5] * y + inv[9] * z + inv[13]) * scale;
14
+ out[2] = (inv[2] * x + inv[6] * y + inv[10] * z + inv[14]) * scale;
15
+ }
16
+ /**
17
+ * Perspective camera. Yaw/pitch convention: yaw 0 looks toward -Z, positive
18
+ * yaw turns right (+X); positive pitch looks up.
19
+ */
20
+ export class Camera {
21
+ position = vec3.create();
22
+ yaw = 0;
23
+ pitch = 0;
24
+ fovYDeg = 70;
25
+ /**
26
+ * Near plane, metres — and the single biggest control this engine has over
27
+ * z-fighting.
28
+ *
29
+ * A conventional depth buffer spends its precision hyperbolically: the smallest
30
+ * separation it can resolve at distance `z` is about `z² / (near · 2^bits)`. At
31
+ * the old 0.1 that is a quarter of a millimetre at twenty metres, **1.5 mm at
32
+ * fifty, and 6 mm at a hundred** — so any two surfaces closer together than that
33
+ * are decided by float rounding, and which one a pixel shows changes as the
34
+ * camera moves — shown most clearly by a matched pair of screenshots of one seam
35
+ * from two angles, right in one and wrong in the other.
36
+ *
37
+ * Precision scales linearly with this number, so four times the near plane is
38
+ * four times the resolution at every distance, and it costs nothing. Safe at 0.4
39
+ * because a third-person boom never brings the eye closer than `BOOM_MIN` (0.9 m)
40
+ * to the character and keeps its own radius clear of surfaces — there is nothing
41
+ * legitimately within 40 cm of this camera to clip.
42
+ *
43
+ * It is a mitigation and not the cure. A 0.2 mm seam, which the daily generator
44
+ * does produce where two decks meet, still fights past about forty metres. The
45
+ * cure is a reversed-Z float depth buffer; see `docs/bugs/`.
46
+ */
47
+ near = 0.4;
48
+ far = 500;
49
+ forward = vec3.create();
50
+ view = mat4.create();
51
+ projection = mat4.create();
52
+ viewProjection = mat4.create();
53
+ invViewProjection = mat4.create();
54
+ /**
55
+ * Roll about the view direction, radians. Positive drops the right side.
56
+ * Render-only: nothing about the camera reaches the simulation.
57
+ */
58
+ roll = 0;
59
+ /**
60
+ * Point the camera at a world position from wherever it currently stands.
61
+ *
62
+ * Added because three callers had each derived this by hand and one of them got it
63
+ * wrong: a preview rig placed itself on a circle around its subject and computed a yaw
64
+ * that was exactly π out, so it rendered the inside of an empty box and the figure it was
65
+ * built to show was behind it. The trig is four lines and the sign conventions are this
66
+ * class's own — `yaw 0` looks toward −Z, positive yaw turns toward +X — so leaving every
67
+ * caller to rediscover them is leaving them a trap.
68
+ *
69
+ * Sets `yaw` and `pitch` only. Roll is a separate decision (it is a lean, not an aim),
70
+ * and `updateMatrices` still has to be called afterwards.
71
+ */
72
+ lookAt(x, y, z) {
73
+ const dx = x - (this.position[0] ?? 0);
74
+ const dy = y - (this.position[1] ?? 0);
75
+ const dz = z - (this.position[2] ?? 0);
76
+ const flat = Math.hypot(dx, dz);
77
+ // Straight up or down leaves yaw meaningless, so it is left as it was rather than
78
+ // snapped to zero — which would spin the view on the way past vertical.
79
+ if (flat > 1e-6)
80
+ this.yaw = Math.atan2(dx, -dz);
81
+ this.pitch = Math.atan2(dy, flat);
82
+ }
83
+ updateMatrices(aspect) {
84
+ const cosPitch = Math.cos(this.pitch);
85
+ const sinPitch = Math.sin(this.pitch);
86
+ const cosYaw = Math.cos(this.yaw);
87
+ const sinYaw = Math.sin(this.yaw);
88
+ vec3.set(this.forward, sinYaw * cosPitch, sinPitch, -cosYaw * cosPitch);
89
+ /*
90
+ * The view basis is derived from the angles, and **not** by aiming a look-at at
91
+ * `position + forward`, which is what this did for as long as it existed.
92
+ *
93
+ * A look-at builds its right axis by crossing the view direction with world up, so it has
94
+ * nothing to work with when the two are parallel — and at a pitch of ±π/2 they are. What
95
+ * hid that for so long is that `cos(π/2)` is 6.1e-17 rather than 0, so the horizontal part
96
+ * of the direction survives *if it survives the addition*, and in a `Float32Array` that
97
+ * depends on where the camera is standing: at the origin the epsilon is kept and the basis
98
+ * is fine, and past about half a metre on the axis in question it is rounded away, the
99
+ * cross product collapses to zero, and the view matrix is singular.
100
+ *
101
+ * A singular view does not draw a wrong picture, it draws none: every vertex lands on one
102
+ * point, so the frame keeps its clear colour, and `invert` below fails and silently leaves
103
+ * whatever the previous aim put in `invViewProjection` — which the sky pass then reads as
104
+ * though it were this one's. **Measured on a reflection probe**, whose up and down faces are
105
+ * the only two in the engine that ever aim straight at a pole: both came back holding one
106
+ * stale copy of a sideways face, in every world whose subject does not stand at the origin.
107
+ *
108
+ * Right is `(cos yaw, 0, sin yaw)` and does not depend on pitch at all, so it is unit length
109
+ * at every aim including both poles, and up follows from it and the direction. The result
110
+ * matches what the look-at produced everywhere the look-at was well defined, including the
111
+ * mirrored frame it gave past vertical, which `lean` keeps.
112
+ *
113
+ * What it gives up: a camera tilted past vertical still mirrors rather than rolling over the
114
+ * top, because that is the behaviour that shipped and nothing here aims there — every
115
+ * consumer clamps pitch well inside a quarter turn. A camera meant to loop, in a cockpit or
116
+ * a free-flight view, wants `lean` dropped and the basis carried continuously instead.
117
+ */
118
+ const lean = cosPitch < 0 ? -1 : 1;
119
+ let rightX = lean * cosYaw;
120
+ /* Level until something rolls it: right is horizontal at every pitch. */
121
+ let rightY = 0;
122
+ let rightZ = lean * sinYaw;
123
+ let upX = -lean * sinYaw * sinPitch;
124
+ let upY = lean * cosPitch;
125
+ let upZ = lean * cosYaw * sinPitch;
126
+ /*
127
+ * Up is rolled about the view direction rather than fixed to world up.
128
+ *
129
+ * A camera that stays level while the surface under the subject banks makes
130
+ * the *world* look like it is tilting, which is exactly backwards: the
131
+ * player is the thing that tilted. Rolling with them is what makes a banked
132
+ * corner read as leaning into it.
133
+ *
134
+ * Both axes turn together, which is the same rotation the previous construction reached by
135
+ * rolling world up and letting the look-at re-derive right from it — and unlike that one it
136
+ * still turns something when the camera is aimed at a pole.
137
+ *
138
+ * **The sign is the shipped one and it is the opposite of a positive rotation about the view
139
+ * direction**, which is worth stating because the construction this replaced carried a
140
+ * comment naming the positive form while its code computed the negative one. Following the
141
+ * comment turned every rolled frame the wrong way by twice the angle: measured as 384,242
142
+ * pixels of 921,600 on the one demo scene that rolls, against a floor of 47.
143
+ */
144
+ if (this.roll !== 0) {
145
+ const cosRoll = Math.cos(this.roll);
146
+ const sinRoll = Math.sin(this.roll);
147
+ const turnedRightX = rightX * cosRoll + upX * sinRoll;
148
+ const turnedRightY = upY * sinRoll;
149
+ const turnedRightZ = rightZ * cosRoll + upZ * sinRoll;
150
+ upX = upX * cosRoll - rightX * sinRoll;
151
+ upY = upY * cosRoll;
152
+ upZ = upZ * cosRoll - rightZ * sinRoll;
153
+ rightX = turnedRightX;
154
+ rightY = turnedRightY;
155
+ rightZ = turnedRightZ;
156
+ }
157
+ const eyeX = this.position[0] ?? 0;
158
+ const eyeY = this.position[1] ?? 0;
159
+ const eyeZ = this.position[2] ?? 0;
160
+ const forwardX = this.forward[0] ?? 0;
161
+ const forwardY = this.forward[1] ?? 0;
162
+ const forwardZ = this.forward[2] ?? 0;
163
+ /* Column major, and the third row is the direction negated: a view looks down -Z. */
164
+ const view = this.view;
165
+ view[0] = rightX;
166
+ view[1] = upX;
167
+ view[2] = -forwardX;
168
+ view[3] = 0;
169
+ view[4] = rightY;
170
+ view[5] = upY;
171
+ view[6] = -forwardY;
172
+ view[7] = 0;
173
+ view[8] = rightZ;
174
+ view[9] = upZ;
175
+ view[10] = -forwardZ;
176
+ view[11] = 0;
177
+ view[12] = -(rightX * eyeX + rightY * eyeY + rightZ * eyeZ);
178
+ view[13] = -(upX * eyeX + upY * eyeY + upZ * eyeZ);
179
+ view[14] = forwardX * eyeX + forwardY * eyeY + forwardZ * eyeZ;
180
+ view[15] = 1;
181
+ /*
182
+ * A **vertical** field of view, which is a promise worth stating because a consumer built an
183
+ * interface on it.
184
+ *
185
+ * Because the vertical extent is what is held, a projection keeps its top and bottom when the
186
+ * aspect changes and trades only horizontal. So a tall export is exactly what a centred
187
+ * rectangle of a wider preview sees, and a frame drawn over that preview is arithmetic rather
188
+ * than an approximation: no second render, no two paths to compare.
189
+ *
190
+ * The corollary belongs beside it. Only a *centred* crop of a symmetric frustum is itself a
191
+ * symmetric frustum; an off-centre one is sheared, which `perspective` cannot produce. A
192
+ * consumer wanting an off-axis preview needs `mat4.frustum`, which gl-matrix already exports
193
+ * and this engine does not wrap. Panning the camera instead is a real pan and lands in an
194
+ * export as one.
195
+ */
196
+ mat4.perspective(this.projection, this.fovYDeg * DEG_TO_RAD, aspect, this.near, this.far);
197
+ mat4.multiply(this.viewProjection, this.projection, this.view);
198
+ mat4.invert(this.invViewProjection, this.viewProjection);
199
+ }
200
+ /**
201
+ * Take a view and a projection that were computed somewhere else.
202
+ *
203
+ * **Because an XR eye cannot be described by this class, and this file already says why.**
204
+ * `updateMatrices` derives the view from yaw and pitch and the projection from
205
+ * `mat4.perspective`, and the note above it records the corollary: *only a centred crop of a
206
+ * symmetric frustum is itself a symmetric frustum; an off-centre one is sheared, which
207
+ * `perspective` cannot produce.* A headset's eye projection is exactly that shear, off-axis by
208
+ * the distance from the pupil to the display's centre, and its view comes from a pose no pair of
209
+ * Euler angles was ever asked to describe.
210
+ *
211
+ * So a supplied view is adopted rather than configured. Everything downstream reads `view`,
212
+ * `projection`, `viewProjection` and `invViewProjection`, so frustum culling, picking, the sky
213
+ * and every pass that samples the inverse keep working with nothing changed.
214
+ *
215
+ * **`position` and `forward` are decomposed back out**, and that is not a convenience. A view
216
+ * matrix is the inverse of the camera's world transform, so the eye is `-Rᵀt` and the direction
217
+ * is the third row negated. A consumer reading `camera.position` to place a listener or to score
218
+ * a level of detail would otherwise get whatever the last non-XR frame left there, which is a
219
+ * defect that looks like an audio bug rather than a camera one.
220
+ *
221
+ * **`yaw`, `pitch` and `roll` are deliberately left alone**, and reading them after this is
222
+ * reading the last angles somebody set. A supplied rotation may be one no Euler triple
223
+ * describes without a convention this class does not own, and inventing one here would put a
224
+ * second answer to "where is the camera looking" beside `forward`, which is derived from the
225
+ * matrix and is always right.
226
+ *
227
+ * `near` and `far` are not read and not written: the supplied projection carries its own depth
228
+ * range, which the runtime chose.
229
+ */
230
+ adoptView(view, projection) {
231
+ mat4.copy(this.view, view);
232
+ mat4.copy(this.projection, projection);
233
+ mat4.multiply(this.viewProjection, this.projection, this.view);
234
+ mat4.invert(this.invViewProjection, this.viewProjection);
235
+ /*
236
+ * The rotation is the upper-left 3x3 and it is orthonormal, so its inverse is its transpose
237
+ * and the eye falls out without a general inverse. Reading the matrix rather than inverting it
238
+ * also keeps this allocation-free, which matters because it runs once per eye per frame.
239
+ */
240
+ const v = this.view;
241
+ const rx = v[0], ry = v[4], rz = v[8];
242
+ const ux = v[1], uy = v[5], uz = v[9];
243
+ const bx = v[2], by = v[6], bz = v[10];
244
+ const tx = v[12], ty = v[13], tz = v[14];
245
+ vec3.set(this.position, -(rx * tx + ux * ty + bx * tz), -(ry * tx + uy * ty + by * tz), -(rz * tx + uz * ty + bz * tz));
246
+ /* The third row of the rotation is the camera's backward axis, so forward is its negation. */
247
+ vec3.set(this.forward, -bx, -by, -bz);
248
+ }
249
+ /**
250
+ * Where a world point lands on the canvas, in CSS pixels, or false if it is behind.
251
+ *
252
+ * For attaching DOM to a place in the world: a focus ring on a card, a label on a
253
+ * marker. The caller passes the CSS box rather than the drawing buffer, because the
254
+ * answer is for the document and the document does not know the device pixel ratio.
255
+ *
256
+ * **False rather than a coordinate when w <= 1e-6.** The perspective divide by a negative
257
+ * w mirrors the point through the origin, so a thing behind the viewer reports a
258
+ * perfectly plausible position on the opposite side of the screen. A caller that
259
+ * placed an affordance there would be putting it on the wrong object, which is worse
260
+ * than putting it nowhere.
261
+ */
262
+ project(out, x, y, z, cssWidth, cssHeight) {
263
+ const m = this.viewProjection;
264
+ const w = m[3] * x + m[7] * y + m[11] * z + m[15];
265
+ if (w <= 1e-6)
266
+ return false;
267
+ projected[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
268
+ projected[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
269
+ out[0] = (projected[0] * 0.5 + 0.5) * cssWidth;
270
+ out[1] = (0.5 - projected[1] * 0.5) * cssHeight;
271
+ return true;
272
+ }
273
+ /**
274
+ * The ray a pixel looks along, in world space.
275
+ *
276
+ * Two points are unprojected rather than one, because a direction cannot be recovered
277
+ * from a single unprojected point without knowing where the eye is in the same space —
278
+ * and for an orthographic camera there is no single eye at all. Unprojecting both ends
279
+ * of the depth range and subtracting is correct for either projection, which is why it
280
+ * is written this way for a camera that is currently only perspective.
281
+ *
282
+ * `cssX`/`cssY` are in the canvas's CSS box, so a caller hands over
283
+ * `event.clientX - rect.left` and nothing has to know the device pixel ratio.
284
+ */
285
+ rayThrough(origin, direction, cssX, cssY, cssWidth, cssHeight) {
286
+ const ndcX = (cssX / cssWidth) * 2 - 1;
287
+ const ndcY = 1 - (cssY / cssHeight) * 2;
288
+ unproject(nearPoint, this.invViewProjection, ndcX, ndcY, -1);
289
+ unproject(farPoint, this.invViewProjection, ndcX, ndcY, 1);
290
+ origin[0] = nearPoint[0];
291
+ origin[1] = nearPoint[1];
292
+ origin[2] = nearPoint[2];
293
+ let dx = farPoint[0] - nearPoint[0];
294
+ let dy = farPoint[1] - nearPoint[1];
295
+ let dz = farPoint[2] - nearPoint[2];
296
+ const length = Math.hypot(dx, dy, dz) || 1;
297
+ dx /= length;
298
+ dy /= length;
299
+ dz /= length;
300
+ direction[0] = dx;
301
+ direction[1] = dy;
302
+ direction[2] = dz;
303
+ }
304
+ }
@@ -0,0 +1,63 @@
1
+ import type { FrameView } from './frameView.ts';
2
+ import type { Vec3 } from '../math/color.ts';
3
+ import type { Atmosphere } from './atmosphere.ts';
4
+ import type { SheetSpan } from './surfaceSheet.ts';
5
+ /**
6
+ * A surface lit by nearby water: the floor of a pool, the bottom of a flooded
7
+ * corridor, the underside of a bridge, an arch, a jetty, a cave mouth.
8
+ *
9
+ * The caller submits the lit surface and says which body of water is throwing the
10
+ * light. Everything else — where the light lands, how sharp the net is, how it
11
+ * moves — comes from the wave field in `shaders/gerstner.ts`, which is the same
12
+ * field the water surface itself is displaced by.
13
+ *
14
+ * Either side of the surface works. The overhead case came first and passed for
15
+ * the whole feature for a while, but a pool floor is the same optics and by far
16
+ * the more ordinary sight; the sheet simply lies under the water instead of over
17
+ * it.
18
+ */
19
+ export interface CausticSheet {
20
+ /** Cross-sections of the lit surface, in order. */
21
+ spans: readonly SheetSpan[];
22
+ /**
23
+ * Resting height of the water throwing the light.
24
+ *
25
+ * Per sheet rather than per draw, so one batch can carry surfaces above and
26
+ * below water at different heights — and so a caller cannot forget to keep the
27
+ * two in step, which is the whole contract of this feature: the pattern is only
28
+ * worth having because it is the crests the player can see.
29
+ */
30
+ waterY: number;
31
+ }
32
+ /**
33
+ * How far from the water the effect has died out.
34
+ *
35
+ * Not a fade for performance — a physical limit. The net spreads with distance and
36
+ * is gone by the time a soffit is a dozen metres up, or a pool that deep. A road
37
+ * bridge over a canal is around six, which is comfortably inside it; the fade
38
+ * starts at 45% of this so that distance is not already dimmed.
39
+ */
40
+ export declare const CAUSTICS_MAX_DROP_M = 12;
41
+ /**
42
+ * Cells across a lit surface.
43
+ *
44
+ * The pattern is a fragment computation, so this only has to be fine enough for
45
+ * the linear terms — distance fog and the edge fade — not for the waves.
46
+ */
47
+ export declare const CAUSTICS_CELL_M = 3;
48
+ export declare class CausticsRenderer {
49
+ private readonly program;
50
+ private readonly uniforms;
51
+ private readonly vao;
52
+ private readonly buffers;
53
+ private readonly vertexCount;
54
+ constructor(gl: WebGL2RenderingContext, sheets: readonly CausticSheet[]);
55
+ /**
56
+ * Add the water's light to an already-shaded scene. Draw after the opaque
57
+ * pass: this is light arriving at a surface, not the surface.
58
+ *
59
+ * @param strength scales the whole effect; 1 is the calibrated default.
60
+ */
61
+ draw(gl: WebGL2RenderingContext, camera: FrameView, timeSeconds: number, directionalDir: Vec3, directionalColor: Vec3, ambient: Vec3, atmosphere: Atmosphere, underwaterEnabled: boolean, windX?: number, windZ?: number, strength?: number): void;
62
+ dispose(gl: WebGL2RenderingContext): void;
63
+ }
@@ -0,0 +1,119 @@
1
+ import { compileProgram, uniformLocations } from './shader.js';
2
+ import { CAUSTICS_FRAG, CAUSTICS_VERT } from './shaders/caustics.js';
3
+ import { bindAtmosphere } from './atmosphere.js';
4
+ import { buildSheets } from './surfaceSheet.js';
5
+ import { seaStateForWind } from './seaState.js';
6
+ /**
7
+ * How far from the water the effect has died out.
8
+ *
9
+ * Not a fade for performance — a physical limit. The net spreads with distance and
10
+ * is gone by the time a soffit is a dozen metres up, or a pool that deep. A road
11
+ * bridge over a canal is around six, which is comfortably inside it; the fade
12
+ * starts at 45% of this so that distance is not already dimmed.
13
+ */
14
+ export const CAUSTICS_MAX_DROP_M = 12;
15
+ const MAX_DROP_M = CAUSTICS_MAX_DROP_M;
16
+ /**
17
+ * Cells across a lit surface.
18
+ *
19
+ * The pattern is a fragment computation, so this only has to be fine enough for
20
+ * the linear terms — distance fog and the edge fade — not for the waves.
21
+ */
22
+ export const CAUSTICS_CELL_M = 3;
23
+ const CELL_M = CAUSTICS_CELL_M;
24
+ /** Reused per frame: the colour of the light the water is reflecting. */
25
+ const scratchTint = new Float32Array(3);
26
+ export class CausticsRenderer {
27
+ program;
28
+ uniforms;
29
+ vao;
30
+ buffers = [];
31
+ vertexCount;
32
+ constructor(gl, sheets) {
33
+ this.program = compileProgram(gl, CAUSTICS_VERT, CAUSTICS_FRAG, 'caustics');
34
+ this.uniforms = uniformLocations(gl, this.program, 'causticsRenderer');
35
+ const mesh = buildSheets(sheets, CELL_M, (sheet, out) => {
36
+ out[0] = sheet.waterY;
37
+ out[1] = 0;
38
+ });
39
+ this.vertexCount = mesh.vertexCount;
40
+ const vao = gl.createVertexArray();
41
+ if (vao === null)
42
+ throw new Error('CausticsRenderer: createVertexArray failed');
43
+ this.vao = vao;
44
+ gl.bindVertexArray(vao);
45
+ const attach = (data, location, size) => {
46
+ const buffer = gl.createBuffer();
47
+ if (buffer === null)
48
+ throw new Error('CausticsRenderer: createBuffer failed');
49
+ this.buffers.push(buffer);
50
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
51
+ gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
52
+ gl.enableVertexAttribArray(location);
53
+ gl.vertexAttribPointer(location, size, gl.FLOAT, false, 0, 0);
54
+ };
55
+ attach(mesh.positions, 0, 3);
56
+ attach(mesh.locals, 1, 2);
57
+ attach(mesh.params, 2, 2);
58
+ gl.bindVertexArray(null);
59
+ }
60
+ /**
61
+ * Add the water's light to an already-shaded scene. Draw after the opaque
62
+ * pass: this is light arriving at a surface, not the surface.
63
+ *
64
+ * @param strength scales the whole effect; 1 is the calibrated default.
65
+ */
66
+ draw(gl, camera, timeSeconds, directionalDir, directionalColor, ambient, atmosphere, underwaterEnabled, windX = 0, windZ = 0, strength = 1) {
67
+ if (this.vertexCount === 0)
68
+ return;
69
+ const u = this.uniforms;
70
+ gl.useProgram(this.program);
71
+ gl.uniformMatrix4fv(u['uViewProj'] ?? null, false, camera.viewProjection);
72
+ gl.uniform3fv(u['uCameraPos'] ?? null, camera.position);
73
+ gl.uniform1f(u['uTime'] ?? null, timeSeconds);
74
+ gl.uniform1f(u['uMaxDrop'] ?? null, MAX_DROP_M);
75
+ gl.uniform1f(u['uStrength'] ?? null, strength);
76
+ gl.uniform3fv(u['uLightDir'] ?? null, directionalDir);
77
+ /*
78
+ * What the water is reflecting: the dominant source, plus a share of the
79
+ * ambient standing in for the sky itself.
80
+ *
81
+ * The ambient term is not decoration. Under a bridge at night the sun
82
+ * contributes nothing, and a caustic that switched off with the sun would
83
+ * take the best image in the game with it — while skylight on water is a real
84
+ * source, and it is what a phone camera sees under a bridge after dusk.
85
+ */
86
+ scratchTint[0] = (directionalColor[0] ?? 0) * 0.85 + (ambient[0] ?? 0) * 1.5;
87
+ scratchTint[1] = (directionalColor[1] ?? 0) * 0.85 + (ambient[1] ?? 0) * 1.5;
88
+ scratchTint[2] = (directionalColor[2] ?? 0) * 0.85 + (ambient[2] ?? 0) * 1.5;
89
+ gl.uniform3fv(u['uTint'] ?? null, scratchTint);
90
+ // The same sea state, from the same wind, as every other body of water.
91
+ const windSpeed = Math.hypot(windX, windZ);
92
+ const sea = seaStateForWind(windSpeed);
93
+ const inv = windSpeed > 1e-5 ? 1 / windSpeed : 0;
94
+ gl.uniform2f(u['uWindDir'] ?? null, inv === 0 ? 1 : windX * inv, inv === 0 ? 0 : windZ * inv);
95
+ gl.uniform1f(u['uWaveGain'] ?? null, sea.steepness);
96
+ bindAtmosphere(gl, u, atmosphere, camera.position[1] ?? 0, underwaterEnabled);
97
+ gl.enable(gl.BLEND);
98
+ gl.blendFunc(gl.ONE, gl.ONE);
99
+ /*
100
+ * No depth write, but depth *testing* stays on: the sheet sits a couple of
101
+ * centimetres under the surface it lights, so geometry in front of it — the
102
+ * character, a lamp, the bridge's own parapet — still occludes the light.
103
+ */
104
+ gl.depthMask(false);
105
+ gl.disable(gl.CULL_FACE);
106
+ gl.bindVertexArray(this.vao);
107
+ gl.drawArrays(gl.TRIANGLES, 0, this.vertexCount);
108
+ gl.bindVertexArray(null);
109
+ gl.enable(gl.CULL_FACE);
110
+ gl.depthMask(true);
111
+ gl.disable(gl.BLEND);
112
+ }
113
+ dispose(gl) {
114
+ for (const buffer of this.buffers)
115
+ gl.deleteBuffer(buffer);
116
+ gl.deleteVertexArray(this.vao);
117
+ gl.deleteProgram(this.program);
118
+ }
119
+ }
@@ -0,0 +1,102 @@
1
+ import type { ColliderSet } from '@driftengine/physics';
2
+ import { Camera } from './camera.ts';
3
+ import type { ShotParams } from './shotPlacement.ts';
4
+ /**
5
+ * A camera that can be *cut*, for replays and cinematics.
6
+ *
7
+ * The gameplay camera has one job — keep the player able to read where they are
8
+ * about to land — so it is a single smoothed rig that never surprises anyone. A
9
+ * replay camera has the opposite job: it is a director, and its whole
10
+ * vocabulary is choosing a new angle at the right instant.
11
+ *
12
+ * Generic on purpose. A shot here is a placement rule and a subject; which shot
13
+ * suits a grapple, and when to cut, are the game's business. Nothing in this
14
+ * file knows what a character is. *Where* a shot puts the camera lives in
15
+ * `shotPlacement.ts`; this is the rig that moves onto it.
16
+ *
17
+ * The two hard requirements pull against each other. A **cut is instantaneous**
18
+ * — a cut that eases is a swoop, and it destroys the sync with the beat that an
19
+ * edit is built on. Motion **within** a shot is smoothed, because footage that
20
+ * steps judders exactly when somebody is watching it frame by frame. So the
21
+ * smoothing state is reset on a cut rather than smoothed through it.
22
+ */
23
+ export type { ShotKind, ShotParams } from './shotPlacement.ts';
24
+ export declare class CinematicCamera {
25
+ private readonly colliders;
26
+ readonly camera: Camera;
27
+ private shot;
28
+ private shotStartSec;
29
+ private nowSec;
30
+ /**
31
+ * Where the camera wants to be, and where it is looking.
32
+ *
33
+ * Springs rather than first-order lags, which is the fix for *"the transitions
34
+ * between them that it's like straight"*. A lag's speed is proportional to the
35
+ * error it has already built, so the only way it can travel at the subject's
36
+ * speed is to accumulate `speed / lambda` metres of error and hold it: a shot
37
+ * asking for a 7 m boom was measured sitting at 9.219 m behind a 14 m/s
38
+ * character, and re-accumulating that error as a straight slide after every cut —
39
+ * 7.000 → 8.317 → 9.213 over the second after it, peaking on frame 2 and
40
+ * decaying from there. A spring carries a velocity, so it rides along with a
41
+ * target that is moving instead of trailing it, and it accelerates into and
42
+ * settles out of the moves that remain.
43
+ */
44
+ private readonly followX;
45
+ private readonly followY;
46
+ private readonly followZ;
47
+ private readonly aimYaw;
48
+ private readonly aimPitch;
49
+ /** Place the rig outright on the next update, rather than moving it there. */
50
+ private fresh;
51
+ /**
52
+ * Whether that placement may keep travelling at the target's speed.
53
+ *
54
+ * The difference between the two ways a rig is placed, and only the caller
55
+ * knows which happened. A **cut** changes the shot while the subject carries on
56
+ * as it was, so the speed measured across the frame is real and the new shot
57
+ * should open already moving with it — otherwise every cut opens with the rig
58
+ * accelerating from a standstill, which is the slide this replaced. A **snap**
59
+ * is for a subject that teleported: there is no meaningful speed across that
60
+ * frame, and a rig that inherited one would coast off after the character's
61
+ * ghost.
62
+ */
63
+ private freshKeepsSpeed;
64
+ /** The arm out to the camera, and its speed limits. See `boom.ts`. */
65
+ private readonly boom;
66
+ /** Frozen for `flyby`, which watches from where it was placed. */
67
+ private readonly station;
68
+ private readonly pose;
69
+ private readonly previousPose;
70
+ private hasPreviousPose;
71
+ private readonly placement;
72
+ private readonly previousPlacement;
73
+ constructor(colliders: ColliderSet);
74
+ /**
75
+ * Switch shots, now.
76
+ *
77
+ * `atSec` is the shot's own start time, used by anything that animates within
78
+ * a shot — an orbit's angle, for instance — so a shot looks the same whenever
79
+ * in the run it is used.
80
+ */
81
+ cut(shot: ShotParams, atSec: number): void;
82
+ /**
83
+ * Drop the smoothing history, keeping the shot.
84
+ *
85
+ * For a subject that *teleports* — a character who died and is back on a
86
+ * checkpoint, or a scrub bar dropped somewhere else in the run. Smoothing
87
+ * across that is a camera flying the length of the route with nothing in
88
+ * frame, measured at 124 m inside a single shot, and it looks far more like a
89
+ * bug than a cut does.
90
+ *
91
+ * A threshold inside `update` would be the wrong place for this. Only the
92
+ * caller can tell a teleport from a legitimately fast frame: a replay catching
93
+ * up after a freeze advances several simulation ticks in one frame, and a
94
+ * browser that dropped a frame advances a dozen. That is also why this is not
95
+ * `cut` — the two differ over whether the speed across the frame means
96
+ * anything, and the caller is the only one who knows.
97
+ */
98
+ snap(): void;
99
+ /** Seconds since the current shot began. */
100
+ get shotAgeSec(): number;
101
+ update(frameDt: number, subjectX: number, subjectY: number, subjectZ: number, subjectYaw: number): void;
102
+ }