@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,80 @@
1
+ /**
2
+ * Single-cascade directional shadow map: one depth texture, one extra draw of
3
+ * the static world per update.
4
+ *
5
+ * Filtering belongs to the receiving material shader, so the depth target can
6
+ * stay a single-sample texture shared by every mesh pass.
7
+ *
8
+ * Note this is a depth *render target*, not an art texture: AGENTS.md's
9
+ * "zero textures" rule is about the art direction (no image assets in the
10
+ * payload), and nothing here adds a byte to it.
11
+ */
12
+ import { DEFAULT_RENDER_QUALITY } from './renderQuality.js';
13
+ export class ShadowMap {
14
+ size;
15
+ texture;
16
+ framebuffer;
17
+ constructor(gl, size = DEFAULT_RENDER_QUALITY.directionalShadowMapSize) {
18
+ this.size = size;
19
+ const texture = gl.createTexture();
20
+ if (texture === null)
21
+ throw new Error('ShadowMap: createTexture failed');
22
+ this.texture = texture;
23
+ gl.bindTexture(gl.TEXTURE_2D, texture);
24
+ gl.texStorage2D(gl.TEXTURE_2D, 1, gl.DEPTH_COMPONENT24, size, size);
25
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
26
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
27
+ // Clamp so anything outside the light frustum samples the border and is
28
+ // treated as lit, rather than wrapping into a spurious shadow.
29
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
30
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
31
+ const framebuffer = gl.createFramebuffer();
32
+ if (framebuffer === null)
33
+ throw new Error('ShadowMap: createFramebuffer failed');
34
+ this.framebuffer = framebuffer;
35
+ gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
36
+ gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.TEXTURE_2D, texture, 0);
37
+ // Depth-only: without this WebGL expects a colour attachment.
38
+ gl.drawBuffers([gl.NONE]);
39
+ gl.readBuffer(gl.NONE);
40
+ const status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
41
+ if (status !== gl.FRAMEBUFFER_COMPLETE) {
42
+ /*
43
+ * A lost context reports every attachment unusable, and that is not a
44
+ * misconfiguration the caller can fix — see planarReflection.ts. Init still throws,
45
+ * because the context cannot be lost before it exists.
46
+ */
47
+ if (gl.isContextLost())
48
+ return;
49
+ throw new Error(`ShadowMap: framebuffer incomplete (0x${status.toString(16)})`);
50
+ }
51
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
52
+ gl.bindTexture(gl.TEXTURE_2D, null);
53
+ }
54
+ /** Bind as the render target and clear. Caller then draws the casters. */
55
+ begin(gl) {
56
+ gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
57
+ gl.viewport(0, 0, this.size, this.size);
58
+ gl.clear(gl.DEPTH_BUFFER_BIT);
59
+ /*
60
+ * Store the face nearest the sun. Culling front faces stores the far side
61
+ * and moves a box or limb through its own thickness, which is exactly the
62
+ * detached-shadow failure. A small slope-aware raster offset separates the
63
+ * stored caster from its receiver without moving the receiver differently
64
+ * on each face; receiver-plane compensation handles the PCF taps.
65
+ */
66
+ gl.enable(gl.CULL_FACE);
67
+ gl.cullFace(gl.BACK);
68
+ gl.enable(gl.POLYGON_OFFSET_FILL);
69
+ gl.polygonOffset(1.1, 4);
70
+ }
71
+ end(gl) {
72
+ gl.disable(gl.POLYGON_OFFSET_FILL);
73
+ gl.cullFace(gl.BACK);
74
+ gl.bindFramebuffer(gl.FRAMEBUFFER, null);
75
+ }
76
+ dispose(gl) {
77
+ gl.deleteFramebuffer(this.framebuffer);
78
+ gl.deleteTexture(this.texture);
79
+ }
80
+ }
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Where a shot puts the camera, and what it frames.
3
+ *
4
+ * Pure: a shot plus a subject pose plus how far into the shot it is, in and a
5
+ * placement out. No state, no smoothing, no collision — those belong to the rig
6
+ * (`cinematicCamera.ts`), and keeping them apart is what lets the rig evaluate
7
+ * the *same* shot at two poses in a frame, which is how it learns the speed its
8
+ * target is travelling at instead of trailing behind it.
9
+ *
10
+ * Game-agnostic, like the rig: a shot is a placement rule and a subject.
11
+ * Nothing here knows what a character is.
12
+ */
13
+ export type ShotKind = 'chase' | 'lowWide' | 'orbit' | 'flyby' | 'overhead' | 'lookAt';
14
+ export interface ShotParams {
15
+ readonly kind: ShotKind;
16
+ /** How far the camera sits from its subject, in metres. */
17
+ readonly distance: number;
18
+ /** How high above it. */
19
+ readonly height: number;
20
+ readonly fovDeg: number;
21
+ /** Radians per second, for `orbit`. */
22
+ readonly orbitRate?: number;
23
+ /**
24
+ * How long this shot is going to hold, in seconds, when the caller knows.
25
+ *
26
+ * Only motion *within* a shot needs it, and only to know where the end is so
27
+ * it can arrive there rather than being cut off mid-travel. An `orbit` given a
28
+ * hold eases across the whole of it; one without eases in and then keeps its
29
+ * rate, because inventing a duration would be worse than not having one.
30
+ */
31
+ readonly holdSec?: number;
32
+ /**
33
+ * A fixed world point. `lookAt` frames it; `flyby` uses it as the station to
34
+ * shoot from. Ignored by the others.
35
+ */
36
+ readonly anchor?: readonly [number, number, number];
37
+ }
38
+ /** Where the subject is and which way it faces. Caller-owned and mutated in place. */
39
+ export interface SubjectPose {
40
+ x: number;
41
+ y: number;
42
+ z: number;
43
+ yaw: number;
44
+ }
45
+ /** The answer: caller-owned, written in place, never allocated per frame. */
46
+ export interface ShotPlacement {
47
+ /** Where the shot wants the camera, before smoothing and before collision. */
48
+ wantX: number;
49
+ wantY: number;
50
+ wantZ: number;
51
+ /** What it wants in the middle of frame. */
52
+ lookX: number;
53
+ lookY: number;
54
+ lookZ: number;
55
+ fovDeg: number;
56
+ }
57
+ export declare function createShotPlacement(): ShotPlacement;
58
+ /**
59
+ * The station a `flyby` shoots from, when the shot did not name one.
60
+ *
61
+ * Split out because the station is captured once, on the cut, and then held: a
62
+ * flyby that follows is a chase cam, and the whole point is a camera the world
63
+ * moves past.
64
+ */
65
+ export declare function flybyStation(shot: ShotParams, pose: SubjectPose, out: [number, number, number]): void;
66
+ /**
67
+ * Place `shot` for a subject at `pose`, `ageSec` into the shot.
68
+ *
69
+ * `station` is only read by `flyby`; pass the rig's held station.
70
+ */
71
+ export declare function placeShot(shot: ShotParams, pose: SubjectPose, ageSec: number, station: readonly number[], out: ShotPlacement): void;
72
+ /**
73
+ * Clamp a shot parameter into something a camera can use.
74
+ *
75
+ * Shots are produced by a director working from measured data — a run that
76
+ * lasted no time, an anchor at the origin — and a NaN reaching a view matrix
77
+ * blanks the entire frame without raising anything, which is the worst way for a
78
+ * bad number to fail.
79
+ */
80
+ export declare function shotParam(value: number | undefined, fallback: number, min: number, max: number): number;
@@ -0,0 +1,183 @@
1
+ import { clamp } from '../math/scalar.js';
2
+ /**
3
+ * How far a `lookAt` shot's aim may sit from its subject, as a share of the shot's own
4
+ * camera distance.
5
+ *
6
+ * A *share of the gap* was the first attempt and it is wrong for the case that matters:
7
+ * a subject thirty metres past its anchor, with even a modest share left behind, pulls the
8
+ * aim further back than the camera stands — so the shot looks the wrong way down its own
9
+ * axis and the subject is behind the lens. Clamping the offset in metres instead cannot do
10
+ * that, because it is measured against the distance the camera is placed at.
11
+ *
12
+ * At half, the aim is never more than half the camera's distance from the subject, which
13
+ * keeps them near the middle of frame at any separation. While the two are closer than
14
+ * that the aim lands on the anchor exactly, which is the composition the shot exists for.
15
+ */
16
+ const LOOK_AT_ANCHOR_PULL = 0.5;
17
+ export function createShotPlacement() {
18
+ return { wantX: 0, wantY: 0, wantZ: 0, lookX: 0, lookY: 0, lookZ: 0, fovDeg: 70 };
19
+ }
20
+ /**
21
+ * How long an orbit with no stated hold spends getting up to speed.
22
+ *
23
+ * Long enough to read as a camera being pushed rather than switched on, short
24
+ * enough that a two-second shot still travels. A stated hold is always better —
25
+ * it gets an ease at *both* ends — and the director supplies one.
26
+ */
27
+ const ORBIT_EASE_SEC = 1.2;
28
+ /**
29
+ * The station a `flyby` shoots from, when the shot did not name one.
30
+ *
31
+ * Split out because the station is captured once, on the cut, and then held: a
32
+ * flyby that follows is a chase cam, and the whole point is a camera the world
33
+ * moves past.
34
+ */
35
+ export function flybyStation(shot, pose, out) {
36
+ const anchor = shot.anchor;
37
+ if (anchor !== undefined) {
38
+ out[0] = anchor[0] ?? 0;
39
+ out[1] = anchor[1] ?? 0;
40
+ out[2] = anchor[2] ?? 0;
41
+ return;
42
+ }
43
+ const distance = shotParam(shot.distance, 6, 0.5, 400);
44
+ const height = shotParam(shot.height, 2, -50, 200);
45
+ out[0] = pose.x + Math.cos(pose.yaw) * distance;
46
+ out[1] = pose.y + height;
47
+ out[2] = pose.z + Math.sin(pose.yaw) * distance;
48
+ }
49
+ /**
50
+ * Place `shot` for a subject at `pose`, `ageSec` into the shot.
51
+ *
52
+ * `station` is only read by `flyby`; pass the rig's held station.
53
+ */
54
+ export function placeShot(shot, pose, ageSec, station, out) {
55
+ const distance = shotParam(shot.distance, 6, 0.5, 400);
56
+ const height = shotParam(shot.height, 2, -50, 200);
57
+ const { x, y, z, yaw } = pose;
58
+ out.fovDeg = shotParam(shot.fovDeg, 70, 20, 140);
59
+ out.wantX = x;
60
+ out.wantY = y + height;
61
+ out.wantZ = z;
62
+ out.lookX = x;
63
+ out.lookY = y;
64
+ out.lookZ = z;
65
+ switch (shot.kind) {
66
+ case 'chase': {
67
+ // Behind the character's own heading, so the shot reads as following.
68
+ out.wantX = x - Math.sin(yaw) * distance;
69
+ out.wantZ = z + Math.cos(yaw) * distance;
70
+ break;
71
+ }
72
+ case 'lowWide': {
73
+ // Across the line of travel and near the ground, so the character crosses
74
+ // frame instead of receding — the shot that sells a gap.
75
+ out.wantX = x + Math.cos(yaw) * distance;
76
+ out.wantZ = z + Math.sin(yaw) * distance;
77
+ break;
78
+ }
79
+ case 'orbit': {
80
+ const rate = shotParam(shot.orbitRate, 0.6, -3, 3);
81
+ const angle = yaw + sweptAngle(rate, ageSec, shot.holdSec);
82
+ out.wantX = x - Math.sin(angle) * distance;
83
+ out.wantZ = z + Math.cos(angle) * distance;
84
+ break;
85
+ }
86
+ case 'overhead': {
87
+ out.wantX = x - Math.sin(yaw) * distance * 0.4;
88
+ out.wantZ = z + Math.cos(yaw) * distance * 0.4;
89
+ break;
90
+ }
91
+ case 'flyby': {
92
+ out.wantX = station[0] ?? 0;
93
+ out.wantY = station[1] ?? 0;
94
+ out.wantZ = station[2] ?? 0;
95
+ break;
96
+ }
97
+ case 'lookAt': {
98
+ /*
99
+ * Frames a fixed point *and* keeps the subject, handing the frame from one to the
100
+ * other as they separate.
101
+ *
102
+ * The fixed point is the reason this shot kind exists — a grapple shot holds on the
103
+ * ring while the character flies at it, and aiming at the character instead loses the thing
104
+ * the moment is about. But it aimed at the anchor and *nothing else*, and an anchor is
105
+ * a place the character arrives at and then leaves. Once they had swung through it they
106
+ * were simply out of shot, for as long as the cut lasted — reported from a replay
107
+ * as framing that loses the subject entirely, because the camera stops following
108
+ * them in that phase.
109
+ *
110
+ * So the aim is a point on the line between them, pulled toward the anchor by a
111
+ * bounded number of metres. While the two are close the aim *is* the anchor, which is
112
+ * the composition the shot was written for; once the character has flown past, the aim
113
+ * stays with them and the ring slides out toward the edge of frame rather than the
114
+ * character leaving it. Nothing needs to know which phase it is in — the geometry says.
115
+ */
116
+ const anchor = shot.anchor;
117
+ if (anchor !== undefined) {
118
+ const ax = anchor[0] ?? 0;
119
+ const ay = anchor[1] ?? 0;
120
+ const az = anchor[2] ?? 0;
121
+ const gap = Math.hypot(x - ax, y - ay, z - az);
122
+ /*
123
+ * Aim from the *subject* toward the anchor, by at most half the camera's distance.
124
+ * Nearer than that and the aim is the anchor itself; further and the anchor slides
125
+ * out toward the edge of frame while the subject stays in the middle of it.
126
+ */
127
+ const pull = Math.min(gap, distance * LOOK_AT_ANCHOR_PULL);
128
+ const k = gap > 1e-6 ? pull / gap : 0;
129
+ out.lookX = x + (ax - x) * k;
130
+ out.lookY = y + (ay - y) * k;
131
+ out.lookZ = z + (az - z) * k;
132
+ }
133
+ out.wantX = x - Math.sin(yaw) * distance;
134
+ out.wantZ = z + Math.cos(yaw) * distance;
135
+ break;
136
+ }
137
+ }
138
+ }
139
+ /**
140
+ * How far an orbit has swept by `ageSec` — eased, not `age x rate`.
141
+ *
142
+ * The linear version was reported, exactly, as looking *straight*: measured at a
143
+ * dead constant 3.82 m/s from the twentieth frame of the shot to the last one,
144
+ * still at full speed at the instant the shot was cut away from. A dolly on
145
+ * rails. Every other shot kind travelled exactly 0.000 m over two seconds with a
146
+ * still character, so this was the only self-motion in the file and the only place
147
+ * the complaint could come from.
148
+ *
149
+ * The **arc is preserved**: `rate x hold` is what a hold sweeps either way, since
150
+ * where an orbit starts and finishes is a composition decision and the ease is
151
+ * only about how it gets there. It peaks half again as fast in the middle, which
152
+ * is the cost of standing still at both ends.
153
+ */
154
+ function sweptAngle(rate, ageSec, holdSec) {
155
+ const hold = holdSec !== undefined && Number.isFinite(holdSec) && holdSec > 0 ? holdSec : 0;
156
+ if (hold > 0) {
157
+ const t = clamp(ageSec / hold, 0, 1);
158
+ return rate * hold * t * t * (3 - 2 * t);
159
+ }
160
+ /*
161
+ * No hold to aim at, so ease in and then keep the rate. This is the integral of
162
+ * `smoothstep(age / EASE)` — which is why the straight part is offset by half
163
+ * the ramp rather than starting from zero, and why the two halves meet with the
164
+ * same speed as well as the same position.
165
+ */
166
+ if (ageSec >= ORBIT_EASE_SEC)
167
+ return rate * (ageSec - ORBIT_EASE_SEC * 0.5);
168
+ const u = ageSec / ORBIT_EASE_SEC;
169
+ return rate * ORBIT_EASE_SEC * (u * u * u - 0.5 * u * u * u * u);
170
+ }
171
+ /**
172
+ * Clamp a shot parameter into something a camera can use.
173
+ *
174
+ * Shots are produced by a director working from measured data — a run that
175
+ * lasted no time, an anchor at the origin — and a NaN reaching a view matrix
176
+ * blanks the entire frame without raising anything, which is the worst way for a
177
+ * bad number to fail.
178
+ */
179
+ export function shotParam(value, fallback, min, max) {
180
+ if (value === undefined || !Number.isFinite(value))
181
+ return fallback;
182
+ return clamp(value, min, max);
183
+ }
@@ -0,0 +1,90 @@
1
+ /**
2
+ * The joint palette's shape: how wide its texture is, how many joints fit, and which unit it takes.
3
+ *
4
+ * **Backend-neutral by the 2026-08-13 rule.** Both backends upload a palette and both need the
5
+ * same three answers, so the decision lives here and only the binding is per-backend. A helper
6
+ * that took a `WebGL2RenderingContext` would be a decision the other backend could not reach, and
7
+ * two implementations of one rule drift.
8
+ *
9
+ * **The palette is a texture and not a `uniform mat4[]`, and the rule that would have barred one
10
+ * does not reach here.** The 2026-08-07 rule governs implicit derivatives in non-uniform control
11
+ * flow — a *fragment*-stage hazard. A vertex stage computes no derivatives, so `texelFetch` there
12
+ * is unconditional and that rule has nothing to say about it.
13
+ *
14
+ * What a uniform array would have cost is the reason: `MAX_VERTEX_UNIFORM_VECTORS` is 256 on the
15
+ * WebGL2 floor and `FLAT_VERT` already spends fifteen, so four vectors a matrix caps a rig at
16
+ * **sixty joints** — under a humanoid with fingers, and on exactly the mid-range hardware the
17
+ * engine hard-gates 60 fps on.
18
+ *
19
+ * What the texture costs is an upload per skinned draw where an array would be a uniform write.
20
+ * What would make it wrong is a profile showing that upload is the limit at a realistic character
21
+ * count; the fix is then one texture holding every character's palette with a per-draw row offset,
22
+ * which is a follow-on rather than a starting point.
23
+ *
24
+ * **A palette belongs to a draw, and what it takes to honour that differs per backend.** WebGL2
25
+ * uploads with `texSubImage2D`, a command in the same stream as the draws around it, so one texture
26
+ * rewritten between two draws separates them by construction. WebGPU's `queue.writeTexture` is
27
+ * ordered on the queue timeline and the frame's encoder is submitted after every upload in it, so
28
+ * the same one texture hands *every* skinned draw of the frame the last palette written — and since
29
+ * a rig carries its placement in its palette, that is every character standing where the last one
30
+ * drawn stands. That backend therefore binds a ring of palettes, one slot per palette a frame sets:
31
+ * `backend/webgpu/skinPaletteRing.ts`. The decision here is one; only the binder differs, per the
32
+ * 2026-08-13 rule.
33
+ */
34
+ /**
35
+ * The palette's texture unit, from the lit pass's own budget.
36
+ *
37
+ * Re-exported rather than declared, because a unit number written twice is a collision waiting to
38
+ * happen and `lightBudget.ts` is where every other unit in this pass is decided. It carries the
39
+ * reason it is not 0.
40
+ */
41
+ export { SKIN_PALETTE_TEXTURE_UNIT } from './lightBudget.ts';
42
+ /**
43
+ * The most joints one palette can hold.
44
+ *
45
+ * WebGL2 guarantees `MAX_TEXTURE_SIZE` of 2048 and promises nothing above it, so a single-row
46
+ * palette holds 2048 / 4 matrices. A humanoid rig is sixty to ninety joints, so this is not a
47
+ * limit anybody meets by accident — but it is stated, refused at construction and named in the
48
+ * error, because a limit a consumer discovers is a defect and a limit they read is a
49
+ * specification.
50
+ *
51
+ * What it costs is that a crowd cannot share one palette. What would make it wrong is a rig above
52
+ * it, and the fix is wrapping onto more rows — which costs one division in the vertex stage and is
53
+ * why it is not the starting point.
54
+ */
55
+ export declare const MAX_JOINTS = 512;
56
+ /** How wide the palette texture is for a rig of this many joints. */
57
+ export declare function paletteTextureWidth(jointCount: number): number;
58
+ /**
59
+ * Refuse a palette that is not whole matrices, naming the length.
60
+ *
61
+ * A caller error with exactly one correct outcome, so it throws rather than warns — and it throws
62
+ * where the palette is handed over rather than where a shader reads a partial matrix and draws a
63
+ * rig folded in on itself.
64
+ */
65
+ export declare function validateSkinPalette(palette: Float32Array): void;
66
+ /**
67
+ * The most morph targets one mesh can carry.
68
+ *
69
+ * Bounded by the weight array in the vertex uniform block rather than by the delta texture, which
70
+ * is why it is small: eight `vec4`-aligned floats is 128 bytes of a block that has fifteen vectors
71
+ * in it already. Eight is what glTF's own tooling emits and what every exporter defaults to.
72
+ *
73
+ * What it costs is a rig wanting nine expressions. What would make it wrong is one, and the fix is
74
+ * a second weight texture rather than a wider block — the block is per draw and the texture is not.
75
+ */
76
+ export declare const MAX_MORPH_TARGETS = 8;
77
+ /**
78
+ * Where one target's delta for one vertex sits in the delta texture.
79
+ *
80
+ * Interleaved by vertex rather than by target — every target of a vertex is adjacent — because the
81
+ * shader reads all of them for one vertex and nothing reads one target across many vertices. That
82
+ * is one cache line instead of `targetCount` of them.
83
+ */
84
+ export declare function morphTexelIndex(vertex: number, target: number, targetCount: number): number;
85
+ /** Refuse a weight array that cannot drive the targets a mesh carries, naming both counts. */
86
+ export declare function validateMorph(weights: Float32Array, targetCount: number): void;
87
+ /** How wide the delta texture is for a mesh of this many vertices and targets. */
88
+ export declare function morphTextureWidth(vertexCount: number, targetCount: number): number;
89
+ /** Rows the delta texture needs, given the width above. */
90
+ export declare function morphTextureRows(vertexCount: number, targetCount: number): number;
@@ -0,0 +1,136 @@
1
+ /**
2
+ * The joint palette's shape: how wide its texture is, how many joints fit, and which unit it takes.
3
+ *
4
+ * **Backend-neutral by the 2026-08-13 rule.** Both backends upload a palette and both need the
5
+ * same three answers, so the decision lives here and only the binding is per-backend. A helper
6
+ * that took a `WebGL2RenderingContext` would be a decision the other backend could not reach, and
7
+ * two implementations of one rule drift.
8
+ *
9
+ * **The palette is a texture and not a `uniform mat4[]`, and the rule that would have barred one
10
+ * does not reach here.** The 2026-08-07 rule governs implicit derivatives in non-uniform control
11
+ * flow — a *fragment*-stage hazard. A vertex stage computes no derivatives, so `texelFetch` there
12
+ * is unconditional and that rule has nothing to say about it.
13
+ *
14
+ * What a uniform array would have cost is the reason: `MAX_VERTEX_UNIFORM_VECTORS` is 256 on the
15
+ * WebGL2 floor and `FLAT_VERT` already spends fifteen, so four vectors a matrix caps a rig at
16
+ * **sixty joints** — under a humanoid with fingers, and on exactly the mid-range hardware the
17
+ * engine hard-gates 60 fps on.
18
+ *
19
+ * What the texture costs is an upload per skinned draw where an array would be a uniform write.
20
+ * What would make it wrong is a profile showing that upload is the limit at a realistic character
21
+ * count; the fix is then one texture holding every character's palette with a per-draw row offset,
22
+ * which is a follow-on rather than a starting point.
23
+ *
24
+ * **A palette belongs to a draw, and what it takes to honour that differs per backend.** WebGL2
25
+ * uploads with `texSubImage2D`, a command in the same stream as the draws around it, so one texture
26
+ * rewritten between two draws separates them by construction. WebGPU's `queue.writeTexture` is
27
+ * ordered on the queue timeline and the frame's encoder is submitted after every upload in it, so
28
+ * the same one texture hands *every* skinned draw of the frame the last palette written — and since
29
+ * a rig carries its placement in its palette, that is every character standing where the last one
30
+ * drawn stands. That backend therefore binds a ring of palettes, one slot per palette a frame sets:
31
+ * `backend/webgpu/skinPaletteRing.ts`. The decision here is one; only the binder differs, per the
32
+ * 2026-08-13 rule.
33
+ */
34
+ /**
35
+ * The palette's texture unit, from the lit pass's own budget.
36
+ *
37
+ * Re-exported rather than declared, because a unit number written twice is a collision waiting to
38
+ * happen and `lightBudget.ts` is where every other unit in this pass is decided. It carries the
39
+ * reason it is not 0.
40
+ */
41
+ export { SKIN_PALETTE_TEXTURE_UNIT } from './lightBudget.js';
42
+ /** Four `rgba32float` texels hold one column-major 4x4. */
43
+ const TEXELS_PER_JOINT = 4;
44
+ /**
45
+ * The most joints one palette can hold.
46
+ *
47
+ * WebGL2 guarantees `MAX_TEXTURE_SIZE` of 2048 and promises nothing above it, so a single-row
48
+ * palette holds 2048 / 4 matrices. A humanoid rig is sixty to ninety joints, so this is not a
49
+ * limit anybody meets by accident — but it is stated, refused at construction and named in the
50
+ * error, because a limit a consumer discovers is a defect and a limit they read is a
51
+ * specification.
52
+ *
53
+ * What it costs is that a crowd cannot share one palette. What would make it wrong is a rig above
54
+ * it, and the fix is wrapping onto more rows — which costs one division in the vertex stage and is
55
+ * why it is not the starting point.
56
+ */
57
+ export const MAX_JOINTS = 512;
58
+ /** How wide the palette texture is for a rig of this many joints. */
59
+ export function paletteTextureWidth(jointCount) {
60
+ if (!Number.isInteger(jointCount) || jointCount < 1) {
61
+ throw new Error(`skin palette: a rig needs at least one joint, got ${jointCount}`);
62
+ }
63
+ if (jointCount > MAX_JOINTS) {
64
+ throw new Error(`skin palette: ${jointCount} joints exceeds the ${MAX_JOINTS} a single-row palette holds. ` +
65
+ `WebGL2 guarantees a texture width of 2048 and four texels carry one matrix, so this is ` +
66
+ `the floor rather than this machine's limit.`);
67
+ }
68
+ return jointCount * TEXELS_PER_JOINT;
69
+ }
70
+ /**
71
+ * Refuse a palette that is not whole matrices, naming the length.
72
+ *
73
+ * A caller error with exactly one correct outcome, so it throws rather than warns — and it throws
74
+ * where the palette is handed over rather than where a shader reads a partial matrix and draws a
75
+ * rig folded in on itself.
76
+ */
77
+ export function validateSkinPalette(palette) {
78
+ if (palette.length % 16 !== 0) {
79
+ throw new Error(`skin palette: ${palette.length} floats is not a whole number of 4x4 matrices (16 each)`);
80
+ }
81
+ const joints = palette.length / 16;
82
+ if (joints < 1 || joints > MAX_JOINTS) {
83
+ throw new Error(`skin palette: ${joints} joints, which is outside 1 to ${MAX_JOINTS}. See MAX_JOINTS.`);
84
+ }
85
+ }
86
+ /* --- Morph targets, on the same mechanism --- */
87
+ /**
88
+ * The most morph targets one mesh can carry.
89
+ *
90
+ * Bounded by the weight array in the vertex uniform block rather than by the delta texture, which
91
+ * is why it is small: eight `vec4`-aligned floats is 128 bytes of a block that has fifteen vectors
92
+ * in it already. Eight is what glTF's own tooling emits and what every exporter defaults to.
93
+ *
94
+ * What it costs is a rig wanting nine expressions. What would make it wrong is one, and the fix is
95
+ * a second weight texture rather than a wider block — the block is per draw and the texture is not.
96
+ */
97
+ export const MAX_MORPH_TARGETS = 8;
98
+ /**
99
+ * Where one target's delta for one vertex sits in the delta texture.
100
+ *
101
+ * Interleaved by vertex rather than by target — every target of a vertex is adjacent — because the
102
+ * shader reads all of them for one vertex and nothing reads one target across many vertices. That
103
+ * is one cache line instead of `targetCount` of them.
104
+ */
105
+ export function morphTexelIndex(vertex, target, targetCount) {
106
+ return vertex * targetCount + target;
107
+ }
108
+ /** Refuse a weight array that cannot drive the targets a mesh carries, naming both counts. */
109
+ export function validateMorph(weights, targetCount) {
110
+ if (targetCount < 1 || targetCount > MAX_MORPH_TARGETS) {
111
+ throw new Error(`morph targets: ${targetCount} is outside 1 to ${MAX_MORPH_TARGETS}. See MAX_MORPH_TARGETS.`);
112
+ }
113
+ if (weights.length < targetCount) {
114
+ throw new Error(`morph targets: ${weights.length} weights for ${targetCount} targets. Every target needs ` +
115
+ `one, or the ones past the end read as zero and that target silently never applies.`);
116
+ }
117
+ }
118
+ /** How wide the delta texture is for a mesh of this many vertices and targets. */
119
+ export function morphTextureWidth(vertexCount, targetCount) {
120
+ const texels = vertexCount * targetCount;
121
+ if (texels < 1)
122
+ throw new Error('morph targets: a mesh needs at least one vertex and one target');
123
+ /*
124
+ * One row while it fits, then as many rows as it takes. WebGL2 guarantees a texture width of
125
+ * 2048 and nothing more, and a mesh times its targets passes that at 256 vertices with eight
126
+ * targets — which is a small mesh, so unlike the palette this is the ordinary case rather than
127
+ * the edge one.
128
+ */
129
+ return Math.min(texels, MORPH_TEXTURE_WIDTH);
130
+ }
131
+ /** Rows the delta texture needs, given the width above. */
132
+ export function morphTextureRows(vertexCount, targetCount) {
133
+ return Math.ceil((vertexCount * targetCount) / MORPH_TEXTURE_WIDTH);
134
+ }
135
+ /** WebGL2's guaranteed `MAX_TEXTURE_SIZE`, which is the only width that is safe everywhere. */
136
+ const MORPH_TEXTURE_WIDTH = 2048;
@@ -0,0 +1,59 @@
1
+ import type { ReadonlyMat4 } from 'gl-matrix';
2
+ import type { ReflectionQueue } from './screenSpaceReflection.ts';
3
+ /**
4
+ * Screen-space reflection on WebGL2: a scissored trace per surface, then one composite.
5
+ *
6
+ * **The trace writes into a target of its own and that is not an optimisation.** It samples the
7
+ * finished scene colour to find out what a ray hit, so writing into the scene would be a feedback
8
+ * loop — `GL_INVALID_OPERATION` once per draw and undefined rasterisation, which `OitPass` records
9
+ * paying for. One extra full-frame attachment buys the separation, and it also makes several
10
+ * reflective surfaces accumulate as premultiplied layers rather than as independent guesses.
11
+ *
12
+ * **Two passes, and the second is one fetch.** The composite is done by the blend state:
13
+ * `(ONE, ONE_MINUS_SRC_ALPHA)` against premultiplied texels is `over`, so the resolve never samples
14
+ * the colour it is compositing onto either.
15
+ */
16
+ export declare class SsrPass {
17
+ private readonly gl;
18
+ /**
19
+ * Whether the scene it reflects is a float target.
20
+ *
21
+ * The reflection buffer matches it. A half-float scene composited through an eight-bit
22
+ * reflection would clip every highlight the reflection carries, which is exactly the part of a
23
+ * scene that shows in a wet floor.
24
+ */
25
+ private readonly floatColor;
26
+ private readonly trace;
27
+ private readonly traceUniforms;
28
+ private readonly resolve;
29
+ private readonly resolveUniforms;
30
+ private readonly vao;
31
+ private reflection;
32
+ private framebuffer;
33
+ private width;
34
+ private height;
35
+ /** `inverse(viewProjection) * DEPTH_01_TO_CLIP`, rebuilt once a frame rather than per surface. */
36
+ private readonly depthToWorld;
37
+ private readonly scissor;
38
+ constructor(gl: WebGL2RenderingContext,
39
+ /**
40
+ * Whether the scene it reflects is a float target.
41
+ *
42
+ * The reflection buffer matches it. A half-float scene composited through an eight-bit
43
+ * reflection would clip every highlight the reflection carries, which is exactly the part of a
44
+ * scene that shows in a wet floor.
45
+ */
46
+ floatColor: boolean);
47
+ private ensureSize;
48
+ /**
49
+ * March every recorded surface into the reflection buffer.
50
+ *
51
+ * `viewProjection` is the **raw** camera matrix. `DEPTH_01_TO_CLIP` turns a stored depth back
52
+ * into the clip space that matrix was built in, and the trace projects its samples back through
53
+ * the same matrix — pairing either with the clip-corrected one applies the remap twice.
54
+ */
55
+ traceReflections(queue: ReflectionQueue, scene: WebGLTexture, depth: WebGLTexture, viewProjection: ReadonlyMat4, eye: ArrayLike<number>, width: number, height: number, edgeFade: number): void;
56
+ /** Composite what the trace found over whatever framebuffer is bound. */
57
+ resolveReflections(): void;
58
+ dispose(): void;
59
+ }