framefields 2.2.0-beta.4 → 2.3.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 (322) hide show
  1. package/README.md +11 -2
  2. package/dist/audio/index.d.mts +4 -4
  3. package/dist/audio/index.mjs +10 -10
  4. package/dist/{audio-BvYmTu5T.d.mts → audio-BNnEclHU.d.mts} +3 -3
  5. package/dist/{audio-BvYmTu5T.d.mts.map → audio-BNnEclHU.d.mts.map} +1 -1
  6. package/dist/{audio-DMUr01vS.mjs → audio-ChRqnFwB.mjs} +3 -3
  7. package/dist/{audio-DMUr01vS.mjs.map → audio-ChRqnFwB.mjs.map} +1 -1
  8. package/dist/{dist-cjxDXQdx.mjs → dist-PwT_Vmax.mjs} +102 -6
  9. package/dist/{dist-cjxDXQdx.mjs.map → dist-PwT_Vmax.mjs.map} +1 -1
  10. package/dist/{dist-CT___nEU.mjs → dist-t-NLlnhM.mjs} +7 -5
  11. package/dist/dist-t-NLlnhM.mjs.map +1 -0
  12. package/dist/effects/index.d.mts +5 -5
  13. package/dist/effects/index.mjs +36 -36
  14. package/dist/{effects-C06-AOge.mjs → effects-Duoqc_Oa.mjs} +532 -4
  15. package/dist/effects-Duoqc_Oa.mjs.map +1 -0
  16. package/dist/fonts/index.d.mts +1 -1
  17. package/dist/fonts/index.mjs +2 -2
  18. package/dist/{fonts-C0UuLQvr.mjs → fonts-CgNmeFXh.mjs} +2 -2
  19. package/dist/{fonts-C0UuLQvr.mjs.map → fonts-CgNmeFXh.mjs.map} +1 -1
  20. package/dist/{gpu-Du7GpVFW.mjs → gpu-1ZpAuQOR.mjs} +2 -2
  21. package/dist/{gpu-Du7GpVFW.mjs.map → gpu-1ZpAuQOR.mjs.map} +1 -1
  22. package/dist/{index-B-oUlLoO.d.mts → index-AdrZIWT0.d.mts} +27 -2
  23. package/dist/index-AdrZIWT0.d.mts.map +1 -0
  24. package/dist/{index-BcA8rep0.d.mts → index-B-55dXDu.d.mts} +1 -1
  25. package/dist/{index-BcA8rep0.d.mts.map → index-B-55dXDu.d.mts.map} +1 -1
  26. package/dist/{index-D-Iek5sq.d.mts → index-B3BwLHa6.d.mts} +3 -3
  27. package/dist/{index-D-Iek5sq.d.mts.map → index-B3BwLHa6.d.mts.map} +1 -1
  28. package/dist/{index-CwbszPDG.d.mts → index-BU51pxZO.d.mts} +956 -9
  29. package/dist/index-BU51pxZO.d.mts.map +1 -0
  30. package/dist/{index-XdQPNJnq.d.mts → index-CeRv1KC0.d.mts} +3 -3
  31. package/dist/{index-XdQPNJnq.d.mts.map → index-CeRv1KC0.d.mts.map} +1 -1
  32. package/dist/{index-DXfp_T-3.d.mts → index-Cg2ptXcs.d.mts} +2 -2
  33. package/dist/{index-DXfp_T-3.d.mts.map → index-Cg2ptXcs.d.mts.map} +1 -1
  34. package/dist/{index-CdyE1tst.d.mts → index-QmkcUL3W.d.mts} +2 -2
  35. package/dist/{index-CdyE1tst.d.mts.map → index-QmkcUL3W.d.mts.map} +1 -1
  36. package/dist/index.d.mts +1438 -66
  37. package/dist/index.d.mts.map +1 -1
  38. package/dist/index.mjs +3122 -83
  39. package/dist/index.mjs.map +1 -1
  40. package/dist/preview/index.d.mts +2 -2
  41. package/dist/preview/index.mjs +10 -10
  42. package/dist/{preview-M0TsUzC6.mjs → preview-CArsjmkd.mjs} +2 -2
  43. package/dist/{preview-M0TsUzC6.mjs.map → preview-CArsjmkd.mjs.map} +1 -1
  44. package/dist/preview-engine/audio.mjs +1 -1
  45. package/dist/preview-engine/chunk-2JKXYG6J.mjs +127 -0
  46. package/dist/preview-engine/chunk-7I7PKKDL.mjs +214 -0
  47. package/dist/preview-engine/chunk-BQY4BUMN.mjs +1 -0
  48. package/dist/preview-engine/{chunk-RSMO7NPN.mjs → chunk-BSOJR4JU.mjs} +1 -1
  49. package/dist/preview-engine/chunk-BVA5NGSH.mjs +1 -0
  50. package/dist/preview-engine/chunk-DLAHSLNX.mjs +1522 -0
  51. package/dist/preview-engine/{chunk-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
  52. package/dist/preview-engine/chunk-KERW7QJ4.mjs +174 -0
  53. package/dist/preview-engine/{chunk-7B5S5D4N.mjs → chunk-TPAEN6VV.mjs} +1 -1
  54. package/dist/preview-engine/chunk-YQRKT47I.mjs +1 -0
  55. package/dist/preview-engine/crypto-W5UAWSNT.mjs +1 -0
  56. package/dist/preview-engine/effects.mjs +1 -1
  57. package/dist/preview-engine/framefields.mjs +26 -26
  58. package/dist/preview-engine/player.mjs +5 -5
  59. package/dist/preview-engine/rapier-AHBIGHEL.mjs +1 -0
  60. package/dist/preview-engine/rapier-JD7KNQRV.mjs +1 -0
  61. package/dist/preview-engine/renderers-527ONFIA.mjs +228 -0
  62. package/dist/preview-engine/renderers-6ODPWZ2R.mjs +96 -0
  63. package/dist/preview-engine/renderers-7NCG6BYS.mjs +94 -0
  64. package/dist/preview-engine/renderers-BGGRPAVV.mjs +363 -0
  65. package/dist/preview-engine/renderers-DN2GF3I7.mjs +82 -0
  66. package/dist/preview-engine/renderers-FGHOLJJK.mjs +44 -0
  67. package/dist/preview-engine/renderers-FK72LKQC.mjs +275 -0
  68. package/dist/preview-engine/renderers-FQWWAETX.mjs +203 -0
  69. package/dist/preview-engine/renderers-HMR2NAD7.mjs +81 -0
  70. package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -0
  71. package/dist/preview-engine/renderers-JLFGBYN4.mjs +78 -0
  72. package/dist/preview-engine/renderers-LLUEOW5T.mjs +77 -0
  73. package/dist/preview-engine/renderers-NC64EQDE.mjs +1 -0
  74. package/dist/preview-engine/renderers-PVYP2ONH.mjs +76 -0
  75. package/dist/preview-engine/renderers-TPBPNXWH.mjs +26 -0
  76. package/dist/preview-engine/renderers-UJ4YVJZT.mjs +80 -0
  77. package/dist/preview-engine/renderers-WHBDHTRI.mjs +78 -0
  78. package/dist/preview-engine/renderers-WP67KK5K.mjs +89 -0
  79. package/dist/preview-engine/renderers-YNFKFM7D.mjs +67 -0
  80. package/dist/preview-engine/renderers-ZSENYGIY.mjs +84 -0
  81. package/dist/preview-engine/signals.mjs +1 -1
  82. package/dist/{program-DzknMiY0.mjs → program-Dd9tJFkY.mjs} +346 -13
  83. package/dist/program-Dd9tJFkY.mjs.map +1 -0
  84. package/dist/renderer/index.d.mts +2 -2
  85. package/dist/renderer/index.mjs +2 -2
  86. package/dist/{renderer-C8uKdelk.mjs → renderer-0L9MEb3A.mjs} +2 -2
  87. package/dist/{renderer-C8uKdelk.mjs.map → renderer-0L9MEb3A.mjs.map} +1 -1
  88. package/dist/renderer-0lp9ClNc.mjs +5 -0
  89. package/dist/{renderer-BbdZ0YHR.mjs → renderer-257LxOyx.mjs} +3 -3
  90. package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-257LxOyx.mjs.map} +1 -1
  91. package/dist/renderer-2BnBo6CX.mjs +219 -0
  92. package/dist/renderer-2BnBo6CX.mjs.map +1 -0
  93. package/dist/renderer-4g_BfiKp.mjs +5 -0
  94. package/dist/renderer-72A4SvOE.mjs +220 -0
  95. package/dist/renderer-72A4SvOE.mjs.map +1 -0
  96. package/dist/renderer-7Aw6AHqW.mjs +5 -0
  97. package/dist/{renderer-PKQNH21k.mjs → renderer-7OvgLE8w.mjs} +2 -2
  98. package/dist/{renderer-BerD3T-X.mjs → renderer-94byj7Mk.mjs} +2 -2
  99. package/dist/{renderer-BerD3T-X.mjs.map → renderer-94byj7Mk.mjs.map} +1 -1
  100. package/dist/{renderer-D-vRKssW.mjs → renderer-B2aXfdW_.mjs} +2 -2
  101. package/dist/{renderer-D-vRKssW.mjs.map → renderer-B2aXfdW_.mjs.map} +1 -1
  102. package/dist/{renderer-DD8napek.mjs → renderer-B3c-j-e5.mjs} +2 -2
  103. package/dist/{renderer-DD8napek.mjs.map → renderer-B3c-j-e5.mjs.map} +1 -1
  104. package/dist/renderer-B3ypX3MH.mjs +308 -0
  105. package/dist/renderer-B3ypX3MH.mjs.map +1 -0
  106. package/dist/renderer-B82v8PyC.mjs +5 -0
  107. package/dist/renderer-B8BDMJNz.mjs +5 -0
  108. package/dist/renderer-BARst3ZD.mjs +3 -0
  109. package/dist/renderer-BCPRrhP8.mjs +5 -0
  110. package/dist/{renderer-CMT4QcpV.mjs → renderer-BEdc-7JW.mjs} +3 -3
  111. package/dist/{renderer-CMT4QcpV.mjs.map → renderer-BEdc-7JW.mjs.map} +1 -1
  112. package/dist/renderer-BEpANdcO.mjs +204 -0
  113. package/dist/renderer-BEpANdcO.mjs.map +1 -0
  114. package/dist/renderer-BFhzO6En.mjs +5 -0
  115. package/dist/renderer-BH0KF-y-.mjs +6 -0
  116. package/dist/renderer-BHrqEgIA.mjs +541 -0
  117. package/dist/renderer-BHrqEgIA.mjs.map +1 -0
  118. package/dist/{renderer-DpW_LxLO.mjs → renderer-BId5hBLb.mjs} +3 -3
  119. package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BId5hBLb.mjs.map} +1 -1
  120. package/dist/renderer-BK32cV7E.mjs +203 -0
  121. package/dist/renderer-BK32cV7E.mjs.map +1 -0
  122. package/dist/renderer-BTI5ybyH.mjs +5 -0
  123. package/dist/{renderer-0gY4IQhM.mjs → renderer-BVR0mEIT.mjs} +2 -2
  124. package/dist/{renderer-0gY4IQhM.mjs.map → renderer-BVR0mEIT.mjs.map} +1 -1
  125. package/dist/{renderer-CebB0v1y.mjs → renderer-BY08hHFS.mjs} +2 -2
  126. package/dist/{renderer-CebB0v1y.mjs.map → renderer-BY08hHFS.mjs.map} +1 -1
  127. package/dist/renderer-Ba7LH8U2.mjs +5 -0
  128. package/dist/renderer-BcQBlfhC.mjs +5 -0
  129. package/dist/renderer-BdMJzCTz.mjs +5 -0
  130. package/dist/{renderer-D1Cm21eq.mjs → renderer-BmQbSQHf.mjs} +2 -2
  131. package/dist/{renderer-D1Cm21eq.mjs.map → renderer-BmQbSQHf.mjs.map} +1 -1
  132. package/dist/{renderer-DqdhsSwS.mjs → renderer-BmTDXIUI.mjs} +2 -2
  133. package/dist/{renderer-DqdhsSwS.mjs.map → renderer-BmTDXIUI.mjs.map} +1 -1
  134. package/dist/renderer-BpdzhZE7.mjs +224 -0
  135. package/dist/renderer-BpdzhZE7.mjs.map +1 -0
  136. package/dist/renderer-Bxi2j-tG.mjs +5 -0
  137. package/dist/{renderer-D8thCpS7.mjs → renderer-C-Qj0BnT.mjs} +3 -3
  138. package/dist/{renderer-D8thCpS7.mjs.map → renderer-C-Qj0BnT.mjs.map} +1 -1
  139. package/dist/{renderer-BiwIh_w4.mjs → renderer-C4tUATd_.mjs} +3 -3
  140. package/dist/{renderer-BiwIh_w4.mjs.map → renderer-C4tUATd_.mjs.map} +1 -1
  141. package/dist/{renderer-1vhaKMeg.mjs → renderer-CC72sZ8l.mjs} +141 -56
  142. package/dist/renderer-CC72sZ8l.mjs.map +1 -0
  143. package/dist/renderer-CCn5ISVM.mjs +5 -0
  144. package/dist/renderer-CDRsdhg9.mjs +5 -0
  145. package/dist/{renderer-BC8XOVl5.mjs → renderer-CI9Pq77W.mjs} +3 -3
  146. package/dist/{renderer-BC8XOVl5.mjs.map → renderer-CI9Pq77W.mjs.map} +1 -1
  147. package/dist/{renderer-CrABA3lB.mjs → renderer-CIMI33Yd.mjs} +2 -2
  148. package/dist/{renderer-CrABA3lB.mjs.map → renderer-CIMI33Yd.mjs.map} +1 -1
  149. package/dist/renderer-CKSdl0Xf.mjs +331 -0
  150. package/dist/renderer-CKSdl0Xf.mjs.map +1 -0
  151. package/dist/{renderer-Cce2fgpX.mjs → renderer-CKpwEo1w.mjs} +3 -3
  152. package/dist/{renderer-Cce2fgpX.mjs.map → renderer-CKpwEo1w.mjs.map} +1 -1
  153. package/dist/{renderer-CursFKUf.mjs → renderer-CLUyYFqS.mjs} +2 -2
  154. package/dist/{renderer-CursFKUf.mjs.map → renderer-CLUyYFqS.mjs.map} +1 -1
  155. package/dist/{renderer-Br6KyRO_.mjs → renderer-CS-goRD3.mjs} +3 -3
  156. package/dist/{renderer-Br6KyRO_.mjs.map → renderer-CS-goRD3.mjs.map} +1 -1
  157. package/dist/{renderer-DtgMsjyL.mjs → renderer-CSPpKLi3.mjs} +2 -2
  158. package/dist/{renderer-DtgMsjyL.mjs.map → renderer-CSPpKLi3.mjs.map} +1 -1
  159. package/dist/{renderer-CuVPo-wP.mjs → renderer-CWQ-Bct7.mjs} +2 -2
  160. package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CWQ-Bct7.mjs.map} +1 -1
  161. package/dist/{renderer-DHGTzype.mjs → renderer-ChoYV7Ko.mjs} +2 -2
  162. package/dist/{renderer-DHGTzype.mjs.map → renderer-ChoYV7Ko.mjs.map} +1 -1
  163. package/dist/renderer-CiCK8ZG_.mjs +5 -0
  164. package/dist/{renderer-CJB9nU1x.mjs → renderer-Ck2pRec0.mjs} +3 -3
  165. package/dist/{renderer-CJB9nU1x.mjs.map → renderer-Ck2pRec0.mjs.map} +1 -1
  166. package/dist/{renderer-BzDjy1_x.mjs → renderer-CrUudSLP.mjs} +2 -2
  167. package/dist/{renderer-BzDjy1_x.mjs.map → renderer-CrUudSLP.mjs.map} +1 -1
  168. package/dist/{renderer-DupsdRIw.mjs → renderer-CraudZUC.mjs} +3 -3
  169. package/dist/{renderer-DupsdRIw.mjs.map → renderer-CraudZUC.mjs.map} +1 -1
  170. package/dist/renderer-CsEk9TFz.mjs +5 -0
  171. package/dist/renderer-CvOzuDX3.mjs +215 -0
  172. package/dist/renderer-CvOzuDX3.mjs.map +1 -0
  173. package/dist/{renderer-DJfFc-XW.mjs → renderer-Cvysm2Jg.mjs} +3 -3
  174. package/dist/{renderer-DJfFc-XW.mjs.map → renderer-Cvysm2Jg.mjs.map} +1 -1
  175. package/dist/{renderer-Bn2eQE-t.mjs → renderer-CwwmwM7J.mjs} +3 -3
  176. package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-CwwmwM7J.mjs.map} +1 -1
  177. package/dist/{renderer-KnCcN_Nz.mjs → renderer-CxP2e6Ov.mjs} +2 -2
  178. package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-CxP2e6Ov.mjs.map} +1 -1
  179. package/dist/{renderer-BteUC_7n.mjs → renderer-D-yNHLG7.mjs} +3 -3
  180. package/dist/{renderer-BteUC_7n.mjs.map → renderer-D-yNHLG7.mjs.map} +1 -1
  181. package/dist/renderer-D0xLIq1r.mjs +203 -0
  182. package/dist/renderer-D0xLIq1r.mjs.map +1 -0
  183. package/dist/{renderer-id8TbKBY.mjs → renderer-D1MOTlWS.mjs} +2 -2
  184. package/dist/{renderer-id8TbKBY.mjs.map → renderer-D1MOTlWS.mjs.map} +1 -1
  185. package/dist/renderer-D1T7A3NF.mjs +233 -0
  186. package/dist/renderer-D1T7A3NF.mjs.map +1 -0
  187. package/dist/renderer-D1gx_-hi.mjs +5 -0
  188. package/dist/renderer-D5MCGNAF.mjs +5 -0
  189. package/dist/{renderer-Db3JIF1K.mjs → renderer-D6YcQTLI.mjs} +3 -3
  190. package/dist/{renderer-Db3JIF1K.mjs.map → renderer-D6YcQTLI.mjs.map} +1 -1
  191. package/dist/{renderer-BNqwn0gZ.mjs → renderer-D8_UYdDb.mjs} +2 -2
  192. package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-D8_UYdDb.mjs.map} +1 -1
  193. package/dist/renderer-DD_MzvM-.mjs +5 -0
  194. package/dist/{renderer-BHskWZNG.mjs → renderer-DIqwz7dV.mjs} +2 -2
  195. package/dist/{renderer-57ATc_mQ.mjs → renderer-DJQD7tai.mjs} +2 -2
  196. package/dist/{renderer-57ATc_mQ.mjs.map → renderer-DJQD7tai.mjs.map} +1 -1
  197. package/dist/{renderer-CWBHVCvA.mjs → renderer-DKXK5hDm.mjs} +2 -2
  198. package/dist/{renderer-CWBHVCvA.mjs.map → renderer-DKXK5hDm.mjs.map} +1 -1
  199. package/dist/{renderer-p_C_T9Kn.mjs → renderer-DNYSf2Fl.mjs} +2 -2
  200. package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-DNYSf2Fl.mjs.map} +1 -1
  201. package/dist/{renderer-DXqIslFk.mjs → renderer-DNaHFctD.mjs} +2 -2
  202. package/dist/{renderer-DXqIslFk.mjs.map → renderer-DNaHFctD.mjs.map} +1 -1
  203. package/dist/renderer-DO5r7ZV-.mjs +658 -0
  204. package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
  205. package/dist/renderer-DP7YoZ0K.mjs +5 -0
  206. package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
  207. package/dist/renderer-DQtk282o.mjs.map +1 -0
  208. package/dist/{renderer-u8ynJtAC.mjs → renderer-DWcbrx2M.mjs} +2 -2
  209. package/dist/{renderer-u8ynJtAC.mjs.map → renderer-DWcbrx2M.mjs.map} +1 -1
  210. package/dist/renderer-DXiWvKij.mjs +5 -0
  211. package/dist/renderer-DZnUiiBp.mjs +222 -0
  212. package/dist/renderer-DZnUiiBp.mjs.map +1 -0
  213. package/dist/renderer-Dc6fW-o1.mjs +5 -0
  214. package/dist/renderer-DiurlsNT.mjs +5 -0
  215. package/dist/{renderer-BmGPTWwV.mjs → renderer-Dju3SEAJ.mjs} +3 -3
  216. package/dist/{renderer-BmGPTWwV.mjs.map → renderer-Dju3SEAJ.mjs.map} +1 -1
  217. package/dist/{renderer-BT-_EoXw.d.mts → renderer-DlESyfg7.d.mts} +2 -2
  218. package/dist/{renderer-BT-_EoXw.d.mts.map → renderer-DlESyfg7.d.mts.map} +1 -1
  219. package/dist/{renderer-aArb4RwJ.mjs → renderer-DpQaiH6C.mjs} +2 -2
  220. package/dist/{renderer-aArb4RwJ.mjs.map → renderer-DpQaiH6C.mjs.map} +1 -1
  221. package/dist/{renderer-CeyAgJnw.mjs → renderer-DuxzqfoE.mjs} +2 -2
  222. package/dist/renderer-DvCUdgVz.mjs +5 -0
  223. package/dist/{renderer-AF884a7T.mjs → renderer-Dvg5nbgU.mjs} +3 -3
  224. package/dist/{renderer-AF884a7T.mjs.map → renderer-Dvg5nbgU.mjs.map} +1 -1
  225. package/dist/{renderer-DvFaC_-7.mjs → renderer-Dvq11SEA.mjs} +2 -2
  226. package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dvq11SEA.mjs.map} +1 -1
  227. package/dist/renderer-DyPgVl1l.mjs +223 -0
  228. package/dist/renderer-DyPgVl1l.mjs.map +1 -0
  229. package/dist/{renderer-DEuIwr-t.mjs → renderer-DzOzVxNS.mjs} +2 -2
  230. package/dist/{renderer-DEuIwr-t.mjs.map → renderer-DzOzVxNS.mjs.map} +1 -1
  231. package/dist/renderer-EhCkD11e.mjs +208 -0
  232. package/dist/renderer-EhCkD11e.mjs.map +1 -0
  233. package/dist/renderer-IiwAh9-K.mjs +5 -0
  234. package/dist/{renderer-jqByPgkD.mjs → renderer-JiEpssIz.mjs} +2 -2
  235. package/dist/{renderer-jqByPgkD.mjs.map → renderer-JiEpssIz.mjs.map} +1 -1
  236. package/dist/renderer-JlGXqH0E.mjs +5 -0
  237. package/dist/{renderer-Beg7FLt2.mjs → renderer-OxafT7Xm.mjs} +75 -27
  238. package/dist/renderer-OxafT7Xm.mjs.map +1 -0
  239. package/dist/renderer-TZFKKgL1.mjs +5 -0
  240. package/dist/renderer-UT0CcmMZ.mjs +191 -0
  241. package/dist/renderer-UT0CcmMZ.mjs.map +1 -0
  242. package/dist/{renderer-YbaCzPcG.mjs → renderer-YyEBKPcE.mjs} +2 -2
  243. package/dist/{renderer-jYxN4mHn.mjs → renderer-_AuL8mAi.mjs} +3 -3
  244. package/dist/{renderer-jYxN4mHn.mjs.map → renderer-_AuL8mAi.mjs.map} +1 -1
  245. package/dist/{renderer-C6md3msE.mjs → renderer-aCDIEYb3.mjs} +2 -2
  246. package/dist/{renderer-C6md3msE.mjs.map → renderer-aCDIEYb3.mjs.map} +1 -1
  247. package/dist/renderer-aEecoNPX.mjs +5 -0
  248. package/dist/{renderer-BeIUgp1r.mjs → renderer-aN60v8jR.mjs} +2 -2
  249. package/dist/{renderer-BeIUgp1r.mjs.map → renderer-aN60v8jR.mjs.map} +1 -1
  250. package/dist/renderer-ewhliYYP.mjs +5 -0
  251. package/dist/renderer-hQc6GgTi.mjs +5 -0
  252. package/dist/renderer-iuX0RZIi.mjs +5 -0
  253. package/dist/renderer-j4vkTzHa.mjs +5 -0
  254. package/dist/{renderer-EemDpvv3.mjs → renderer-mpInX4Iy.mjs} +3 -3
  255. package/dist/{renderer-EemDpvv3.mjs.map → renderer-mpInX4Iy.mjs.map} +1 -1
  256. package/dist/renderer-msPjwx_9.mjs +5 -0
  257. package/dist/renderer-pI2ndu-b.mjs +5 -0
  258. package/dist/renderer-x1OGMhsC.mjs +5 -0
  259. package/dist/{renderer-DZXbgVMK.mjs → renderer-xezE7IZX.mjs} +3 -3
  260. package/dist/{renderer-DZXbgVMK.mjs.map → renderer-xezE7IZX.mjs.map} +1 -1
  261. package/dist/renderer-yGAk7J9P.mjs +222 -0
  262. package/dist/renderer-yGAk7J9P.mjs.map +1 -0
  263. package/dist/{renderer-Bvx56GR6.mjs → renderer-zQIB2VZZ.mjs} +2 -2
  264. package/dist/{renderer-Bvx56GR6.mjs.map → renderer-zQIB2VZZ.mjs.map} +1 -1
  265. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-i6u_rhCX.mjs} +2 -2
  266. package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-i6u_rhCX.mjs.map} +1 -1
  267. package/dist/signals/index.d.mts +5 -5
  268. package/dist/signals/index.mjs +4 -4
  269. package/package.json +58 -55
  270. package/dist/dist-CT___nEU.mjs.map +0 -1
  271. package/dist/effects-C06-AOge.mjs.map +0 -1
  272. package/dist/index-B-oUlLoO.d.mts.map +0 -1
  273. package/dist/index-CwbszPDG.d.mts.map +0 -1
  274. package/dist/preview-engine/chunk-G4K6TLNA.mjs +0 -1
  275. package/dist/preview-engine/chunk-HVCAOHNI.mjs +0 -1
  276. package/dist/preview-engine/chunk-KBO6EX3M.mjs +0 -1448
  277. package/dist/preview-engine/chunk-N4LHIPHZ.mjs +0 -340
  278. package/dist/preview-engine/chunk-NECOKNHA.mjs +0 -174
  279. package/dist/preview-engine/renderers-T4JMJXWL.mjs +0 -1
  280. package/dist/preview-engine/renderers-VFV5QWO3.mjs +0 -1
  281. package/dist/preview-engine/renderers-VUL4HBX3.mjs +0 -228
  282. package/dist/program-DzknMiY0.mjs.map +0 -1
  283. package/dist/renderer--IDyGdqT.mjs +0 -5
  284. package/dist/renderer-17K4tjid.mjs +0 -5
  285. package/dist/renderer-1vhaKMeg.mjs.map +0 -1
  286. package/dist/renderer-Ab9Ttn_m.mjs +0 -5
  287. package/dist/renderer-B-roDBBo.mjs +0 -5
  288. package/dist/renderer-B03uwoUX.mjs +0 -5
  289. package/dist/renderer-B3BI_7YJ.mjs +0 -5
  290. package/dist/renderer-BGD4lQ74.mjs +0 -5
  291. package/dist/renderer-BHXhYfeC.mjs +0 -5
  292. package/dist/renderer-BRsTIMFa.mjs +0 -5
  293. package/dist/renderer-Beg7FLt2.mjs.map +0 -1
  294. package/dist/renderer-BjMTtYZw.mjs +0 -5
  295. package/dist/renderer-BoCh3Yts.mjs +0 -5
  296. package/dist/renderer-BqPbR8c4.mjs +0 -5
  297. package/dist/renderer-Bxa4SDm9.mjs +0 -3
  298. package/dist/renderer-C4Da2I1-.mjs +0 -5
  299. package/dist/renderer-C93X6dgl.mjs +0 -5
  300. package/dist/renderer-CE7fwGgw.mjs.map +0 -1
  301. package/dist/renderer-CMAwFfGx.mjs +0 -6
  302. package/dist/renderer-CRXeSuX2.mjs +0 -5
  303. package/dist/renderer-CSp6WYBN.mjs +0 -5
  304. package/dist/renderer-CUXX7HTL.mjs +0 -5
  305. package/dist/renderer-CUgThpka.mjs +0 -5
  306. package/dist/renderer-CeVtufiT.mjs +0 -5
  307. package/dist/renderer-CespkZUk.mjs +0 -5
  308. package/dist/renderer-D1l47xhL.mjs +0 -5
  309. package/dist/renderer-DDuG18J8.mjs +0 -5
  310. package/dist/renderer-DFhrFSMn.mjs +0 -5
  311. package/dist/renderer-DO48vQ7Y.mjs +0 -5
  312. package/dist/renderer-DTC39B_n.mjs +0 -5
  313. package/dist/renderer-DbyU3hNF.mjs +0 -5
  314. package/dist/renderer-DftVpmfu.mjs +0 -5
  315. package/dist/renderer-Dj5jm63K.mjs +0 -5
  316. package/dist/renderer-Dju57ZaF.mjs +0 -5
  317. package/dist/renderer-Dn8TQCw7.mjs +0 -5
  318. package/dist/renderer-ETF46K0D.mjs +0 -5
  319. package/dist/renderer-azYzWGC3.mjs +0 -5
  320. package/dist/renderer-dxNoRW59.mjs +0 -5
  321. package/dist/renderer-fdfelx_I.mjs +0 -5
  322. package/dist/renderer-snwEKwMw.mjs +0 -5
@@ -1,340 +0,0 @@
1
- import{e as f}from"./chunk-BVF64D6H.mjs";f();f();var C=`
2
- struct FlowParams {
3
- width: u32,
4
- height: u32,
5
- windowSize: u32, // Half-window radius W (e.g. 2 for 5x5 window)
6
- regularization: f32, // Tikhonov regularization lambda
7
- maxDisplacement: f32, // Maximum allowable flow vector length
8
- _pad0: f32,
9
- _pad1: f32,
10
- _pad2: f32,
11
- };
12
-
13
- @group(0) @binding(0) var prevTex: texture_2d<f32>;
14
- @group(0) @binding(1) var currTex: texture_2d<f32>;
15
- @group(0) @binding(2) var flowTex: texture_storage_2d<rgba16float, write>;
16
- @group(0) @binding(3) var<uniform> params: FlowParams;
17
-
18
- fn rgbToLuminance(rgb: vec3<f32>) -> f32 {
19
- return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));
20
- }
21
-
22
- fn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {
23
- let inDims = vec2<f32>(textureDimensions(tex));
24
- let scaleRatio = inDims / vec2<f32>(f32(params.width), f32(params.height));
25
- let actualCoord = vec2<i32>(vec2<f32>(coord) * scaleRatio);
26
- let clamped = clamp(actualCoord, vec2<i32>(0, 0), vec2<i32>(inDims) - vec2<i32>(1, 1));
27
- let color = textureLoad(tex, clamped, 0);
28
- return rgbToLuminance(color.rgb);
29
- }
30
-
31
- @compute @workgroup_size(16, 16)
32
- fn computeFlow(@builtin(global_invocation_id) id: vec3<u32>) {
33
- if (id.x >= params.width || id.y >= params.height) {
34
- return;
35
- }
36
-
37
- let centerCoord = vec2<i32>(i32(id.x), i32(id.y));
38
- let w = i32(max(params.windowSize, 1u));
39
-
40
- var sxx: f32 = 0.0;
41
- var syy: f32 = 0.0;
42
- var sxy: f32 = 0.0;
43
- var sxt: f32 = 0.0;
44
- var syt: f32 = 0.0;
45
-
46
- for (var dy = -w; dy <= w; dy = dy + 1) {
47
- for (var dx = -w; dx <= w; dx = dx + 1) {
48
- let p = centerCoord + vec2<i32>(dx, dy);
49
-
50
- // Central difference spatial gradients on current frame
51
- let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));
52
- let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));
53
- let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));
54
- let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));
55
-
56
- let ix = (rx - lx) * 0.5;
57
- let iy = (dyL - uy) * 0.5;
58
-
59
- // Temporal gradient: difference between current and previous frame
60
- let cCurr = sampleLuma(currTex, p);
61
- let cPrev = sampleLuma(prevTex, p);
62
- let it = cCurr - cPrev;
63
-
64
- // Gaussian spatial falloff weight
65
- let distSq = f32(dx * dx + dy * dy);
66
- let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));
67
-
68
- sxx += ix * ix * weight;
69
- syy += iy * iy * weight;
70
- sxy += ix * iy * weight;
71
- sxt += ix * it * weight;
72
- syt += iy * it * weight;
73
- }
74
- }
75
-
76
- // Tikhonov regularization prevents singularity in flat/homogeneous regions
77
- let trace = sxx + syy;
78
- let reg = max(params.regularization, 1e-4) * max(trace, 1.0);
79
- let A = sxx + reg;
80
- let B = sxy;
81
- let C = syy + reg;
82
-
83
- let det = A * C - B * B;
84
- var u: f32 = 0.0;
85
- var v: f32 = 0.0;
86
-
87
- if (det > 1e-6) {
88
- u = (-sxt * C + syt * B) / det;
89
- v = (-syt * A + sxt * B) / det;
90
- }
91
-
92
- let mag = length(vec2<f32>(u, v));
93
- let maxD = max(params.maxDisplacement, 1.0);
94
- if (mag > maxD) {
95
- let scale = maxD / mag;
96
- u *= scale;
97
- v *= scale;
98
- }
99
-
100
- textureStore(flowTex, id.xy, vec4<f32>(u, v, min(mag, maxD), 1.0));
101
- }
102
- `,G=`
103
- struct FlowParams {
104
- width: u32,
105
- height: u32,
106
- windowSize: u32,
107
- regularization: f32,
108
- maxDisplacement: f32,
109
- coarseWidth: u32,
110
- coarseHeight: u32,
111
- _pad0: f32,
112
- };
113
-
114
- @group(0) @binding(0) var prevTex: texture_2d<f32>;
115
- @group(0) @binding(1) var currTex: texture_2d<f32>;
116
- @group(0) @binding(2) var coarseFlowTex: texture_2d<f32>;
117
- @group(0) @binding(3) var fineFlowTex: texture_storage_2d<rgba16float, write>;
118
- @group(0) @binding(4) var<uniform> params: FlowParams;
119
- @group(0) @binding(5) var bilinearSamp: sampler;
120
-
121
- fn rgbToLuminance(rgb: vec3<f32>) -> f32 {
122
- return dot(rgb, vec3<f32>(0.299, 0.587, 0.114));
123
- }
124
-
125
- fn sampleLuma(tex: texture_2d<f32>, coord: vec2<i32>) -> f32 {
126
- let clamped = clamp(coord, vec2<i32>(0, 0), vec2<i32>(i32(params.width) - 1, i32(params.height) - 1));
127
- let color = textureLoad(tex, clamped, 0);
128
- return rgbToLuminance(color.rgb);
129
- }
130
-
131
- fn sampleWarpedPrevLuma(uv: vec2<f32>, priorFlow: vec2<f32>) -> f32 {
132
- let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));
133
- let warpedUv = clamp(uv - priorFlow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));
134
- let sampleColor = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);
135
- return rgbToLuminance(sampleColor.rgb);
136
- }
137
-
138
- @compute @workgroup_size(16, 16)
139
- fn refineFlow(@builtin(global_invocation_id) id: vec3<u32>) {
140
- if (id.x >= params.width || id.y >= params.height) {
141
- return;
142
- }
143
-
144
- let centerCoord = vec2<i32>(i32(id.x), i32(id.y));
145
- let w = i32(max(params.windowSize, 1u));
146
- let invDims = vec2<f32>(1.0 / f32(params.width), 1.0 / f32(params.height));
147
- let centerUv = (vec2<f32>(id.xy) + 0.5) * invDims;
148
-
149
- // Read upsampled prior flow from coarse scale (scaled by 2x)
150
- let coarseCoord = vec2<i32>(centerCoord / 2);
151
- let coarseSample = textureLoad(coarseFlowTex, coarseCoord, 0);
152
- let priorFlow = coarseSample.xy * 2.0;
153
-
154
- var sxx: f32 = 0.0;
155
- var syy: f32 = 0.0;
156
- var sxy: f32 = 0.0;
157
- var sxt: f32 = 0.0;
158
- var syt: f32 = 0.0;
159
-
160
- for (var dy = -w; dy <= w; dy = dy + 1) {
161
- for (var dx = -w; dx <= w; dx = dx + 1) {
162
- let p = centerCoord + vec2<i32>(dx, dy);
163
- let pUv = (vec2<f32>(p) + 0.5) * invDims;
164
-
165
- let lx = sampleLuma(currTex, p - vec2<i32>(1, 0));
166
- let rx = sampleLuma(currTex, p + vec2<i32>(1, 0));
167
- let uy = sampleLuma(currTex, p - vec2<i32>(0, 1));
168
- let dyL = sampleLuma(currTex, p + vec2<i32>(0, 1));
169
-
170
- let ix = (rx - lx) * 0.5;
171
- let iy = (dyL - uy) * 0.5;
172
-
173
- // Temporal residual against warped previous frame
174
- let cCurr = sampleLuma(currTex, p);
175
- let cWarpedPrev = sampleWarpedPrevLuma(pUv, priorFlow);
176
- let it = cCurr - cWarpedPrev;
177
-
178
- let distSq = f32(dx * dx + dy * dy);
179
- let weight = exp(-distSq / (2.0 * f32(w * w) + 0.1));
180
-
181
- sxx += ix * ix * weight;
182
- syy += iy * iy * weight;
183
- sxy += ix * iy * weight;
184
- sxt += ix * it * weight;
185
- syt += iy * it * weight;
186
- }
187
- }
188
-
189
- let trace = sxx + syy;
190
- let reg = max(params.regularization, 1e-4) * max(trace, 1.0);
191
- let A = sxx + reg;
192
- let B = sxy;
193
- let C = syy + reg;
194
-
195
- let det = A * C - B * B;
196
- var du: f32 = 0.0;
197
- var dv: f32 = 0.0;
198
-
199
- if (det > 1e-6) {
200
- du = (-sxt * C + syt * B) / det;
201
- dv = (-syt * A + sxt * B) / det;
202
- }
203
-
204
- // Combine coarse prior flow with fine residual flow
205
- var totalFlow = priorFlow + vec2<f32>(du, dv);
206
- let mag = length(totalFlow);
207
- let maxD = max(params.maxDisplacement, 1.0);
208
- if (mag > maxD) {
209
- totalFlow *= (maxD / mag);
210
- }
211
-
212
- textureStore(fineFlowTex, id.xy, vec4<f32>(totalFlow.x, totalFlow.y, min(mag, maxD), 1.0));
213
- }
214
- `;var T=class{constructor(e){this.device=e;let i=e.createShaderModule({label:"optical_flow_direct.wgsl",code:C});this.directPipeline=e.createComputePipeline({label:"OpticalFlowDirectPipeline",layout:"auto",compute:{module:i,entryPoint:"computeFlow"}});let t=e.createShaderModule({label:"optical_flow_refine.wgsl",code:G});this.refinePipeline=e.createComputePipeline({label:"OpticalFlowRefinePipeline",layout:"auto",compute:{module:t,entryPoint:"refineFlow"}}),this.directUniformBuffer=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"optical_flow_direct_uniform"}),this.refineUniformBuffer=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"optical_flow_refine_uniform"}),this.bilinearSampler=e.createSampler({label:"optical_flow_bilinear_sampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}device;directPipeline;refinePipeline;directUniformBuffer;refineUniformBuffer;bilinearSampler;cachedCoarseTexture;cachedOutputTexture;execute(e,i,t={},o){let r=i.width,l=i.height,x=t?.windowSize??3,g=t?.regularization??t?.lambda??.05,m=t?.scale??.5,n=64,w=t.outputFormat??"rgba16float";(!this.cachedOutputTexture||this.cachedOutputTexture.width!==r||this.cachedOutputTexture.height!==l||this.cachedOutputTexture.format!==w)&&(this.cachedOutputTexture?.destroy(),this.cachedOutputTexture=this.device.createTexture({label:`optical_flow_output_${w}`,size:[r,l],format:w,usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}));let v=o??this.device.createCommandEncoder({label:"optical_flow_command_encoder"});if(m>.1&&m<.95&&r>=64&&l>=64){let a=Math.max(16,Math.floor(r*m)),s=Math.max(16,Math.floor(l*m));(!this.cachedCoarseTexture||this.cachedCoarseTexture.width!==a||this.cachedCoarseTexture.height!==s)&&(this.cachedCoarseTexture?.destroy(),this.cachedCoarseTexture=this.device.createTexture({label:"optical_flow_coarse",size:[a,s],format:"rgba16float",usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC}));let u=new ArrayBuffer(32),p=new Uint32Array(u),c=new Float32Array(u);p[0]=a,p[1]=s,p[2]=x,c[3]=g,c[4]=n*m,this.device.queue.writeBuffer(this.directUniformBuffer,0,u);let P=this.device.createBindGroup({layout:this.directPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.createView()},{binding:1,resource:i.createView()},{binding:2,resource:this.cachedCoarseTexture.createView()},{binding:3,resource:{buffer:this.directUniformBuffer}}]}),d=v.beginComputePass({label:"optical_flow_coarse_pass"});d.setPipeline(this.directPipeline),d.setBindGroup(0,P),d.dispatchWorkgroups(Math.ceil(a/16),Math.ceil(s/16)),d.end();let h=new ArrayBuffer(32),b=new Uint32Array(h),B=new Float32Array(h);b[0]=r,b[1]=l,b[2]=x,B[3]=g,B[4]=n,b[5]=a,b[6]=s,this.device.queue.writeBuffer(this.refineUniformBuffer,0,h);let L=this.device.createBindGroup({layout:this.refinePipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.createView()},{binding:1,resource:i.createView()},{binding:2,resource:this.cachedCoarseTexture.createView()},{binding:3,resource:this.cachedOutputTexture.createView()},{binding:4,resource:{buffer:this.refineUniformBuffer}},{binding:5,resource:this.bilinearSampler}]}),y=v.beginComputePass({label:"optical_flow_fine_pass"});y.setPipeline(this.refinePipeline),y.setBindGroup(0,L),y.dispatchWorkgroups(Math.ceil(r/16),Math.ceil(l/16)),y.end()}else{let a=new ArrayBuffer(32),s=new Uint32Array(a),u=new Float32Array(a);s[0]=r,s[1]=l,s[2]=x,u[3]=g,u[4]=n,this.device.queue.writeBuffer(this.directUniformBuffer,0,a);let p=this.device.createBindGroup({layout:this.directPipeline.getBindGroupLayout(0),entries:[{binding:0,resource:e.createView()},{binding:1,resource:i.createView()},{binding:2,resource:this.cachedOutputTexture.createView()},{binding:3,resource:{buffer:this.directUniformBuffer}}]}),c=v.beginComputePass({label:"optical_flow_direct_pass"});c.setPipeline(this.directPipeline),c.setBindGroup(0,p),c.dispatchWorkgroups(Math.ceil(r/16),Math.ceil(l/16)),c.end()}return o||this.device.queue.submit([v.finish()]),this.cachedOutputTexture}destroy(){this.cachedCoarseTexture?.destroy(),this.cachedOutputTexture?.destroy(),this.directUniformBuffer.destroy(),this.refineUniformBuffer.destroy()}};f();f();var F=`
215
- struct WarpBlendParams {
216
- width: u32,
217
- height: u32,
218
- blendWeight: f32, // Base current frame weight alpha (e.g. 0.35)
219
- disocclusionThreshold: f32, // Photometric error cutoff for fallback to curr frame
220
- maxMotionPixels: f32, // Speed cutoff for fallback to curr frame
221
- isFirstFrame: f32, // 1.0 = pass-through first frame, 0.0 = temporal blend
222
- _pad0: f32,
223
- _pad1: f32,
224
- };
225
-
226
- @group(0) @binding(0) var prevTex: texture_2d<f32>;
227
- @group(0) @binding(1) var currTex: texture_2d<f32>;
228
- @group(0) @binding(2) var flowTex: texture_2d<f32>;
229
- @group(0) @binding(3) var outTex: texture_storage_2d<rgba8unorm, write>;
230
- @group(0) @binding(4) var<uniform> params: WarpBlendParams;
231
- @group(0) @binding(5) var bilinearSamp: sampler;
232
-
233
- @compute @workgroup_size(16, 16)
234
- fn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {
235
- if (id.x >= params.width || id.y >= params.height) {
236
- return;
237
- }
238
-
239
- let coord = vec2<i32>(i32(id.x), i32(id.y));
240
- let currColor = textureLoad(currTex, coord, 0);
241
-
242
- // If first frame or scene cut reset, pass through current frame directly
243
- if (params.isFirstFrame > 0.5) {
244
- textureStore(outTex, id.xy, currColor);
245
- return;
246
- }
247
-
248
- let dims = vec2<f32>(f32(params.width), f32(params.height));
249
- let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);
250
- let uv = (vec2<f32>(id.xy) + 0.5) * invDims;
251
-
252
- // Read motion vector (u, v) in pixel units
253
- let flowSample = textureLoad(flowTex, coord, 0);
254
- let flow = flowSample.xy;
255
- let speed = length(flow);
256
-
257
- // Motion-compensated backward warp coordinate pointing to previous frame
258
- let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));
259
- let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);
260
-
261
- // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)
262
- let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;
263
-
264
- // Adaptive blend weight:
265
- // - Coherent motion (low diff, low speed): alpha = blendWeight (strong deflicker smoothing)
266
- // - Disocclusion or extreme motion (high diff): alpha -> 1.0 (fall back to curr frame, no ghosting)
267
- let tLow = params.disocclusionThreshold;
268
- let tHigh = params.disocclusionThreshold * 1.5;
269
- let errFactor = smoothstep(tLow, tHigh, colorDiff);
270
- let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);
271
-
272
- let fallbackFactor = max(errFactor, speedFactor);
273
- let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);
274
-
275
- let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);
276
- let blendedA = mix(warpedPrev.a, currColor.a, alpha);
277
-
278
- textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));
279
- }
280
- `,S=`
281
- struct WarpBlendParams {
282
- width: u32,
283
- height: u32,
284
- blendWeight: f32,
285
- disocclusionThreshold: f32,
286
- maxMotionPixels: f32,
287
- isFirstFrame: f32,
288
- _pad0: f32,
289
- _pad1: f32,
290
- };
291
-
292
- @group(0) @binding(0) var prevTex: texture_2d<f32>;
293
- @group(0) @binding(1) var currTex: texture_2d<f32>;
294
- @group(0) @binding(2) var flowTex: texture_2d<f32>;
295
- @group(0) @binding(3) var outTex: texture_storage_2d<rgba16float, write>;
296
- @group(0) @binding(4) var<uniform> params: WarpBlendParams;
297
- @group(0) @binding(5) var bilinearSamp: sampler;
298
-
299
- @compute @workgroup_size(16, 16)
300
- fn warpBlend(@builtin(global_invocation_id) id: vec3<u32>) {
301
- if (id.x >= params.width || id.y >= params.height) {
302
- return;
303
- }
304
-
305
- let coord = vec2<i32>(i32(id.x), i32(id.y));
306
- let currColor = textureLoad(currTex, coord, 0);
307
-
308
- if (params.isFirstFrame > 0.5) {
309
- textureStore(outTex, id.xy, currColor);
310
- return;
311
- }
312
-
313
- let dims = vec2<f32>(f32(params.width), f32(params.height));
314
- let invDims = vec2<f32>(1.0 / dims.x, 1.0 / dims.y);
315
- let uv = (vec2<f32>(id.xy) + 0.5) * invDims;
316
-
317
- let flowSample = textureLoad(flowTex, coord, 0);
318
- let flow = flowSample.xy;
319
- let speed = length(flow);
320
-
321
- let warpedUv = clamp(uv - flow * invDims, vec2<f32>(0.0), vec2<f32>(1.0));
322
- let warpedPrev = textureSampleLevel(prevTex, bilinearSamp, warpedUv, 0.0);
323
-
324
- // Photometric consistency error normalized to [0, 1] range (1 / sqrt(3) ~= 0.57735027)
325
- let colorDiff = length(currColor.rgb - warpedPrev.rgb) * 0.57735027;
326
-
327
- let tLow = params.disocclusionThreshold;
328
- let tHigh = params.disocclusionThreshold * 1.5;
329
- let errFactor = smoothstep(tLow, tHigh, colorDiff);
330
- let speedFactor = smoothstep(params.maxMotionPixels * 0.5, params.maxMotionPixels, speed);
331
-
332
- let fallbackFactor = max(errFactor, speedFactor);
333
- let alpha = clamp(mix(params.blendWeight, 1.0, fallbackFactor), 0.0, 1.0);
334
-
335
- let blendedRgb = mix(warpedPrev.rgb, currColor.rgb, alpha);
336
- let blendedA = mix(warpedPrev.a, currColor.a, alpha);
337
-
338
- textureStore(outTex, id.xy, vec4<f32>(blendedRgb, blendedA));
339
- }
340
- `;var D=class{constructor(e){this.device=e;this.flowPipeline=new T(e);let i=e.createShaderModule({label:"temporal_warp_blend_rgba8.wgsl",code:F});this.rgba8Pipeline=e.createComputePipeline({label:"TemporalWarpBlendRgba8Pipeline",layout:"auto",compute:{module:i,entryPoint:"warpBlend"}});let t=e.createShaderModule({label:"temporal_warp_blend_rgba16f.wgsl",code:S});this.rgba16fPipeline=e.createComputePipeline({label:"TemporalWarpBlendRgba16fPipeline",layout:"auto",compute:{module:t,entryPoint:"warpBlend"}}),this.uniformBuffer=e.createBuffer({size:32,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST,label:"temporal_deflicker_uniform"}),this.bilinearSampler=e.createSampler({label:"temporal_deflicker_sampler",magFilter:"linear",minFilter:"linear",addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}device;flowPipeline;rgba8Pipeline;rgba16fPipeline;uniformBuffer;bilinearSampler;historyTexture;cachedOutputTexture;execute(e,i={},t){let o=e.width,r=e.height,l=i.blendWeight??.35,x=typeof l=="number"?l:Number(l),g=i.disocclusionThreshold??.15,m=i.maxMotionPixels??64,n=e.format,w=n==="rgba16float";if((!this.cachedOutputTexture||this.cachedOutputTexture.width!==o||this.cachedOutputTexture.height!==r||this.cachedOutputTexture.format!==n)&&(this.cachedOutputTexture?.destroy(),this.cachedOutputTexture=this.device.createTexture({label:`deflickered_output_${n}`,size:[o,r],format:n,usage:GPUTextureUsage.STORAGE_BINDING|GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_SRC|GPUTextureUsage.COPY_DST|GPUTextureUsage.RENDER_ATTACHMENT})),!this.historyTexture||this.historyTexture.width!==o||this.historyTexture.height!==r){this.historyTexture?.destroy(),this.historyTexture=this.device.createTexture({label:"deflicker_history_texture",size:[o,r],format:n,usage:GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST|GPUTextureUsage.COPY_SRC});let h=t??this.device.createCommandEncoder({label:"deflicker_first_frame_encoder"});return h.copyTextureToTexture({texture:e},{texture:this.historyTexture},[o,r]),h.copyTextureToTexture({texture:e},{texture:this.cachedOutputTexture},[o,r]),t||this.device.queue.submit([h.finish()]),this.cachedOutputTexture}let U=this.flowPipeline.execute(this.historyTexture,e,i.opticalFlow,t),a=new ArrayBuffer(32),s=new Uint32Array(a),u=new Float32Array(a);s[0]=o,s[1]=r,u[2]=x,u[3]=g,u[4]=m,u[5]=0,this.device.queue.writeBuffer(this.uniformBuffer,0,a);let p=w?this.rgba16fPipeline:this.rgba8Pipeline,c=t??this.device.createCommandEncoder({label:"deflicker_blend_encoder"}),P=this.device.createBindGroup({layout:p.getBindGroupLayout(0),entries:[{binding:0,resource:this.historyTexture.createView()},{binding:1,resource:e.createView()},{binding:2,resource:U.createView()},{binding:3,resource:this.cachedOutputTexture.createView()},{binding:4,resource:{buffer:this.uniformBuffer}},{binding:5,resource:this.bilinearSampler}]}),d=c.beginComputePass({label:"deflicker_blend_pass"});return d.setPipeline(p),d.setBindGroup(0,P),d.dispatchWorkgroups(Math.ceil(o/16),Math.ceil(r/16)),d.end(),c.copyTextureToTexture({texture:this.cachedOutputTexture},{texture:this.historyTexture},[o,r]),t||this.device.queue.submit([c.finish()]),this.cachedOutputTexture}reset(){this.historyTexture?.destroy(),this.historyTexture=void 0}destroy(){this.flowPipeline.destroy(),this.historyTexture?.destroy(),this.cachedOutputTexture?.destroy(),this.uniformBuffer.destroy()}};export{T as a,D as b};