framefields 2.14.0 → 2.15.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 (334) hide show
  1. package/NOTICE.md +5 -1
  2. package/dist/audio/index.d.mts +3 -3
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-DFwRbID_.mjs → audio-6TfPlfl4.mjs} +3 -3
  5. package/dist/{audio-DFwRbID_.mjs.map → audio-6TfPlfl4.mjs.map} +1 -1
  6. package/dist/{audio-CdCuGK5d.d.mts → audio-7oqTUi4G.d.mts} +2 -2
  7. package/dist/{audio-CdCuGK5d.d.mts.map → audio-7oqTUi4G.d.mts.map} +1 -1
  8. package/dist/cli/check-worker.mjs +44 -44
  9. package/dist/cli.mjs +1 -1
  10. package/dist/cloud/index.d.mts.map +1 -1
  11. package/dist/cloud/index.mjs +1 -1
  12. package/dist/{cloud-Cj1TIme8.mjs → cloud-jnk1hPYf.mjs} +2 -2
  13. package/dist/{cloud-Cj1TIme8.mjs.map → cloud-jnk1hPYf.mjs.map} +1 -1
  14. package/dist/components/index.d.mts +11 -11
  15. package/dist/components/index.mjs +43 -43
  16. package/dist/{dist-Kbf-JTry.mjs → dist-BtI6ukB5.mjs} +2 -2
  17. package/dist/{dist-Kbf-JTry.mjs.map → dist-BtI6ukB5.mjs.map} +1 -1
  18. package/dist/{dist-B8Nby2CU.mjs → dist-COOpgG9G.mjs} +4 -3
  19. package/dist/{dist-B8Nby2CU.mjs.map → dist-COOpgG9G.mjs.map} +1 -1
  20. package/dist/{dist--Uu5bQ_6.mjs → dist-XqlFM2a8.mjs} +13733 -5323
  21. package/dist/dist-XqlFM2a8.mjs.map +1 -0
  22. package/dist/{dist-CiTgmfUw.mjs → dist-f1zkl69f.mjs} +4 -4
  23. package/dist/dist-f1zkl69f.mjs.map +1 -0
  24. package/dist/{dist-B_rSWeOz.mjs → dist-umQOWz0a.mjs} +1 -1
  25. package/dist/effects/index.d.mts +4 -4
  26. package/dist/effects/index.mjs +35 -35
  27. package/dist/{effects-WMgv8ZaD.mjs → effects-DlRMovU5.mjs} +2 -2
  28. package/dist/{effects-WMgv8ZaD.mjs.map → effects-DlRMovU5.mjs.map} +1 -1
  29. package/dist/fonts/index.d.mts +1 -1
  30. package/dist/fonts/index.mjs +2 -2
  31. package/dist/{fonts-OW3yAfO5.mjs → fonts-BWYcXjyK.mjs} +3 -3
  32. package/dist/fonts-BWYcXjyK.mjs.map +1 -0
  33. package/dist/{gpu-R4T2Tndu.mjs → gpu-CH1PdM4T.mjs} +2 -2
  34. package/dist/{gpu-R4T2Tndu.mjs.map → gpu-CH1PdM4T.mjs.map} +1 -1
  35. package/dist/{index-CEKxvGY-.d.mts → index-BHTycml5.d.mts} +2 -2
  36. package/dist/{index-CEKxvGY-.d.mts.map → index-BHTycml5.d.mts.map} +1 -1
  37. package/dist/{index-DoP6EiHj.d.mts → index-BcxxxwhV.d.mts} +4 -4
  38. package/dist/{index-DoP6EiHj.d.mts.map → index-BcxxxwhV.d.mts.map} +1 -1
  39. package/dist/{index-Bv7gxGK1.d.mts → index-BnB_Ou2y.d.mts} +2 -2
  40. package/dist/index-BnB_Ou2y.d.mts.map +1 -0
  41. package/dist/index-C-V6CAhP.d.mts.map +1 -1
  42. package/dist/{index-D1FqV1eu.d.mts → index-CMhkkc56.d.mts} +43 -11
  43. package/dist/index-CMhkkc56.d.mts.map +1 -0
  44. package/dist/{index-B0Vq8Bwf.d.mts → index-CYVpYGM-.d.mts} +2 -2
  45. package/dist/{index-B0Vq8Bwf.d.mts.map → index-CYVpYGM-.d.mts.map} +1 -1
  46. package/dist/{index-C7-p9zwU.d.mts → index-DhL7ckvs.d.mts} +5 -5
  47. package/dist/index-DhL7ckvs.d.mts.map +1 -0
  48. package/dist/{index-9xte4JgL.d.mts → index-DkAjKnhW.d.mts} +1464 -559
  49. package/dist/index-DkAjKnhW.d.mts.map +1 -0
  50. package/dist/{index-GA9_Z8Fn.d.mts → index-RILu3ULT.d.mts} +2 -2
  51. package/dist/{index-GA9_Z8Fn.d.mts.map → index-RILu3ULT.d.mts.map} +1 -1
  52. package/dist/{index-C5sgRLlG.d.mts → index-TCtdSXd7.d.mts} +3 -1
  53. package/dist/index-TCtdSXd7.d.mts.map +1 -0
  54. package/dist/{index-CRaydvLi.d.mts → index-s2qQ8ifZ.d.mts} +886 -51
  55. package/dist/index-s2qQ8ifZ.d.mts.map +1 -0
  56. package/dist/index.d.mts +13 -13
  57. package/dist/index.mjs +52 -52
  58. package/dist/preview/index.d.mts +3 -3
  59. package/dist/preview/index.mjs +10 -10
  60. package/dist/preview-BeGF1Bb1.mjs +1002 -0
  61. package/dist/preview-BeGF1Bb1.mjs.map +1 -0
  62. package/dist/preview-engine/audio.mjs +1 -1
  63. package/dist/preview-engine/{chunk-64L4GUOF.mjs → chunk-4F3DG6YB.mjs} +2 -2
  64. package/dist/preview-engine/chunk-A2OTOW3B.mjs +4694 -0
  65. package/dist/preview-engine/{chunk-GNDE3OXQ.mjs → chunk-BR56TQBP.mjs} +1 -1
  66. package/dist/preview-engine/{chunk-ADLIF544.mjs → chunk-H2XKXXAU.mjs} +1 -1
  67. package/dist/preview-engine/chunk-NDUODAY2.mjs +3 -0
  68. package/dist/preview-engine/{chunk-FZ4RD7HV.mjs → chunk-QAQJSWUT.mjs} +1 -1
  69. package/dist/preview-engine/chunk-SWRGQTVC.mjs +138 -0
  70. package/dist/preview-engine/{chunk-52X7SURQ.mjs → chunk-TEA3GVBJ.mjs} +1 -1
  71. package/dist/preview-engine/chunk-VM2ZBPLM.mjs +644 -0
  72. package/dist/preview-engine/{chunk-UBY2UYEL.mjs → chunk-XSHNQJ7L.mjs} +1 -1
  73. package/dist/preview-engine/components.mjs +1 -1
  74. package/dist/preview-engine/effects.mjs +1 -1
  75. package/dist/preview-engine/fonts.mjs +1 -1
  76. package/dist/preview-engine/framefields.mjs +1 -1
  77. package/dist/preview-engine/player.mjs +2 -2
  78. package/dist/preview-engine/{renderers-DU7KPFVV.mjs → renderers-6C7NWWDX.mjs} +1 -1
  79. package/dist/preview-engine/renderers-HHVGNMSJ.mjs +206 -0
  80. package/dist/preview-engine/{src-YXNX4MLK.mjs → src-RCNEKIRP.mjs} +1 -1
  81. package/dist/preview-page/index.html +19 -0
  82. package/dist/preview-page/main.css +1 -0
  83. package/dist/preview-page/main.js +327 -0
  84. package/dist/{program-tFKCWU2j.mjs → program-CMigyfso.mjs} +829 -52
  85. package/dist/program-CMigyfso.mjs.map +1 -0
  86. package/dist/renderer/index.d.mts +2 -2
  87. package/dist/renderer/index.mjs +2 -2
  88. package/dist/{renderer-DkOuQi84.mjs → renderer-0GMEL_Zi.mjs} +3 -3
  89. package/dist/{renderer-DkOuQi84.mjs.map → renderer-0GMEL_Zi.mjs.map} +1 -1
  90. package/dist/{renderer-BGp0An5A.mjs → renderer-3Wv2ZBJG.mjs} +3 -3
  91. package/dist/{renderer-BGp0An5A.mjs.map → renderer-3Wv2ZBJG.mjs.map} +1 -1
  92. package/dist/{renderer-BVIXKfbC.mjs → renderer-4nXkaAWu.mjs} +1178 -199
  93. package/dist/renderer-4nXkaAWu.mjs.map +1 -0
  94. package/dist/{renderer-Cw6_NL2i.mjs → renderer-6SnfLXeg.mjs} +3 -3
  95. package/dist/{renderer-Cw6_NL2i.mjs.map → renderer-6SnfLXeg.mjs.map} +1 -1
  96. package/dist/{renderer-BVU22lBS.mjs → renderer-8gHw3O0P.mjs} +2 -2
  97. package/dist/{renderer-BVU22lBS.mjs.map → renderer-8gHw3O0P.mjs.map} +1 -1
  98. package/dist/{renderer-BjDddtw9.mjs → renderer-AOBglZHC.mjs} +2 -2
  99. package/dist/{renderer-D-KHHWQD.mjs → renderer-B0bSARK3.mjs} +3 -3
  100. package/dist/{renderer-D-KHHWQD.mjs.map → renderer-B0bSARK3.mjs.map} +1 -1
  101. package/dist/{renderer-CCxk-RJR.mjs → renderer-B2_tuRfl.mjs} +2 -2
  102. package/dist/{renderer-CCxk-RJR.mjs.map → renderer-B2_tuRfl.mjs.map} +1 -1
  103. package/dist/{renderer-k5d7JSbs.mjs → renderer-B82FhkEr.mjs} +3 -3
  104. package/dist/{renderer-k5d7JSbs.mjs.map → renderer-B82FhkEr.mjs.map} +1 -1
  105. package/dist/{renderer-I0Hh9cLK.mjs → renderer-B9lzA0PY.mjs} +3 -3
  106. package/dist/{renderer-I0Hh9cLK.mjs.map → renderer-B9lzA0PY.mjs.map} +1 -1
  107. package/dist/{renderer-Dwwnx7Dk.mjs → renderer-BBSIWSry.mjs} +2 -2
  108. package/dist/{renderer-Dwwnx7Dk.mjs.map → renderer-BBSIWSry.mjs.map} +1 -1
  109. package/dist/{renderer-_pC-jB9O.mjs → renderer-BEKDMxbi.mjs} +2 -2
  110. package/dist/{renderer-_pC-jB9O.mjs.map → renderer-BEKDMxbi.mjs.map} +1 -1
  111. package/dist/renderer-BERGAxqA.mjs +5 -0
  112. package/dist/{renderer-raxwsiGI.mjs → renderer-BF960HY8.mjs} +3 -3
  113. package/dist/{renderer-raxwsiGI.mjs.map → renderer-BF960HY8.mjs.map} +1 -1
  114. package/dist/{renderer-Dr0tXA4k.mjs → renderer-BFwyVxCu.mjs} +3 -3
  115. package/dist/{renderer-Dr0tXA4k.mjs.map → renderer-BFwyVxCu.mjs.map} +1 -1
  116. package/dist/{renderer-DEjo6dw_.mjs → renderer-BNiwcI3-.mjs} +2 -2
  117. package/dist/{renderer-DEjo6dw_.mjs.map → renderer-BNiwcI3-.mjs.map} +1 -1
  118. package/dist/{renderer-DIEeHiQA.mjs → renderer-BPbVb2Q4.mjs} +2 -2
  119. package/dist/{renderer-DIEeHiQA.mjs.map → renderer-BPbVb2Q4.mjs.map} +1 -1
  120. package/dist/renderer-BQ_YkBMt.mjs +6 -0
  121. package/dist/{renderer-BBMtmxks.mjs → renderer-BUWxlA8T.mjs} +3 -3
  122. package/dist/{renderer-BBMtmxks.mjs.map → renderer-BUWxlA8T.mjs.map} +1 -1
  123. package/dist/renderer-BW0Tjsv9.mjs +5 -0
  124. package/dist/{renderer-Dgj46uEU.mjs → renderer-BX8liu-e.mjs} +2 -2
  125. package/dist/{renderer-ZnrEfkYh.mjs → renderer-BXIwDAr_.mjs} +2 -2
  126. package/dist/{renderer-ZnrEfkYh.mjs.map → renderer-BXIwDAr_.mjs.map} +1 -1
  127. package/dist/{renderer-DA8YEo_d.mjs → renderer-B_Hy1W-g.mjs} +3 -3
  128. package/dist/{renderer-DA8YEo_d.mjs.map → renderer-B_Hy1W-g.mjs.map} +1 -1
  129. package/dist/{renderer-iMiYStcW.mjs → renderer-Bb6cvSgh.mjs} +2 -2
  130. package/dist/{renderer-iMiYStcW.mjs.map → renderer-Bb6cvSgh.mjs.map} +1 -1
  131. package/dist/{renderer-BacY4nh8.mjs → renderer-BdppwWC9.mjs} +2 -2
  132. package/dist/{renderer-BacY4nh8.mjs.map → renderer-BdppwWC9.mjs.map} +1 -1
  133. package/dist/{renderer-CrxwW6VQ.mjs → renderer-Bhc24HVe.mjs} +3 -3
  134. package/dist/{renderer-CrxwW6VQ.mjs.map → renderer-Bhc24HVe.mjs.map} +1 -1
  135. package/dist/{renderer-BH7UCMPQ.mjs → renderer-BiNA2wF0.mjs} +2 -2
  136. package/dist/{renderer-BH7UCMPQ.mjs.map → renderer-BiNA2wF0.mjs.map} +1 -1
  137. package/dist/{renderer-DVPgWHZw.mjs → renderer-BmoBgTp5.mjs} +3 -3
  138. package/dist/{renderer-DVPgWHZw.mjs.map → renderer-BmoBgTp5.mjs.map} +1 -1
  139. package/dist/{renderer-C20efMI0.mjs → renderer-BmqFmCWS.mjs} +3 -3
  140. package/dist/{renderer-C20efMI0.mjs.map → renderer-BmqFmCWS.mjs.map} +1 -1
  141. package/dist/{renderer-B0yVUOPP.mjs → renderer-BnVwAObV.mjs} +2 -2
  142. package/dist/{renderer-B0yVUOPP.mjs.map → renderer-BnVwAObV.mjs.map} +1 -1
  143. package/dist/{renderer-CP8wLzTU.mjs → renderer-BxttZHme.mjs} +2 -2
  144. package/dist/{renderer-CP8wLzTU.mjs.map → renderer-BxttZHme.mjs.map} +1 -1
  145. package/dist/renderer-BzyPdUD1.mjs +5 -0
  146. package/dist/renderer-C0hM-mtY.mjs +5 -0
  147. package/dist/renderer-C6cyUTvk.mjs +5 -0
  148. package/dist/{renderer-BOSZAdgF.mjs → renderer-C8E4XsSg.mjs} +2 -2
  149. package/dist/{renderer-BOSZAdgF.mjs.map → renderer-C8E4XsSg.mjs.map} +1 -1
  150. package/dist/renderer-C8zY3pzk.mjs +5 -0
  151. package/dist/{renderer-DWq9gYRw.mjs → renderer-C9U-LY50.mjs} +3 -3
  152. package/dist/{renderer-DWq9gYRw.mjs.map → renderer-C9U-LY50.mjs.map} +1 -1
  153. package/dist/{renderer-Dj2H5JPR.mjs → renderer-CB2JVu5x.mjs} +3 -3
  154. package/dist/{renderer-Dj2H5JPR.mjs.map → renderer-CB2JVu5x.mjs.map} +1 -1
  155. package/dist/{renderer-Bcu3UrI-.mjs → renderer-CC4YBJ8Z.mjs} +3 -3
  156. package/dist/{renderer-Bcu3UrI-.mjs.map → renderer-CC4YBJ8Z.mjs.map} +1 -1
  157. package/dist/renderer-CEkSOyKu.mjs +5 -0
  158. package/dist/{renderer-DzLrvCB2.mjs → renderer-CIycc5O-.mjs} +2 -2
  159. package/dist/{renderer-DzLrvCB2.mjs.map → renderer-CIycc5O-.mjs.map} +1 -1
  160. package/dist/renderer-CJYtfa4x.mjs +5 -0
  161. package/dist/{renderer-BeNl_6EG.mjs → renderer-CJraQlV-.mjs} +2 -2
  162. package/dist/{renderer-BeNl_6EG.mjs.map → renderer-CJraQlV-.mjs.map} +1 -1
  163. package/dist/renderer-CKMtHGZh.mjs +5 -0
  164. package/dist/renderer-CLzicoiy.mjs +5 -0
  165. package/dist/renderer-CM2A4BHd.mjs +5 -0
  166. package/dist/{renderer-DtMVitEF.mjs → renderer-COWGWtob.mjs} +2 -2
  167. package/dist/{renderer-DtMVitEF.mjs.map → renderer-COWGWtob.mjs.map} +1 -1
  168. package/dist/{renderer-CT3zkfbf.mjs → renderer-COxG2XGf.mjs} +2 -2
  169. package/dist/{renderer-CT3zkfbf.mjs.map → renderer-COxG2XGf.mjs.map} +1 -1
  170. package/dist/{renderer-DNxWOz8Q.mjs → renderer-CQDCIsQm.mjs} +2 -2
  171. package/dist/{renderer-DNxWOz8Q.mjs.map → renderer-CQDCIsQm.mjs.map} +1 -1
  172. package/dist/{renderer-C5AoaymD.mjs → renderer-CRUeag8i.mjs} +3 -3
  173. package/dist/{renderer-C5AoaymD.mjs.map → renderer-CRUeag8i.mjs.map} +1 -1
  174. package/dist/{renderer-ngmYIIob.mjs → renderer-CWVput06.mjs} +3 -3
  175. package/dist/{renderer-ngmYIIob.mjs.map → renderer-CWVput06.mjs.map} +1 -1
  176. package/dist/renderer-CZlHjcxr.mjs +5 -0
  177. package/dist/{renderer-0rveCDm-.mjs → renderer-CbbnBLOB.mjs} +3 -3
  178. package/dist/{renderer-0rveCDm-.mjs.map → renderer-CbbnBLOB.mjs.map} +1 -1
  179. package/dist/renderer-CbimvSU8.mjs +5 -0
  180. package/dist/renderer-Ccvc63yd.mjs +5 -0
  181. package/dist/renderer-Cdp-SGfq.mjs +5 -0
  182. package/dist/renderer-CeTcSs3e.mjs +5 -0
  183. package/dist/{renderer-Brmbl12Y.mjs → renderer-CfLZein2.mjs} +3 -3
  184. package/dist/{renderer-Brmbl12Y.mjs.map → renderer-CfLZein2.mjs.map} +1 -1
  185. package/dist/{renderer-BJ8ea92W.mjs → renderer-Ch-q1O-q.mjs} +3 -3
  186. package/dist/{renderer-BJ8ea92W.mjs.map → renderer-Ch-q1O-q.mjs.map} +1 -1
  187. package/dist/{renderer-CP108ABB.mjs → renderer-Ch5JvJWl.mjs} +2 -2
  188. package/dist/{renderer-CP108ABB.mjs.map → renderer-Ch5JvJWl.mjs.map} +1 -1
  189. package/dist/{renderer-47y12Z37.mjs → renderer-ChtEzq-R.mjs} +2 -2
  190. package/dist/{renderer-47y12Z37.mjs.map → renderer-ChtEzq-R.mjs.map} +1 -1
  191. package/dist/{renderer-DhyMfG1v.mjs → renderer-Cj9nTC5l.mjs} +3 -3
  192. package/dist/{renderer-DhyMfG1v.mjs.map → renderer-Cj9nTC5l.mjs.map} +1 -1
  193. package/dist/{renderer-BDzn1AKF.mjs → renderer-CqT8HsSS.mjs} +2 -2
  194. package/dist/{renderer-BDzn1AKF.mjs.map → renderer-CqT8HsSS.mjs.map} +1 -1
  195. package/dist/{renderer-B7G1KohJ.mjs → renderer-CuQjMhdV.mjs} +2 -2
  196. package/dist/renderer-CvNuu52U.mjs +5 -0
  197. package/dist/renderer-CwciC0oI.mjs +5 -0
  198. package/dist/renderer-CysLUbIr.mjs +5 -0
  199. package/dist/{renderer-Cm0tsbQH.mjs → renderer-Cz30EVws.mjs} +2 -2
  200. package/dist/{renderer-Cm0tsbQH.mjs.map → renderer-Cz30EVws.mjs.map} +1 -1
  201. package/dist/renderer-D3A22Vxb.mjs +5 -0
  202. package/dist/renderer-D5SY9EmA.mjs +5 -0
  203. package/dist/renderer-D8h3ZvaE.mjs +5 -0
  204. package/dist/renderer-DE-B6N9n.mjs +5 -0
  205. package/dist/renderer-DETZTI7t.mjs +5 -0
  206. package/dist/{renderer-nHS3Sius.mjs → renderer-DHoX-5U_.mjs} +3 -3
  207. package/dist/{renderer-nHS3Sius.mjs.map → renderer-DHoX-5U_.mjs.map} +1 -1
  208. package/dist/{renderer-BWSRryIA.mjs → renderer-DOkm0Ycd.mjs} +2 -2
  209. package/dist/{renderer-BWSRryIA.mjs.map → renderer-DOkm0Ycd.mjs.map} +1 -1
  210. package/dist/{renderer-BHYJlK6H.d.mts → renderer-DU3f6ZrS.d.mts} +2 -2
  211. package/dist/{renderer-BHYJlK6H.d.mts.map → renderer-DU3f6ZrS.d.mts.map} +1 -1
  212. package/dist/{renderer-BpVOk9ux.mjs → renderer-DUzv-shq.mjs} +2 -2
  213. package/dist/{renderer-BpVOk9ux.mjs.map → renderer-DUzv-shq.mjs.map} +1 -1
  214. package/dist/renderer-DWnDj0IM.mjs +5 -0
  215. package/dist/renderer-DcGUIbQF.mjs +5 -0
  216. package/dist/renderer-Dfq6FoNO.mjs +5 -0
  217. package/dist/renderer-DhasXW6S.mjs +3 -0
  218. package/dist/{renderer-NRMlYkX6.mjs → renderer-DhnOWnEA.mjs} +3 -3
  219. package/dist/{renderer-NRMlYkX6.mjs.map → renderer-DhnOWnEA.mjs.map} +1 -1
  220. package/dist/{renderer-COgwYqev.mjs → renderer-Dhy1XHzz.mjs} +3 -3
  221. package/dist/{renderer-COgwYqev.mjs.map → renderer-Dhy1XHzz.mjs.map} +1 -1
  222. package/dist/renderer-DjCvpsV_.mjs +5 -0
  223. package/dist/{renderer-BfZNIiSv.mjs → renderer-DjJshz9Y.mjs} +2 -2
  224. package/dist/{renderer-BfZNIiSv.mjs.map → renderer-DjJshz9Y.mjs.map} +1 -1
  225. package/dist/{renderer-CKo7VR8x.mjs → renderer-DmTUIdus.mjs} +3 -3
  226. package/dist/{renderer-CKo7VR8x.mjs.map → renderer-DmTUIdus.mjs.map} +1 -1
  227. package/dist/{renderer-Baw6Utxi.mjs → renderer-Dq7AioJa.mjs} +2 -2
  228. package/dist/{renderer-Baw6Utxi.mjs.map → renderer-Dq7AioJa.mjs.map} +1 -1
  229. package/dist/renderer-DrAaM6JD.mjs +5 -0
  230. package/dist/{renderer-D-GWBoVT.mjs → renderer-Dt4sqNEu.mjs} +2 -2
  231. package/dist/{renderer-D-GWBoVT.mjs.map → renderer-Dt4sqNEu.mjs.map} +1 -1
  232. package/dist/{renderer-FYOL5Za6.mjs → renderer-Dtcs4idV.mjs} +3 -3
  233. package/dist/{renderer-FYOL5Za6.mjs.map → renderer-Dtcs4idV.mjs.map} +1 -1
  234. package/dist/renderer-Dxlv8LYm.mjs +5 -0
  235. package/dist/{renderer-D-RhYvVl.mjs → renderer-Gj8SrE2W.mjs} +2 -2
  236. package/dist/{renderer-D-RhYvVl.mjs.map → renderer-Gj8SrE2W.mjs.map} +1 -1
  237. package/dist/{renderer-D_j1WKMD.mjs → renderer-KfnXDJS0.mjs} +3 -3
  238. package/dist/{renderer-D_j1WKMD.mjs.map → renderer-KfnXDJS0.mjs.map} +1 -1
  239. package/dist/{renderer-Bpm145BW.mjs → renderer-MXVlg4p5.mjs} +3 -3
  240. package/dist/{renderer-Bpm145BW.mjs.map → renderer-MXVlg4p5.mjs.map} +1 -1
  241. package/dist/{renderer-Nnmi8Gt6.mjs → renderer-N2b6QZ1E.mjs} +3 -3
  242. package/dist/{renderer-Nnmi8Gt6.mjs.map → renderer-N2b6QZ1E.mjs.map} +1 -1
  243. package/dist/renderer-Pb43OO2t.mjs +5 -0
  244. package/dist/{renderer-Ca1KjNCO.mjs → renderer-Q7gDzm8c.mjs} +2 -2
  245. package/dist/{renderer-Ca1KjNCO.mjs.map → renderer-Q7gDzm8c.mjs.map} +1 -1
  246. package/dist/{renderer-D2wNFNRf.mjs → renderer-RCiANtRV.mjs} +2 -2
  247. package/dist/{renderer-D2wNFNRf.mjs.map → renderer-RCiANtRV.mjs.map} +1 -1
  248. package/dist/{renderer-Cqb7PGrI.mjs → renderer-Sig9nZcI.mjs} +2 -2
  249. package/dist/renderer-VQbm-cGr.mjs +5 -0
  250. package/dist/{renderer-W1bVNVR6.mjs → renderer-fabBgwQX.mjs} +3 -3
  251. package/dist/{renderer-W1bVNVR6.mjs.map → renderer-fabBgwQX.mjs.map} +1 -1
  252. package/dist/{renderer-zRq0j6Xy.mjs → renderer-g-0PCNoo.mjs} +3 -3
  253. package/dist/{renderer-zRq0j6Xy.mjs.map → renderer-g-0PCNoo.mjs.map} +1 -1
  254. package/dist/{renderer-2PjR3w-q.mjs → renderer-gmHKIbKI.mjs} +3 -3
  255. package/dist/{renderer-2PjR3w-q.mjs.map → renderer-gmHKIbKI.mjs.map} +1 -1
  256. package/dist/{renderer-03mYJLgX.mjs → renderer-kVZwiRoK.mjs} +3 -3
  257. package/dist/{renderer-03mYJLgX.mjs.map → renderer-kVZwiRoK.mjs.map} +1 -1
  258. package/dist/renderer-oPMypDM1.mjs +5 -0
  259. package/dist/{renderer-DcAKDAnS.mjs → renderer-p7tgxP-A.mjs} +3 -3
  260. package/dist/{renderer-DcAKDAnS.mjs.map → renderer-p7tgxP-A.mjs.map} +1 -1
  261. package/dist/{renderer-jUKdkmG5.mjs → renderer-tvYj306A.mjs} +81 -78
  262. package/dist/renderer-tvYj306A.mjs.map +1 -0
  263. package/dist/renderer-xvWGpVyp.mjs +5 -0
  264. package/dist/renderer-zafZbD6Q.mjs +5 -0
  265. package/dist/{renderers-CP8CFWDs-CshljORp.mjs → renderers-CP8CFWDs-DLjtjrwx.mjs} +2 -2
  266. package/dist/{renderers-CP8CFWDs-CshljORp.mjs.map → renderers-CP8CFWDs-DLjtjrwx.mjs.map} +1 -1
  267. package/dist/sam/index.d.mts +2 -2
  268. package/dist/sam/index.mjs +1 -1
  269. package/dist/signals/index.d.mts +4 -4
  270. package/dist/signals/index.mjs +4 -4
  271. package/dist/{src-BU6vm9sP-DdTHmCr4.mjs → src-B23p_eh7-Cj6-lvV6.mjs} +293 -6
  272. package/dist/src-B23p_eh7-Cj6-lvV6.mjs.map +1 -0
  273. package/dist/{src-Dy4gnc6w.mjs → src-CoHAjviq.mjs} +1349 -177
  274. package/dist/src-CoHAjviq.mjs.map +1 -0
  275. package/dist/storage/index.mjs +1 -1
  276. package/package.json +63 -60
  277. package/dist/dist--Uu5bQ_6.mjs.map +0 -1
  278. package/dist/dist-CiTgmfUw.mjs.map +0 -1
  279. package/dist/fonts-OW3yAfO5.mjs.map +0 -1
  280. package/dist/index-9xte4JgL.d.mts.map +0 -1
  281. package/dist/index-Bv7gxGK1.d.mts.map +0 -1
  282. package/dist/index-C5sgRLlG.d.mts.map +0 -1
  283. package/dist/index-C7-p9zwU.d.mts.map +0 -1
  284. package/dist/index-CRaydvLi.d.mts.map +0 -1
  285. package/dist/index-D1FqV1eu.d.mts.map +0 -1
  286. package/dist/preview-D7BGmE1E.mjs +0 -2446
  287. package/dist/preview-D7BGmE1E.mjs.map +0 -1
  288. package/dist/preview-engine/chunk-5DZTPUMH.mjs +0 -2568
  289. package/dist/preview-engine/chunk-NCQHOGZK.mjs +0 -3
  290. package/dist/preview-engine/chunk-PH3UUX6A.mjs +0 -138
  291. package/dist/preview-engine/chunk-UPZURPJY.mjs +0 -2227
  292. package/dist/preview-engine/renderers-DLJOA3BM.mjs +0 -228
  293. package/dist/program-tFKCWU2j.mjs.map +0 -1
  294. package/dist/renderer-6_bzbbXt.mjs +0 -5
  295. package/dist/renderer-8M-9G6F_.mjs +0 -5
  296. package/dist/renderer-B5OzKvF8.mjs +0 -5
  297. package/dist/renderer-BBCZ2qbE.mjs +0 -5
  298. package/dist/renderer-BChbxCux.mjs +0 -5
  299. package/dist/renderer-BGeMPr8C.mjs +0 -5
  300. package/dist/renderer-BPQ8Pkjb.mjs +0 -5
  301. package/dist/renderer-BTRpA3HD.mjs +0 -5
  302. package/dist/renderer-BVIXKfbC.mjs.map +0 -1
  303. package/dist/renderer-BVsECSn-.mjs +0 -5
  304. package/dist/renderer-Bgos68gc.mjs +0 -6
  305. package/dist/renderer-BjHOvoqO.mjs +0 -5
  306. package/dist/renderer-BjXMPPlV.mjs +0 -5
  307. package/dist/renderer-Byobxqkv.mjs +0 -5
  308. package/dist/renderer-CKrsg3EG.mjs +0 -5
  309. package/dist/renderer-Cj875NuH.mjs +0 -5
  310. package/dist/renderer-CnmzJoMv.mjs +0 -5
  311. package/dist/renderer-CtklDaMg.mjs +0 -5
  312. package/dist/renderer-D1tK3in_.mjs +0 -5
  313. package/dist/renderer-D2yc9P61.mjs +0 -5
  314. package/dist/renderer-D4v-JvSr.mjs +0 -5
  315. package/dist/renderer-D5yp74NL.mjs +0 -3
  316. package/dist/renderer-D7WRWDwB.mjs +0 -5
  317. package/dist/renderer-DGvA0tdB.mjs +0 -5
  318. package/dist/renderer-DO7v5Sdm.mjs +0 -5
  319. package/dist/renderer-DRVvt7-V.mjs +0 -5
  320. package/dist/renderer-DYMCd3jL.mjs +0 -5
  321. package/dist/renderer-DmHKw-MM.mjs +0 -5
  322. package/dist/renderer-DoDsuZ6G.mjs +0 -5
  323. package/dist/renderer-EpgclS70.mjs +0 -5
  324. package/dist/renderer-GroKiYyK.mjs +0 -5
  325. package/dist/renderer-MQ5K_xIS.mjs +0 -5
  326. package/dist/renderer-U43SflML.mjs +0 -5
  327. package/dist/renderer-UqOmBgCv.mjs +0 -5
  328. package/dist/renderer-XLULgJM0.mjs +0 -5
  329. package/dist/renderer-jUKdkmG5.mjs.map +0 -1
  330. package/dist/renderer-lNjxY1GG.mjs +0 -5
  331. package/dist/renderer-ukufL7pl.mjs +0 -5
  332. package/dist/renderer-wb0NCKdF.mjs +0 -5
  333. package/dist/src-BU6vm9sP-DdTHmCr4.mjs.map +0 -1
  334. package/dist/src-Dy4gnc6w.mjs.map +0 -1
@@ -180,6 +180,53 @@ declare const Camera3D: {
180
180
  isBoxInFrustum(min: Vec3, max: Vec3, planes: FrustumPlanes): boolean;
181
181
  };
182
182
  //#endregion
183
+ //#region src/math3d/cube-lens.d.ts
184
+ /** The picture a cube camera's lens draws. */
185
+ type LensProjection = "perspective" | "equirectangular" | "fisheye";
186
+ /** World direction ↔ cube-space direction (a reflection, its own inverse). */
187
+ declare const CUBE_FLIP: (v: Vec3) => Vec3;
188
+ /**
189
+ * The six cameras that draw a cube map around `eye`: 90° square frusta in
190
+ * layer order. Their faces meet edge to edge, so the cube covers every
191
+ * direction once.
192
+ */
193
+ declare function cubeFaceCameras(eye: Vec3, near: number, far: number): Camera3DPose[];
194
+ /**
195
+ * Where WebGPU samples a cube for world direction `dir`: the layer and its
196
+ * (u, v), v down. The selection rule of the WebGPU (Vulkan) spec.
197
+ */
198
+ declare function cubeTexel(dir: Vec3): {
199
+ face: number;
200
+ u: number;
201
+ v: number;
202
+ };
203
+ /** A camera's orthonormal frame: screen right, screen up and forward. */
204
+ declare function cameraBasis(camera: Camera3DPose): {
205
+ right: Vec3;
206
+ up: Vec3;
207
+ forward: Vec3;
208
+ };
209
+ /** What a lens needs to turn an output pixel into a ray. */
210
+ interface CubeLensOptions {
211
+ projection: LensProjection;
212
+ /**
213
+ * Perspective: vertical field of view. Fisheye: the full angle across the
214
+ * frame's height (equidistant, up to 360°). Ignored by equirectangular,
215
+ * which always shows the whole sphere.
216
+ */
217
+ fov: number;
218
+ /** Optical zoom (perspective and fisheye). */
219
+ zoom: number;
220
+ }
221
+ /** Output pixels per radian at the centre of the view. */
222
+ declare function lensCenterDensity(lens: CubeLensOptions, width: number, height: number): number;
223
+ /**
224
+ * Face size that matches the lens's pixel density at the centre of the view:
225
+ * a face holds `size / 2` pixels per radian at its centre. Rounded up to a
226
+ * power of two (so a moving lens reuses its targets) and clamped.
227
+ */
228
+ declare function defaultCubeFaceSize(lens: CubeLensOptions, width: number, height: number, maxSize: number): number;
229
+ //#endregion
183
230
  //#region src/math3d/environment3d.d.ts
184
231
  /**
185
232
  * "neutral" (default, Khronos PBR Neutral): colors as authored, highlights
@@ -187,7 +234,7 @@ declare const Camera3D: {
187
234
  * hot highlights gracefully. "aces": punchy film contrast, shifts hues.
188
235
  */
189
236
  type ToneMapping = "neutral" | "agx" | "aces" | "none";
190
- type EnvironmentPreset = "studio" | "soft" | "sunset" | "night" | "neutral";
237
+ type EnvironmentPreset = "studio" | "soft" | "warm" | "sunset" | "night" | "neon" | "neutral";
191
238
  interface Environment3DFog {
192
239
  /** Display color surfaces fade into; match the background for a seamless horizon. */
193
240
  color: string;
@@ -212,8 +259,62 @@ interface Environment3DFloor {
212
259
  /** Optional overall opacity of the floor plane, 0..1 (default 1; 0 draws only the additive reflection over background). */
213
260
  opacity?: number;
214
261
  }
262
+ interface Environment3DVolumetricFogNoise {
263
+ /** World-space noise frequency (1 / period in px). Default 0.003. */
264
+ scale?: number;
265
+ /** Density modulation depth 0..1. Default 0.45. */
266
+ strength?: number;
267
+ /** Wind drift velocity [vx, vy, vz] in world px/sec. Default [20, -8, 12]. */
268
+ speed?: [number, number, number];
269
+ /** FBM octaves 1..3. Default 2. */
270
+ octaves?: number;
271
+ }
272
+ interface Environment3DVolumetricFog {
273
+ /** Base extinction/scattering density (typical range 0.002..0.15, default 0.02). */
274
+ density?: number;
275
+ /** In-scattering albedo tint (default: environment horizon color). */
276
+ color?: string;
277
+ /** Henyey-Greenstein forward/back scatter asymmetry g in (-0.95..0.95). Default 0.55. */
278
+ anisotropy?: number;
279
+ /** Exponential height falloff rate (0 = uniform, >0 = ground mist). Default 0.0015. */
280
+ heightFalloff?: number;
281
+ /** Reference world Y height for ground fog (px, y down). Default 540. */
282
+ baseHeight?: number;
283
+ /** Raymarch step count per half-res pixel (8..64, default 28). */
284
+ steps?: number;
285
+ /** Maximum raymarch distance from camera in world px. Default 2800. */
286
+ maxDistance?: number;
287
+ /** Multiplier on direct-light in-scattering / god rays. Default 1.5. */
288
+ lightIntensity?: number;
289
+ /** Multiplier on ambient / sky in-scattering. Default 0.35. */
290
+ ambientIntensity?: number;
291
+ /** Optional 3D procedural FBM turbulence in the fog medium. */
292
+ noise?: boolean | Environment3DVolumetricFogNoise;
293
+ }
294
+ /** Screen-space reflections: glossy surfaces reflect what the camera sees. */
295
+ interface Environment3DSsrOptions {
296
+ /** How fully a found reflection replaces the environment's, 0..1. Default 0.85. */
297
+ intensity?: number;
298
+ /** Roughest surface that traces reflections (0..1); rougher ones keep the environment. Default 0.6. */
299
+ maxRoughness?: number;
300
+ /** How far behind a surface, in world px, a ray still counts as hitting it. Default 120. */
301
+ thickness?: number;
302
+ /** Hi-Z march iterations per ray (16..64). Default 32. */
303
+ steps?: number;
304
+ }
305
+ /** Screen-space diffuse GI: ambient occlusion plus one bounce of visible light. */
306
+ interface Environment3DGiOptions {
307
+ /** Strength of the bounced light, 0..4. Default 1. */
308
+ intensity?: number;
309
+ /** Gather radius in world px. Default 400. */
310
+ radius?: number;
311
+ /** Horizon-scan directions per pixel (4..16). Default 6. */
312
+ samples?: number;
313
+ }
215
314
  interface Environment3DOptions {
216
315
  preset?: EnvironmentPreset;
316
+ /** Equirectangular panorama for real HDRI IBL: a `.hdr` (Radiance RGBE) or `.exr` (OpenEXR) path, or the file's bytes. */
317
+ hdri?: string | Uint8Array;
217
318
  /** Overrides the preset's sky (above), horizon and ground colors. */
218
319
  top?: string;
219
320
  horizon?: string;
@@ -231,6 +332,12 @@ interface Environment3DOptions {
231
332
  fog?: Environment3DFog;
232
333
  floor?: Environment3DFloor;
233
334
  outlines?: boolean | GeometryOutlineOptions;
335
+ /** Froxel-style volumetric participating media & shadowed light shafts (god rays). */
336
+ volumetricFog?: boolean | Environment3DVolumetricFog;
337
+ /** Screen-space reflections of nearby geometry and emissives on glossy surfaces. */
338
+ ssr?: boolean | Environment3DSsrOptions;
339
+ /** Screen-space diffuse GI: occlusion and color bleeding from visible surfaces. */
340
+ gi?: boolean | Environment3DGiOptions;
234
341
  }
235
342
  interface PresetDef {
236
343
  top: string;
@@ -240,11 +347,28 @@ interface PresetDef {
240
347
  }
241
348
  declare const ENVIRONMENT_PRESETS: Record<EnvironmentPreset, PresetDef>;
242
349
  declare function linearRgb(color: string): [number, number, number];
350
+ interface ResolvedVolumetricFog {
351
+ density: number;
352
+ color: [number, number, number];
353
+ anisotropy: number;
354
+ heightFalloff: number;
355
+ baseHeight: number;
356
+ steps: number;
357
+ maxDistance: number;
358
+ lightIntensity: number;
359
+ ambientIntensity: number;
360
+ noiseScale: number;
361
+ noiseStrength: number;
362
+ noiseSpeed: [number, number, number];
363
+ noiseOctaves: number;
364
+ }
243
365
  interface ResolvedEnvironment {
244
366
  top: [number, number, number];
245
367
  horizon: [number, number, number];
246
368
  bottom: [number, number, number];
247
369
  softboxes: number;
370
+ intensity: number;
371
+ hdri?: string | Uint8Array;
248
372
  rotationRad: number;
249
373
  exposureMultiplier: number;
250
374
  toneMapping: number;
@@ -262,12 +386,29 @@ interface ResolvedEnvironment {
262
386
  fadeDistance: number;
263
387
  opacity: number;
264
388
  };
389
+ volumetricFog?: ResolvedVolumetricFog;
390
+ ssr?: ResolvedSsr;
391
+ gi?: ResolvedGi;
265
392
  }
393
+ interface ResolvedSsr {
394
+ intensity: number;
395
+ maxRoughness: number;
396
+ thickness: number;
397
+ steps: number;
398
+ }
399
+ interface ResolvedGi {
400
+ intensity: number;
401
+ radius: number;
402
+ samples: number;
403
+ }
404
+ declare function resolveSsr(ssr: boolean | Environment3DSsrOptions | undefined): ResolvedSsr | undefined;
405
+ declare function resolveGi(gi: boolean | Environment3DGiOptions | undefined): ResolvedGi | undefined;
406
+ declare function resolveVolumetricFog(vf: boolean | Environment3DVolumetricFog | undefined, defaultColor: [number, number, number]): ResolvedVolumetricFog | undefined;
266
407
  /** Linear radiance and shader codes for an environment. */
267
408
  declare function resolveEnvironment(opts: Environment3DOptions): ResolvedEnvironment;
268
409
  /** Where a shadow-casting light's depth map lives, for the lit shaders. */
269
410
  interface ShadowUniformInfo {
270
- /** Light view-projection (world → shadow clip). */
411
+ /** Light view-projection (world → shadow clip). For omnidirectional point shadows, element [0] stores far plane. */
271
412
  matrix: ArrayLike<number>;
272
413
  /** Index of the casting light among the packed (non-ambient) lights. */
273
414
  lightIndex: number;
@@ -281,10 +422,20 @@ interface ShadowUniformInfo {
281
422
  normalOffset: number;
282
423
  /** 0 = invisible shadows, 1 = fully dark. */
283
424
  darkness: number;
425
+ /** Starting layer index in the shadow depth 2D array texture. */
426
+ baseLayer?: number;
427
+ /** Number of array layers consumed by this shadow entry (1 for directional/spot/rect, 6 for point). */
428
+ layerCount?: number;
429
+ /** Shadow projection mode: 1 = 2D frustum, 2 = 6-face omnidirectional cube. */
430
+ mode?: 1 | 2;
431
+ /** Near plane distance in world px (used by mode=2 omnidirectional point shadows). */
432
+ near?: number;
433
+ /** Far plane distance in world px (used by mode=2 omnidirectional point shadows). */
434
+ far?: number;
284
435
  }
285
436
  //#endregion
286
437
  //#region src/math3d/light3d.d.ts
287
- type LightKind = "ambient" | "directional" | "point" | "spot";
438
+ type LightKind = "ambient" | "directional" | "point" | "spot" | "rect";
288
439
  interface Light3DOptions {
289
440
  id?: string;
290
441
  lightType?: LightKind;
@@ -309,7 +460,15 @@ interface Light3DOptions {
309
460
  decay?: number;
310
461
  angle?: number;
311
462
  penumbra?: number;
312
- /** Directional or spot: render a shadow map (the first such light wins). */
463
+ /** Area light width in world px (default 240, rect lights only). */
464
+ width?: number;
465
+ /** Area light height in world px (default 140, rect lights only). */
466
+ height?: number;
467
+ /** Emit from both faces of a rect light (default false). */
468
+ twoSided?: boolean;
469
+ /** In-plane roll angle in degrees around the light's forward axis (default 0). */
470
+ rotation?: number;
471
+ /** Directional, spot, point, or rect: render a shadow map. */
313
472
  castShadow?: boolean;
314
473
  /** Shadow edge blur in shadow-map texels (default 2). */
315
474
  shadowSoftness?: number;
@@ -317,22 +476,40 @@ interface Light3DOptions {
317
476
  shadowDarkness?: number;
318
477
  }
319
478
  interface GPULightData {
320
- /** xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot) */
479
+ /** xyz = position, w = type (0=ambient, 1=directional, 2=point, 3=spot, 4=rect) */
321
480
  posType: [number, number, number, number];
322
481
  /** xyz = normalized direction, w = radius */
323
482
  dirRadius: [number, number, number, number];
324
483
  /** rgb = linear color, w = intensity */
325
484
  colorIntensity: [number, number, number, number];
326
- /** x = cos(outer), y = cos(inner), z = decay, w = 0 */
485
+ /** x = cos(outer), y = cos(inner), z = decay, w = twoSided (rect) */
327
486
  spotParams: [number, number, number, number];
487
+ /** xyz = normalized right axis of rect area light, w = halfWidth */
488
+ rectRight: [number, number, number, number];
489
+ /** xyz = normalized up axis of rect area light, w = halfHeight */
490
+ rectUp: [number, number, number, number];
328
491
  }
329
492
  /** Slots retained in the legacy uniform prefix; actual direct lights use storage. */
330
493
  declare const MAX_LIGHTS = 8;
331
494
  /**
332
495
  * 16 (ambient) + 16 (params) + 8 * 64 (lights), then the physical-shading
333
- * block appended after them: 8 vec4 (128) + shadow matrix (64) + floorParams (16).
496
+ * block appended after them: 8 vec4 (128) + shadow matrix (64) +
497
+ * floorParams (16) + HDRI irradiance SH (9 vec4, 144) + screen indirect (16).
334
498
  */
335
499
  declare const LIGHT_UNIFORM_SIZE_BYTES: number;
500
+ /**
501
+ * Which half of a screen-space indirect (SSR / GI) frame a pass draws:
502
+ * `radiance` writes the unfogged scene radiance the traces read; `apply`
503
+ * shades with the traced reflections and bounce light.
504
+ */
505
+ type ScreenIndirectPass = "radiance" | "apply";
506
+ /** A prefiltered HDRI as the lights uniform describes it. */
507
+ interface HdriUniforms {
508
+ /** Highest mip of the radiance cubemap (roughness 1). */
509
+ maxMip: number;
510
+ /** 9 L2 irradiance SH coefficients, one vec4 (rgb + pad) each. */
511
+ sh: Float32Array;
512
+ }
336
513
  interface LightsUniformData {
337
514
  ambientColor: [number, number, number, number];
338
515
  params: [number, number, number, number];
@@ -347,6 +524,7 @@ declare function parseColorToRgb(color?: string | [number, number, number] | [nu
347
524
  b: number;
348
525
  a?: number;
349
526
  } | unknown): [number, number, number];
527
+ declare const DIRECT_LIGHT_FLOATS = 48;
350
528
  declare const Light3D: {
351
529
  /**
352
530
  * Computes the 3x3 normal matrix (stored in 4x4 layout) from a 4x4 Model matrix.
@@ -360,15 +538,49 @@ declare const Light3D: {
360
538
  /**
361
539
  * Packs active scene lights into a Float32Array matching WGSL LightsUniforms layout.
362
540
  */
363
- packLightsUniforms(lights: Light3DOptions[], environment?: Environment3DOptions | null, shadow?: ShadowUniformInfo | null, isReflectionPass?: boolean): Float32Array;
541
+ packLightsUniforms(lights: Light3DOptions[], environment?: Environment3DOptions | null, shadow?: ShadowUniformInfo | null, isReflectionPass?: boolean, hdri?: HdriUniforms, screenIndirect?: ScreenIndirectPass): Float32Array;
364
542
  /** Packs every direct light for the variable-length GPU storage binding. */
365
543
  packDirectLights(lights: Light3DOptions[], shadows?: ShadowUniformInfo[]): Float32Array;
366
544
  /** Index (among non-ambient lights) of the light that should cast shadows, or -1. */
367
545
  shadowCasterIndex(lights: Light3DOptions[]): number;
368
546
  /** Fills params.zw and the appended physical-shading block (offset 136 on). */
369
- packPhysicalBlock(buffer: Float32Array, lights: Light3DOptions[], environment?: Environment3DOptions | null, shadow?: ShadowUniformInfo | null, isReflectionPass?: boolean): void;
547
+ packPhysicalBlock(buffer: Float32Array, lights: Light3DOptions[], environment?: Environment3DOptions | null, shadow?: ShadowUniformInfo | null, isReflectionPass?: boolean, hdri?: HdriUniforms, screenIndirect?: ScreenIndirectPass): void;
370
548
  };
371
549
  //#endregion
550
+ //#region src/math3d/noise.d.ts
551
+ /**
552
+ * Seeded, deterministic gradient noise (Perlin, improved) and the fractal
553
+ * sums procedural geometry is built from. Same seed, same field: on every
554
+ * machine and every frame.
555
+ */
556
+ /** mulberry32: a small, fast, well-distributed 32-bit PRNG. Returns [0, 1). */
557
+ declare function createRandom(seed: number): () => number;
558
+ interface Noise {
559
+ /** Gradient noise in about [-1, 1]. */
560
+ noise2(x: number, y: number): number;
561
+ /** Gradient noise in about [-1, 1]. */
562
+ noise3(x: number, y: number, z: number): number;
563
+ }
564
+ /** A gradient noise field whose lattice is shuffled by `seed`. */
565
+ declare function createNoise(seed?: number): Noise;
566
+ type FractalMode = "fbm" | "ridged" | "terrace";
567
+ interface FractalOptions {
568
+ octaves: number;
569
+ persistence: number;
570
+ lacunarity: number;
571
+ mode: FractalMode;
572
+ }
573
+ /**
574
+ * Fractal sum of `octaves` noise layers at (x, y), in [0, 1] before any
575
+ * normalization: "fbm" rolls, "ridged" folds each octave into sharp crests
576
+ * (Musgrave's ridged multifractal: each octave weighted by the last, so
577
+ * detail gathers on ridges, not in valleys). Terracing is applied later,
578
+ * over the normalized field.
579
+ */
580
+ declare function fractal2(noise: Noise, x: number, y: number, o: FractalOptions): number;
581
+ /** Stepped plateaus: each step flat for most of its width, then a steep riser. */
582
+ declare function terrace(h: number, steps: number): number;
583
+ //#endregion
372
584
  //#region src/math3d/path3d.d.ts
373
585
  interface Path3DPoint {
374
586
  /** Position in 3D world space [x, y, z] */
@@ -472,6 +684,53 @@ declare class Path3D {
472
684
  static circle(options: CirclePathOptions): Path3D;
473
685
  }
474
686
  //#endregion
687
+ //#region src/math3d/relativistic-doppler.d.ts
688
+ /**
689
+ * Relativistic observer: what a camera moving at a fraction `β` of the speed
690
+ * of light sees of a scene at rest.
691
+ *
692
+ * Aberration: a ray arriving at angle θ' from the direction of motion left
693
+ * the scene at θ, with cos θ = (cos θ' − β) / (1 − β cos θ'). The Doppler
694
+ * factor D = γ (1 + β cos θ') scales every frequency, and spectral radiance
695
+ * transforms as L'(λ') = D⁵ L(D λ') (the "searchlight": ahead is brighter).
696
+ *
697
+ * A pixel only stores a colour, so its spectrum is modelled: the colour is a
698
+ * reflectance (three smooth bands that sum to one, held flat past the visible
699
+ * range, so red surfaces stay red into the infrared) lit by daylight (a
700
+ * 5778 K black body). Shifting that spectrum and integrating it against the
701
+ * CIE 1931 observer gives the colour seen. `dopplerColorMatrix(D)` is the
702
+ * resulting linear map on linear sRGB, exactly the identity at D = 1.
703
+ */
704
+ /**
705
+ * The linear-sRGB matrix (row-major 3×3) that turns a colour at rest into the
706
+ * colour seen at Doppler factor `d` (> 1 towards the direction of motion).
707
+ */
708
+ declare function dopplerColorMatrix(d: number, beaming?: boolean): number[][];
709
+ /** Largest Doppler factor the lookup table covers (β ≈ 0.99995). */
710
+ declare const DOPPLER_LUT_MAX = 200;
711
+ /** Entries in the lookup table, evenly spaced in ln D. */
712
+ declare const DOPPLER_LUT_SIZE = 256;
713
+ /**
714
+ * `dopplerColorMatrix` sampled at DOPPLER_LUT_SIZE factors evenly spaced in
715
+ * ln D over [1/DOPPLER_LUT_MAX, DOPPLER_LUT_MAX]: three vec4 rows per entry.
716
+ */
717
+ declare function dopplerLut(beaming: boolean): Float32Array;
718
+ /**
719
+ * How much brighter a neutral surface looks at Doppler factor `d`: the gain
720
+ * an exposure meter would compensate for.
721
+ */
722
+ declare function dopplerLuminanceGain(d: number, doppler: boolean, beaming: boolean): number;
723
+ /** Lorentz factor of speed β. */
724
+ declare function lorentzFactor(beta: number): number;
725
+ /**
726
+ * Where a ray seen at angle `observedCos` (cosine to the direction of motion)
727
+ * left the scene at rest, and its Doppler factor.
728
+ */
729
+ declare function aberrate(observedCos: number, beta: number): {
730
+ sourceCos: number;
731
+ doppler: number;
732
+ };
733
+ //#endregion
475
734
  //#endregion
476
735
  //#region ../webgpu-renderers/dist/text-animations/index.d.mts
477
736
  //#region src/text-animations/advanced-types.d.ts
@@ -2259,6 +2518,8 @@ interface SlugFont {
2259
2518
  fontFamily?: string;
2260
2519
  hasTrueWeight?: boolean;
2261
2520
  weight?: number;
2521
+ /** The variable axes this instance was asked for (spans inherit them). */
2522
+ variableAxes?: Record<string, number>;
2262
2523
  }
2263
2524
  //#endregion
2264
2525
  //#region src/slug/slug-pipeline.d.ts
@@ -2640,6 +2901,18 @@ declare class InputStore {
2640
2901
  declare const inputStore: InputStore;
2641
2902
  //#endregion
2642
2903
  //#region src/loaders/types.d.ts
2904
+ /**
2905
+ * One morph target's deltas. Dense: 3 floats per vertex. Sparse (with
2906
+ * `indices`): 3 floats per listed vertex, every other vertex unmoved.
2907
+ */
2908
+ interface MorphTarget3D {
2909
+ positions?: Float32Array;
2910
+ normals?: Float32Array;
2911
+ /** The moved vertices, ascending; absent for dense deltas. */
2912
+ indices?: Uint32Array;
2913
+ }
2914
+ /** A morph target's position (or normal) deltas as a dense array. */
2915
+
2643
2916
  interface Mesh3DData {
2644
2917
  id?: string;
2645
2918
  name?: string;
@@ -2647,12 +2920,11 @@ interface Mesh3DData {
2647
2920
  normals: Float32Array;
2648
2921
  uvs: Float32Array;
2649
2922
  /** Object-space morph deltas, applied before skinning. */
2650
- morphTargets?: {
2651
- positions?: Float32Array;
2652
- normals?: Float32Array;
2653
- }[];
2923
+ morphTargets?: MorphTarget3D[];
2654
2924
  /** Default morph weights for this mesh instance. */
2655
2925
  morphWeights?: number[];
2926
+ /** Morph target names (glTF mesh `extras.targetNames`), one per target. */
2927
+ morphTargetNames?: string[];
2656
2928
  /** Per-map UVs, with the map's own texture transform already applied. */
2657
2929
  mapUvs?: {
2658
2930
  normal?: Float32Array;
@@ -2667,12 +2939,24 @@ interface Mesh3DData {
2667
2939
  tangents?: Float32Array;
2668
2940
  jointIndices?: Float32Array;
2669
2941
  jointWeights?: Float32Array;
2942
+ /** A second set of 4 influences per vertex (glTF JOINTS_1 / WEIGHTS_1): up to 8 in all, the weights of both sets summing to 1. */
2943
+ jointIndices1?: Float32Array;
2944
+ jointWeights1?: Float32Array;
2670
2945
  materialName?: string;
2671
2946
  /** Scene node that places this mesh (Model3DData.nodes); its world matrix applies unless the mesh is skinned. */
2672
2947
  node?: number;
2673
2948
  /** Skin (Model3DData.skins) whose joints deform this mesh; jointIndices index its `joints`. */
2674
2949
  skin?: number;
2675
2950
  }
2951
+ /** The maps of a material besides its base color. */
2952
+ type MaterialMapSlot = "normal" | "metallicRoughness" | "occlusion" | "emissive";
2953
+ /** Addressing and filtering of one texture. */
2954
+ interface TextureSampling {
2955
+ wrapU: "repeat" | "clamp" | "mirror";
2956
+ wrapV: "repeat" | "clamp" | "mirror";
2957
+ /** Magnification filter. */
2958
+ filter: "linear" | "nearest";
2959
+ }
2676
2960
  interface Material3D {
2677
2961
  name: string;
2678
2962
  diffuseColor?: [number, number, number, number];
@@ -2695,13 +2979,22 @@ interface Material3D {
2695
2979
  textureWrap?: "repeat" | "clamp" | "mirror";
2696
2980
  /** Magnification filter (glTF sampler magFilter); "nearest" keeps texels sharp. */
2697
2981
  textureFilter?: "linear" | "nearest";
2982
+ /**
2983
+ * How each other map is sampled, when it says (glTF: its own sampler).
2984
+ * A map without an entry samples like the base color map.
2985
+ */
2986
+ mapSampling?: Partial<Record<MaterialMapSlot, TextureSampling>>;
2698
2987
  normalTexture?: string;
2699
2988
  twoSided?: boolean;
2700
2989
  /** "mask" discards texels below `alphaCutoff`; "blend" draws after the opaque meshes. */
2701
2990
  alphaMode?: "opaque" | "mask" | "blend";
2702
2991
  alphaCutoff?: number;
2703
2992
  /** How the material wants to be lit when the layer leaves `material` unset. */
2704
- shading?: "lit" | "unlit" | "toon";
2993
+ shading?: "lit" | "unlit" | "toon" | "glass";
2994
+ /** Glass (KHR_materials_transmission): index of refraction (KHR_materials_ior). */
2995
+ ior?: number;
2996
+ /** Glass: thickness in model units (KHR_materials_volume thicknessFactor). */
2997
+ thickness?: number;
2705
2998
  /** Toon shading: the color multiplier of the shadowed side. */
2706
2999
  shadeColor?: [number, number, number];
2707
3000
  /** Linear-ish emissive color 0..1 (glTF emissiveFactor). */
@@ -2718,6 +3011,29 @@ interface Material3D {
2718
3011
  occlusionStrength?: number;
2719
3012
  /** Encoded emissive color map (multiplies `emissive`). */
2720
3013
  emissiveTextureBuffer?: Uint8Array;
3014
+ /** Layered shading lobes from the file's material extensions (display colors, degrees). */
3015
+ surface?: MaterialSurface;
3016
+ }
3017
+ /**
3018
+ * Physical lobes a model file's material asks for, in the units layers use:
3019
+ * KHR_materials_clearcoat / _sheen / _anisotropy / _iridescence, and
3020
+ * subsurface from `extras.framefields.subsurface` (glTF has no skin lobe).
3021
+ */
3022
+ interface MaterialSurface {
3023
+ clearcoat?: number;
3024
+ clearcoatRoughness?: number;
3025
+ sheen?: number;
3026
+ sheenColor?: [number, number, number];
3027
+ sheenRoughness?: number;
3028
+ anisotropy?: number;
3029
+ /** Degrees. */
3030
+ anisotropyRotation?: number;
3031
+ iridescence?: number;
3032
+ iridescenceIor?: number;
3033
+ /** Film thickness, nm. */
3034
+ iridescenceThickness?: number;
3035
+ subsurface?: number;
3036
+ subsurfaceColor?: [number, number, number];
2721
3037
  }
2722
3038
  /** A scene-graph node: its rest transform and parent (glTF node semantics). */
2723
3039
  interface ModelNode3D {
@@ -2778,6 +3094,19 @@ interface Model3DData {
2778
3094
  skins?: Skin3D[];
2779
3095
  /** Centering and size normalization, applied above the scene graph instead of baked into vertices. */
2780
3096
  rootTransform?: Mat4;
3097
+ /**
3098
+ * Joints the file drives from other joints (scene `extras.framefields.drivers`):
3099
+ * eyelids following the eyes, twist bones, correctives.
3100
+ */
3101
+ drivers?: {
3102
+ joint: string;
3103
+ from: string;
3104
+ rotate: {
3105
+ x?: number;
3106
+ y?: number;
3107
+ z?: number;
3108
+ };
3109
+ }[];
2781
3110
  animations: AnimationClip3D[];
2782
3111
  bounds: {
2783
3112
  min: Vec3;
@@ -2797,18 +3126,23 @@ interface LoadModelOptions {
2797
3126
  mtlText?: string;
2798
3127
  }
2799
3128
  //#endregion
2800
- //#region src/loaders/obj-loader.d.ts
3129
+ //#region src/loaders/3ds-loader.d.ts
3130
+
3131
+ declare function parseFBX(bufferOrText: ArrayBuffer | Uint8Array | string, options?: LoadModelOptions): Model3DData;
3132
+ declare function loadFBX(srcOrData: string | ArrayBuffer | Uint8Array, options?: LoadModelOptions): Model3DData;
3133
+ //#endregion
3134
+ //#region src/loaders/gltf-loader.d.ts
2801
3135
 
2802
3136
  declare function parseOBJ(objText: string, mtlText?: string, options?: LoadModelOptions): Model3DData;
2803
3137
  declare function parseMTL(mtlText: string): Record<string, Material3D>;
2804
3138
  declare function loadOBJ(srcOrData: string | ArrayBuffer | Uint8Array, mtlText?: string, options?: LoadModelOptions): Model3DData;
2805
3139
  //#endregion
2806
- //#region src/loaders/fbx-loader.d.ts
3140
+ //#region src/loaders/off-loader.d.ts
2807
3141
 
2808
- declare function parseFBX(bufferOrText: ArrayBuffer | Uint8Array | string, options?: LoadModelOptions): Model3DData;
2809
- declare function loadFBX(srcOrData: string | ArrayBuffer | Uint8Array, options?: LoadModelOptions): Model3DData;
2810
3142
  //#endregion
2811
- //#region src/loaders/stl-loader.d.ts
3143
+ //#region src/loaders/pose.d.ts
3144
+ type Quat = [number, number, number, number];
3145
+ /** Column-major translate · rotate(quaternion) · scale. */
2812
3146
 
2813
3147
  //#endregion
2814
3148
  //#region src/lut-store.d.ts
@@ -2891,12 +3225,18 @@ declare class AudioMeshDeformPipeline {
2891
3225
  pipeline: GPUComputePipeline;
2892
3226
  bindGroupLayout: GPUBindGroupLayout;
2893
3227
  private uniformPool;
2894
- private deformedBuffers;
3228
+ /**
3229
+ * One output per dispatch this frame: layers sharing a mesh deform it
3230
+ * differently, and each draw (and motion blur's copy) reads its own.
3231
+ */
3232
+ private outputs;
3233
+ private outputIndex;
2895
3234
  private uniformData;
2896
3235
  private uniformUint32;
2897
3236
  private uniformFloat32;
2898
3237
  constructor(device: GPUDevice);
2899
- getOrCreateDeformedBuffer(srcBuffer: GPUBuffer, byteLength: number): GPUBuffer;
3238
+ /** The next output of this frame, at least `byteLength` bytes. */
3239
+ private nextOutput;
2900
3240
  execute(encoder: GPUCommandEncoder, srcVertexBuffer: GPUBuffer, options: DeformDispatchOptions): GPUBuffer;
2901
3241
  resetPools(): void;
2902
3242
  destroy(): void;
@@ -2949,6 +3289,9 @@ declare class FloorReflectionPipeline {
2949
3289
  draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, reflectionTexture: GPUTexture, floor: Environment3DFloor, useMrt?: boolean, useBloom?: boolean): void;
2950
3290
  destroy(): void;
2951
3291
  }
3292
+ //#endregion
3293
+ //#region src/renderer3d/fracture-geometry.d.ts
3294
+
2952
3295
  //#endregion
2953
3296
  //#region src/renderer3d/glass-pipeline.d.ts
2954
3297
  /**
@@ -2992,11 +3335,56 @@ declare class GlassPipeline {
2992
3335
  destroy(): void;
2993
3336
  }
2994
3337
  //#endregion
2995
- //#region src/renderer3d/matte3d.d.ts
2996
- /** The per-draw matte binding of the 3D pipelines (see `shaders/matte3d.ts`). */
3338
+ //#region src/renderer3d/hdr-environment.d.ts
3339
+ /** A captured panorama, ready for image-based lighting. */
2997
3340
 
3341
+ //#endregion
3342
+ //#region src/renderer3d/lens-remap-pipeline.d.ts
3343
+ /** An observer moving at `speed` (a fraction of c) through a scene at rest. */
3344
+ interface RelativisticObserver {
3345
+ /** β = v / c, 0 ≤ β < 1. */
3346
+ speed: number;
3347
+ /** Unit direction of motion in world space. */
3348
+ direction: Vec3;
3349
+ /** Shift colours along the spectrum (blue ahead, red behind). */
3350
+ doppler: boolean;
3351
+ /** Brighten ahead and dim behind (relativistic beaming). */
3352
+ beaming: boolean;
3353
+ /**
3354
+ * Exposure for the shifted light: stops, or "auto" to meter the centre of
3355
+ * the view, so what the camera looks at keeps its brightness at rest.
3356
+ */
3357
+ exposure: number | "auto";
3358
+ }
3359
+ interface LensRemapOptions {
3360
+ projection: LensProjection;
3361
+ /** Degrees; see `CubeLensOptions.fov`. */
3362
+ fov: number;
3363
+ zoom: number;
3364
+ /** The camera's frame: screen right, screen up, forward (world space). */
3365
+ basis: {
3366
+ right: Vec3;
3367
+ up: Vec3;
3368
+ forward: Vec3;
3369
+ };
3370
+ observer?: RelativisticObserver | null;
3371
+ }
2998
3372
  //#endregion
2999
3373
  //#region src/renderer3d/surface-params.d.ts
3374
+ interface IridescenceOptions {
3375
+ /** Thin-film interference blend intensity 0..1 (default 1 when object is passed). */
3376
+ intensity?: number;
3377
+ /** Thin-film thickness in nanometers 100..1000 (default 400). */
3378
+ thickness?: number;
3379
+ /** Thin-film refractive index 1.05..2.5 (default 1.3). */
3380
+ ior?: number;
3381
+ }
3382
+ interface TriplanarOptions {
3383
+ /** Tiling scale (repeats per 256 world px, or raw UV/px if < 0.05; default 1). */
3384
+ scale?: number;
3385
+ /** Normal blend exponent across projection axes 1..16 (default 4). */
3386
+ sharpness?: number;
3387
+ }
3000
3388
  /** Physically based surface inputs every 3D draw (quad, text, mesh) accepts. */
3001
3389
  interface SurfaceParams {
3002
3390
  toon?: ToonShading;
@@ -3011,8 +3399,38 @@ interface SurfaceParams {
3011
3399
  emissiveIntensity?: number;
3012
3400
  /** Casts into a `castShadow` light's shadow map (meshes default on, quads off). */
3013
3401
  castShadow?: boolean;
3014
- }
3015
- /** Shared model uniforms: PBR, emissive, and three art-direction vec4s. */
3402
+ /** Secondary dielectric clearcoat/varnish lobe 0..1 (car paint, wet coats, polished lacquer). */
3403
+ clearcoat?: number;
3404
+ /** Roughness of the clearcoat layer 0..1 (default 0.08). */
3405
+ clearcoatRoughness?: number;
3406
+ /** Anisotropic GGX highlight stretch -1..1 (brushed metal, satin, hair; 0 = isotropic). */
3407
+ anisotropy?: number;
3408
+ /** Brush tangent rotation in degrees around the surface normal (default 0). */
3409
+ anisotropyRotation?: number;
3410
+ /** Subsurface wrap diffuse and translucent back-scattering 0..1 (wax, jade, skin, foliage). */
3411
+ subsurface?: number;
3412
+ /** Subsurface scatter & transmission tint color (default "#ff6b4a"). */
3413
+ subsurfaceColor?: string | Color | [number, number, number];
3414
+ /** Charlie cloth / velvet grazing retro-reflection lobe 0..1. */
3415
+ sheen?: number;
3416
+ /** Cloth sheen tint color (default "#ffffff"). */
3417
+ sheenColor?: string | Color | [number, number, number];
3418
+ /** Cloth sheen microfiber roughness 0.05..1 (default 0.5). */
3419
+ sheenRoughness?: number;
3420
+ /** Thin-film spectral iridescence 0..1 or `{ intensity, thickness, ior }`. */
3421
+ iridescence?: number | IridescenceOptions;
3422
+ /** Thin-film thickness in nanometers 100..1000 (default 400). */
3423
+ iridescenceThickness?: number;
3424
+ /** Thin-film refractive index 1.05..2.5 (default 1.3). */
3425
+ iridescenceIor?: number;
3426
+ /** Seamless world-space triplanar texture projection for UV-less or procedural meshes. */
3427
+ triplanar?: boolean | TriplanarOptions;
3428
+ /** World-space triplanar tiling scale (repeats per 256 world px; >0 enables triplanar). */
3429
+ triplanarScale?: number;
3430
+ /** World-space triplanar axis blend sharpness 1..16 (default 4). */
3431
+ triplanarSharpness?: number;
3432
+ }
3433
+ /** Shared model uniforms: PBR, emissive, three art-direction vec4s, and four Substrate multi-lobe vec4s. */
3016
3434
 
3017
3435
  //#endregion
3018
3436
  //#region src/renderer3d/mesh3d-pipeline.d.ts
@@ -3028,6 +3446,8 @@ interface MeshMaterialMaps {
3028
3446
  occlusionStrength?: number;
3029
3447
  /** Multiplies the emissive color. */
3030
3448
  emissive?: GPUTexture;
3449
+ /** Each map's own sampler; a map without one samples like the base color. */
3450
+ samplers?: Partial<Record<"normal" | "metallicRoughness" | "occlusion" | "emissive", GPUSampler>>;
3031
3451
  }
3032
3452
  interface MeshGlass {
3033
3453
  /** Index of refraction (1.5 glass, 1.33 water). */
@@ -3039,6 +3459,38 @@ interface MeshGlass {
3039
3459
  /** Frosted blur, 0–1. */
3040
3460
  frost: number;
3041
3461
  }
3462
+ /**
3463
+ * Procedural wind: vertices bend downwind by how far they sit above the
3464
+ * mesh's base, swaying in a traveling wave (instances sway out of phase).
3465
+ */
3466
+ interface MeshWind {
3467
+ /** Peak lean, degrees. */
3468
+ amplitudeDeg: number;
3469
+ /** Sways per second. */
3470
+ frequency: number;
3471
+ /** Downwind direction on the ground plane [x, z]. */
3472
+ direction: [number, number];
3473
+ /** Gust wavelength across the field, px. */
3474
+ waveScale: number;
3475
+ /** Seconds. */
3476
+ time: number;
3477
+ /** The mesh's base (its largest local y: up is -y) and height, px. */
3478
+ baseY: number;
3479
+ height: number;
3480
+ }
3481
+ /** Floats in the mesh `ModelUniforms` struct. */
3482
+
3483
+ /**
3484
+ * Skinned crowd (vertex animation): every instance skins from a baked
3485
+ * joint palette at its own clip, phase and speed (`bakeCrowdPalette`).
3486
+ */
3487
+ interface MeshCrowd {
3488
+ /** `palette` uploaded once: `frames × jointCount` model-space joint matrices. */
3489
+ palette: GPUBuffer;
3490
+ jointCount: number;
3491
+ /** Seconds. */
3492
+ time: number;
3493
+ }
3042
3494
  interface MeshUniformData extends SurfaceParams {
3043
3495
  modelMatrix: Float32Array | number[];
3044
3496
  normalMatrix?: Float32Array | number[];
@@ -3050,6 +3502,8 @@ interface MeshUniformData extends SurfaceParams {
3050
3502
  transparent?: boolean;
3051
3503
  /** Extra per-map UV vertex attributes are present. */
3052
3504
  hasMapUvs?: boolean;
3505
+ /** The mesh binds a second set of four skin influences. */
3506
+ hasSkin1?: boolean;
3053
3507
  isSkinned?: boolean;
3054
3508
  skinningMatrices?: Float32Array;
3055
3509
  /** Hardware-instanced draw path. */
@@ -3079,7 +3533,26 @@ interface MeshUniformData extends SurfaceParams {
3079
3533
  specularIntensity?: number;
3080
3534
  ambientIntensity?: number;
3081
3535
  metallic?: number;
3536
+ /** Base-color UV window [x, y, width, height]: uv' = xy + uv · wh. */
3537
+ uvRect?: [number, number, number, number];
3538
+ wind?: MeshWind;
3539
+ /** Instances carry a second record each and skin from a baked palette. */
3540
+ crowd?: MeshCrowd;
3082
3541
  }
3542
+ /**
3543
+ * A mesh's state one frame earlier, for the velocity pass; unset fields
3544
+ * repeat this frame's (no motion from them).
3545
+ */
3546
+ type MeshMotionPrev = Pick<MeshUniformData, "modelMatrix" | "normalMatrix" | "skinningMatrices" | "instanceBuffer" | "wind" | "crowd"> & {
3547
+ /**
3548
+ * The mesh's vertices as the GPU deformed them a frame earlier (morph
3549
+ * targets, audio deformation), in the vertex buffer's layout. Absent:
3550
+ * the vertices did not change shape, so this frame's buffer stands in.
3551
+ */
3552
+ vertexBuffer?: GPUBuffer;
3553
+ };
3554
+ /** Format of the velocity target: motion px (rg), linear depth (b), coverage (a). */
3555
+
3083
3556
  interface GPUMeshBuffers {
3084
3557
  vertexBuffer: GPUBuffer;
3085
3558
  indexBuffer: GPUBuffer;
@@ -3089,6 +3562,8 @@ interface GPUMeshBuffers {
3089
3562
  /** Per-vertex RGBA (display / sRGB), 4 floats each; absent = white. */
3090
3563
  colorBuffer?: GPUBuffer;
3091
3564
  mapUvBuffer?: GPUBuffer;
3565
+ /** Second skin influence set: 4 joints then 4 weights per vertex. */
3566
+ skin1Buffer?: GPUBuffer;
3092
3567
  wireIndexBuffer?: GPUBuffer;
3093
3568
  wireIndexCount?: number;
3094
3569
  }
@@ -3125,11 +3600,27 @@ declare class Mesh3DPipeline {
3125
3600
  /** Outgrown white buffers: earlier draws this frame may still read them. */
3126
3601
  private retiredColorBuffers;
3127
3602
  private modelData;
3603
+ private readonly vertexBuffers;
3604
+ /** Velocity-pass camera: this and the previous view-projection. */
3605
+ readonly velocityCameraLayout: GPUBindGroupLayout;
3606
+ private velocityModule?;
3607
+ private readonly velocityPipelines;
3128
3608
  constructor(device: GPUDevice, format: GPUTextureFormat, depthFormat?: GPUTextureFormat, cameraLayout?: GPUBindGroupLayout, lightsLayout?: GPUBindGroupLayout, /** Samples per pixel of the pass this draws into (MSAA). */
3129
3609
  sampleCount?: number);
3130
3610
  resetPools(): void;
3131
3611
  private packModel;
3132
3612
  draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, meshBuffers: GPUMeshBuffers, texture: GPUTexture | undefined, sampler: GPUSampler, data: MeshUniformData, useMrt?: boolean, useBloom?: boolean, instanceCount?: number, firstInstance?: number): void;
3613
+ /**
3614
+ * Draws the mesh's screen motion since `prev` into a velocity pass
3615
+ * (`VELOCITY_FORMAT`): the vertex runs this frame's and the previous
3616
+ * frame's deformation, so skinning, instances, wind and crowds move it
3617
+ * too.
3618
+ */
3619
+ drawVelocity(pass: GPURenderPassEncoder, velocityCameraBindGroup: GPUBindGroup, meshBuffers: GPUMeshBuffers, texture: GPUTexture | undefined, sampler: GPUSampler, data: MeshUniformData, prev: MeshMotionPrev | undefined, instanceCount?: number, firstInstance?: number): void;
3620
+ private velocityPipeline;
3621
+ private textureGroup;
3622
+ /** Binds the vertex and index buffers and draws (instanced when asked). */
3623
+ private issue;
3133
3624
  /** Draws the mesh into a shadow map (`lightCameraBindGroup` holds the light's view-projection). */
3134
3625
  drawShadow(pass: GPURenderPassEncoder, lightCameraBindGroup: GPUBindGroup, meshBuffers: GPUMeshBuffers, data: MeshUniformData, instanceCount?: number, firstInstance?: number): void;
3135
3626
  private colorsFor;
@@ -3137,30 +3628,157 @@ declare class Mesh3DPipeline {
3137
3628
  }
3138
3629
  //#endregion
3139
3630
  //#region src/renderer3d/motion-blur-pipeline.d.ts
3140
- /**
3141
- * @file packages/webgpu-renderers/src/renderer3d/motion-blur-pipeline.ts
3142
- * WebGPU render pipeline for camera shutter motion blur using screen-space velocity buffers.
3143
- */
3144
3631
  interface MotionBlurPassOptions {
3632
+ /** Shutter angle, degrees. Default 180. */
3145
3633
  shutterAngle?: number;
3634
+ /** Taps along each pixel's motion. Default 20. */
3146
3635
  sampleCount?: number;
3147
- maxVelocity?: number;
3148
- depthThreshold?: number;
3149
- curveType?: "box" | "gaussian" | "triangle";
3150
- width: number;
3151
- height: number;
3636
+ /** Longest blur from a pixel (and the tile size), px. Default 48. */
3637
+ maxBlur?: number;
3638
+ /** Depth softness between in front and behind, scene px. Default 20. */
3639
+ softDepth?: number;
3152
3640
  }
3641
+ /** Format of the tile textures `render` takes. */
3642
+
3153
3643
  declare class MotionBlurPipeline {
3154
- private device;
3155
- private pipeline;
3156
- private bindGroupLayout;
3157
- private uniformBuffer;
3158
- private sampler;
3644
+ private readonly device;
3645
+ private readonly module;
3646
+ private readonly tileMax;
3647
+ private readonly neighborMax;
3648
+ private readonly reconstruct;
3649
+ /** One uniform block per blur this frame: an encoder may blur several scenes. */
3650
+ private readonly params;
3159
3651
  constructor(device: GPUDevice);
3160
- render(commandEncoder: GPUCommandEncoder, colorView: GPUTextureView, velocityView: GPUTextureView, depthView: GPUTextureView, targetView: GPUTextureView, options: MotionBlurPassOptions): void;
3652
+ private pipeline;
3653
+ /**
3654
+ * Blurs `color` (premultiplied) by `velocity` (`VELOCITY_FORMAT`, same
3655
+ * size) into `target` (a view of `targetFormat`, same size). `tiles`
3656
+ * returns a render-attachment texture of the tile grid's size: the
3657
+ * caller owns them, since one frame may blur scenes of several sizes.
3658
+ */
3659
+ render(encoder: GPUCommandEncoder, color: GPUTexture, velocity: GPUTexture, target: GPUTextureView, targetFormat: GPUTextureFormat, options: MotionBlurPassOptions, tiles: (label: string, width: number, height: number) => GPUTexture): void;
3660
+ private pass;
3661
+ resetPools(): void;
3161
3662
  destroy(): void;
3162
3663
  }
3163
3664
  //#endregion
3665
+ //#region src/renderer3d/geometry-arrays.d.ts
3666
+ /**
3667
+ * Flat vertex arrays procedural meshes are assembled in before they become a
3668
+ * Mesh3DData. Winding follows the primitives': for a triangle (a, b, c),
3669
+ * cross(b - a, c - a) points out of the surface.
3670
+ */
3671
+
3672
+ //#endregion
3673
+ //#region src/renderer3d/sdf-geometry.d.ts
3674
+ type SdfOp = "union" | "subtract" | "intersect";
3675
+ interface SdfPrimitiveBase {
3676
+ /** How this shape combines with everything before it. Default "union". */
3677
+ op?: SdfOp;
3678
+ /** Blend radius of the join, px (0 = a hard edge). Default 0. */
3679
+ smoothness?: number;
3680
+ /** Center, px, in the sculpture's local space. Default [0, 0, 0]. */
3681
+ center?: [number, number, number];
3682
+ /** Euler degrees [x, y, z]. */
3683
+ rotation?: [number, number, number];
3684
+ /** Surface color where this shape forms the surface (cuts too). */
3685
+ color?: string;
3686
+ }
3687
+ type SdfPrimitive = SdfPrimitiveBase & ({
3688
+ shape: "sphere";
3689
+ radius: number;
3690
+ } | {
3691
+ shape: "box";
3692
+ size: [number, number, number];
3693
+ /** Corner rounding, px. */
3694
+ radius?: number;
3695
+ } | {
3696
+ shape: "cylinder" | "capsule";
3697
+ radius: number;
3698
+ height: number;
3699
+ } | {
3700
+ shape: "torus";
3701
+ radius: number;
3702
+ tube: number;
3703
+ } | {
3704
+ shape: "gyroid";
3705
+ /** Period of the lattice, px. */
3706
+ scale: number;
3707
+ /** Wall thickness, px. */
3708
+ thickness: number;
3709
+ });
3710
+ interface SdfGeometryOptions {
3711
+ type: "sdf";
3712
+ primitives: SdfPrimitive[];
3713
+ /** The sculpture is clipped to this box [width, height, depth], px. */
3714
+ bounds: [number, number, number];
3715
+ /** Cells along the longest side of `bounds`, 16..160. Default 64. */
3716
+ resolution?: number;
3717
+ /** Faceted shading. */
3718
+ flatShaded?: boolean;
3719
+ color?: string;
3720
+ material?: "lit" | "unlit" | "toon";
3721
+ shininess?: number;
3722
+ roughness?: number;
3723
+ metallic?: number;
3724
+ }
3725
+ //#endregion
3726
+ //#region src/renderer3d/terrain-geometry.d.ts
3727
+ interface TerrainNoiseOptions {
3728
+ seed?: number;
3729
+ /** Size of the largest landforms, px. Default: a third of the longer side. */
3730
+ scale?: number;
3731
+ /** Noise layers summed, 1..10. Default 6. */
3732
+ octaves?: number;
3733
+ /** Amplitude kept per octave, 0..1. Default 0.5. */
3734
+ persistence?: number;
3735
+ /** Frequency gained per octave, 1..4. Default 2. */
3736
+ lacunarity?: number;
3737
+ /** "fbm" rolling hills, "ridged" sharp crests, "terrace" stepped plateaus. Default "fbm". */
3738
+ ridgeMode?: FractalMode;
3739
+ /** Plateaus for "terrace", 2..32. Default 6. */
3740
+ terraceSteps?: number;
3741
+ }
3742
+ interface TerrainColorByElevation {
3743
+ lowColor: string;
3744
+ midColor?: string;
3745
+ highColor: string;
3746
+ /** Steep faces (slope cosine below `cliffThreshold`) blend to this. */
3747
+ cliffColor?: string;
3748
+ /** Slope cosine (1 = flat) below which cliffs show. Default 0.65. */
3749
+ cliffThreshold?: number;
3750
+ /** Normalized altitudes where low turns mid and mid turns high. Default [0.35, 0.7]. */
3751
+ bands?: [number, number];
3752
+ }
3753
+ interface TerrainGeometryOptions {
3754
+ type: "terrain";
3755
+ width: number;
3756
+ depth: number;
3757
+ /** Peak-to-valley relief, px. Default 300. */
3758
+ height?: number;
3759
+ /** Grid cells along x and z (or both), 1..512. Default 128. */
3760
+ segments?: number | [number, number];
3761
+ noise?: TerrainNoiseOptions;
3762
+ /**
3763
+ * Heights 0..1 on the (segments + 1)² grid, row by row from the near
3764
+ * edge (-z) and left to right: a DEM, or a sampled height function.
3765
+ * Replaces the noise.
3766
+ */
3767
+ heights?: number[];
3768
+ /** Sideways warp of steep faces into overhangs, px. Default 0. */
3769
+ overhangWarp?: number;
3770
+ colorByElevation?: TerrainColorByElevation;
3771
+ /** Faceted, low-poly shading. */
3772
+ flatShaded?: boolean;
3773
+ /** Thickness of the solid under the valley floor, px. Default 10% of `height`. */
3774
+ base?: number;
3775
+ color?: string;
3776
+ material?: "lit" | "unlit" | "toon";
3777
+ shininess?: number;
3778
+ roughness?: number;
3779
+ metallic?: number;
3780
+ }
3781
+ //#endregion
3164
3782
  //#region src/renderer3d/text-extruder.d.ts
3165
3783
  interface Point2D {
3166
3784
  x: number;
@@ -3188,6 +3806,10 @@ interface RoundedBoxGeometryOptions extends PrimitiveSurface {
3188
3806
  depth: number;
3189
3807
  /** Corner and edge radius, clamped to half the smallest side. Default 0 (a sharp box). */
3190
3808
  radius?: number;
3809
+ /** Alias for `radius`. */
3810
+ cornerRadius?: number;
3811
+ /** Alias for `radius`. */
3812
+ borderRadius?: number;
3191
3813
  /** Segments per rounded quarter (default 4). */
3192
3814
  segments?: number;
3193
3815
  /**
@@ -3206,8 +3828,12 @@ interface CylinderGeometryOptions extends PrimitiveSurface {
3206
3828
  type: "cylinder";
3207
3829
  /** Radius of the top (-y) cap; defaults to `radius`. */
3208
3830
  radiusTop?: number;
3831
+ /** Alias for `radiusTop`. */
3832
+ topRadius?: number;
3209
3833
  /** Radius of the bottom (+y) cap; defaults to `radius`. */
3210
3834
  radiusBottom?: number;
3835
+ /** Alias for `radiusBottom`. */
3836
+ bottomRadius?: number;
3211
3837
  radius?: number;
3212
3838
  height: number;
3213
3839
  /** Segments around (default 32). */
@@ -3221,8 +3847,14 @@ interface TorusGeometryOptions extends PrimitiveSurface {
3221
3847
  type: "torus";
3222
3848
  /** Major radius from the torus center to the center of the tube (default 60). */
3223
3849
  radius?: number;
3850
+ /** Alias for `radius`. */
3851
+ majorRadius?: number;
3224
3852
  /** Minor radius of the circular tube cross-section (default 20). */
3225
3853
  tube?: number;
3854
+ /** Alias for `tube`. */
3855
+ minorRadius?: number;
3856
+ /** Alias for `tube`. */
3857
+ tubeRadius?: number;
3226
3858
  /** Segments around the tube cross-section (default 24). */
3227
3859
  radialSegments?: number;
3228
3860
  /** Segments around the main ring (default 48). */
@@ -3446,7 +4078,7 @@ interface ModelUniformData extends SurfaceParams {
3446
4078
  ambientIntensity?: number;
3447
4079
  metallic?: number;
3448
4080
  }
3449
- type MaterialUniformData = Pick<ModelUniformData, "material" | "shininess" | "roughness" | "specularIntensity" | "ambientIntensity" | "metallic" | "emissive" | "emissiveIntensity" | "toon" | "outline">;
4081
+ type MaterialUniformData = SurfaceParams & Pick<ModelUniformData, "material" | "shininess" | "specularIntensity" | "ambientIntensity">;
3450
4082
  /** [shininess, specularIntensity, ambientIntensity, materialMode] as the 3D shaders' lighting reads them. */
3451
4083
 
3452
4084
  declare class Quad3DPipeline {
@@ -3501,6 +4133,16 @@ interface Slug3DUniformData extends MaterialUniformData {
3501
4133
  /** Screen-space track matte: the text shows where this texture's alpha does. */
3502
4134
  matte?: GPUTexture;
3503
4135
  }
4136
+ /** A text batch's motion for the velocity pass: this and the previous frame. */
4137
+ interface SlugMotionData {
4138
+ modelMatrix: Mat4;
4139
+ prevModelMatrix: Mat4;
4140
+ /** The previous frame's glyph records (same glyphs, same order); absent = unchanged. */
4141
+ prevInstances?: Float32Array;
4142
+ opacity: number;
4143
+ slant: number;
4144
+ depthPull: number;
4145
+ }
3504
4146
  /** Slug glyphs in the 3D pass: depth-tested, lit and resolution independent. */
3505
4147
  declare class Slug3DPipeline {
3506
4148
  private device;
@@ -3512,10 +4154,19 @@ declare class Slug3DPipeline {
3512
4154
  private modelPool;
3513
4155
  private instancePool;
3514
4156
  private fontBindGroups;
4157
+ private motionPool;
4158
+ private velocity?;
3515
4159
  private modelData;
3516
4160
  constructor(device: GPUDevice, format: GPUTextureFormat, depthFormat: GPUTextureFormat, cameraLayout: GPUBindGroupLayout, lightsLayout: GPUBindGroupLayout, /** Samples per pixel of the pass this draws into (MSAA). */
3517
4161
  sampleCount?: number);
3518
4162
  resetPools(): void;
4163
+ /**
4164
+ * Draws a text batch's screen motion into a velocity pass: its glyphs
4165
+ * placed with this and the previous frame's plane and glyph animation,
4166
+ * written where the outline covers the pixel.
4167
+ */
4168
+ drawVelocity(pass: GPURenderPassEncoder, velocityCameraBindGroup: GPUBindGroup, velocityCameraLayout: GPUBindGroupLayout, font: SlugFont, instances: Float32Array, instanceCount: number, data: SlugMotionData): void;
4169
+ private velocityPipeline;
3519
4170
  draw(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, font: SlugFont, instances: Float32Array, instanceCount: number, data: Slug3DUniformData, useMrt?: boolean, useBloom?: boolean): void;
3520
4171
  /** A font's textures live as long as the font: bind them once, not per draw. */
3521
4172
  private fontBindGroup;
@@ -3712,6 +4363,12 @@ interface DrawMesh3DOpts extends SurfaceParams {
3712
4363
  dispersion?: number;
3713
4364
  /** Edge bend for glass materials, px (default 80). */
3714
4365
  thickness?: number;
4366
+ /**
4367
+ * Glass thickness in world units (model files: KHR_materials_volume):
4368
+ * the refracted ray's exit point is projected, so the bend follows the
4369
+ * object's size on screen. Used when `thickness` (px) is unset.
4370
+ */
4371
+ worldThickness?: number;
3715
4372
  /** Screen-sized picture behind this 3D batch; glass materials refract it. */
3716
4373
  backdrop?: GPUTexture;
3717
4374
  /**
@@ -3784,6 +4441,12 @@ interface DrawMesh3DOpts extends SurfaceParams {
3784
4441
  matrixInstances?: boolean;
3785
4442
  /** Optional overall bounding box (e.g. for instanced clusters or swarms) for shadow frustum fitting. */
3786
4443
  bounds?: Aabb;
4444
+ /** Base-color UV window [x, y, width, height] (a layer texture's place in its pass). */
4445
+ uvRect?: [number, number, number, number];
4446
+ /** Procedural wind sway (`MeshWind`). */
4447
+ wind?: MeshWind;
4448
+ /** Skinned crowd: instances skin from a baked palette (`MeshCrowd`). */
4449
+ crowd?: MeshCrowd;
3787
4450
  }
3788
4451
  /** Scene-wide world settings for a 3D pass. */
3789
4452
  interface Scene3DWorld {
@@ -3791,6 +4454,11 @@ interface Scene3DWorld {
3791
4454
  environment?: Environment3DOptions | null;
3792
4455
  /** From `renderShadowMap`, when a light casts shadows. */
3793
4456
  shadow?: ShadowUniformInfo | ShadowUniformInfo[] | null;
4457
+ /**
4458
+ * Screen-space reflections / GI (`environment.ssr`, `environment.gi`) take
4459
+ * two passes: `radiance`, then `traceScreenIndirect`, then `apply`.
4460
+ */
4461
+ screenIndirect?: ScreenIndirectPass;
3794
4462
  }
3795
4463
  /** Something that can fall into a shadow map. */
3796
4464
  type ShadowCaster3D = {
@@ -3846,21 +4514,42 @@ declare class Renderer3D {
3846
4514
  /** Whether the current pass also writes HDR radiance (bloom). */
3847
4515
  private passWritesHdr;
3848
4516
  private cameraUniformData;
4517
+ private velocityCameraPool;
4518
+ private quadMotionPool;
4519
+ private motionBlurPipeline?;
4520
+ private quadVelocity?;
4521
+ private floorVelocity?;
4522
+ /**
4523
+ * Environments looked up this frame: a pass asks several times, and a
4524
+ * file path is checked on disk (stat) once per frame, not per lookup.
4525
+ */
4526
+ private hdrEnvironments;
4527
+ /** The HDR target blurred by `applyMotionBlur`: what bloom reads after it. */
4528
+ private hdrBlurred;
3849
4529
  private meshBuffersCache;
3850
4530
  private materialTextures;
3851
4531
  private materialMapCache;
3852
4532
  /** Parsed models by source and load options: a model file is read once, not every frame. */
3853
4533
  private modelCache;
3854
- private lastCameraPose;
4534
+ /** What the cached camera buffer was packed from (pose, lens, surface). */
4535
+ private lastCameraKey;
3855
4536
  private shadowTexture;
3856
4537
  private shadowTextures;
3857
4538
  private placeholderShadowTexture;
3858
4539
  private shadowSampler;
4540
+ private placeholderEnvTexture;
4541
+ private envSampler;
3859
4542
  private meshBounds;
3860
4543
  private bloomPipeline;
3861
4544
  private outlinePipeline;
3862
4545
  private geometryResolvePipeline;
4546
+ private volumetricFogPipeline;
4547
+ private ssrGiPipeline;
4548
+ private screenIndirect;
4549
+ private placeholderScreenIndirect;
4550
+ private screenSampler;
3863
4551
  private lastCameraBuffer;
4552
+ private lensPipeline;
3864
4553
  /**
3865
4554
  * Samples per pixel in the 3D pass. Mesh silhouettes (extruded text,
3866
4555
  * models) are rasterized triangles: without MSAA every edge is a hard
@@ -3877,11 +4566,26 @@ declare class Renderer3D {
3877
4566
  private attachments;
3878
4567
  private attachmentsUsed;
3879
4568
  private attachment;
4569
+ private hdrEnvironment;
3880
4570
  resetPools(): void;
3881
4571
  getOrCreateDepthTexture(width: number, height: number): GPUTexture;
3882
4572
  private getOrCreateMsaaTexture;
3883
4573
  /** The HDR radiance target the last `beginPass(…, writeHdr)` drew into. */
3884
4574
  hdrSource(): GPUTexture | null;
4575
+ /**
4576
+ * A cube camera's target: six `size`² faces with a full mip chain, drawn
4577
+ * into face by face and sampled by `remapLens`. `hdr` holds the scene
4578
+ * radiance (the bloom source) instead of display colour.
4579
+ */
4580
+ getOrCreateCubeTexture(size: number, hdr: boolean): GPUTexture;
4581
+ /** Face `face` (WebGPU layer order) of a cube target, as a render attachment. */
4582
+ cubeFaceView(cube: GPUTexture, face: number): GPUTextureView;
4583
+ /**
4584
+ * Draws a cube camera's picture into `dest` (`width` × `height`) through
4585
+ * its lens. With an `hdr` cube the radiance is remapped too and becomes
4586
+ * `hdrSource()`, so bloom glows where the lens put the light.
4587
+ */
4588
+ remapLens(encoder: GPUCommandEncoder, color: GPUTexture, hdr: GPUTexture | null, dest: GPUTextureView, width: number, height: number, options: LensRemapOptions): void;
3885
4589
  private getOrCreateHdrTexture;
3886
4590
  getOrCreateLinearDepthTexture(width: number, height: number): GPUTexture;
3887
4591
  getOrCreateReflectionTexture(width: number, height: number): GPUTexture;
@@ -3890,22 +4594,35 @@ declare class Renderer3D {
3890
4594
  getOrCreateReflectionTempTexture(width: number, height: number): GPUTexture;
3891
4595
  getOrCreateReflectionBlurredTexture(width: number, height: number): GPUTexture;
3892
4596
  packCameraUniforms(camera: Camera3DPose, surfaceWidth: number, surfaceHeight: number, time?: number): GPUBuffer;
4597
+ /** The environment's prefiltered HDRI, as the lights uniform describes it. */
4598
+ private hdriUniforms;
3893
4599
  createCameraBindGroup(cameraBuffer: GPUBuffer): GPUBindGroup;
3894
4600
  getOrCreateLightsBuffer(lights?: Light3DOptions[], world?: Scene3DWorld): GPUBuffer;
3895
- /** Lights uniform + shadow map + comparison sampler (group 3 of every lit shader). */
4601
+ /** Lights uniform + shadow map + comparison sampler + environment map (group 3 of every lit shader). */
3896
4602
  private createLightsBindGroup;
4603
+ /** Group 3 bindings 6..9: the traced screen indirect light, or 1×1 stand-ins. */
4604
+ private screenIndirectEntries;
4605
+ /**
4606
+ * Traces screen-space reflections and diffuse GI from the radiance pass
4607
+ * just ended (`beginPass` with `screenIndirect: "radiance"`, a geometry
4608
+ * target and `writeHdr`), for the `apply` pass that follows.
4609
+ */
4610
+ traceScreenIndirect(encoder: GPUCommandEncoder, cameraBuffer: GPUBuffer, environment: Environment3DOptions): void;
3897
4611
  /** Local bounds of a mesh, computed once. */
3898
4612
  private meshAabb;
3899
4613
  /** World bounds of a mesh or quad draw, for fitting shadow frusta. */
3900
4614
  worldBounds(item: ShadowCaster3D): Aabb;
4615
+ private getOrCreateShadowTexture;
4616
+ private renderShadowLayerPass;
3901
4617
  /**
3902
- * Renders the shadow map for `light` (a directional or spot light with
4618
+ * Renders the shadow map for `light` (a directional, spot, rect, or point light with
3903
4619
  * `castShadow`) from `casters`, fitting its frustum around them and deep
3904
4620
  * enough for `receivers`. Pass the result to `beginPass` as `world.shadow`.
3905
4621
  */
3906
4622
  renderShadowMap(encoder: GPUCommandEncoder, light: Light3DOptions, lightIndex: number, casters: ShadowCaster3D[], receivers: Aabb[], options?: ShadowMapOptions3D): ShadowUniformInfo | null;
3907
4623
  beginPass(encoder: GPUCommandEncoder, colorTargetView: GPUTextureView, surfaceWidth: number, surfaceHeight: number, camera: Camera3DPose, loadOp?: GPULoadOp, clearColor?: GPUColor, linearDepthTargetView?: GPUTextureView, lights?: Light3DOptions[], world?: Scene3DWorld, /** Also write unclamped scene radiance (`hdrTexture()`), the bloom source. */
3908
- writeHdr?: boolean): {
4624
+ writeHdr?: boolean, /** Where the radiance resolves instead of `hdrSource()` (a cube face). */
4625
+ hdrTargetView?: GPUTextureView): {
3909
4626
  pass: GPURenderPassEncoder;
3910
4627
  cameraBindGroup: GPUBindGroup;
3911
4628
  cameraBuffer: GPUBuffer;
@@ -3946,6 +4663,38 @@ declare class Renderer3D {
3946
4663
  sampleRate?: number;
3947
4664
  }, wireframe?: boolean, input?: GPUMeshBuffers): GPUMeshBuffers;
3948
4665
  drawMesh3D(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, meshOrBuffers: Mesh3DData | GPUMeshBuffers, texture: GPUTexture | undefined, opts?: DrawMesh3DOpts, useMrt?: boolean): void;
4666
+ /**
4667
+ * Begins the velocity pass for shutter motion blur: draw the scene's
4668
+ * meshes and planes with `drawMeshVelocity` / `drawQuadVelocity`, end
4669
+ * the pass, then `applyMotionBlur` with the returned texture.
4670
+ */
4671
+ beginVelocityPass(encoder: GPUCommandEncoder, width: number, height: number, camera: Camera3DPose, prevCamera: Camera3DPose): {
4672
+ pass: GPURenderPassEncoder;
4673
+ cameraBindGroup: GPUBindGroup;
4674
+ velocity: GPUTexture;
4675
+ };
4676
+ /** Draws a mesh's motion since `prev` (its state a frame earlier) into the velocity pass. */
4677
+ drawMeshVelocity(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, meshOrBuffers: Mesh3DData | GPUMeshBuffers, texture: GPUTexture | undefined, opts: DrawMesh3DOpts, prev: MeshMotionPrev | undefined): void;
4678
+ /** Draws a 3D layer plane's motion since `prevModelMatrix` into the velocity pass. */
4679
+ drawQuadVelocity(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, texture: GPUTexture, opts: DrawQuad3DOpts, prevModelMatrix: Mat4 | undefined): void;
4680
+ /**
4681
+ * Draws a text layer's glyphs' motion since `prev` (its plane matrix and
4682
+ * glyph batches a frame earlier) into the velocity pass. A batch whose
4683
+ * glyphs changed (another font or count) moves with its plane alone.
4684
+ */
4685
+ drawSlugVelocity(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, batches: SlugGlyphBatch[], opts: DrawQuad3DOpts, stackBase: number, prev: {
4686
+ modelMatrix: Mat4;
4687
+ batches: SlugGlyphBatch[];
4688
+ } | undefined): void;
4689
+ /** Draws the environment floor's motion (camera motion only) into the velocity pass. */
4690
+ drawFloorVelocity(pass: GPURenderPassEncoder, cameraBindGroup: GPUBindGroup, floor: Environment3DFloor): void;
4691
+ private fullscreenVelocityPipeline;
4692
+ private quadVelocityPipeline;
4693
+ /**
4694
+ * Shutter motion blur: blurs `color` by the velocity pass's `velocity`
4695
+ * into `target` (a view of a texture in this renderer's format, same size).
4696
+ */
4697
+ applyMotionBlur(encoder: GPUCommandEncoder, color: GPUTexture, velocity: GPUTexture, target: GPUTextureView, options?: MotionBlurPassOptions): void;
3949
4698
  loadModel(srcOrData: string | ArrayBuffer | Uint8Array, format?: "obj" | "fbx" | "gltf" | "glb" | "stl" | "ply" | "vox" | "3ds" | "off" | "auto", options?: LoadModelOptions): Model3DData;
3950
4699
  /** Loads glTF asynchronously so its compressed buffer decoders can initialize. */
3951
4700
  loadModelAsync(srcOrData: string | ArrayBuffer | Uint8Array, format?: Parameters<Renderer3D["loadModel"]>[1], options?: LoadModelOptions): Promise<Model3DData>;
@@ -3959,6 +4708,8 @@ declare class Renderer3D {
3959
4708
  * on the GPU (each decoded once); absent maps are left out.
3960
4709
  */
3961
4710
  materialMaps(material: Material3D): Promise<MeshMaterialMaps>;
4711
+ /** A sampler for each map that says how it is sampled. */
4712
+ private mapSamplers;
3962
4713
  private uploadMaterialTexture;
3963
4714
  /** Decodes an encoded image into a texture with a full mip chain. */
3964
4715
  private uploadImage;
@@ -3969,6 +4720,12 @@ declare class Renderer3D {
3969
4720
  resolveGeometry(encoder: GPUCommandEncoder, geometry: GPUTexture): void;
3970
4721
  applyOutlines(encoder: GPUCommandEncoder, source: GPUTexture, geometry: GPUTexture, dest: GPUTextureView, camera: Camera3DPose, options: GeometryOutlineOptions, fog?: Environment3DFog): void;
3971
4722
  applyDepthOfField(encoder: GPUCommandEncoder, sourceColorTex: GPUTexture, depthTex: GPUTexture, destView: GPUTextureView, cameraBuffer: GPUBuffer): void;
4723
+ /**
4724
+ * Raymarches volumetric fog and shadowed light shafts at half-resolution,
4725
+ * then composites over `sourceColorTex` into `destView` using depth-aware
4726
+ * bilateral upsampling.
4727
+ */
4728
+ applyVolumetricFog(encoder: GPUCommandEncoder, sourceColorTex: GPUTexture, linearDepthTex: GPUTexture, destView: GPUTextureView, cameraBindGroup: GPUBindGroup, lightsBindGroup: GPUBindGroup, environment: Environment3DOptions, timeSeconds?: number, frameIndex?: number): void;
3972
4729
  /** Uploads raw `InstanceData` float buffer to a GPU storage buffer from the instance pool. */
3973
4730
  uploadInstanceData(data: Float32Array): GPUBuffer;
3974
4731
  /** Draws instanced 3D meshes in a single hardware-instanced draw call. */
@@ -3977,9 +4734,45 @@ declare class Renderer3D {
3977
4734
  }
3978
4735
  declare function loadModel3D(srcOrData: string | ArrayBuffer | Uint8Array, format?: "obj" | "fbx" | "gltf" | "glb" | "stl" | "ply" | "vox" | "3ds" | "off" | "auto", options?: LoadModelOptions): Model3DData;
3979
4736
  //#endregion
3980
- //#region src/renderer3d/shadow-depth.d.ts
3981
- /** Shadow maps: a depth32float target rendered from a light's point of view. */
3982
-
4737
+ //#region src/renderer3d/scatter.d.ts
4738
+ type V3 = [number, number, number];
4739
+ interface ScatterExclusion {
4740
+ /** Center in the surface's parent space, px. */
4741
+ x: number;
4742
+ z: number;
4743
+ /** Nothing grows inside this radius, px. */
4744
+ radius: number;
4745
+ /** Density ramps back to full over this many px past `radius`. Default 0. */
4746
+ falloff?: number;
4747
+ }
4748
+ interface ScatterOptions {
4749
+ /** Points to place (fewer when spacing or filters leave no room). */
4750
+ count: number;
4751
+ /** Poisson-disk spacing: no two points closer than this, px. */
4752
+ minDistance?: number;
4753
+ seed?: number;
4754
+ /** Allowed slope in degrees from level ground. Default [0, 89]. */
4755
+ slopeRange?: [number, number];
4756
+ /** Allowed altitude 0..1 across the surface's vertical extent (0 = lowest). Default [0, 1]. */
4757
+ elevationRange?: [number, number];
4758
+ /** 0 keeps instances upright, 1 stands them on the surface normal. Default 0.3. */
4759
+ alignToNormal?: number;
4760
+ /** Uniform scale drawn per point. Default [1, 1]. */
4761
+ scaleRange?: [number, number];
4762
+ /** Random turn around the instance's up axis. Default true. */
4763
+ randomYaw?: boolean;
4764
+ exclude?: ScatterExclusion[];
4765
+ }
4766
+ interface ScatterPoint {
4767
+ /** On the surface, in its parent space. */
4768
+ position: V3;
4769
+ /** Unit face normal there. */
4770
+ normal: V3;
4771
+ rotation: Quat;
4772
+ scale: number;
4773
+ /** Normalized altitude 0..1. */
4774
+ elevation: number;
4775
+ }
3983
4776
  /**
3984
4777
  * @deprecated A texture holder only; nothing renders into it. Shadows are
3985
4778
  * drawn by `Renderer3D.renderShadowMap` (a `castShadow` directional or spot
@@ -4025,6 +4818,43 @@ declare class SSAOPipeline {
4025
4818
  destroy(): void;
4026
4819
  }
4027
4820
  //#endregion
4821
+ //#region src/renderer3d/ssr-gi-pipeline.d.ts
4822
+ /** Reflection hits: pixel positions need full float precision at 4K. */
4823
+
4824
+ //#endregion
4825
+ //#region src/renderer3d/volumetric-fog-pipeline.d.ts
4826
+ interface VolumetricFogRenderParams {
4827
+ encoder: GPUCommandEncoder;
4828
+ sourceColorTex: GPUTexture;
4829
+ linearDepthTex: GPUTexture;
4830
+ halfFogTex: GPUTexture;
4831
+ destView: GPUTextureView;
4832
+ cameraBindGroup: GPUBindGroup;
4833
+ lightsBindGroup: GPUBindGroup;
4834
+ fog: ResolvedVolumetricFog;
4835
+ fullWidth: number;
4836
+ fullHeight: number;
4837
+ halfWidth: number;
4838
+ halfHeight: number;
4839
+ timeSeconds: number;
4840
+ frameIndex: number;
4841
+ }
4842
+ declare class VolumetricFogPipeline {
4843
+ private device;
4844
+ private raymarchPipeline;
4845
+ private upsamplePipeline;
4846
+ private fogBindGroupLayout;
4847
+ private emptyGroup2Layout;
4848
+ private emptyGroup2BindGroup;
4849
+ private linearSampler;
4850
+ private bufferPool;
4851
+ private uniformScratch;
4852
+ constructor(device: GPUDevice, format?: GPUTextureFormat);
4853
+ resetPools(): void;
4854
+ destroy(): void;
4855
+ render(params: VolumetricFogRenderParams): void;
4856
+ }
4857
+ //#endregion
4028
4858
  //#region src/shader-store.d.ts
4029
4859
  interface RegisteredShader {
4030
4860
  wgsl: string;
@@ -4455,7 +5285,7 @@ declare global {
4455
5285
  var __GATEWAI_DELAYS__: Set<number>;
4456
5286
  }
4457
5287
  //#endregion
4458
- //#region ../node-sdk/dist/index-DCPaiCIF.d.mts
5288
+ //#region ../node-sdk/dist/index-CudN5Wne.d.mts
4459
5289
  //#endregion
4460
5290
  //#region renderer/index.d.ts
4461
5291
  type GPUCommandEncoder$1 = globalThis.GPUCommandEncoder;
@@ -4494,6 +5324,11 @@ interface NodeRenderProps<TOperation extends MediaOperation = MediaOperation> {
4494
5324
  isVideoMode?: boolean;
4495
5325
  isPlaying?: boolean;
4496
5326
  excludeTextures?: GPUTexture$1[];
5327
+ /**
5328
+ * Render only to record the 3D scene's motion (shutter motion blur reads
5329
+ * every draw one frame earlier); nothing drawn is shown.
5330
+ */
5331
+ motionHistoryOnly?: boolean;
4497
5332
  /** Signal values that override the node's own (text animators read them). */
4498
5333
  signals?: Record<string, unknown>;
4499
5334
  renderChild?: (child: VirtualMediaData, overrides?: Partial<NodeRenderProps>) => unknown;
@@ -4564,5 +5399,5 @@ declare const SignalResultSchema: z.ZodObject<{
4564
5399
  }, z.core.$strip>], null>;
4565
5400
  }, z.core.$strip>;
4566
5401
  //#endregion
4567
- export { inputStore as $, evaluateCubicBezierDerivative as $n, SelectorMode as $t, PolyhedronGeometryOptions as A, TextSignalSelectorSchema as An, LIGHT_UNIFORM_SIZE_BYTES as Ar, EnhancedTextNode as At, SignalRegistryResource as B, Vec2Schema as Bn, Path3DSample as Br, GlyphAnchorPointSchema as Bt, MasterAudioEntry as C, TextRangeSelector as Cn, Environment3DFloor as Cr, AudioSpectrumTypographySchema as Ct, MotionBlurPipeline as D, TextSelector as Dn, FrustumPlanes as Dr, CubicBezierSegmentSchema as Dt, Model3DData as E, TextScrambleConfigSchema as En, FrustumPlane as Er, CubicBezierSegment as Et, RoundedBoxGeometryOptions as F, TypingCadence as Fn, MAX_LIGHTS as Fr, ExtendedGlyphProperties as Ft, TorusGeometryOptions as G, buildPathLUT as Gn, linearRgb as Gr, LongShadowConfig as Gt, SlugFontCache as H, VolumetricFormationConfigSchema as Hn, ShadowUniformInfo as Hr, KineticMarqueeConfigSchema as Ht, SSAOPipeline as I, TypingCadenceSchema as In, Mat4 as Ir, ExtendedGlyphPropertiesSchema as It, WebGPUAudioProcessor as J, computeRangeSelectorWeight as Jn, ParticleDissolveConfigSchema as Jt, TubeGeometryOptions as K, computeAnchorPivotOffset as Kn, parseColorToRgb as Kr, LongShadowConfigSchema as Kt, ShadowPipeline as L, VariableFontAxes as Ln, Matrix4Math as Lr, GlyphAnchorGrouping as Lt, Renderer2D as M, TextWigglySelectorSchema as Mn, Light3DOptions as Mr, ExpressionEvaluationContext as Mt, Renderer3D as N, TypewriterAnimator as Nn, LightKind as Nr, ExpressionSelector as Nt, NodeAnimationTrack3D as O, TextSelectorSchema as On, GPULightData as Or, DynamicStrokeProperties as Ot, RingGeometryOptions as P, TypewriterAnimatorSchema as Pn, LightsUniformData as Pr, ExpressionSelectorSchema as Pt, initHeadlessWebGPU as Q, evaluateCubicBezier as Qn, SelectorBasedOnSchema as Qt, ShardGeometryOptions as R, VariableFontAxesSchema as Rn, Path3D as Rr, GlyphAnchorGroupingSchema as Rt, LoadModelOptions as S, TextPathSourceSchema as Sn, ENVIRONMENT_PRESETS as Sr, AudioSpectrumTypography as St, Mesh3DData as T, TextScrambleConfig as Tn, Environment3DOptions as Tr, ChromaticGlitchConfigSchema as Tt, SlugPipeline as U, VolumetricFormationMode as Un, Vec3 as Ur, LineSpacingDynamics as Ut, Skeleton3D as V, VolumetricFormationConfig as Vn, ResolvedEnvironment as Vr, KineticMarqueeConfig as Vt, SphereGeometryOptions as W, VolumetricFormationModeSchema as Wn, Vector3Math as Wr, LineSpacingDynamicsSchema as Wt, describeGpu as X, distanceToCurveParameter as Xn, PathChainLUTEntry as Xt, buildWGSLSignalFn as Y, deterministicWigglyNoise as Yn, PathChainLUT as Yt, ensureDevice as Z, ellipseToCubicBeziers as Zn, SelectorBasedOn as Zt, ExtrudeShapeGeometryOptions as _, TextCursorStyleSchema as _n, Camera3D as _r, AnchorPreset as _t, AudioLatentData as a, SkewProperties as an, evaluateTypewriterState as ar, parseMTL as at, LatheGeometryOptions as b, TextPathOptionsSchema as bn, CatmullRomOptions as br, AnimatableGlyphPropsSchema as bt, AudioMeshDeformPipeline as c, Spatial3DPropertiesSchema as cn, generatePathSegments as cr, signalRegistry as ct, AudioSignalComputePipeline as d, TextAnchorConfig as dn, parseSvgPathToCubicBeziers as dr, AETextAnimatorSchema as dt, SelectorModeSchema as en, evaluateExpressionSelector as er, loadFBX as et, BlendMode as f, TextAnchorConfigSchema as fn, sampleAudioSpectrumScale as fr, AdvancedTextAnimator as ft, EffectPipeline as g, TextCursorStyle as gn, BezierSegment3D as gr, AnchorGroupingSchema as gt, CylinderGeometryOptions as h, TextCursorConfigSchema as hn, waveToCubicBeziers as hr, AnchorGrouping as ht, AnimationClip3D as i, SelectorUnitsSchema as in, evaluateSpringProgress as ir, parseFBX as it, RenderContextValue as j, TextWigglySelector as jn, Light3D as jr, EnhancedTextNodeSchema as jt, Points3DGeometryOptions as k, TextSignalSelector as kn, HelixOptions as kr, DynamicStrokePropertiesSchema as kt, AudioPitchTrackConfig as l, SpringPhysics as ln, getScramblePool as lr, textureCache as lt, CapsuleGeometryOptions as m, TextCursorConfig as mn, samplePathChainGeometry as mr, AdvancedTextAnimatorSchema as mt, NodeRendererPlugin as n, SelectorShapeSchema as nn, evaluateSelectorCombination as nr, loadOBJ as nt, AudioLatentEngine as o, SkewPropertiesSchema as on, evaluateVolumetricFormation as or, parseOBJ as ot, Bone3D as p, TextAnimatorBuilder as pn, sampleCurveGeometry as pr, AdvancedTextAnimatorBuilder as pt, TubePathSpec as q, computeLineLeadingDisplacement as qn, resolveEnvironment as qr, ParticleDissolveConfig as qt, WebGPUNodeRenderer as r, SelectorUnits as rn, evaluateSkewMatrix as rr, lutStore as rt, AudioLatentTrackCache as s, Spatial3DProperties as sn, generateArcLengthLUT as sr, shaderStore as st, SignalResultSchema as t, SelectorShape as tn, evaluateMarqueeOffset as tr, loadModel3D as tt, AudioSignalComputeConfig as u, SpringPhysicsSchema as un, getShuffledOrder as ur, AETextAnimator as ut, GlassPipeline as v, TextPathBuilder as vn, Camera3DPose as vr, AnchorPresetSchema as vt, Material3D as w, TextRangeSelectorSchema as wn, Environment3DFog as wr, ChromaticGlitchConfig as wt, Line3DGeometryOptions as x, TextPathSource as xn, CirclePathOptions as xr, ArcLengthLUTEntry as xt, GpuAdapterDescription as y, TextPathOptions as yn, CameraShakeOptions as yr, AnimatableGlyphProps as yt, SignalRegistry as z, Vec2 as zn, Path3DPoint as zr, GlyphAnchorPoint as zt };
4568
- //# sourceMappingURL=index-CRaydvLi.d.mts.map
5402
+ export { TubeGeometryOptions as $, buildPathLUT as $n, Light3DOptions as $r, LongShadowConfig as $t, PolyhedronGeometryOptions as A, lorentzFactor as Ai, TextPathSourceSchema as An, CirclePathOptions as Ar, AudioSpectrumTypography as At, SdfPrimitive as B, TextWigglySelectorSchema as Bn, Environment3DSsrOptions as Br, ExpressionEvaluationContext as Bt, MasterAudioEntry as C, defaultCubeFaceSize as Ci, TextCursorConfigSchema as Cn, waveToCubicBeziers as Cr, AnchorGrouping as Ct, MotionBlurPipeline as D, fractal2 as Di, TextPathOptions as Dn, Camera3DPose as Dr, AnimatableGlyphProps as Dt, Model3DData as E, dopplerLut as Ei, TextPathBuilder as En, Camera3D as Er, AnchorPresetSchema as Et, RoundedBoxGeometryOptions as F, resolveVolumetricFog as Fi, TextSelector as Fn, ENVIRONMENT_PRESETS as Fr, CubicBezierSegmentSchema as Ft, Skeleton3D as G, VariableFontAxes as Gn, FrustumPlane as Gr, GlyphAnchorGrouping as Gt, ShardGeometryOptions as H, TypewriterAnimatorSchema as Hn, Environment3DVolumetricFogNoise as Hr, ExpressionSelectorSchema as Ht, SSAOPipeline as I, terrace as Ii, TextSelectorSchema as In, Environment3DFloor as Ir, DynamicStrokeProperties as It, SphereGeometryOptions as J, Vec2Schema as Jn, HdriUniforms as Jr, GlyphAnchorPointSchema as Jt, SlugFontCache as K, VariableFontAxesSchema as Kn, FrustumPlanes as Kr, GlyphAnchorGroupingSchema as Kt, ScatterOptions as L, TextSignalSelector as Ln, Environment3DFog as Lr, DynamicStrokePropertiesSchema as Lt, Renderer2D as M, resolveEnvironment as Mi, TextRangeSelectorSchema as Mn, DIRECT_LIGHT_FLOATS as Mr, ChromaticGlitchConfig as Mt, Renderer3D as N, resolveGi as Ni, TextScrambleConfig as Nn, DOPPLER_LUT_MAX as Nr, ChromaticGlitchConfigSchema as Nt, NodeAnimationTrack3D as O, lensCenterDensity as Oi, TextPathOptionsSchema as On, CameraShakeOptions as Or, AnimatableGlyphPropsSchema as Ot, RingGeometryOptions as P, resolveSsr as Pi, TextScrambleConfigSchema as Pn, DOPPLER_LUT_SIZE as Pr, CubicBezierSegment as Pt, TorusGeometryOptions as Q, VolumetricFormationModeSchema as Qn, Light3D as Qr, LineSpacingDynamicsSchema as Qt, ScatterPoint as R, TextSignalSelectorSchema as Rn, Environment3DGiOptions as Rr, EnhancedTextNode as Rt, LoadModelOptions as S, cubeTexel as Si, TextCursorConfig as Sn, samplePathChainGeometry as Sr, AdvancedTextAnimatorSchema as St, Mesh3DData as T, dopplerLuminanceGain as Ti, TextCursorStyleSchema as Tn, CUBE_FLIP as Tr, AnchorPreset as Tt, SignalRegistry as U, TypingCadence as Un, FractalMode as Ur, ExtendedGlyphProperties as Ut, ShadowPipeline as V, TypewriterAnimator as Vn, Environment3DVolumetricFog as Vr, ExpressionSelector as Vt, SignalRegistryResource as W, TypingCadenceSchema as Wn, FractalOptions as Wr, ExtendedGlyphPropertiesSchema as Wt, TerrainGeometryOptions as X, VolumetricFormationConfigSchema as Xn, LIGHT_UNIFORM_SIZE_BYTES as Xr, KineticMarqueeConfigSchema as Xt, TerrainColorByElevation as Y, VolumetricFormationConfig as Yn, HelixOptions as Yr, KineticMarqueeConfig as Yt, TerrainNoiseOptions as Z, VolumetricFormationMode as Zn, LensProjection as Zr, LineSpacingDynamics as Zt, ExtrudeShapeGeometryOptions as _, aberrate as _i, SpringPhysics as _n, getScramblePool as _r, textureCache as _t, AudioLatentData as a, Noise as ai, SelectorBasedOn as an, ellipseToCubicBeziers as ar, ensureDevice as at, LatheGeometryOptions as b, createRandom as bi, TextAnchorConfigSchema as bn, sampleAudioSpectrumScale as br, AdvancedTextAnimator as bt, AudioMeshDeformPipeline as c, Path3DSample as ci, SelectorModeSchema as cn, evaluateExpressionSelector as cr, loadFBX as ct, AudioSignalComputePipeline as d, ResolvedSsr as di, SelectorUnits as dn, evaluateSkewMatrix as dr, lutStore as dt, LightKind as ei, LongShadowConfigSchema as en, computeAnchorPivotOffset as er, TubePathSpec as et, BlendMode as f, ResolvedVolumetricFog as fi, SelectorUnitsSchema as fn, evaluateSpringProgress as fr, parseFBX as ft, EffectPipeline as g, Vector3Math as gi, Spatial3DPropertiesSchema as gn, generatePathSegments as gr, signalRegistry as gt, CylinderGeometryOptions as h, Vec3 as hi, Spatial3DProperties as hn, generateArcLengthLUT as hr, shaderStore as ht, AnimationClip3D as i, Matrix4Math as ii, PathChainLUTEntry as in, distanceToCurveParameter as ir, describeGpu as it, RenderContextValue as j, parseColorToRgb as ji, TextRangeSelector as jn, CubeLensOptions as jr, AudioSpectrumTypographySchema as jt, Points3DGeometryOptions as k, linearRgb as ki, TextPathSource as kn, CatmullRomOptions as kr, ArcLengthLUTEntry as kt, AudioPitchTrackConfig as l, ResolvedEnvironment as li, SelectorShape as ln, evaluateMarqueeOffset as lr, loadModel3D as lt, CapsuleGeometryOptions as m, ShadowUniformInfo as mi, SkewPropertiesSchema as mn, evaluateVolumetricFormation as mr, parseOBJ as mt, NodeRendererPlugin as n, MAX_LIGHTS as ni, ParticleDissolveConfigSchema as nn, computeRangeSelectorWeight as nr, WebGPUAudioProcessor as nt, AudioLatentEngine as o, Path3D as oi, SelectorBasedOnSchema as on, evaluateCubicBezier as or, initHeadlessWebGPU as ot, Bone3D as p, ScreenIndirectPass as pi, SkewProperties as pn, evaluateTypewriterState as pr, parseMTL as pt, SlugPipeline as q, Vec2 as qn, GPULightData as qr, GlyphAnchorPoint as qt, WebGPUNodeRenderer as r, Mat4 as ri, PathChainLUT as rn, deterministicWigglyNoise as rr, buildWGSLSignalFn as rt, AudioLatentTrackCache as s, Path3DPoint as si, SelectorMode as sn, evaluateCubicBezierDerivative as sr, inputStore as st, SignalResultSchema as t, LightsUniformData as ti, ParticleDissolveConfig as tn, computeLineLeadingDisplacement as tr, VolumetricFogPipeline as tt, AudioSignalComputeConfig as u, ResolvedGi as ui, SelectorShapeSchema as un, evaluateSelectorCombination as ur, loadOBJ as ut, GlassPipeline as v, cameraBasis as vi, SpringPhysicsSchema as vn, getShuffledOrder as vr, AETextAnimator as vt, Material3D as w, dopplerColorMatrix as wi, TextCursorStyle as wn, BezierSegment3D as wr, AnchorGroupingSchema as wt, Line3DGeometryOptions as x, cubeFaceCameras as xi, TextAnimatorBuilder as xn, sampleCurveGeometry as xr, AdvancedTextAnimatorBuilder as xt, GpuAdapterDescription as y, createNoise as yi, TextAnchorConfig as yn, parseSvgPathToCubicBeziers as yr, AETextAnimatorSchema as yt, SdfGeometryOptions as z, TextWigglySelector as zn, Environment3DOptions as zr, EnhancedTextNodeSchema as zt };
5403
+ //# sourceMappingURL=index-s2qQ8ifZ.d.mts.map