@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,56 @@
1
+ /**
2
+ * A medium filling the whole frustum: the march, and the upsample that puts it back on screen.
3
+ *
4
+ * **Volumetrics in this engine were a body inside a hull and nothing else.** `lightVolume.ts`
5
+ * marches a cone a caller placed, which is a shaft through a window and a lighthouse beam; there
6
+ * was no way to say the air itself is thick. Fog was `atmosphere.ts`, which fades a *surface*
7
+ * toward a colour by how far away it is — so a room full of haze had no shafts in it, a solid
8
+ * standing in that haze cast nothing through it, and the sun's own shadow map, which knows
9
+ * exactly where the light does not reach, was consulted by nothing between the surfaces.
10
+ *
11
+ * The difference is one term. Distance fog asks how much of a surface survives the journey;
12
+ * this asks what the journey *adds*, which is every point along it that the sun can see. A wall
13
+ * behind a doorway dims either way. Only this one puts the doorway's shape on the floor.
14
+ *
15
+ * ## Two passes, and the second one is not a blur
16
+ *
17
+ * `ambientOcclusionPass.ts` runs its estimate at the frame's own size and blurs it. This runs at
18
+ * half and upsamples, and the difference is what a sample costs: an occlusion tap is one depth
19
+ * fetch, and a march step is a shadow lookup plus an exponential, tens of times per pixel. Half
20
+ * resolution is a quarter of that, and it is affordable here for the reason it is not affordable
21
+ * there — a medium is smooth almost everywhere, so the only place half resolution is visible is
22
+ * the one place the upsample is careful about.
23
+ *
24
+ * **Which is the silhouette.** A bilinear fetch of a half-res medium reads two texels that
25
+ * straddle an edge, so the fog computed for the wall behind a railing is averaged onto the
26
+ * railing itself and the railing wears a halo. The upsample weights each of the four texels by
27
+ * how close its own depth is to this pixel's, which is the same instrument `AO_BLUR_FRAG` uses
28
+ * and for the same reason: it is what separates a blur from a smear.
29
+ */
30
+ /**
31
+ * The march. Writes scattered light in `rgb` and how much of the frame survives in `a`.
32
+ *
33
+ * **Transmittance in alpha is what makes the composite a fixed-function blend** rather than a
34
+ * second read of the scene. `dst.rgb * src.a + src.rgb` is exactly the transfer equation for a
35
+ * segment, and it is `ONE, SRC_ALPHA` on both backends — so the pass that puts this on screen
36
+ * never samples the colour it is modifying, which is the sampling a backend is entitled to call
37
+ * undefined and which cost this renderer a snapshot copy everywhere else it was needed.
38
+ */
39
+ export declare const MEDIUM_FRAG: string;
40
+ /**
41
+ * The upsample, blended straight over the frame.
42
+ *
43
+ * **Four taps and a depth test, not a bilinear fetch.** The half-res march is smooth wherever the
44
+ * scene is, and wrong wherever the scene is not: a texel whose own ray ended on the wall behind a
45
+ * railing carries the wall's fog, and a linear fetch spreads it onto the railing. So each of the
46
+ * four texels around this pixel is weighted by its bilinear share **and** by how close the depth
47
+ * its march stopped at is to this pixel's own, which is what keeps the fog on its own side of an
48
+ * edge. `AO_BLUR_FRAG` weights its taps the same way and calls it the difference between a blur
49
+ * and a smear.
50
+ *
51
+ * The low-resolution depths are read out of the *frame's* depth texture at the low-resolution
52
+ * texel centres, rather than out of a second half-size depth target. They are the same values:
53
+ * the march point-samples that same texture at those same coordinates, so this reproduces what
54
+ * each texel actually integrated to, for one fetch each and no extra attachment.
55
+ */
56
+ export declare const MEDIUM_UPSAMPLE_FRAG: string;
@@ -0,0 +1,393 @@
1
+ import { glslIsFarDepth, glslSceneDepthToNdc } from '../depthConvention.js';
2
+ import { MAX_GLOBAL_MEDIUM_STEPS } from '../globalMedium.js';
3
+ /**
4
+ * A medium filling the whole frustum: the march, and the upsample that puts it back on screen.
5
+ *
6
+ * **Volumetrics in this engine were a body inside a hull and nothing else.** `lightVolume.ts`
7
+ * marches a cone a caller placed, which is a shaft through a window and a lighthouse beam; there
8
+ * was no way to say the air itself is thick. Fog was `atmosphere.ts`, which fades a *surface*
9
+ * toward a colour by how far away it is — so a room full of haze had no shafts in it, a solid
10
+ * standing in that haze cast nothing through it, and the sun's own shadow map, which knows
11
+ * exactly where the light does not reach, was consulted by nothing between the surfaces.
12
+ *
13
+ * The difference is one term. Distance fog asks how much of a surface survives the journey;
14
+ * this asks what the journey *adds*, which is every point along it that the sun can see. A wall
15
+ * behind a doorway dims either way. Only this one puts the doorway's shape on the floor.
16
+ *
17
+ * ## Two passes, and the second one is not a blur
18
+ *
19
+ * `ambientOcclusionPass.ts` runs its estimate at the frame's own size and blurs it. This runs at
20
+ * half and upsamples, and the difference is what a sample costs: an occlusion tap is one depth
21
+ * fetch, and a march step is a shadow lookup plus an exponential, tens of times per pixel. Half
22
+ * resolution is a quarter of that, and it is affordable here for the reason it is not affordable
23
+ * there — a medium is smooth almost everywhere, so the only place half resolution is visible is
24
+ * the one place the upsample is careful about.
25
+ *
26
+ * **Which is the silhouette.** A bilinear fetch of a half-res medium reads two texels that
27
+ * straddle an edge, so the fog computed for the wall behind a railing is averaged onto the
28
+ * railing itself and the railing wears a halo. The upsample weights each of the four texels by
29
+ * how close its own depth is to this pixel's, which is the same instrument `AO_BLUR_FRAG` uses
30
+ * and for the same reason: it is what separates a blur from a smear.
31
+ */
32
+ /**
33
+ * The march. Writes scattered light in `rgb` and how much of the frame survives in `a`.
34
+ *
35
+ * **Transmittance in alpha is what makes the composite a fixed-function blend** rather than a
36
+ * second read of the scene. `dst.rgb * src.a + src.rgb` is exactly the transfer equation for a
37
+ * segment, and it is `ONE, SRC_ALPHA` on both backends — so the pass that puts this on screen
38
+ * never samples the colour it is modifying, which is the sampling a backend is entitled to call
39
+ * undefined and which cost this renderer a snapshot copy everywhere else it was needed.
40
+ */
41
+ export const MEDIUM_FRAG = `#version 300 es
42
+ precision highp float;
43
+
44
+ in vec2 vUv;
45
+
46
+ /** The frame's depth, at full size however small this target is. See \`uDepthToWorld\`. */
47
+ uniform highp sampler2D uDepth;
48
+ /**
49
+ * Straight from a stored depth to world space, in one matrix, exactly as \`uDepthToLocal\` is.
50
+ *
51
+ * Built on the CPU per frame because the two backends disagree about clip space: WebGL2 stores
52
+ * depth in [0,1] and wants NDC z in [-1,1], WebGPU stores and wants [0,1]. Folding the remap into
53
+ * the matrix is what lets this shader read \`vec4(ndc.xy, stored, 1)\` without knowing which one it
54
+ * is running on, and \`lightVolumeDraw.ts\` derives both remaps and says why they are not one.
55
+ */
56
+ uniform mat4 uDepthToWorld;
57
+ uniform vec3 uCameraPos;
58
+
59
+ /** Surface → sun, normalised: \`Environment.directionalDir\`, the same vector the flat shader gets. */
60
+ uniform vec3 uSunDir;
61
+ /** The sun's colour and intensity, which is what the medium scatters. */
62
+ uniform vec3 uSunColor;
63
+ /** The sky's own fill, scattered isotropically. Without it a shadowed medium is black. */
64
+ uniform vec3 uAmbient;
65
+
66
+ /** Extinction per metre. Above zero here, because nothing draws this pass at zero. */
67
+ uniform float uDensity;
68
+ /** How much of what the medium takes out comes back as light rather than heat, 0 to 1. */
69
+ uniform float uAlbedo;
70
+ /** Henyey-Greenstein g, -1 back to 1 forward. */
71
+ uniform float uAnisotropy;
72
+ /** Where the march stops, in metres. */
73
+ uniform float uMaxDistance;
74
+ /** Steps per pixel, clamped to \`MAX_GLOBAL_MEDIUM_STEPS\`. */
75
+ uniform int uSteps;
76
+
77
+ /** How much of the medium the sun's own shadow map removes, 0 to 1. At 0 nothing is sampled. */
78
+ uniform float uSunShadow;
79
+ uniform mat4 uLightViewProj;
80
+ uniform sampler2D uStaticShadowMap;
81
+ uniform sampler2D uPeeledShadowMap;
82
+ uniform sampler2D uDynamicShadowMap;
83
+ uniform int uPeeledShadowEnabled;
84
+
85
+ out vec4 fragColor;
86
+
87
+ /**
88
+ * The stored depth this shader unprojects to find the ray, and it is not a depth in the scene.
89
+ *
90
+ * Every view ray of a perspective projection passes through the eye, so one point on the ray is
91
+ * enough to fix its direction and the eye supplies the other. A half is chosen because it is
92
+ * inside the frustum whichever way round the convention runs — near or far would be exact under
93
+ * one and at infinity under the other, and this shader is compiled once for both.
94
+ */
95
+ const float RAY_PROBE_DEPTH = 0.5;
96
+
97
+ /** Depth tolerance for the shadow lookup, and the width the comparison ramps over. See lightVolume. */
98
+ const float SHADOW_BIAS = 0.0015;
99
+ const float SHADOW_SOFTEN = 0.0025;
100
+
101
+ /** Four pi, which is what a phase function normalises over. */
102
+ const float FOUR_PI = 12.56637061;
103
+
104
+ /**
105
+ * How the samples are spread along the ray: distance is \`far * u^DISTRIBUTION\` for u in 0 to 1.
106
+ *
107
+ * **Even spacing was what shipped first here and it was measured before it was changed.** A ray
108
+ * that leaves through an opening has nothing to stop it, so it marches the whole \`maxDistance\`:
109
+ * at 200 m and 32 steps that is six metres between samples, and the dither below then moves each
110
+ * one by up to three. Every sample near the opening's own frame flips between blocked and unblocked
111
+ * from pixel to pixel, and what reaches the screen is coarse salt-and-pepper over the brightest
112
+ * part of the frame — photographed on \`demo/dev/medium.html\` at \`?density=0.03\`, where the sky
113
+ * through the window is the one region a viewer's eye goes to first.
114
+ *
115
+ * Squaring fixes it because the structure is not spread evenly either. Everything a march has to
116
+ * resolve — the edge of a shaft, the shadow of a post, the boundary of a doorway — is *near*,
117
+ * inside the room the camera is standing in; what is far is the uniform remainder of a homogeneous
118
+ * medium, which needs no resolution at all. At 200 m over 32 steps the first segment is now 20 cm
119
+ * and the last is twelve metres, and the twelve metres are integrated exactly by the analytic term
120
+ * below rather than approximated.
121
+ *
122
+ * Two, and not more, because the segment lengths are what the dither is measured in: a steeper
123
+ * power buys sharper near detail and pushes the far dither back up.
124
+ */
125
+ const float DISTRIBUTION = 2.0;
126
+
127
+ float hash21(vec2 p) {
128
+ return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
129
+ }
130
+
131
+ /** A ramp rather than a comparison, for the reason \`lightVolume.ts\` gives about its own dither. */
132
+ float occlusion(float stored, float compare) {
133
+ return smoothstep(-SHADOW_SOFTEN, SHADOW_SOFTEN, compare - stored);
134
+ }
135
+
136
+ /** How much sun reaches one point in the air. The same three maps the shaft reads, in the same order. */
137
+ float sunReach(vec3 worldPos) {
138
+ vec4 lightPos = uLightViewProj * vec4(worldPos, 1.0);
139
+ if (lightPos.w <= 0.0) return 1.0;
140
+ vec3 p = lightPos.xyz / lightPos.w * 0.5 + 0.5;
141
+ if (p.z > 1.0 || p.x < 0.0 || p.x > 1.0 || p.y < 0.0 || p.y > 1.0) return 1.0;
142
+
143
+ /* Faded at the border rather than cut at it: the map covers a radius around the viewer, and a
144
+ hard edge makes a shaft appear as the camera walks toward it. */
145
+ vec2 fromCentre = abs(p.xy - 0.5) * 2.0;
146
+ float edgeFade = 1.0 - smoothstep(0.72, 0.98, max(fromCentre.x, fromCentre.y));
147
+ edgeFade *= 1.0 - smoothstep(0.90, 1.0, p.z);
148
+ if (edgeFade <= 0.0) return 1.0;
149
+
150
+ float compare = p.z - SHADOW_BIAS;
151
+ float blocked = occlusion(textureLod(uStaticShadowMap, p.xy, 0.0).r, compare);
152
+ if (uPeeledShadowEnabled != 0) {
153
+ blocked = max(blocked, occlusion(textureLod(uPeeledShadowMap, p.xy, 0.0).r, compare));
154
+ }
155
+ blocked = max(blocked, occlusion(textureLod(uDynamicShadowMap, p.xy, 0.0).r, compare));
156
+ return mix(1.0, 1.0 - blocked, uSunShadow * edgeFade);
157
+ }
158
+
159
+ /**
160
+ * Henyey-Greenstein: how much light arriving along one direction leaves along another.
161
+ *
162
+ * **This is the term that makes a medium look like weather rather than like a grey wash.** Air
163
+ * with dust in it is strongly forward-scattering, which is why the haze around a low sun is
164
+ * bright and the same haze behind you is not, and an isotropic medium is the one thing that
165
+ * cannot show that at any density. g of zero returns 1 / 4pi exactly and costs the same.
166
+ */
167
+ float phase(float cosTheta, float g) {
168
+ float g2 = g * g;
169
+ float d = max(1.0 + g2 - 2.0 * g * cosTheta, 1e-4);
170
+ return (1.0 - g2) / (FOUR_PI * d * sqrt(d));
171
+ }
172
+
173
+ void main() {
174
+ vec2 ndc = vUv * 2.0 - 1.0;
175
+
176
+ /* The ray, from the eye through one point of it. See RAY_PROBE_DEPTH. */
177
+ vec4 probe = uDepthToWorld * vec4(ndc, RAY_PROBE_DEPTH, 1.0);
178
+ vec3 dir = normalize(probe.xyz / probe.w - uCameraPos);
179
+
180
+ /*
181
+ * Where the march stops: the surface the frame already drew, or the medium's own reach.
182
+ *
183
+ * **Without the first the fog is drawn through the wall**, which is not a subtle failure —
184
+ * a lit doorway would put its shaft on top of the wall beside it rather than on the floor
185
+ * through it. It is the same clamp \`lightVolume.ts\` acquired after a beam was reported
186
+ * continuing under a floor, and \`hit.w\` is guarded here for the reason it is guarded there.
187
+ */
188
+ float stored = textureLod(uDepth, vUv, 0.0).r;
189
+ float far = uMaxDistance;
190
+ if (!${glslIsFarDepth('stored')}) {
191
+ vec4 hit = uDepthToWorld * vec4(ndc, stored, 1.0);
192
+ if (hit.w > 1e-6) far = min(far, dot(hit.xyz / hit.w - uCameraPos, dir));
193
+ }
194
+ if (far <= 0.0) {
195
+ fragColor = vec4(0.0, 0.0, 0.0, 1.0);
196
+ return;
197
+ }
198
+
199
+ int steps = clamp(uSteps, 1, ${MAX_GLOBAL_MEDIUM_STEPS});
200
+
201
+ /*
202
+ * The lattice is the plain midpoint rule and only the shadow lookup is dithered off it.
203
+ *
204
+ * **The same split \`lightVolume.ts\` took three captures to arrive at**, and the argument is
205
+ * the medium's rather than the beam's only in one detail: here the density is *constant*, so
206
+ * the sole discontinuity anywhere in the integrand is the shadow map. Jittering the sample
207
+ * positions would therefore spoil the one term that is perfectly smooth and improve nothing,
208
+ * which is exactly the screen door that shader photographed down a beam carrying no shadow.
209
+ *
210
+ * A hash rather than a Bayer tile, and that is the one place the two differ. This pass runs at
211
+ * half resolution behind a depth-aware upsample, and an ordered pattern survives that upsample
212
+ * as a pattern at twice the size — the 4x4 tile would arrive on screen eight pixels wide. A
213
+ * hash arrives as noise the upsample's own bilinear footprint already averages four of.
214
+ */
215
+ float dither = hash21(gl_FragCoord.xy) - 0.5;
216
+
217
+ /* Constant along the ray, so out of the loop: the medium is homogeneous by construction. */
218
+ float scatter = uAlbedo * phase(dot(dir, uSunDir), uAnisotropy);
219
+ vec3 sunLit = uSunColor * scatter;
220
+ /* Isotropic, so no phase term: sky fill arrives from every direction and leaves the same way. */
221
+ vec3 skyLit = uAmbient * uAlbedo * (1.0 / FOUR_PI);
222
+
223
+ vec3 inscatter = vec3(0.0);
224
+ float transmittance = 1.0;
225
+ float previous = 0.0;
226
+
227
+ for (int i = 0; i < ${MAX_GLOBAL_MEDIUM_STEPS}; i++) {
228
+ if (i >= steps) break;
229
+ /*
230
+ * The segment this step covers, and it is **not** the same length as the one before it.
231
+ *
232
+ * See DISTRIBUTION: the samples crowd toward the camera, so every quantity below is computed
233
+ * from this segment's own length rather than from a step shared by the whole march.
234
+ */
235
+ float u = float(i + 1) / float(steps);
236
+ float next = far * pow(u, DISTRIBUTION);
237
+ float segment = next - previous;
238
+ float travelled = 0.5 * (previous + next);
239
+ previous = next;
240
+
241
+ /*
242
+ * How much this segment scatters toward the eye, and the reason it is not
243
+ * \`density * segment\`.
244
+ *
245
+ * The analytic integral of \`sigma_s * exp(-sigma_t * s)\` over the segment is
246
+ * \`albedo * (1 - exp(-sigma_t * dl))\`, and using it rather than the rectangle rule is what
247
+ * keeps the picture the same when a device is given a smaller step count: the rectangle rule
248
+ * over-counts by half a segment's absorption every segment, so a 16-step march comes out
249
+ * visibly brighter than a 64-step one and the quality dial changes the image rather than its
250
+ * cost. It also cannot exceed the light that entered, at any density and any step, which a
251
+ * product of two unbounded numbers can.
252
+ */
253
+ float segmentTransmittance = exp(-uDensity * segment);
254
+ float scattered = 1.0 - segmentTransmittance;
255
+
256
+ float lit = 1.0;
257
+ if (uSunShadow > 0.0) lit = sunReach(uCameraPos + dir * (travelled + dither * segment));
258
+
259
+ inscatter += transmittance * scattered * (sunLit * lit + skyLit);
260
+ transmittance *= segmentTransmittance;
261
+ }
262
+
263
+ /*
264
+ * Scaled by four pi on the way out, so that an isotropic medium at albedo 1 returns exactly
265
+ * the light that reached it.
266
+ *
267
+ * The phase function is normalised over the sphere, which is what makes anisotropy mean
268
+ * something; it also means an isotropic medium hands back 1/4pi of the sun, and a caller
269
+ * setting albedo to 1 would get a twelfth of what a fog ought to look like and reach for a
270
+ * density that is not physical. The factor puts \`albedo\` back on the scale its name implies.
271
+ */
272
+ fragColor = vec4(inscatter * FOUR_PI, transmittance);
273
+ }
274
+ `;
275
+ /**
276
+ * The upsample, blended straight over the frame.
277
+ *
278
+ * **Four taps and a depth test, not a bilinear fetch.** The half-res march is smooth wherever the
279
+ * scene is, and wrong wherever the scene is not: a texel whose own ray ended on the wall behind a
280
+ * railing carries the wall's fog, and a linear fetch spreads it onto the railing. So each of the
281
+ * four texels around this pixel is weighted by its bilinear share **and** by how close the depth
282
+ * its march stopped at is to this pixel's own, which is what keeps the fog on its own side of an
283
+ * edge. `AO_BLUR_FRAG` weights its taps the same way and calls it the difference between a blur
284
+ * and a smear.
285
+ *
286
+ * The low-resolution depths are read out of the *frame's* depth texture at the low-resolution
287
+ * texel centres, rather than out of a second half-size depth target. They are the same values:
288
+ * the march point-samples that same texture at those same coordinates, so this reproduces what
289
+ * each texel actually integrated to, for one fetch each and no extra attachment.
290
+ */
291
+ export const MEDIUM_UPSAMPLE_FRAG = `#version 300 es
292
+ precision highp float;
293
+
294
+ in vec2 vUv;
295
+
296
+ /** The march's output: scattered light in rgb, transmittance in a. Linear filtered, half size. */
297
+ uniform sampler2D uMedium;
298
+ /** The frame's depth, at full size. */
299
+ uniform highp sampler2D uDepth;
300
+ /** One texel of the *medium*, which is two of the frame. */
301
+ uniform vec2 uMediumTexel;
302
+ /**
303
+ * The four terms that carry a stored depth back to view-space metres.
304
+ *
305
+ * Elements 10, 14, 11 and 15 of the inverse projection, column major — the same four
306
+ * \`ambientOcclusionPass.ts\` reads and in the same order, because the comparison this makes is
307
+ * the comparison its blur makes.
308
+ */
309
+ uniform vec4 uDepthToViewZ;
310
+
311
+ out vec4 fragColor;
312
+
313
+ /**
314
+ * How far apart two view depths may be, as a fraction of the nearer one, before a tap is refused.
315
+ *
316
+ * **Proportional rather than absolute, and that is the whole of why it works at any distance.**
317
+ * A depth buffer's quantum grows with distance and so does the gap two sides of a grazing floor
318
+ * show, so a fixed tolerance in metres either refuses every tap across a far room or accepts
319
+ * every tap across a near silhouette. Five percent is far above both and far below the step at
320
+ * an edge worth protecting — a doorway is metres of it.
321
+ *
322
+ * Raising this toward infinity is exactly a plain bilinear upsample, which is the mutation
323
+ * \`scripts/medium-check.mjs\` uses to show that the silhouette claim is not vacuous.
324
+ */
325
+ const float DEPTH_TOLERANCE = 0.05;
326
+
327
+ /**
328
+ * View distance in metres from a stored depth, positive away from the eye.
329
+ *
330
+ * The stored value is carried to a conventional NDC z first, exactly as \`AO_BLUR_FRAG\`'s copy of
331
+ * this does: the four terms come off the inverse of the camera's own projection, whose clip z runs
332
+ * -1 to 1, and this renderer stores a *reversed* depth in 0 to 1. Skipping that step still yields
333
+ * a monotonic function of distance, which is why it would look like it works — what it breaks is
334
+ * the scale the tolerance below is measured in, so the refusal would fire at the wrong depths.
335
+ */
336
+ float viewDistance(float stored) {
337
+ float ndc = ${glslSceneDepthToNdc('stored')};
338
+ return abs((uDepthToViewZ.x * ndc + uDepthToViewZ.y) / (uDepthToViewZ.z * ndc + uDepthToViewZ.w));
339
+ }
340
+
341
+ void main() {
342
+ float here = viewDistance(textureLod(uDepth, vUv, 0.0).r);
343
+
344
+ /*
345
+ * The four texel centres the bilinear footprint would have used, found by hand.
346
+ *
347
+ * \`floor(uv / texel - 0.5)\` is the low-resolution texel whose centre is up and to the left of
348
+ * this pixel; the fraction left over is the weight toward the other three. Doing it here rather
349
+ * than letting the sampler do it is the entire pass: the sampler cannot be told to skip a texel.
350
+ */
351
+ vec2 coord = vUv / uMediumTexel - 0.5;
352
+ vec2 base = floor(coord);
353
+ vec2 f = coord - base;
354
+
355
+ vec4 total = vec4(0.0);
356
+ float weight = 0.0;
357
+ /** The nearest tap by depth, kept in case every weight is refused. */
358
+ vec4 nearest = vec4(0.0, 0.0, 0.0, 1.0);
359
+ float nearestGap = 1e30;
360
+
361
+ for (int i = 0; i < 4; i++) {
362
+ vec2 offset = vec2(float(i & 1), float((i >> 1) & 1));
363
+ vec2 uv = (base + offset + 0.5) * uMediumTexel;
364
+ float bilinear = mix(1.0 - f.x, f.x, offset.x) * mix(1.0 - f.y, f.y, offset.y);
365
+
366
+ float there = viewDistance(textureLod(uDepth, uv, 0.0).r);
367
+ float gap = abs(there - here) / max(min(there, here), 1e-3);
368
+ vec4 sampled = textureLod(uMedium, uv, 0.0);
369
+
370
+ if (gap < nearestGap) {
371
+ nearestGap = gap;
372
+ nearest = sampled;
373
+ }
374
+ /*
375
+ * A ramp rather than a cut, over the last fifth of the tolerance. A hard refusal makes the
376
+ * *set* of accepted taps change from pixel to pixel along a slope, and the change is visible
377
+ * as a stair even though every tap in it was correct.
378
+ */
379
+ float depthWeight = 1.0 - smoothstep(DEPTH_TOLERANCE * 0.8, DEPTH_TOLERANCE, gap);
380
+ total += sampled * bilinear * depthWeight;
381
+ weight += bilinear * depthWeight;
382
+ }
383
+
384
+ /*
385
+ * **The fallback is a real answer, not a guard against division by zero.** Every tap is refused
386
+ * exactly where this pixel's surface is not represented in the half-res march at all — a
387
+ * one-pixel-wide railing between two texels that both landed on the wall — and there is nothing
388
+ * to interpolate. The nearest by depth is the least wrong of the four, and it is a point sample,
389
+ * which is what a half-res effect always degrades to at a feature it cannot resolve.
390
+ */
391
+ fragColor = weight > 1e-4 ? total / weight : nearest;
392
+ }
393
+ `;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Light in the air: a beam, a shaft through a window, the cone under a lamp.
3
+ *
4
+ * **Its own program because the thing it draws is not a surface.** A surface is lit, fogged
5
+ * and gated by the time of day; light is none of those, and every attempt to express a beam
6
+ * as a material failed in a different place for the same underlying reason. The recorded
7
+ * history, because it is the whole justification for this file existing:
8
+ *
9
+ * - **Alpha blended, it darkened the sky.** Alpha blending moves what is behind a surface
10
+ * *toward* that surface's own colour, so an unlit beam that came out darker than the dusk
11
+ * behind it swept a solid dark wedge across the frame. It was reported five times as a
12
+ * giant malformed bird, which is what a ninety-metre wedge crossing a flock looks like.
13
+ * - **Additive through the flat pass, it vanished.** The fog term is a `mix` toward the
14
+ * medium's colour, applied to something that *is* the medium being lit, and ninety metres
15
+ * of it multiplied to nothing. Twenty times the emissive did not bring it back.
16
+ *
17
+ * So: nothing here is lit, nothing here is fogged, and nothing here is scaled by night. A
18
+ * beam is *more* visible in fog, not less, because the fog is what there is to light. The
19
+ * closest precedent in this renderer is `bolt.ts`, which says the same thing about a
20
+ * discharge and for the same reason.
21
+ *
22
+ * **The volume comes from the grazing term, not from the geometry.** A single surface cannot
23
+ * be a volume, so what is drawn is a few flat panes through the beam's own axis, and each
24
+ * fragment is weighted by how far from face-on the pane is turned. A pane seen face-on
25
+ * contributes almost nothing; a pane seen edge-on contributes fully, which is exactly when a
26
+ * line of sight travels furthest through the slab that pane stands for. Because the panes
27
+ * cross at the axis, the ones that are edge-on are the ones whose bright part *is* the axis,
28
+ * and the result is a soft core down the middle with no hard edge anywhere. A tube would
29
+ * have given the opposite and read as a hollow pipe.
30
+ *
31
+ * **What that leaves out, and what the two optional terms below are for.** The shape above is
32
+ * a monotone falloff along two axes times a constant per pane, so for the pass's whole first
33
+ * life *nothing in it varied per fragment*. A consumer swept strength from 1.5 to 3.2 and
34
+ * spread from 0.038 to 0.13 across six captures and reported the obvious consequence: the beam
35
+ * gets brighter and wider and its shape never changes, which reads as a lit solid rather than
36
+ * as light standing in air. Neither term is on by default, because a torch beam wants neither
37
+ * and every volume drawn before they existed is entitled to the frame it had.
38
+ *
39
+ * - **`uDust`** breaks the body up with a noise field in world space. What is missing from a
40
+ * smooth cone is any variation at all, so the field does not have to be the one the scene's
41
+ * own motes use, and it deliberately does not read a clock: the offset is a position the
42
+ * caller supplies, so a consumer that evaluates arbitrary instants out of order reproduces
43
+ * the same frame every time. That is the same rule the wind field is under.
44
+ * - **`uSunShadow`** cuts the volume where the sun does not reach, sampling the directional
45
+ * map the surfaces below are already shaded by. It is what makes a shaft carry the bars of
46
+ * the window it came through, and without it a barred floor under a smooth shaft is two
47
+ * halves of one frame disagreeing about the same light.
48
+ */
49
+ export declare const LIGHT_VOLUME_VERT = "#version 300 es\nprecision highp float;\n\nlayout(location = 0) in vec3 aPosition;\nlayout(location = 1) in vec3 aNormal;\nlayout(location = 2) in vec3 aColor;\nlayout(location = 3) in float aEmissive;\n\nuniform mat4 uViewProj;\nuniform mat4 uModel;\n\nout vec3 vColor;\nout float vEnergy;\nout vec3 vNormal;\nout vec3 vWorldPos;\n/**\n * The position in the volume's own space, which is where its shape is known.\n *\n * The falloffs along the axis and away from it are the two things that make this read as\n * light rather than as a pane, and both are smooth functions of *where in the volume* a\n * fragment is. There is no way to author them into the geometry: MeshBuilder states one\n * emissive per quad, so a gradient built that way is a staircase, and the first version of\n * this beam was eight steps a pane trying to hide that. A local position costs one varying\n * and gives both gradients per pixel.\n */\nout vec3 vLocal;\n\nvoid main() {\n vec4 world = uModel * vec4(aPosition, 1.0);\n vWorldPos = world.xyz;\n vLocal = aPosition;\n /*\n * The normal is rotated by the model matrix without being corrected for scale. A light\n * volume is placed by a rigid transform and a uniform scale, which leaves a normal pointing\n * where it was; the inverse transpose exists for non-uniform scale, and paying for one here\n * would be describing a case this pass does not have.\n */\n vNormal = mat3(uModel) * aNormal;\n vColor = aColor;\n vEnergy = aEmissive;\n gl_Position = uViewProj * world;\n}\n";
50
+ /** What the light volume program is built with. See `flatFrag` for why this is a permutation. */
51
+ export interface LightVolumeShaderOptions {
52
+ /**
53
+ * Whether the sun-shadow lookup is compiled in at all.
54
+ *
55
+ * A profile with directional shadows off has no map to read, and three `sampler2D`
56
+ * declarations it can never reach are three the driver is handed anyway. The same
57
+ * reasoning as the flat shader's permutation, at a twentieth of the scale.
58
+ */
59
+ readonly directionalShadows: boolean;
60
+ }
61
+ export declare function lightVolumeFrag(options: LightVolumeShaderOptions): string;