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