framefields 2.2.0 → 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.
- package/README.md +11 -2
- package/dist/audio/index.d.mts +4 -4
- package/dist/audio/index.mjs +10 -10
- package/dist/{audio-BvYmTu5T.d.mts → audio-BNnEclHU.d.mts} +3 -3
- package/dist/{audio-BvYmTu5T.d.mts.map → audio-BNnEclHU.d.mts.map} +1 -1
- package/dist/{audio-DMUr01vS.mjs → audio-ChRqnFwB.mjs} +3 -3
- package/dist/{audio-DMUr01vS.mjs.map → audio-ChRqnFwB.mjs.map} +1 -1
- package/dist/{dist-cjxDXQdx.mjs → dist-PwT_Vmax.mjs} +102 -6
- package/dist/{dist-cjxDXQdx.mjs.map → dist-PwT_Vmax.mjs.map} +1 -1
- package/dist/{dist-CT___nEU.mjs → dist-t-NLlnhM.mjs} +7 -5
- package/dist/dist-t-NLlnhM.mjs.map +1 -0
- package/dist/effects/index.d.mts +5 -5
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-C06-AOge.mjs → effects-Duoqc_Oa.mjs} +532 -4
- package/dist/effects-Duoqc_Oa.mjs.map +1 -0
- package/dist/fonts/index.d.mts +1 -1
- package/dist/fonts/index.mjs +2 -2
- package/dist/{fonts-C0UuLQvr.mjs → fonts-CgNmeFXh.mjs} +2 -2
- package/dist/{fonts-C0UuLQvr.mjs.map → fonts-CgNmeFXh.mjs.map} +1 -1
- package/dist/{gpu-Du7GpVFW.mjs → gpu-1ZpAuQOR.mjs} +2 -2
- package/dist/{gpu-Du7GpVFW.mjs.map → gpu-1ZpAuQOR.mjs.map} +1 -1
- package/dist/{index-B-oUlLoO.d.mts → index-AdrZIWT0.d.mts} +27 -2
- package/dist/index-AdrZIWT0.d.mts.map +1 -0
- package/dist/{index-BcA8rep0.d.mts → index-B-55dXDu.d.mts} +1 -1
- package/dist/{index-BcA8rep0.d.mts.map → index-B-55dXDu.d.mts.map} +1 -1
- package/dist/{index-D-Iek5sq.d.mts → index-B3BwLHa6.d.mts} +3 -3
- package/dist/{index-D-Iek5sq.d.mts.map → index-B3BwLHa6.d.mts.map} +1 -1
- package/dist/{index-CwbszPDG.d.mts → index-BU51pxZO.d.mts} +956 -9
- package/dist/index-BU51pxZO.d.mts.map +1 -0
- package/dist/{index-XdQPNJnq.d.mts → index-CeRv1KC0.d.mts} +3 -3
- package/dist/{index-XdQPNJnq.d.mts.map → index-CeRv1KC0.d.mts.map} +1 -1
- package/dist/{index-DXfp_T-3.d.mts → index-Cg2ptXcs.d.mts} +2 -2
- package/dist/{index-DXfp_T-3.d.mts.map → index-Cg2ptXcs.d.mts.map} +1 -1
- package/dist/{index-CdyE1tst.d.mts → index-QmkcUL3W.d.mts} +2 -2
- package/dist/{index-CdyE1tst.d.mts.map → index-QmkcUL3W.d.mts.map} +1 -1
- package/dist/index.d.mts +1383 -11
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3122 -83
- package/dist/index.mjs.map +1 -1
- package/dist/preview/index.d.mts +2 -2
- package/dist/preview/index.mjs +10 -10
- package/dist/{preview-M0TsUzC6.mjs → preview-CArsjmkd.mjs} +2 -2
- package/dist/{preview-M0TsUzC6.mjs.map → preview-CArsjmkd.mjs.map} +1 -1
- package/dist/preview-engine/audio.mjs +1 -1
- package/dist/preview-engine/chunk-2JKXYG6J.mjs +127 -0
- package/dist/preview-engine/chunk-7I7PKKDL.mjs +214 -0
- package/dist/preview-engine/chunk-BQY4BUMN.mjs +1 -0
- package/dist/preview-engine/{chunk-RSMO7NPN.mjs → chunk-BSOJR4JU.mjs} +1 -1
- package/dist/preview-engine/chunk-BVA5NGSH.mjs +1 -0
- package/dist/preview-engine/chunk-DLAHSLNX.mjs +1522 -0
- package/dist/preview-engine/{chunk-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
- package/dist/preview-engine/chunk-KERW7QJ4.mjs +174 -0
- package/dist/preview-engine/{chunk-7B5S5D4N.mjs → chunk-TPAEN6VV.mjs} +1 -1
- package/dist/preview-engine/chunk-YQRKT47I.mjs +1 -0
- package/dist/preview-engine/crypto-W5UAWSNT.mjs +1 -0
- package/dist/preview-engine/effects.mjs +1 -1
- package/dist/preview-engine/framefields.mjs +26 -26
- package/dist/preview-engine/player.mjs +5 -5
- package/dist/preview-engine/rapier-AHBIGHEL.mjs +1 -0
- package/dist/preview-engine/rapier-JD7KNQRV.mjs +1 -0
- package/dist/preview-engine/renderers-527ONFIA.mjs +228 -0
- package/dist/preview-engine/renderers-6ODPWZ2R.mjs +96 -0
- package/dist/preview-engine/renderers-7NCG6BYS.mjs +94 -0
- package/dist/preview-engine/renderers-BGGRPAVV.mjs +363 -0
- package/dist/preview-engine/renderers-DN2GF3I7.mjs +82 -0
- package/dist/preview-engine/renderers-FGHOLJJK.mjs +44 -0
- package/dist/preview-engine/renderers-FK72LKQC.mjs +275 -0
- package/dist/preview-engine/renderers-FQWWAETX.mjs +203 -0
- package/dist/preview-engine/renderers-HMR2NAD7.mjs +81 -0
- package/dist/preview-engine/renderers-HUW2ZMS3.mjs +1 -0
- package/dist/preview-engine/renderers-JLFGBYN4.mjs +78 -0
- package/dist/preview-engine/renderers-LLUEOW5T.mjs +77 -0
- package/dist/preview-engine/renderers-NC64EQDE.mjs +1 -0
- package/dist/preview-engine/renderers-PVYP2ONH.mjs +76 -0
- package/dist/preview-engine/renderers-TPBPNXWH.mjs +26 -0
- package/dist/preview-engine/renderers-UJ4YVJZT.mjs +80 -0
- package/dist/preview-engine/renderers-WHBDHTRI.mjs +78 -0
- package/dist/preview-engine/renderers-WP67KK5K.mjs +89 -0
- package/dist/preview-engine/renderers-YNFKFM7D.mjs +67 -0
- package/dist/preview-engine/renderers-ZSENYGIY.mjs +84 -0
- package/dist/preview-engine/signals.mjs +1 -1
- package/dist/{program-DzknMiY0.mjs → program-Dd9tJFkY.mjs} +346 -13
- package/dist/program-Dd9tJFkY.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/{renderer-C8uKdelk.mjs → renderer-0L9MEb3A.mjs} +2 -2
- package/dist/{renderer-C8uKdelk.mjs.map → renderer-0L9MEb3A.mjs.map} +1 -1
- package/dist/renderer-0lp9ClNc.mjs +5 -0
- package/dist/{renderer-BbdZ0YHR.mjs → renderer-257LxOyx.mjs} +3 -3
- package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-257LxOyx.mjs.map} +1 -1
- package/dist/renderer-2BnBo6CX.mjs +219 -0
- package/dist/renderer-2BnBo6CX.mjs.map +1 -0
- package/dist/renderer-4g_BfiKp.mjs +5 -0
- package/dist/renderer-72A4SvOE.mjs +220 -0
- package/dist/renderer-72A4SvOE.mjs.map +1 -0
- package/dist/renderer-7Aw6AHqW.mjs +5 -0
- package/dist/{renderer-PKQNH21k.mjs → renderer-7OvgLE8w.mjs} +2 -2
- package/dist/{renderer-BerD3T-X.mjs → renderer-94byj7Mk.mjs} +2 -2
- package/dist/{renderer-BerD3T-X.mjs.map → renderer-94byj7Mk.mjs.map} +1 -1
- package/dist/{renderer-D-vRKssW.mjs → renderer-B2aXfdW_.mjs} +2 -2
- package/dist/{renderer-D-vRKssW.mjs.map → renderer-B2aXfdW_.mjs.map} +1 -1
- package/dist/{renderer-DD8napek.mjs → renderer-B3c-j-e5.mjs} +2 -2
- package/dist/{renderer-DD8napek.mjs.map → renderer-B3c-j-e5.mjs.map} +1 -1
- package/dist/renderer-B3ypX3MH.mjs +308 -0
- package/dist/renderer-B3ypX3MH.mjs.map +1 -0
- package/dist/renderer-B82v8PyC.mjs +5 -0
- package/dist/renderer-B8BDMJNz.mjs +5 -0
- package/dist/renderer-BARst3ZD.mjs +3 -0
- package/dist/renderer-BCPRrhP8.mjs +5 -0
- package/dist/{renderer-CMT4QcpV.mjs → renderer-BEdc-7JW.mjs} +3 -3
- package/dist/{renderer-CMT4QcpV.mjs.map → renderer-BEdc-7JW.mjs.map} +1 -1
- package/dist/renderer-BEpANdcO.mjs +204 -0
- package/dist/renderer-BEpANdcO.mjs.map +1 -0
- package/dist/renderer-BFhzO6En.mjs +5 -0
- package/dist/renderer-BH0KF-y-.mjs +6 -0
- package/dist/renderer-BHrqEgIA.mjs +541 -0
- package/dist/renderer-BHrqEgIA.mjs.map +1 -0
- package/dist/{renderer-DpW_LxLO.mjs → renderer-BId5hBLb.mjs} +3 -3
- package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BId5hBLb.mjs.map} +1 -1
- package/dist/renderer-BK32cV7E.mjs +203 -0
- package/dist/renderer-BK32cV7E.mjs.map +1 -0
- package/dist/renderer-BTI5ybyH.mjs +5 -0
- package/dist/{renderer-0gY4IQhM.mjs → renderer-BVR0mEIT.mjs} +2 -2
- package/dist/{renderer-0gY4IQhM.mjs.map → renderer-BVR0mEIT.mjs.map} +1 -1
- package/dist/{renderer-CebB0v1y.mjs → renderer-BY08hHFS.mjs} +2 -2
- package/dist/{renderer-CebB0v1y.mjs.map → renderer-BY08hHFS.mjs.map} +1 -1
- package/dist/renderer-Ba7LH8U2.mjs +5 -0
- package/dist/renderer-BcQBlfhC.mjs +5 -0
- package/dist/renderer-BdMJzCTz.mjs +5 -0
- package/dist/{renderer-D1Cm21eq.mjs → renderer-BmQbSQHf.mjs} +2 -2
- package/dist/{renderer-D1Cm21eq.mjs.map → renderer-BmQbSQHf.mjs.map} +1 -1
- package/dist/{renderer-DqdhsSwS.mjs → renderer-BmTDXIUI.mjs} +2 -2
- package/dist/{renderer-DqdhsSwS.mjs.map → renderer-BmTDXIUI.mjs.map} +1 -1
- package/dist/renderer-BpdzhZE7.mjs +224 -0
- package/dist/renderer-BpdzhZE7.mjs.map +1 -0
- package/dist/renderer-Bxi2j-tG.mjs +5 -0
- package/dist/{renderer-D8thCpS7.mjs → renderer-C-Qj0BnT.mjs} +3 -3
- package/dist/{renderer-D8thCpS7.mjs.map → renderer-C-Qj0BnT.mjs.map} +1 -1
- package/dist/{renderer-BiwIh_w4.mjs → renderer-C4tUATd_.mjs} +3 -3
- package/dist/{renderer-BiwIh_w4.mjs.map → renderer-C4tUATd_.mjs.map} +1 -1
- package/dist/{renderer-1vhaKMeg.mjs → renderer-CC72sZ8l.mjs} +141 -56
- package/dist/renderer-CC72sZ8l.mjs.map +1 -0
- package/dist/renderer-CCn5ISVM.mjs +5 -0
- package/dist/renderer-CDRsdhg9.mjs +5 -0
- package/dist/{renderer-BC8XOVl5.mjs → renderer-CI9Pq77W.mjs} +3 -3
- package/dist/{renderer-BC8XOVl5.mjs.map → renderer-CI9Pq77W.mjs.map} +1 -1
- package/dist/{renderer-CrABA3lB.mjs → renderer-CIMI33Yd.mjs} +2 -2
- package/dist/{renderer-CrABA3lB.mjs.map → renderer-CIMI33Yd.mjs.map} +1 -1
- package/dist/renderer-CKSdl0Xf.mjs +331 -0
- package/dist/renderer-CKSdl0Xf.mjs.map +1 -0
- package/dist/{renderer-Cce2fgpX.mjs → renderer-CKpwEo1w.mjs} +3 -3
- package/dist/{renderer-Cce2fgpX.mjs.map → renderer-CKpwEo1w.mjs.map} +1 -1
- package/dist/{renderer-CursFKUf.mjs → renderer-CLUyYFqS.mjs} +2 -2
- package/dist/{renderer-CursFKUf.mjs.map → renderer-CLUyYFqS.mjs.map} +1 -1
- package/dist/{renderer-Br6KyRO_.mjs → renderer-CS-goRD3.mjs} +3 -3
- package/dist/{renderer-Br6KyRO_.mjs.map → renderer-CS-goRD3.mjs.map} +1 -1
- package/dist/{renderer-DtgMsjyL.mjs → renderer-CSPpKLi3.mjs} +2 -2
- package/dist/{renderer-DtgMsjyL.mjs.map → renderer-CSPpKLi3.mjs.map} +1 -1
- package/dist/{renderer-CuVPo-wP.mjs → renderer-CWQ-Bct7.mjs} +2 -2
- package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CWQ-Bct7.mjs.map} +1 -1
- package/dist/{renderer-DHGTzype.mjs → renderer-ChoYV7Ko.mjs} +2 -2
- package/dist/{renderer-DHGTzype.mjs.map → renderer-ChoYV7Ko.mjs.map} +1 -1
- package/dist/renderer-CiCK8ZG_.mjs +5 -0
- package/dist/{renderer-CJB9nU1x.mjs → renderer-Ck2pRec0.mjs} +3 -3
- package/dist/{renderer-CJB9nU1x.mjs.map → renderer-Ck2pRec0.mjs.map} +1 -1
- package/dist/{renderer-BzDjy1_x.mjs → renderer-CrUudSLP.mjs} +2 -2
- package/dist/{renderer-BzDjy1_x.mjs.map → renderer-CrUudSLP.mjs.map} +1 -1
- package/dist/{renderer-DupsdRIw.mjs → renderer-CraudZUC.mjs} +3 -3
- package/dist/{renderer-DupsdRIw.mjs.map → renderer-CraudZUC.mjs.map} +1 -1
- package/dist/renderer-CsEk9TFz.mjs +5 -0
- package/dist/renderer-CvOzuDX3.mjs +215 -0
- package/dist/renderer-CvOzuDX3.mjs.map +1 -0
- package/dist/{renderer-DJfFc-XW.mjs → renderer-Cvysm2Jg.mjs} +3 -3
- package/dist/{renderer-DJfFc-XW.mjs.map → renderer-Cvysm2Jg.mjs.map} +1 -1
- package/dist/{renderer-Bn2eQE-t.mjs → renderer-CwwmwM7J.mjs} +3 -3
- package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-CwwmwM7J.mjs.map} +1 -1
- package/dist/{renderer-KnCcN_Nz.mjs → renderer-CxP2e6Ov.mjs} +2 -2
- package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-CxP2e6Ov.mjs.map} +1 -1
- package/dist/{renderer-BteUC_7n.mjs → renderer-D-yNHLG7.mjs} +3 -3
- package/dist/{renderer-BteUC_7n.mjs.map → renderer-D-yNHLG7.mjs.map} +1 -1
- package/dist/renderer-D0xLIq1r.mjs +203 -0
- package/dist/renderer-D0xLIq1r.mjs.map +1 -0
- package/dist/{renderer-id8TbKBY.mjs → renderer-D1MOTlWS.mjs} +2 -2
- package/dist/{renderer-id8TbKBY.mjs.map → renderer-D1MOTlWS.mjs.map} +1 -1
- package/dist/renderer-D1T7A3NF.mjs +233 -0
- package/dist/renderer-D1T7A3NF.mjs.map +1 -0
- package/dist/renderer-D1gx_-hi.mjs +5 -0
- package/dist/renderer-D5MCGNAF.mjs +5 -0
- package/dist/{renderer-Db3JIF1K.mjs → renderer-D6YcQTLI.mjs} +3 -3
- package/dist/{renderer-Db3JIF1K.mjs.map → renderer-D6YcQTLI.mjs.map} +1 -1
- package/dist/{renderer-BNqwn0gZ.mjs → renderer-D8_UYdDb.mjs} +2 -2
- package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-D8_UYdDb.mjs.map} +1 -1
- package/dist/renderer-DD_MzvM-.mjs +5 -0
- package/dist/{renderer-BHskWZNG.mjs → renderer-DIqwz7dV.mjs} +2 -2
- package/dist/{renderer-57ATc_mQ.mjs → renderer-DJQD7tai.mjs} +2 -2
- package/dist/{renderer-57ATc_mQ.mjs.map → renderer-DJQD7tai.mjs.map} +1 -1
- package/dist/{renderer-CWBHVCvA.mjs → renderer-DKXK5hDm.mjs} +2 -2
- package/dist/{renderer-CWBHVCvA.mjs.map → renderer-DKXK5hDm.mjs.map} +1 -1
- package/dist/{renderer-p_C_T9Kn.mjs → renderer-DNYSf2Fl.mjs} +2 -2
- package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-DNYSf2Fl.mjs.map} +1 -1
- package/dist/{renderer-DXqIslFk.mjs → renderer-DNaHFctD.mjs} +2 -2
- package/dist/{renderer-DXqIslFk.mjs.map → renderer-DNaHFctD.mjs.map} +1 -1
- package/dist/renderer-DO5r7ZV-.mjs +658 -0
- package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
- package/dist/renderer-DP7YoZ0K.mjs +5 -0
- package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
- package/dist/renderer-DQtk282o.mjs.map +1 -0
- package/dist/{renderer-u8ynJtAC.mjs → renderer-DWcbrx2M.mjs} +2 -2
- package/dist/{renderer-u8ynJtAC.mjs.map → renderer-DWcbrx2M.mjs.map} +1 -1
- package/dist/renderer-DXiWvKij.mjs +5 -0
- package/dist/renderer-DZnUiiBp.mjs +222 -0
- package/dist/renderer-DZnUiiBp.mjs.map +1 -0
- package/dist/renderer-Dc6fW-o1.mjs +5 -0
- package/dist/renderer-DiurlsNT.mjs +5 -0
- package/dist/{renderer-BmGPTWwV.mjs → renderer-Dju3SEAJ.mjs} +3 -3
- package/dist/{renderer-BmGPTWwV.mjs.map → renderer-Dju3SEAJ.mjs.map} +1 -1
- package/dist/{renderer-BT-_EoXw.d.mts → renderer-DlESyfg7.d.mts} +2 -2
- package/dist/{renderer-BT-_EoXw.d.mts.map → renderer-DlESyfg7.d.mts.map} +1 -1
- package/dist/{renderer-aArb4RwJ.mjs → renderer-DpQaiH6C.mjs} +2 -2
- package/dist/{renderer-aArb4RwJ.mjs.map → renderer-DpQaiH6C.mjs.map} +1 -1
- package/dist/{renderer-CeyAgJnw.mjs → renderer-DuxzqfoE.mjs} +2 -2
- package/dist/renderer-DvCUdgVz.mjs +5 -0
- package/dist/{renderer-AF884a7T.mjs → renderer-Dvg5nbgU.mjs} +3 -3
- package/dist/{renderer-AF884a7T.mjs.map → renderer-Dvg5nbgU.mjs.map} +1 -1
- package/dist/{renderer-DvFaC_-7.mjs → renderer-Dvq11SEA.mjs} +2 -2
- package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dvq11SEA.mjs.map} +1 -1
- package/dist/renderer-DyPgVl1l.mjs +223 -0
- package/dist/renderer-DyPgVl1l.mjs.map +1 -0
- package/dist/{renderer-DEuIwr-t.mjs → renderer-DzOzVxNS.mjs} +2 -2
- package/dist/{renderer-DEuIwr-t.mjs.map → renderer-DzOzVxNS.mjs.map} +1 -1
- package/dist/renderer-EhCkD11e.mjs +208 -0
- package/dist/renderer-EhCkD11e.mjs.map +1 -0
- package/dist/renderer-IiwAh9-K.mjs +5 -0
- package/dist/{renderer-jqByPgkD.mjs → renderer-JiEpssIz.mjs} +2 -2
- package/dist/{renderer-jqByPgkD.mjs.map → renderer-JiEpssIz.mjs.map} +1 -1
- package/dist/renderer-JlGXqH0E.mjs +5 -0
- package/dist/{renderer-Beg7FLt2.mjs → renderer-OxafT7Xm.mjs} +75 -27
- package/dist/renderer-OxafT7Xm.mjs.map +1 -0
- package/dist/renderer-TZFKKgL1.mjs +5 -0
- package/dist/renderer-UT0CcmMZ.mjs +191 -0
- package/dist/renderer-UT0CcmMZ.mjs.map +1 -0
- package/dist/{renderer-YbaCzPcG.mjs → renderer-YyEBKPcE.mjs} +2 -2
- package/dist/{renderer-jYxN4mHn.mjs → renderer-_AuL8mAi.mjs} +3 -3
- package/dist/{renderer-jYxN4mHn.mjs.map → renderer-_AuL8mAi.mjs.map} +1 -1
- package/dist/{renderer-C6md3msE.mjs → renderer-aCDIEYb3.mjs} +2 -2
- package/dist/{renderer-C6md3msE.mjs.map → renderer-aCDIEYb3.mjs.map} +1 -1
- package/dist/renderer-aEecoNPX.mjs +5 -0
- package/dist/{renderer-BeIUgp1r.mjs → renderer-aN60v8jR.mjs} +2 -2
- package/dist/{renderer-BeIUgp1r.mjs.map → renderer-aN60v8jR.mjs.map} +1 -1
- package/dist/renderer-ewhliYYP.mjs +5 -0
- package/dist/renderer-hQc6GgTi.mjs +5 -0
- package/dist/renderer-iuX0RZIi.mjs +5 -0
- package/dist/renderer-j4vkTzHa.mjs +5 -0
- package/dist/{renderer-EemDpvv3.mjs → renderer-mpInX4Iy.mjs} +3 -3
- package/dist/{renderer-EemDpvv3.mjs.map → renderer-mpInX4Iy.mjs.map} +1 -1
- package/dist/renderer-msPjwx_9.mjs +5 -0
- package/dist/renderer-pI2ndu-b.mjs +5 -0
- package/dist/renderer-x1OGMhsC.mjs +5 -0
- package/dist/{renderer-DZXbgVMK.mjs → renderer-xezE7IZX.mjs} +3 -3
- package/dist/{renderer-DZXbgVMK.mjs.map → renderer-xezE7IZX.mjs.map} +1 -1
- package/dist/renderer-yGAk7J9P.mjs +222 -0
- package/dist/renderer-yGAk7J9P.mjs.map +1 -0
- package/dist/{renderer-Bvx56GR6.mjs → renderer-zQIB2VZZ.mjs} +2 -2
- package/dist/{renderer-Bvx56GR6.mjs.map → renderer-zQIB2VZZ.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-i6u_rhCX.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-i6u_rhCX.mjs.map} +1 -1
- package/dist/signals/index.d.mts +5 -5
- package/dist/signals/index.mjs +4 -4
- package/package.json +58 -55
- package/dist/dist-CT___nEU.mjs.map +0 -1
- package/dist/effects-C06-AOge.mjs.map +0 -1
- package/dist/index-B-oUlLoO.d.mts.map +0 -1
- package/dist/index-CwbszPDG.d.mts.map +0 -1
- package/dist/preview-engine/chunk-G4K6TLNA.mjs +0 -1
- package/dist/preview-engine/chunk-HVCAOHNI.mjs +0 -1
- package/dist/preview-engine/chunk-KBO6EX3M.mjs +0 -1448
- package/dist/preview-engine/chunk-N4LHIPHZ.mjs +0 -340
- package/dist/preview-engine/chunk-NECOKNHA.mjs +0 -174
- package/dist/preview-engine/renderers-T4JMJXWL.mjs +0 -1
- package/dist/preview-engine/renderers-VFV5QWO3.mjs +0 -1
- package/dist/preview-engine/renderers-VUL4HBX3.mjs +0 -228
- package/dist/program-DzknMiY0.mjs.map +0 -1
- package/dist/renderer--IDyGdqT.mjs +0 -5
- package/dist/renderer-17K4tjid.mjs +0 -5
- package/dist/renderer-1vhaKMeg.mjs.map +0 -1
- package/dist/renderer-Ab9Ttn_m.mjs +0 -5
- package/dist/renderer-B-roDBBo.mjs +0 -5
- package/dist/renderer-B03uwoUX.mjs +0 -5
- package/dist/renderer-B3BI_7YJ.mjs +0 -5
- package/dist/renderer-BGD4lQ74.mjs +0 -5
- package/dist/renderer-BHXhYfeC.mjs +0 -5
- package/dist/renderer-BRsTIMFa.mjs +0 -5
- package/dist/renderer-Beg7FLt2.mjs.map +0 -1
- package/dist/renderer-BjMTtYZw.mjs +0 -5
- package/dist/renderer-BoCh3Yts.mjs +0 -5
- package/dist/renderer-BqPbR8c4.mjs +0 -5
- package/dist/renderer-Bxa4SDm9.mjs +0 -3
- package/dist/renderer-C4Da2I1-.mjs +0 -5
- package/dist/renderer-C93X6dgl.mjs +0 -5
- package/dist/renderer-CE7fwGgw.mjs.map +0 -1
- package/dist/renderer-CMAwFfGx.mjs +0 -6
- package/dist/renderer-CRXeSuX2.mjs +0 -5
- package/dist/renderer-CSp6WYBN.mjs +0 -5
- package/dist/renderer-CUXX7HTL.mjs +0 -5
- package/dist/renderer-CUgThpka.mjs +0 -5
- package/dist/renderer-CeVtufiT.mjs +0 -5
- package/dist/renderer-CespkZUk.mjs +0 -5
- package/dist/renderer-D1l47xhL.mjs +0 -5
- package/dist/renderer-DDuG18J8.mjs +0 -5
- package/dist/renderer-DFhrFSMn.mjs +0 -5
- package/dist/renderer-DO48vQ7Y.mjs +0 -5
- package/dist/renderer-DTC39B_n.mjs +0 -5
- package/dist/renderer-DbyU3hNF.mjs +0 -5
- package/dist/renderer-DftVpmfu.mjs +0 -5
- package/dist/renderer-Dj5jm63K.mjs +0 -5
- package/dist/renderer-Dju57ZaF.mjs +0 -5
- package/dist/renderer-Dn8TQCw7.mjs +0 -5
- package/dist/renderer-ETF46K0D.mjs +0 -5
- package/dist/renderer-azYzWGC3.mjs +0 -5
- package/dist/renderer-dxNoRW59.mjs +0 -5
- package/dist/renderer-fdfelx_I.mjs +0 -5
- 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};
|