@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,196 @@
1
+ import { mat4 } from 'gl-matrix';
2
+ import { decalScissor } from './decalProjector.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 { SSR_RESOLVE_FRAG } from './shaders/ssrResolve.js';
7
+ import { SSR_TRACE_FRAG } from './shaders/ssrTrace.js';
8
+ /**
9
+ * Screen-space reflection on WebGL2: a scissored trace per surface, then one composite.
10
+ *
11
+ * **The trace writes into a target of its own and that is not an optimisation.** It samples the
12
+ * finished scene colour to find out what a ray hit, so writing into the scene would be a feedback
13
+ * loop — `GL_INVALID_OPERATION` once per draw and undefined rasterisation, which `OitPass` records
14
+ * paying for. One extra full-frame attachment buys the separation, and it also makes several
15
+ * reflective surfaces accumulate as premultiplied layers rather than as independent guesses.
16
+ *
17
+ * **Two passes, and the second is one fetch.** The composite is done by the blend state:
18
+ * `(ONE, ONE_MINUS_SRC_ALPHA)` against premultiplied texels is `over`, so the resolve never samples
19
+ * the colour it is compositing onto either.
20
+ */
21
+ export class SsrPass {
22
+ gl;
23
+ floatColor;
24
+ trace;
25
+ traceUniforms;
26
+ resolve;
27
+ resolveUniforms;
28
+ vao;
29
+ reflection = null;
30
+ framebuffer = null;
31
+ width = 0;
32
+ height = 0;
33
+ /** `inverse(viewProjection) * DEPTH_01_TO_CLIP`, rebuilt once a frame rather than per surface. */
34
+ depthToWorld = new Float32Array(16);
35
+ scissor = new Int32Array(4);
36
+ constructor(gl,
37
+ /**
38
+ * Whether the scene it reflects is a float target.
39
+ *
40
+ * The reflection buffer matches it. A half-float scene composited through an eight-bit
41
+ * reflection would clip every highlight the reflection carries, which is exactly the part of a
42
+ * scene that shows in a wet floor.
43
+ */
44
+ floatColor) {
45
+ this.gl = gl;
46
+ this.floatColor = floatColor;
47
+ this.trace = compileProgram(gl, FULLSCREEN_VERT, SSR_TRACE_FRAG, 'ssrTrace');
48
+ this.traceUniforms = uniformLocations(gl, this.trace, 'ssrTrace');
49
+ this.resolve = compileProgram(gl, FULLSCREEN_VERT, SSR_RESOLVE_FRAG, 'ssrResolve');
50
+ this.resolveUniforms = uniformLocations(gl, this.resolve, 'ssrResolve');
51
+ const vao = gl.createVertexArray();
52
+ if (vao === null)
53
+ throw new Error('SsrPass: createVertexArray failed');
54
+ this.vao = vao;
55
+ }
56
+ ensureSize(width, height) {
57
+ const { gl } = this;
58
+ if (this.width === width && this.height === height)
59
+ return;
60
+ this.width = width;
61
+ this.height = height;
62
+ /* Unit 0, chosen rather than inherited: `bindTexture` binds to whichever unit is active, and
63
+ the renderer leaves that wherever its last pass finished. `OitPass` records what leaving it
64
+ there cost — a feedback loop reported once per draw. */
65
+ gl.activeTexture(gl.TEXTURE0);
66
+ if (this.reflection === null)
67
+ this.reflection = gl.createTexture();
68
+ gl.bindTexture(gl.TEXTURE_2D, this.reflection);
69
+ gl.texImage2D(gl.TEXTURE_2D, 0, this.floatColor ? gl.RGBA16F : gl.RGBA8, width, height, 0, gl.RGBA, this.floatColor ? gl.HALF_FLOAT : gl.UNSIGNED_BYTE, null);
70
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
71
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
72
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
73
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
74
+ if (this.framebuffer === null)
75
+ this.framebuffer = gl.createFramebuffer();
76
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
77
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.reflection, 0);
78
+ /* No depth: the trace decides everything from the depth it *samples*, and an attachment here
79
+ would be one more thing to be caught reading. */
80
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
81
+ /* And released, so nothing carries this target into a sampler of another pass. */
82
+ gl.bindTexture(gl.TEXTURE_2D, null);
83
+ }
84
+ /**
85
+ * March every recorded surface into the reflection buffer.
86
+ *
87
+ * `viewProjection` is the **raw** camera matrix. `DEPTH_01_TO_CLIP` turns a stored depth back
88
+ * into the clip space that matrix was built in, and the trace projects its samples back through
89
+ * the same matrix — pairing either with the clip-corrected one applies the remap twice.
90
+ */
91
+ traceReflections(queue, scene, depth, viewProjection, eye, width, height, edgeFade) {
92
+ if (queue.length === 0)
93
+ return;
94
+ const { gl } = this;
95
+ const u = this.traceUniforms;
96
+ this.ensureSize(width, height);
97
+ mat4.invert(this.depthToWorld, viewProjection);
98
+ mat4.multiply(this.depthToWorld, this.depthToWorld, DEPTH_01_TO_CLIP);
99
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
100
+ gl.viewport(0, 0, width, height);
101
+ gl.disable(gl.DEPTH_TEST);
102
+ gl.depthMask(false);
103
+ gl.disable(gl.CULL_FACE);
104
+ /* Cleared whole, then scissored: the resolve reads every pixel and an uncleared one outside
105
+ every box would composite last frame's reflection over this frame's scene. */
106
+ gl.disable(gl.SCISSOR_TEST);
107
+ gl.clearBufferfv(gl.COLOR, 0, [0, 0, 0, 0]);
108
+ gl.enable(gl.BLEND);
109
+ /* Premultiplied `over`, so two overlapping surfaces layer rather than replace. */
110
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
111
+ gl.enable(gl.SCISSOR_TEST);
112
+ gl.useProgram(this.trace);
113
+ gl.bindVertexArray(this.vao);
114
+ gl.activeTexture(gl.TEXTURE0);
115
+ gl.bindTexture(gl.TEXTURE_2D, depth);
116
+ gl.uniform1i(u['uSsrDepth'] ?? null, 0);
117
+ gl.activeTexture(gl.TEXTURE1);
118
+ gl.bindTexture(gl.TEXTURE_2D, scene);
119
+ gl.uniform1i(u['uSsrScene'] ?? null, 1);
120
+ gl.uniformMatrix4fv(u['uSsrDepthToWorld'] ?? null, false, this.depthToWorld);
121
+ /* No Y flip on this backend: `gl.scissor` and the framebuffer both count rows from the bottom,
122
+ which is the space the raw matrix already emits. See `CLIP_Y_FLIP`. */
123
+ gl.uniformMatrix4fv(u['uSsrViewProj'] ?? null, false, viewProjection);
124
+ gl.uniform3f(u['uSsrEye'] ?? null, eye[0] ?? 0, eye[1] ?? 0, eye[2] ?? 0);
125
+ gl.uniform1f(u['uSsrEdgeFade'] ?? null, edgeFade);
126
+ queue.replay((surface) => {
127
+ if (!decalScissor(viewProjection, surface.surfaceToWorld, width, height, false, this.scissor)) {
128
+ return;
129
+ }
130
+ gl.scissor(this.scissor[0] ?? 0, this.scissor[1] ?? 0, this.scissor[2] ?? 0, this.scissor[3] ?? 0);
131
+ gl.uniformMatrix4fv(u['uWorldToSurface'] ?? null, false, surface.worldToSurface);
132
+ gl.uniform3fv(u['uSsrAxis'] ?? null, surface.axis);
133
+ gl.uniform3fv(u['uSsrTint'] ?? null, surface.tint);
134
+ gl.uniform1f(u['uSsrStrength'] ?? null, surface.strength);
135
+ gl.uniform1f(u['uSsrFacingCos'] ?? null, surface.facingCos);
136
+ gl.uniform1f(u['uSsrReach'] ?? null, surface.reachM);
137
+ gl.uniform1f(u['uSsrThickness'] ?? null, surface.thicknessM);
138
+ gl.uniform1f(u['uSsrSteps'] ?? null, surface.steps);
139
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
140
+ });
141
+ gl.disable(gl.SCISSOR_TEST);
142
+ gl.scissor(0, 0, width, height);
143
+ gl.bindVertexArray(null);
144
+ gl.activeTexture(gl.TEXTURE1);
145
+ gl.bindTexture(gl.TEXTURE_2D, null);
146
+ gl.activeTexture(gl.TEXTURE0);
147
+ gl.bindTexture(gl.TEXTURE_2D, null);
148
+ gl.disable(gl.BLEND);
149
+ gl.depthMask(true);
150
+ gl.enable(gl.DEPTH_TEST);
151
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
152
+ }
153
+ /** Composite what the trace found over whatever framebuffer is bound. */
154
+ resolveReflections() {
155
+ const { gl } = this;
156
+ if (this.reflection === null)
157
+ return;
158
+ gl.disable(gl.DEPTH_TEST);
159
+ gl.depthMask(false);
160
+ gl.disable(gl.CULL_FACE);
161
+ gl.enable(gl.BLEND);
162
+ /* Premultiplied `over`: the trace already multiplied its colour by the coverage it found. */
163
+ gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
164
+ gl.useProgram(this.resolve);
165
+ gl.activeTexture(gl.TEXTURE0);
166
+ gl.bindTexture(gl.TEXTURE_2D, this.reflection);
167
+ gl.uniform1i(this.resolveUniforms['uSsrReflection'] ?? null, 0);
168
+ gl.bindVertexArray(this.vao);
169
+ gl.drawArrays(gl.TRIANGLES, 0, 3);
170
+ gl.bindVertexArray(null);
171
+ /*
172
+ * **Released, and `OitPass` says why at length.** A binding outlives the frame it was made in,
173
+ * so unit 0 would keep the reflection buffer — which the *next* frame then attaches as its own
174
+ * target while a program still declares a sampler on that unit. That is a feedback loop,
175
+ * reported once per draw and rasterising something undefined.
176
+ */
177
+ gl.bindTexture(gl.TEXTURE_2D, null);
178
+ gl.disable(gl.BLEND);
179
+ gl.depthMask(true);
180
+ gl.enable(gl.DEPTH_TEST);
181
+ }
182
+ dispose() {
183
+ const { gl } = this;
184
+ if (this.reflection !== null)
185
+ gl.deleteTexture(this.reflection);
186
+ if (this.framebuffer !== null)
187
+ gl.deleteFramebuffer(this.framebuffer);
188
+ gl.deleteProgram(this.trace);
189
+ gl.deleteProgram(this.resolve);
190
+ gl.deleteVertexArray(this.vao);
191
+ this.reflection = null;
192
+ this.framebuffer = null;
193
+ this.width = 0;
194
+ this.height = 0;
195
+ }
196
+ }
@@ -0,0 +1,52 @@
1
+ /**
2
+ * A bounded, roughly horizontal sheet, described by the cross-sections it is
3
+ * swept through, and the triangles that cover it.
4
+ *
5
+ * Cross-sections rather than rectangles, because the things this describes
6
+ * follow a route: a channel of water beside a path, the underside of a bridge
7
+ * over it. A chain of independent rectangles laid along a curve leaves a notch
8
+ * at every joint — small, and exactly the kind of small that reads as broken
9
+ * once light is crawling across it. Consecutive spans share their edge, so a
10
+ * curving sheet is closed by construction.
11
+ *
12
+ * Nothing here knows what a sheet is *for*. It takes numbers.
13
+ */
14
+ /** One cross-section: the two ends of a straight edge across the sheet. */
15
+ export interface SheetSpan {
16
+ x0: number;
17
+ z0: number;
18
+ x1: number;
19
+ z1: number;
20
+ /** Resting height of the sheet at this cross-section. */
21
+ y: number;
22
+ }
23
+ export interface SheetMesh {
24
+ /** Resting position, 3 floats per vertex. A shader may displace it. */
25
+ positions: Float32Array;
26
+ /**
27
+ * Where the vertex sits inside its own sheet, 0..1 along and across.
28
+ *
29
+ * So a shader can dissolve its own boundary. It reaches 0 and 1 exactly at the
30
+ * outermost vertices rather than approaching them, which is the lesson the
31
+ * ocean's rim already paid for: a fade that only nearly closes leaves a hard
32
+ * edge, and a hard edge reads as geometry rather than as water.
33
+ */
34
+ locals: Float32Array;
35
+ /** Two numbers carried from each sheet onto every one of its vertices. */
36
+ params: Float32Array;
37
+ vertexCount: number;
38
+ }
39
+ /**
40
+ * Cover each sheet in cells no coarser than `cellM`.
41
+ *
42
+ * Vertices are duplicated at cell boundaries rather than shared. That is safe
43
+ * here in a way it would not be in general: every displacement applied to this
44
+ * mesh is a pure function of the resting position, so two vertices at the same
45
+ * place move to the same place and the seam cannot open.
46
+ *
47
+ * `params` is called once per sheet at build time — never per frame — and writes
48
+ * the two floats each of that sheet's vertices carries.
49
+ */
50
+ export declare function buildSheets<T extends {
51
+ spans: readonly SheetSpan[];
52
+ }>(sheets: readonly T[], cellM: number, params: (sheet: T, out: Float32Array) => void): SheetMesh;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * A bounded, roughly horizontal sheet, described by the cross-sections it is
3
+ * swept through, and the triangles that cover it.
4
+ *
5
+ * Cross-sections rather than rectangles, because the things this describes
6
+ * follow a route: a channel of water beside a path, the underside of a bridge
7
+ * over it. A chain of independent rectangles laid along a curve leaves a notch
8
+ * at every joint — small, and exactly the kind of small that reads as broken
9
+ * once light is crawling across it. Consecutive spans share their edge, so a
10
+ * curving sheet is closed by construction.
11
+ *
12
+ * Nothing here knows what a sheet is *for*. It takes numbers.
13
+ */
14
+ /**
15
+ * One vertex, bilinearly placed between two cross-sections.
16
+ *
17
+ * @param along 0 at span `a`, 1 at span `b`.
18
+ * @param across 0 at the spans' first end, 1 at their second.
19
+ * @param joint index of `a` within the sheet, and how many joints it has, so the
20
+ * local coordinate measures the whole sheet rather than this piece of it.
21
+ */
22
+ function emitVertex(into, a, b, along, across, joint, joints) {
23
+ const ax = a.x0 + (a.x1 - a.x0) * across;
24
+ const az = a.z0 + (a.z1 - a.z0) * across;
25
+ const bx = b.x0 + (b.x1 - b.x0) * across;
26
+ const bz = b.z0 + (b.z1 - b.z0) * across;
27
+ into.positions.push(ax + (bx - ax) * along, a.y + (b.y - a.y) * along, az + (bz - az) * along);
28
+ into.locals.push((joint + along) / joints, across);
29
+ into.params.push(into.param0, into.param1);
30
+ }
31
+ /**
32
+ * Cover each sheet in cells no coarser than `cellM`.
33
+ *
34
+ * Vertices are duplicated at cell boundaries rather than shared. That is safe
35
+ * here in a way it would not be in general: every displacement applied to this
36
+ * mesh is a pure function of the resting position, so two vertices at the same
37
+ * place move to the same place and the seam cannot open.
38
+ *
39
+ * `params` is called once per sheet at build time — never per frame — and writes
40
+ * the two floats each of that sheet's vertices carries.
41
+ */
42
+ export function buildSheets(sheets, cellM, params) {
43
+ const into = {
44
+ positions: [],
45
+ locals: [],
46
+ params: [],
47
+ param0: 0,
48
+ param1: 0,
49
+ };
50
+ const scratch = new Float32Array(2);
51
+ const cell = cellM > 0 ? cellM : 0;
52
+ for (const sheet of sheets) {
53
+ const spans = sheet.spans;
54
+ if (cell <= 0 || spans.length < 2)
55
+ continue;
56
+ scratch[0] = 0;
57
+ scratch[1] = 0;
58
+ params(sheet, scratch);
59
+ into.param0 = scratch[0] ?? 0;
60
+ into.param1 = scratch[1] ?? 0;
61
+ const joints = spans.length - 1;
62
+ for (let s = 0; s < joints; s++) {
63
+ const a = spans[s];
64
+ const b = spans[s + 1];
65
+ /*
66
+ * How finely this piece has to be cut: the longest edge on each axis, so a
67
+ * widening channel is sampled by its wide end rather than its narrow one.
68
+ */
69
+ const alongLength = Math.max(Math.hypot(b.x0 - a.x0, b.z0 - a.z0), Math.hypot(b.x1 - a.x1, b.z1 - a.z1));
70
+ const acrossLength = Math.max(Math.hypot(a.x1 - a.x0, a.z1 - a.z0), Math.hypot(b.x1 - b.x0, b.z1 - b.z0));
71
+ if (!(alongLength > 0) || !(acrossLength > 0))
72
+ continue;
73
+ const alongCells = Math.max(1, Math.ceil(alongLength / cell));
74
+ const acrossCells = Math.max(1, Math.ceil(acrossLength / cell));
75
+ for (let i = 0; i < alongCells; i++) {
76
+ const t0 = i / alongCells;
77
+ const t1 = (i + 1) / alongCells;
78
+ for (let j = 0; j < acrossCells; j++) {
79
+ const s0 = j / acrossCells;
80
+ const s1 = (j + 1) / acrossCells;
81
+ // Two triangles per cell, wound counter-clockwise from above so the
82
+ // sheet's front face is its top.
83
+ emitVertex(into, a, b, t0, s0, s, joints);
84
+ emitVertex(into, a, b, t1, s0, s, joints);
85
+ emitVertex(into, a, b, t1, s1, s, joints);
86
+ emitVertex(into, a, b, t0, s0, s, joints);
87
+ emitVertex(into, a, b, t1, s1, s, joints);
88
+ emitVertex(into, a, b, t0, s1, s, joints);
89
+ }
90
+ }
91
+ }
92
+ }
93
+ return {
94
+ positions: new Float32Array(into.positions),
95
+ locals: new Float32Array(into.locals),
96
+ params: new Float32Array(into.params),
97
+ vertexCount: into.positions.length / 3,
98
+ };
99
+ }
@@ -0,0 +1,197 @@
1
+ /** A GPU image the caller supplies, sampled by the flat shader as surface colour. */
2
+ /**
3
+ * How a texture behaves past its edges and between its texels.
4
+ *
5
+ * Deliberately small. Every knob here is one a tiling world actually needs; anything
6
+ * beyond it — swizzles, borders, compressed formats — is a format decision that
7
+ * belongs to whoever is generating the pixels, not to the surface that shows them.
8
+ */
9
+ /**
10
+ * Everything the flat pass needs to know about a surface, in one call.
11
+ *
12
+ * **Shaped for what comes after it.** ORM is the next map and emissive the one after; both are a
13
+ * field here rather than a fourth and fifth setter, which is the whole reason this replaced
14
+ * `setSurfaceTexture` rather than sitting beside it. A consumer setting four maps in four calls is
15
+ * four chances to forget one, and four resets `bindMeshPass` has to reason about.
16
+ *
17
+ * **Every field is independent.** A material with a `normal` and no `albedo` is a legitimate one —
18
+ * vertex colour with authored normals — and shades as such rather than as no material at all.
19
+ *
20
+ * **Generic over the texture, for the reason `SurfaceTextureHandle` exists.** The two backends have
21
+ * different texture classes and the public API speaks in an opaque handle; parameterising here lets
22
+ * each renderer take its own concrete type while a consumer sees one shape. Defaulted to the
23
+ * WebGL2 class so the common spelling stays `SurfaceMaterial`.
24
+ */
25
+ export interface SurfaceMaterial<Texture = SurfaceTexture> {
26
+ albedo?: Texture | null;
27
+ /**
28
+ * Surface-space directions, turned into world space through the mesh's tangent frame.
29
+ *
30
+ * Read by the flat pass since 2026-08-22, from the attribute at location 10 where the mesh has
31
+ * one and from a per-fragment cotangent frame where it does not. `normalStrength` gates it.
32
+ * See `docs/RENDERING.md` for the normal-map path.
33
+ */
34
+ normal?: Texture | null;
35
+ /**
36
+ * Occlusion in R, roughness in G, metallic in B, in one image.
37
+ *
38
+ * glTF's packing, because that is what an import carries, and one unit for three channels rather
39
+ * than three units for three maps. Sampled linear and never sRGB: these numbers *are* the data.
40
+ */
41
+ orm?: Texture | null;
42
+ /**
43
+ * Where a surface glows, and in what colour.
44
+ *
45
+ * **It modulates the surface's own emission rather than creating it**, which is glTF's rule
46
+ * — emitted colour is `emissiveFactor * emissiveTexture` — and is the one thing about this map
47
+ * that surprises people. A mesh whose `emissive` attribute is 0 emits nothing however bright
48
+ * the image it binds, because there is nothing for the image to scale. An import carries the
49
+ * factor for you: `gltf.ts` puts `max(emissiveFactor)` in the attribute and the factor itself
50
+ * in `emissiveColor`. A procedurally built mesh has to say so the same way it says its colour,
51
+ * which is in vertex data, because that is what makes a whole world one draw call here.
52
+ *
53
+ * Sampled **sRGB**, unlike `normal` and `orm`: this one is a colour a person picked, where
54
+ * those two are numbers. glTF says the same.
55
+ */
56
+ emissive?: Texture | null;
57
+ /** Repeats across the mesh's own UV range, per axis. Applies to every map the material holds. */
58
+ uScale?: number;
59
+ vScale?: number;
60
+ /** Alpha below which a fragment is discarded. See `uAlbedoCutout`. */
61
+ cutout?: number;
62
+ /**
63
+ * How hard the normal map turns the shading normal.
64
+ *
65
+ * **Defaults to 1 when a `normal` is supplied and 0 when it is not**, because binding a map and
66
+ * saying nothing about strength means "use it" rather than "use it at nothing".
67
+ */
68
+ normalStrength?: number;
69
+ /**
70
+ * Scales the ORM map's G channel. glTF's `roughnessFactor`. Default 1.
71
+ *
72
+ * The map *replaces* the mesh's own roughness attribute rather than scaling it, and this is what
73
+ * gives back the scaling. Scaling the attribute was the alternative and it is wrong outside an
74
+ * import: `vertexDefaults.ts` hands an absent roughness **0.4277**, not 1, so every procedurally
75
+ * built mesh would read far glossier than the image it was handed, with nothing in the API to
76
+ * say it would.
77
+ */
78
+ roughnessScale?: number;
79
+ /** Scales the ORM map's B channel. glTF's `metallicFactor`. Default 1. */
80
+ metallicScale?: number;
81
+ /**
82
+ * How much of the ORM map's R channel to apply. glTF's `occlusionTexture.strength`. Default 1.
83
+ *
84
+ * **0 is no occlusion, not full occlusion.** glTF defines it as `1 + strength * (texel - 1)`, so
85
+ * the shader mixes from 1 rather than multiplying — a multiply at 0 would black the surface out,
86
+ * which is the opposite of what the caller asked for.
87
+ */
88
+ occlusionStrength?: number;
89
+ /**
90
+ * Scales the emissive map, per channel. Default 1.
91
+ *
92
+ * The counterpart of `roughnessScale` and `metallicScale`: a factor that multiplies a texture is
93
+ * not a value, and this is where the multiplier lives once an image supplies the shape. A
94
+ * consumer who wants a bound map twice as bright asks here rather than rebuilding the mesh.
95
+ */
96
+ emissiveScale?: readonly [number, number, number];
97
+ }
98
+ export interface SurfaceTextureOptions {
99
+ /**
100
+ * `repeat` tiles the image, `clamp` stretches its edge texels.
101
+ *
102
+ * Repeat is the default because the case this exists for is a wall: one small image
103
+ * covering a large surface, with `uvScale` deciding how often it lands. Clamp is for
104
+ * an image that is a *picture* — a portrait, a sign — where a second copy of it
105
+ * appearing past the edge is a bug rather than a pattern.
106
+ */
107
+ wrap?: 'repeat' | 'clamp';
108
+ /**
109
+ * How the image's values are encoded, so the shader can sample light rather than pixels.
110
+ *
111
+ * `linear` is the default and the old behaviour: the bytes are handed to the shader as
112
+ * they are. That is right for a mask, a height field, anything whose numbers *are* the
113
+ * data.
114
+ *
115
+ * `srgb` is right for anything that was authored to be looked at — a photo, a painted
116
+ * canvas, a biome tile. Those bytes are display values, and shading maths is linear, so
117
+ * multiplying a light into them without decoding first is a category error: mid-greys
118
+ * come out roughly twice as bright as they should, and the mistake is invisible until an
119
+ * output transform is applied and everything blows out at once. The GPU decodes
120
+ * `SRGB8_ALPHA8` in the sampler, so this costs nothing per fetch and, unlike decoding in
121
+ * the shader, it happens *before* filtering — which is the only place it is correct.
122
+ */
123
+ colorSpace?: 'linear' | 'srgb';
124
+ /**
125
+ * How a texel is chosen when the image is magnified: smoothed between texels, or taken whole.
126
+ *
127
+ * **`linear` is the default and is every surface that shipped before this**, which is right for
128
+ * anything photographic: a wall, a painted canvas, a biome tile, where the texel grid is an
129
+ * artefact of resolution rather than the subject.
130
+ *
131
+ * `nearest` is for an image whose *pixels are the subject* — pixel art, an icon atlas, a
132
+ * hand-authored tile. **Reported by a consumer whose block atlas is exactly that**: linear
133
+ * magnification turns an authored tile into a smear as the camera approaches, and there was no
134
+ * way to ask for anything else. They composed their atlas with `imageSmoothingEnabled = false`
135
+ * and kept tiles at twice the resolution they wanted, and neither touches magnification — the
136
+ * smoothing happens in the sampler, after everything a caller controls.
137
+ *
138
+ * **Minification still blends between mip levels**, and that is not the option being ignored. A
139
+ * tiled floor at a grazing angle minifies far past one texel per pixel, which is what mips exist
140
+ * for; taking the nearest *level* as well would trade a smear for a visible pop as the camera
141
+ * pulls back. So the choice applies where it was asked about, and within a level either way.
142
+ *
143
+ * `@driftengine/ui2d` takes the same option and defaults it the other way, because a sprite sheet
144
+ * is usually pixel art and a world surface usually is not.
145
+ */
146
+ filter?: 'linear' | 'nearest';
147
+ /**
148
+ * Build a mip chain. On by default, and it is not a quality preference.
149
+ *
150
+ * A tiled surface seen at a grazing angle — which is every floor and every corridor
151
+ * wall — minifies far past one texel per pixel, and without mips that undersampling
152
+ * is aliasing that *crawls* as the camera moves. It is the single most visible
153
+ * artefact a textured world can have. Off is for a texture drawn at roughly its own
154
+ * size, where the chain is memory spent on levels nothing will sample.
155
+ */
156
+ mipmap?: boolean;
157
+ /**
158
+ * Anisotropic samples, when the extension is present. 1 disables it.
159
+ *
160
+ * Mips fix the crawling and cost sharpness: a floor stretching to the horizon picks
161
+ * its mip from the *worse* of the two axes, so it blurs along the one that was still
162
+ * well sampled. Anisotropy is the standard repair, it is cheap at these sizes, and
163
+ * on a machine without the extension the clamp below silently leaves it at 1.
164
+ */
165
+ anisotropy?: number;
166
+ }
167
+ /**
168
+ * An image uploaded once and bound per draw.
169
+ *
170
+ * The engine ships no image assets and fetches nothing — that payload rule is intact
171
+ * and this does not weaken it. What it takes is a `TexImageSource` the *consumer*
172
+ * already has: a canvas it generated procedurally at runtime, an `ImageBitmap` it
173
+ * decoded, a video frame. The engine owns the GPU object and the sampler state; where
174
+ * the pixels came from is the caller's business and stays that way.
175
+ */
176
+ export declare class SurfaceTexture {
177
+ private texture;
178
+ private readonly mipmapped;
179
+ /** Whether the sampler decodes sRGB on fetch. See `colorSpace`. */
180
+ private readonly srgb;
181
+ constructor(gl: WebGL2RenderingContext, source: TexImageSource, options?: SurfaceTextureOptions);
182
+ /**
183
+ * Replace the pixels, keeping the GPU object and its sampler state.
184
+ *
185
+ * For a source that changes — a canvas being redrawn, a decoded frame. Re-uploading
186
+ * beats constructing a second texture because the binding the caller already handed
187
+ * to a draw stays valid, and because a texture created per frame is a leak in every
188
+ * case where the caller forgets the matching dispose.
189
+ *
190
+ * Not a hot path: it re-uploads the whole image and regenerates the chain. A caller
191
+ * doing this every frame at any size wants to know that it costs what it costs.
192
+ */
193
+ update(gl: WebGL2RenderingContext, source: TexImageSource): void;
194
+ /** Bind to a unit for sampling. Engine-internal: the renderer owns unit assignment. */
195
+ bind(gl: WebGL2RenderingContext, unit: number): void;
196
+ dispose(gl: WebGL2RenderingContext): void;
197
+ }
@@ -0,0 +1,116 @@
1
+ /** A GPU image the caller supplies, sampled by the flat shader as surface colour. */
2
+ const DEFAULT_ANISOTROPY = 4;
3
+ /**
4
+ * An image uploaded once and bound per draw.
5
+ *
6
+ * The engine ships no image assets and fetches nothing — that payload rule is intact
7
+ * and this does not weaken it. What it takes is a `TexImageSource` the *consumer*
8
+ * already has: a canvas it generated procedurally at runtime, an `ImageBitmap` it
9
+ * decoded, a video frame. The engine owns the GPU object and the sampler state; where
10
+ * the pixels came from is the caller's business and stays that way.
11
+ */
12
+ export class SurfaceTexture {
13
+ texture;
14
+ mipmapped;
15
+ /** Whether the sampler decodes sRGB on fetch. See `colorSpace`. */
16
+ srgb;
17
+ constructor(gl, source, options = {}) {
18
+ const texture = gl.createTexture();
19
+ if (texture === null)
20
+ throw new Error('SurfaceTexture: createTexture failed');
21
+ this.texture = texture;
22
+ this.mipmapped = options.mipmap ?? true;
23
+ this.srgb = (options.colorSpace ?? 'linear') === 'srgb';
24
+ const wrap = (options.wrap ?? 'repeat') === 'repeat' ? gl.REPEAT : gl.CLAMP_TO_EDGE;
25
+ gl.bindTexture(gl.TEXTURE_2D, texture);
26
+ /*
27
+ * **Not flipped, and this used to be, which is the bug it is written down for.**
28
+ *
29
+ * The flip was here with a comment saying every source is a 2D drawing surface whose Y
30
+ * runs down from the top-left, so without it "every texture arrives mirrored". That is
31
+ * true of a canvas and **WebGL ignores `UNPACK_FLIP_Y_WEBGL` entirely for an
32
+ * `ImageBitmap`**, which carries its own orientation. So the two source types the same
33
+ * method accepts arrived the opposite way up from each other, and nothing caught it
34
+ * because every canvas-sourced texture in this repository was symmetric under a vertical
35
+ * flip: eroded noise, a radial halo, a sleeve blurred to 24 pixels and back. One consumer
36
+ * painted lettering to a canvas beside a sleeve decoded as a bitmap and the text was
37
+ * upside down.
38
+ *
39
+ * **Made to agree by dropping the flip rather than by extending it**, and the direction
40
+ * is a deliberate choice about blast radius rather than a coin toss: `drftLoader` builds
41
+ * every model texture from an `ImageBitmap`, so flipping bitmaps to match canvases would
42
+ * turn over every painted surface on every loaded model. Dropping it changes only
43
+ * canvas-sourced textures, and every one of those that exists today is symmetric.
44
+ *
45
+ * A caller that was mirroring its own canvas to cancel this must stop.
46
+ */
47
+ gl.texImage2D(gl.TEXTURE_2D, 0, this.srgb ? gl.SRGB8_ALPHA8 : gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
48
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, wrap);
49
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, wrap);
50
+ /* Nearest where the caller said their pixels are the subject; see `filter`. The mip chain is
51
+ still blended between levels, because that is minification and this option is about
52
+ magnification. */
53
+ const nearest = options.filter === 'nearest';
54
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, nearest ? gl.NEAREST : gl.LINEAR);
55
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, this.mipmapped
56
+ ? nearest
57
+ ? gl.NEAREST_MIPMAP_LINEAR
58
+ : gl.LINEAR_MIPMAP_LINEAR
59
+ : nearest
60
+ ? gl.NEAREST
61
+ : gl.LINEAR);
62
+ if (this.mipmapped)
63
+ gl.generateMipmap(gl.TEXTURE_2D);
64
+ applyAnisotropy(gl, options.anisotropy ?? DEFAULT_ANISOTROPY);
65
+ gl.bindTexture(gl.TEXTURE_2D, null);
66
+ }
67
+ /**
68
+ * Replace the pixels, keeping the GPU object and its sampler state.
69
+ *
70
+ * For a source that changes — a canvas being redrawn, a decoded frame. Re-uploading
71
+ * beats constructing a second texture because the binding the caller already handed
72
+ * to a draw stays valid, and because a texture created per frame is a leak in every
73
+ * case where the caller forgets the matching dispose.
74
+ *
75
+ * Not a hot path: it re-uploads the whole image and regenerates the chain. A caller
76
+ * doing this every frame at any size wants to know that it costs what it costs.
77
+ */
78
+ update(gl, source) {
79
+ if (this.texture === null)
80
+ return;
81
+ gl.bindTexture(gl.TEXTURE_2D, this.texture);
82
+ /* Unflipped, matching the constructor. See it for why, and for what it cost. */
83
+ gl.texImage2D(gl.TEXTURE_2D, 0, this.srgb ? gl.SRGB8_ALPHA8 : gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, source);
84
+ if (this.mipmapped)
85
+ gl.generateMipmap(gl.TEXTURE_2D);
86
+ gl.bindTexture(gl.TEXTURE_2D, null);
87
+ }
88
+ /** Bind to a unit for sampling. Engine-internal: the renderer owns unit assignment. */
89
+ bind(gl, unit) {
90
+ gl.activeTexture(gl.TEXTURE0 + unit);
91
+ gl.bindTexture(gl.TEXTURE_2D, this.texture);
92
+ }
93
+ dispose(gl) {
94
+ if (this.texture === null)
95
+ return;
96
+ gl.deleteTexture(this.texture);
97
+ this.texture = null;
98
+ }
99
+ }
100
+ /**
101
+ * Set anisotropic filtering when the driver offers it, and stay silent when it does not.
102
+ *
103
+ * Silent because the extension is an enhancement with an exact fallback — the same
104
+ * texture, filtered isotropically — so a machine without it renders a slightly softer
105
+ * floor rather than a broken one. Nothing here should fail init over that.
106
+ */
107
+ function applyAnisotropy(gl, requested) {
108
+ if (requested <= 1)
109
+ return;
110
+ const ext = gl.getExtension('EXT_texture_filter_anisotropic') ??
111
+ gl.getExtension('WEBKIT_EXT_texture_filter_anisotropic');
112
+ if (ext === null)
113
+ return;
114
+ const max = gl.getParameter(ext.MAX_TEXTURE_MAX_ANISOTROPY_EXT);
115
+ gl.texParameterf(gl.TEXTURE_2D, ext.TEXTURE_MAX_ANISOTROPY_EXT, Math.min(requested, max));
116
+ }