@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,124 @@
1
+ /**
2
+ * A medium filling the whole frustum: what a caller may say about it, and what that resolves to.
3
+ *
4
+ * **Here rather than in either renderer, for the reason `lightVolumeDraw.ts` states at its own
5
+ * top**: two copies of a clamp is a fog that thins on one backend and not the other, and nothing
6
+ * raises, because either frame is a plausible one. Everything in this file is arithmetic both
7
+ * backends run before they bind anything.
8
+ *
9
+ * The pass this feeds is described in `shaders/globalMedium.ts`. The short version of why it is
10
+ * not `atmosphere.ts`: distance fog asks how much of a *surface* survives the journey to the eye,
11
+ * and this asks what the journey adds — which is every point along it the sun can see, and is the
12
+ * only one of the two that can put the shape of a doorway on a floor.
13
+ */
14
+ /**
15
+ * The most steps a march may take, which is the shader's own loop bound.
16
+ *
17
+ * **Here rather than beside the GLSL, and the reason is bundle size rather than tidiness.**
18
+ * `renderQuality.ts` clamps against this and is imported by everything; importing one integer out
19
+ * of the shader module would carry seventeen kilobytes of shader text into every consumer's
20
+ * bundle, tree-shaken or not. The engine has paid that once already — see
21
+ * `docs/IMPROVEMENTS.md` on a constant imported from an offline module.
22
+ *
23
+ * Sixty-four is well past useful: at that count the step is centimetres across a room, and the
24
+ * picture stopped changing somewhere around a third of it.
25
+ */
26
+ export declare const MAX_GLOBAL_MEDIUM_STEPS = 64;
27
+ /**
28
+ * The most steps a part `isWeakGpuFamily` names gets, whatever the profile asked for.
29
+ *
30
+ * **The march is the only ceiling in `RenderQuality` that is a per-pixel loop**, so it is the one
31
+ * a weak part gains most from having lowered and the one a settings screen would otherwise have to
32
+ * know about by name. Sixteen still resolves a shaft across a room; what it gives up is the
33
+ * smoothness of a long march through a low sun, which is where the banding a step count buys off
34
+ * actually lives.
35
+ *
36
+ * A floor and not a verdict, like the two clamps beside it: `capabilityClamp: false` means "this
37
+ * person chose these numbers themselves", and a player who asks a weak part for a thick fog is
38
+ * entitled to it and to the frame rate that comes with it.
39
+ */
40
+ export declare const WEAK_GPU_MEDIUM_STEPS = 16;
41
+ /**
42
+ * How thick the air is, this frame.
43
+ *
44
+ * A per-frame dial and not a quality setting, in the split `renderQuality.ts` draws for depth of
45
+ * field: what a device can afford is `globalMediumSteps`, and what the weather is doing is this.
46
+ * A game walks into a fog bank; a profile decides how expensive being in one is allowed to be.
47
+ */
48
+ export interface GlobalMediumOptions {
49
+ /**
50
+ * Extinction per metre. **0 is off, and off is free** — no target is allocated, no pass is
51
+ * built and the composite is skipped, so a game that never sets this pays nothing at all.
52
+ *
53
+ * As a scale: 0.02 leaves a wall at 50 m about a third obscured, 0.1 is thick weather, and
54
+ * above about 0.5 nothing is visible past a room.
55
+ */
56
+ readonly density: number;
57
+ /**
58
+ * How much of what the medium takes out of a ray comes back as light rather than as heat, 0 to 1.
59
+ *
60
+ * Near 1 for water droplets, which is fog, cloud and steam; lower for smoke, which is soot and
61
+ * absorbs most of what it intercepts. It is the difference between a white fog that a torch
62
+ * lights up and a black smoke that swallows the same torch.
63
+ */
64
+ readonly albedo: number;
65
+ /**
66
+ * Henyey-Greenstein anisotropy, -1 back to 1 forward. 0 is isotropic.
67
+ *
68
+ * **This is the term that makes a medium read as weather rather than as a grey wash.** Real haze
69
+ * is strongly forward-scattering, which is why the air around a low sun glows and the same air
70
+ * behind the viewer does not. Around 0.6 for atmospheric haze; 0 for a medium with nothing
71
+ * directional about it at all.
72
+ */
73
+ readonly anisotropy: number;
74
+ /**
75
+ * Where the march stops, in metres. Beyond it the medium is not sampled and nothing is added.
76
+ *
77
+ * A bound on the *integral*, not on the fog: extinction is still integrated over the whole
78
+ * distance a ray travels, so a far wall behind this bound is still obscured. What stops is the
79
+ * search for light to scatter, which is what costs — and past a few extinction lengths there is
80
+ * no transmittance left for a sample to contribute through.
81
+ */
82
+ readonly maxDistance: number;
83
+ }
84
+ /**
85
+ * What a renderer starts with: off, and everything else at a value that means "ordinary air".
86
+ *
87
+ * The three settings beside `density` are never consulted while it is zero, so they are chosen to
88
+ * make `setGlobalMedium(0.02)`-shaped calls — one number, the rest defaulted — land somewhere
89
+ * recognisable rather than on a black isotropic soup.
90
+ */
91
+ export declare const DEFAULT_GLOBAL_MEDIUM: GlobalMediumOptions;
92
+ /**
93
+ * A caller's numbers, clamped to what the shader can be handed.
94
+ *
95
+ * **Every bound here is a picture rather than a guard.** A negative density is `exp(+x)` and a
96
+ * frame that grows brighter with distance; an anisotropy of exactly 1 or -1 divides the phase
97
+ * function by zero, which is a NaN that a half-float target spreads over the whole screen rather
98
+ * than reporting; a `maxDistance` of zero is a march with no length that still costs its steps.
99
+ */
100
+ export declare function resolveGlobalMedium(options: Partial<GlobalMediumOptions>): GlobalMediumOptions;
101
+ /**
102
+ * Whether this frame draws the medium at all.
103
+ *
104
+ * Both halves, in one place, because both backends have to agree about it exactly: the claim that
105
+ * `density: 0` is pixel-identical to the pass being absent is only true if neither backend runs a
106
+ * composite at zero, and a second copy of this test is where that stops being true.
107
+ */
108
+ export declare function mediumActive(options: GlobalMediumOptions, steps: number): boolean;
109
+ /**
110
+ * The march's target size.
111
+ *
112
+ * **Half each way is a quarter of the march, which is the whole reason a global medium is
113
+ * affordable.** A step is a shadow lookup and an exponential, tens of times a pixel, where an
114
+ * occlusion tap is one depth fetch — which is why `ambientOcclusionPass.ts` can run at the frame's
115
+ * own size and this cannot. What half resolution costs is bought back by the upsample, which is
116
+ * depth-aware precisely because the one place a half-res medium is visible is a silhouette.
117
+ *
118
+ * Rounded up, never below one: a frame one pixel tall halved is zero, and a zero-height target is
119
+ * refused by both backends at creation.
120
+ */
121
+ export declare function mediumTargetSize(width: number, height: number, halfResolution: boolean): {
122
+ width: number;
123
+ height: number;
124
+ };
@@ -0,0 +1,100 @@
1
+ /**
2
+ * A medium filling the whole frustum: what a caller may say about it, and what that resolves to.
3
+ *
4
+ * **Here rather than in either renderer, for the reason `lightVolumeDraw.ts` states at its own
5
+ * top**: two copies of a clamp is a fog that thins on one backend and not the other, and nothing
6
+ * raises, because either frame is a plausible one. Everything in this file is arithmetic both
7
+ * backends run before they bind anything.
8
+ *
9
+ * The pass this feeds is described in `shaders/globalMedium.ts`. The short version of why it is
10
+ * not `atmosphere.ts`: distance fog asks how much of a *surface* survives the journey to the eye,
11
+ * and this asks what the journey adds — which is every point along it the sun can see, and is the
12
+ * only one of the two that can put the shape of a doorway on a floor.
13
+ */
14
+ /**
15
+ * The most steps a march may take, which is the shader's own loop bound.
16
+ *
17
+ * **Here rather than beside the GLSL, and the reason is bundle size rather than tidiness.**
18
+ * `renderQuality.ts` clamps against this and is imported by everything; importing one integer out
19
+ * of the shader module would carry seventeen kilobytes of shader text into every consumer's
20
+ * bundle, tree-shaken or not. The engine has paid that once already — see
21
+ * `docs/IMPROVEMENTS.md` on a constant imported from an offline module.
22
+ *
23
+ * Sixty-four is well past useful: at that count the step is centimetres across a room, and the
24
+ * picture stopped changing somewhere around a third of it.
25
+ */
26
+ export const MAX_GLOBAL_MEDIUM_STEPS = 64;
27
+ /**
28
+ * The most steps a part `isWeakGpuFamily` names gets, whatever the profile asked for.
29
+ *
30
+ * **The march is the only ceiling in `RenderQuality` that is a per-pixel loop**, so it is the one
31
+ * a weak part gains most from having lowered and the one a settings screen would otherwise have to
32
+ * know about by name. Sixteen still resolves a shaft across a room; what it gives up is the
33
+ * smoothness of a long march through a low sun, which is where the banding a step count buys off
34
+ * actually lives.
35
+ *
36
+ * A floor and not a verdict, like the two clamps beside it: `capabilityClamp: false` means "this
37
+ * person chose these numbers themselves", and a player who asks a weak part for a thick fog is
38
+ * entitled to it and to the frame rate that comes with it.
39
+ */
40
+ export const WEAK_GPU_MEDIUM_STEPS = 16;
41
+ /**
42
+ * What a renderer starts with: off, and everything else at a value that means "ordinary air".
43
+ *
44
+ * The three settings beside `density` are never consulted while it is zero, so they are chosen to
45
+ * make `setGlobalMedium(0.02)`-shaped calls — one number, the rest defaulted — land somewhere
46
+ * recognisable rather than on a black isotropic soup.
47
+ */
48
+ export const DEFAULT_GLOBAL_MEDIUM = {
49
+ density: 0,
50
+ albedo: 0.9,
51
+ anisotropy: 0.6,
52
+ maxDistance: 200,
53
+ };
54
+ /**
55
+ * A caller's numbers, clamped to what the shader can be handed.
56
+ *
57
+ * **Every bound here is a picture rather than a guard.** A negative density is `exp(+x)` and a
58
+ * frame that grows brighter with distance; an anisotropy of exactly 1 or -1 divides the phase
59
+ * function by zero, which is a NaN that a half-float target spreads over the whole screen rather
60
+ * than reporting; a `maxDistance` of zero is a march with no length that still costs its steps.
61
+ */
62
+ export function resolveGlobalMedium(options) {
63
+ const d = DEFAULT_GLOBAL_MEDIUM;
64
+ return {
65
+ density: Math.max(0, options.density ?? d.density),
66
+ albedo: Math.min(1, Math.max(0, options.albedo ?? d.albedo)),
67
+ /* Short of the poles, where `(1 - g^2)` over `(1 + g^2 - 2g)^1.5` is 0/0. */
68
+ anisotropy: Math.min(0.95, Math.max(-0.95, options.anisotropy ?? d.anisotropy)),
69
+ maxDistance: Math.max(1e-3, options.maxDistance ?? d.maxDistance),
70
+ };
71
+ }
72
+ /**
73
+ * Whether this frame draws the medium at all.
74
+ *
75
+ * Both halves, in one place, because both backends have to agree about it exactly: the claim that
76
+ * `density: 0` is pixel-identical to the pass being absent is only true if neither backend runs a
77
+ * composite at zero, and a second copy of this test is where that stops being true.
78
+ */
79
+ export function mediumActive(options, steps) {
80
+ return options.density > 0 && steps > 0;
81
+ }
82
+ /**
83
+ * The march's target size.
84
+ *
85
+ * **Half each way is a quarter of the march, which is the whole reason a global medium is
86
+ * affordable.** A step is a shadow lookup and an exponential, tens of times a pixel, where an
87
+ * occlusion tap is one depth fetch — which is why `ambientOcclusionPass.ts` can run at the frame's
88
+ * own size and this cannot. What half resolution costs is bought back by the upsample, which is
89
+ * depth-aware precisely because the one place a half-res medium is visible is a silhouette.
90
+ *
91
+ * Rounded up, never below one: a frame one pixel tall halved is zero, and a zero-height target is
92
+ * refused by both backends at creation.
93
+ */
94
+ export function mediumTargetSize(width, height, halfResolution) {
95
+ const divisor = halfResolution ? 2 : 1;
96
+ return {
97
+ width: Math.max(1, Math.ceil(Math.max(1, width) / divisor)),
98
+ height: Math.max(1, Math.ceil(Math.max(1, height) / divisor)),
99
+ };
100
+ }
@@ -0,0 +1,101 @@
1
+ import type { ReadonlyMat4 } from 'gl-matrix';
2
+ import type { GlobalMediumOptions } from './globalMedium.ts';
3
+ /** What the march needs about the light, which is the sun and the sky and nothing else. */
4
+ export interface MediumLight {
5
+ /** Surface → sun, normalised. `Environment.directionalDir` unchanged. */
6
+ readonly sunDir: ArrayLike<number>;
7
+ readonly sunColor: ArrayLike<number>;
8
+ /** The sky's fill, scattered isotropically, so a shadowed medium is grey rather than black. */
9
+ readonly ambient: ArrayLike<number>;
10
+ /** How much of the medium the sun's shadow map removes, 0 to 1. At 0 no map is sampled. */
11
+ readonly sunShadow: number;
12
+ /** World → light clip, **uncorrected**: the shader does its own `* 0.5 + 0.5`. */
13
+ readonly lightViewProj: ReadonlyMat4;
14
+ readonly staticShadowMap: WebGLTexture;
15
+ readonly peeledShadowMap: WebGLTexture;
16
+ readonly dynamicShadowMap: WebGLTexture;
17
+ readonly peeledEnabled: boolean;
18
+ }
19
+ /**
20
+ * The global participating medium on WebGL2: a half-res march, then a depth-aware composite.
21
+ *
22
+ * **Its own module rather than more of `SceneTarget`**, on the split `ambientOcclusionPass.ts`
23
+ * draws: that class owns where the frame lands and how it reaches the canvas, and this owns one
24
+ * effect's target and programs. It is patterned on `SsrPass` more closely than on the occlusion
25
+ * pass, because it has the same shape — a march into a target of its own, then one composite done
26
+ * by the blend state, so neither pass ever samples the colour it is modifying.
27
+ *
28
+ * **One target and no ping-pong.** The march writes scattered light in `rgb` and transmittance in
29
+ * `a`; `(ONE, SRC_ALPHA)` against that is `dst * T + L`, which is the transfer equation for the
30
+ * segment written out. There is nothing to blur — a homogeneous medium is smooth by construction,
31
+ * and the only sharp thing in the integral is the shadow map, which the march dithers.
32
+ */
33
+ export declare class GlobalMediumPass {
34
+ private readonly gl;
35
+ /**
36
+ * Whether a half-float target is available, which is `EXT_color_buffer_float`.
37
+ *
38
+ * `RGBA8` is a real fallback rather than a refusal: transmittance lives in 0 to 1 by
39
+ * definition, and the inscatter only leaves that range against an HDR scene — where the
40
+ * fallback clips a bright fog to white instead of losing it. `SceneTarget.keepsRange` makes
41
+ * the same trade for the frame itself.
42
+ */
43
+ private readonly floatColor;
44
+ private readonly march;
45
+ private readonly marchUniforms;
46
+ private readonly upsample;
47
+ private readonly upsampleUniforms;
48
+ private readonly vao;
49
+ private target;
50
+ private framebuffer;
51
+ private width;
52
+ private height;
53
+ /** The frame size the current target was derived from, so a resize is noticed. */
54
+ private frameWidth;
55
+ private frameHeight;
56
+ private half;
57
+ /**
58
+ * Set once if the target will not complete, after which this pass does nothing and says so once.
59
+ *
60
+ * The same honest "off" `ambientOcclusionPass.ts` takes, and its note is the argument: *"the
61
+ * alternative to an honest off is a frame multiplied by a target that was never written, and the
62
+ * last time an effect in this renderer sampled a target nobody had filled, the failure presented
63
+ * as the driver being at fault."* Here the multiplication is literal — a composite reading an
64
+ * unwritten alpha would multiply the whole frame by whatever was in that memory.
65
+ */
66
+ private unavailable;
67
+ /** `inverse(viewProjection) * DEPTH_01_TO_CLIP`, rebuilt once a frame. See `SsrPass`. */
68
+ private readonly depthToWorld;
69
+ /** The four terms the upsample linearises a depth with, so a per-frame pass allocates nothing. */
70
+ private readonly depthToViewZ;
71
+ private readonly mediumTexel;
72
+ private readonly invProjection;
73
+ constructor(gl: WebGL2RenderingContext,
74
+ /**
75
+ * Whether a half-float target is available, which is `EXT_color_buffer_float`.
76
+ *
77
+ * `RGBA8` is a real fallback rather than a refusal: transmittance lives in 0 to 1 by
78
+ * definition, and the inscatter only leaves that range against an HDR scene — where the
79
+ * fallback clips a bright fog to white instead of losing it. `SceneTarget.keepsRange` makes
80
+ * the same trade for the frame itself.
81
+ */
82
+ floatColor: boolean);
83
+ private ensureSize;
84
+ /**
85
+ * March the medium into this pass's own target. Returns false if it could not run, which the
86
+ * caller must read as "no medium" rather than composite something nobody wrote.
87
+ *
88
+ * `viewProjection` and `projection` are the **raw** camera matrices, as `SsrPass` takes them:
89
+ * `DEPTH_01_TO_CLIP` carries a stored depth back into the clip space the first was built in,
90
+ * and pairing either with a clip-corrected matrix applies the remap twice.
91
+ */
92
+ marchMedium(depth: WebGLTexture, frameWidth: number, frameHeight: number, half: boolean, steps: number, options: GlobalMediumOptions, viewProjection: ReadonlyMat4, projection: ReadonlyMat4, eye: ArrayLike<number>, light: MediumLight): boolean;
93
+ /**
94
+ * Composite the march over whatever framebuffer is bound, upsampled depth-aware.
95
+ *
96
+ * `(ONE, SRC_ALPHA)` on colour is `dst * transmittance + inscatter`; alpha is left alone with
97
+ * `(ZERO, ONE)`, because the frame's own alpha is not the medium's to spend.
98
+ */
99
+ compositeMedium(depth: WebGLTexture, frameWidth: number, frameHeight: number): void;
100
+ dispose(): void;
101
+ }
@@ -0,0 +1,250 @@
1
+ import { mat4 } from 'gl-matrix';
2
+ import { mediumTargetSize } from './globalMedium.js';
3
+ import { DEPTH_01_TO_CLIP } from './lightVolumeDraw.js';
4
+ import { compileProgram, uniformLocations } from './shader.js';
5
+ import { FULLSCREEN_VERT } from './shaders/fullscreen.js';
6
+ import { MEDIUM_FRAG, MEDIUM_UPSAMPLE_FRAG } from './shaders/globalMedium.js';
7
+ /**
8
+ * The global participating medium on WebGL2: a half-res march, then a depth-aware composite.
9
+ *
10
+ * **Its own module rather than more of `SceneTarget`**, on the split `ambientOcclusionPass.ts`
11
+ * draws: that class owns where the frame lands and how it reaches the canvas, and this owns one
12
+ * effect's target and programs. It is patterned on `SsrPass` more closely than on the occlusion
13
+ * pass, because it has the same shape — a march into a target of its own, then one composite done
14
+ * by the blend state, so neither pass ever samples the colour it is modifying.
15
+ *
16
+ * **One target and no ping-pong.** The march writes scattered light in `rgb` and transmittance in
17
+ * `a`; `(ONE, SRC_ALPHA)` against that is `dst * T + L`, which is the transfer equation for the
18
+ * segment written out. There is nothing to blur — a homogeneous medium is smooth by construction,
19
+ * and the only sharp thing in the integral is the shadow map, which the march dithers.
20
+ */
21
+ export class GlobalMediumPass {
22
+ gl;
23
+ floatColor;
24
+ march;
25
+ marchUniforms;
26
+ upsample;
27
+ upsampleUniforms;
28
+ vao;
29
+ target = null;
30
+ framebuffer = null;
31
+ width = 0;
32
+ height = 0;
33
+ /** The frame size the current target was derived from, so a resize is noticed. */
34
+ frameWidth = 0;
35
+ frameHeight = 0;
36
+ half = true;
37
+ /**
38
+ * Set once if the target will not complete, after which this pass does nothing and says so once.
39
+ *
40
+ * The same honest "off" `ambientOcclusionPass.ts` takes, and its note is the argument: *"the
41
+ * alternative to an honest off is a frame multiplied by a target that was never written, and the
42
+ * last time an effect in this renderer sampled a target nobody had filled, the failure presented
43
+ * as the driver being at fault."* Here the multiplication is literal — a composite reading an
44
+ * unwritten alpha would multiply the whole frame by whatever was in that memory.
45
+ */
46
+ unavailable = false;
47
+ /** `inverse(viewProjection) * DEPTH_01_TO_CLIP`, rebuilt once a frame. See `SsrPass`. */
48
+ depthToWorld = new Float32Array(16);
49
+ /** The four terms the upsample linearises a depth with, so a per-frame pass allocates nothing. */
50
+ depthToViewZ = new Float32Array(4);
51
+ mediumTexel = new Float32Array(2);
52
+ invProjection = new Float32Array(16);
53
+ constructor(gl,
54
+ /**
55
+ * Whether a half-float target is available, which is `EXT_color_buffer_float`.
56
+ *
57
+ * `RGBA8` is a real fallback rather than a refusal: transmittance lives in 0 to 1 by
58
+ * definition, and the inscatter only leaves that range against an HDR scene — where the
59
+ * fallback clips a bright fog to white instead of losing it. `SceneTarget.keepsRange` makes
60
+ * the same trade for the frame itself.
61
+ */
62
+ floatColor) {
63
+ this.gl = gl;
64
+ this.floatColor = floatColor;
65
+ this.march = compileProgram(gl, FULLSCREEN_VERT, MEDIUM_FRAG, 'medium');
66
+ this.marchUniforms = uniformLocations(gl, this.march, 'medium');
67
+ this.upsample = compileProgram(gl, FULLSCREEN_VERT, MEDIUM_UPSAMPLE_FRAG, 'mediumUpsample');
68
+ this.upsampleUniforms = uniformLocations(gl, this.upsample, 'mediumUpsample');
69
+ const vao = gl.createVertexArray();
70
+ if (vao === null)
71
+ throw new Error('GlobalMediumPass: createVertexArray failed');
72
+ this.vao = vao;
73
+ }
74
+ ensureSize(frameWidth, frameHeight, half) {
75
+ if (this.unavailable)
76
+ return false;
77
+ if (this.frameWidth === frameWidth &&
78
+ this.frameHeight === frameHeight &&
79
+ this.half === half &&
80
+ this.target !== null) {
81
+ return true;
82
+ }
83
+ const { gl } = this;
84
+ const size = mediumTargetSize(frameWidth, frameHeight, half);
85
+ this.frameWidth = frameWidth;
86
+ this.frameHeight = frameHeight;
87
+ this.half = half;
88
+ this.width = size.width;
89
+ this.height = size.height;
90
+ /* Unit 0, chosen rather than inherited, for the reason `SsrPass.ensureSize` gives. */
91
+ gl.activeTexture(gl.TEXTURE0);
92
+ if (this.target === null)
93
+ this.target = gl.createTexture();
94
+ gl.bindTexture(gl.TEXTURE_2D, this.target);
95
+ gl.texImage2D(gl.TEXTURE_2D, 0, this.floatColor ? gl.RGBA16F : gl.RGBA8, size.width, size.height, 0, gl.RGBA, this.floatColor ? gl.HALF_FLOAT : gl.UNSIGNED_BYTE, null);
96
+ /*
97
+ * NEAREST, and it is the upsample's design rather than a saving. That pass computes the four
98
+ * bilinear weights itself so that it can *refuse* one of them across a depth edge, and it
99
+ * fetches each texel at its own centre — where a linear filter returns the texel exactly.
100
+ * Asking the hardware to blend as well would blend the taps this pass exists to separate.
101
+ */
102
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
103
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
104
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
105
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
106
+ if (this.framebuffer === null)
107
+ this.framebuffer = gl.createFramebuffer();
108
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
109
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.target, 0);
110
+ const ready = gl.checkFramebufferStatus(gl.FRAMEBUFFER) === gl.FRAMEBUFFER_COMPLETE;
111
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
112
+ gl.bindTexture(gl.TEXTURE_2D, null);
113
+ if (!ready) {
114
+ this.unavailable = true;
115
+ console.warn("GlobalMediumPass: this driver will not render to the medium's target, so the global " +
116
+ 'medium is off. The frame itself is unaffected.');
117
+ return false;
118
+ }
119
+ return true;
120
+ }
121
+ /**
122
+ * March the medium into this pass's own target. Returns false if it could not run, which the
123
+ * caller must read as "no medium" rather than composite something nobody wrote.
124
+ *
125
+ * `viewProjection` and `projection` are the **raw** camera matrices, as `SsrPass` takes them:
126
+ * `DEPTH_01_TO_CLIP` carries a stored depth back into the clip space the first was built in,
127
+ * and pairing either with a clip-corrected matrix applies the remap twice.
128
+ */
129
+ marchMedium(depth, frameWidth, frameHeight, half, steps, options, viewProjection, projection, eye, light) {
130
+ if (!this.ensureSize(frameWidth, frameHeight, half))
131
+ return false;
132
+ const { gl } = this;
133
+ const u = this.marchUniforms;
134
+ mat4.invert(this.depthToWorld, viewProjection);
135
+ mat4.multiply(this.depthToWorld, this.depthToWorld, DEPTH_01_TO_CLIP);
136
+ /*
137
+ * The upsample's four terms, taken here because this is the frame the march ran against.
138
+ * Column major, so `[2][2]` is element 10 and `[3][3]` is element 15 — the same four
139
+ * `ambientOcclusionPass.ts` reads, in the same order.
140
+ */
141
+ mat4.invert(this.invProjection, projection);
142
+ this.depthToViewZ[0] = this.invProjection[10] ?? 0;
143
+ this.depthToViewZ[1] = this.invProjection[14] ?? 0;
144
+ this.depthToViewZ[2] = this.invProjection[11] ?? 0;
145
+ this.depthToViewZ[3] = this.invProjection[15] ?? 1;
146
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
147
+ gl.viewport(0, 0, this.width, this.height);
148
+ /* One triangle over a target with no depth attachment, so nothing inherited from the scene
149
+ pass is tested against a buffer that is not there. */
150
+ gl.disable(gl.DEPTH_TEST);
151
+ gl.depthMask(false);
152
+ gl.disable(gl.CULL_FACE);
153
+ gl.disable(gl.BLEND);
154
+ gl.disable(gl.SCISSOR_TEST);
155
+ gl.useProgram(this.march);
156
+ gl.bindVertexArray(this.vao);
157
+ gl.activeTexture(gl.TEXTURE0);
158
+ gl.bindTexture(gl.TEXTURE_2D, depth);
159
+ gl.uniform1i(u['uDepth'] ?? null, 0);
160
+ gl.activeTexture(gl.TEXTURE1);
161
+ gl.bindTexture(gl.TEXTURE_2D, light.staticShadowMap);
162
+ gl.uniform1i(u['uStaticShadowMap'] ?? null, 1);
163
+ gl.activeTexture(gl.TEXTURE2);
164
+ gl.bindTexture(gl.TEXTURE_2D, light.peeledShadowMap);
165
+ gl.uniform1i(u['uPeeledShadowMap'] ?? null, 2);
166
+ gl.activeTexture(gl.TEXTURE3);
167
+ gl.bindTexture(gl.TEXTURE_2D, light.dynamicShadowMap);
168
+ gl.uniform1i(u['uDynamicShadowMap'] ?? null, 3);
169
+ gl.uniformMatrix4fv(u['uDepthToWorld'] ?? null, false, this.depthToWorld);
170
+ gl.uniform3f(u['uCameraPos'] ?? null, eye[0] ?? 0, eye[1] ?? 0, eye[2] ?? 0);
171
+ gl.uniform3f(u['uSunDir'] ?? null, light.sunDir[0] ?? 0, light.sunDir[1] ?? 1, light.sunDir[2] ?? 0);
172
+ gl.uniform3f(u['uSunColor'] ?? null, light.sunColor[0] ?? 0, light.sunColor[1] ?? 0, light.sunColor[2] ?? 0);
173
+ gl.uniform3f(u['uAmbient'] ?? null, light.ambient[0] ?? 0, light.ambient[1] ?? 0, light.ambient[2] ?? 0);
174
+ gl.uniform1f(u['uDensity'] ?? null, options.density);
175
+ gl.uniform1f(u['uAlbedo'] ?? null, options.albedo);
176
+ gl.uniform1f(u['uAnisotropy'] ?? null, options.anisotropy);
177
+ gl.uniform1f(u['uMaxDistance'] ?? null, options.maxDistance);
178
+ gl.uniform1i(u['uSteps'] ?? null, steps);
179
+ gl.uniform1f(u['uSunShadow'] ?? null, light.sunShadow);
180
+ gl.uniformMatrix4fv(u['uLightViewProj'] ?? null, false, light.lightViewProj);
181
+ gl.uniform1i(u['uPeeledShadowEnabled'] ?? null, light.peeledEnabled ? 1 : 0);
182
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
183
+ gl.bindVertexArray(null);
184
+ /* Released down to unit 0, for the reason `SsrPass` records: a binding outlives the frame that
185
+ made it, and the next frame attaches one of these as a target while a sampler still names it. */
186
+ for (const unit of [gl.TEXTURE3, gl.TEXTURE2, gl.TEXTURE1, gl.TEXTURE0]) {
187
+ gl.activeTexture(unit);
188
+ gl.bindTexture(gl.TEXTURE_2D, null);
189
+ }
190
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
191
+ return true;
192
+ }
193
+ /**
194
+ * Composite the march over whatever framebuffer is bound, upsampled depth-aware.
195
+ *
196
+ * `(ONE, SRC_ALPHA)` on colour is `dst * transmittance + inscatter`; alpha is left alone with
197
+ * `(ZERO, ONE)`, because the frame's own alpha is not the medium's to spend.
198
+ */
199
+ compositeMedium(depth, frameWidth, frameHeight) {
200
+ if (this.target === null || this.unavailable)
201
+ return;
202
+ const { gl } = this;
203
+ const u = this.upsampleUniforms;
204
+ gl.viewport(0, 0, frameWidth, frameHeight);
205
+ gl.disable(gl.DEPTH_TEST);
206
+ gl.depthMask(false);
207
+ gl.disable(gl.CULL_FACE);
208
+ gl.enable(gl.BLEND);
209
+ gl.blendFuncSeparate(gl.ONE, gl.SRC_ALPHA, gl.ZERO, gl.ONE);
210
+ gl.useProgram(this.upsample);
211
+ gl.bindVertexArray(this.vao);
212
+ gl.activeTexture(gl.TEXTURE0);
213
+ gl.bindTexture(gl.TEXTURE_2D, this.target);
214
+ gl.uniform1i(u['uMedium'] ?? null, 0);
215
+ gl.activeTexture(gl.TEXTURE1);
216
+ gl.bindTexture(gl.TEXTURE_2D, depth);
217
+ gl.uniform1i(u['uDepth'] ?? null, 1);
218
+ this.mediumTexel[0] = 1 / Math.max(1, this.width);
219
+ this.mediumTexel[1] = 1 / Math.max(1, this.height);
220
+ gl.uniform2fv(u['uMediumTexel'] ?? null, this.mediumTexel);
221
+ gl.uniform4fv(u['uDepthToViewZ'] ?? null, this.depthToViewZ);
222
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
223
+ gl.bindVertexArray(null);
224
+ gl.activeTexture(gl.TEXTURE1);
225
+ gl.bindTexture(gl.TEXTURE_2D, null);
226
+ gl.activeTexture(gl.TEXTURE0);
227
+ gl.bindTexture(gl.TEXTURE_2D, null);
228
+ /* Back to the blend every other pass in this renderer assumes it inherits. */
229
+ gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
230
+ gl.disable(gl.BLEND);
231
+ gl.depthMask(true);
232
+ gl.enable(gl.DEPTH_TEST);
233
+ }
234
+ dispose() {
235
+ const { gl } = this;
236
+ if (this.framebuffer !== null)
237
+ gl.deleteFramebuffer(this.framebuffer);
238
+ if (this.target !== null)
239
+ gl.deleteTexture(this.target);
240
+ gl.deleteProgram(this.march);
241
+ gl.deleteProgram(this.upsample);
242
+ gl.deleteVertexArray(this.vao);
243
+ this.framebuffer = null;
244
+ this.target = null;
245
+ this.width = 0;
246
+ this.height = 0;
247
+ this.frameWidth = 0;
248
+ this.frameHeight = 0;
249
+ }
250
+ }