@uptimizr/dashboard 0.4.5 → 0.4.7
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/out/404.html +1 -1
- package/out/__next.__PAGE__.txt +19 -5
- package/out/__next._full.txt +11 -11
- package/out/__next._tree.txt +2 -2
- package/out/_next/static/chunks/{3kalvwsf11-ss.js → 0-_j1khfoib6l.js} +119 -115
- package/out/_next/static/chunks/{0-tzsd_n-ywom.js → 005bbq_px7lke.js} +2 -2
- package/out/_next/static/chunks/00fbhtmui-yxg.js +1 -0
- package/out/_next/static/chunks/017pn-pen381_.js +1 -0
- package/out/_next/static/chunks/01vov6inx1zzt.js +1 -0
- package/out/_next/static/chunks/{3d76e_yd8l_0x.js → 02qk_wmkf9at-.js} +211 -211
- package/out/_next/static/chunks/03bd5plut08tg.js +1 -0
- package/out/_next/static/chunks/03dwfqmo73w_z.js +1 -0
- package/out/_next/static/chunks/03sn4419dam-h.js +5 -0
- package/out/_next/static/chunks/05ere0-228syf.js +1 -0
- package/out/_next/static/chunks/{2g_1ov-0j2kwd.js → 05h8u5lrypn5m.js} +1 -1
- package/out/_next/static/chunks/05s0t-besbvu1.css +3 -0
- package/out/_next/static/chunks/{3go-mst7n3udd.js → 05v-nubi896jg.js} +1 -1
- package/out/_next/static/chunks/05z79zh625ezu.js +1 -0
- package/out/_next/static/chunks/{1t2exh89lnazc.js → 060iult6f68_e.js} +504 -571
- package/out/_next/static/chunks/08lvtnv7b1cxp.js +1 -0
- package/out/_next/static/chunks/0_v2luu_qmeid.js +1 -0
- package/out/_next/static/chunks/0ai0zgbgjqb92.js +1 -0
- package/out/_next/static/chunks/0boov9mwycanf.js +1 -0
- package/out/_next/static/chunks/{0av6n_6q6kzo3.js → 0btmk0wmekl02.js} +2 -2
- package/out/_next/static/chunks/0d8x8m2x6ca_m.js +1 -0
- package/out/_next/static/chunks/0dmrdrwtd093b.js +1 -0
- package/out/_next/static/chunks/0e1jfrmioeuws.js +1 -0
- package/out/_next/static/chunks/0e7nlxmneb2j_.js +1 -0
- package/out/_next/static/chunks/0es97pusfxupl.js +1 -0
- package/out/_next/static/chunks/{05uqfgf-hh-p5.js → 0fd-0i1yt23kz.js} +1 -1
- package/out/_next/static/chunks/0fxdyvb1w23d1.js +1 -0
- package/out/_next/static/chunks/0fxhc24djjcgq.js +1 -0
- package/out/_next/static/chunks/0gf-ztg86zd80.js +1 -0
- package/out/_next/static/chunks/{380ivzcfb4o_3.js → 0grasqqf5dw7r.js} +2 -2
- package/out/_next/static/chunks/{0okbyggxe6mx5.js → 0hajwk2yd-rwr.js} +1 -1
- package/out/_next/static/chunks/0hk1wg7h4araz.js +1 -0
- package/out/_next/static/chunks/{1vmpltnr0cyos.js → 0j74ipw4fps-n.js} +1 -1
- package/out/_next/static/chunks/{03zip1uidm6x9.js → 0kj-vckdn7t5p.js} +1 -1
- package/out/_next/static/chunks/0lbs5xdyjuzuo.js +1 -0
- package/out/_next/static/chunks/0lep3_bqwfuin.js +1 -0
- package/out/_next/static/chunks/0mp0jh1gj7290.js +1 -0
- package/out/_next/static/chunks/0ngpoj2g5i4kz.js +1 -0
- package/out/_next/static/chunks/0nhljhguceh66.js +1 -0
- package/out/_next/static/chunks/0p6z73afb9dj2.js +1 -0
- package/out/_next/static/chunks/0p9zfmidzqkps.js +1 -0
- package/out/_next/static/chunks/0q75860p8u_ii.js +1 -0
- package/out/_next/static/chunks/{0-0hui1_v3h8b.js → 0rracz73p38mo.js} +26 -23
- package/out/_next/static/chunks/{3z4suna4kq4j5.js → 0sw-8gxbg4x0l.js} +568 -569
- package/out/_next/static/chunks/0sx-6rf3eteqn.js +1 -0
- package/out/_next/static/chunks/0thw099xk3_0p.js +3 -0
- package/out/_next/static/chunks/0u85f0dhb4i8e.js +1 -0
- package/out/_next/static/chunks/0uk7kigzm4vi2.js +31 -0
- package/out/_next/static/chunks/0ulufxnsrou61.js +1 -0
- package/out/_next/static/chunks/0xa9dyg6ezzyd.js +2 -0
- package/out/_next/static/chunks/0xvrfvur0p534.js +1 -0
- package/out/_next/static/chunks/{35aagg46wp139.js → 0ybs1u66q26su.js} +1 -1
- package/out/_next/static/chunks/0ydfhk-p6zvm0.js +1 -0
- package/out/_next/static/chunks/{29gv2swsp7tzu.js → 0z004fn14pbcu.js} +1 -1
- package/out/_next/static/chunks/{2z9mdtudj8crz.js → 0z9erbl3llr_b.js} +226 -224
- package/out/_next/static/chunks/0zcsxvcvog9ue.js +1 -0
- package/out/_next/static/chunks/0zqgq0lwtz9tn.js +1 -0
- package/out/_next/static/chunks/1-ogak5u00kwa.js +1 -0
- package/out/_next/static/chunks/{1ng-fqh2_n984.js → 10_5p5-xf2aoo.js} +1 -1
- package/out/_next/static/chunks/118qlrzdwpfmo.js +1 -0
- package/out/_next/static/chunks/11km5p4gd0ut4.js +1 -0
- package/out/_next/static/chunks/120rl4l29q9xs.js +1 -0
- package/out/_next/static/chunks/{1ho02fc091nj2.js → 129m5i93ltoym.js} +1 -1
- package/out/_next/static/chunks/12n73o884lyyl.js +1 -0
- package/out/_next/static/chunks/{3n-7bcmfbh299.js → 13zcn4lv0qj76.js} +11 -11
- package/out/_next/static/chunks/15jlgfcaeaki9.js +1 -0
- package/out/_next/static/chunks/{1ux1rpe-n1mai.js → 15o4_2t-l3rj5.js} +1 -1
- package/out/_next/static/chunks/{00o9hr_3hd0r8.js → 175st2ogkg_1o.js} +1 -1
- package/out/_next/static/chunks/19rsodtu91ja_.js +1 -0
- package/out/_next/static/chunks/1a2ouhup611bz.js +1 -0
- package/out/_next/static/chunks/{1solqr18og2ot.js → 1by60_b14x-3o.js} +1 -1
- package/out/_next/static/chunks/1cyq7i39885sl.js +1 -0
- package/out/_next/static/chunks/1d9it6yocgt54.js +1 -0
- package/out/_next/static/chunks/1dp1s1t-y7gal.js +1 -0
- package/out/_next/static/chunks/1dr7gh6xgypl8.js +1 -0
- package/out/_next/static/chunks/{32vaw89wdwv5_.js → 1dt30s_sp8415.js} +1 -1
- package/out/_next/static/chunks/{1t7nl8rx7mabd.js → 1e8_jl2cxd3rp.js} +576 -576
- package/out/_next/static/chunks/1f1rek_fxk3of.js +1 -0
- package/out/_next/static/chunks/1f2mna0k5efeq.js +1 -0
- package/out/_next/static/chunks/1gfz3sxwkkg3d.js +1 -0
- package/out/_next/static/chunks/1gr35qeguuws0.js +1 -0
- package/out/_next/static/chunks/{0g2wngc6oe7fd.js → 1gttu-n9am66k.js} +255 -253
- package/out/_next/static/chunks/1imi0xwi9hd99.js +1 -0
- package/out/_next/static/chunks/1ka5v5zu0cstt.js +1 -0
- package/out/_next/static/chunks/{17aahvhpls1l7.js → 1l_3oidssbhns.js} +298 -231
- package/out/_next/static/chunks/1m9zc5gm-327d.js +112 -0
- package/out/_next/static/chunks/1n9nhz-6azcp3.js +3 -0
- package/out/_next/static/chunks/1ncqwe81t_9_x.js +1 -0
- package/out/_next/static/chunks/1nix_lulkpklo.js +1 -0
- package/out/_next/static/chunks/{141tngxsk32hq.js → 1ntqovuz2c217.js} +1 -1
- package/out/_next/static/chunks/1pgs-98tfkq9_.js +1 -0
- package/out/_next/static/chunks/1q2z0aeopo8t8.js +1 -0
- package/out/_next/static/chunks/{2zpn7010iqgsy.js → 1q4lkgxfnqnew.js} +1 -1
- package/out/_next/static/chunks/{2khh_pmm224k5.js → 1qg1l7t00nyib.js} +97 -300
- package/out/_next/static/chunks/{1qxhgauuomthl.js → 1rcdimhu0qhlu.js} +407 -407
- package/out/_next/static/chunks/1rlfg62jxqj3z.js +1 -0
- package/out/_next/static/chunks/1ses023uud001.js +1 -0
- package/out/_next/static/chunks/1t5oynmttpfsw.js +1 -0
- package/out/_next/static/chunks/{25gf6xn9u1c57.js → 1t9i20i5-f8ze.js} +1 -1
- package/out/_next/static/chunks/{2h5nvlgky7fpa.js → 1tgj55b305g4h.js} +1 -1
- package/out/_next/static/chunks/{255knovck7pv2.js → 1u8snlm6a7uhi.js} +4 -4
- package/out/_next/static/chunks/{04_3ri5emyfcu.js → 1ug4k-1zhr63a.js} +1 -1
- package/out/_next/static/chunks/{3-_08i4_7yhno.js → 1uh9zgsy69g92.js} +1 -1
- package/out/_next/static/chunks/1vrpzlif-z_p0.js +1 -0
- package/out/_next/static/chunks/1vurgl6oz2qey.js +17 -0
- package/out/_next/static/chunks/1w-qc09n9ijtq.js +1 -0
- package/out/_next/static/chunks/1ycqxcht6x54p.js +1 -0
- package/out/_next/static/chunks/{2zyjw8g4tiu51.js → 1zj4307ugq0qz.js} +1 -1
- package/out/_next/static/chunks/{425epvuw3yy-n.js → 1zkd8v-qka--j.js} +169 -174
- package/out/_next/static/chunks/1zm52cjrfrq7c.js +1 -0
- package/out/_next/static/chunks/{267q_eg-c6f6m.js → 1zm6eo861i3c8.js} +1 -1
- package/out/_next/static/chunks/{1e_-_7biavwmb.js → 1zp9363yfhpom.js} +1 -1
- package/out/_next/static/chunks/1zt1xxovnjhkm.js +1 -0
- package/out/_next/static/chunks/2-3hk_db5fpok.js +1 -0
- package/out/_next/static/chunks/2-bv9a_0zgw1f.js +1 -0
- package/out/_next/static/chunks/209sxygecny37.js +1 -0
- package/out/_next/static/chunks/{1ccn725by19i1.js → 216uiih3_vdfd.js} +1 -1
- package/out/_next/static/chunks/21kfpd_bityxt.js +1 -0
- package/out/_next/static/chunks/22yqh0zlo_vwr.js +1 -0
- package/out/_next/static/chunks/24ecas0m9tao7.js +3 -0
- package/out/_next/static/chunks/24pq9210rng3f.js +1 -0
- package/out/_next/static/chunks/{0zf26k6juhlzo.js → 267prao6fyt22.js} +23 -20
- package/out/_next/static/chunks/26skkagvj1z96.js +1 -0
- package/out/_next/static/chunks/26y9sv8_-ykxf.js +1 -0
- package/out/_next/static/chunks/2701xfv_07wz_.js +1 -0
- package/out/_next/static/chunks/{1x99m91nt1m3b.js → 271333m8y3k0e.js} +1 -1
- package/out/_next/static/chunks/29rkmguzky-bp.js +1 -0
- package/out/_next/static/chunks/{077eo-0dhbxz-.js → 2a07so920b6aa.js} +1 -1
- package/out/_next/static/chunks/2a2oy8ryz2tsk.js +1 -0
- package/out/_next/static/chunks/2ao-3jzz7yw3p.js +532 -0
- package/out/_next/static/chunks/2apihn9ra2ufp.js +1 -0
- package/out/_next/static/chunks/2apnpj0-fs9ks.js +1 -0
- package/out/_next/static/chunks/2b481pitl4k85.js +1 -0
- package/out/_next/static/chunks/2bettxaqt3d2p.js +1 -0
- package/out/_next/static/chunks/{1fyh50hjt7hi_.js → 2c721vfva711t.js} +1 -1
- package/out/_next/static/chunks/{442e2l3jzxd-_.js → 2d2kl_m64j9cb.js} +1 -1
- package/out/_next/static/chunks/2droqjmvmgj13.js +1 -0
- package/out/_next/static/chunks/2dxbvwbbgpzoq.js +1 -0
- package/out/_next/static/chunks/2eqbsut829r5l.js +1 -0
- package/out/_next/static/chunks/2f3_mzxjh3gso.js +1 -0
- package/out/_next/static/chunks/2fsde0jwi5qtt.js +1 -0
- package/out/_next/static/chunks/2h249uvhh2sij.js +114 -0
- package/out/_next/static/chunks/{1gvdmbr65lpud.js → 2izok2otbk8-2.js} +505 -505
- package/out/_next/static/chunks/{0yvevihll7sz-.js → 2j120dkh7q3uf.js} +1 -1
- package/out/_next/static/chunks/2j2ynchpqh34-.js +1 -0
- package/out/_next/static/chunks/2kj6pzs_wap1v.js +1 -0
- package/out/_next/static/chunks/{2-p206i_ihx09.js → 2kok6zedeeltw.js} +1 -1
- package/out/_next/static/chunks/2lnj9jruy4nrv.js +1 -0
- package/out/_next/static/chunks/{41yy4p3-rtyz1.js → 2lsvk7xcfkarc.js} +1 -1
- package/out/_next/static/chunks/2n-pveub8b_5t.js +1 -0
- package/out/_next/static/chunks/{00xc-0pj7on2s.js → 2n3xu_wbvtj7h.js} +29 -29
- package/out/_next/static/chunks/{1oljzgz5jistn.js → 2of8q0kaeqpf0.js} +1 -1
- package/out/_next/static/chunks/2ofwtw6p08sfz.js +1 -0
- package/out/_next/static/chunks/2phl5ta4iim7l.js +12 -0
- package/out/_next/static/chunks/2q6l-xdqzgmpf.js +1 -0
- package/out/_next/static/chunks/2q8yg63br2jc9.js +1 -0
- package/out/_next/static/chunks/2r5qgieqldcd9.js +1 -0
- package/out/_next/static/chunks/2r7y401cvjc1s.js +1 -0
- package/out/_next/static/chunks/{22ja7c3gk0_ko.js → 2r96kyeehsji9.js} +1 -1
- package/out/_next/static/chunks/{3gyyjsot8mdav.js → 2rmc6ru7mc-kg.js} +1 -1
- package/out/_next/static/chunks/{1ephzzweysylq.js → 2s6kpclh6ie7o.js} +901 -973
- package/out/_next/static/chunks/{0vso09vdz38sr.js → 2sys9nj8lo3uk.js} +1 -1
- package/out/_next/static/chunks/{0w-hm7g7trtjg.js → 2tc3e-iqv71y_.js} +1 -1
- package/out/_next/static/chunks/2uo6vm7mfgrbf.js +1 -0
- package/out/_next/static/chunks/2urx6fow8c8c9.js +505 -0
- package/out/_next/static/chunks/2w2k1gveljyb7.js +1 -0
- package/out/_next/static/chunks/{22rl_arnzs-ve.js → 2w99knknr5i8c.js} +1 -1
- package/out/_next/static/chunks/2w_ptlw-ad8-9.js +4 -0
- package/out/_next/static/chunks/2ws1s9d52ayv8.js +1 -0
- package/out/_next/static/chunks/2x7enks3ydgai.js +1 -0
- package/out/_next/static/chunks/{2e46-2ubc90do.js → 2y8i7_nxm4r05.js} +5 -5
- package/out/_next/static/chunks/2ydub0t01728d.js +1 -0
- package/out/_next/static/chunks/{309f81l5ucsb_.js → 2z_iab7ozohhq.js} +60 -60
- package/out/_next/static/chunks/3-m_vzabs1uez.js +1 -0
- package/out/_next/static/chunks/{0t89-lfct-7m6.js → 302qk2fjdrthp.js} +5 -5
- package/out/_next/static/chunks/30bhz7czzs4mf.js +1 -0
- package/out/_next/static/chunks/{0tn-9w46cwydp.js → 30n4y_uu8chbh.js} +515 -514
- package/out/_next/static/chunks/{2-hdejef-mpka.js → 32_c4mbb6j1l6.js} +372 -169
- package/out/_next/static/chunks/33hp-khdfohdq.js +1 -0
- package/out/_next/static/chunks/{28ndw4nsw2t_4.js → 33i36o_l69sm5.js} +1 -1
- package/out/_next/static/chunks/3527r3jo5fj3i.js +1 -0
- package/out/_next/static/chunks/355dg8yaa94hr.js +1 -0
- package/out/_next/static/chunks/{11p92pnn5el0v.js → 35ntbr_c-yx44.js} +1 -1
- package/out/_next/static/chunks/{2rjfrjhp4kjev.js → 35sne1llxnc-m.js} +57 -57
- package/out/_next/static/chunks/36enkx1skkv2-.js +4 -0
- package/out/_next/static/chunks/{3-x7522okdy-7.js → 3772oce1n3t_g.js} +1 -1
- package/out/_next/static/chunks/{1rb8wewjbdisv.js → 37cnbm5ft1mqf.js} +1 -1
- package/out/_next/static/chunks/38xdo3cifphut.js +1 -0
- package/out/_next/static/chunks/{1tt1bbry-4f-6.js → 3_dgblylldcgb.js} +1 -1
- package/out/_next/static/chunks/3beawo-qwuk8k.js +1 -0
- package/out/_next/static/chunks/3cj_6sl9kr3e9.js +1 -0
- package/out/_next/static/chunks/3d-i_skta_wes.js +1 -0
- package/out/_next/static/chunks/3df_l2we755bb.js +1 -0
- package/out/_next/static/chunks/{43hwl25uke0l_.js → 3eve5y7fpzx2h.js} +1 -1
- package/out/_next/static/chunks/3ewgyb4y19w-3.js +1 -0
- package/out/_next/static/chunks/3f3789eh18_oy.js +1 -0
- package/out/_next/static/chunks/{1n_gxvu31aofy.js → 3f8qelpscqfym.js} +2 -2
- package/out/_next/static/chunks/3g3-e9m1en45q.js +1 -0
- package/out/_next/static/chunks/{0uxdbfa8gv6tk.js → 3h6akt2uu05ku.js} +29 -29
- package/out/_next/static/chunks/{3w4qettzp7khe.js → 3huu0tqmxwowu.js} +523 -522
- package/out/_next/static/chunks/3i239y-1hbkm-.js +1 -0
- package/out/_next/static/chunks/{1qsut_e3msg0l.js → 3ipx7xbxchsq9.js} +1 -1
- package/out/_next/static/chunks/{2ftp5xmq_w23j.js → 3j9xvdz55bi4p.js} +345 -345
- package/out/_next/static/chunks/3kp8qmhoi24oz.js +1 -0
- package/out/_next/static/chunks/3ksq69yq-40_r.js +1 -0
- package/out/_next/static/chunks/{2x83vs8ns4pww.js → 3njwfothmmg7u.js} +3 -3
- package/out/_next/static/chunks/{0bj_310rugcn1.js → 3oqxl46ukaojj.js} +11 -11
- package/out/_next/static/chunks/{1upkv4ltuh3s5.js → 3qn6r8-0u6dij.js} +352 -352
- package/out/_next/static/chunks/3qye1lytea2i8.js +1 -0
- package/out/_next/static/chunks/3rlp9yr75liz7.js +1 -0
- package/out/_next/static/chunks/{2i82rmjta9ijs.js → 3sa_hlx3konc7.js} +1 -1
- package/out/_next/static/chunks/3tyo643l62h3m.js +1 -0
- package/out/_next/static/chunks/3tz2tpqa9uvwm.js +1 -0
- package/out/_next/static/chunks/{2pbgsq7vvtk8_.js → 3utpc-fc6_y0f.js} +1 -1
- package/out/_next/static/chunks/3v-0c2aj6c0on.js +1 -0
- package/out/_next/static/chunks/3v6nxa28rxngq.js +1 -0
- package/out/_next/static/chunks/{1og49_atcksim.js → 3vbamaoiuk9yj.js} +1 -1
- package/out/_next/static/chunks/3vv99btjc-mky.js +1 -0
- package/out/_next/static/chunks/{1nqojcig-0m3c.js → 3w59kt5ztyvoq.js} +1 -1
- package/out/_next/static/chunks/3x02lxdo28u9i.js +1 -0
- package/out/_next/static/chunks/3xl-op0hwxytg.js +272 -0
- package/out/_next/static/chunks/3ydnxyc4rvad_.js +1 -0
- package/out/_next/static/chunks/3ylg4gfetwgxw.js +1 -0
- package/out/_next/static/chunks/{1-4v8oivkgnyl.js → 3zdtteq-r2fs5.js} +3 -3
- package/out/_next/static/chunks/3zkwt0gybqtgm.js +1 -0
- package/out/_next/static/chunks/{0wq_9f98weoe3.js → 3zs7l4362msjd.js} +1 -1
- package/out/_next/static/chunks/40etabvml_71y.js +1 -0
- package/out/_next/static/chunks/417jkzz0slv9m.js +1 -0
- package/out/_next/static/chunks/41b5gpyqbj58m.js +338 -0
- package/out/_next/static/chunks/41u2-5jayyajf.js +22 -0
- package/out/_next/static/chunks/42gcpy51w7lk1.js +1 -0
- package/out/_next/static/chunks/{1ph0tfo-4hl-f.js → 42ymanq326mo7.js} +1 -1
- package/out/_next/static/chunks/{3w_umk1xtj6to.js → 43fp64xnfy646.js} +1 -1
- package/out/_next/static/chunks/43v4y2gu5z9_h.js +1 -0
- package/out/_next/static/chunks/44cer242u-f8v.js +1 -0
- package/out/_next/static/chunks/{1ozi46t8jajqh.js → 44zi0gl0a6a8w.js} +1 -1
- package/out/_next/static/chunks/turbopack-0n2o5_bkskckx.js +1 -0
- package/out/_not-found/__next._full.txt +12 -12
- package/out/_not-found/__next._not-found.__PAGE__.txt +19 -2
- package/out/_not-found/__next._tree.txt +2 -2
- package/out/_not-found.html +1 -1
- package/out/_not-found.txt +12 -12
- package/out/index.html +1 -1
- package/out/index.txt +11 -11
- package/package.json +15 -15
- package/out/__next._head.txt +0 -6
- package/out/__next._index.txt +0 -5
- package/out/_next/static/chunks/00g5suuoa-_wn.js +0 -1
- package/out/_next/static/chunks/01fh3_bncbe5u.js +0 -1
- package/out/_next/static/chunks/01urdkl1j8o6l.js +0 -1
- package/out/_next/static/chunks/026vw95s88gsy.js +0 -1
- package/out/_next/static/chunks/02eui3ctddbd2.js +0 -1
- package/out/_next/static/chunks/04c4nksb5y9r-.js +0 -1
- package/out/_next/static/chunks/04g-l-_b4payc.js +0 -1
- package/out/_next/static/chunks/04j9pexbmysdy.js +0 -1
- package/out/_next/static/chunks/055baac5e-c2o.js +0 -1
- package/out/_next/static/chunks/05bdni_jrobq1.js +0 -1
- package/out/_next/static/chunks/05o0tb8l_htmw.js +0 -1
- package/out/_next/static/chunks/07z6p262h5hgl.js +0 -1
- package/out/_next/static/chunks/08m_4cihfmik8.js +0 -1
- package/out/_next/static/chunks/08obqw64faj8j.js +0 -1
- package/out/_next/static/chunks/099ilz3dmm1jw.js +0 -1
- package/out/_next/static/chunks/09ppu_k464q-n.js +0 -1
- package/out/_next/static/chunks/0bgcaf2x51kms.js +0 -1
- package/out/_next/static/chunks/0c5d3qn2mb3ew.js +0 -1
- package/out/_next/static/chunks/0dck67in84de0.js +0 -1
- package/out/_next/static/chunks/0dg4wxz-6u5lo.js +0 -1
- package/out/_next/static/chunks/0dva036n8ab62.js +0 -1
- package/out/_next/static/chunks/0erga_bzezbza.js +0 -1
- package/out/_next/static/chunks/0f0-i105odxqd.js +0 -1
- package/out/_next/static/chunks/0gyeqz9pagssf.js +0 -1
- package/out/_next/static/chunks/0i82k-t0fbn8f.js +0 -1
- package/out/_next/static/chunks/0kzw45f61wm3j.js +0 -1
- package/out/_next/static/chunks/0l8bfa2xewq69.js +0 -1
- package/out/_next/static/chunks/0n-zml1gn0o1u.js +0 -1
- package/out/_next/static/chunks/0n92hec_jb_-_.js +0 -1
- package/out/_next/static/chunks/0pv2wirx45e1m.js +0 -1
- package/out/_next/static/chunks/0qxd_8t3nca36.js +0 -1
- package/out/_next/static/chunks/0s1jghzw8jufz.js +0 -1
- package/out/_next/static/chunks/0s84ekz_f9ngx.js +0 -1
- package/out/_next/static/chunks/0ti58h622yo-_.js +0 -2
- package/out/_next/static/chunks/0u8yr4k1y6m2t.js +0 -1
- package/out/_next/static/chunks/0ubxyut5rr600.js +0 -1
- package/out/_next/static/chunks/0wbw9h7rsis2r.js +0 -1
- package/out/_next/static/chunks/0y4e49hpuucdi.js +0 -1
- package/out/_next/static/chunks/1-b44873bjsdw.js +0 -1
- package/out/_next/static/chunks/1-c3a1vnl8v1q.js +0 -1
- package/out/_next/static/chunks/1-xf86jgea22y.js +0 -1
- package/out/_next/static/chunks/10b0qqdnb_nox.js +0 -1
- package/out/_next/static/chunks/12kdmh0h_mboy.js +0 -1
- package/out/_next/static/chunks/14ijcpo72av4r.js +0 -1
- package/out/_next/static/chunks/16hdip1drt8o-.js +0 -1
- package/out/_next/static/chunks/18txc1wwwu9f9.js +0 -1
- package/out/_next/static/chunks/18wa83g0qfh-b.js +0 -1
- package/out/_next/static/chunks/19dp8nr4uygg2.js +0 -5
- package/out/_next/static/chunks/1_8acnu6_-qe-.js +0 -1
- package/out/_next/static/chunks/1__nujzr9e352.js +0 -3
- package/out/_next/static/chunks/1bmyq1b0by7ug.js +0 -1
- package/out/_next/static/chunks/1d1tpj9nm1nhf.js +0 -1
- package/out/_next/static/chunks/1dfwa563iciz3.js +0 -1
- package/out/_next/static/chunks/1di5enkavl9vx.js +0 -4
- package/out/_next/static/chunks/1fwsjnd1y-lx_.js +0 -1
- package/out/_next/static/chunks/1gaexq_suxai0.js +0 -1
- package/out/_next/static/chunks/1gnggc6370ji-.js +0 -1
- package/out/_next/static/chunks/1gtj_l5ame5mw.js +0 -1
- package/out/_next/static/chunks/1hsvckd0sgdgr.js +0 -1
- package/out/_next/static/chunks/1i4f3n_2_3ery.js +0 -1
- package/out/_next/static/chunks/1j7e3qpjuj89a.js +0 -1
- package/out/_next/static/chunks/1mrvp94tietcv.js +0 -1
- package/out/_next/static/chunks/1mvadj46owrck.js +0 -1
- package/out/_next/static/chunks/1nasz7q3tvb53.js +0 -1
- package/out/_next/static/chunks/1o3ggu95lfu6i.js +0 -1
- package/out/_next/static/chunks/1qjsgebn9m-0l.js +0 -1
- package/out/_next/static/chunks/1rr74xxjtckyv.js +0 -1
- package/out/_next/static/chunks/1uu55ejvi7q5u.js +0 -1
- package/out/_next/static/chunks/1xbzxfeq9789f.js +0 -1
- package/out/_next/static/chunks/1ybiu-rkt50_1.js +0 -1
- package/out/_next/static/chunks/20qelrstvz9_n.js +0 -1
- package/out/_next/static/chunks/21at65obnoo8z.js +0 -1
- package/out/_next/static/chunks/21ko5mxfderw0.js +0 -1
- package/out/_next/static/chunks/21muzwu43o8xg.js +0 -1
- package/out/_next/static/chunks/23d-hvrwpixpm.js +0 -1
- package/out/_next/static/chunks/2569rrrffvm2w.js +0 -31
- package/out/_next/static/chunks/29o74k0d6hkdf.js +0 -1
- package/out/_next/static/chunks/2bm95r0011asw.js +0 -1
- package/out/_next/static/chunks/2btabnibkm0db.js +0 -1
- package/out/_next/static/chunks/2c--awgkdcikq.js +0 -1
- package/out/_next/static/chunks/2c2dspoukng-5.js +0 -1
- package/out/_next/static/chunks/2ep7mjbaoeou0.js +0 -1
- package/out/_next/static/chunks/2ezgqm7atphi6.js +0 -1
- package/out/_next/static/chunks/2gfjzq_vjea4w.js +0 -1
- package/out/_next/static/chunks/2h5hase6ewoyc.js +0 -1
- package/out/_next/static/chunks/2hghi41nhdww2.css +0 -3
- package/out/_next/static/chunks/2ies66gmou203.js +0 -1
- package/out/_next/static/chunks/2jenu2eek9viz.js +0 -1
- package/out/_next/static/chunks/2luaj_cf5f19-.js +0 -1
- package/out/_next/static/chunks/2mgmvz66gh5ub.js +0 -1
- package/out/_next/static/chunks/2nwlqtv3vrzcv.js +0 -1
- package/out/_next/static/chunks/2o8k8x5zcepfy.js +0 -1
- package/out/_next/static/chunks/2pcdnd4nzcw4c.js +0 -1
- package/out/_next/static/chunks/2q0rz76kj6h5z.js +0 -1
- package/out/_next/static/chunks/2si5cg3hl5dtf.js +0 -4
- package/out/_next/static/chunks/2uhrhq35bki6u.js +0 -1
- package/out/_next/static/chunks/2wi7y3sfqyqdo.js +0 -3
- package/out/_next/static/chunks/2ymtumj-hfrjo.js +0 -1
- package/out/_next/static/chunks/2zdzgmacaoor9.js +0 -1
- package/out/_next/static/chunks/3-irhmtm1q5qw.js +0 -1
- package/out/_next/static/chunks/3-k74vn9exnb6.js +0 -1
- package/out/_next/static/chunks/31ei992g8gqz9.js +0 -1
- package/out/_next/static/chunks/34845aqksy1dl.js +0 -3
- package/out/_next/static/chunks/34y7nx6qmat06.js +0 -1
- package/out/_next/static/chunks/36rqw8h6ildpl.js +0 -1
- package/out/_next/static/chunks/3a_khw6q6pyh1.js +0 -1
- package/out/_next/static/chunks/3c_31f20z4jrl.js +0 -1
- package/out/_next/static/chunks/3ckp70rgr63u9.js +0 -1
- package/out/_next/static/chunks/3ed24zmt8qfys.js +0 -1
- package/out/_next/static/chunks/3ez20hi1mxw0w.js +0 -1
- package/out/_next/static/chunks/3fdx-rnos5ft-.js +0 -1
- package/out/_next/static/chunks/3fgfbxxb-j_bn.js +0 -4
- package/out/_next/static/chunks/3k-gz8qf-mj-p.js +0 -1
- package/out/_next/static/chunks/3lehc5pujwhsz.js +0 -1
- package/out/_next/static/chunks/3m0ytnc241yfz.js +0 -1
- package/out/_next/static/chunks/3mpe7c3iyxn5h.js +0 -1
- package/out/_next/static/chunks/3mvaub8qjdyuc.js +0 -1
- package/out/_next/static/chunks/3nw7u4bie0-g6.js +0 -1
- package/out/_next/static/chunks/3qatb38-tk_gd.js +0 -1
- package/out/_next/static/chunks/3tdcdi_utmoy_.js +0 -1
- package/out/_next/static/chunks/3tdzweqszru4y.js +0 -1
- package/out/_next/static/chunks/3tt_ir_va6262.js +0 -1
- package/out/_next/static/chunks/3y_51bmdnc0ey.js +0 -1
- package/out/_next/static/chunks/3yr66ufoli71t.js +0 -1
- package/out/_next/static/chunks/41qxc142snm22.js +0 -1
- package/out/_next/static/chunks/43qmngblcab8f.js +0 -1
- package/out/_next/static/chunks/turbopack-3r8yn0j92tqw_.js +0 -1
- package/out/_not-found/__next._head.txt +0 -6
- package/out/_not-found/__next._index.txt +0 -5
- package/out/_not-found/__next._not-found.txt +0 -5
- /package/out/_next/static/{BvOGdrl2Cfw-jVV73WY6a → A1hxMz783bIWo0Q9qqV3L}/_buildManifest.js +0 -0
- /package/out/_next/static/{BvOGdrl2Cfw-jVV73WY6a → A1hxMz783bIWo0Q9qqV3L}/_clientMiddlewareManifest.js +0 -0
- /package/out/_next/static/{BvOGdrl2Cfw-jVV73WY6a → A1hxMz783bIWo0Q9qqV3L}/_ssgManifest.js +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,50853,59200,52612,e=>{"use strict";var r=e.i(2342);let a="bumpFragmentMainFunctions",i=`#ifndef TEXRD_DEFINED
|
|
2
2
|
fn TEXRD(t: texture_2d<f32>,ts: sampler,uv: vec2f)->vec4f {return textureSample(t,ts,uv);}
|
|
3
3
|
#define TEXRD_DEFINED
|
|
4
4
|
#endif
|
|
@@ -42,7 +42,7 @@ fn perturbNormal(cotangentFrame: mat3x3f,textureSample: vec3f,scale: f32)->vec3f
|
|
|
42
42
|
fn cotangent_frame(normal: vec3f,p: vec3f,uv: vec2f,tangentSpaceParams: vec2f)->mat3x3f
|
|
43
43
|
{var dp1: vec3f=dpdx(p);var dp2: vec3f=dpdy(p);var duv1: vec2f=dpdx(uv);var duv2: vec2f=dpdy(uv);var dp2perp: vec3f=cross(dp2,normal);var dp1perp: vec3f=cross(normal,dp1);var tangent: vec3f=dp2perp*duv1.x+dp1perp*duv2.x;var bitangent: vec3f=dp2perp*duv1.y+dp1perp*duv2.y;tangent*=tangentSpaceParams.x;bitangent*=tangentSpaceParams.y;var det: f32=max(dot(tangent,tangent),dot(bitangent,bitangent));var invmax: f32=select(inverseSqrt(det),0.0,det==0.0);return mat3x3f(tangent*invmax,bitangent*invmax,normal);}
|
|
44
44
|
#endif
|
|
45
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["bumpFragmentMainFunctionsWGSL",0,{name:a,shader:i}],
|
|
45
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["bumpFragmentMainFunctionsWGSL",0,{name:a,shader:i}],50853),e.i(59994);let f="bumpFragmentFunctions",n=`#if defined(BUMP)
|
|
46
46
|
#include<samplerFragmentDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump)
|
|
47
47
|
#endif
|
|
48
48
|
#if defined(DETAIL)
|
|
@@ -72,7 +72,7 @@ return -texCoordOffset;
|
|
|
72
72
|
#endif
|
|
73
73
|
}
|
|
74
74
|
#endif
|
|
75
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["bumpFragmentFunctionsWGSL",0,{name:f,shader:n}],
|
|
75
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["bumpFragmentFunctionsWGSL",0,{name:f,shader:n}],59200);let t="bumpFragment",o=`var uvOffset: vec2f= vec2f(0.0,0.0);
|
|
76
76
|
#if defined(BUMP) || defined(PARALLAX) || defined(DETAIL)
|
|
77
77
|
#ifdef NORMALXYSCALE
|
|
78
78
|
var normalScale: f32=1.0;
|
|
@@ -124,7 +124,52 @@ normalW=perturbNormalBase(TBN,blendedNormal,uniforms.vBumpInfos.y);
|
|
|
124
124
|
#elif defined(DETAIL)
|
|
125
125
|
detailNormal=vec3f(detailNormal.xy*uniforms.vDetailInfos.z,detailNormal.z);normalW=perturbNormalBase(TBN,detailNormal,uniforms.vDetailInfos.z);
|
|
126
126
|
#endif
|
|
127
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[t]||(r.ShaderStore.IncludesShadersStoreWGSL[t]=o),e.s(["bumpFragmentWGSL",0,{name:t,shader:o}],
|
|
127
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[t]||(r.ShaderStore.IncludesShadersStoreWGSL[t]=o),e.s(["bumpFragmentWGSL",0,{name:t,shader:o}],52612)},49338,65513,e=>{"use strict";var r=e.i(2342);let a="clipPlaneFragmentDeclaration",i=`#ifdef CLIPPLANE
|
|
128
|
+
varying fClipDistance: f32;
|
|
129
|
+
#endif
|
|
130
|
+
#ifdef CLIPPLANE2
|
|
131
|
+
varying fClipDistance2: f32;
|
|
132
|
+
#endif
|
|
133
|
+
#ifdef CLIPPLANE3
|
|
134
|
+
varying fClipDistance3: f32;
|
|
135
|
+
#endif
|
|
136
|
+
#ifdef CLIPPLANE4
|
|
137
|
+
varying fClipDistance4: f32;
|
|
138
|
+
#endif
|
|
139
|
+
#ifdef CLIPPLANE5
|
|
140
|
+
varying fClipDistance5: f32;
|
|
141
|
+
#endif
|
|
142
|
+
#ifdef CLIPPLANE6
|
|
143
|
+
varying fClipDistance6: f32;
|
|
144
|
+
#endif
|
|
145
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["clipPlaneFragmentDeclarationWGSL",0,{name:a,shader:i}],49338);let f="clipPlaneFragment",n=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
146
|
+
if (false) {}
|
|
147
|
+
#endif
|
|
148
|
+
#ifdef CLIPPLANE
|
|
149
|
+
else if (fragmentInputs.fClipDistance>0.0)
|
|
150
|
+
{discard;}
|
|
151
|
+
#endif
|
|
152
|
+
#ifdef CLIPPLANE2
|
|
153
|
+
else if (fragmentInputs.fClipDistance2>0.0)
|
|
154
|
+
{discard;}
|
|
155
|
+
#endif
|
|
156
|
+
#ifdef CLIPPLANE3
|
|
157
|
+
else if (fragmentInputs.fClipDistance3>0.0)
|
|
158
|
+
{discard;}
|
|
159
|
+
#endif
|
|
160
|
+
#ifdef CLIPPLANE4
|
|
161
|
+
else if (fragmentInputs.fClipDistance4>0.0)
|
|
162
|
+
{discard;}
|
|
163
|
+
#endif
|
|
164
|
+
#ifdef CLIPPLANE5
|
|
165
|
+
else if (fragmentInputs.fClipDistance5>0.0)
|
|
166
|
+
{discard;}
|
|
167
|
+
#endif
|
|
168
|
+
#ifdef CLIPPLANE6
|
|
169
|
+
else if (fragmentInputs.fClipDistance6>0.0)
|
|
170
|
+
{discard;}
|
|
171
|
+
#endif
|
|
172
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["clipPlaneFragmentWGSL",0,{name:f,shader:n}],65513)},35551,e=>{"use strict";var r=e.i(2342);let a="helperFunctions",i=`const PI: f32=3.1415926535897932384626433832795;const TWO_PI: f32=6.283185307179586;const HALF_PI: f32=1.5707963267948966;const RECIPROCAL_PI: f32=0.3183098861837907;const RECIPROCAL_PI2: f32=0.15915494309189535;const RECIPROCAL_PI4: f32=0.07957747154594767;const HALF_MIN: f32=5.96046448e-08;
|
|
128
173
|
const LinearEncodePowerApprox: f32=2.2;const GammaEncodePowerApprox: f32=1.0/LinearEncodePowerApprox;const LuminanceEncodeApprox: vec3f=vec3f(0.2126,0.7152,0.0722);const Epsilon:f32=0.0000001;fn square(x: f32)->f32 {return x*x;}
|
|
129
174
|
fn saturate(x: f32)->f32 {return clamp(x,0.0,1.0);}
|
|
130
175
|
fn saturateVec3(x: vec3f)->vec3f {return clamp(x,vec3f(),vec3f(1.0));}
|
|
@@ -210,700 +255,654 @@ fn max3(v: vec3f)->f32 {return max(v.x,max(v.y,v.z));}
|
|
|
210
255
|
fn uint2float(i: u32)->f32 {return bitcast<f32>(0x3F800000u | (i>>9u))-1.0;}
|
|
211
256
|
fn plasticSequence(rstate: u32)->vec2f {return vec2f(uint2float(rstate*3242174889u),
|
|
212
257
|
uint2float(rstate*2447445414u));}
|
|
213
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["helperFunctionsWGSL",0,{name:a,shader:i}])},
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
var
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
#
|
|
226
|
-
|
|
227
|
-
#define BRDF_DIFFUSE_MODEL_LEGACY 3
|
|
228
|
-
#define DIELECTRIC_SPECULAR_MODEL_GLTF 0
|
|
229
|
-
#define DIELECTRIC_SPECULAR_MODEL_OPENPBR 1
|
|
230
|
-
#define CONDUCTOR_SPECULAR_MODEL_GLTF 0
|
|
231
|
-
#define CONDUCTOR_SPECULAR_MODEL_OPENPBR 1
|
|
232
|
-
#if !defined(PBR_VERTEX_SHADER) && !defined(OPENPBR_VERTEX_SHADER)
|
|
233
|
-
#ifdef MS_BRDF_ENERGY_CONSERVATION
|
|
234
|
-
fn getEnergyConservationFactor(specularEnvironmentR0: vec3f,environmentBrdf: vec3f)->vec3f {return 1.0+specularEnvironmentR0*(1.0/environmentBrdf.y-1.0);}
|
|
235
|
-
#endif
|
|
236
|
-
#if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR
|
|
237
|
-
const F82_COS_THETA_MAX: f32 =0.142857143;const F82_ONE_MINUS_CTM_POW5: f32 =0.462664366;const F82_ONE_MINUS_CTM_POW6: f32 =0.396569457;const F82_B_DENOMINATOR_RECIP: f32 =17.6512785;const BRDF_Z_SCALE: f32 =16.0;fn getF82Specular(NdotV: f32,F0: vec3f,edgeTint: vec3f,roughness: f32)->vec3f {let white_minus_F0: vec3f=vec3f(1.0f)-F0;let b_numerator: vec3f=(F0+white_minus_F0*F82_ONE_MINUS_CTM_POW5)*(vec3f(1.0)-edgeTint);let b: vec3f=b_numerator*F82_B_DENOMINATOR_RECIP;let cos_theta: f32=max(roughness,NdotV);let one_minus_cos_theta: f32=1.0-cos_theta;let offset_from_F0: vec3f=(white_minus_F0-b*cos_theta*one_minus_cos_theta)*pow(one_minus_cos_theta,5.0f);return clamp(F0+offset_from_F0,vec3f(0.0f),vec3f(1.0f));}
|
|
238
|
-
fn getF82B(F0: vec3f,edgeTint: vec3f)->vec3f {return (F0+(vec3f(1.0)-F0)*F82_ONE_MINUS_CTM_POW5)*(vec3f(1.0)-edgeTint)*F82_B_DENOMINATOR_RECIP;}
|
|
239
|
-
fn getF82DirectionalAlbedo(F0: vec3f,F90: vec3f,b: vec3f,environmentBrdf: vec3f)->vec3f {return (F90-F0)*environmentBrdf.x+F0*environmentBrdf.y-b*environmentBrdf.z;}
|
|
240
|
-
fn getF82AverageFresnel(F0: vec3f,b: vec3f)->vec3f {return F0+(vec3f(1.0)-F0)/21.0-b/126.0;}
|
|
241
|
-
#endif
|
|
242
|
-
#ifdef FUZZENVIRONMENTBRDF
|
|
243
|
-
fn getFuzzBRDFLookup(NdotV: f32,perceptualRoughness: f32)->vec3f {let UV: vec2f=vec2f(perceptualRoughness,NdotV);var brdfLookup: vec4f=textureSample(environmentFuzzBrdfSampler,environmentFuzzBrdfSamplerSampler,UV);const RiRange: vec2f=vec2f(0.0f,0.75f);const ARange: vec2f=vec2f(0.005f,0.88f);const BRange: vec2f=vec2f(-0.18f,0.002f);brdfLookup.r=mix(ARange.x, ARange.y, brdfLookup.r);brdfLookup.g=mix(BRange.x, BRange.y, brdfLookup.g);brdfLookup.b=mix(RiRange.x,RiRange.y,brdfLookup.b);return brdfLookup.rgb;}
|
|
244
|
-
#endif
|
|
245
|
-
#ifdef ENVIRONMENTBRDF
|
|
246
|
-
fn getBRDFLookup(NdotV: f32,perceptualRoughness: f32)->vec3f {var UV: vec2f= vec2f(NdotV,perceptualRoughness);var brdfLookup: vec4f= textureSample(environmentBrdfSampler,environmentBrdfSamplerSampler,UV);
|
|
247
|
-
#ifdef ENVIRONMENTBRDF_RGBD
|
|
248
|
-
brdfLookup=vec4f(fromRGBD(brdfLookup.rgba),brdfLookup.a);
|
|
258
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["helperFunctionsWGSL",0,{name:a,shader:i}])},7112,98092,32895,e=>{"use strict";var r=e.i(2342);let a="openpbrDielectricReflectance",i=`struct ReflectanceParams
|
|
259
|
+
{F0: f32,
|
|
260
|
+
F90: f32,
|
|
261
|
+
coloredF0: vec3f,
|
|
262
|
+
coloredF90: vec3f,};
|
|
263
|
+
#define pbr_inline
|
|
264
|
+
fn dielectricReflectance(
|
|
265
|
+
insideIOR: f32,outsideIOR: f32,specularColor: vec3f,specularWeight: f32
|
|
266
|
+
)->ReflectanceParams
|
|
267
|
+
{var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f);
|
|
268
|
+
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
269
|
+
let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale);
|
|
270
|
+
#else
|
|
271
|
+
let dielectricColorF90: vec3f=vec3f(f90Scale);
|
|
249
272
|
#endif
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
253
|
-
var reflectance: vec3f=(specularEnvironmentR90-specularEnvironmentR0)*environmentBrdf.x+specularEnvironmentR0*environmentBrdf.y;
|
|
273
|
+
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
274
|
+
let maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight;
|
|
254
275
|
#else
|
|
255
|
-
|
|
276
|
+
outParams.F0=dielectricF0*specularWeight;
|
|
256
277
|
#endif
|
|
257
|
-
return
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
278
|
+
outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3f(specularWeight);return outParams;}
|
|
279
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrDielectricReflectanceWGSL",0,{name:a,shader:i}],7112);let f="openpbrGeometryInfo",n=`struct geometryInfoOutParams
|
|
280
|
+
{NdotV: f32,
|
|
281
|
+
NdotVUnclamped: f32,
|
|
282
|
+
environmentBrdf: vec3f,
|
|
283
|
+
horizonOcclusion: f32};struct geometryInfoAnisoOutParams
|
|
284
|
+
{NdotV: f32,
|
|
285
|
+
NdotVUnclamped: f32,
|
|
286
|
+
environmentBrdf: vec3f,
|
|
287
|
+
horizonOcclusion: f32,
|
|
288
|
+
anisotropy: f32,
|
|
289
|
+
anisotropicTangent: vec3f,
|
|
290
|
+
anisotropicBitangent: vec3f,
|
|
291
|
+
TBN: mat3x3<f32>};fn geometryInfo(
|
|
292
|
+
normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
|
|
293
|
+
)->geometryInfoOutParams
|
|
294
|
+
{var outParams: geometryInfoOutParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
295
|
+
#if defined(ENVIRONMENTBRDF)
|
|
296
|
+
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
261
297
|
#else
|
|
262
|
-
|
|
298
|
+
outParams.environmentBrdf=vec3f(0.0);
|
|
263
299
|
#endif
|
|
264
|
-
|
|
300
|
+
outParams.horizonOcclusion=1.0f;
|
|
301
|
+
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
302
|
+
#ifdef HORIZONOCCLUSION
|
|
303
|
+
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
304
|
+
#ifdef REFLECTIONMAP_3D
|
|
305
|
+
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
265
306
|
#endif
|
|
266
|
-
/* NOT USED
|
|
267
|
-
#if defined(SHEEN) && defined(SHEEN_SOFTER)
|
|
268
|
-
fn getBRDFLookupCharlieSheen(NdotV: f32,perceptualRoughness: f32)->f32
|
|
269
|
-
{var c: f32=1.0-NdotV;var c3: f32=c*c*c;return 0.65584461*c3+1.0/(4.16526551+exp(-7.97291361*perceptualRoughness+6.33516894));}
|
|
270
307
|
#endif
|
|
271
|
-
*/
|
|
272
|
-
#if !defined(ENVIRONMENTBRDF) || defined(REFLECTIONMAP_SKYBOX) || defined(ALPHAFRESNEL)
|
|
273
|
-
fn getReflectanceFromAnalyticalBRDFLookup_Jones(VdotN: f32,reflectance0: vec3f,reflectance90: vec3f,smoothness: f32)->vec3f
|
|
274
|
-
{var weight: f32=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);return reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));}
|
|
275
308
|
#endif
|
|
276
|
-
#if defined(SHEEN) && defined(ENVIRONMENTBRDF)
|
|
277
|
-
/**
|
|
278
|
-
* The sheen BRDF not containing F can be easily stored in the blue channel of the BRDF texture.
|
|
279
|
-
* The blue channel contains DCharlie*VAshikhmin*NdotL as a lokkup table
|
|
280
|
-
*/
|
|
281
|
-
fn getSheenReflectanceFromBRDFLookup(reflectance0: vec3f,environmentBrdf: vec3f)->vec3f {var sheenEnvironmentReflectance: vec3f=reflectance0*environmentBrdf.b;return sheenEnvironmentReflectance;}
|
|
282
309
|
#endif
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
#
|
|
293
|
-
|
|
310
|
+
return outParams;}
|
|
311
|
+
fn geometryInfoAniso(
|
|
312
|
+
normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
|
|
313
|
+
,vAnisotropy: vec3f,TBN: mat3x3<f32>
|
|
314
|
+
)->geometryInfoAnisoOutParams
|
|
315
|
+
{let geoInfo: geometryInfoOutParams=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);var outParams: geometryInfoAnisoOutParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;let anisotropyDirection: vec3f=vec3f(vAnisotropy.xy,0.);let anisoTBN: mat3x3<f32>=mat3x3<f32>(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;}
|
|
316
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["openpbrGeometryInfoWGSL",0,{name:f,shader:n}],98092);let t="openpbrIblFunctions",o=`#ifdef REFLECTION
|
|
317
|
+
fn sampleIrradiance(
|
|
318
|
+
surfaceNormal: vec3f
|
|
319
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
320
|
+
,vEnvironmentIrradianceSH: vec3f
|
|
294
321
|
#endif
|
|
322
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
323
|
+
,iblMatrix: mat4x4f
|
|
324
|
+
#endif
|
|
325
|
+
#ifdef USEIRRADIANCEMAP
|
|
326
|
+
#ifdef REFLECTIONMAP_3D
|
|
327
|
+
,irradianceSampler: texture_cube<f32>
|
|
328
|
+
,irradianceSamplerSampler: sampler
|
|
295
329
|
#else
|
|
296
|
-
|
|
330
|
+
,irradianceSampler: texture_2d<f32>
|
|
331
|
+
,irradianceSamplerSampler: sampler
|
|
297
332
|
#endif
|
|
298
|
-
|
|
333
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
334
|
+
,reflectionDominantDirection: vec3f
|
|
299
335
|
#endif
|
|
300
|
-
#ifdef IRIDESCENCE
|
|
301
|
-
const XYZ_TO_REC709: mat3x3f= mat3x3f(
|
|
302
|
-
3.2404542,-0.9692660, 0.0556434,
|
|
303
|
-
-1.5371385, 1.8760108,-0.2040259,
|
|
304
|
-
-0.4985314, 0.0415560, 1.0572252
|
|
305
|
-
);fn getIORTfromAirToSurfaceR0(f0: vec3f)->vec3f {var sqrtF0: vec3f=sqrt(f0);return (1.+sqrtF0)/(1.-sqrtF0);}
|
|
306
|
-
fn getR0fromIORsVec3(iorT: vec3f,iorI: f32)->vec3f {return squareVec3((iorT- vec3f(iorI))/(iorT+ vec3f(iorI)));}
|
|
307
|
-
fn getR0fromIORs(iorT: f32,iorI: f32)->f32 {return square((iorT-iorI)/(iorT+iorI));}
|
|
308
|
-
fn evalSensitivity(opd: f32,shift: vec3f)->vec3f {var phase: f32=2.0*PI*opd*1.0e-9;const val: vec3f= vec3f(5.4856e-13,4.4201e-13,5.2481e-13);const pos: vec3f= vec3f(1.6810e+06,1.7953e+06,2.2084e+06);const vr: vec3f= vec3f(4.3278e+09,9.3046e+09,6.6121e+09);var xyz: vec3f=val*sqrt(2.0*PI*vr)*cos(pos*phase+shift)*exp(-square(phase)*vr);xyz.x+=9.7470e-14*sqrt(2.0*PI*4.5282e+09)*cos(2.2399e+06*phase+shift[0])*exp(-4.5282e+09*square(phase));xyz/=1.0685e-7;var srgb: vec3f=XYZ_TO_REC709*xyz;return srgb;}
|
|
309
|
-
fn evalIridescence(outsideIOR: f32,eta2: f32,cosTheta1: f32,thinFilmThickness: f32,baseF0: vec3f)->vec3f {var I: vec3f= vec3f(1.0);var iridescenceIOR: f32=mix(outsideIOR,eta2,smoothstep(0.0,0.03,thinFilmThickness));var sinTheta2Sq: f32=square(outsideIOR/iridescenceIOR)*(1.0-square(cosTheta1));var cosTheta2Sq: f32=1.0-sinTheta2Sq;if (cosTheta2Sq<0.0) {return I;}
|
|
310
|
-
var cosTheta2: f32=sqrt(cosTheta2Sq);var R0: f32=getR0fromIORs(iridescenceIOR,outsideIOR);var R12: f32=fresnelSchlickGGX(cosTheta1,R0,1.);var R21: f32=R12;var T121: f32=1.0-R12;var phi12: f32=0.0;if (iridescenceIOR<outsideIOR) {phi12=PI;}
|
|
311
|
-
var phi21: f32=PI-phi12;var baseIOR: vec3f=getIORTfromAirToSurfaceR0(clamp(baseF0,vec3f(0.0),vec3f(0.9999)));
|
|
312
|
-
var R1: vec3f=getR0fromIORsVec3(baseIOR,iridescenceIOR);let maxR1: f32=max(R1.r,max(R1.g,R1.b));if (maxR1<1e-6) {return max(vec3f(R12),vec3f(0.0));}
|
|
313
|
-
var R23: vec3f=fresnelSchlickGGXVec3(cosTheta2,R1,vec3f(1.));var phi23: vec3f=vec3f(0.0);if (baseIOR[0]<iridescenceIOR) {phi23[0]=PI;}
|
|
314
|
-
if (baseIOR[1]<iridescenceIOR) {phi23[1]=PI;}
|
|
315
|
-
if (baseIOR[2]<iridescenceIOR) {phi23[2]=PI;}
|
|
316
|
-
var opd: f32=2.0*iridescenceIOR*thinFilmThickness*cosTheta2;var phi: vec3f=vec3f(phi21)+phi23;var R123: vec3f=clamp(R12*R23,vec3f(1e-5),vec3f(0.9999));var r123: vec3f=sqrt(R123);var Rs: vec3f=(T121*T121)*R23/(vec3f(1.0)-R123);var C0: vec3f=R12+Rs;I=C0;var Cm: vec3f=Rs-T121;for (var m: i32=1; m<=2; m++)
|
|
317
|
-
{Cm*=r123;var Sm: vec3f=2.0*evalSensitivity(f32(m)*opd,f32(m)*phi);I+=Cm*Sm;}
|
|
318
|
-
return max(I,vec3f(0.0));}
|
|
319
336
|
#endif
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
#ifdef
|
|
323
|
-
|
|
324
|
-
|
|
337
|
+
#ifdef REALTIME_FILTERING
|
|
338
|
+
,reflectionFilteringInfo: vec2f
|
|
339
|
+
#ifdef IBL_CDF_FILTERING
|
|
340
|
+
,icdfSampler: texture_2d<f32>
|
|
341
|
+
,icdfSamplerSampler: sampler
|
|
325
342
|
#endif
|
|
326
|
-
#ifdef ANISOTROPIC
|
|
327
|
-
fn normalDistributionFunction_BurleyGGX_Anisotropic(NdotH: f32,TdotH: f32,BdotH: f32,alphaTB: vec2f)->f32 {var a2: f32=alphaTB.x*alphaTB.y;var v: vec3f= vec3f(alphaTB.y*TdotH,alphaTB.x *BdotH,a2*NdotH);var v2: f32=dot(v,v);var w2: f32=a2/v2;return a2*w2*w2*RECIPROCAL_PI;}
|
|
328
343
|
#endif
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
344
|
+
,reflectionInfos: vec2f
|
|
345
|
+
,viewDirectionW: vec3f
|
|
346
|
+
,diffuseRoughness: f32
|
|
347
|
+
,surfaceAlbedo: vec3f
|
|
348
|
+
)->vec3f {var environmentIrradiance=vec3f(0.,0.,0.);
|
|
349
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
350
|
+
var irradianceVector=(iblMatrix*vec4f(surfaceNormal,0.0f)).xyz;var irradianceView=(iblMatrix*vec4f(viewDirectionW,0.0f)).xyz;
|
|
351
|
+
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
352
|
+
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
353
|
+
{let NdotV=max(dot(surfaceNormal,viewDirectionW),0.0f);irradianceVector=mix(irradianceVector,irradianceView,(0.5f*(1.0f-NdotV))*diffuseRoughness);}
|
|
335
354
|
#endif
|
|
336
|
-
|
|
355
|
+
#endif
|
|
356
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
357
|
+
irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
|
|
358
|
+
#endif
|
|
359
|
+
#ifdef INVERTCUBICMAP
|
|
360
|
+
irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
|
|
361
|
+
#endif
|
|
362
|
+
#endif
|
|
363
|
+
#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
364
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
365
|
+
environmentIrradiance=vEnvironmentIrradianceSH;
|
|
337
366
|
#else
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
#ifdef
|
|
341
|
-
|
|
367
|
+
#if defined(REALTIME_FILTERING)
|
|
368
|
+
environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,reflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
369
|
+
#ifdef IBL_CDF_FILTERING
|
|
370
|
+
,icdfSampler
|
|
371
|
+
,icdfSamplerSampler
|
|
372
|
+
#endif
|
|
373
|
+
);
|
|
342
374
|
#else
|
|
343
|
-
|
|
375
|
+
environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
|
|
344
376
|
#endif
|
|
345
|
-
}
|
|
346
|
-
fn smithVisibility_TrowbridgeReitzGGXFast(NdotL: f32,NdotV: f32,alphaG: f32)->f32
|
|
347
|
-
{var visibility: f32=smithVisibilityG1_TrowbridgeReitzGGXFast(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGXFast(NdotV,alphaG);return visibility;}
|
|
348
377
|
#endif
|
|
349
|
-
#
|
|
350
|
-
|
|
378
|
+
#elif defined(USEIRRADIANCEMAP)
|
|
379
|
+
#ifdef REFLECTIONMAP_3D
|
|
380
|
+
let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,irradianceVector);
|
|
381
|
+
#else
|
|
382
|
+
let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,reflectionCoords);
|
|
351
383
|
#endif
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
#ifdef SHEEN
|
|
356
|
-
fn visibility_Ashikhmin(NdotL: f32,NdotV: f32)->f32
|
|
357
|
-
{return 1./(4.*(NdotL+NdotV-NdotL*NdotV));}
|
|
358
|
-
/* NOT USED
|
|
359
|
-
#ifdef SHEEN_SOFTER
|
|
360
|
-
fn l(x: f32,alphaG: f32)->f32
|
|
361
|
-
{var oneMinusAlphaSq: f32=(1.0-alphaG)*(1.0-alphaG);var a: f32=mix(21.5473,25.3245,oneMinusAlphaSq);var b: f32=mix(3.82987,3.32435,oneMinusAlphaSq);var c: f32=mix(0.19823,0.16801,oneMinusAlphaSq);var d: f32=mix(-1.97760,-1.27393,oneMinusAlphaSq);var e: f32=mix(-4.32054,-4.85967,oneMinusAlphaSq);return a/(1.0+b*pow(x,c))+d*x+e;}
|
|
362
|
-
fn lambdaSheen(cosTheta: f32,alphaG: f32)->f32
|
|
363
|
-
{return abs(cosTheta)<0.5 ? exp(l(cosTheta,alphaG)) : exp(2.0*l(0.5,alphaG)-l(1.0-cosTheta,alphaG));}
|
|
364
|
-
fn visibility_CharlieSheen(NdotL: f32,NdotV: f32,alphaG: f32)->f32
|
|
365
|
-
{var G: f32=1.0/(1.0+lambdaSheen(NdotV,alphaG)+lambdaSheen(NdotL,alphaG));return G/(4.0*NdotV*NdotL);}
|
|
366
|
-
#endif
|
|
367
|
-
*/
|
|
368
|
-
#endif
|
|
369
|
-
const constant1_FON: f32=0.5f-2.0f/(3.0f*PI);const constant2_FON: f32=2.0f/3.0f-28.0f/(15.0f*PI);fn E_FON_approx(mu: f32,roughness: f32)->f32
|
|
370
|
-
{var sigma: f32=roughness;
|
|
371
|
-
var mucomp: f32=1.0f-mu;var mucomp2: f32=mucomp*mucomp;const Gcoeffs: mat2x2f=mat2x2f(0.0571085289f,-0.332181442f,
|
|
372
|
-
0.491881867f,0.0714429953f);var GoverPi: f32=dot(Gcoeffs*vec2f(mucomp,mucomp2),vec2f(1.0f,mucomp2));return (1.0f+sigma*GoverPi)/(1.0f+constant1_FON*sigma);}
|
|
373
|
-
fn diffuseBRDF_EON(albedo: vec3f,roughness: f32,NdotL: f32,NdotV: f32,LdotV: f32)->vec3f
|
|
374
|
-
{var rho: vec3f=albedo;var sigma: f32=roughness;
|
|
375
|
-
var mu_i: f32=NdotL;
|
|
376
|
-
var mu_o: f32=NdotV;
|
|
377
|
-
var s: f32=LdotV-mu_i*mu_o;
|
|
378
|
-
var sovertF: f32=select(s,s/max(mu_i,mu_o),s>0.0f);
|
|
379
|
-
var AF: f32=1.0f/(1.0f+constant1_FON*sigma);
|
|
380
|
-
var f_ss: vec3f=(rho*RECIPROCAL_PI)*AF*(1.0f+sigma*sovertF);
|
|
381
|
-
var EFo: f32=E_FON_approx(mu_o,sigma);
|
|
382
|
-
var EFi: f32=E_FON_approx(mu_i,sigma);
|
|
383
|
-
var avgEF: f32=AF*(1.0f+constant2_FON*sigma);
|
|
384
|
-
var rho_ms: vec3f=(rho*rho)*avgEF/(vec3f(1.0f)-rho*(1.0f-avgEF));const eps: f32=1.0e-7f;var f_ms: vec3f=(rho_ms*RECIPROCAL_PI)*max(eps,1.0f-EFo)
|
|
385
|
-
* max(eps,1.0f-EFi)
|
|
386
|
-
/ max(eps,1.0f-avgEF);return (f_ss+f_ms);}
|
|
387
|
-
fn diffuseBRDF_Burley(NdotL: f32,NdotV: f32,VdotH: f32,roughness: f32)->f32 {var diffuseFresnelNV: f32=pow5(saturateEps(1.0-NdotL));var diffuseFresnelNL: f32=pow5(saturateEps(1.0-NdotV));var diffuseFresnel90: f32=0.5+2.0*VdotH*VdotH*roughness;var fresnel: f32 =
|
|
388
|
-
(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) *
|
|
389
|
-
(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);return fresnel/PI;}
|
|
390
|
-
#ifdef SS_TRANSLUCENCY
|
|
391
|
-
fn transmittanceBRDF_Burley(tintColor: vec3f,diffusionDistance: vec3f,thickness: f32)->vec3f {var S: vec3f=1./maxEpsVec3(diffusionDistance);var temp: vec3f=exp((-0.333333333*thickness)*S);return tintColor.rgb*0.25*(temp*temp*temp+3.0*temp);}
|
|
392
|
-
fn computeWrappedDiffuseNdotL(NdotL: f32,w: f32)->f32 {var t: f32=1.0+w;var invt2: f32=1.0/(t*t);return saturate((NdotL+w)*invt2);}
|
|
393
|
-
#endif
|
|
394
|
-
#endif
|
|
395
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["pbrBRDFFunctionsWGSL",0,{name:a,shader:i}])},4294,71990,e=>{"use strict";var r=e.i(37875);let a="clipPlaneFragmentDeclaration",i=`#ifdef CLIPPLANE
|
|
396
|
-
varying fClipDistance: f32;
|
|
397
|
-
#endif
|
|
398
|
-
#ifdef CLIPPLANE2
|
|
399
|
-
varying fClipDistance2: f32;
|
|
400
|
-
#endif
|
|
401
|
-
#ifdef CLIPPLANE3
|
|
402
|
-
varying fClipDistance3: f32;
|
|
403
|
-
#endif
|
|
404
|
-
#ifdef CLIPPLANE4
|
|
405
|
-
varying fClipDistance4: f32;
|
|
406
|
-
#endif
|
|
407
|
-
#ifdef CLIPPLANE5
|
|
408
|
-
varying fClipDistance5: f32;
|
|
409
|
-
#endif
|
|
410
|
-
#ifdef CLIPPLANE6
|
|
411
|
-
varying fClipDistance6: f32;
|
|
412
|
-
#endif
|
|
413
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["clipPlaneFragmentDeclarationWGSL",0,{name:a,shader:i}],4294);let f="clipPlaneFragment",n=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
414
|
-
if (false) {}
|
|
415
|
-
#endif
|
|
416
|
-
#ifdef CLIPPLANE
|
|
417
|
-
else if (fragmentInputs.fClipDistance>0.0)
|
|
418
|
-
{discard;}
|
|
419
|
-
#endif
|
|
420
|
-
#ifdef CLIPPLANE2
|
|
421
|
-
else if (fragmentInputs.fClipDistance2>0.0)
|
|
422
|
-
{discard;}
|
|
384
|
+
environmentIrradiance=environmentIrradianceFromTexture.rgb;
|
|
385
|
+
#ifdef RGBDREFLECTION
|
|
386
|
+
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
423
387
|
#endif
|
|
424
|
-
#ifdef
|
|
425
|
-
|
|
426
|
-
{discard;}
|
|
388
|
+
#ifdef GAMMAREFLECTION
|
|
389
|
+
environmentIrradiance.rgb=toLinearSpaceVec3(environmentIrradiance.rgb);
|
|
427
390
|
#endif
|
|
428
|
-
#ifdef
|
|
429
|
-
|
|
430
|
-
|
|
391
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
392
|
+
let Ls: vec3f=normalize(reflectionDominantDirection);let NoL: f32=dot(irradianceVector,Ls);let NoV: f32=dot(irradianceVector,irradianceView);var diffuseRoughnessTerm=vec3f(1.0f);
|
|
393
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
394
|
+
let LoV: f32=dot (Ls,irradianceView);let mag: f32=length(reflectionDominantDirection)*2.0f;let clampedAlbedo: vec3f=clamp(surfaceAlbedo,vec3f(0.1f),vec3f(1.0f));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3f(1.0f),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0f,1.0f)));
|
|
395
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
396
|
+
let H: vec3f=(irradianceView+Ls)*0.5f;let VoH: f32=dot(irradianceView,H);diffuseRoughnessTerm=vec3f(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
431
397
|
#endif
|
|
432
|
-
|
|
433
|
-
else if (fragmentInputs.fClipDistance5>0.0)
|
|
434
|
-
{discard;}
|
|
398
|
+
environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
|
|
435
399
|
#endif
|
|
436
|
-
#ifdef CLIPPLANE6
|
|
437
|
-
else if (fragmentInputs.fClipDistance6>0.0)
|
|
438
|
-
{discard;}
|
|
439
400
|
#endif
|
|
440
|
-
|
|
441
|
-
#
|
|
442
|
-
|
|
443
|
-
#elif _DEFINENAME_DIRECTUV==2
|
|
444
|
-
#define v_VARYINGNAME_UV vMainUV2
|
|
445
|
-
#elif _DEFINENAME_DIRECTUV==3
|
|
446
|
-
#define v_VARYINGNAME_UV vMainUV3
|
|
447
|
-
#elif _DEFINENAME_DIRECTUV==4
|
|
448
|
-
#define v_VARYINGNAME_UV vMainUV4
|
|
449
|
-
#elif _DEFINENAME_DIRECTUV==5
|
|
450
|
-
#define v_VARYINGNAME_UV vMainUV5
|
|
451
|
-
#elif _DEFINENAME_DIRECTUV==6
|
|
452
|
-
#define v_VARYINGNAME_UV vMainUV6
|
|
401
|
+
environmentIrradiance*=reflectionInfos.x;return environmentIrradiance;}
|
|
402
|
+
#ifdef REFLECTIONMAP_3D
|
|
403
|
+
fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec3f
|
|
453
404
|
#else
|
|
454
|
-
|
|
455
|
-
#endif
|
|
456
|
-
var _SAMPLERNAME_SamplerSampler: sampler;var _SAMPLERNAME_Sampler: texture_2d<f32>;
|
|
457
|
-
#endif
|
|
458
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["samplerFragmentDeclarationWGSL",0,{name:a,shader:i}],6761);let f="reflectionFunction",n=`fn computeFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f
|
|
459
|
-
{var lon: f32=atan2(direction.z,direction.x);var lat: f32=acos(direction.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(s,t,0); }
|
|
460
|
-
fn computeMirroredFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f
|
|
461
|
-
{var lon: f32=atan2(direction.z,direction.x);var lat: f32=acos(direction.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(1.0-s,t,0); }
|
|
462
|
-
fn computeEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
463
|
-
{var cameraToVertex: vec3f=normalize(worldPos.xyz-eyePosition);var r: vec3f=normalize(reflect(cameraToVertex,worldNormal));r= (reflectionMatrix* vec4f(r,0)).xyz;var lon: f32=atan2(r.z,r.x);var lat: f32=acos(r.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(s,t,0);}
|
|
464
|
-
fn computeSphericalCoords(worldPos: vec4f,worldNormal: vec3f,view: mat4x4f,reflectionMatrix: mat4x4f)->vec3f
|
|
465
|
-
{var viewDir: vec3f=normalize((view*worldPos).xyz);var viewNormal: vec3f=normalize((view* vec4f(worldNormal,0.0)).xyz);var r: vec3f=reflect(viewDir,viewNormal);r= (reflectionMatrix* vec4f(r,0)).xyz;r.z=r.z-1.0;var m: f32=2.0*length(r);return vec3f(r.x/m+0.5,1.0-r.y/m-0.5,0);}
|
|
466
|
-
fn computePlanarCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
467
|
-
{var viewDir: vec3f=worldPos.xyz-eyePosition;var coords: vec3f=normalize(reflect(viewDir,worldNormal));return (reflectionMatrix* vec4f(coords,1)).xyz;}
|
|
468
|
-
fn computeCubicCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
469
|
-
{var viewDir: vec3f=normalize(worldPos.xyz-eyePosition);var coords: vec3f=reflect(viewDir,worldNormal);coords= (reflectionMatrix* vec4f(coords,0)).xyz;
|
|
470
|
-
#ifdef INVERTCUBICMAP
|
|
471
|
-
coords.y*=-1.0;
|
|
472
|
-
#endif
|
|
473
|
-
return coords;}
|
|
474
|
-
fn computeCubicLocalCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f,reflectionSize: vec3f,reflectionPosition: vec3f)->vec3f
|
|
475
|
-
{var viewDir: vec3f=normalize(worldPos.xyz-eyePosition);var coords: vec3f=reflect(viewDir,worldNormal);coords=parallaxCorrectNormal(worldPos.xyz,coords,reflectionSize,reflectionPosition);coords=(reflectionMatrix* vec4f(coords,0)).xyz;
|
|
476
|
-
#ifdef INVERTCUBICMAP
|
|
477
|
-
coords.y*=-1.0;
|
|
478
|
-
#endif
|
|
479
|
-
return coords;}
|
|
480
|
-
fn computeProjectionCoords(worldPos: vec4f,view: mat4x4f,reflectionMatrix: mat4x4f)->vec3f
|
|
481
|
-
{return (reflectionMatrix*(view*worldPos)).xyz;}
|
|
482
|
-
fn computeSkyBoxCoords(positionW: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
483
|
-
{return (reflectionMatrix* vec4f(positionW,1.)).xyz;}
|
|
484
|
-
#ifdef REFLECTION
|
|
485
|
-
fn computeReflectionCoords(worldPos: vec4f,worldNormal: vec3f)->vec3f
|
|
486
|
-
{
|
|
487
|
-
#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
|
|
488
|
-
var direction: vec3f=normalize(fragmentInputs.vDirectionW);return computeMirroredFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
489
|
-
#endif
|
|
490
|
-
#ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
|
|
491
|
-
var direction: vec3f=normalize(fragmentInputs.vDirectionW);return computeFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
492
|
-
#endif
|
|
493
|
-
#ifdef REFLECTIONMAP_EQUIRECTANGULAR
|
|
494
|
-
return computeEquirectangularCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
|
|
495
|
-
#endif
|
|
496
|
-
#ifdef REFLECTIONMAP_SPHERICAL
|
|
497
|
-
return computeSphericalCoords(worldPos,worldNormal,scene.view,uniforms.reflectionMatrix);
|
|
405
|
+
fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec2f
|
|
498
406
|
#endif
|
|
499
|
-
|
|
500
|
-
|
|
407
|
+
{var reflectionVector: vec3f=computeReflectionCoords(vec4f(vPositionW,1.0f),normalW);
|
|
408
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
409
|
+
reflectionVector.z*=-1.0;
|
|
501
410
|
#endif
|
|
502
|
-
#ifdef
|
|
503
|
-
|
|
504
|
-
return computeCubicLocalCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix,uniforms.vReflectionSize,uniforms.vReflectionPosition);
|
|
411
|
+
#ifdef REFLECTIONMAP_3D
|
|
412
|
+
var reflectionCoords: vec3f=reflectionVector;
|
|
505
413
|
#else
|
|
506
|
-
|
|
507
|
-
#endif
|
|
508
|
-
#endif
|
|
414
|
+
var reflectionCoords: vec2f=reflectionVector.xy;
|
|
509
415
|
#ifdef REFLECTIONMAP_PROJECTION
|
|
510
|
-
|
|
511
|
-
#endif
|
|
512
|
-
#ifndef REFLECTIONMAP_CUBIC
|
|
513
|
-
#ifdef REFLECTIONMAP_SKYBOX
|
|
514
|
-
return computeSkyBoxCoords(fragmentInputs.vPositionUVW,uniforms.reflectionMatrix);
|
|
515
|
-
#endif
|
|
516
|
-
#endif
|
|
517
|
-
#ifdef REFLECTIONMAP_EXPLICIT
|
|
518
|
-
return vec3f(0,0,0);
|
|
416
|
+
reflectionCoords/=reflectionVector.z;
|
|
519
417
|
#endif
|
|
520
|
-
|
|
418
|
+
reflectionCoords.y=1.0f-reflectionCoords.y;
|
|
521
419
|
#endif
|
|
522
|
-
|
|
420
|
+
return reflectionCoords;}
|
|
421
|
+
fn sampleRadiance(
|
|
422
|
+
alphaG: f32
|
|
423
|
+
,reflectionMicrosurfaceInfos: vec3f
|
|
424
|
+
,reflectionInfos: vec2f
|
|
425
|
+
,geoInfo: geometryInfoOutParams
|
|
523
426
|
#ifdef REFLECTIONMAP_3D
|
|
524
|
-
|
|
525
|
-
|
|
427
|
+
,reflectionSampler: texture_cube<f32>
|
|
428
|
+
,reflectionSamplerSampler: sampler
|
|
429
|
+
,reflectionCoords: vec3f
|
|
526
430
|
#else
|
|
527
|
-
|
|
431
|
+
,reflectionSampler: texture_2d<f32>
|
|
432
|
+
,reflectionSamplerSampler: sampler
|
|
433
|
+
,reflectionCoords: vec2f
|
|
528
434
|
#endif
|
|
529
|
-
#ifdef
|
|
530
|
-
|
|
435
|
+
#ifdef REALTIME_FILTERING
|
|
436
|
+
,reflectionFilteringInfo: vec2f
|
|
531
437
|
#endif
|
|
438
|
+
)->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f);
|
|
439
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
440
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
441
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
442
|
+
var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness);
|
|
532
443
|
#else
|
|
533
|
-
var
|
|
534
|
-
#
|
|
444
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG);
|
|
445
|
+
#endif
|
|
446
|
+
reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z;
|
|
447
|
+
#ifdef REALTIME_FILTERING
|
|
448
|
+
environmentRadiance=vec4f(radiance(alphaG,reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionFilteringInfo),1.0f);
|
|
535
449
|
#else
|
|
536
|
-
|
|
450
|
+
environmentRadiance=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
|
|
537
451
|
#endif
|
|
538
|
-
|
|
539
|
-
|
|
452
|
+
var envRadiance: vec3f=environmentRadiance.rgb;
|
|
453
|
+
#ifdef RGBDREFLECTION
|
|
454
|
+
envRadiance=fromRGBD(environmentRadiance);
|
|
540
455
|
#endif
|
|
456
|
+
#ifdef GAMMAREFLECTION
|
|
457
|
+
envRadiance=toLinearSpaceVec3(environmentRadiance.rgb);
|
|
541
458
|
#endif
|
|
542
|
-
|
|
543
|
-
|
|
459
|
+
envRadiance*=reflectionInfos.x;return envRadiance;}
|
|
460
|
+
#if defined(ANISOTROPIC)
|
|
461
|
+
fn sampleRadianceAnisotropic(
|
|
462
|
+
alphaG: f32
|
|
463
|
+
,reflectionMicrosurfaceInfos: vec3f
|
|
464
|
+
,reflectionInfos: vec2f
|
|
465
|
+
,geoInfo: geometryInfoAnisoOutParams
|
|
466
|
+
,normalW: vec3f
|
|
467
|
+
,viewDirectionW: vec3f
|
|
468
|
+
,positionW: vec3f
|
|
469
|
+
,noise: vec3f
|
|
470
|
+
,isRefraction: bool
|
|
471
|
+
,ior: f32
|
|
472
|
+
#ifdef REFLECTIONMAP_3D
|
|
473
|
+
,reflectionSampler: texture_cube<f32>
|
|
474
|
+
,reflectionSamplerSampler: sampler
|
|
544
475
|
#else
|
|
545
|
-
|
|
546
|
-
|
|
476
|
+
,reflectionSampler: texture_2d<f32>
|
|
477
|
+
,reflectionSamplerSampler: sampler
|
|
547
478
|
#endif
|
|
479
|
+
#ifdef REALTIME_FILTERING
|
|
480
|
+
,reflectionFilteringInfo: vec2f
|
|
548
481
|
#endif
|
|
482
|
+
)->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f);let alphaT=alphaG*sqrt(2.0f/(1.0f+(1.0f-geoInfo.anisotropy)*(1.0f-geoInfo.anisotropy)));let alphaB=(1.0f-geoInfo.anisotropy)*alphaT;let modifiedAlphaG=alphaB;
|
|
483
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
484
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG,geoInfo.NdotVUnclamped);
|
|
485
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
486
|
+
var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness);
|
|
487
|
+
#else
|
|
488
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG);
|
|
549
489
|
#endif
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
490
|
+
reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z;
|
|
491
|
+
#ifdef REALTIME_FILTERING
|
|
492
|
+
var view=(uniforms.reflectionMatrix*vec4f(viewDirectionW,0.0f)).xyz;var tangent=(uniforms.reflectionMatrix*vec4f(geoInfo.anisotropicTangent,0.0f)).xyz;var bitangent=(uniforms.reflectionMatrix*vec4f(geoInfo.anisotropicBitangent,0.0f)).xyz;var normal=(uniforms.reflectionMatrix*vec4f(normalW,0.0f)).xyz;
|
|
493
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
494
|
+
view.z*=-1.0f;tangent.z*=-1.0f;bitangent.z*=-1.0f;normal.z*=-1.0f;
|
|
553
495
|
#endif
|
|
554
|
-
|
|
555
|
-
|
|
496
|
+
environmentRadiance =
|
|
497
|
+
vec4f(radianceAnisotropic(alphaT,alphaB,reflectionSampler,reflectionSamplerSampler,
|
|
498
|
+
view,tangent,
|
|
499
|
+
bitangent,normal,
|
|
500
|
+
reflectionFilteringInfo,noise.xy,isRefraction,ior),
|
|
501
|
+
1.0f);
|
|
502
|
+
#else
|
|
503
|
+
const samples: i32=16;var radianceSample=vec4f(0.0);var accumulatedRadiance=vec3f(0.0);var reflectionCoords=vec3f(0.0);var sample_weight=0.0f;var total_weight=0.0f;let step=1.0f/f32(max(samples-1,1));for (var i: i32=0; i<samples; i++) {var t: f32=mix(-1.0,1.0,f32(i)*step);t+=step*2.0*noise.x;sample_weight=max(1.0-abs(t),0.001);sample_weight*=sample_weight;t*=min(4.0*alphaT*geoInfo.anisotropy,1.0);var bentNormal: vec3f;if (t<0.0) {let blend: f32=t+1.0;bentNormal=normalize(mix(-geoInfo.anisotropicTangent,normalW,blend));} else if (t>0.0) {let blend: f32=t;bentNormal=normalize(mix(normalW,geoInfo.anisotropicTangent,blend));} else {bentNormal=normalW;}
|
|
504
|
+
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
505
|
+
reflectionCoords=(uniforms.reflectionMatrix*vec4f(reflectionCoords,0.f)).xyz;
|
|
506
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
507
|
+
reflectionCoords.z*=-1.0f;
|
|
556
508
|
#endif
|
|
557
|
-
|
|
558
|
-
|
|
509
|
+
radianceSample=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
|
|
510
|
+
#ifdef RGBDREFLECTION
|
|
511
|
+
accumulatedRadiance+=vec3f(sample_weight)*fromRGBD(radianceSample);
|
|
512
|
+
#elif defined(GAMMAREFLECTION)
|
|
513
|
+
accumulatedRadiance+=vec3f(sample_weight)*toLinearSpaceVec3(radianceSample.rgb);
|
|
514
|
+
#else
|
|
515
|
+
accumulatedRadiance+=vec3f(sample_weight)*radianceSample.rgb;
|
|
559
516
|
#endif
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
fn getLodFromAlphaGNdotV(cubeMapDimensionPixels: f32,alphaG: f32,NdotV: f32)->f32 {var microsurfaceAverageSlope: f32=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
|
|
517
|
+
total_weight+=sample_weight;}
|
|
518
|
+
environmentRadiance=vec4f(accumulatedRadiance/vec3f(total_weight),1.0f);
|
|
563
519
|
#endif
|
|
564
|
-
|
|
565
|
-
{F0: f32,
|
|
566
|
-
F90: f32,
|
|
567
|
-
coloredF0: vec3f,
|
|
568
|
-
coloredF90: vec3f,};
|
|
569
|
-
#define pbr_inline
|
|
570
|
-
fn dielectricReflectance(
|
|
571
|
-
insideIOR: f32,outsideIOR: f32,specularColor: vec3f,specularWeight: f32
|
|
572
|
-
)->ReflectanceParams
|
|
573
|
-
{var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);
|
|
574
|
-
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
575
|
-
let maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight;
|
|
576
|
-
#else
|
|
577
|
-
outParams.F0=dielectricF0*specularWeight;
|
|
520
|
+
environmentRadiance=vec4f(environmentRadiance.rgb*reflectionInfos.xxx,environmentRadiance.a);return environmentRadiance.rgb;}
|
|
578
521
|
#endif
|
|
579
|
-
let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f);outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;
|
|
580
|
-
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
581
|
-
let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale)*specularWeight;
|
|
582
|
-
#else
|
|
583
|
-
let dielectricColorF90: vec3f=vec3f(f90Scale)*specularWeight;
|
|
584
522
|
#endif
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
{
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
NdotVUnclamped: f32,
|
|
593
|
-
environmentBrdf: vec3f,
|
|
594
|
-
horizonOcclusion: f32,
|
|
595
|
-
anisotropy: f32,
|
|
596
|
-
anisotropicTangent: vec3f,
|
|
597
|
-
anisotropicBitangent: vec3f,
|
|
598
|
-
TBN: mat3x3<f32>};fn geometryInfo(
|
|
599
|
-
normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
|
|
600
|
-
)->geometryInfoOutParams
|
|
601
|
-
{var outParams: geometryInfoOutParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
602
|
-
#if defined(ENVIRONMENTBRDF)
|
|
603
|
-
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
523
|
+
#ifdef ENVIRONMENTBRDF
|
|
524
|
+
fn computeDielectricIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->f32
|
|
525
|
+
{let dielectricIblFresnel: f32=getReflectanceFromBRDFWithEnvLookup(vec3f(reflectance.F0),vec3f(reflectance.F90),environmentBrdf).r;let dielectricECF: f32=1.0+reflectance.F0*(1.0/environmentBrdf.y-1.0);return clamp(dielectricIblFresnel*dielectricECF,0.0,1.0);}
|
|
526
|
+
fn computeConductorIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->vec3f
|
|
527
|
+
{
|
|
528
|
+
#if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
|
|
529
|
+
let openPBRBrdf: vec3f=vec3f(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);let b: vec3f =getF82B(reflectance.coloredF0,reflectance.coloredF90);let E_F82: vec3f=getF82DirectionalAlbedo(reflectance.coloredF0,vec3f(1.0),b,openPBRBrdf);let F_avg: vec3f=getF82AverageFresnel(reflectance.coloredF0,b);let ECF: vec3f =vec3f(1.0)+F_avg*(vec3f(1.0)/openPBRBrdf.y-vec3f(1.0));return clamp(E_F82*ECF,vec3f(0.0),vec3f(1.0));
|
|
604
530
|
#else
|
|
605
|
-
|
|
531
|
+
return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
|
|
606
532
|
#endif
|
|
607
|
-
|
|
608
|
-
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
609
|
-
#ifdef HORIZONOCCLUSION
|
|
610
|
-
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
611
|
-
#ifdef REFLECTIONMAP_3D
|
|
612
|
-
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
533
|
+
}
|
|
613
534
|
#endif
|
|
535
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[t]||(r.ShaderStore.IncludesShadersStoreWGSL[t]=o),e.s(["openpbrIblFunctionsWGSL",0,{name:t,shader:o}],32895)},57630,e=>{"use strict";var r=e.i(2342);let a="openpbrSubsurfaceLayerData",i=`var subsurface_weight: f32=uniforms.vSubsurfaceWeight;var subsurface_color: vec3f=uniforms.vSubsurfaceColor.rgb;var subsurface_radius: f32=uniforms.vSubsurfaceRadius;var subsurface_radius_scale: vec3f=uniforms.vSubsurfaceRadiusScale;var subsurface_scatter_anisotropy: f32=clamp(uniforms.vSubsurfaceScatterAnisotropy,-0.9999f,0.9999f);
|
|
536
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
537
|
+
let subsurfaceWeightFromTexture: vec4f=TEXRD(subsurfaceWeightSampler,subsurfaceWeightSamplerSampler,fragmentInputs.vSubsurfaceWeightUV+uvOffset);
|
|
614
538
|
#endif
|
|
539
|
+
#ifdef SUBSURFACE_COLOR
|
|
540
|
+
let subsurfaceColorFromTexture: vec4f=TEXRD(subsurfaceColorSampler,subsurfaceColorSamplerSampler,fragmentInputs.vSubsurfaceColorUV+uvOffset);
|
|
615
541
|
#endif
|
|
542
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
543
|
+
let subsurfaceRadiusScaleFromTexture: vec4f=TEXRD(subsurfaceRadiusScaleSampler,subsurfaceRadiusScaleSamplerSampler,fragmentInputs.vSubsurfaceRadiusScaleUV+uvOffset);
|
|
616
544
|
#endif
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
{let geoInfo: geometryInfoOutParams=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);var outParams: geometryInfoAnisoOutParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;let anisotropyDirection: vec3f=vec3f(vAnisotropy.xy,0.);let anisoTBN: mat3x3<f32>=mat3x3<f32>(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;}
|
|
623
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["openpbrGeometryInfoWGSL",0,{name:f,shader:n}],98433);let t="openpbrIblFunctions",o=`#ifdef REFLECTION
|
|
624
|
-
fn sampleIrradiance(
|
|
625
|
-
surfaceNormal: vec3f
|
|
626
|
-
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
627
|
-
,vEnvironmentIrradianceSH: vec3f
|
|
545
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
546
|
+
#ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA
|
|
547
|
+
subsurface_weight*=subsurfaceWeightFromTexture.a;
|
|
548
|
+
#else
|
|
549
|
+
subsurface_weight*=subsurfaceWeightFromTexture.r;
|
|
628
550
|
#endif
|
|
629
|
-
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
630
|
-
,iblMatrix: mat4x4f
|
|
631
551
|
#endif
|
|
632
|
-
#ifdef
|
|
633
|
-
#ifdef
|
|
634
|
-
|
|
635
|
-
,irradianceSamplerSampler: sampler
|
|
552
|
+
#ifdef SUBSURFACE_COLOR
|
|
553
|
+
#ifdef SUBSURFACE_COLOR_GAMMA
|
|
554
|
+
subsurface_color*=toLinearSpaceVec3(subsurfaceColorFromTexture.rgb);
|
|
636
555
|
#else
|
|
637
|
-
|
|
638
|
-
,irradianceSamplerSampler: sampler
|
|
639
|
-
#endif
|
|
640
|
-
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
641
|
-
,reflectionDominantDirection: vec3f
|
|
556
|
+
subsurface_color*=subsurfaceColorFromTexture.rgb;
|
|
642
557
|
#endif
|
|
558
|
+
subsurface_color*=uniforms.vSubsurfaceColorInfos.y;
|
|
643
559
|
#endif
|
|
644
|
-
#ifdef
|
|
645
|
-
|
|
646
|
-
#ifdef IBL_CDF_FILTERING
|
|
647
|
-
,icdfSampler: texture_2d<f32>
|
|
648
|
-
,icdfSamplerSampler: sampler
|
|
560
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
561
|
+
subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
|
|
649
562
|
#endif
|
|
563
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrSubsurfaceLayerDataWGSL",0,{name:a,shader:i}])},86682,e=>{"use strict";var r=e.i(2342);let a="openpbrTransmissionLayerData",i=`var transmission_weight: f32=uniforms.vTransmissionWeight;var transmission_color: vec3f=uniforms.vTransmissionColor.rgb;var transmission_depth: f32=uniforms.vTransmissionDepth;var transmission_scatter: vec3f=uniforms.vTransmissionScatter.rgb;var transmission_scatter_anisotropy: f32=clamp(uniforms.vTransmissionScatterAnisotropy,-0.9999f,0.9999f);var transmission_dispersion_scale: f32=uniforms.vTransmissionDispersionScale;var transmission_dispersion_abbe_number: f32=uniforms.vTransmissionDispersionAbbeNumber;
|
|
564
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
565
|
+
let transmissionWeightFromTexture: vec4f=TEXRD(transmissionWeightSampler,transmissionWeightSamplerSampler,fragmentInputs.vTransmissionWeightUV+uvOffset);
|
|
650
566
|
#endif
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
,diffuseRoughness: f32
|
|
654
|
-
,surfaceAlbedo: vec3f
|
|
655
|
-
)->vec3f {var environmentIrradiance=vec3f(0.,0.,0.);
|
|
656
|
-
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
657
|
-
var irradianceVector=(iblMatrix*vec4f(surfaceNormal,0.0f)).xyz;var irradianceView=(iblMatrix*vec4f(viewDirectionW,0.0f)).xyz;
|
|
658
|
-
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
659
|
-
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
660
|
-
{let NdotV=max(dot(surfaceNormal,viewDirectionW),0.0f);irradianceVector=mix(irradianceVector,irradianceView,(0.5f*(1.0f-NdotV))*diffuseRoughness);}
|
|
567
|
+
#ifdef TRANSMISSION_COLOR
|
|
568
|
+
let transmissionColorFromTexture: vec4f=TEXRD(transmissionColorSampler,transmissionColorSamplerSampler,fragmentInputs.vTransmissionColorUV+uvOffset);
|
|
661
569
|
#endif
|
|
570
|
+
#ifdef TRANSMISSION_DEPTH
|
|
571
|
+
let transmissionDepthFromTexture: vec4f=TEXRD(transmissionDepthSampler,transmissionDepthSamplerSampler,fragmentInputs.vTransmissionDepthUV+uvOffset);
|
|
662
572
|
#endif
|
|
663
|
-
#ifdef
|
|
664
|
-
|
|
573
|
+
#ifdef TRANSMISSION_SCATTER
|
|
574
|
+
let transmissionScatterFromTexture: vec4f=TEXRD(transmissionScatterSampler,transmissionScatterSamplerSampler,fragmentInputs.vTransmissionScatterUV+uvOffset);
|
|
665
575
|
#endif
|
|
666
|
-
#ifdef
|
|
667
|
-
|
|
576
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
577
|
+
let transmissionDispersionScaleFromTexture: vec4f=TEXRD(transmissionDispersionScaleSampler,transmissionDispersionScaleSamplerSampler,fragmentInputs.vTransmissionDispersionScaleUV+uvOffset);
|
|
668
578
|
#endif
|
|
579
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
580
|
+
transmission_weight*=transmissionWeightFromTexture.r;
|
|
669
581
|
#endif
|
|
670
|
-
#ifdef
|
|
671
|
-
#
|
|
672
|
-
|
|
582
|
+
#ifdef TRANSMISSION_COLOR
|
|
583
|
+
#ifdef TRANSMISSION_COLOR_GAMMA
|
|
584
|
+
transmission_color*=toLinearSpaceVec3(transmissionColorFromTexture.rgb);
|
|
673
585
|
#else
|
|
674
|
-
|
|
675
|
-
environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,reflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
676
|
-
#ifdef IBL_CDF_FILTERING
|
|
677
|
-
,icdfSampler
|
|
678
|
-
,icdfSamplerSampler
|
|
586
|
+
transmission_color*=transmissionColorFromTexture.rgb;
|
|
679
587
|
#endif
|
|
680
|
-
|
|
681
|
-
#else
|
|
682
|
-
environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
|
|
588
|
+
transmission_color*=uniforms.vTransmissionColorInfos.y;
|
|
683
589
|
#endif
|
|
590
|
+
#ifdef TRANSMISSION_DEPTH
|
|
591
|
+
transmission_depth*=transmissionDepthFromTexture.r;
|
|
684
592
|
#endif
|
|
685
|
-
#
|
|
686
|
-
|
|
687
|
-
let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,irradianceVector);
|
|
688
|
-
#else
|
|
689
|
-
let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,reflectionCoords);
|
|
593
|
+
#ifdef TRANSMISSION_SCATTER
|
|
594
|
+
transmission_scatter*=transmissionScatterFromTexture.rgb;
|
|
690
595
|
#endif
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
596
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
597
|
+
transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
|
|
694
598
|
#endif
|
|
695
|
-
|
|
696
|
-
|
|
599
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrTransmissionLayerDataWGSL",0,{name:a,shader:i}])},51052,e=>{"use strict";var r=e.i(2342);let a="pbrBRDFFunctions",i=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25
|
|
600
|
+
#define BRDF_DIFFUSE_MODEL_EON 0
|
|
601
|
+
#define BRDF_DIFFUSE_MODEL_BURLEY 1
|
|
602
|
+
#define BRDF_DIFFUSE_MODEL_LAMBERT 2
|
|
603
|
+
#define BRDF_DIFFUSE_MODEL_LEGACY 3
|
|
604
|
+
#define DIELECTRIC_SPECULAR_MODEL_GLTF 0
|
|
605
|
+
#define DIELECTRIC_SPECULAR_MODEL_OPENPBR 1
|
|
606
|
+
#define CONDUCTOR_SPECULAR_MODEL_GLTF 0
|
|
607
|
+
#define CONDUCTOR_SPECULAR_MODEL_OPENPBR 1
|
|
608
|
+
#if !defined(PBR_VERTEX_SHADER) && !defined(OPENPBR_VERTEX_SHADER)
|
|
609
|
+
#ifdef MS_BRDF_ENERGY_CONSERVATION
|
|
610
|
+
fn getEnergyConservationFactor(specularEnvironmentR0: vec3f,environmentBrdf: vec3f)->vec3f {return 1.0+specularEnvironmentR0*(1.0/environmentBrdf.y-1.0);}
|
|
697
611
|
#endif
|
|
698
|
-
#
|
|
699
|
-
let
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
let H: vec3f=(irradianceView+Ls)*0.5f;let VoH: f32=dot(irradianceView,H);diffuseRoughnessTerm=vec3f(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
612
|
+
#if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR
|
|
613
|
+
const F82_COS_THETA_MAX: f32 =0.142857143;const F82_ONE_MINUS_CTM_POW5: f32 =0.462664366;const F82_ONE_MINUS_CTM_POW6: f32 =0.396569457;const F82_B_DENOMINATOR_RECIP: f32 =17.6512785;const BRDF_Z_SCALE: f32 =16.0;fn getF82Specular(NdotV: f32,F0: vec3f,edgeTint: vec3f,roughness: f32)->vec3f {let white_minus_F0: vec3f=vec3f(1.0f)-F0;let b_numerator: vec3f=(F0+white_minus_F0*F82_ONE_MINUS_CTM_POW5)*(vec3f(1.0)-edgeTint);let b: vec3f=b_numerator*F82_B_DENOMINATOR_RECIP;let cos_theta: f32=max(roughness,NdotV);let one_minus_cos_theta: f32=1.0-cos_theta;let offset_from_F0: vec3f=(white_minus_F0-b*cos_theta*one_minus_cos_theta)*pow(one_minus_cos_theta,5.0f);return clamp(F0+offset_from_F0,vec3f(0.0f),vec3f(1.0f));}
|
|
614
|
+
fn getF82B(F0: vec3f,edgeTint: vec3f)->vec3f {return (F0+(vec3f(1.0)-F0)*F82_ONE_MINUS_CTM_POW5)*(vec3f(1.0)-edgeTint)*F82_B_DENOMINATOR_RECIP;}
|
|
615
|
+
fn getF82DirectionalAlbedo(F0: vec3f,F90: vec3f,b: vec3f,environmentBrdf: vec3f)->vec3f {return (F90-F0)*environmentBrdf.x+F0*environmentBrdf.y-b*environmentBrdf.z;}
|
|
616
|
+
fn getF82AverageFresnel(F0: vec3f,b: vec3f)->vec3f {return F0+(vec3f(1.0)-F0)/21.0-b/126.0;}
|
|
704
617
|
#endif
|
|
705
|
-
|
|
618
|
+
#ifdef FUZZENVIRONMENTBRDF
|
|
619
|
+
fn getFuzzBRDFLookup(NdotV: f32,perceptualRoughness: f32)->vec3f {let UV: vec2f=vec2f(perceptualRoughness,NdotV);var brdfLookup: vec4f=textureSample(environmentFuzzBrdfSampler,environmentFuzzBrdfSamplerSampler,UV);const RiRange: vec2f=vec2f(0.0f,0.75f);const ARange: vec2f=vec2f(0.005f,0.88f);const BRange: vec2f=vec2f(-0.18f,0.002f);brdfLookup.r=mix(ARange.x, ARange.y, brdfLookup.r);brdfLookup.g=mix(BRange.x, BRange.y, brdfLookup.g);brdfLookup.b=mix(RiRange.x,RiRange.y,brdfLookup.b);return brdfLookup.rgb;}
|
|
706
620
|
#endif
|
|
621
|
+
#ifdef ENVIRONMENTBRDF
|
|
622
|
+
fn getBRDFLookup(NdotV: f32,perceptualRoughness: f32)->vec3f {var UV: vec2f= vec2f(NdotV,perceptualRoughness);var brdfLookup: vec4f= textureSample(environmentBrdfSampler,environmentBrdfSamplerSampler,UV);
|
|
623
|
+
#ifdef ENVIRONMENTBRDF_RGBD
|
|
624
|
+
brdfLookup=vec4f(fromRGBD(brdfLookup.rgba),brdfLookup.a);
|
|
707
625
|
#endif
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
626
|
+
return brdfLookup.rgb;}
|
|
627
|
+
fn getReflectanceFromBRDFWithEnvLookup(specularEnvironmentR0: vec3f,specularEnvironmentR90: vec3f,environmentBrdf: vec3f)->vec3f {
|
|
628
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
629
|
+
var reflectance: vec3f=(specularEnvironmentR90-specularEnvironmentR0)*environmentBrdf.x+specularEnvironmentR0*environmentBrdf.y;
|
|
711
630
|
#else
|
|
712
|
-
|
|
713
|
-
#endif
|
|
714
|
-
{var reflectionVector: vec3f=computeReflectionCoords(vec4f(vPositionW,1.0f),normalW);
|
|
715
|
-
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
716
|
-
reflectionVector.z*=-1.0;
|
|
631
|
+
var reflectance: vec3f=specularEnvironmentR0*environmentBrdf.x+specularEnvironmentR90*environmentBrdf.y;
|
|
717
632
|
#endif
|
|
718
|
-
|
|
719
|
-
|
|
633
|
+
return reflectance;}
|
|
634
|
+
fn getReflectanceFromBRDFLookup(specularEnvironmentR0: vec3f,environmentBrdf: vec3f)->vec3f {
|
|
635
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
636
|
+
var reflectance: vec3f=mix(environmentBrdf.xxx,environmentBrdf.yyy,specularEnvironmentR0);
|
|
720
637
|
#else
|
|
721
|
-
var
|
|
722
|
-
#ifdef REFLECTIONMAP_PROJECTION
|
|
723
|
-
reflectionCoords/=reflectionVector.z;
|
|
638
|
+
var reflectance: vec3f=specularEnvironmentR0*environmentBrdf.x+environmentBrdf.y;
|
|
724
639
|
#endif
|
|
725
|
-
|
|
640
|
+
return reflectance;}
|
|
726
641
|
#endif
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
#
|
|
734
|
-
,
|
|
735
|
-
|
|
736
|
-
|
|
642
|
+
/* NOT USED
|
|
643
|
+
#if defined(SHEEN) && defined(SHEEN_SOFTER)
|
|
644
|
+
fn getBRDFLookupCharlieSheen(NdotV: f32,perceptualRoughness: f32)->f32
|
|
645
|
+
{var c: f32=1.0-NdotV;var c3: f32=c*c*c;return 0.65584461*c3+1.0/(4.16526551+exp(-7.97291361*perceptualRoughness+6.33516894));}
|
|
646
|
+
#endif
|
|
647
|
+
*/
|
|
648
|
+
#if !defined(ENVIRONMENTBRDF) || defined(REFLECTIONMAP_SKYBOX) || defined(ALPHAFRESNEL)
|
|
649
|
+
fn getReflectanceFromAnalyticalBRDFLookup_Jones(VdotN: f32,reflectance0: vec3f,reflectance90: vec3f,smoothness: f32)->vec3f
|
|
650
|
+
{var weight: f32=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);return reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));}
|
|
651
|
+
#endif
|
|
652
|
+
#if defined(SHEEN) && defined(ENVIRONMENTBRDF)
|
|
653
|
+
/**
|
|
654
|
+
* The sheen BRDF not containing F can be easily stored in the blue channel of the BRDF texture.
|
|
655
|
+
* The blue channel contains DCharlie*VAshikhmin*NdotL as a lokkup table
|
|
656
|
+
*/
|
|
657
|
+
fn getSheenReflectanceFromBRDFLookup(reflectance0: vec3f,environmentBrdf: vec3f)->vec3f {var sheenEnvironmentReflectance: vec3f=reflectance0*environmentBrdf.b;return sheenEnvironmentReflectance;}
|
|
658
|
+
#endif
|
|
659
|
+
fn fresnelSchlickGGXVec3(VdotH: f32,reflectance0: vec3f,reflectance90: vec3f)->vec3f
|
|
660
|
+
{return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);}
|
|
661
|
+
fn fresnelSchlickGGX(VdotH: f32,reflectance0: f32,reflectance90: f32)->f32
|
|
662
|
+
{return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);}
|
|
663
|
+
#ifdef CLEARCOAT
|
|
664
|
+
fn getR0RemappedForClearCoat(f0: vec3f)->vec3f {
|
|
665
|
+
#ifdef CLEARCOAT_DEFAULTIOR
|
|
666
|
+
#ifdef MOBILE
|
|
667
|
+
return saturateVec3(f0*(f0*0.526868+0.529324)-0.0482256);
|
|
737
668
|
#else
|
|
738
|
-
|
|
739
|
-
,reflectionSamplerSampler: sampler
|
|
740
|
-
,reflectionCoords: vec2f
|
|
669
|
+
return saturateVec3(f0*(f0*(0.941892-0.263008*f0)+0.346479)-0.0285998);
|
|
741
670
|
#endif
|
|
742
|
-
#
|
|
743
|
-
|
|
671
|
+
#else
|
|
672
|
+
var s: vec3f=sqrt(f0);var t: vec3f=(uniforms.vClearCoatRefractionParams.z+uniforms.vClearCoatRefractionParams.w*s)/(uniforms.vClearCoatRefractionParams.w+uniforms.vClearCoatRefractionParams.z*s);return squareVec3(t);
|
|
744
673
|
#endif
|
|
745
|
-
|
|
746
|
-
#
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
674
|
+
}
|
|
675
|
+
#endif
|
|
676
|
+
#ifdef IRIDESCENCE
|
|
677
|
+
const XYZ_TO_REC709: mat3x3f= mat3x3f(
|
|
678
|
+
3.2404542,-0.9692660, 0.0556434,
|
|
679
|
+
-1.5371385, 1.8760108,-0.2040259,
|
|
680
|
+
-0.4985314, 0.0415560, 1.0572252
|
|
681
|
+
);fn getIORTfromAirToSurfaceR0(f0: vec3f)->vec3f {var sqrtF0: vec3f=sqrt(f0);return (1.+sqrtF0)/(1.-sqrtF0);}
|
|
682
|
+
fn getR0fromIORsVec3(iorT: vec3f,iorI: f32)->vec3f {return squareVec3((iorT- vec3f(iorI))/(iorT+ vec3f(iorI)));}
|
|
683
|
+
fn getR0fromIORs(iorT: f32,iorI: f32)->f32 {return square((iorT-iorI)/(iorT+iorI));}
|
|
684
|
+
fn evalSensitivity(opd: f32,shift: vec3f)->vec3f {var phase: f32=2.0*PI*opd*1.0e-9;const val: vec3f= vec3f(5.4856e-13,4.4201e-13,5.2481e-13);const pos: vec3f= vec3f(1.6810e+06,1.7953e+06,2.2084e+06);const vr: vec3f= vec3f(4.3278e+09,9.3046e+09,6.6121e+09);var xyz: vec3f=val*sqrt(2.0*PI*vr)*cos(pos*phase+shift)*exp(-square(phase)*vr);xyz.x+=9.7470e-14*sqrt(2.0*PI*4.5282e+09)*cos(2.2399e+06*phase+shift[0])*exp(-4.5282e+09*square(phase));xyz/=1.0685e-7;var srgb: vec3f=XYZ_TO_REC709*xyz;return srgb;}
|
|
685
|
+
fn evalIridescence(outsideIOR: f32,eta2: f32,cosTheta1: f32,thinFilmThickness: f32,baseF0: vec3f)->vec3f {var I: vec3f= vec3f(1.0);var iridescenceIOR: f32=mix(outsideIOR,eta2,smoothstep(0.0,0.03,thinFilmThickness));var sinTheta2Sq: f32=square(outsideIOR/iridescenceIOR)*(1.0-square(cosTheta1));var cosTheta2Sq: f32=1.0-sinTheta2Sq;if (cosTheta2Sq<0.0) {return I;}
|
|
686
|
+
var cosTheta2: f32=sqrt(cosTheta2Sq);var R0: f32=getR0fromIORs(iridescenceIOR,outsideIOR);var R12: f32=fresnelSchlickGGX(cosTheta1,R0,1.);var R21: f32=R12;var T121: f32=1.0-R12;var phi12: f32=0.0;if (iridescenceIOR<outsideIOR) {phi12=PI;}
|
|
687
|
+
var phi21: f32=PI-phi12;var baseIOR: vec3f=getIORTfromAirToSurfaceR0(clamp(baseF0,vec3f(0.0),vec3f(0.9999)));
|
|
688
|
+
var R1: vec3f=getR0fromIORsVec3(baseIOR,iridescenceIOR);let maxR1: f32=max(R1.r,max(R1.g,R1.b));if (maxR1<1e-6) {return max(vec3f(R12),vec3f(0.0));}
|
|
689
|
+
var R23: vec3f=fresnelSchlickGGXVec3(cosTheta2,R1,vec3f(1.));var phi23: vec3f=vec3f(0.0);if (baseIOR[0]<iridescenceIOR) {phi23[0]=PI;}
|
|
690
|
+
if (baseIOR[1]<iridescenceIOR) {phi23[1]=PI;}
|
|
691
|
+
if (baseIOR[2]<iridescenceIOR) {phi23[2]=PI;}
|
|
692
|
+
var opd: f32=2.0*iridescenceIOR*thinFilmThickness*cosTheta2;var phi: vec3f=vec3f(phi21)+phi23;var R123: vec3f=clamp(R12*R23,vec3f(1e-5),vec3f(0.9999));var r123: vec3f=sqrt(R123);var Rs: vec3f=(T121*T121)*R23/(vec3f(1.0)-R123);var C0: vec3f=R12+Rs;I=C0;var Cm: vec3f=Rs-T121;for (var m: i32=1; m<=2; m++)
|
|
693
|
+
{Cm*=r123;var Sm: vec3f=2.0*evalSensitivity(f32(m)*opd,f32(m)*phi);I+=Cm*Sm;}
|
|
694
|
+
return max(I,vec3f(0.0));}
|
|
695
|
+
#endif
|
|
696
|
+
fn normalDistributionFunction_TrowbridgeReitzGGX(NdotH: f32,alphaG: f32)->f32
|
|
697
|
+
{var a2: f32=alphaG*alphaG;var d: f32=NdotH*NdotH*(a2-1.0)+1.0;return a2/(PI*d*d);}
|
|
698
|
+
#ifdef SHEEN
|
|
699
|
+
fn normalDistributionFunction_CharlieSheen(NdotH: f32,alphaG: f32)->f32
|
|
700
|
+
{var invR: f32=1./alphaG;var cos2h: f32=NdotH*NdotH;var sin2h: f32=1.-cos2h;return (2.+invR)*pow(sin2h,invR*.5)/(2.*PI);}
|
|
701
|
+
#endif
|
|
702
|
+
#ifdef ANISOTROPIC
|
|
703
|
+
fn normalDistributionFunction_BurleyGGX_Anisotropic(NdotH: f32,TdotH: f32,BdotH: f32,alphaTB: vec2f)->f32 {var a2: f32=alphaTB.x*alphaTB.y;var v: vec3f= vec3f(alphaTB.y*TdotH,alphaTB.x *BdotH,a2*NdotH);var v2: f32=dot(v,v);var w2: f32=a2/v2;return a2*w2*w2*RECIPROCAL_PI;}
|
|
704
|
+
#endif
|
|
705
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
706
|
+
fn smithVisibility_GGXCorrelated(NdotL: f32,NdotV: f32,alphaG: f32)->f32 {
|
|
707
|
+
#ifdef MOBILE
|
|
708
|
+
var GGXV: f32=NdotL*(NdotV*(1.0-alphaG)+alphaG);var GGXL: f32=NdotV*(NdotL*(1.0-alphaG)+alphaG);return 0.5/(GGXV+GGXL);
|
|
750
709
|
#else
|
|
751
|
-
var
|
|
710
|
+
var a2: f32=alphaG*alphaG;var GGXV: f32=NdotL*sqrt(NdotV*(NdotV-a2*NdotV)+a2);var GGXL: f32=NdotV*sqrt(NdotL*(NdotL-a2*NdotL)+a2);return 0.5/(GGXV+GGXL);
|
|
752
711
|
#endif
|
|
753
|
-
|
|
754
|
-
#
|
|
755
|
-
|
|
712
|
+
}
|
|
713
|
+
#else
|
|
714
|
+
fn smithVisibilityG1_TrowbridgeReitzGGXFast(dot: f32,alphaG: f32)->f32
|
|
715
|
+
{
|
|
716
|
+
#ifdef MOBILE
|
|
717
|
+
return 1.0/(dot+alphaG+(1.0-alphaG)*dot ));
|
|
756
718
|
#else
|
|
757
|
-
|
|
719
|
+
var alphaSquared: f32=alphaG*alphaG;return 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot));
|
|
758
720
|
#endif
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
721
|
+
}
|
|
722
|
+
fn smithVisibility_TrowbridgeReitzGGXFast(NdotL: f32,NdotV: f32,alphaG: f32)->f32
|
|
723
|
+
{var visibility: f32=smithVisibilityG1_TrowbridgeReitzGGXFast(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGXFast(NdotV,alphaG);return visibility;}
|
|
762
724
|
#endif
|
|
763
|
-
#ifdef
|
|
764
|
-
|
|
725
|
+
#ifdef ANISOTROPIC
|
|
726
|
+
fn smithVisibility_GGXCorrelated_Anisotropic(NdotL: f32,NdotV: f32,TdotV: f32,BdotV: f32,TdotL: f32,BdotL: f32,alphaTB: vec2f)->f32 {var lambdaV: f32=NdotL*length( vec3f(alphaTB.x*TdotV,alphaTB.y*BdotV,NdotV));var lambdaL: f32=NdotV*length( vec3f(alphaTB.x*TdotL,alphaTB.y*BdotL,NdotL));var v: f32=0.5/(lambdaV+lambdaL);return v;}
|
|
765
727
|
#endif
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
fn sampleRadianceAnisotropic(
|
|
769
|
-
alphaG: f32
|
|
770
|
-
,reflectionMicrosurfaceInfos: vec3f
|
|
771
|
-
,reflectionInfos: vec2f
|
|
772
|
-
,geoInfo: geometryInfoAnisoOutParams
|
|
773
|
-
,normalW: vec3f
|
|
774
|
-
,viewDirectionW: vec3f
|
|
775
|
-
,positionW: vec3f
|
|
776
|
-
,noise: vec3f
|
|
777
|
-
,isRefraction: bool
|
|
778
|
-
,ior: f32
|
|
779
|
-
#ifdef REFLECTIONMAP_3D
|
|
780
|
-
,reflectionSampler: texture_cube<f32>
|
|
781
|
-
,reflectionSamplerSampler: sampler
|
|
782
|
-
#else
|
|
783
|
-
,reflectionSampler: texture_2d<f32>
|
|
784
|
-
,reflectionSamplerSampler: sampler
|
|
728
|
+
#ifdef CLEARCOAT
|
|
729
|
+
fn visibility_Kelemen(VdotH: f32)->f32 {return 0.25/(VdotH*VdotH); }
|
|
785
730
|
#endif
|
|
786
|
-
#ifdef
|
|
787
|
-
,
|
|
731
|
+
#ifdef SHEEN
|
|
732
|
+
fn visibility_Ashikhmin(NdotL: f32,NdotV: f32)->f32
|
|
733
|
+
{return 1./(4.*(NdotL+NdotV-NdotL*NdotV));}
|
|
734
|
+
/* NOT USED
|
|
735
|
+
#ifdef SHEEN_SOFTER
|
|
736
|
+
fn l(x: f32,alphaG: f32)->f32
|
|
737
|
+
{var oneMinusAlphaSq: f32=(1.0-alphaG)*(1.0-alphaG);var a: f32=mix(21.5473,25.3245,oneMinusAlphaSq);var b: f32=mix(3.82987,3.32435,oneMinusAlphaSq);var c: f32=mix(0.19823,0.16801,oneMinusAlphaSq);var d: f32=mix(-1.97760,-1.27393,oneMinusAlphaSq);var e: f32=mix(-4.32054,-4.85967,oneMinusAlphaSq);return a/(1.0+b*pow(x,c))+d*x+e;}
|
|
738
|
+
fn lambdaSheen(cosTheta: f32,alphaG: f32)->f32
|
|
739
|
+
{return abs(cosTheta)<0.5 ? exp(l(cosTheta,alphaG)) : exp(2.0*l(0.5,alphaG)-l(1.0-cosTheta,alphaG));}
|
|
740
|
+
fn visibility_CharlieSheen(NdotL: f32,NdotV: f32,alphaG: f32)->f32
|
|
741
|
+
{var G: f32=1.0/(1.0+lambdaSheen(NdotV,alphaG)+lambdaSheen(NdotL,alphaG));return G/(4.0*NdotV*NdotL);}
|
|
788
742
|
#endif
|
|
789
|
-
|
|
790
|
-
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
791
|
-
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG,geoInfo.NdotVUnclamped);
|
|
792
|
-
#elif defined(LINEARSPECULARREFLECTION)
|
|
793
|
-
var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness);
|
|
794
|
-
#else
|
|
795
|
-
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG);
|
|
743
|
+
*/
|
|
796
744
|
#endif
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
var
|
|
800
|
-
|
|
801
|
-
|
|
745
|
+
const constant1_FON: f32=0.5f-2.0f/(3.0f*PI);const constant2_FON: f32=2.0f/3.0f-28.0f/(15.0f*PI);fn E_FON_approx(mu: f32,roughness: f32)->f32
|
|
746
|
+
{var sigma: f32=roughness;
|
|
747
|
+
var mucomp: f32=1.0f-mu;var mucomp2: f32=mucomp*mucomp;const Gcoeffs: mat2x2f=mat2x2f(0.0571085289f,-0.332181442f,
|
|
748
|
+
0.491881867f,0.0714429953f);var GoverPi: f32=dot(Gcoeffs*vec2f(mucomp,mucomp2),vec2f(1.0f,mucomp2));return (1.0f+sigma*GoverPi)/(1.0f+constant1_FON*sigma);}
|
|
749
|
+
fn diffuseBRDF_EON(albedo: vec3f,roughness: f32,NdotL: f32,NdotV: f32,LdotV: f32)->vec3f
|
|
750
|
+
{var rho: vec3f=albedo;var sigma: f32=roughness;
|
|
751
|
+
var mu_i: f32=NdotL;
|
|
752
|
+
var mu_o: f32=NdotV;
|
|
753
|
+
var s: f32=LdotV-mu_i*mu_o;
|
|
754
|
+
var sovertF: f32=select(s,s/max(mu_i,mu_o),s>0.0f);
|
|
755
|
+
var AF: f32=1.0f/(1.0f+constant1_FON*sigma);
|
|
756
|
+
var f_ss: vec3f=(rho*RECIPROCAL_PI)*AF*(1.0f+sigma*sovertF);
|
|
757
|
+
var EFo: f32=E_FON_approx(mu_o,sigma);
|
|
758
|
+
var EFi: f32=E_FON_approx(mu_i,sigma);
|
|
759
|
+
var avgEF: f32=AF*(1.0f+constant2_FON*sigma);
|
|
760
|
+
var rho_ms: vec3f=(rho*rho)*avgEF/(vec3f(1.0f)-rho*(1.0f-avgEF));const eps: f32=1.0e-7f;var f_ms: vec3f=(rho_ms*RECIPROCAL_PI)*max(eps,1.0f-EFo)
|
|
761
|
+
* max(eps,1.0f-EFi)
|
|
762
|
+
/ max(eps,1.0f-avgEF);return (f_ss+f_ms);}
|
|
763
|
+
fn diffuseBRDF_Burley(NdotL: f32,NdotV: f32,VdotH: f32,roughness: f32)->f32 {var diffuseFresnelNV: f32=pow5(saturateEps(1.0-NdotL));var diffuseFresnelNL: f32=pow5(saturateEps(1.0-NdotV));var diffuseFresnel90: f32=0.5+2.0*VdotH*VdotH*roughness;var fresnel: f32 =
|
|
764
|
+
(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) *
|
|
765
|
+
(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);return fresnel/PI;}
|
|
766
|
+
#ifdef SS_TRANSLUCENCY
|
|
767
|
+
fn transmittanceBRDF_Burley(tintColor: vec3f,diffusionDistance: vec3f,thickness: f32)->vec3f {var S: vec3f=1./maxEpsVec3(diffusionDistance);var temp: vec3f=exp((-0.333333333*thickness)*S);return tintColor.rgb*0.25*(temp*temp*temp+3.0*temp);}
|
|
768
|
+
fn computeWrappedDiffuseNdotL(NdotL: f32,w: f32)->f32 {var t: f32=1.0+w;var invt2: f32=1.0/(t*t);return saturate((NdotL+w)*invt2);}
|
|
802
769
|
#endif
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
1.0f);
|
|
770
|
+
#endif
|
|
771
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["pbrBRDFFunctionsWGSL",0,{name:a,shader:i}])},86441,48596,e=>{"use strict";var r=e.i(2342);let a="pbrFragmentReflectionDeclaration",i=`#ifdef REFLECTION
|
|
772
|
+
#ifdef REFLECTIONMAP_3D
|
|
773
|
+
var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube<f32>;
|
|
774
|
+
#ifdef LODBASEDMICROSFURACE
|
|
809
775
|
#else
|
|
810
|
-
|
|
811
|
-
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
812
|
-
reflectionCoords=(uniforms.reflectionMatrix*vec4f(reflectionCoords,0.f)).xyz;
|
|
813
|
-
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
814
|
-
reflectionCoords.z*=-1.0f;
|
|
776
|
+
var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_cube<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_cube<f32>;
|
|
815
777
|
#endif
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
accumulatedRadiance+=vec3f(sample_weight)*fromRGBD(radianceSample);
|
|
819
|
-
#elif defined(GAMMAREFLECTION)
|
|
820
|
-
accumulatedRadiance+=vec3f(sample_weight)*toLinearSpaceVec3(radianceSample.rgb);
|
|
821
|
-
#else
|
|
822
|
-
accumulatedRadiance+=vec3f(sample_weight)*radianceSample.rgb;
|
|
778
|
+
#ifdef USEIRRADIANCEMAP
|
|
779
|
+
var irradianceSamplerSampler: sampler;var irradianceSampler: texture_cube<f32>;
|
|
823
780
|
#endif
|
|
824
|
-
|
|
825
|
-
|
|
781
|
+
#else
|
|
782
|
+
var reflectionSamplerSampler: sampler;var reflectionSampler: texture_2d<f32>;
|
|
783
|
+
#ifdef LODBASEDMICROSFURACE
|
|
784
|
+
#else
|
|
785
|
+
var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_2d<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_2d<f32>;
|
|
826
786
|
#endif
|
|
827
|
-
|
|
787
|
+
#ifdef USEIRRADIANCEMAP
|
|
788
|
+
var irradianceSamplerSampler: sampler;var irradianceSampler: texture_2d<f32>;
|
|
828
789
|
#endif
|
|
829
790
|
#endif
|
|
830
|
-
#ifdef
|
|
831
|
-
|
|
832
|
-
{let dielectricIblFresnel: f32=getReflectanceFromBRDFWithEnvLookup(vec3f(reflectance.F0),vec3f(reflectance.F90),environmentBrdf).r;let dielectricECF: f32=1.0+reflectance.F0*(1.0/environmentBrdf.y-1.0);return clamp(dielectricIblFresnel*dielectricECF,0.0,1.0);}
|
|
833
|
-
fn computeConductorIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->vec3f
|
|
834
|
-
{
|
|
835
|
-
#if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
|
|
836
|
-
let openPBRBrdf: vec3f=vec3f(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);let b: vec3f =getF82B(reflectance.coloredF0,reflectance.coloredF90);let E_F82: vec3f=getF82DirectionalAlbedo(reflectance.coloredF0,vec3f(1.0),b,openPBRBrdf);let F_avg: vec3f=getF82AverageFresnel(reflectance.coloredF0,b);let ECF: vec3f =vec3f(1.0)+F_avg*(vec3f(1.0)/openPBRBrdf.y-vec3f(1.0));return clamp(E_F82*ECF,vec3f(0.0),vec3f(1.0));
|
|
791
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
792
|
+
varying vPositionUVW: vec3f;
|
|
837
793
|
#else
|
|
838
|
-
|
|
794
|
+
#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
|
|
795
|
+
varying vDirectionW: vec3f;
|
|
839
796
|
#endif
|
|
840
|
-
}
|
|
841
797
|
#endif
|
|
842
|
-
`;r.ShaderStore.IncludesShadersStoreWGSL[t]||(r.ShaderStore.IncludesShadersStoreWGSL[t]=o),e.s(["openpbrIblFunctionsWGSL",0,{name:t,shader:o}],7589)},16431,e=>{"use strict";var r=e.i(37875);let a="openpbrSubsurfaceLayerData",i=`var subsurface_weight: f32=uniforms.vSubsurfaceWeight;var subsurface_color: vec3f=uniforms.vSubsurfaceColor.rgb;var subsurface_radius: f32=uniforms.vSubsurfaceRadius;var subsurface_radius_scale: vec3f=uniforms.vSubsurfaceRadiusScale;var subsurface_scatter_anisotropy: f32=clamp(uniforms.vSubsurfaceScatterAnisotropy,-0.9999f,0.9999f);
|
|
843
|
-
#ifdef SUBSURFACE_WEIGHT
|
|
844
|
-
let subsurfaceWeightFromTexture: vec4f=TEXRD(subsurfaceWeightSampler,subsurfaceWeightSamplerSampler,fragmentInputs.vSubsurfaceWeightUV+uvOffset);
|
|
845
798
|
#endif
|
|
846
|
-
|
|
847
|
-
|
|
799
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["pbrFragmentReflectionDeclarationWGSL",0,{name:a,shader:i}],86441);let f="pbrIBLFunctions",n=`#if defined(REFLECTION) || defined(SS_REFRACTION)
|
|
800
|
+
fn getLodFromAlphaG(cubeMapDimensionPixels: f32,microsurfaceAverageSlope: f32)->f32 {var microsurfaceAverageSlopeTexels: f32=cubeMapDimensionPixels*microsurfaceAverageSlope;var lod: f32=log2(microsurfaceAverageSlopeTexels);return lod;}
|
|
801
|
+
fn getLinearLodFromRoughness(cubeMapDimensionPixels: f32,roughness: f32)->f32 {var lod: f32=log2(cubeMapDimensionPixels)*roughness;return lod;}
|
|
848
802
|
#endif
|
|
849
|
-
#
|
|
850
|
-
|
|
803
|
+
#if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)
|
|
804
|
+
fn environmentRadianceOcclusion(ambientOcclusion: f32,NdotVUnclamped: f32)->f32 {var temp: f32=NdotVUnclamped+ambientOcclusion;return saturate(temp*temp-1.0+ambientOcclusion);}
|
|
851
805
|
#endif
|
|
852
|
-
#
|
|
853
|
-
|
|
854
|
-
subsurface_weight*=subsurfaceWeightFromTexture.a;
|
|
855
|
-
#else
|
|
856
|
-
subsurface_weight*=subsurfaceWeightFromTexture.r;
|
|
806
|
+
#if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)
|
|
807
|
+
fn environmentHorizonOcclusion(view: vec3f,normal: vec3f,geometricNormal: vec3f)->f32 {var reflection: vec3f=reflect(view,normal);var temp: f32=saturate(1.0+1.1*dot(reflection,geometricNormal));return temp*temp;}
|
|
857
808
|
#endif
|
|
809
|
+
#if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)
|
|
810
|
+
fn UNPACK_LOD(x: f32)->f32 {return (1.0-x)*255.0;}
|
|
811
|
+
fn getLodFromAlphaGNdotV(cubeMapDimensionPixels: f32,alphaG: f32,NdotV: f32)->f32 {var microsurfaceAverageSlope: f32=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
|
|
858
812
|
#endif
|
|
859
|
-
|
|
860
|
-
#
|
|
861
|
-
|
|
813
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["pbrIBLFunctionsWGSL",0,{name:f,shader:n}],48596)},59994,77843,e=>{"use strict";var r=e.i(2342);let a="samplerFragmentDeclaration",i=`#ifdef _DEFINENAME_
|
|
814
|
+
#if _DEFINENAME_DIRECTUV==1
|
|
815
|
+
#define v_VARYINGNAME_UV vMainUV1
|
|
816
|
+
#elif _DEFINENAME_DIRECTUV==2
|
|
817
|
+
#define v_VARYINGNAME_UV vMainUV2
|
|
818
|
+
#elif _DEFINENAME_DIRECTUV==3
|
|
819
|
+
#define v_VARYINGNAME_UV vMainUV3
|
|
820
|
+
#elif _DEFINENAME_DIRECTUV==4
|
|
821
|
+
#define v_VARYINGNAME_UV vMainUV4
|
|
822
|
+
#elif _DEFINENAME_DIRECTUV==5
|
|
823
|
+
#define v_VARYINGNAME_UV vMainUV5
|
|
824
|
+
#elif _DEFINENAME_DIRECTUV==6
|
|
825
|
+
#define v_VARYINGNAME_UV vMainUV6
|
|
862
826
|
#else
|
|
863
|
-
|
|
827
|
+
varying v_VARYINGNAME_UV: vec2f;
|
|
864
828
|
#endif
|
|
865
|
-
|
|
829
|
+
var _SAMPLERNAME_SamplerSampler: sampler;var _SAMPLERNAME_Sampler: texture_2d<f32>;
|
|
866
830
|
#endif
|
|
867
|
-
|
|
868
|
-
|
|
831
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["samplerFragmentDeclarationWGSL",0,{name:a,shader:i}],59994);let f="reflectionFunction",n=`fn computeFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f
|
|
832
|
+
{var lon: f32=atan2(direction.z,direction.x);var lat: f32=acos(direction.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(s,t,0); }
|
|
833
|
+
fn computeMirroredFixedEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,direction: vec3f)->vec3f
|
|
834
|
+
{var lon: f32=atan2(direction.z,direction.x);var lat: f32=acos(direction.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(1.0-s,t,0); }
|
|
835
|
+
fn computeEquirectangularCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
836
|
+
{var cameraToVertex: vec3f=normalize(worldPos.xyz-eyePosition);var r: vec3f=normalize(reflect(cameraToVertex,worldNormal));r= (reflectionMatrix* vec4f(r,0)).xyz;var lon: f32=atan2(r.z,r.x);var lat: f32=acos(r.y);var sphereCoords: vec2f= vec2f(lon,lat)*RECIPROCAL_PI2*2.0;var s: f32=sphereCoords.x*0.5+0.5;var t: f32=sphereCoords.y;return vec3f(s,t,0);}
|
|
837
|
+
fn computeSphericalCoords(worldPos: vec4f,worldNormal: vec3f,view: mat4x4f,reflectionMatrix: mat4x4f)->vec3f
|
|
838
|
+
{var viewDir: vec3f=normalize((view*worldPos).xyz);var viewNormal: vec3f=normalize((view* vec4f(worldNormal,0.0)).xyz);var r: vec3f=reflect(viewDir,viewNormal);r= (reflectionMatrix* vec4f(r,0)).xyz;r.z=r.z-1.0;var m: f32=2.0*length(r);return vec3f(r.x/m+0.5,1.0-r.y/m-0.5,0);}
|
|
839
|
+
fn computePlanarCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
840
|
+
{var viewDir: vec3f=worldPos.xyz-eyePosition;var coords: vec3f=normalize(reflect(viewDir,worldNormal));return (reflectionMatrix* vec4f(coords,1)).xyz;}
|
|
841
|
+
fn computeCubicCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
842
|
+
{var viewDir: vec3f=normalize(worldPos.xyz-eyePosition);var coords: vec3f=reflect(viewDir,worldNormal);coords= (reflectionMatrix* vec4f(coords,0)).xyz;
|
|
843
|
+
#ifdef INVERTCUBICMAP
|
|
844
|
+
coords.y*=-1.0;
|
|
869
845
|
#endif
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
846
|
+
return coords;}
|
|
847
|
+
fn computeCubicLocalCoords(worldPos: vec4f,worldNormal: vec3f,eyePosition: vec3f,reflectionMatrix: mat4x4f,reflectionSize: vec3f,reflectionPosition: vec3f)->vec3f
|
|
848
|
+
{var viewDir: vec3f=normalize(worldPos.xyz-eyePosition);var coords: vec3f=reflect(viewDir,worldNormal);coords=parallaxCorrectNormal(worldPos.xyz,coords,reflectionSize,reflectionPosition);coords=(reflectionMatrix* vec4f(coords,0)).xyz;
|
|
849
|
+
#ifdef INVERTCUBICMAP
|
|
850
|
+
coords.y*=-1.0;
|
|
873
851
|
#endif
|
|
874
|
-
|
|
875
|
-
|
|
852
|
+
return coords;}
|
|
853
|
+
fn computeProjectionCoords(worldPos: vec4f,view: mat4x4f,reflectionMatrix: mat4x4f)->vec3f
|
|
854
|
+
{return (reflectionMatrix*(view*worldPos)).xyz;}
|
|
855
|
+
fn computeSkyBoxCoords(positionW: vec3f,reflectionMatrix: mat4x4f)->vec3f
|
|
856
|
+
{return (reflectionMatrix* vec4f(positionW,1.)).xyz;}
|
|
857
|
+
#ifdef REFLECTION
|
|
858
|
+
fn computeReflectionCoords(worldPos: vec4f,worldNormal: vec3f)->vec3f
|
|
859
|
+
{
|
|
860
|
+
#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
|
|
861
|
+
var direction: vec3f=normalize(fragmentInputs.vDirectionW);return computeMirroredFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
876
862
|
#endif
|
|
877
|
-
#ifdef
|
|
878
|
-
|
|
863
|
+
#ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
|
|
864
|
+
var direction: vec3f=normalize(fragmentInputs.vDirectionW);return computeFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
879
865
|
#endif
|
|
880
|
-
#ifdef
|
|
881
|
-
|
|
866
|
+
#ifdef REFLECTIONMAP_EQUIRECTANGULAR
|
|
867
|
+
return computeEquirectangularCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
|
|
882
868
|
#endif
|
|
883
|
-
#ifdef
|
|
884
|
-
|
|
869
|
+
#ifdef REFLECTIONMAP_SPHERICAL
|
|
870
|
+
return computeSphericalCoords(worldPos,worldNormal,scene.view,uniforms.reflectionMatrix);
|
|
885
871
|
#endif
|
|
886
|
-
#ifdef
|
|
887
|
-
|
|
872
|
+
#ifdef REFLECTIONMAP_PLANAR
|
|
873
|
+
return computePlanarCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
|
|
888
874
|
#endif
|
|
889
|
-
#ifdef
|
|
890
|
-
#ifdef
|
|
891
|
-
|
|
875
|
+
#ifdef REFLECTIONMAP_CUBIC
|
|
876
|
+
#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC
|
|
877
|
+
return computeCubicLocalCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix,uniforms.vReflectionSize,uniforms.vReflectionPosition);
|
|
892
878
|
#else
|
|
893
|
-
|
|
879
|
+
return computeCubicCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
|
|
894
880
|
#endif
|
|
895
|
-
transmission_color*=uniforms.vTransmissionColorInfos.y;
|
|
896
881
|
#endif
|
|
897
|
-
#ifdef
|
|
898
|
-
|
|
882
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
883
|
+
return computeProjectionCoords(worldPos,scene.view,uniforms.reflectionMatrix);
|
|
899
884
|
#endif
|
|
900
|
-
#
|
|
901
|
-
|
|
885
|
+
#ifndef REFLECTIONMAP_CUBIC
|
|
886
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
887
|
+
return computeSkyBoxCoords(fragmentInputs.vPositionUVW,uniforms.reflectionMatrix);
|
|
902
888
|
#endif
|
|
903
|
-
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
904
|
-
transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
|
|
905
889
|
#endif
|
|
906
|
-
|
|
890
|
+
#ifdef REFLECTIONMAP_EXPLICIT
|
|
891
|
+
return vec3f(0,0,0);
|
|
892
|
+
#endif
|
|
893
|
+
}
|
|
894
|
+
#endif
|
|
895
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["reflectionFunctionWGSL",0,{name:f,shader:n}],77843)},34218,e=>{"use strict";var r=e.i(2342);let a="sceneUboDeclaration",i=`struct Scene {viewProjection : mat4x4<f32>,
|
|
896
|
+
#ifdef MULTIVIEW
|
|
897
|
+
viewProjectionR : mat4x4<f32>,
|
|
898
|
+
#endif
|
|
899
|
+
view : mat4x4<f32>,
|
|
900
|
+
projection : mat4x4<f32>,
|
|
901
|
+
vEyePosition : vec4<f32>,
|
|
902
|
+
inverseProjection : mat4x4<f32>,};
|
|
903
|
+
#define SCENE_UBO
|
|
904
|
+
var<uniform> scene : Scene;
|
|
905
|
+
`;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["sceneUboDeclarationWGSL",0,{name:a,shader:i}])},48824,e=>{"use strict";var r=e.i(2342),a=e.i(49338),i=e.i(50853),f=e.i(59994),n=e.i(59200),t=e.i(35551),o=e.i(86441),c=e.i(34218),s=e.i(51052),l=e.i(7112),d=e.i(48596),v=e.i(77843),m=e.i(98092),u=e.i(32895),p=e.i(65513),S=e.i(52612),E=e.i(57630),R=e.i(86682);let I="geometryPixelShader",N=`#ifdef BUMP
|
|
907
906
|
varying vWorldView0: vec4f;varying vWorldView1: vec4f;varying vWorldView2: vec4f;varying vWorldView3: vec4f;varying vNormalW: vec3f;
|
|
908
907
|
#else
|
|
909
908
|
varying vNormalV: vec3f;
|