framefields 2.2.0 → 2.3.1
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-CS104aUj.mjs} +3 -3
- package/dist/{audio-DMUr01vS.mjs.map → audio-CS104aUj.mjs.map} +1 -1
- package/dist/{dist-CT___nEU.mjs → dist-BOdxAhOT.mjs} +7 -5
- package/dist/dist-BOdxAhOT.mjs.map +1 -0
- package/dist/{dist-cjxDXQdx.mjs → dist-jU289ehm.mjs} +209 -31
- package/dist/{dist-cjxDXQdx.mjs.map → dist-jU289ehm.mjs.map} +1 -1
- package/dist/effects/index.d.mts +5 -5
- package/dist/effects/index.mjs +36 -36
- package/dist/{effects-C06-AOge.mjs → effects-BzOlVD-w.mjs} +532 -4
- package/dist/effects-BzOlVD-w.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-BhlV_3Qt.mjs} +2 -2
- package/dist/{fonts-C0UuLQvr.mjs.map → fonts-BhlV_3Qt.mjs.map} +1 -1
- package/dist/{gpu-Du7GpVFW.mjs → gpu-BA1Wz_mS.mjs} +2 -2
- package/dist/{gpu-Du7GpVFW.mjs.map → gpu-BA1Wz_mS.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-BVyG76gO.mjs} +2 -2
- package/dist/{preview-M0TsUzC6.mjs.map → preview-BVyG76gO.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-ZTHWCQ2A.mjs → chunk-FNE22WGA.mjs} +1 -1
- package/dist/preview-engine/chunk-GCTVRM7J.mjs +1522 -0
- 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-3F5AIDEL.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-CCSfHMfh.mjs} +346 -13
- package/dist/program-CCSfHMfh.mjs.map +1 -0
- package/dist/renderer/index.d.mts +2 -2
- package/dist/renderer/index.mjs +2 -2
- package/dist/renderer-1Kv7oA86.mjs +5 -0
- package/dist/{renderer-1vhaKMeg.mjs → renderer-1uLtqb74.mjs} +141 -56
- package/dist/renderer-1uLtqb74.mjs.map +1 -0
- package/dist/{renderer-BerD3T-X.mjs → renderer-4VpA7LfU.mjs} +2 -2
- package/dist/{renderer-BerD3T-X.mjs.map → renderer-4VpA7LfU.mjs.map} +1 -1
- package/dist/{renderer-BNqwn0gZ.mjs → renderer-8BM6sJUR.mjs} +2 -2
- package/dist/{renderer-BNqwn0gZ.mjs.map → renderer-8BM6sJUR.mjs.map} +1 -1
- package/dist/renderer-AVHJ33nv.mjs +5 -0
- package/dist/{renderer-0gY4IQhM.mjs → renderer-AtLlZMQ9.mjs} +2 -2
- package/dist/{renderer-0gY4IQhM.mjs.map → renderer-AtLlZMQ9.mjs.map} +1 -1
- package/dist/renderer-B8dJGf8R.mjs +6 -0
- package/dist/{renderer-57ATc_mQ.mjs → renderer-B93zd3sx.mjs} +2 -2
- package/dist/{renderer-57ATc_mQ.mjs.map → renderer-B93zd3sx.mjs.map} +1 -1
- package/dist/renderer-BARst3ZD.mjs +3 -0
- package/dist/{renderer-CJB9nU1x.mjs → renderer-BD7Lmb8h.mjs} +3 -3
- package/dist/{renderer-CJB9nU1x.mjs.map → renderer-BD7Lmb8h.mjs.map} +1 -1
- package/dist/renderer-BEA6nknY.mjs +5 -0
- package/dist/renderer-BFRI5alp.mjs +222 -0
- package/dist/renderer-BFRI5alp.mjs.map +1 -0
- package/dist/{renderer-BiwIh_w4.mjs → renderer-BG5sbTXt.mjs} +3 -3
- package/dist/{renderer-BiwIh_w4.mjs.map → renderer-BG5sbTXt.mjs.map} +1 -1
- package/dist/{renderer-DtgMsjyL.mjs → renderer-BI4OMlEx.mjs} +2 -2
- package/dist/{renderer-DtgMsjyL.mjs.map → renderer-BI4OMlEx.mjs.map} +1 -1
- package/dist/renderer-BOfi06L2.mjs +5 -0
- package/dist/renderer-BOhvtAGL.mjs +5 -0
- package/dist/renderer-BQT3GI9g.mjs +5 -0
- package/dist/{renderer-DJfFc-XW.mjs → renderer-BRwp1kV-.mjs} +3 -3
- package/dist/{renderer-DJfFc-XW.mjs.map → renderer-BRwp1kV-.mjs.map} +1 -1
- package/dist/{renderer-u8ynJtAC.mjs → renderer-BVUTOGHs.mjs} +2 -2
- package/dist/{renderer-u8ynJtAC.mjs.map → renderer-BVUTOGHs.mjs.map} +1 -1
- package/dist/renderer-BXmStgeT.mjs +5 -0
- package/dist/renderer-Bajxo7Nt.mjs +5 -0
- package/dist/{renderer-BHskWZNG.mjs → renderer-Bel1UHA5.mjs} +2 -2
- package/dist/{renderer-AF884a7T.mjs → renderer-BetA_iVd.mjs} +3 -3
- package/dist/{renderer-AF884a7T.mjs.map → renderer-BetA_iVd.mjs.map} +1 -1
- package/dist/{renderer-DpW_LxLO.mjs → renderer-BmDpyiII.mjs} +3 -3
- package/dist/{renderer-DpW_LxLO.mjs.map → renderer-BmDpyiII.mjs.map} +1 -1
- package/dist/{renderer-BteUC_7n.mjs → renderer-BonWt8jF.mjs} +3 -3
- package/dist/{renderer-BteUC_7n.mjs.map → renderer-BonWt8jF.mjs.map} +1 -1
- package/dist/{renderer-BC8XOVl5.mjs → renderer-BpEsZG3t.mjs} +3 -3
- package/dist/{renderer-BC8XOVl5.mjs.map → renderer-BpEsZG3t.mjs.map} +1 -1
- package/dist/{renderer-aArb4RwJ.mjs → renderer-BvBIHi6N.mjs} +2 -2
- package/dist/{renderer-aArb4RwJ.mjs.map → renderer-BvBIHi6N.mjs.map} +1 -1
- package/dist/{renderer-Db3JIF1K.mjs → renderer-BvvuGfZk.mjs} +3 -3
- package/dist/{renderer-Db3JIF1K.mjs.map → renderer-BvvuGfZk.mjs.map} +1 -1
- package/dist/renderer-BzRR0KMm.mjs +5 -0
- package/dist/{renderer-DEuIwr-t.mjs → renderer-Bzl0s07U.mjs} +2 -2
- package/dist/{renderer-DEuIwr-t.mjs.map → renderer-Bzl0s07U.mjs.map} +1 -1
- package/dist/renderer-C39GD6jP.mjs +331 -0
- package/dist/renderer-C39GD6jP.mjs.map +1 -0
- package/dist/renderer-C3Gjy2iE.mjs +5 -0
- package/dist/{renderer-Br6KyRO_.mjs → renderer-C3lPwajT.mjs} +3 -3
- package/dist/{renderer-Br6KyRO_.mjs.map → renderer-C3lPwajT.mjs.map} +1 -1
- package/dist/renderer-C5hQgkz-.mjs +5 -0
- package/dist/{renderer-CebB0v1y.mjs → renderer-C6cF5seJ.mjs} +2 -2
- package/dist/{renderer-CebB0v1y.mjs.map → renderer-C6cF5seJ.mjs.map} +1 -1
- package/dist/renderer-C8GZ0pCV.mjs +191 -0
- package/dist/renderer-C8GZ0pCV.mjs.map +1 -0
- package/dist/{renderer-CuVPo-wP.mjs → renderer-CFe9pZFN.mjs} +2 -2
- package/dist/{renderer-CuVPo-wP.mjs.map → renderer-CFe9pZFN.mjs.map} +1 -1
- package/dist/renderer-CLF-MiOA.mjs +5 -0
- package/dist/renderer-CLa43fCd.mjs +5 -0
- package/dist/{renderer-Bvx56GR6.mjs → renderer-CLdwOhST.mjs} +2 -2
- package/dist/{renderer-Bvx56GR6.mjs.map → renderer-CLdwOhST.mjs.map} +1 -1
- package/dist/renderer-CMK1d6w_.mjs +5 -0
- package/dist/{renderer-CursFKUf.mjs → renderer-CMdtUn5o.mjs} +2 -2
- package/dist/{renderer-CursFKUf.mjs.map → renderer-CMdtUn5o.mjs.map} +1 -1
- package/dist/{renderer-DXqIslFk.mjs → renderer-CNYfB5cC.mjs} +2 -2
- package/dist/{renderer-DXqIslFk.mjs.map → renderer-CNYfB5cC.mjs.map} +1 -1
- package/dist/renderer-CPEQOe3u.mjs +5 -0
- package/dist/{renderer-BbdZ0YHR.mjs → renderer-CWx3Kg79.mjs} +3 -3
- package/dist/{renderer-BbdZ0YHR.mjs.map → renderer-CWx3Kg79.mjs.map} +1 -1
- package/dist/{renderer-CWBHVCvA.mjs → renderer-CdOy3EBJ.mjs} +2 -2
- package/dist/{renderer-CWBHVCvA.mjs.map → renderer-CdOy3EBJ.mjs.map} +1 -1
- package/dist/{renderer-DupsdRIw.mjs → renderer-Celrh689.mjs} +3 -3
- package/dist/{renderer-DupsdRIw.mjs.map → renderer-Celrh689.mjs.map} +1 -1
- package/dist/renderer-CemfjOM9.mjs +5 -0
- package/dist/{renderer-jYxN4mHn.mjs → renderer-ChloaI6P.mjs} +3 -3
- package/dist/{renderer-jYxN4mHn.mjs.map → renderer-ChloaI6P.mjs.map} +1 -1
- package/dist/{renderer-DqdhsSwS.mjs → renderer-CiMpdh0s.mjs} +2 -2
- package/dist/{renderer-DqdhsSwS.mjs.map → renderer-CiMpdh0s.mjs.map} +1 -1
- package/dist/renderer-CkcrScs9.mjs +5 -0
- package/dist/{renderer-CMT4QcpV.mjs → renderer-Cn6VlWHZ.mjs} +3 -3
- package/dist/{renderer-CMT4QcpV.mjs.map → renderer-Cn6VlWHZ.mjs.map} +1 -1
- package/dist/renderer-CqewgazK.mjs +224 -0
- package/dist/renderer-CqewgazK.mjs.map +1 -0
- package/dist/{renderer-C6md3msE.mjs → renderer-Cu5k5D9N.mjs} +2 -2
- package/dist/{renderer-C6md3msE.mjs.map → renderer-Cu5k5D9N.mjs.map} +1 -1
- package/dist/{renderer-id8TbKBY.mjs → renderer-CuphUktB.mjs} +2 -2
- package/dist/{renderer-id8TbKBY.mjs.map → renderer-CuphUktB.mjs.map} +1 -1
- package/dist/renderer-CwrLihY6.mjs +5 -0
- package/dist/{renderer-BzDjy1_x.mjs → renderer-D1Jt-c3F.mjs} +2 -2
- package/dist/{renderer-BzDjy1_x.mjs.map → renderer-D1Jt-c3F.mjs.map} +1 -1
- package/dist/{renderer-Beg7FLt2.mjs → renderer-D1wd0FhZ.mjs} +75 -27
- package/dist/renderer-D1wd0FhZ.mjs.map +1 -0
- package/dist/{renderer-jqByPgkD.mjs → renderer-D26S5hUh.mjs} +2 -2
- package/dist/{renderer-jqByPgkD.mjs.map → renderer-D26S5hUh.mjs.map} +1 -1
- package/dist/renderer-D4S6i2MC.mjs +5 -0
- package/dist/{renderer-BmGPTWwV.mjs → renderer-D7ss6fLB.mjs} +3 -3
- package/dist/{renderer-BmGPTWwV.mjs.map → renderer-D7ss6fLB.mjs.map} +1 -1
- package/dist/renderer-DB8F0XoP.mjs +5 -0
- package/dist/{renderer-PKQNH21k.mjs → renderer-DCGLXnYW.mjs} +2 -2
- package/dist/{renderer-CrABA3lB.mjs → renderer-DCYabwlC.mjs} +2 -2
- package/dist/{renderer-CrABA3lB.mjs.map → renderer-DCYabwlC.mjs.map} +1 -1
- package/dist/renderer-DGpVLJOn.mjs +5 -0
- package/dist/renderer-DGxibeSa.mjs +5 -0
- package/dist/renderer-DJQm3bAW.mjs +5 -0
- package/dist/{renderer-DD8napek.mjs → renderer-DMZ5aLU1.mjs} +2 -2
- package/dist/{renderer-DD8napek.mjs.map → renderer-DMZ5aLU1.mjs.map} +1 -1
- package/dist/renderer-DMftVSfX.mjs +5 -0
- package/dist/renderer-DNpovOd8.mjs +5 -0
- package/dist/renderer-DO5r7ZV-.mjs +658 -0
- package/dist/renderer-DO5r7ZV-.mjs.map +1 -0
- package/dist/{renderer-DZXbgVMK.mjs → renderer-DOWekunR.mjs} +3 -3
- package/dist/{renderer-DZXbgVMK.mjs.map → renderer-DOWekunR.mjs.map} +1 -1
- package/dist/{renderer-Cce2fgpX.mjs → renderer-DPWeKe_x.mjs} +3 -3
- package/dist/{renderer-Cce2fgpX.mjs.map → renderer-DPWeKe_x.mjs.map} +1 -1
- package/dist/{renderer-CE7fwGgw.mjs → renderer-DQtk282o.mjs} +29 -8
- package/dist/renderer-DQtk282o.mjs.map +1 -0
- package/dist/renderer-DSHlvKQk.mjs +5 -0
- package/dist/renderer-DUBb7D17.mjs +219 -0
- package/dist/renderer-DUBb7D17.mjs.map +1 -0
- package/dist/renderer-DYtrdR2p.mjs +5 -0
- package/dist/{renderer-Bn2eQE-t.mjs → renderer-DaCsT-XU.mjs} +3 -3
- package/dist/{renderer-Bn2eQE-t.mjs.map → renderer-DaCsT-XU.mjs.map} +1 -1
- package/dist/{renderer-D1Cm21eq.mjs → renderer-DcAfp1Er.mjs} +2 -2
- package/dist/{renderer-D1Cm21eq.mjs.map → renderer-DcAfp1Er.mjs.map} +1 -1
- package/dist/{renderer-C8uKdelk.mjs → renderer-DdlaBsk_.mjs} +2 -2
- package/dist/{renderer-C8uKdelk.mjs.map → renderer-DdlaBsk_.mjs.map} +1 -1
- package/dist/renderer-DerDxKK3.mjs +220 -0
- package/dist/renderer-DerDxKK3.mjs.map +1 -0
- package/dist/{renderer-CeyAgJnw.mjs → renderer-DfkWYUTX.mjs} +2 -2
- package/dist/{renderer-DHGTzype.mjs → renderer-Dh-OF6aH.mjs} +2 -2
- package/dist/{renderer-DHGTzype.mjs.map → renderer-Dh-OF6aH.mjs.map} +1 -1
- package/dist/renderer-Dk-THZHp.mjs +222 -0
- package/dist/renderer-Dk-THZHp.mjs.map +1 -0
- 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-DpWRj6zF.mjs +203 -0
- package/dist/renderer-DpWRj6zF.mjs.map +1 -0
- package/dist/renderer-DpwlN4LH.mjs +233 -0
- package/dist/renderer-DpwlN4LH.mjs.map +1 -0
- package/dist/{renderer-DvFaC_-7.mjs → renderer-Dq4aO7az.mjs} +2 -2
- package/dist/{renderer-DvFaC_-7.mjs.map → renderer-Dq4aO7az.mjs.map} +1 -1
- package/dist/renderer-DuSImLUz.mjs +5 -0
- package/dist/{renderer-BeIUgp1r.mjs → renderer-DukD7S3w.mjs} +2 -2
- package/dist/{renderer-BeIUgp1r.mjs.map → renderer-DukD7S3w.mjs.map} +1 -1
- package/dist/{renderer-EemDpvv3.mjs → renderer-FXUCKps6.mjs} +3 -3
- package/dist/{renderer-EemDpvv3.mjs.map → renderer-FXUCKps6.mjs.map} +1 -1
- package/dist/renderer-FbyMYKXe.mjs +5 -0
- package/dist/renderer-HMl2V4iM.mjs +541 -0
- package/dist/renderer-HMl2V4iM.mjs.map +1 -0
- package/dist/renderer-LM_XIKl1.mjs +203 -0
- package/dist/renderer-LM_XIKl1.mjs.map +1 -0
- package/dist/renderer-NMFv7Auz.mjs +5 -0
- package/dist/{renderer-YbaCzPcG.mjs → renderer-O1b-oYJE.mjs} +2 -2
- package/dist/renderer-P3vpdUnb.mjs +5 -0
- package/dist/renderer-PknbdJyL.mjs +208 -0
- package/dist/renderer-PknbdJyL.mjs.map +1 -0
- package/dist/renderer-QTOm26Lg.mjs +5 -0
- package/dist/renderer-YJ3Yukou.mjs +215 -0
- package/dist/renderer-YJ3Yukou.mjs.map +1 -0
- package/dist/{renderer-p_C_T9Kn.mjs → renderer-YdLL2o6d.mjs} +2 -2
- package/dist/{renderer-p_C_T9Kn.mjs.map → renderer-YdLL2o6d.mjs.map} +1 -1
- package/dist/renderer-ahzhMa5q.mjs +5 -0
- package/dist/{renderer-D-vRKssW.mjs → renderer-c-bwxMde.mjs} +2 -2
- package/dist/{renderer-D-vRKssW.mjs.map → renderer-c-bwxMde.mjs.map} +1 -1
- package/dist/renderer-dThfTNge.mjs +5 -0
- package/dist/renderer-dUkOBfGB.mjs +308 -0
- package/dist/renderer-dUkOBfGB.mjs.map +1 -0
- package/dist/renderer-dgAS_k7B.mjs +5 -0
- package/dist/renderer-g-ui08Lh.mjs +204 -0
- package/dist/renderer-g-ui08Lh.mjs.map +1 -0
- package/dist/renderer-kSs8VtY7.mjs +223 -0
- package/dist/renderer-kSs8VtY7.mjs.map +1 -0
- package/dist/{renderer-KnCcN_Nz.mjs → renderer-pPiQwFYh.mjs} +2 -2
- package/dist/{renderer-KnCcN_Nz.mjs.map → renderer-pPiQwFYh.mjs.map} +1 -1
- package/dist/{renderer-D8thCpS7.mjs → renderer-wL-ly4fT.mjs} +3 -3
- package/dist/{renderer-D8thCpS7.mjs.map → renderer-wL-ly4fT.mjs.map} +1 -1
- package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs → renderers-CP8CFWDs-CVHwMTiz.mjs} +2 -2
- package/dist/{renderers-CP8CFWDs-BA-4l6By.mjs.map → renderers-CP8CFWDs-CVHwMTiz.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};
|