@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,179 @@
1
+ import { AO_BLUR_FRAG, AO_FRAG } from './shaders/ambientOcclusion.js';
2
+ import { FULLSCREEN_VERT } from './shaders/fullscreen.js';
3
+ import { compileProgram, uniformLocations } from './shader.js';
4
+ /**
5
+ * The screen-space ambient occlusion pass: estimate from depth, then blur.
6
+ *
7
+ * Its own module rather than more of `SceneTarget`, because it is its own responsibility —
8
+ * that class owns where the frame lands and how it reaches the canvas, and this owns one
9
+ * effect's targets and programs. The composite pass consumes the texture this returns and
10
+ * knows nothing else about it.
11
+ *
12
+ * **Two single-channel targets, ping-ponged.** The estimate lands in one, the horizontal
13
+ * blur writes the other, the vertical blur writes back into the first, and that one is
14
+ * returned. `R8` rather than `RGBA8`: occlusion is one number, and three channels of padding
15
+ * over a 4K frame is 24 MB of bandwidth per pass to carry nothing.
16
+ */
17
+ export class AmbientOcclusionPass {
18
+ gl;
19
+ width = 0;
20
+ height = 0;
21
+ estimate = null;
22
+ scratch = null;
23
+ estimateFramebuffer = null;
24
+ scratchFramebuffer = null;
25
+ /**
26
+ * Set once if a single-channel target will not complete, after which this pass does
27
+ * nothing and says so once.
28
+ *
29
+ * `R8` is colour-renderable in WebGL2 by specification, so this is not expected. It is here
30
+ * because the alternative to an honest "off" is a frame multiplied by a texture that was
31
+ * never written, and the last time an effect in this renderer sampled a target nobody had
32
+ * filled, the failure presented as the driver being at fault. See `sceneTarget.ts`.
33
+ */
34
+ unavailable = false;
35
+ estimateProgram;
36
+ estimateUniforms;
37
+ blurProgram;
38
+ blurUniforms;
39
+ vao;
40
+ /** Scratch for the blur direction, so a per-frame pass allocates nothing. */
41
+ step = new Float32Array(2);
42
+ /** Scratch for the four inverse-projection terms the blur linearises depth with. */
43
+ depthToViewZ = new Float32Array(4);
44
+ constructor(gl) {
45
+ this.gl = gl;
46
+ this.estimateProgram = compileProgram(gl, FULLSCREEN_VERT, AO_FRAG, 'ao');
47
+ this.estimateUniforms = uniformLocations(gl, this.estimateProgram, 'ao');
48
+ this.blurProgram = compileProgram(gl, FULLSCREEN_VERT, AO_BLUR_FRAG, 'aoBlur');
49
+ this.blurUniforms = uniformLocations(gl, this.blurProgram, 'aoBlur');
50
+ const vao = gl.createVertexArray();
51
+ if (vao === null)
52
+ throw new Error('AmbientOcclusionPass: createVertexArray failed');
53
+ this.vao = vao;
54
+ }
55
+ ensureSize(width, height) {
56
+ if (this.unavailable)
57
+ return false;
58
+ if (this.width === width && this.height === height && this.estimate !== null)
59
+ return true;
60
+ const { gl } = this;
61
+ this.width = width;
62
+ this.height = height;
63
+ this.estimate = this.allocate(this.estimate, width, height);
64
+ this.scratch = this.allocate(this.scratch, width, height);
65
+ if (this.estimateFramebuffer === null)
66
+ this.estimateFramebuffer = gl.createFramebuffer();
67
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.estimateFramebuffer);
68
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.estimate, 0);
69
+ const estimateReady = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;
70
+ if (this.scratchFramebuffer === null)
71
+ this.scratchFramebuffer = gl.createFramebuffer();
72
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.scratchFramebuffer);
73
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.scratch, 0);
74
+ const scratchReady = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;
75
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
76
+ gl.bindTexture(gl.TEXTURE_2D, null);
77
+ if (!estimateReady || !scratchReady) {
78
+ this.unavailable = true;
79
+ console.warn('AmbientOcclusionPass: this driver will not render to a single-channel target, so ' +
80
+ 'ambient occlusion is off. The frame itself is unaffected.');
81
+ return false;
82
+ }
83
+ return true;
84
+ }
85
+ allocate(existing, width, height) {
86
+ const { gl } = this;
87
+ const texture = existing ?? gl.createTexture();
88
+ gl.bindTexture(gl.TEXTURE_2D, texture);
89
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.R8, width, height, 0, gl.RED, gl.UNSIGNED_BYTE, null);
90
+ /* NEAREST, because every read of this is at a texel centre: the blur steps whole pixels
91
+ and the composite reads the pixel it is shading. Linear would only cost filtering. */
92
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
93
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
94
+ /* Clamped, so a tap past the edge repeats the edge rather than wrapping the opposite
95
+ side of the frame into a corner. */
96
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
97
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
98
+ return texture;
99
+ }
100
+ /**
101
+ * Estimate occlusion from the frame's depth and blur it. Returns the texture to multiply
102
+ * by, or null if this pass could not run, which the caller must read as "no occlusion"
103
+ * rather than as black.
104
+ *
105
+ * `invProjection` is column-major, as `gl-matrix` produces it.
106
+ */
107
+ run(depth, width, height, radius, projScale, invProjection) {
108
+ if (!this.ensureSize(width, height))
109
+ return null;
110
+ const { gl } = this;
111
+ /* One triangle over a target with no depth attachment. Anything inherited from the scene
112
+ pass would be tested against a buffer that is not there. */
113
+ gl.disable(gl.DEPTH_TEST);
114
+ gl.disable(gl.BLEND);
115
+ gl.disable(gl.CULL_FACE);
116
+ gl.depthMask(false);
117
+ gl.bindVertexArray(this.vao);
118
+ gl.viewport(0, 0, width, height);
119
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.estimateFramebuffer);
120
+ gl.useProgram(this.estimateProgram);
121
+ gl.activeTexture(gl.TEXTURE0);
122
+ gl.bindTexture(gl.TEXTURE_2D, depth);
123
+ gl.uniform1i(this.estimateUniforms['uDepth'] ?? null, 0);
124
+ gl.uniform2fv(this.estimateUniforms['uProjScale'] ?? null, projScale);
125
+ gl.uniform1f(this.estimateUniforms['uRadius'] ?? null, radius);
126
+ gl.uniformMatrix4fv(this.estimateUniforms['uInvProjection'] ?? null, false, invProjection);
127
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
128
+ /*
129
+ * The four terms that carry a depth back to metres, read out of the inverse projection.
130
+ * Column major, so `[2][2]` is element 10 and `[3][3]` is element 15.
131
+ */
132
+ this.depthToViewZ[0] = invProjection[10] ?? 0;
133
+ this.depthToViewZ[1] = invProjection[14] ?? 0;
134
+ this.depthToViewZ[2] = invProjection[11] ?? 0;
135
+ this.depthToViewZ[3] = invProjection[15] ?? 1;
136
+ gl.useProgram(this.blurProgram);
137
+ gl.uniform1i(this.blurUniforms['uAo'] ?? null, 0);
138
+ gl.uniform1i(this.blurUniforms['uDepth'] ?? null, 1);
139
+ gl.uniform4fv(this.blurUniforms['uDepthToViewZ'] ?? null, this.depthToViewZ);
140
+ gl.activeTexture(gl.TEXTURE1);
141
+ gl.bindTexture(gl.TEXTURE_2D, depth);
142
+ /* Across, into the scratch target. */
143
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.scratchFramebuffer);
144
+ gl.activeTexture(gl.TEXTURE0);
145
+ gl.bindTexture(gl.TEXTURE_2D, this.estimate);
146
+ this.step[0] = 1 / width;
147
+ this.step[1] = 0;
148
+ gl.uniform2fv(this.blurUniforms['uStep'] ?? null, this.step);
149
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
150
+ /* And down, back into the estimate, which is the texture handed out. */
151
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.estimateFramebuffer);
152
+ gl.bindTexture(gl.TEXTURE_2D, this.scratch);
153
+ this.step[0] = 0;
154
+ this.step[1] = 1 / height;
155
+ gl.uniform2fv(this.blurUniforms['uStep'] ?? null, this.step);
156
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
157
+ gl.bindVertexArray(null);
158
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
159
+ return this.estimate;
160
+ }
161
+ dispose() {
162
+ const { gl } = this;
163
+ if (this.estimateFramebuffer !== null)
164
+ gl.deleteFramebuffer(this.estimateFramebuffer);
165
+ if (this.scratchFramebuffer !== null)
166
+ gl.deleteFramebuffer(this.scratchFramebuffer);
167
+ if (this.estimate !== null)
168
+ gl.deleteTexture(this.estimate);
169
+ if (this.scratch !== null)
170
+ gl.deleteTexture(this.scratch);
171
+ gl.deleteProgram(this.estimateProgram);
172
+ gl.deleteProgram(this.blurProgram);
173
+ gl.deleteVertexArray(this.vao);
174
+ this.estimateFramebuffer = null;
175
+ this.scratchFramebuffer = null;
176
+ this.estimate = null;
177
+ this.scratch = null;
178
+ }
179
+ }
@@ -0,0 +1,116 @@
1
+ /** Rectangular area lights: what a caller declares, and the arrays a shader wants. */
2
+ /**
3
+ * How many rectangles the lit pass shades against at once.
4
+ *
5
+ * **Four, because a rectangle is a fixture rather than a lamp.** A window, a softbox, a lit panel:
6
+ * a scene with more than a handful of these is a scene that wants them baked into an environment,
7
+ * which is what the prefilter and the loader are for. Raising it is a uniform-array size and an
8
+ * iteration of the loop, exactly as `MAX_POINT_LIGHTS` is.
9
+ */
10
+ export declare const MAX_AREA_LIGHTS = 4;
11
+ /**
12
+ * One rectangular emitter, as a consumer describes it.
13
+ *
14
+ * Positions, colours and sizes, and nothing that means anything in one game — the rule
15
+ * `AGENTS.md` opens with. `right` and `up` are the rectangle's own in-plane axes, and their cross
16
+ * product is the direction it emits.
17
+ */
18
+ export interface AreaLightSource {
19
+ x: number;
20
+ y: number;
21
+ z: number;
22
+ r: number;
23
+ g: number;
24
+ b: number;
25
+ /** In-plane axes. Normalised on the way in, because the form factor assumes unit length. */
26
+ rightX: number;
27
+ rightY: number;
28
+ rightZ: number;
29
+ upX: number;
30
+ upY: number;
31
+ upZ: number;
32
+ /** Half extents along `right` and `up`, in metres. */
33
+ halfWidth: number;
34
+ halfHeight: number;
35
+ /**
36
+ * Whether the rectangle emits from both faces. Default false.
37
+ *
38
+ * A window is one-sided and a hanging panel is two-sided, and the difference is visible rather
39
+ * than pedantic: a one-sided light must contribute nothing to a surface behind it, or the wall
40
+ * it is set into is lit by it and reads as glowing.
41
+ */
42
+ twoSided?: boolean;
43
+ /**
44
+ * Whether this rectangle is worth a shadow layer at all. **Default false**, which is the
45
+ * opposite of what a point light's identically named field defaults to.
46
+ *
47
+ * A point light has cast since before there was a budget to ration, so `true` is what its
48
+ * existing callers already rely on. An area light shipped in 3.2.0 with no occlusion at all —
49
+ * `AGENTS.md` calls that a bug rather than a limitation, and it is the row this field closes —
50
+ * so every scene that already declares one was authored against a rectangle that lights
51
+ * through walls. Defaulting to `true` here would hand each of them two octahedral layers,
52
+ * 8.39 MB, and a six-face bake over the static world, for a change in the picture nobody asked
53
+ * for. `RenderQuality`'s own rule is that a feature's default reproduces today's frame.
54
+ *
55
+ * **It also rides `RenderQuality.pointShadows`**, because an area light's occlusion is read out
56
+ * of the same array texture a point light's is. WebGL2 guarantees sixteen texture units and the
57
+ * lit pass binds sixteen, so a seventeenth sampler is not available to declare — see
58
+ * `FlatShaderOptions.environmentProbe` for the same wall reached from the other side. With that
59
+ * flag off there is no array to bake into, and the renderer says so once by name rather than
60
+ * quietly drawing an unoccluded rectangle.
61
+ */
62
+ castsShadow?: boolean;
63
+ /**
64
+ * How far from the rectangle occlusion is tracked, in metres: the shadow map's far plane.
65
+ *
66
+ * **Required when `castsShadow` is true, and deliberately not defaulted.** A point light's map
67
+ * gets its far plane from `radius`, the distance at which the light itself reaches zero — a
68
+ * rectangle has no such distance, because its falloff is the solid angle it subtends and that is
69
+ * never exactly zero. So the number is a statement about how much of the scene this fixture is
70
+ * responsible for occluding, which is a decision about the content: a panel in a corridor wants
71
+ * the corridor's length and a sky panel over a courtyard wants the courtyard's.
72
+ *
73
+ * Guessing it would produce one of two failures, both of which read as a renderer bug rather
74
+ * than a missing field: too short and the shadow stops in a straight line partway across the
75
+ * floor, too long and the depth precision spent on the near metres is what a fixture actually
76
+ * needed. A rectangle that declares it casts and names no range is refused with a warning
77
+ * naming the field.
78
+ */
79
+ shadowRange?: number;
80
+ /**
81
+ * Where casting begins, in metres from the rectangle's plane. Defaults to `POINT_SHADOW_NEAR`.
82
+ *
83
+ * The same knob a point light carries and for the same reason: a fixture's own housing sits
84
+ * within centimetres of the emitter, occludes an enormous solid angle from it, and throws that
85
+ * across the floor as a hard square much larger than the housing. Keep it small — it clips
86
+ * every caster, not just the fixture.
87
+ */
88
+ shadowNear?: number;
89
+ }
90
+ /** The five arrays the shader declares, filled once a frame from whatever a caller supplied. */
91
+ export interface AreaLightBuffer {
92
+ count: number;
93
+ readonly positions: Float32Array;
94
+ readonly colors: Float32Array;
95
+ readonly right: Float32Array;
96
+ readonly up: Float32Array;
97
+ readonly sizes: Float32Array;
98
+ readonly twoSided: Float32Array;
99
+ }
100
+ export declare function createAreaLightBuffer(capacity?: number): AreaLightBuffer;
101
+ /**
102
+ * Fill the buffer from a caller's list, normalising the axes and orthogonalising them.
103
+ *
104
+ * **Both corrections are here rather than trusted**, and neither is defensive tidying:
105
+ *
106
+ * - The form factor treats `right` and `up` as unit vectors, so a caller's un-normalised axis
107
+ * scales the rectangle it describes. That is a light of the wrong *size*, which reads as the
108
+ * half extents having been set wrong.
109
+ * - The two axes are made perpendicular, because a rectangle whose axes are not describes a
110
+ * parallelogram — and the form factor is defined for the polygon its four corners make, so what
111
+ * comes out is the irradiance of a shape the caller did not ask for and cannot see the outline
112
+ * of.
113
+ *
114
+ * Allocation-free: it fills a target the caller owns, because this runs per frame.
115
+ */
116
+ export declare function selectAreaLights(lights: readonly AreaLightSource[], out: AreaLightBuffer): AreaLightBuffer;
@@ -0,0 +1,91 @@
1
+ /** Rectangular area lights: what a caller declares, and the arrays a shader wants. */
2
+ /**
3
+ * How many rectangles the lit pass shades against at once.
4
+ *
5
+ * **Four, because a rectangle is a fixture rather than a lamp.** A window, a softbox, a lit panel:
6
+ * a scene with more than a handful of these is a scene that wants them baked into an environment,
7
+ * which is what the prefilter and the loader are for. Raising it is a uniform-array size and an
8
+ * iteration of the loop, exactly as `MAX_POINT_LIGHTS` is.
9
+ */
10
+ export const MAX_AREA_LIGHTS = 4;
11
+ export function createAreaLightBuffer(capacity = MAX_AREA_LIGHTS) {
12
+ return {
13
+ count: 0,
14
+ positions: new Float32Array(capacity * 3),
15
+ colors: new Float32Array(capacity * 3),
16
+ right: new Float32Array(capacity * 3),
17
+ up: new Float32Array(capacity * 3),
18
+ sizes: new Float32Array(capacity * 2),
19
+ twoSided: new Float32Array(capacity),
20
+ };
21
+ }
22
+ /**
23
+ * Fill the buffer from a caller's list, normalising the axes and orthogonalising them.
24
+ *
25
+ * **Both corrections are here rather than trusted**, and neither is defensive tidying:
26
+ *
27
+ * - The form factor treats `right` and `up` as unit vectors, so a caller's un-normalised axis
28
+ * scales the rectangle it describes. That is a light of the wrong *size*, which reads as the
29
+ * half extents having been set wrong.
30
+ * - The two axes are made perpendicular, because a rectangle whose axes are not describes a
31
+ * parallelogram — and the form factor is defined for the polygon its four corners make, so what
32
+ * comes out is the irradiance of a shape the caller did not ask for and cannot see the outline
33
+ * of.
34
+ *
35
+ * Allocation-free: it fills a target the caller owns, because this runs per frame.
36
+ */
37
+ export function selectAreaLights(lights, out) {
38
+ const capacity = Math.floor(out.sizes.length / 2);
39
+ const count = Math.min(lights.length, capacity);
40
+ out.count = count;
41
+ for (let slot = 0; slot < count; slot++) {
42
+ const light = lights[slot];
43
+ if (light === undefined)
44
+ continue;
45
+ out.positions[slot * 3] = light.x;
46
+ out.positions[slot * 3 + 1] = light.y;
47
+ out.positions[slot * 3 + 2] = light.z;
48
+ out.colors[slot * 3] = light.r;
49
+ out.colors[slot * 3 + 1] = light.g;
50
+ out.colors[slot * 3 + 2] = light.b;
51
+ const rx = light.rightX;
52
+ const ry = light.rightY;
53
+ const rz = light.rightZ;
54
+ const rLen = Math.sqrt(rx * rx + ry * ry + rz * rz) || 1;
55
+ const nrx = rx / rLen;
56
+ const nry = ry / rLen;
57
+ const nrz = rz / rLen;
58
+ /* Gram-Schmidt: up loses whatever component it shared with right, then is normalised. */
59
+ const ux = light.upX;
60
+ const uy = light.upY;
61
+ const uz = light.upZ;
62
+ const along = ux * nrx + uy * nry + uz * nrz;
63
+ let oux = ux - nrx * along;
64
+ let ouy = uy - nry * along;
65
+ let ouz = uz - nrz * along;
66
+ const uLen = Math.sqrt(oux * oux + ouy * ouy + ouz * ouz);
67
+ if (uLen < 1e-6) {
68
+ /*
69
+ * Parallel axes describe no rectangle at all. Any perpendicular will do rather than leaving
70
+ * a zero vector, which would make every corner the same point and every form factor NaN —
71
+ * a light that blanks whatever it touches, from two numbers a caller got wrong.
72
+ */
73
+ const fallback = Math.abs(nry) < 0.9 ? [0, 1, 0] : [1, 0, 0];
74
+ oux = (fallback[1] ?? 0) * nrz - (fallback[2] ?? 0) * nry;
75
+ ouy = (fallback[2] ?? 0) * nrx - (fallback[0] ?? 0) * nrz;
76
+ ouz = (fallback[0] ?? 0) * nry - (fallback[1] ?? 0) * nrx;
77
+ }
78
+ const finalLen = Math.sqrt(oux * oux + ouy * ouy + ouz * ouz) || 1;
79
+ out.right[slot * 3] = nrx;
80
+ out.right[slot * 3 + 1] = nry;
81
+ out.right[slot * 3 + 2] = nrz;
82
+ out.up[slot * 3] = oux / finalLen;
83
+ out.up[slot * 3 + 1] = ouy / finalLen;
84
+ out.up[slot * 3 + 2] = ouz / finalLen;
85
+ /* Never zero: a rectangle with no extent has no solid angle and no light. */
86
+ out.sizes[slot * 2] = Math.max(1e-4, light.halfWidth);
87
+ out.sizes[slot * 2 + 1] = Math.max(1e-4, light.halfHeight);
88
+ out.twoSided[slot] = light.twoSided === true ? 1 : 0;
89
+ }
90
+ return out;
91
+ }
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Occlusion for a rectangular area light: which layers it holds, when they re-bake, and what the
3
+ * shader is told about them.
4
+ *
5
+ * **An area light's shadow is a point light's shadow rendered from the rectangle's centre**, and
6
+ * the whole of what makes it an *area* shadow is where the penumbra's width comes from. A point
7
+ * light hands the filter one number, `sourceRadius`, and gets a round penumbra. A rectangle hands
8
+ * it two half extents and the filter opens along the rectangle's own axes, so a long cable of
9
+ * bulbs — the case this was reported for — throws one broad shadow that is soft along the cable
10
+ * and tight across it, rather than nine overlapping hard ones that pile up where they cross.
11
+ * That part is `areaShadow()` in `shaders/flat/pointShadow.ts`; this file is the storage and the
12
+ * scheduling in front of it.
13
+ *
14
+ * **Rendering from the centre is an approximation and it is the one this technique is.** The
15
+ * correct answer integrates visibility over the rectangle, which is many shadow maps or a ray
16
+ * query; one map from the centre plus a filter whose width is the emitter's own extent is the
17
+ * standard percentage-closer soft shadow, and what it gets wrong is contact: a caster touching a
18
+ * surface has an umbra there whatever the source's size, and the widened filter still softens it
19
+ * slightly. **What would make it visibly wrong** is a rectangle much wider than its distance to
20
+ * the caster, where different points on the emitter see genuinely different silhouettes — a
21
+ * ceiling-wide panel a hand's width above a table.
22
+ *
23
+ * **Why these layers are dedicated rather than pooled**, which is the one decision here that
24
+ * reverses a note written before it: `POINT_SHADOW_POOL` rations layers because up to fifty lamps
25
+ * compete for twelve, and the eviction rule is what keeps that from costing 327 MB. At most
26
+ * `MAX_AREA_LIGHTS` rectangles exist and every one of them is shaded, so there is nothing to
27
+ * ration — and `preamble.ts` already states the rule that matters here: a shadow budget below the
28
+ * shading budget means some lights illuminate without occluding and *which* ones changes as the
29
+ * camera moves, which reads as shadows switching on and off. Matching the two budgets makes that
30
+ * impossible rather than rare. So the layers are sized from how many rectangles a world says will
31
+ * cast, exactly as `PointShadowArray` sizes itself from the world's light count rather than from
32
+ * the maximum.
33
+ *
34
+ * **What that costs, arithmetic rather than estimate:** an octahedral layer is
35
+ * `OCTAHEDRAL_EDGE` squared at four bytes, 4.19 MB, and a casting rectangle takes two — one for
36
+ * the static world and one for the movers. 8.39 MB each, 33.6 MB if a world declares the full
37
+ * four, nothing at all for a world whose rectangles do not cast. The point pool at its own
38
+ * maximum is 58.7 MB for comparison.
39
+ *
40
+ * **Why two layers and not one.** A single layer would have to hold the static world and the
41
+ * movers together, so a person walking under the rectangle would re-bake six passes over the whole
42
+ * static scene every frame — `pointShadowBudget.ts` measured that shape at 89 ms and 99 ms in two
43
+ * consecutive frames against an 8.3 ms budget, and it is the reason point lights split the two in
44
+ * the first place. Movers alone are a handful of meshes, so the live layer is affordable every
45
+ * frame and the static one is baked once for a fixture that never moves.
46
+ */
47
+ import type { AreaLightSource } from './areaLights.ts';
48
+ import { type BakeScratch } from './pointShadowBudget.ts';
49
+ /** A static layer and a live one. See the header for why it is not one. */
50
+ export declare const LAYERS_PER_AREA_LIGHT = 2;
51
+ /**
52
+ * How many layers of the shared array a world's rectangles will take.
53
+ *
54
+ * Two per rectangle that declares it casts and names a range, and none for one that does not. A
55
+ * rectangle past `MAX_AREA_LIGHTS` is not shaded, so it gets no layer either — a layer for a light
56
+ * the loop never reaches is storage nothing can read.
57
+ */
58
+ export declare function areaShadowLayerCount(lights: readonly AreaLightSource[]): number;
59
+ /**
60
+ * Where the area layers begin, given how many point lights the world has.
61
+ *
62
+ * **One function rather than the same expression written in three files**, which is the mistake
63
+ * `pointShadowImage.ts` records at `DEFAULT_SOURCE_RADIUS`: the array sizes itself, this set hands
64
+ * out indices, and the two disagreeing by one would have every rectangle sampling a lamp's map.
65
+ * Both call this.
66
+ */
67
+ export declare function firstAreaShadowLayer(pointLightCount: number): number;
68
+ /**
69
+ * The range a rectangle will actually cast over, or 0 for one that will not.
70
+ *
71
+ * **A declared `castsShadow` with no `shadowRange` counts as not casting**, because there is no
72
+ * honest far plane to invent for it — see the field. The renderer says so once by name; this
73
+ * function is only the predicate, and it is shared so the layer count and the map assignment
74
+ * cannot answer it differently.
75
+ */
76
+ export declare function castingRange(light: AreaLightSource | undefined): number;
77
+ /** What the shader is told about each rectangle's occlusion, filled once a frame. */
78
+ export interface ResolvedAreaShadows {
79
+ /** Which array layer holds this rectangle's static image, or -1 for none. */
80
+ readonly layer: Int32Array;
81
+ readonly far: Float32Array;
82
+ readonly near: Float32Array;
83
+ /** How present the image is, 0 to 1, so a fresh bake arrives rather than appears. */
84
+ readonly weight: Float32Array;
85
+ /** The same four for the layer holding movers only. */
86
+ readonly liveLayer: Int32Array;
87
+ readonly liveFar: Float32Array;
88
+ readonly liveNear: Float32Array;
89
+ readonly liveWeight: Float32Array;
90
+ }
91
+ export declare function createResolvedAreaShadows(slots?: number): ResolvedAreaShadows;
92
+ /**
93
+ * What a map must answer for this set to schedule and publish it.
94
+ *
95
+ * Structurally exactly what `PointShadowMap` and `GpuPointShadowMap` already are, which is the
96
+ * point: an area light's map is a point light's map on a layer of the same array, so neither
97
+ * backend needs a second class and neither can drift from the other about staleness, arrival or
98
+ * resumption. All of that lives in `PointShadowImage`, inside both of them.
99
+ */
100
+ export interface AreaShadowMap {
101
+ readonly layer: number;
102
+ readonly far: number;
103
+ readonly near: number;
104
+ readonly hasBaked: boolean;
105
+ readonly presence: number;
106
+ matchesSource(x: number, y: number, z: number, range: number, near: number, sourceRadius: number, tolerance: number): boolean;
107
+ advance(dt: number): void;
108
+ forget(): void;
109
+ }
110
+ /** The one thing this set cannot do itself: put faces of a world into a layer. */
111
+ export type BakeAreaFaces<M> = (map: M, light: AreaLightSource, range: number, near: number, casters: unknown, maxFaces: number) => number;
112
+ /**
113
+ * The maps a world's casting rectangles hold, and when each of them re-bakes.
114
+ *
115
+ * Constructed with a factory rather than a device, for the reason `PointShadowSystem` is: every
116
+ * decision in here is about scheduling and none of it is about a texture, so both backends share
117
+ * this file and supply one callback each.
118
+ */
119
+ export declare class AreaShadowSet<M extends AreaShadowMap> {
120
+ private readonly createMap;
121
+ private readonly releaseMap;
122
+ /** Indexed by area-light slot. `undefined` where that slot does not cast. */
123
+ private readonly statics;
124
+ private readonly lives;
125
+ /** What each slot was prepared for, so a changed declaration rebuilds rather than lies. */
126
+ private readonly ranges;
127
+ private firstLayer;
128
+ constructor(createMap: (layer: number) => M, releaseMap: (map: M) => void);
129
+ /** How many slots currently hold a static map. For a renderer publishing its own state. */
130
+ get castingCount(): number;
131
+ /**
132
+ * Hand out layers for the rectangles that will cast. Called when the world's lights are known.
133
+ *
134
+ * **Rebuilt from scratch rather than patched**, because the layer a map owns is fixed for its
135
+ * life — `PointShadowMap.layer` is `readonly` and the shader is told an index — so a rectangle
136
+ * that starts or stops casting moves every layer after it. That happens at load, not per frame.
137
+ */
138
+ prepare(lights: readonly AreaLightSource[], firstLayer: number): void;
139
+ /** Throw every image away, keeping the layers. For an array that has just been rebuilt. */
140
+ forgetEveryImage(): void;
141
+ /** Give the layers back. */
142
+ release(): void;
143
+ /**
144
+ * Whether the layers handed out still match what these lights declare.
145
+ *
146
+ * A consumer that turns a rectangle's casting on, or moves one past `MAX_AREA_LIGHTS`, has
147
+ * changed the layout — and a set that carried on would publish a layer index belonging to
148
+ * another rectangle, which is another fixture's shadow under this one. The renderer re-prepares
149
+ * on a false answer, which is the same thing `prepareStaticPointShadows` does about a light
150
+ * count that grew.
151
+ */
152
+ matchesDeclaration(lights: readonly AreaLightSource[]): boolean;
153
+ /**
154
+ * Spend a frame's faces across the casting rectangles, static maps first.
155
+ *
156
+ * **The static half is ordered by `planPointShadowBakes`, the same function the point pool
157
+ * uses**, so a rectangle with no image yet jumps ahead of one that has merely drifted — a map
158
+ * that has never baked contributes no occlusion at all, and every frame it waits is a frame with
159
+ * a rectangle visibly lighting through walls. Sharing the ordering rather than writing a second
160
+ * one is the 2026-08-13 rule: two implementations of one decision drift, and here the drift
161
+ * would be shadows arriving in a different order on the two backends, which no parity capture
162
+ * would attribute because both frames look plausible.
163
+ *
164
+ * **The live half has no staleness test, for the reason the point pool's does not**: the caster
165
+ * moved, which is what makes it live. It has a ceiling instead, round-robin across the
166
+ * rectangles, so a scene with four of them spends a bounded number of faces rather than
167
+ * twenty-four.
168
+ */
169
+ update(lights: readonly AreaLightSource[], dt: number, facesPerFrame: number, liveFacesPerFrame: number, rebakeDistance: number, faceCount: number, scratch: BakeScratch, staticCasters: unknown, dynamicCasters: unknown, bake: BakeAreaFaces<M>): void;
170
+ /**
171
+ * Publish what the shader should read, per area-light slot.
172
+ *
173
+ * **The far plane and the near plane come off the map rather than off the light**, which is the
174
+ * trap `PointShadowImage.planBake` was written for: a bake in flight owns the parameters it
175
+ * started with, so a rectangle whose range changed mid-bake has a map holding faces rendered
176
+ * under the old one. Publishing the declaration would pair new numbers with old pixels, and what
177
+ * that looks like is a shadow at the wrong distance rather than an error.
178
+ *
179
+ * **A map with no image publishes -1** rather than a layer at zero weight. Zero weight would
180
+ * make the fetch harmless and it would still *be* a fetch, of a layer holding whatever
181
+ * `texStorage3D` left there.
182
+ */
183
+ resolve(lights: readonly AreaLightSource[], out: ResolvedAreaShadows): void;
184
+ }