@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,71 +1,19 @@
|
|
|
1
|
-
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
#
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
#endif
|
|
16
|
-
|
|
17
|
-
varying float fClipDistance6;
|
|
18
|
-
#endif
|
|
19
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["clipPlaneFragmentDeclaration",0,{name:t,shader:i}],39780);let r="clipPlaneFragment",a=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
20
|
-
if (false) {}
|
|
21
|
-
#endif
|
|
22
|
-
#ifdef CLIPPLANE
|
|
23
|
-
else if (fClipDistance>0.0)
|
|
24
|
-
{discard;}
|
|
25
|
-
#endif
|
|
26
|
-
#ifdef CLIPPLANE2
|
|
27
|
-
else if (fClipDistance2>0.0)
|
|
28
|
-
{discard;}
|
|
29
|
-
#endif
|
|
30
|
-
#ifdef CLIPPLANE3
|
|
31
|
-
else if (fClipDistance3>0.0)
|
|
32
|
-
{discard;}
|
|
33
|
-
#endif
|
|
34
|
-
#ifdef CLIPPLANE4
|
|
35
|
-
else if (fClipDistance4>0.0)
|
|
36
|
-
{discard;}
|
|
37
|
-
#endif
|
|
38
|
-
#ifdef CLIPPLANE5
|
|
39
|
-
else if (fClipDistance5>0.0)
|
|
40
|
-
{discard;}
|
|
41
|
-
#endif
|
|
42
|
-
#ifdef CLIPPLANE6
|
|
43
|
-
else if (fClipDistance6>0.0)
|
|
44
|
-
{discard;}
|
|
45
|
-
#endif
|
|
46
|
-
`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["clipPlaneFragment",0,{name:r,shader:a}],83958)},3107,51464,e=>{"use strict";var o=e.i(37875);let t="fogFragmentDeclaration",i=`#ifdef FOG
|
|
47
|
-
#define FOGMODE_NONE 0.
|
|
48
|
-
#define FOGMODE_EXP 1.
|
|
49
|
-
#define FOGMODE_EXP2 2.
|
|
50
|
-
#define FOGMODE_LINEAR 3.
|
|
51
|
-
#define E 2.71828
|
|
52
|
-
uniform vec4 vFogInfos;uniform vec3 vFogColor;varying vec3 vFogDistance;float CalcFogFactor()
|
|
53
|
-
{float fogCoeff=1.0;float fogStart=vFogInfos.y;float fogEnd=vFogInfos.z;float fogDensity=vFogInfos.w;float fogDistance=length(vFogDistance);if (FOGMODE_LINEAR==vFogInfos.x)
|
|
54
|
-
{fogCoeff=(fogEnd-fogDistance)/(fogEnd-fogStart);}
|
|
55
|
-
else if (FOGMODE_EXP==vFogInfos.x)
|
|
56
|
-
{fogCoeff=1.0/pow(E,fogDistance*fogDensity);}
|
|
57
|
-
else if (FOGMODE_EXP2==vFogInfos.x)
|
|
58
|
-
{fogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);}
|
|
59
|
-
return clamp(fogCoeff,0.0,1.0);}
|
|
60
|
-
#endif
|
|
61
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["fogFragmentDeclaration",0,{name:t,shader:i}],3107);let r="fogFragment",a=`#ifdef FOG
|
|
62
|
-
float fog=CalcFogFactor();
|
|
63
|
-
#ifdef PBR
|
|
64
|
-
fog=toLinearSpace(fog);
|
|
65
|
-
#endif
|
|
66
|
-
color.rgb=mix(vFogColor,color.rgb,fog);
|
|
67
|
-
#endif
|
|
68
|
-
`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["fogFragment",0,{name:r,shader:a}],51464)},87027,e=>{"use strict";var o=e.i(37875);let t="helperFunctions",i=`const float PI=3.1415926535897932384626433832795;const float TWO_PI=6.283185307179586;const float HALF_PI=1.5707963267948966;const float RECIPROCAL_PI=0.3183098861837907;const float RECIPROCAL_PI2=0.15915494309189535;const float RECIPROCAL_PI4=0.07957747154594767;const float HALF_MIN=5.96046448e-08;
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,8500,e=>{"use strict";var o=e.i(2342);let t="harmonicsFunctions",i=`#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
2
|
+
#ifdef SPHERICAL_HARMONICS
|
|
3
|
+
vec3 computeEnvironmentIrradiance(vec3 normal) {return vSphericalL00
|
|
4
|
+
+ vSphericalL1_1*(normal.y)
|
|
5
|
+
+ vSphericalL10*(normal.z)
|
|
6
|
+
+ vSphericalL11*(normal.x)
|
|
7
|
+
+ vSphericalL2_2*(normal.y*normal.x)
|
|
8
|
+
+ vSphericalL2_1*(normal.y*normal.z)
|
|
9
|
+
+ vSphericalL20*((3.0*normal.z*normal.z)-1.0)
|
|
10
|
+
+ vSphericalL21*(normal.z*normal.x)
|
|
11
|
+
+ vSphericalL22*(normal.x*normal.x-(normal.y*normal.y));}
|
|
12
|
+
#else
|
|
13
|
+
vec3 computeEnvironmentIrradiance(vec3 normal) {float Nx=normal.x;float Ny=normal.y;float Nz=normal.z;vec3 C1=vSphericalZZ.rgb;vec3 Cx=vSphericalX.rgb;vec3 Cy=vSphericalY.rgb;vec3 Cz=vSphericalZ.rgb;vec3 Cxx_zz=vSphericalXX_ZZ.rgb;vec3 Cyy_zz=vSphericalYY_ZZ.rgb;vec3 Cxy=vSphericalXY.rgb;vec3 Cyz=vSphericalYZ.rgb;vec3 Czx=vSphericalZX.rgb;vec3 a1=Cyy_zz*Ny+Cy;vec3 a2=Cyz*Nz+a1;vec3 b1=Czx*Nz+Cx;vec3 b2=Cxy*Ny+b1;vec3 b3=Cxx_zz*Nx+b2;vec3 t1=Cz *Nz+C1;vec3 t2=a2 *Ny+t1;vec3 t3=b3 *Nx+t2;return t3;}
|
|
14
|
+
#endif
|
|
15
|
+
#endif
|
|
16
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["harmonicsFunctions",0,{name:t,shader:i}])},62308,e=>{"use strict";var o=e.i(2342);let t="helperFunctions",i=`const float PI=3.1415926535897932384626433832795;const float TWO_PI=6.283185307179586;const float HALF_PI=1.5707963267948966;const float RECIPROCAL_PI=0.3183098861837907;const float RECIPROCAL_PI2=0.15915494309189535;const float RECIPROCAL_PI4=0.07957747154594767;const float HALF_MIN=5.96046448e-08;
|
|
69
17
|
const float LinearEncodePowerApprox=2.2;const float GammaEncodePowerApprox=1.0/LinearEncodePowerApprox;const vec3 LuminanceEncodeApprox=vec3(0.2126,0.7152,0.0722);const float Epsilon=0.0000001;
|
|
70
18
|
#define saturate(x) clamp(x,0.0,1.0)
|
|
71
19
|
#define absEps(x) abs(x)+Epsilon
|
|
@@ -183,40 +131,89 @@ float uint2float(uint i) {return uintBitsToFloat(0x3F800000u | (i>>9u))-1.0;}
|
|
|
183
131
|
vec2 plasticSequence(const uint rstate) {return vec2(uint2float(rstate*3242174889u),
|
|
184
132
|
uint2float(rstate*2447445414u));}
|
|
185
133
|
#endif
|
|
186
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["helperFunctions",0,{name:t,shader:i}])},
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
134
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["helperFunctions",0,{name:t,shader:i}])},80790,e=>{"use strict";var o=e.i(2342);let t="logDepthDeclaration",i=`#ifdef LOGARITHMICDEPTH
|
|
135
|
+
uniform float logarithmicDepthConstant;varying float vFragmentDepth;
|
|
136
|
+
#endif
|
|
137
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["logDepthDeclaration",0,{name:t,shader:i}])},65225,e=>{"use strict";var o=e.i(2342);let t="mainUVVaryingDeclaration",i=`#ifdef MAINUV{X}
|
|
138
|
+
varying vec2 vMainUV{X};
|
|
139
|
+
#endif
|
|
140
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["mainUVVaryingDeclaration",0,{name:t,shader:i}])},49676,e=>{"use strict";var o=e.i(2342);let t="meshUboDeclaration",i=`#ifdef WEBGL2
|
|
192
141
|
uniform mat4 world;uniform float visibility;
|
|
193
142
|
#else
|
|
194
143
|
layout(std140,column_major) uniform;uniform Mesh
|
|
195
144
|
{mat4 world;float visibility;};
|
|
196
145
|
#endif
|
|
197
146
|
#define WORLD_UBO
|
|
198
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["meshUboDeclaration",0,{name:t,shader:i}],
|
|
199
|
-
|
|
147
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["meshUboDeclaration",0,{name:t,shader:i}])},64541,e=>{"use strict";var o=e.i(2342);let t="openpbrSubsurfaceLayerData",i=`float subsurface_weight=vSubsurfaceWeight;vec3 subsurface_color=vSubsurfaceColor.rgb;float subsurface_radius=vSubsurfaceRadius;vec3 subsurface_radius_scale=vSubsurfaceRadiusScale;float subsurface_scatter_anisotropy=clamp(vSubsurfaceScatterAnisotropy,-0.9999,0.9999);
|
|
148
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
149
|
+
vec4 subsurfaceWeightFromTexture=TEXRD(subsurfaceWeightSampler,vSubsurfaceWeightUV+uvOffset);
|
|
200
150
|
#endif
|
|
201
|
-
|
|
202
|
-
|
|
151
|
+
#ifdef SUBSURFACE_COLOR
|
|
152
|
+
vec4 subsurfaceColorFromTexture=TEXRD(subsurfaceColorSampler,vSubsurfaceColorUV+uvOffset);
|
|
203
153
|
#endif
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
+ vSphericalL2_2*(normal.y*normal.x)
|
|
211
|
-
+ vSphericalL2_1*(normal.y*normal.z)
|
|
212
|
-
+ vSphericalL20*((3.0*normal.z*normal.z)-1.0)
|
|
213
|
-
+ vSphericalL21*(normal.z*normal.x)
|
|
214
|
-
+ vSphericalL22*(normal.x*normal.x-(normal.y*normal.y));}
|
|
154
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
155
|
+
vec4 subsurfaceRadiusScaleFromTexture=TEXRD(subsurfaceRadiusScaleSampler,vSubsurfaceRadiusScaleUV+uvOffset);
|
|
156
|
+
#endif
|
|
157
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
158
|
+
#ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA
|
|
159
|
+
subsurface_weight*=subsurfaceWeightFromTexture.a;
|
|
215
160
|
#else
|
|
216
|
-
|
|
161
|
+
subsurface_weight*=subsurfaceWeightFromTexture.r;
|
|
162
|
+
#endif
|
|
163
|
+
#endif
|
|
164
|
+
#ifdef SUBSURFACE_COLOR
|
|
165
|
+
#ifdef SUBSURFACE_COLOR_GAMMA
|
|
166
|
+
subsurface_color*=toLinearSpace(subsurfaceColorFromTexture.rgb);
|
|
167
|
+
#else
|
|
168
|
+
subsurface_color*=subsurfaceColorFromTexture.rgb;
|
|
169
|
+
#endif
|
|
170
|
+
subsurface_color*=vSubsurfaceColorInfos.y;
|
|
171
|
+
#endif
|
|
172
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
173
|
+
subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
|
|
174
|
+
#endif
|
|
175
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["openpbrSubsurfaceLayerData",0,{name:t,shader:i}])},33521,e=>{"use strict";var o=e.i(2342);let t="openpbrTransmissionLayerData",i=`float transmission_weight=vTransmissionWeight;vec3 transmission_color=vTransmissionColor.rgb;float transmission_depth=vTransmissionDepth;vec3 transmission_scatter=vTransmissionScatter.rgb;float transmission_scatter_anisotropy=clamp(vTransmissionScatterAnisotropy,-0.9999,0.9999);float transmission_dispersion_scale=vTransmissionDispersionScale;float transmission_dispersion_abbe_number=vTransmissionDispersionAbbeNumber;
|
|
176
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
177
|
+
vec4 transmissionWeightFromTexture=TEXRD(transmissionWeightSampler,vTransmissionWeightUV+uvOffset);
|
|
178
|
+
#endif
|
|
179
|
+
#ifdef TRANSMISSION_COLOR
|
|
180
|
+
vec4 transmissionColorFromTexture=TEXRD(transmissionColorSampler,vTransmissionColorUV+uvOffset);
|
|
217
181
|
#endif
|
|
182
|
+
#ifdef TRANSMISSION_DEPTH
|
|
183
|
+
vec4 transmissionDepthFromTexture=TEXRD(transmissionDepthSampler,vTransmissionDepthUV+uvOffset);
|
|
184
|
+
#endif
|
|
185
|
+
#ifdef TRANSMISSION_SCATTER
|
|
186
|
+
vec4 transmissionScatterFromTexture=TEXRD(transmissionScatterSampler,vTransmissionScatterUV+uvOffset);
|
|
187
|
+
#endif
|
|
188
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
189
|
+
vec4 transmissionDispersionScaleFromTexture=TEXRD(transmissionDispersionScaleSampler,vTransmissionDispersionScaleUV+uvOffset);
|
|
190
|
+
#endif
|
|
191
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
192
|
+
transmission_weight*=transmissionWeightFromTexture.r;
|
|
193
|
+
#endif
|
|
194
|
+
#ifdef TRANSMISSION_COLOR
|
|
195
|
+
#ifdef TRANSMISSION_COLOR_GAMMA
|
|
196
|
+
transmission_color*=toLinearSpace(transmissionColorFromTexture.rgb);
|
|
197
|
+
#else
|
|
198
|
+
transmission_color*=transmissionColorFromTexture.rgb;
|
|
199
|
+
#endif
|
|
200
|
+
transmission_color*=vTransmissionColorInfos.y;
|
|
201
|
+
#endif
|
|
202
|
+
#ifdef TRANSMISSION_DEPTH
|
|
203
|
+
transmission_depth*=transmissionDepthFromTexture.r;
|
|
204
|
+
#endif
|
|
205
|
+
#ifdef TRANSMISSION_SCATTER
|
|
206
|
+
transmission_scatter*=transmissionScatterFromTexture.rgb;
|
|
207
|
+
#endif
|
|
208
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
209
|
+
transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
|
|
218
210
|
#endif
|
|
219
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["
|
|
211
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["openpbrTransmissionLayerData",0,{name:t,shader:i}])},91141,e=>{"use strict";var o=e.i(2342);e.i(19831),e.i(49676);let t="openpbrUboDeclaration",i=`layout(std140,column_major) uniform;uniform Material {vec2 vTangentSpaceParams;vec4 vLightingIntensity;float pointSize;vec2 vDebugMode;vec2 renderTargetSize;vec4 cameraInfo;vec4 vTextureRepetitionHexTilingParams;mat4 backgroundRefractionMatrix;vec3 vBackgroundRefractionInfos;vec2 vReflectionInfos;mat4 reflectionMatrix;vec3 vReflectionMicrosurfaceInfos;vec3 vReflectionPosition;vec3 vReflectionSize;vec2 vReflectionFilteringInfo;vec3 vReflectionDominantDirection;vec3 vReflectionColor;vec3 vSphericalL00;vec3 vSphericalL1_1;vec3 vSphericalL10;vec3 vSphericalL11;vec3 vSphericalL2_2;vec3 vSphericalL2_1;vec3 vSphericalL20;vec3 vSphericalL21;vec3 vSphericalL22;vec3 vSphericalX;vec3 vSphericalY;vec3 vSphericalZ;vec3 vSphericalXX_ZZ;vec3 vSphericalYY_ZZ;vec3 vSphericalZZ;vec3 vSphericalXY;vec3 vSphericalYZ;vec3 vSphericalZX;float vBaseWeight;vec4 vBaseColor;float vBaseDiffuseRoughness;vec4 vReflectanceInfo;vec4 vSpecularColor;vec3 vSpecularAnisotropy;float vTransmissionWeight;vec3 vTransmissionColor;float vTransmissionDepth;vec3 vTransmissionScatter;float vTransmissionScatterAnisotropy;float vTransmissionDispersionScale;float vTransmissionDispersionAbbeNumber;float vSubsurfaceWeight;vec3 vSubsurfaceColor;float vSubsurfaceRadius;vec3 vSubsurfaceRadiusScale;float vSubsurfaceScatterAnisotropy;float vCoatWeight;vec3 vCoatColor;float vCoatRoughness;float vCoatRoughnessAnisotropy;float vCoatIor;float vCoatDarkening;float vFuzzWeight;vec3 vFuzzColor;float vFuzzRoughness;float vGeometryThinWalled;vec2 vGeometryCoatTangent;float vGeometryThickness;vec3 vEmissionColor;float vThinFilmWeight;vec2 vThinFilmThickness;float vThinFilmIor;vec2 vBaseWeightInfos;mat4 baseWeightMatrix;vec2 vBaseColorInfos;mat4 baseColorMatrix;vec2 vBaseDiffuseRoughnessInfos;mat4 baseDiffuseRoughnessMatrix;vec2 vBaseMetalnessInfos;mat4 baseMetalnessMatrix;vec2 vSpecularWeightInfos;mat4 specularWeightMatrix;vec2 vSpecularColorInfos;mat4 specularColorMatrix;vec2 vSpecularRoughnessInfos;mat4 specularRoughnessMatrix;vec2 vSpecularRoughnessAnisotropyInfos;mat4 specularRoughnessAnisotropyMatrix;vec2 vTransmissionWeightInfos;mat4 transmissionWeightMatrix;vec2 vTransmissionColorInfos;mat4 transmissionColorMatrix;vec2 vTransmissionDepthInfos;mat4 transmissionDepthMatrix;vec2 vTransmissionScatterInfos;mat4 transmissionScatterMatrix;vec2 vTransmissionDispersionScaleInfos;mat4 transmissionDispersionScaleMatrix;vec2 vSubsurfaceWeightInfos;mat4 subsurfaceWeightMatrix;vec2 vSubsurfaceColorInfos;mat4 subsurfaceColorMatrix;vec2 vSubsurfaceRadiusScaleInfos;mat4 subsurfaceRadiusScaleMatrix;vec2 vCoatWeightInfos;mat4 coatWeightMatrix;vec2 vCoatColorInfos;mat4 coatColorMatrix;vec2 vCoatRoughnessInfos;mat4 coatRoughnessMatrix;vec2 vCoatRoughnessAnisotropyInfos;mat4 coatRoughnessAnisotropyMatrix;vec2 vCoatDarkeningInfos;mat4 coatDarkeningMatrix;vec2 vFuzzWeightInfos;mat4 fuzzWeightMatrix;vec2 vFuzzColorInfos;mat4 fuzzColorMatrix;vec2 vFuzzRoughnessInfos;mat4 fuzzRoughnessMatrix;vec2 vGeometryNormalInfos;mat4 geometryNormalMatrix;vec2 vGeometryTangentInfos;mat4 geometryTangentMatrix;vec2 vGeometryCoatNormalInfos;mat4 geometryCoatNormalMatrix;vec2 vGeometryCoatTangentInfos;mat4 geometryCoatTangentMatrix;vec2 vGeometryOpacityInfos;mat4 geometryOpacityMatrix;vec2 vGeometryThicknessInfos;mat4 geometryThicknessMatrix;vec2 vEmissionColorInfos;mat4 emissionColorMatrix;vec2 vThinFilmWeightInfos;mat4 thinFilmWeightMatrix;vec2 vThinFilmThicknessInfos;mat4 thinFilmThicknessMatrix;vec2 vAmbientOcclusionInfos;mat4 ambientOcclusionMatrix;
|
|
212
|
+
#define ADDITIONAL_UBO_DECLARATION
|
|
213
|
+
};
|
|
214
|
+
#include<sceneUboDeclaration>
|
|
215
|
+
#include<meshUboDeclaration>
|
|
216
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["openpbrUboDeclaration",0,{name:t,shader:i}])},74701,e=>{"use strict";var o=e.i(2342);let t="pbrBRDFFunctions",i=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25
|
|
220
217
|
#define BRDF_DIFFUSE_MODEL_EON 0
|
|
221
218
|
#define BRDF_DIFFUSE_MODEL_BURLEY 1
|
|
222
219
|
#define BRDF_DIFFUSE_MODEL_LAMBERT 2
|
|
@@ -389,1062 +386,993 @@ vec3 transmittanceBRDF_Burley(const vec3 tintColor,const vec3 diffusionDistance,
|
|
|
389
386
|
float computeWrappedDiffuseNdotL(float NdotL,float w) {float t=1.0+w;float invt2=1.0/square(t);return saturate((NdotL+w)*invt2);}
|
|
390
387
|
#endif
|
|
391
388
|
#endif
|
|
392
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["pbrBRDFFunctions",0,{name:t,shader:i}])},
|
|
393
|
-
#
|
|
394
|
-
|
|
395
|
-
#include<sceneUboDeclaration>
|
|
396
|
-
#include<meshUboDeclaration>
|
|
397
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["openpbrUboDeclaration",0,{name:t,shader:i}])},32172,33165,e=>{"use strict";var o=e.i(37875);let t="samplerFragmentDeclaration",i=`#ifdef _DEFINENAME_
|
|
398
|
-
#if _DEFINENAME_DIRECTUV==1
|
|
399
|
-
#define v_VARYINGNAME_UV vMainUV1
|
|
400
|
-
#elif _DEFINENAME_DIRECTUV==2
|
|
401
|
-
#define v_VARYINGNAME_UV vMainUV2
|
|
402
|
-
#elif _DEFINENAME_DIRECTUV==3
|
|
403
|
-
#define v_VARYINGNAME_UV vMainUV3
|
|
404
|
-
#elif _DEFINENAME_DIRECTUV==4
|
|
405
|
-
#define v_VARYINGNAME_UV vMainUV4
|
|
406
|
-
#elif _DEFINENAME_DIRECTUV==5
|
|
407
|
-
#define v_VARYINGNAME_UV vMainUV5
|
|
408
|
-
#elif _DEFINENAME_DIRECTUV==6
|
|
409
|
-
#define v_VARYINGNAME_UV vMainUV6
|
|
410
|
-
#else
|
|
411
|
-
varying vec2 v_VARYINGNAME_UV;
|
|
412
|
-
#endif
|
|
413
|
-
uniform sampler2D _SAMPLERNAME_Sampler;
|
|
414
|
-
#endif
|
|
415
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["samplerFragmentDeclaration",0,{name:t,shader:i}],32172);let r="reflectionFunction",a=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
|
|
416
|
-
{float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0); }
|
|
417
|
-
vec3 computeMirroredFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
|
|
418
|
-
{float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(1.0-s,t,0); }
|
|
419
|
-
vec3 computeEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
420
|
-
{vec3 cameraToVertex=normalize(worldPos.xyz-eyePosition);vec3 r=normalize(reflect(cameraToVertex,worldNormal));r=vec3(reflectionMatrix*vec4(r,0));float lon=atan(r.z,r.x);float lat=acos(r.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0);}
|
|
421
|
-
vec3 computeSphericalCoords(vec4 worldPos,vec3 worldNormal,mat4 view,mat4 reflectionMatrix)
|
|
422
|
-
{vec3 viewDir=normalize(vec3(view*worldPos));vec3 viewNormal=normalize(vec3(view*vec4(worldNormal,0.0)));vec3 r=reflect(viewDir,viewNormal);r=vec3(reflectionMatrix*vec4(r,0));r.z=r.z-1.0;float m=2.0*length(r);return vec3(r.x/m+0.5,1.0-r.y/m-0.5,0);}
|
|
423
|
-
vec3 computePlanarCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
424
|
-
{vec3 viewDir=worldPos.xyz-eyePosition;vec3 coords=normalize(reflect(viewDir,worldNormal));return vec3(reflectionMatrix*vec4(coords,1));}
|
|
425
|
-
vec3 computeCubicCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
426
|
-
{vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=vec3(reflectionMatrix*vec4(coords,0));
|
|
427
|
-
#ifdef INVERTCUBICMAP
|
|
428
|
-
coords.y*=-1.0;
|
|
389
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["pbrBRDFFunctions",0,{name:t,shader:i}])},22488,70541,85374,26122,38385,25181,38416,54398,53804,22806,73400,e=>{"use strict";var o=e.i(2342);e.i(65225);let t="pbrFragmentExtraDeclaration",i=`varying vec3 vPositionW;
|
|
390
|
+
#if DEBUGMODE>0
|
|
391
|
+
varying vec4 vClipSpacePosition;
|
|
429
392
|
#endif
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
#
|
|
434
|
-
|
|
393
|
+
#include<mainUVVaryingDeclaration>[1..7]
|
|
394
|
+
#ifdef NORMAL
|
|
395
|
+
varying vec3 vNormalW;
|
|
396
|
+
#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
|
|
397
|
+
varying vec3 vEnvironmentIrradiance;
|
|
435
398
|
#endif
|
|
436
|
-
return coords;}
|
|
437
|
-
vec3 computeProjectionCoords(vec4 worldPos,mat4 view,mat4 reflectionMatrix)
|
|
438
|
-
{return vec3(reflectionMatrix*(view*worldPos));}
|
|
439
|
-
vec3 computeSkyBoxCoords(vec3 positionW,mat4 reflectionMatrix)
|
|
440
|
-
{return vec3(reflectionMatrix*vec4(positionW,1.));}
|
|
441
|
-
#ifdef REFLECTION
|
|
442
|
-
vec3 computeReflectionCoords(vec4 worldPos,vec3 worldNormal)
|
|
443
|
-
{
|
|
444
|
-
#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
|
|
445
|
-
vec3 direction=normalize(vDirectionW);return computeMirroredFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
446
399
|
#endif
|
|
447
|
-
#
|
|
448
|
-
|
|
400
|
+
#if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
|
|
401
|
+
varying vec4 vColor;
|
|
449
402
|
#endif
|
|
450
|
-
#
|
|
451
|
-
|
|
403
|
+
#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
|
|
404
|
+
varying float vViewDepth;
|
|
452
405
|
#endif
|
|
453
|
-
|
|
454
|
-
return
|
|
406
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["pbrFragmentExtraDeclaration",0,{name:t,shader:i}],22488);let r="subSurfaceScatteringFunctions",a=`bool testLightingForSSS(float diffusionProfile)
|
|
407
|
+
{return diffusionProfile<1.;}`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["subSurfaceScatteringFunctions",0,{name:r,shader:a}],70541);let n="importanceSampling",l=`vec3 hemisphereCosSample(vec2 u) {float phi=2.*PI*u.x;float cosTheta2=1.-u.y;float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
|
|
408
|
+
vec3 hemisphereImportanceSampleDggx(vec2 u,float a) {float phi=2.*PI*u.x;float cosTheta2=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
|
|
409
|
+
vec3 hemisphereImportanceSampleDggxAnisotropic(vec2 Xi,float alphaTangent,float alphaBitangent)
|
|
410
|
+
{alphaTangent=max(alphaTangent,0.0001);alphaBitangent=max(alphaBitangent,0.0001);float phi=atan(alphaBitangent/alphaTangent*tan(2.0*3.14159265*Xi.x));if (Xi.x>0.5) phi+=3.14159265;
|
|
411
|
+
float cosPhi=cos(phi);float sinPhi=sin(phi);float alpha2=(cosPhi*cosPhi)/(alphaTangent*alphaTangent) +
|
|
412
|
+
(sinPhi*sinPhi)/(alphaBitangent*alphaBitangent);float tanTheta2=Xi.y/(1.0-Xi.y)/alpha2;float cosTheta=1.0/sqrt(1.0+tanTheta2);float sinTheta=sqrt(max(0.0,1.0-cosTheta*cosTheta));return vec3(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);}
|
|
413
|
+
vec3 hemisphereImportanceSampleDCharlie(vec2 u,float a) {
|
|
414
|
+
float phi=2.*PI*u.x;float sinTheta=pow(u.y,a/(2.*a+1.));float cosTheta=sqrt(1.-sinTheta*sinTheta);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;o.ShaderStore.IncludesShadersStore[n]||(o.ShaderStore.IncludesShadersStore[n]=l),e.s(["importanceSampling",0,{name:n,shader:l}],85374);let c="pbrHelperFunctions",f=`#define MINIMUMVARIANCE 0.0005
|
|
415
|
+
#ifndef TEXRD_DEFINED
|
|
416
|
+
#define TEXRD(s,uv) texture2D(s,uv)
|
|
417
|
+
#define TEXRD_DEFINED
|
|
455
418
|
#endif
|
|
456
|
-
|
|
457
|
-
return
|
|
419
|
+
float convertRoughnessToAverageSlope(float roughness)
|
|
420
|
+
{return square(roughness)+MINIMUMVARIANCE;}
|
|
421
|
+
float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;}
|
|
422
|
+
vec2 getAARoughnessFactors(vec3 normalVector) {
|
|
423
|
+
#ifdef SPECULARAA
|
|
424
|
+
vec3 nDfdx=dFdx(normalVector.xyz);vec3 nDfdy=dFdy(normalVector.xyz);float slopeSquare=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));float geometricRoughnessFactor=pow(saturate(slopeSquare),0.333);float geometricAlphaGFactor=sqrt(slopeSquare);geometricAlphaGFactor*=0.75;return vec2(geometricRoughnessFactor,geometricAlphaGFactor);
|
|
425
|
+
#else
|
|
426
|
+
return vec2(0.);
|
|
458
427
|
#endif
|
|
459
|
-
|
|
460
|
-
#ifdef
|
|
461
|
-
|
|
428
|
+
}
|
|
429
|
+
#ifdef ANISOTROPIC
|
|
430
|
+
#ifdef ANISOTROPIC_LEGACY
|
|
431
|
+
vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(alphaG*(1.0+anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG*(1.0-anisotropy),MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
|
|
432
|
+
vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 anisotropicFrameDirection;if (anisotropy>=0.0) {anisotropicFrameDirection=B;} else {anisotropicFrameDirection=T;}
|
|
433
|
+
vec3 anisotropicFrameTangent=cross(normalize(anisotropicFrameDirection),V);vec3 anisotropicFrameNormal=cross(anisotropicFrameTangent,anisotropicFrameDirection);vec3 anisotropicNormal=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;}
|
|
434
|
+
#elif ANISOTROPIC_OPENPBR
|
|
435
|
+
vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(alphaG*alphaG*sqrt(2.0/(1.0+(1.0-anisotropy)*(1.0-anisotropy))),MINIMUMVARIANCE);float alphaB=max(alphaT*(1.0-anisotropy),MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
|
|
462
436
|
#else
|
|
463
|
-
|
|
437
|
+
vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(mix(alphaG,1.0,anisotropy*anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG,MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
|
|
438
|
+
vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 bentNormal=cross(B,V);bentNormal=normalize(cross(bentNormal,B));float a=square(square(1.0-anisotropy*(1.0-roughness)));bentNormal=normalize(mix(bentNormal,N,a));return bentNormal;}
|
|
464
439
|
#endif
|
|
465
440
|
#endif
|
|
466
|
-
#
|
|
467
|
-
|
|
441
|
+
#if defined(CLEARCOAT) || defined(SS_REFRACTION)
|
|
442
|
+
vec3 cocaLambert(vec3 alpha,float distance) {return exp(-alpha*distance);}
|
|
443
|
+
vec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {return cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
|
|
444
|
+
vec3 computeColorAtDistanceInMedia(vec3 color,float distance) {return -log(color)/distance;}
|
|
445
|
+
vec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 clearCoatAbsorption=mix(vec3(1.0),
|
|
446
|
+
cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
|
|
447
|
+
clearCoatIntensity);return clearCoatAbsorption;}
|
|
468
448
|
#endif
|
|
469
|
-
#ifdef
|
|
470
|
-
|
|
449
|
+
#ifdef MICROSURFACEAUTOMATIC
|
|
450
|
+
float computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor)
|
|
451
|
+
{const float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;float reflectivityLuminance=getLuminance(reflectivityColor);float reflectivityLuma=sqrt(reflectivityLuminance);microSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return microSurface;}
|
|
471
452
|
#endif
|
|
472
|
-
|
|
473
|
-
|
|
453
|
+
`;o.ShaderStore.IncludesShadersStore[c]||(o.ShaderStore.IncludesShadersStore[c]=f),e.s(["pbrHelperFunctions",0,{name:c,shader:f}],26122),e.i(83457);let s="pbrDirectLightingSetupFunctions",d=`struct preLightingInfo
|
|
454
|
+
{vec3 lightOffset;float lightDistanceSquared;float lightDistance;float attenuation;vec3 L;vec3 H;float NdotV;float NdotLUnclamped;float NdotL;float VdotH;float LdotV;float roughness;float diffuseRoughness;vec3 surfaceAlbedo;
|
|
455
|
+
#ifdef IRIDESCENCE
|
|
456
|
+
float iridescenceIntensity;
|
|
474
457
|
#endif
|
|
475
|
-
|
|
458
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
459
|
+
vec3 areaLightDiffuse;
|
|
460
|
+
#ifdef SPECULARTERM
|
|
461
|
+
vec3 areaLightSpecular;vec4 areaLightFresnel;
|
|
476
462
|
#endif
|
|
477
|
-
`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["reflectionFunction",0,{name:r,shader:a}],33165)},82784,91468,e=>{"use strict";var o=e.i(37875);let t="pbrFragmentReflectionDeclaration",i=`#ifdef REFLECTION
|
|
478
|
-
#ifdef REFLECTIONMAP_3D
|
|
479
|
-
#define sampleReflection(s,c) textureCube(s,c)
|
|
480
|
-
uniform samplerCube reflectionSampler;
|
|
481
|
-
#ifdef LODBASEDMICROSFURACE
|
|
482
|
-
#define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l)
|
|
483
|
-
#else
|
|
484
|
-
uniform samplerCube reflectionSamplerLow;uniform samplerCube reflectionSamplerHigh;
|
|
485
463
|
#endif
|
|
486
|
-
|
|
487
|
-
|
|
464
|
+
};preLightingInfo computePointAndSpotPreLightingInfo(vec4 lightData,vec3 V,vec3 N,vec3 posW) {preLightingInfo result;result.lightOffset=lightData.xyz-posW;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);result.L=normalize(result.lightOffset);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));result.NdotLUnclamped=dot(N,result.L);result.NdotL=saturateEps(result.NdotLUnclamped);result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
465
|
+
preLightingInfo computeDirectionalPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;result.lightDistance=length(-lightData.xyz);result.L=normalize(-lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));result.NdotLUnclamped=dot(N,result.L);result.NdotL=saturateEps(result.NdotLUnclamped);result.LdotV=dot(result.L,V);result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
466
|
+
preLightingInfo computeHemisphericPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;result.NdotL=dot(N,lightData.xyz)*0.5+0.5;result.NdotL=saturateEps(result.NdotL);result.NdotLUnclamped=result.NdotL;
|
|
467
|
+
#ifdef SPECULARTERM
|
|
468
|
+
result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));
|
|
488
469
|
#endif
|
|
489
|
-
|
|
490
|
-
#
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
#
|
|
495
|
-
|
|
470
|
+
result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
471
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
472
|
+
#include<ltcHelperFunctions>
|
|
473
|
+
uniform sampler2D areaLightsLTC1Sampler;uniform sampler2D areaLightsLTC2Sampler;preLightingInfo computeAreaPreLightingInfo(sampler2D ltc1,sampler2D ltc2,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness )
|
|
474
|
+
{preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnel(ltc1,ltc2,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness);
|
|
475
|
+
#ifdef SPECULARTERM
|
|
476
|
+
result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
|
|
496
477
|
#endif
|
|
497
|
-
|
|
498
|
-
|
|
478
|
+
result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
479
|
+
preLightingInfo computeAreaPreLightingInfoWithTexture(sampler2D ltc1,sampler2D ltc2,sampler2D emissionTexture,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness )
|
|
480
|
+
{preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnelWithEmission(ltc1,ltc2,emissionTexture,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness);
|
|
481
|
+
#ifdef SPECULARTERM
|
|
482
|
+
result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
|
|
499
483
|
#endif
|
|
484
|
+
result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
|
|
500
485
|
#endif
|
|
501
|
-
|
|
502
|
-
|
|
486
|
+
`;o.ShaderStore.IncludesShadersStore[s]||(o.ShaderStore.IncludesShadersStore[s]=d),e.s(["pbrDirectLightingSetupFunctions",0,{name:s,shader:d}],38385);let u="pbrDirectLightingFalloffFunctions",v=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range)
|
|
487
|
+
{return max(0.,1.0-length(lightOffset)/range);}
|
|
488
|
+
float computeDistanceLightFalloff_Physical(float lightDistanceSquared)
|
|
489
|
+
{return 1.0/maxEps(lightDistanceSquared);}
|
|
490
|
+
float computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange)
|
|
491
|
+
{float lightDistanceFalloff=1.0/maxEps(lightDistanceSquared);float factor=lightDistanceSquared*inverseSquaredRange;float attenuation=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;}
|
|
492
|
+
float computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange)
|
|
493
|
+
{
|
|
494
|
+
#ifdef USEPHYSICALLIGHTFALLOFF
|
|
495
|
+
return computeDistanceLightFalloff_Physical(lightDistanceSquared);
|
|
496
|
+
#elif defined(USEGLTFLIGHTFALLOFF)
|
|
497
|
+
return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);
|
|
503
498
|
#else
|
|
504
|
-
|
|
505
|
-
varying vec3 vDirectionW;
|
|
499
|
+
return computeDistanceLightFalloff_Standard(lightOffset,range);
|
|
506
500
|
#endif
|
|
501
|
+
}
|
|
502
|
+
float computeDirectionalLightFalloff_Standard(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent)
|
|
503
|
+
{float falloff=0.0;float cosAngle=maxEps(dot(-lightDirection,directionToLightCenterW));if (cosAngle>=cosHalfAngle)
|
|
504
|
+
{falloff=max(0.,pow(cosAngle,exponent));}
|
|
505
|
+
return falloff;}
|
|
506
|
+
float computeDirectionalLightFalloff_IES(vec3 lightDirection,vec3 directionToLightCenterW,sampler2D iesLightSampler)
|
|
507
|
+
{float cosAngle=dot(-lightDirection,directionToLightCenterW);float angle=acos(cosAngle)/PI;return texture2D(iesLightSampler,vec2(angle,0.)).r;}
|
|
508
|
+
float computeDirectionalLightFalloff_Physical(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle)
|
|
509
|
+
{const float kMinusLog2ConeAngleIntensityRatio=6.64385618977;
|
|
510
|
+
float concentrationKappa=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);vec4 lightDirectionSpreadSG=vec4(-lightDirection*concentrationKappa,-concentrationKappa);float falloff=exp2(dot(vec4(directionToLightCenterW,1.0),lightDirectionSpreadSG));return falloff;}
|
|
511
|
+
float computeDirectionalLightFalloff_GLTF(vec3 lightDirection,vec3 directionToLightCenterW,float lightAngleScale,float lightAngleOffset)
|
|
512
|
+
{float cd=dot(-lightDirection,directionToLightCenterW);float falloff=saturate(cd*lightAngleScale+lightAngleOffset);falloff*=falloff;return falloff;}
|
|
513
|
+
float computeDirectionalLightFalloff(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent,float lightAngleScale,float lightAngleOffset)
|
|
514
|
+
{
|
|
515
|
+
#ifdef USEPHYSICALLIGHTFALLOFF
|
|
516
|
+
return computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);
|
|
517
|
+
#elif defined(USEGLTFLIGHTFALLOFF)
|
|
518
|
+
return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);
|
|
519
|
+
#else
|
|
520
|
+
return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);
|
|
507
521
|
#endif
|
|
522
|
+
}`;o.ShaderStore.IncludesShadersStore[u]||(o.ShaderStore.IncludesShadersStore[u]=v),e.s(["pbrDirectLightingFalloffFunctions",0,{name:u,shader:v}],25181);let m="hdrFilteringFunctions",g=`#if NUM_SAMPLES
|
|
523
|
+
#if NUM_SAMPLES>0
|
|
524
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
525
|
+
float radicalInverse_VdC(uint bits)
|
|
526
|
+
{bits=(bits<<16u) | (bits>>16u);bits=((bits & 0x55555555u)<<1u) | ((bits & 0xAAAAAAAAu)>>1u);bits=((bits & 0x33333333u)<<2u) | ((bits & 0xCCCCCCCCu)>>2u);bits=((bits & 0x0F0F0F0Fu)<<4u) | ((bits & 0xF0F0F0F0u)>>4u);bits=((bits & 0x00FF00FFu)<<8u) | ((bits & 0xFF00FF00u)>>8u);return float(bits)*2.3283064365386963e-10; }
|
|
527
|
+
vec2 hammersley(uint i,uint N)
|
|
528
|
+
{return vec2(float(i)/float(N),radicalInverse_VdC(i));}
|
|
529
|
+
#else
|
|
530
|
+
float vanDerCorpus(int n,int base)
|
|
531
|
+
{float invBase=1.0/float(base);float denom =1.0;float result =0.0;for(int i=0; i<32; ++i)
|
|
532
|
+
{if(n>0)
|
|
533
|
+
{denom =mod(float(n),2.0);result+=denom*invBase;invBase=invBase/2.0;n =int(float(n)/2.0);}}
|
|
534
|
+
return result;}
|
|
535
|
+
vec2 hammersley(int i,int N)
|
|
536
|
+
{return vec2(float(i)/float(N),vanDerCorpus(i,2));}
|
|
508
537
|
#endif
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
538
|
+
float log4(float x) {return log2(x)/2.;}
|
|
539
|
+
vec3 uv_to_normal(vec2 uv) {vec3 N;vec2 uvRange=uv;float theta=uvRange.x*2.*PI;float phi=uvRange.y*PI;float sinPhi=sin(phi);N.x=cos(theta)*sinPhi;N.z=sin(theta)*sinPhi;N.y=cos(phi);return N;}
|
|
540
|
+
const float NUM_SAMPLES_FLOAT=float(NUM_SAMPLES);const float NUM_SAMPLES_FLOAT_INVERSED=1./NUM_SAMPLES_FLOAT;const float K=4.;
|
|
541
|
+
#define inline
|
|
542
|
+
vec3 irradiance(
|
|
543
|
+
#ifdef CUSTOM_IRRADIANCE_FILTERING_INPUT
|
|
544
|
+
CUSTOM_IRRADIANCE_FILTERING_INPUT
|
|
545
|
+
#else
|
|
546
|
+
samplerCube inputTexture,
|
|
512
547
|
#endif
|
|
513
|
-
|
|
514
|
-
float
|
|
548
|
+
vec3 inputN,vec2 filteringInfo,
|
|
549
|
+
float diffuseRoughness,
|
|
550
|
+
vec3 surfaceAlbedo,
|
|
551
|
+
vec3 inputV
|
|
552
|
+
#if IBL_CDF_FILTERING
|
|
553
|
+
,sampler2D icdfSampler
|
|
515
554
|
#endif
|
|
516
|
-
|
|
517
|
-
|
|
555
|
+
)
|
|
556
|
+
{vec3 n=normalize(inputN);vec3 result=vec3(0.);
|
|
557
|
+
#ifndef IBL_CDF_FILTERING
|
|
558
|
+
vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);mat3 tbnInverse=mat3(tangent.x,bitangent.x,n.x,tangent.y,bitangent.y,n.y,tangent.z,bitangent.z,n.z);
|
|
518
559
|
#endif
|
|
519
|
-
|
|
520
|
-
#
|
|
521
|
-
|
|
560
|
+
float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));
|
|
561
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
562
|
+
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
563
|
+
#else
|
|
564
|
+
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
522
565
|
#endif
|
|
523
|
-
|
|
524
|
-
#
|
|
525
|
-
|
|
566
|
+
{vec2 Xi=hammersley(i,NUM_SAMPLES);
|
|
567
|
+
#if IBL_CDF_FILTERING
|
|
568
|
+
vec2 T;T.x=texture2D(icdfSampler,vec2(Xi.x,0.)).x;T.y=texture2D(icdfSampler,vec2(T.x,Xi.y)).y;vec3 Ls=uv_to_normal(vec2(1.0-fract(T.x+0.25),T.y));float NoL=dot(n,Ls);float NoV=dot(n,inputV);
|
|
569
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
570
|
+
float LoV=dot (Ls,inputV);
|
|
571
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
572
|
+
vec3 H=(inputV+Ls)*0.5;float VoH=dot(inputV,H);
|
|
526
573
|
#endif
|
|
527
|
-
uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection;
|
|
528
|
-
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["sceneFragmentDeclaration",0,{name:t,shader:i}],19752);let r="openpbrDielectricReflectance",a=`struct ReflectanceParams
|
|
529
|
-
{float F0;float F90;vec3 coloredF0;vec3 coloredF90;};
|
|
530
|
-
#define pbr_inline
|
|
531
|
-
ReflectanceParams dielectricReflectance(
|
|
532
|
-
in float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight
|
|
533
|
-
)
|
|
534
|
-
{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float dielectricF0_NoSpec=pow((1.0-outsideIOR)/(1.0+outsideIOR),2.0);float f90Scale=clamp(2.0*abs(insideIOR-outsideIOR),0.0,1.0);float f90Scale_NoSpec=clamp(2.0*abs(1.0-outsideIOR),0.0,1.0);
|
|
535
|
-
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
536
|
-
vec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);vec3 dielectricColorF90_NoSpec=specularColor.rgb*vec3(f90Scale_NoSpec);
|
|
537
574
|
#else
|
|
538
|
-
vec3
|
|
575
|
+
vec3 Ls=hemisphereCosSample(Xi);Ls=normalize(Ls);float NoL=Ls.z;
|
|
576
|
+
vec3 V=tbnInverse*inputV;float NoV=V.z;
|
|
577
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
578
|
+
float LoV=dot (Ls,V);
|
|
579
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
580
|
+
vec3 H=(V+Ls)*0.5;float VoH=dot(V,H);
|
|
539
581
|
#endif
|
|
540
|
-
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
541
|
-
float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight)*maxF0;
|
|
542
|
-
#else
|
|
543
|
-
outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight);
|
|
544
582
|
#endif
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;mat3 TBN;};
|
|
549
|
-
#define pbr_inline
|
|
550
|
-
geometryInfoOutParams geometryInfo(
|
|
551
|
-
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
552
|
-
)
|
|
553
|
-
{geometryInfoOutParams outParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
554
|
-
#if defined(ENVIRONMENTBRDF)
|
|
555
|
-
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
583
|
+
if (NoL>0.) {
|
|
584
|
+
#if IBL_CDF_FILTERING
|
|
585
|
+
float pdf=texture2D(icdfSampler,T).z;vec3 c=textureCubeLodEXT(inputTexture,Ls,0.).rgb;
|
|
556
586
|
#else
|
|
557
|
-
|
|
587
|
+
float pdf_inversed=PI/NoL;float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(l,0.,maxLevel);
|
|
588
|
+
#ifdef CUSTOM_IRRADIANCE_FILTERING_FUNCTION
|
|
589
|
+
CUSTOM_IRRADIANCE_FILTERING_FUNCTION
|
|
590
|
+
#else
|
|
591
|
+
vec3 c=textureCubeLodEXT(inputTexture,tbn*Ls,mipLevel).rgb;
|
|
558
592
|
#endif
|
|
559
|
-
outParams.horizonOcclusion=1.0;
|
|
560
|
-
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
561
|
-
#ifdef HORIZONOCCLUSION
|
|
562
|
-
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
563
|
-
#ifdef REFLECTIONMAP_3D
|
|
564
|
-
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
565
593
|
#endif
|
|
594
|
+
#if GAMMA_INPUT
|
|
595
|
+
c=toLinearSpace(c);
|
|
566
596
|
#endif
|
|
597
|
+
vec3 diffuseRoughnessTerm=vec3(1.0);
|
|
598
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
599
|
+
diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;
|
|
600
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
601
|
+
diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
567
602
|
#endif
|
|
603
|
+
#if IBL_CDF_FILTERING
|
|
604
|
+
vec3 light=pdf<1e-6 ? vec3(0.0) : vec3(1.0)/vec3(pdf)*c;result+=NoL*diffuseRoughnessTerm*light;
|
|
605
|
+
#else
|
|
606
|
+
result+=c*diffuseRoughnessTerm;
|
|
568
607
|
#endif
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
,in vec3 vAnisotropy,in mat3 TBN
|
|
574
|
-
)
|
|
575
|
-
{geometryInfoOutParams geoInfo=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);geometryInfoAnisoOutParams outParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);mat3 anisoTBN=mat3(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;}`;o.ShaderStore.IncludesShadersStore[n]||(o.ShaderStore.IncludesShadersStore[n]=l),e.s(["openpbrGeometryInfo",0,{name:n,shader:l}],98744);let c="openpbrIblFunctions",f=`#ifdef REFLECTION
|
|
576
|
-
vec3 sampleIrradiance(
|
|
577
|
-
in vec3 surfaceNormal
|
|
578
|
-
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
579
|
-
,in vec3 vEnvironmentIrradianceSH
|
|
608
|
+
}}
|
|
609
|
+
result=result*NUM_SAMPLES_FLOAT_INVERSED;
|
|
610
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
611
|
+
result=result/clampedAlbedo;
|
|
580
612
|
#endif
|
|
581
|
-
|
|
582
|
-
|
|
613
|
+
return result;}
|
|
614
|
+
#define inline
|
|
615
|
+
vec3 radiance(float alphaG,samplerCube inputTexture,vec3 inputN,vec2 filteringInfo)
|
|
616
|
+
{vec3 n=normalize(inputN);vec3 c=textureCubeLodEXT(inputTexture,n,0.).rgb;
|
|
617
|
+
if (alphaG==0.) {
|
|
618
|
+
#if GAMMA_INPUT
|
|
619
|
+
c=toLinearSpace(c);
|
|
583
620
|
#endif
|
|
584
|
-
|
|
585
|
-
#
|
|
586
|
-
|
|
621
|
+
return c;} else {vec3 result=vec3(0.);vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);float weight=0.;
|
|
622
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
623
|
+
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
587
624
|
#else
|
|
588
|
-
|
|
625
|
+
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
589
626
|
#endif
|
|
590
|
-
|
|
591
|
-
|
|
627
|
+
{vec2 Xi=hammersley(i,NUM_SAMPLES);vec3 H=hemisphereImportanceSampleDggx(Xi,alphaG);float NoV=1.;float NoH=H.z;float NoH2=H.z*H.z;float NoL=2.*NoH2-1.;vec3 L=vec3(2.*NoH*H.x,2.*NoH*H.y,NoL);L=normalize(L);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_TrowbridgeReitzGGX(NoH,alphaG);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,tbn*L,mipLevel).rgb;
|
|
628
|
+
#if GAMMA_INPUT
|
|
629
|
+
c=toLinearSpace(c);
|
|
592
630
|
#endif
|
|
631
|
+
result+=c*NoL;}}
|
|
632
|
+
result=result/weight;return result;}}
|
|
633
|
+
#ifdef ANISOTROPIC
|
|
634
|
+
#define inline
|
|
635
|
+
vec3 radianceAnisotropic(
|
|
636
|
+
float alphaTangent,
|
|
637
|
+
float alphaBitangent,
|
|
638
|
+
samplerCube inputTexture,
|
|
639
|
+
vec3 inputView,
|
|
640
|
+
vec3 inputTangent,
|
|
641
|
+
vec3 inputBitangent,
|
|
642
|
+
vec3 inputNormal,
|
|
643
|
+
vec2 filteringInfo,
|
|
644
|
+
vec2 noiseInput,
|
|
645
|
+
bool isRefraction,
|
|
646
|
+
float ior
|
|
647
|
+
)
|
|
648
|
+
{vec3 V=inputView;vec3 N=inputNormal;vec3 T=inputTangent;vec3 B=inputBitangent;vec3 result=vec3(0.);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float clampedAlphaT=max(alphaTangent,MINIMUMVARIANCE);float clampedAlphaB=max(alphaBitangent,MINIMUMVARIANCE);float effectiveDim=dim0*sqrt(clampedAlphaT*clampedAlphaB);float omegaP=(4.*PI)/(6.*effectiveDim*effectiveDim);const float noiseScale=clamp(log2(float(NUM_SAMPLES))/12.0,0.0,1.0);float weight=0.;
|
|
649
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
650
|
+
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
651
|
+
#else
|
|
652
|
+
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
593
653
|
#endif
|
|
594
|
-
|
|
595
|
-
,
|
|
596
|
-
|
|
597
|
-
,
|
|
654
|
+
{vec2 Xi=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5,0.015,noiseScale));
|
|
655
|
+
vec3 H_tangent=hemisphereImportanceSampleDggxAnisotropic(Xi,clampedAlphaT,clampedAlphaB);vec3 H=normalize(H_tangent.x*T+H_tangent.y*B+H_tangent.z*N);vec3 L;if (isRefraction) {L=refract(-V,H,1.0/ior);} else {L=reflect(-V,H);}
|
|
656
|
+
float NoH=max(dot(N,H),0.001);float VoH=max(dot(V,H),0.001);float NoL=max(dot(N,L),0.001);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_BurleyGGX_Anisotropic(
|
|
657
|
+
H_tangent.z,H_tangent.x,H_tangent.y,vec2(clampedAlphaT,clampedAlphaB)
|
|
658
|
+
);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,L,mipLevel).rgb;
|
|
659
|
+
#if GAMMA_INPUT
|
|
660
|
+
c=toLinearSpace(c);
|
|
598
661
|
#endif
|
|
662
|
+
result+=c*NoL;}}
|
|
663
|
+
result=result/weight;return result;}
|
|
599
664
|
#endif
|
|
600
|
-
,in vec2 vReflectionInfos
|
|
601
|
-
,in vec3 viewDirectionW
|
|
602
|
-
,in float diffuseRoughness
|
|
603
|
-
,in vec3 surfaceAlbedo
|
|
604
|
-
) {vec3 environmentIrradiance=vec3(0.,0.,0.);
|
|
605
|
-
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
606
|
-
vec3 irradianceVector=(iblMatrix*vec4(surfaceNormal,0)).xyz;vec3 irradianceView=(iblMatrix*vec4(viewDirectionW,0)).xyz;
|
|
607
|
-
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
608
|
-
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
609
|
-
{float NdotV=max(dot(surfaceNormal,viewDirectionW),0.0);irradianceVector=mix(irradianceVector,irradianceView,(0.5*(1.0-NdotV))*diffuseRoughness);}
|
|
610
665
|
#endif
|
|
611
666
|
#endif
|
|
612
|
-
|
|
613
|
-
|
|
667
|
+
`;o.ShaderStore.IncludesShadersStore[m]||(o.ShaderStore.IncludesShadersStore[m]=g),e.s(["hdrFilteringFunctions",0,{name:m,shader:g}],38416);let E="pbrDirectLightingFunctions",p=`#define CLEARCOATREFLECTANCE90 1.0
|
|
668
|
+
struct lightingInfo
|
|
669
|
+
{vec3 diffuse;
|
|
670
|
+
#ifdef SS_TRANSLUCENCY
|
|
671
|
+
vec3 diffuseTransmission;
|
|
614
672
|
#endif
|
|
615
|
-
#ifdef
|
|
616
|
-
|
|
673
|
+
#ifdef SPECULARTERM
|
|
674
|
+
vec3 specular;
|
|
617
675
|
#endif
|
|
676
|
+
#ifdef CLEARCOAT
|
|
677
|
+
vec4 clearCoat;
|
|
618
678
|
#endif
|
|
619
|
-
#ifdef
|
|
620
|
-
|
|
621
|
-
environmentIrradiance=vEnvironmentIrradianceSH;
|
|
622
|
-
#else
|
|
623
|
-
#if defined(REALTIME_FILTERING)
|
|
624
|
-
environmentIrradiance=irradiance(reflectionSampler,irradianceVector,vReflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
625
|
-
#ifdef IBL_CDF_FILTERING
|
|
626
|
-
,icdfSampler
|
|
679
|
+
#ifdef SHEEN
|
|
680
|
+
vec3 sheen;
|
|
627
681
|
#endif
|
|
628
|
-
)
|
|
682
|
+
};float adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance) {
|
|
683
|
+
#if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)
|
|
684
|
+
float lightRoughness=lightRadius/lightDistance;float totalRoughness=saturate(lightRoughness+roughness);return totalRoughness;
|
|
629
685
|
#else
|
|
630
|
-
|
|
686
|
+
return roughness;
|
|
631
687
|
#endif
|
|
688
|
+
}
|
|
689
|
+
vec3 computeHemisphericDiffuseLighting(preLightingInfo info,vec3 lightColor,vec3 groundColor) {return mix(groundColor,lightColor,info.NdotL);}
|
|
690
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
691
|
+
vec3 computeAreaDiffuseLighting(preLightingInfo info,vec3 lightColor) {return info.areaLightDiffuse*lightColor;}
|
|
632
692
|
#endif
|
|
633
|
-
|
|
634
|
-
#
|
|
635
|
-
|
|
636
|
-
#else
|
|
637
|
-
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,reflectionCoords);
|
|
638
|
-
#endif
|
|
639
|
-
environmentIrradiance=environmentIrradianceFromTexture.rgb;
|
|
640
|
-
#ifdef RGBDREFLECTION
|
|
641
|
-
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
642
|
-
#endif
|
|
643
|
-
#ifdef GAMMAREFLECTION
|
|
644
|
-
environmentIrradiance.rgb=toLinearSpace(environmentIrradiance.rgb);
|
|
645
|
-
#endif
|
|
646
|
-
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
647
|
-
vec3 Ls=normalize(reflectionDominantDirection);float NoL=dot(irradianceVector,Ls);float NoV=dot(irradianceVector,irradianceView);vec3 diffuseRoughnessTerm=vec3(1.0);
|
|
648
|
-
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
649
|
-
float LoV=dot (Ls,irradianceView);float mag=length(reflectionDominantDirection)*2.0;vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3(1.0),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0,1.0)));
|
|
693
|
+
vec3 computeDiffuseLighting(preLightingInfo info,vec3 lightColor) {vec3 diffuseTerm=vec3(1.0/PI);
|
|
694
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
|
|
695
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
|
|
650
696
|
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
651
|
-
|
|
697
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
|
|
698
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
699
|
+
vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
|
|
652
700
|
#endif
|
|
653
|
-
|
|
701
|
+
return diffuseTerm*info.attenuation*info.NdotL*lightColor;}
|
|
702
|
+
#define inline
|
|
703
|
+
vec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix,vec3 posW){vec4 strq=textureProjectionMatrix*vec4(posW,1.0);strq/=strq.w;vec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;return toLinearSpace(textureColor);}
|
|
704
|
+
#ifdef SS_TRANSLUCENCY
|
|
705
|
+
vec3 computeDiffuseTransmittedLighting(preLightingInfo info,vec3 lightColor,vec3 transmittance) {vec3 transmittanceNdotL=vec3(0.);float NdotL=absEps(info.NdotLUnclamped);
|
|
706
|
+
#ifndef SS_TRANSLUCENCY_LEGACY
|
|
707
|
+
if (info.NdotLUnclamped<0.0) {
|
|
654
708
|
#endif
|
|
709
|
+
float wrapNdotL=computeWrappedDiffuseNdotL(NdotL,0.02);float trAdapt=step(0.,info.NdotLUnclamped);transmittanceNdotL=mix(transmittance*wrapNdotL,vec3(wrapNdotL),trAdapt);
|
|
710
|
+
#ifndef SS_TRANSLUCENCY_LEGACY
|
|
711
|
+
}
|
|
712
|
+
vec3 diffuseTerm=vec3(1.0/PI);
|
|
713
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
|
|
714
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
|
|
715
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
716
|
+
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
|
|
717
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
718
|
+
vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
|
|
655
719
|
#endif
|
|
656
|
-
environmentIrradiance*=vReflectionInfos.x;return environmentIrradiance;}
|
|
657
|
-
#define pbr_inline
|
|
658
|
-
#ifdef REFLECTIONMAP_3D
|
|
659
|
-
vec3 createReflectionCoords(
|
|
660
720
|
#else
|
|
661
|
-
|
|
662
|
-
#endif
|
|
663
|
-
in vec3 vPositionW
|
|
664
|
-
,in vec3 normalW
|
|
665
|
-
)
|
|
666
|
-
{vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);
|
|
667
|
-
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
668
|
-
reflectionVector.z*=-1.0;
|
|
721
|
+
float diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);
|
|
669
722
|
#endif
|
|
670
|
-
|
|
671
|
-
vec3 reflectionCoords=reflectionVector;
|
|
672
|
-
#else
|
|
673
|
-
vec2 reflectionCoords=reflectionVector.xy;
|
|
674
|
-
#ifdef REFLECTIONMAP_PROJECTION
|
|
675
|
-
reflectionCoords/=reflectionVector.z;
|
|
723
|
+
return diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;}
|
|
676
724
|
#endif
|
|
677
|
-
|
|
725
|
+
#ifdef SPECULARTERM
|
|
726
|
+
vec3 computeSpecularLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 fresnel,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness);
|
|
727
|
+
#ifdef IRIDESCENCE
|
|
728
|
+
fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
|
|
678
729
|
#endif
|
|
679
|
-
|
|
680
|
-
#
|
|
681
|
-
|
|
682
|
-
vec3 sampleRadiance(
|
|
683
|
-
in float alphaG
|
|
684
|
-
,in vec3 vReflectionMicrosurfaceInfos
|
|
685
|
-
,in vec2 vReflectionInfos
|
|
686
|
-
,in geometryInfoOutParams geoInfo
|
|
687
|
-
#ifdef REFLECTIONMAP_3D
|
|
688
|
-
,in samplerCube reflectionSampler
|
|
689
|
-
,const vec3 reflectionCoords
|
|
730
|
+
float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);
|
|
731
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
732
|
+
float smithVisibility=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG);
|
|
690
733
|
#else
|
|
691
|
-
,
|
|
692
|
-
,const vec2 reflectionCoords
|
|
734
|
+
float smithVisibility=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG);
|
|
693
735
|
#endif
|
|
694
|
-
|
|
695
|
-
|
|
736
|
+
vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
737
|
+
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
738
|
+
vec3 computeAreaSpecularLighting(preLightingInfo info,vec3 specularColor,vec3 reflectance0,vec3 reflectance90) {vec3 fresnel=specularColor*info.areaLightFresnel.x*reflectance0+( vec3( 1.0 )-specularColor )*info.areaLightFresnel.y*reflectance90;return specularColor*fresnel*info.areaLightSpecular;}
|
|
696
739
|
#endif
|
|
697
|
-
)
|
|
698
|
-
{vec4 environmentRadiance=vec4(0.,0.,0.,0.);
|
|
699
|
-
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
700
|
-
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
701
|
-
#elif defined(LINEARSPECULARREFLECTION)
|
|
702
|
-
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
703
|
-
#else
|
|
704
|
-
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
705
740
|
#endif
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
741
|
+
#ifdef FUZZ
|
|
742
|
+
float evalFuzz(vec3 L,float NdotL,float NdotV,vec3 T,vec3 B,vec3 ltcLut)
|
|
743
|
+
{if (NdotL<=0.0 || NdotV<=0.0)
|
|
744
|
+
return 0.0;mat3 M=mat3(
|
|
745
|
+
vec3(ltcLut.r,0.0,0.0),
|
|
746
|
+
vec3(ltcLut.g,1.0,0.0),
|
|
747
|
+
vec3(0.0,0.0,1.0)
|
|
748
|
+
);vec3 Llocal=vec3(dot(L,T),dot(L,B),NdotL);vec3 Lwarp=normalize(M*Llocal);float cosThetaWarp=max(Lwarp.z,0.0);return cosThetaWarp*NdotL;}
|
|
711
749
|
#endif
|
|
712
|
-
#
|
|
713
|
-
|
|
750
|
+
#if defined(ANISOTROPIC) && defined(ANISOTROPIC_OPENPBR)
|
|
751
|
+
vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=vec3(distribution*smithVisibility);return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
752
|
+
#elif defined(ANISOTROPIC)
|
|
753
|
+
vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);alphaTB=max(alphaTB,square(geometricRoughnessFactor));vec3 fresnel=fresnelSchlickGGX(info.VdotH,reflectance0,reflectance90);
|
|
754
|
+
#ifdef IRIDESCENCE
|
|
755
|
+
fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
|
|
714
756
|
#endif
|
|
715
|
-
|
|
716
|
-
environmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);
|
|
757
|
+
float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
717
758
|
#endif
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
,in vec3 vReflectionMicrosurfaceInfos
|
|
725
|
-
,in vec2 vReflectionInfos
|
|
726
|
-
,in geometryInfoAnisoOutParams geoInfo
|
|
727
|
-
,const vec3 normalW
|
|
728
|
-
,const vec3 viewDirectionW
|
|
729
|
-
,const vec3 positionW
|
|
730
|
-
,const vec3 noise
|
|
731
|
-
,bool isRefraction
|
|
732
|
-
,float ior
|
|
733
|
-
#ifdef REFLECTIONMAP_3D
|
|
734
|
-
,in samplerCube reflectionSampler
|
|
735
|
-
#else
|
|
736
|
-
,in sampler2D reflectionSampler
|
|
759
|
+
#ifdef CLEARCOAT
|
|
760
|
+
vec4 computeClearCoatLighting(preLightingInfo info,vec3 Ncc,float geometricRoughnessFactor,float clearCoatIntensity,vec3 lightColor) {float NccdotL=saturateEps(dot(Ncc,info.L));float NccdotH=saturateEps(dot(Ncc,info.H));float clearCoatRoughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(clearCoatRoughness);float fresnel=fresnelSchlickGGX(info.VdotH,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnel*=clearCoatIntensity;float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NccdotH,alphaG);float kelemenVisibility=visibility_Kelemen(info.VdotH);float clearCoatTerm=fresnel*distribution*kelemenVisibility;return vec4(
|
|
761
|
+
clearCoatTerm*info.attenuation*NccdotL*lightColor,
|
|
762
|
+
1.0-fresnel
|
|
763
|
+
);}
|
|
764
|
+
vec3 computeClearCoatLightingAbsorption(float NdotVRefract,vec3 L,vec3 Ncc,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 LRefract=-refract(L,Ncc,vClearCoatRefractionParams.y);float NdotLRefract=saturateEps(dot(Ncc,LRefract));vec3 absorption=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);return absorption;}
|
|
737
765
|
#endif
|
|
738
|
-
#ifdef
|
|
739
|
-
,
|
|
766
|
+
#ifdef SHEEN
|
|
767
|
+
vec3 computeSheenLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness);float fresnel=1.;float distribution=normalDistributionFunction_CharlieSheen(NdotH,alphaG);/*#ifdef SHEEN_SOFTER
|
|
768
|
+
float visibility=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG);
|
|
769
|
+
#else */
|
|
770
|
+
float visibility=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */
|
|
771
|
+
float sheenTerm=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;}
|
|
740
772
|
#endif
|
|
741
|
-
)
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
745
|
-
#elif defined(LINEARSPECULARREFLECTION)
|
|
746
|
-
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
773
|
+
`;o.ShaderStore.IncludesShadersStore[E]||(o.ShaderStore.IncludesShadersStore[E]=p),e.s(["pbrDirectLightingFunctions",0,{name:E,shader:p}],54398);let h="pbrBlockNormalGeometric",S=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);
|
|
774
|
+
#ifdef NORMAL
|
|
775
|
+
vec3 normalW=normalize(vNormalW);
|
|
747
776
|
#else
|
|
748
|
-
|
|
777
|
+
vec3 normalW=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;
|
|
749
778
|
#endif
|
|
750
|
-
|
|
751
|
-
#
|
|
752
|
-
|
|
753
|
-
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
754
|
-
view.z*=-1.0;tangent.z*=-1.0;bitangent.z*=-1.0;normal.z*=-1.0;
|
|
779
|
+
vec3 geometricNormalW=normalW;
|
|
780
|
+
#if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
|
|
781
|
+
geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW;
|
|
755
782
|
#endif
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
bitangent,normal,
|
|
760
|
-
vReflectionFilteringInfo,noise.xy,isRefraction,ior),
|
|
761
|
-
1.0);
|
|
762
|
-
#else
|
|
763
|
-
const int samples=16;vec4 radianceSample=vec4(0.0);vec3 reflectionCoords=vec3(0.0);float sample_weight=0.0;float total_weight=0.0;float step=1.0/float(max(samples-1,1));for (int i=0; i<samples; ++i) {float t=mix(-1.0,1.0,float(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);vec3 bentNormal;if (t<0.0) {float blend=t+1.0;bentNormal=normalize(mix(-geoInfo.anisotropicTangent,normalW,blend));} else if (t>0.0) {float blend=t;bentNormal=normalize(mix(normalW,geoInfo.anisotropicTangent,blend));} else {bentNormal=normalW;}
|
|
764
|
-
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
765
|
-
reflectionCoords=vec3(reflectionMatrix*vec4(reflectionCoords,0));
|
|
766
|
-
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
767
|
-
reflectionCoords.z*=-1.0;
|
|
783
|
+
`;o.ShaderStore.IncludesShadersStore[h]||(o.ShaderStore.IncludesShadersStore[h]=S),e.s(["pbrBlockNormalGeometric",0,{name:h,shader:S}],53804);let R="pbrBlockImageProcessing",I=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING)
|
|
784
|
+
#if !defined(SKIPFINALCOLORCLAMP)
|
|
785
|
+
finalColor.rgb=clamp(finalColor.rgb,0.,30.0);
|
|
768
786
|
#endif
|
|
769
|
-
radianceSample=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
770
|
-
#ifdef RGBDREFLECTION
|
|
771
|
-
environmentRadiance.rgb+=sample_weight*fromRGBD(radianceSample);
|
|
772
|
-
#elif defined(GAMMAREFLECTION)
|
|
773
|
-
environmentRadiance.rgb+=sample_weight*toLinearSpace(radianceSample.rgb);
|
|
774
787
|
#else
|
|
775
|
-
|
|
776
|
-
#endif
|
|
777
|
-
total_weight+=sample_weight;}
|
|
778
|
-
environmentRadiance=vec4(environmentRadiance.xyz/float(total_weight),1.0);
|
|
788
|
+
finalColor=applyImageProcessing(finalColor);
|
|
779
789
|
#endif
|
|
780
|
-
|
|
790
|
+
finalColor.a*=visibility;
|
|
791
|
+
#ifdef PREMULTIPLYALPHA
|
|
792
|
+
finalColor.rgb*=finalColor.a;
|
|
781
793
|
#endif
|
|
794
|
+
`;o.ShaderStore.IncludesShadersStore[R]||(o.ShaderStore.IncludesShadersStore[R]=I),e.s(["pbrBlockImageProcessing",0,{name:R,shader:I}],22806);let L="pbrDebug",N=`#if DEBUGMODE>0
|
|
795
|
+
if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) {
|
|
796
|
+
#if DEBUGMODE==1
|
|
797
|
+
gl_FragColor.rgb=vPositionW.rgb;
|
|
798
|
+
#define DEBUGMODE_NORMALIZE
|
|
799
|
+
#elif DEBUGMODE==2 && defined(NORMAL)
|
|
800
|
+
gl_FragColor.rgb=vNormalW.rgb;
|
|
801
|
+
#define DEBUGMODE_NORMALIZE
|
|
802
|
+
#elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC)
|
|
803
|
+
gl_FragColor.rgb=TBN[0];
|
|
804
|
+
#define DEBUGMODE_NORMALIZE
|
|
805
|
+
#elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC)
|
|
806
|
+
gl_FragColor.rgb=TBN[1];
|
|
807
|
+
#define DEBUGMODE_NORMALIZE
|
|
808
|
+
#elif DEBUGMODE==5
|
|
809
|
+
gl_FragColor.rgb=normalW;
|
|
810
|
+
#define DEBUGMODE_NORMALIZE
|
|
811
|
+
#elif DEBUGMODE==6 && defined(MAINUV1)
|
|
812
|
+
gl_FragColor.rgb=vec3(vMainUV1,0.0);
|
|
813
|
+
#elif DEBUGMODE==7 && defined(MAINUV2)
|
|
814
|
+
gl_FragColor.rgb=vec3(vMainUV2,0.0);
|
|
815
|
+
#elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
|
|
816
|
+
gl_FragColor.rgb=clearcoatOut.TBNClearCoat[0];
|
|
817
|
+
#define DEBUGMODE_NORMALIZE
|
|
818
|
+
#elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
|
|
819
|
+
gl_FragColor.rgb=clearcoatOut.TBNClearCoat[1];
|
|
820
|
+
#define DEBUGMODE_NORMALIZE
|
|
821
|
+
#elif DEBUGMODE==10 && defined(CLEARCOAT)
|
|
822
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatNormalW;
|
|
823
|
+
#define DEBUGMODE_NORMALIZE
|
|
824
|
+
#elif DEBUGMODE==11 && defined(ANISOTROPIC)
|
|
825
|
+
gl_FragColor.rgb=anisotropicOut.anisotropicNormal;
|
|
826
|
+
#define DEBUGMODE_NORMALIZE
|
|
827
|
+
#elif DEBUGMODE==12 && defined(ANISOTROPIC)
|
|
828
|
+
gl_FragColor.rgb=anisotropicOut.anisotropicTangent;
|
|
829
|
+
#define DEBUGMODE_NORMALIZE
|
|
830
|
+
#elif DEBUGMODE==13 && defined(ANISOTROPIC)
|
|
831
|
+
gl_FragColor.rgb=anisotropicOut.anisotropicBitangent;
|
|
832
|
+
#define DEBUGMODE_NORMALIZE
|
|
833
|
+
#elif DEBUGMODE==20 && defined(ALBEDO)
|
|
834
|
+
gl_FragColor.rgb=albedoTexture.rgb;
|
|
835
|
+
#ifndef GAMMAALBEDO
|
|
836
|
+
#define DEBUGMODE_GAMMA
|
|
782
837
|
#endif
|
|
783
|
-
#
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
#
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
#
|
|
791
|
-
vec3 openPBRBrdf=vec3(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);vec3 b =getF82B(reflectance.coloredF0,reflectance.coloredF90);vec3 E_F82=getF82DirectionalAlbedo(reflectance.coloredF0,vec3(1.0),b,openPBRBrdf);vec3 F_avg=getF82AverageFresnel(reflectance.coloredF0,b);vec3 ECF =vec3(1.0)+F_avg*(vec3(1.0)/openPBRBrdf.y-vec3(1.0));return clamp(E_F82*ECF,vec3(0.0),vec3(1.0));
|
|
792
|
-
#else
|
|
793
|
-
return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
|
|
838
|
+
#elif DEBUGMODE==21 && defined(AMBIENT)
|
|
839
|
+
gl_FragColor.rgb=aoOut.ambientOcclusionColorMap.rgb;
|
|
840
|
+
#elif DEBUGMODE==22 && defined(OPACITY)
|
|
841
|
+
gl_FragColor.rgb=opacityMap.rgb;
|
|
842
|
+
#elif DEBUGMODE==23 && defined(EMISSIVE)
|
|
843
|
+
gl_FragColor.rgb=emissiveColorTex.rgb;
|
|
844
|
+
#ifndef GAMMAEMISSIVE
|
|
845
|
+
#define DEBUGMODE_GAMMA
|
|
794
846
|
#endif
|
|
795
|
-
|
|
847
|
+
#elif DEBUGMODE==24 && defined(LIGHTMAP)
|
|
848
|
+
gl_FragColor.rgb=lightmapColor.rgb;
|
|
849
|
+
#ifndef GAMMALIGHTMAP
|
|
850
|
+
#define DEBUGMODE_GAMMA
|
|
796
851
|
#endif
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
#
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
#
|
|
805
|
-
|
|
806
|
-
#
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
#
|
|
811
|
-
|
|
852
|
+
#elif DEBUGMODE==25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW)
|
|
853
|
+
gl_FragColor.rgb=reflectivityOut.surfaceMetallicColorMap.rgb;
|
|
854
|
+
#elif DEBUGMODE==26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW)
|
|
855
|
+
gl_FragColor.rgb=reflectivityOut.surfaceReflectivityColorMap.rgb;
|
|
856
|
+
#define DEBUGMODE_GAMMA
|
|
857
|
+
#elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)
|
|
858
|
+
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatMapData.rg,0.0);
|
|
859
|
+
#elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
|
|
860
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatTintMapData.rgb;
|
|
861
|
+
#elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE)
|
|
862
|
+
gl_FragColor.rgb=sheenOut.sheenMapData.rgb;
|
|
863
|
+
#elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)
|
|
864
|
+
gl_FragColor.rgb=anisotropicOut.anisotropyMapData.rgb;
|
|
865
|
+
#elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)
|
|
866
|
+
gl_FragColor.rgb=subSurfaceOut.thicknessMap.rgb;
|
|
867
|
+
#elif DEBUGMODE==32 && defined(BUMP)
|
|
868
|
+
gl_FragColor.rgb=texture2D(bumpSampler,vBumpUV).rgb;
|
|
869
|
+
#elif DEBUGMODE==40 && defined(SS_REFRACTION)
|
|
870
|
+
gl_FragColor.rgb=subSurfaceOut.environmentRefraction.rgb;
|
|
871
|
+
#define DEBUGMODE_GAMMA
|
|
872
|
+
#elif DEBUGMODE==41 && defined(REFLECTION)
|
|
873
|
+
gl_FragColor.rgb=reflectionOut.environmentRadiance.rgb;
|
|
874
|
+
#ifndef GAMMAREFLECTION
|
|
875
|
+
#define DEBUGMODE_GAMMA
|
|
812
876
|
#endif
|
|
813
|
-
#
|
|
814
|
-
|
|
877
|
+
#elif DEBUGMODE==42 && defined(CLEARCOAT) && defined(REFLECTION)
|
|
878
|
+
gl_FragColor.rgb=clearcoatOut.environmentClearCoatRadiance.rgb;
|
|
879
|
+
#define DEBUGMODE_GAMMA
|
|
880
|
+
#elif DEBUGMODE==50
|
|
881
|
+
gl_FragColor.rgb=diffuseBase.rgb;
|
|
882
|
+
#define DEBUGMODE_GAMMA
|
|
883
|
+
#elif DEBUGMODE==51 && defined(SPECULARTERM)
|
|
884
|
+
gl_FragColor.rgb=specularBase.rgb;
|
|
885
|
+
#define DEBUGMODE_GAMMA
|
|
886
|
+
#elif DEBUGMODE==52 && defined(CLEARCOAT)
|
|
887
|
+
gl_FragColor.rgb=clearCoatBase.rgb;
|
|
888
|
+
#define DEBUGMODE_GAMMA
|
|
889
|
+
#elif DEBUGMODE==53 && defined(SHEEN)
|
|
890
|
+
gl_FragColor.rgb=sheenBase.rgb;
|
|
891
|
+
#define DEBUGMODE_GAMMA
|
|
892
|
+
#elif DEBUGMODE==54 && defined(REFLECTION)
|
|
893
|
+
gl_FragColor.rgb=reflectionOut.environmentIrradiance.rgb;
|
|
894
|
+
#ifndef GAMMAREFLECTION
|
|
895
|
+
#define DEBUGMODE_GAMMA
|
|
815
896
|
#endif
|
|
816
|
-
#
|
|
817
|
-
|
|
818
|
-
|
|
897
|
+
#elif DEBUGMODE==60
|
|
898
|
+
gl_FragColor.rgb=surfaceAlbedo.rgb;
|
|
899
|
+
#define DEBUGMODE_GAMMA
|
|
900
|
+
#elif DEBUGMODE==61
|
|
901
|
+
gl_FragColor.rgb=clearcoatOut.specularEnvironmentR0;
|
|
902
|
+
#define DEBUGMODE_GAMMA
|
|
903
|
+
#elif DEBUGMODE==62 && defined(METALLICWORKFLOW)
|
|
904
|
+
gl_FragColor.rgb=vec3(reflectivityOut.metallic);
|
|
905
|
+
#elif DEBUGMODE==71 && defined(METALLICWORKFLOW)
|
|
906
|
+
gl_FragColor.rgb=reflectivityOut.metallicF0;
|
|
907
|
+
#elif DEBUGMODE==63
|
|
908
|
+
gl_FragColor.rgb=vec3(roughness);
|
|
909
|
+
#elif DEBUGMODE==64
|
|
910
|
+
gl_FragColor.rgb=vec3(alphaG);
|
|
911
|
+
#elif DEBUGMODE==65
|
|
912
|
+
gl_FragColor.rgb=vec3(NdotV);
|
|
913
|
+
#elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
|
|
914
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatColor.rgb;
|
|
915
|
+
#define DEBUGMODE_GAMMA
|
|
916
|
+
#elif DEBUGMODE==67 && defined(CLEARCOAT)
|
|
917
|
+
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatRoughness);
|
|
918
|
+
#elif DEBUGMODE==68 && defined(CLEARCOAT)
|
|
919
|
+
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatNdotV);
|
|
920
|
+
#elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)
|
|
921
|
+
gl_FragColor.rgb=subSurfaceOut.transmittance;
|
|
922
|
+
#elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION)
|
|
923
|
+
gl_FragColor.rgb=subSurfaceOut.refractionTransmittance;
|
|
924
|
+
#elif DEBUGMODE==72
|
|
925
|
+
gl_FragColor.rgb=vec3(microSurface);
|
|
926
|
+
#elif DEBUGMODE==73
|
|
927
|
+
gl_FragColor.rgb=vAlbedoColor.rgb;
|
|
928
|
+
#define DEBUGMODE_GAMMA
|
|
929
|
+
#elif DEBUGMODE==74 && !defined(METALLICWORKFLOW)
|
|
930
|
+
gl_FragColor.rgb=vReflectivityColor.rgb;
|
|
931
|
+
#define DEBUGMODE_GAMMA
|
|
932
|
+
#elif DEBUGMODE==75
|
|
933
|
+
gl_FragColor.rgb=vEmissiveColor.rgb;
|
|
934
|
+
#define DEBUGMODE_GAMMA
|
|
935
|
+
#elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION)
|
|
936
|
+
gl_FragColor.rgb=vec3(seo);
|
|
937
|
+
#elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
|
|
938
|
+
gl_FragColor.rgb=vec3(eho);
|
|
939
|
+
#elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION)
|
|
940
|
+
gl_FragColor.rgb=vec3(energyConservationFactor);
|
|
941
|
+
#elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
942
|
+
gl_FragColor.rgb=baseSpecularEnvironmentReflectance;
|
|
943
|
+
#define DEBUGMODE_GAMMA
|
|
944
|
+
#elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
945
|
+
gl_FragColor.rgb=clearcoatOut.clearCoatEnvironmentReflectance;
|
|
946
|
+
#define DEBUGMODE_GAMMA
|
|
947
|
+
#elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION)
|
|
948
|
+
gl_FragColor.rgb=sheenOut.sheenEnvironmentReflectance;
|
|
949
|
+
#define DEBUGMODE_GAMMA
|
|
950
|
+
#elif DEBUGMODE==86 && defined(ALPHABLEND)
|
|
951
|
+
gl_FragColor.rgb=vec3(luminanceOverAlpha);
|
|
952
|
+
#elif DEBUGMODE==87
|
|
953
|
+
gl_FragColor.rgb=vec3(alpha);
|
|
954
|
+
#elif DEBUGMODE==88 && defined(ALBEDO)
|
|
955
|
+
gl_FragColor.rgb=vec3(albedoTexture.a);
|
|
956
|
+
#elif DEBUGMODE==89
|
|
957
|
+
gl_FragColor.rgb=aoOut.ambientOcclusionColor.rgb;
|
|
819
958
|
#else
|
|
820
|
-
|
|
821
|
-
#endif
|
|
822
|
-
transmission_color*=vTransmissionColorInfos.y;
|
|
823
|
-
#endif
|
|
824
|
-
#ifdef TRANSMISSION_DEPTH
|
|
825
|
-
transmission_depth*=transmissionDepthFromTexture.r;
|
|
959
|
+
float stripeWidth=30.;float stripePos=floor(gl_FragCoord.x/stripeWidth);float whichColor=mod(stripePos,2.);vec3 color1=vec3(.6,.2,.2);vec3 color2=vec3(.3,.1,.1);gl_FragColor.rgb=mix(color1,color2,whichColor);
|
|
826
960
|
#endif
|
|
827
|
-
|
|
828
|
-
|
|
961
|
+
gl_FragColor.rgb*=vDebugMode.y;
|
|
962
|
+
#ifdef DEBUGMODE_NORMALIZE
|
|
963
|
+
gl_FragColor.rgb=normalize(gl_FragColor.rgb)*0.5+0.5;
|
|
829
964
|
#endif
|
|
830
|
-
#ifdef
|
|
831
|
-
|
|
965
|
+
#ifdef DEBUGMODE_GAMMA
|
|
966
|
+
gl_FragColor.rgb=toGammaSpace(gl_FragColor.rgb);
|
|
832
967
|
#endif
|
|
833
|
-
|
|
834
|
-
#ifdef
|
|
835
|
-
|
|
968
|
+
gl_FragColor.a=1.0;
|
|
969
|
+
#ifdef PREPASS
|
|
970
|
+
gl_FragData[0]=toLinearSpace(gl_FragColor);
|
|
971
|
+
gl_FragData[1]=vec4(0.,0.,0.,0.);
|
|
836
972
|
#endif
|
|
837
|
-
#ifdef
|
|
838
|
-
|
|
973
|
+
#ifdef DEBUGMODE_FORCERETURN
|
|
974
|
+
return;
|
|
839
975
|
#endif
|
|
840
|
-
|
|
841
|
-
vec4 subsurfaceRadiusScaleFromTexture=TEXRD(subsurfaceRadiusScaleSampler,vSubsurfaceRadiusScaleUV+uvOffset);
|
|
976
|
+
}
|
|
842
977
|
#endif
|
|
843
|
-
|
|
844
|
-
#ifdef
|
|
845
|
-
|
|
978
|
+
`;o.ShaderStore.IncludesShadersStore[L]||(o.ShaderStore.IncludesShadersStore[L]=N),e.s(["pbrDebug",0,{name:L,shader:N}],73400)},22577,43894,e=>{"use strict";var o=e.i(2342);let t="pbrFragmentReflectionDeclaration",i=`#ifdef REFLECTION
|
|
979
|
+
#ifdef REFLECTIONMAP_3D
|
|
980
|
+
#define sampleReflection(s,c) textureCube(s,c)
|
|
981
|
+
uniform samplerCube reflectionSampler;
|
|
982
|
+
#ifdef LODBASEDMICROSFURACE
|
|
983
|
+
#define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l)
|
|
846
984
|
#else
|
|
847
|
-
|
|
985
|
+
uniform samplerCube reflectionSamplerLow;uniform samplerCube reflectionSamplerHigh;
|
|
848
986
|
#endif
|
|
987
|
+
#ifdef USEIRRADIANCEMAP
|
|
988
|
+
uniform samplerCube irradianceSampler;
|
|
849
989
|
#endif
|
|
850
|
-
#ifdef SUBSURFACE_COLOR
|
|
851
|
-
#ifdef SUBSURFACE_COLOR_GAMMA
|
|
852
|
-
subsurface_color*=toLinearSpace(subsurfaceColorFromTexture.rgb);
|
|
853
990
|
#else
|
|
854
|
-
|
|
991
|
+
#define sampleReflection(s,c) texture2D(s,c)
|
|
992
|
+
uniform sampler2D reflectionSampler;
|
|
993
|
+
#ifdef LODBASEDMICROSFURACE
|
|
994
|
+
#define sampleReflectionLod(s,c,l) texture2DLodEXT(s,c,l)
|
|
995
|
+
#else
|
|
996
|
+
uniform sampler2D reflectionSamplerLow;uniform sampler2D reflectionSamplerHigh;
|
|
855
997
|
#endif
|
|
856
|
-
|
|
998
|
+
#ifdef USEIRRADIANCEMAP
|
|
999
|
+
uniform sampler2D irradianceSampler;
|
|
857
1000
|
#endif
|
|
858
|
-
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
859
|
-
subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
|
|
860
1001
|
#endif
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
1002
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
1003
|
+
varying vec3 vPositionUVW;
|
|
1004
|
+
#else
|
|
1005
|
+
#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
|
|
1006
|
+
varying vec3 vDirectionW;
|
|
864
1007
|
#endif
|
|
865
|
-
#include<mainUVVaryingDeclaration>[1..7]
|
|
866
|
-
#ifdef NORMAL
|
|
867
|
-
varying vec3 vNormalW;
|
|
868
|
-
#if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
|
|
869
|
-
varying vec3 vEnvironmentIrradiance;
|
|
870
1008
|
#endif
|
|
871
1009
|
#endif
|
|
872
|
-
|
|
873
|
-
|
|
1010
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["pbrFragmentReflectionDeclaration",0,{name:t,shader:i}],22577);let r="pbrIBLFunctions",a=`#if defined(REFLECTION) || defined(SS_REFRACTION)
|
|
1011
|
+
float getLodFromAlphaG(float cubeMapDimensionPixels,float microsurfaceAverageSlope) {float microsurfaceAverageSlopeTexels=cubeMapDimensionPixels*microsurfaceAverageSlope;float lod=log2(microsurfaceAverageSlopeTexels);return lod;}
|
|
1012
|
+
float getLinearLodFromRoughness(float cubeMapDimensionPixels,float roughness) {float lod=log2(cubeMapDimensionPixels)*roughness;return lod;}
|
|
874
1013
|
#endif
|
|
875
|
-
#if defined(
|
|
876
|
-
|
|
1014
|
+
#if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)
|
|
1015
|
+
float environmentRadianceOcclusion(float ambientOcclusion,float NdotVUnclamped) {float temp=NdotVUnclamped+ambientOcclusion;return saturate(square(temp)-1.0+ambientOcclusion);}
|
|
877
1016
|
#endif
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
vec3 hemisphereImportanceSampleDggx(vec2 u,float a) {float phi=2.*PI*u.x;float cosTheta2=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
|
|
881
|
-
vec3 hemisphereImportanceSampleDggxAnisotropic(vec2 Xi,float alphaTangent,float alphaBitangent)
|
|
882
|
-
{alphaTangent=max(alphaTangent,0.0001);alphaBitangent=max(alphaBitangent,0.0001);float phi=atan(alphaBitangent/alphaTangent*tan(2.0*3.14159265*Xi.x));if (Xi.x>0.5) phi+=3.14159265;
|
|
883
|
-
float cosPhi=cos(phi);float sinPhi=sin(phi);float alpha2=(cosPhi*cosPhi)/(alphaTangent*alphaTangent) +
|
|
884
|
-
(sinPhi*sinPhi)/(alphaBitangent*alphaBitangent);float tanTheta2=Xi.y/(1.0-Xi.y)/alpha2;float cosTheta=1.0/sqrt(1.0+tanTheta2);float sinTheta=sqrt(max(0.0,1.0-cosTheta*cosTheta));return vec3(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);}
|
|
885
|
-
vec3 hemisphereImportanceSampleDCharlie(vec2 u,float a) {
|
|
886
|
-
float phi=2.*PI*u.x;float sinTheta=pow(u.y,a/(2.*a+1.));float cosTheta=sqrt(1.-sinTheta*sinTheta);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;o.ShaderStore.IncludesShadersStore[n]||(o.ShaderStore.IncludesShadersStore[n]=l),e.s(["importanceSampling",0,{name:n,shader:l}],43899);let c="pbrHelperFunctions",f=`#define MINIMUMVARIANCE 0.0005
|
|
887
|
-
#ifndef TEXRD_DEFINED
|
|
888
|
-
#define TEXRD(s,uv) texture2D(s,uv)
|
|
889
|
-
#define TEXRD_DEFINED
|
|
1017
|
+
#if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)
|
|
1018
|
+
float environmentHorizonOcclusion(vec3 view,vec3 normal,vec3 geometricNormal) {vec3 reflection=reflect(view,normal);float temp=saturate(1.0+1.1*dot(reflection,geometricNormal));return square(temp);}
|
|
890
1019
|
#endif
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
float
|
|
894
|
-
vec2 getAARoughnessFactors(vec3 normalVector) {
|
|
895
|
-
#ifdef SPECULARAA
|
|
896
|
-
vec3 nDfdx=dFdx(normalVector.xyz);vec3 nDfdy=dFdy(normalVector.xyz);float slopeSquare=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));float geometricRoughnessFactor=pow(saturate(slopeSquare),0.333);float geometricAlphaGFactor=sqrt(slopeSquare);geometricAlphaGFactor*=0.75;return vec2(geometricRoughnessFactor,geometricAlphaGFactor);
|
|
897
|
-
#else
|
|
898
|
-
return vec2(0.);
|
|
1020
|
+
#if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)
|
|
1021
|
+
#define UNPACK_LOD(x) (1.0-x)*255.0
|
|
1022
|
+
float getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {float microsurfaceAverageSlope=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
|
|
899
1023
|
#endif
|
|
900
|
-
}
|
|
901
|
-
#
|
|
902
|
-
#
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
#
|
|
907
|
-
|
|
1024
|
+
`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["pbrIBLFunctions",0,{name:r,shader:a}],43894)},28758,51215,e=>{"use strict";var o=e.i(2342);let t="samplerFragmentDeclaration",i=`#ifdef _DEFINENAME_
|
|
1025
|
+
#if _DEFINENAME_DIRECTUV==1
|
|
1026
|
+
#define v_VARYINGNAME_UV vMainUV1
|
|
1027
|
+
#elif _DEFINENAME_DIRECTUV==2
|
|
1028
|
+
#define v_VARYINGNAME_UV vMainUV2
|
|
1029
|
+
#elif _DEFINENAME_DIRECTUV==3
|
|
1030
|
+
#define v_VARYINGNAME_UV vMainUV3
|
|
1031
|
+
#elif _DEFINENAME_DIRECTUV==4
|
|
1032
|
+
#define v_VARYINGNAME_UV vMainUV4
|
|
1033
|
+
#elif _DEFINENAME_DIRECTUV==5
|
|
1034
|
+
#define v_VARYINGNAME_UV vMainUV5
|
|
1035
|
+
#elif _DEFINENAME_DIRECTUV==6
|
|
1036
|
+
#define v_VARYINGNAME_UV vMainUV6
|
|
908
1037
|
#else
|
|
909
|
-
vec2
|
|
910
|
-
vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 bentNormal=cross(B,V);bentNormal=normalize(cross(bentNormal,B));float a=square(square(1.0-anisotropy*(1.0-roughness)));bentNormal=normalize(mix(bentNormal,N,a));return bentNormal;}
|
|
911
|
-
#endif
|
|
1038
|
+
varying vec2 v_VARYINGNAME_UV;
|
|
912
1039
|
#endif
|
|
913
|
-
|
|
914
|
-
vec3 cocaLambert(vec3 alpha,float distance) {return exp(-alpha*distance);}
|
|
915
|
-
vec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {return cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
|
|
916
|
-
vec3 computeColorAtDistanceInMedia(vec3 color,float distance) {return -log(color)/distance;}
|
|
917
|
-
vec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 clearCoatAbsorption=mix(vec3(1.0),
|
|
918
|
-
cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
|
|
919
|
-
clearCoatIntensity);return clearCoatAbsorption;}
|
|
1040
|
+
uniform sampler2D _SAMPLERNAME_Sampler;
|
|
920
1041
|
#endif
|
|
921
|
-
|
|
922
|
-
float
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
{vec3
|
|
927
|
-
|
|
928
|
-
float
|
|
1042
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["samplerFragmentDeclaration",0,{name:t,shader:i}],28758);let r="reflectionFunction",a=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
|
|
1043
|
+
{float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0); }
|
|
1044
|
+
vec3 computeMirroredFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
|
|
1045
|
+
{float lon=atan(direction.z,direction.x);float lat=acos(direction.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(1.0-s,t,0); }
|
|
1046
|
+
vec3 computeEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
1047
|
+
{vec3 cameraToVertex=normalize(worldPos.xyz-eyePosition);vec3 r=normalize(reflect(cameraToVertex,worldNormal));r=vec3(reflectionMatrix*vec4(r,0));float lon=atan(r.z,r.x);float lat=acos(r.y);vec2 sphereCoords=vec2(lon,lat)*RECIPROCAL_PI2*2.0;float s=sphereCoords.x*0.5+0.5;float t=sphereCoords.y;return vec3(s,t,0);}
|
|
1048
|
+
vec3 computeSphericalCoords(vec4 worldPos,vec3 worldNormal,mat4 view,mat4 reflectionMatrix)
|
|
1049
|
+
{vec3 viewDir=normalize(vec3(view*worldPos));vec3 viewNormal=normalize(vec3(view*vec4(worldNormal,0.0)));vec3 r=reflect(viewDir,viewNormal);r=vec3(reflectionMatrix*vec4(r,0));r.z=r.z-1.0;float m=2.0*length(r);return vec3(r.x/m+0.5,1.0-r.y/m-0.5,0);}
|
|
1050
|
+
vec3 computePlanarCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
1051
|
+
{vec3 viewDir=worldPos.xyz-eyePosition;vec3 coords=normalize(reflect(viewDir,worldNormal));return vec3(reflectionMatrix*vec4(coords,1));}
|
|
1052
|
+
vec3 computeCubicCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
1053
|
+
{vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=vec3(reflectionMatrix*vec4(coords,0));
|
|
1054
|
+
#ifdef INVERTCUBICMAP
|
|
1055
|
+
coords.y*=-1.0;
|
|
929
1056
|
#endif
|
|
930
|
-
|
|
931
|
-
vec3
|
|
932
|
-
|
|
933
|
-
|
|
1057
|
+
return coords;}
|
|
1058
|
+
vec3 computeCubicLocalCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix,vec3 reflectionSize,vec3 reflectionPosition)
|
|
1059
|
+
{vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=parallaxCorrectNormal(worldPos.xyz,coords,reflectionSize,reflectionPosition);coords=vec3(reflectionMatrix*vec4(coords,0));
|
|
1060
|
+
#ifdef INVERTCUBICMAP
|
|
1061
|
+
coords.y*=-1.0;
|
|
934
1062
|
#endif
|
|
1063
|
+
return coords;}
|
|
1064
|
+
vec3 computeProjectionCoords(vec4 worldPos,mat4 view,mat4 reflectionMatrix)
|
|
1065
|
+
{return vec3(reflectionMatrix*(view*worldPos));}
|
|
1066
|
+
vec3 computeSkyBoxCoords(vec3 positionW,mat4 reflectionMatrix)
|
|
1067
|
+
{return vec3(reflectionMatrix*vec4(positionW,1.));}
|
|
1068
|
+
#ifdef REFLECTION
|
|
1069
|
+
vec3 computeReflectionCoords(vec4 worldPos,vec3 worldNormal)
|
|
1070
|
+
{
|
|
1071
|
+
#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
|
|
1072
|
+
vec3 direction=normalize(vDirectionW);return computeMirroredFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
935
1073
|
#endif
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
preLightingInfo computeHemisphericPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;result.NdotL=dot(N,lightData.xyz)*0.5+0.5;result.NdotL=saturateEps(result.NdotL);result.NdotLUnclamped=result.NdotL;
|
|
939
|
-
#ifdef SPECULARTERM
|
|
940
|
-
result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));
|
|
1074
|
+
#ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
|
|
1075
|
+
vec3 direction=normalize(vDirectionW);return computeFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
941
1076
|
#endif
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
#include<ltcHelperFunctions>
|
|
945
|
-
uniform sampler2D areaLightsLTC1Sampler;uniform sampler2D areaLightsLTC2Sampler;preLightingInfo computeAreaPreLightingInfo(sampler2D ltc1,sampler2D ltc2,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness )
|
|
946
|
-
{preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnel(ltc1,ltc2,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness);
|
|
947
|
-
#ifdef SPECULARTERM
|
|
948
|
-
result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
|
|
1077
|
+
#ifdef REFLECTIONMAP_EQUIRECTANGULAR
|
|
1078
|
+
return computeEquirectangularCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
|
|
949
1079
|
#endif
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
{preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnelWithEmission(ltc1,ltc2,emissionTexture,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness);
|
|
953
|
-
#ifdef SPECULARTERM
|
|
954
|
-
result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
|
|
1080
|
+
#ifdef REFLECTIONMAP_SPHERICAL
|
|
1081
|
+
return computeSphericalCoords(worldPos,worldNormal,view,reflectionMatrix);
|
|
955
1082
|
#endif
|
|
956
|
-
|
|
1083
|
+
#ifdef REFLECTIONMAP_PLANAR
|
|
1084
|
+
return computePlanarCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
|
|
957
1085
|
#endif
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
{return 1.0/maxEps(lightDistanceSquared);}
|
|
962
|
-
float computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange)
|
|
963
|
-
{float lightDistanceFalloff=1.0/maxEps(lightDistanceSquared);float factor=lightDistanceSquared*inverseSquaredRange;float attenuation=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;}
|
|
964
|
-
float computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange)
|
|
965
|
-
{
|
|
966
|
-
#ifdef USEPHYSICALLIGHTFALLOFF
|
|
967
|
-
return computeDistanceLightFalloff_Physical(lightDistanceSquared);
|
|
968
|
-
#elif defined(USEGLTFLIGHTFALLOFF)
|
|
969
|
-
return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);
|
|
1086
|
+
#ifdef REFLECTIONMAP_CUBIC
|
|
1087
|
+
#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC
|
|
1088
|
+
return computeCubicLocalCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix,vReflectionSize,vReflectionPosition);
|
|
970
1089
|
#else
|
|
971
|
-
return
|
|
1090
|
+
return computeCubicCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
|
|
1091
|
+
#endif
|
|
1092
|
+
#endif
|
|
1093
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
1094
|
+
return computeProjectionCoords(worldPos,view,reflectionMatrix);
|
|
1095
|
+
#endif
|
|
1096
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
1097
|
+
return computeSkyBoxCoords(vPositionUVW,reflectionMatrix);
|
|
1098
|
+
#endif
|
|
1099
|
+
#ifdef REFLECTIONMAP_EXPLICIT
|
|
1100
|
+
return vec3(0,0,0);
|
|
972
1101
|
#endif
|
|
973
1102
|
}
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
{
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
{
|
|
987
|
-
#
|
|
988
|
-
|
|
989
|
-
#elif defined(USEGLTFLIGHTFALLOFF)
|
|
990
|
-
return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);
|
|
1103
|
+
#endif
|
|
1104
|
+
`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["reflectionFunction",0,{name:r,shader:a}],51215)},19491,20439,62149,34630,e=>{"use strict";var o=e.i(2342);let t="sceneFragmentDeclaration",i=`uniform mat4 viewProjection;
|
|
1105
|
+
#ifdef MULTIVIEW
|
|
1106
|
+
uniform mat4 viewProjectionR;
|
|
1107
|
+
#endif
|
|
1108
|
+
uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection;
|
|
1109
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["sceneFragmentDeclaration",0,{name:t,shader:i}],19491);let r="openpbrDielectricReflectance",a=`struct ReflectanceParams
|
|
1110
|
+
{float F0;float F90;vec3 coloredF0;vec3 coloredF90;};
|
|
1111
|
+
#define pbr_inline
|
|
1112
|
+
ReflectanceParams dielectricReflectance(
|
|
1113
|
+
in float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight
|
|
1114
|
+
)
|
|
1115
|
+
{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float f90Scale=clamp(2.0*abs(insideIOR-outsideIOR),0.0,1.0);
|
|
1116
|
+
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
1117
|
+
vec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);
|
|
991
1118
|
#else
|
|
992
|
-
|
|
1119
|
+
vec3 dielectricColorF90=vec3(f90Scale);
|
|
993
1120
|
#endif
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
997
|
-
float radicalInverse_VdC(uint bits)
|
|
998
|
-
{bits=(bits<<16u) | (bits>>16u);bits=((bits & 0x55555555u)<<1u) | ((bits & 0xAAAAAAAAu)>>1u);bits=((bits & 0x33333333u)<<2u) | ((bits & 0xCCCCCCCCu)>>2u);bits=((bits & 0x0F0F0F0Fu)<<4u) | ((bits & 0xF0F0F0F0u)>>4u);bits=((bits & 0x00FF00FFu)<<8u) | ((bits & 0xFF00FF00u)>>8u);return float(bits)*2.3283064365386963e-10; }
|
|
999
|
-
vec2 hammersley(uint i,uint N)
|
|
1000
|
-
{return vec2(float(i)/float(N),radicalInverse_VdC(i));}
|
|
1121
|
+
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
1122
|
+
float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*specularWeight*maxF0;
|
|
1001
1123
|
#else
|
|
1002
|
-
|
|
1003
|
-
{float invBase=1.0/float(base);float denom =1.0;float result =0.0;for(int i=0; i<32; ++i)
|
|
1004
|
-
{if(n>0)
|
|
1005
|
-
{denom =mod(float(n),2.0);result+=denom*invBase;invBase=invBase/2.0;n =int(float(n)/2.0);}}
|
|
1006
|
-
return result;}
|
|
1007
|
-
vec2 hammersley(int i,int N)
|
|
1008
|
-
{return vec2(float(i)/float(N),vanDerCorpus(i,2));}
|
|
1124
|
+
outParams.F0=dielectricF0*specularWeight;
|
|
1009
1125
|
#endif
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1126
|
+
outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3(specularWeight);return outParams;}
|
|
1127
|
+
`;o.ShaderStore.IncludesShadersStore[r]||(o.ShaderStore.IncludesShadersStore[r]=a),e.s(["openpbrDielectricReflectance",0,{name:r,shader:a}],20439);let n="openpbrGeometryInfo",l=`struct geometryInfoOutParams
|
|
1128
|
+
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;};struct geometryInfoAnisoOutParams
|
|
1129
|
+
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;mat3 TBN;};
|
|
1130
|
+
#define pbr_inline
|
|
1131
|
+
geometryInfoOutParams geometryInfo(
|
|
1132
|
+
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
1133
|
+
)
|
|
1134
|
+
{geometryInfoOutParams outParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
1135
|
+
#if defined(ENVIRONMENTBRDF)
|
|
1136
|
+
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
1017
1137
|
#else
|
|
1018
|
-
|
|
1138
|
+
outParams.environmentBrdf=vec3(0.0);
|
|
1019
1139
|
#endif
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
#
|
|
1025
|
-
,
|
|
1140
|
+
outParams.horizonOcclusion=1.0;
|
|
1141
|
+
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
1142
|
+
#ifdef HORIZONOCCLUSION
|
|
1143
|
+
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
1144
|
+
#ifdef REFLECTIONMAP_3D
|
|
1145
|
+
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
1026
1146
|
#endif
|
|
1027
|
-
)
|
|
1028
|
-
{vec3 n=normalize(inputN);vec3 result=vec3(0.);
|
|
1029
|
-
#ifndef IBL_CDF_FILTERING
|
|
1030
|
-
vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);mat3 tbnInverse=mat3(tangent.x,bitangent.x,n.x,tangent.y,bitangent.y,n.y,tangent.z,bitangent.z,n.z);
|
|
1031
1147
|
#endif
|
|
1032
|
-
float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));
|
|
1033
|
-
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
1034
|
-
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
1035
|
-
#else
|
|
1036
|
-
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
1037
1148
|
#endif
|
|
1038
|
-
{vec2 Xi=hammersley(i,NUM_SAMPLES);
|
|
1039
|
-
#if IBL_CDF_FILTERING
|
|
1040
|
-
vec2 T;T.x=texture2D(icdfSampler,vec2(Xi.x,0.)).x;T.y=texture2D(icdfSampler,vec2(T.x,Xi.y)).y;vec3 Ls=uv_to_normal(vec2(1.0-fract(T.x+0.25),T.y));float NoL=dot(n,Ls);float NoV=dot(n,inputV);
|
|
1041
|
-
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
1042
|
-
float LoV=dot (Ls,inputV);
|
|
1043
|
-
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
1044
|
-
vec3 H=(inputV+Ls)*0.5;float VoH=dot(inputV,H);
|
|
1045
1149
|
#endif
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
vec3
|
|
1150
|
+
return outParams;}
|
|
1151
|
+
#define pbr_inline
|
|
1152
|
+
geometryInfoAnisoOutParams geometryInfoAniso(
|
|
1153
|
+
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
1154
|
+
,in vec3 vAnisotropy,in mat3 TBN
|
|
1155
|
+
)
|
|
1156
|
+
{geometryInfoOutParams geoInfo=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);geometryInfoAnisoOutParams outParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);mat3 anisoTBN=mat3(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;}`;o.ShaderStore.IncludesShadersStore[n]||(o.ShaderStore.IncludesShadersStore[n]=l),e.s(["openpbrGeometryInfo",0,{name:n,shader:l}],62149);let c="openpbrIblFunctions",f=`#ifdef REFLECTION
|
|
1157
|
+
vec3 sampleIrradiance(
|
|
1158
|
+
in vec3 surfaceNormal
|
|
1159
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
1160
|
+
,in vec3 vEnvironmentIrradianceSH
|
|
1053
1161
|
#endif
|
|
1162
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
1163
|
+
,in mat4 iblMatrix
|
|
1054
1164
|
#endif
|
|
1055
|
-
|
|
1056
|
-
#
|
|
1057
|
-
|
|
1058
|
-
#else
|
|
1059
|
-
float pdf_inversed=PI/NoL;float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(l,0.,maxLevel);
|
|
1060
|
-
#ifdef CUSTOM_IRRADIANCE_FILTERING_FUNCTION
|
|
1061
|
-
CUSTOM_IRRADIANCE_FILTERING_FUNCTION
|
|
1165
|
+
#ifdef USEIRRADIANCEMAP
|
|
1166
|
+
#ifdef REFLECTIONMAP_3D
|
|
1167
|
+
,in samplerCube irradianceSampler
|
|
1062
1168
|
#else
|
|
1063
|
-
|
|
1169
|
+
,in sampler2D irradianceSampler
|
|
1064
1170
|
#endif
|
|
1171
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
1172
|
+
,in vec3 reflectionDominantDirection
|
|
1065
1173
|
#endif
|
|
1066
|
-
#if GAMMA_INPUT
|
|
1067
|
-
c=toLinearSpace(c);
|
|
1068
1174
|
#endif
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
1175
|
+
#ifdef REALTIME_FILTERING
|
|
1176
|
+
,in vec2 vReflectionFilteringInfo
|
|
1177
|
+
#ifdef IBL_CDF_FILTERING
|
|
1178
|
+
,in sampler2D icdfSampler
|
|
1074
1179
|
#endif
|
|
1075
|
-
#if IBL_CDF_FILTERING
|
|
1076
|
-
vec3 light=pdf<1e-6 ? vec3(0.0) : vec3(1.0)/vec3(pdf)*c;result+=NoL*diffuseRoughnessTerm*light;
|
|
1077
|
-
#else
|
|
1078
|
-
result+=c*diffuseRoughnessTerm;
|
|
1079
1180
|
#endif
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1181
|
+
,in vec2 vReflectionInfos
|
|
1182
|
+
,in vec3 viewDirectionW
|
|
1183
|
+
,in float diffuseRoughness
|
|
1184
|
+
,in vec3 surfaceAlbedo
|
|
1185
|
+
) {vec3 environmentIrradiance=vec3(0.,0.,0.);
|
|
1186
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
1187
|
+
vec3 irradianceVector=(iblMatrix*vec4(surfaceNormal,0)).xyz;vec3 irradianceView=(iblMatrix*vec4(viewDirectionW,0)).xyz;
|
|
1188
|
+
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
1189
|
+
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
1190
|
+
{float NdotV=max(dot(surfaceNormal,viewDirectionW),0.0);irradianceVector=mix(irradianceVector,irradianceView,(0.5*(1.0-NdotV))*diffuseRoughness);}
|
|
1084
1191
|
#endif
|
|
1085
|
-
return result;}
|
|
1086
|
-
#define inline
|
|
1087
|
-
vec3 radiance(float alphaG,samplerCube inputTexture,vec3 inputN,vec2 filteringInfo)
|
|
1088
|
-
{vec3 n=normalize(inputN);vec3 c=textureCubeLodEXT(inputTexture,n,0.).rgb;
|
|
1089
|
-
if (alphaG==0.) {
|
|
1090
|
-
#if GAMMA_INPUT
|
|
1091
|
-
c=toLinearSpace(c);
|
|
1092
1192
|
#endif
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
1096
|
-
#else
|
|
1097
|
-
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
1098
|
-
#endif
|
|
1099
|
-
{vec2 Xi=hammersley(i,NUM_SAMPLES);vec3 H=hemisphereImportanceSampleDggx(Xi,alphaG);float NoV=1.;float NoH=H.z;float NoH2=H.z*H.z;float NoL=2.*NoH2-1.;vec3 L=vec3(2.*NoH*H.x,2.*NoH*H.y,NoL);L=normalize(L);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_TrowbridgeReitzGGX(NoH,alphaG);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,tbn*L,mipLevel).rgb;
|
|
1100
|
-
#if GAMMA_INPUT
|
|
1101
|
-
c=toLinearSpace(c);
|
|
1102
|
-
#endif
|
|
1103
|
-
result+=c*NoL;}}
|
|
1104
|
-
result=result/weight;return result;}}
|
|
1105
|
-
#ifdef ANISOTROPIC
|
|
1106
|
-
#define inline
|
|
1107
|
-
vec3 radianceAnisotropic(
|
|
1108
|
-
float alphaTangent,
|
|
1109
|
-
float alphaBitangent,
|
|
1110
|
-
samplerCube inputTexture,
|
|
1111
|
-
vec3 inputView,
|
|
1112
|
-
vec3 inputTangent,
|
|
1113
|
-
vec3 inputBitangent,
|
|
1114
|
-
vec3 inputNormal,
|
|
1115
|
-
vec2 filteringInfo,
|
|
1116
|
-
vec2 noiseInput,
|
|
1117
|
-
bool isRefraction,
|
|
1118
|
-
float ior
|
|
1119
|
-
)
|
|
1120
|
-
{vec3 V=inputView;vec3 N=inputNormal;vec3 T=inputTangent;vec3 B=inputBitangent;vec3 result=vec3(0.);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float clampedAlphaT=max(alphaTangent,MINIMUMVARIANCE);float clampedAlphaB=max(alphaBitangent,MINIMUMVARIANCE);float effectiveDim=dim0*sqrt(clampedAlphaT*clampedAlphaB);float omegaP=(4.*PI)/(6.*effectiveDim*effectiveDim);const float noiseScale=clamp(log2(float(NUM_SAMPLES))/12.0f,0.0f,1.0f);float weight=0.;
|
|
1121
|
-
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
1122
|
-
for(uint i=0u; i<NUM_SAMPLES; ++i)
|
|
1123
|
-
#else
|
|
1124
|
-
for(int i=0; i<NUM_SAMPLES; ++i)
|
|
1125
|
-
#endif
|
|
1126
|
-
{vec2 Xi=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5f,0.015f,noiseScale));
|
|
1127
|
-
vec3 H_tangent=hemisphereImportanceSampleDggxAnisotropic(Xi,clampedAlphaT,clampedAlphaB);vec3 H=normalize(H_tangent.x*T+H_tangent.y*B+H_tangent.z*N);vec3 L;if (isRefraction) {L=refract(-V,H,1.0/ior);} else {L=reflect(-V,H);}
|
|
1128
|
-
float NoH=max(dot(N,H),0.001);float VoH=max(dot(V,H),0.001);float NoL=max(dot(N,L),0.001);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_BurleyGGX_Anisotropic(
|
|
1129
|
-
H_tangent.z,H_tangent.x,H_tangent.y,vec2(clampedAlphaT,clampedAlphaB)
|
|
1130
|
-
);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,L,mipLevel).rgb;
|
|
1131
|
-
#if GAMMA_INPUT
|
|
1132
|
-
c=toLinearSpace(c);
|
|
1133
|
-
#endif
|
|
1134
|
-
result+=c*NoL;}}
|
|
1135
|
-
result=result/weight;return result;}
|
|
1193
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
1194
|
+
irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
|
|
1136
1195
|
#endif
|
|
1196
|
+
#ifdef INVERTCUBICMAP
|
|
1197
|
+
irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
|
|
1137
1198
|
#endif
|
|
1138
1199
|
#endif
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
#
|
|
1143
|
-
|
|
1200
|
+
#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
1201
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
1202
|
+
environmentIrradiance=vEnvironmentIrradianceSH;
|
|
1203
|
+
#else
|
|
1204
|
+
#if defined(REALTIME_FILTERING)
|
|
1205
|
+
environmentIrradiance=irradiance(reflectionSampler,irradianceVector,vReflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
1206
|
+
#ifdef IBL_CDF_FILTERING
|
|
1207
|
+
,icdfSampler
|
|
1144
1208
|
#endif
|
|
1145
|
-
|
|
1146
|
-
|
|
1209
|
+
);
|
|
1210
|
+
#else
|
|
1211
|
+
environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
|
|
1147
1212
|
#endif
|
|
1148
|
-
#ifdef CLEARCOAT
|
|
1149
|
-
vec4 clearCoat;
|
|
1150
1213
|
#endif
|
|
1151
|
-
#
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
};float adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance) {
|
|
1155
|
-
#if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)
|
|
1156
|
-
float lightRoughness=lightRadius/lightDistance;float totalRoughness=saturate(lightRoughness+roughness);return totalRoughness;
|
|
1214
|
+
#elif defined(USEIRRADIANCEMAP)
|
|
1215
|
+
#ifdef REFLECTIONMAP_3D
|
|
1216
|
+
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,irradianceVector);
|
|
1157
1217
|
#else
|
|
1158
|
-
|
|
1159
|
-
#endif
|
|
1160
|
-
}
|
|
1161
|
-
vec3 computeHemisphericDiffuseLighting(preLightingInfo info,vec3 lightColor,vec3 groundColor) {return mix(groundColor,lightColor,info.NdotL);}
|
|
1162
|
-
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
1163
|
-
vec3 computeAreaDiffuseLighting(preLightingInfo info,vec3 lightColor) {return info.areaLightDiffuse*lightColor;}
|
|
1218
|
+
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,reflectionCoords);
|
|
1164
1219
|
#endif
|
|
1165
|
-
|
|
1166
|
-
#
|
|
1167
|
-
|
|
1168
|
-
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
1169
|
-
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
|
|
1170
|
-
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
1171
|
-
vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
|
|
1220
|
+
environmentIrradiance=environmentIrradianceFromTexture.rgb;
|
|
1221
|
+
#ifdef RGBDREFLECTION
|
|
1222
|
+
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
1172
1223
|
#endif
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
vec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix,vec3 posW){vec4 strq=textureProjectionMatrix*vec4(posW,1.0);strq/=strq.w;vec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;return toLinearSpace(textureColor);}
|
|
1176
|
-
#ifdef SS_TRANSLUCENCY
|
|
1177
|
-
vec3 computeDiffuseTransmittedLighting(preLightingInfo info,vec3 lightColor,vec3 transmittance) {vec3 transmittanceNdotL=vec3(0.);float NdotL=absEps(info.NdotLUnclamped);
|
|
1178
|
-
#ifndef SS_TRANSLUCENCY_LEGACY
|
|
1179
|
-
if (info.NdotLUnclamped<0.0) {
|
|
1224
|
+
#ifdef GAMMAREFLECTION
|
|
1225
|
+
environmentIrradiance.rgb=toLinearSpace(environmentIrradiance.rgb);
|
|
1180
1226
|
#endif
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
vec3
|
|
1185
|
-
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
|
|
1186
|
-
diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
|
|
1227
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
1228
|
+
vec3 Ls=normalize(reflectionDominantDirection);float NoL=dot(irradianceVector,Ls);float NoV=dot(irradianceVector,irradianceView);vec3 diffuseRoughnessTerm=vec3(1.0);
|
|
1229
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
1230
|
+
float LoV=dot (Ls,irradianceView);float mag=length(reflectionDominantDirection)*2.0;vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3(1.0),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0,1.0)));
|
|
1187
1231
|
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
1188
|
-
|
|
1189
|
-
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
1190
|
-
vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
|
|
1191
|
-
#endif
|
|
1192
|
-
#else
|
|
1193
|
-
float diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);
|
|
1232
|
+
vec3 H=(irradianceView+Ls)*0.5;float VoH=dot(irradianceView,H);diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
1194
1233
|
#endif
|
|
1195
|
-
|
|
1234
|
+
environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
|
|
1196
1235
|
#endif
|
|
1197
|
-
#ifdef SPECULARTERM
|
|
1198
|
-
vec3 computeSpecularLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 fresnel,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness);
|
|
1199
|
-
#ifdef IRIDESCENCE
|
|
1200
|
-
fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
|
|
1201
1236
|
#endif
|
|
1202
|
-
|
|
1203
|
-
#
|
|
1204
|
-
|
|
1237
|
+
environmentIrradiance*=vReflectionInfos.x;return environmentIrradiance;}
|
|
1238
|
+
#define pbr_inline
|
|
1239
|
+
#ifdef REFLECTIONMAP_3D
|
|
1240
|
+
vec3 createReflectionCoords(
|
|
1205
1241
|
#else
|
|
1206
|
-
|
|
1207
|
-
#endif
|
|
1208
|
-
vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
1209
|
-
#if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
|
|
1210
|
-
vec3 computeAreaSpecularLighting(preLightingInfo info,vec3 specularColor,vec3 reflectance0,vec3 reflectance90) {vec3 fresnel=specularColor*info.areaLightFresnel.x*reflectance0+( vec3( 1.0 )-specularColor )*info.areaLightFresnel.y*reflectance90;return specularColor*fresnel*info.areaLightSpecular;}
|
|
1242
|
+
vec2 createReflectionCoords(
|
|
1211
1243
|
#endif
|
|
1244
|
+
in vec3 vPositionW
|
|
1245
|
+
,in vec3 normalW
|
|
1246
|
+
)
|
|
1247
|
+
{vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);
|
|
1248
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
1249
|
+
reflectionVector.z*=-1.0;
|
|
1212
1250
|
#endif
|
|
1213
|
-
#ifdef
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
vec3(0.0,0.0,1.0)
|
|
1220
|
-
);vec3 Llocal=vec3(dot(L,T),dot(L,B),NdotL);vec3 Lwarp=normalize(M*Llocal);float cosThetaWarp=max(Lwarp.z,0.0);return cosThetaWarp*NdotL;}
|
|
1251
|
+
#ifdef REFLECTIONMAP_3D
|
|
1252
|
+
vec3 reflectionCoords=reflectionVector;
|
|
1253
|
+
#else
|
|
1254
|
+
vec2 reflectionCoords=reflectionVector.xy;
|
|
1255
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
1256
|
+
reflectionCoords/=reflectionVector.z;
|
|
1221
1257
|
#endif
|
|
1222
|
-
|
|
1223
|
-
vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=vec3(distribution*smithVisibility);return specTerm*info.attenuation*info.NdotL*lightColor;}
|
|
1224
|
-
#elif defined(ANISOTROPIC)
|
|
1225
|
-
vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);alphaTB=max(alphaTB,square(geometricRoughnessFactor));vec3 fresnel=fresnelSchlickGGX(info.VdotH,reflectance0,reflectance90);
|
|
1226
|
-
#ifdef IRIDESCENCE
|
|
1227
|
-
fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
|
|
1258
|
+
reflectionCoords.y=1.0-reflectionCoords.y;
|
|
1228
1259
|
#endif
|
|
1229
|
-
|
|
1260
|
+
return reflectionCoords;}
|
|
1261
|
+
#define pbr_inline
|
|
1262
|
+
#define inline
|
|
1263
|
+
vec3 sampleRadiance(
|
|
1264
|
+
in float alphaG
|
|
1265
|
+
,in vec3 vReflectionMicrosurfaceInfos
|
|
1266
|
+
,in vec2 vReflectionInfos
|
|
1267
|
+
,in geometryInfoOutParams geoInfo
|
|
1268
|
+
#ifdef REFLECTIONMAP_3D
|
|
1269
|
+
,in samplerCube reflectionSampler
|
|
1270
|
+
,const vec3 reflectionCoords
|
|
1271
|
+
#else
|
|
1272
|
+
,in sampler2D reflectionSampler
|
|
1273
|
+
,const vec2 reflectionCoords
|
|
1230
1274
|
#endif
|
|
1231
|
-
#ifdef
|
|
1232
|
-
|
|
1233
|
-
clearCoatTerm*info.attenuation*NccdotL*lightColor,
|
|
1234
|
-
1.0-fresnel
|
|
1235
|
-
);}
|
|
1236
|
-
vec3 computeClearCoatLightingAbsorption(float NdotVRefract,vec3 L,vec3 Ncc,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 LRefract=-refract(L,Ncc,vClearCoatRefractionParams.y);float NdotLRefract=saturateEps(dot(Ncc,LRefract));vec3 absorption=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);return absorption;}
|
|
1275
|
+
#ifdef REALTIME_FILTERING
|
|
1276
|
+
,in vec2 vReflectionFilteringInfo
|
|
1237
1277
|
#endif
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
float
|
|
1278
|
+
)
|
|
1279
|
+
{vec4 environmentRadiance=vec4(0.,0.,0.,0.);
|
|
1280
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
1281
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
1282
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
1283
|
+
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
1284
|
+
#else
|
|
1285
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
1244
1286
|
#endif
|
|
1245
|
-
|
|
1246
|
-
#ifdef
|
|
1247
|
-
|
|
1287
|
+
reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
|
|
1288
|
+
#ifdef REALTIME_FILTERING
|
|
1289
|
+
environmentRadiance=vec4(radiance(alphaG,reflectionSampler,reflectionCoords,vReflectionFilteringInfo),1.0);
|
|
1248
1290
|
#else
|
|
1249
|
-
|
|
1291
|
+
environmentRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
1250
1292
|
#endif
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW;
|
|
1293
|
+
#ifdef RGBDREFLECTION
|
|
1294
|
+
environmentRadiance.rgb=fromRGBD(environmentRadiance);
|
|
1254
1295
|
#endif
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
finalColor.rgb=clamp(finalColor.rgb,0.,30.0);
|
|
1296
|
+
#ifdef GAMMAREFLECTION
|
|
1297
|
+
environmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);
|
|
1258
1298
|
#endif
|
|
1299
|
+
environmentRadiance.rgb*=vec3(vReflectionInfos.x);return environmentRadiance.rgb;}
|
|
1300
|
+
#if defined(ANISOTROPIC)
|
|
1301
|
+
#define pbr_inline
|
|
1302
|
+
#define inline
|
|
1303
|
+
vec3 sampleRadianceAnisotropic(
|
|
1304
|
+
in float alphaG
|
|
1305
|
+
,in vec3 vReflectionMicrosurfaceInfos
|
|
1306
|
+
,in vec2 vReflectionInfos
|
|
1307
|
+
,in geometryInfoAnisoOutParams geoInfo
|
|
1308
|
+
,const vec3 normalW
|
|
1309
|
+
,const vec3 viewDirectionW
|
|
1310
|
+
,const vec3 positionW
|
|
1311
|
+
,const vec3 noise
|
|
1312
|
+
,bool isRefraction
|
|
1313
|
+
,float ior
|
|
1314
|
+
#ifdef REFLECTIONMAP_3D
|
|
1315
|
+
,in samplerCube reflectionSampler
|
|
1259
1316
|
#else
|
|
1260
|
-
|
|
1261
|
-
#endif
|
|
1262
|
-
finalColor.a*=visibility;
|
|
1263
|
-
#ifdef PREMULTIPLYALPHA
|
|
1264
|
-
finalColor.rgb*=finalColor.a;
|
|
1265
|
-
#endif
|
|
1266
|
-
`;o.ShaderStore.IncludesShadersStore[R]||(o.ShaderStore.IncludesShadersStore[R]=I),e.s(["pbrBlockImageProcessing",0,{name:R,shader:I}],2834);let L="pbrDebug",N=`#if DEBUGMODE>0
|
|
1267
|
-
if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) {
|
|
1268
|
-
#if DEBUGMODE==1
|
|
1269
|
-
gl_FragColor.rgb=vPositionW.rgb;
|
|
1270
|
-
#define DEBUGMODE_NORMALIZE
|
|
1271
|
-
#elif DEBUGMODE==2 && defined(NORMAL)
|
|
1272
|
-
gl_FragColor.rgb=vNormalW.rgb;
|
|
1273
|
-
#define DEBUGMODE_NORMALIZE
|
|
1274
|
-
#elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC)
|
|
1275
|
-
gl_FragColor.rgb=TBN[0];
|
|
1276
|
-
#define DEBUGMODE_NORMALIZE
|
|
1277
|
-
#elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC)
|
|
1278
|
-
gl_FragColor.rgb=TBN[1];
|
|
1279
|
-
#define DEBUGMODE_NORMALIZE
|
|
1280
|
-
#elif DEBUGMODE==5
|
|
1281
|
-
gl_FragColor.rgb=normalW;
|
|
1282
|
-
#define DEBUGMODE_NORMALIZE
|
|
1283
|
-
#elif DEBUGMODE==6 && defined(MAINUV1)
|
|
1284
|
-
gl_FragColor.rgb=vec3(vMainUV1,0.0);
|
|
1285
|
-
#elif DEBUGMODE==7 && defined(MAINUV2)
|
|
1286
|
-
gl_FragColor.rgb=vec3(vMainUV2,0.0);
|
|
1287
|
-
#elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
|
|
1288
|
-
gl_FragColor.rgb=clearcoatOut.TBNClearCoat[0];
|
|
1289
|
-
#define DEBUGMODE_NORMALIZE
|
|
1290
|
-
#elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
|
|
1291
|
-
gl_FragColor.rgb=clearcoatOut.TBNClearCoat[1];
|
|
1292
|
-
#define DEBUGMODE_NORMALIZE
|
|
1293
|
-
#elif DEBUGMODE==10 && defined(CLEARCOAT)
|
|
1294
|
-
gl_FragColor.rgb=clearcoatOut.clearCoatNormalW;
|
|
1295
|
-
#define DEBUGMODE_NORMALIZE
|
|
1296
|
-
#elif DEBUGMODE==11 && defined(ANISOTROPIC)
|
|
1297
|
-
gl_FragColor.rgb=anisotropicOut.anisotropicNormal;
|
|
1298
|
-
#define DEBUGMODE_NORMALIZE
|
|
1299
|
-
#elif DEBUGMODE==12 && defined(ANISOTROPIC)
|
|
1300
|
-
gl_FragColor.rgb=anisotropicOut.anisotropicTangent;
|
|
1301
|
-
#define DEBUGMODE_NORMALIZE
|
|
1302
|
-
#elif DEBUGMODE==13 && defined(ANISOTROPIC)
|
|
1303
|
-
gl_FragColor.rgb=anisotropicOut.anisotropicBitangent;
|
|
1304
|
-
#define DEBUGMODE_NORMALIZE
|
|
1305
|
-
#elif DEBUGMODE==20 && defined(ALBEDO)
|
|
1306
|
-
gl_FragColor.rgb=albedoTexture.rgb;
|
|
1307
|
-
#ifndef GAMMAALBEDO
|
|
1308
|
-
#define DEBUGMODE_GAMMA
|
|
1317
|
+
,in sampler2D reflectionSampler
|
|
1309
1318
|
#endif
|
|
1310
|
-
#
|
|
1311
|
-
|
|
1312
|
-
#elif DEBUGMODE==22 && defined(OPACITY)
|
|
1313
|
-
gl_FragColor.rgb=opacityMap.rgb;
|
|
1314
|
-
#elif DEBUGMODE==23 && defined(EMISSIVE)
|
|
1315
|
-
gl_FragColor.rgb=emissiveColorTex.rgb;
|
|
1316
|
-
#ifndef GAMMAEMISSIVE
|
|
1317
|
-
#define DEBUGMODE_GAMMA
|
|
1319
|
+
#ifdef REALTIME_FILTERING
|
|
1320
|
+
,in vec2 vReflectionFilteringInfo
|
|
1318
1321
|
#endif
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
#
|
|
1322
|
-
|
|
1322
|
+
)
|
|
1323
|
+
{vec4 environmentRadiance=vec4(0.,0.,0.,0.);float alphaT=alphaG*sqrt(2.0/(1.0+(1.0-geoInfo.anisotropy)*(1.0-geoInfo.anisotropy)));float alphaB=(1.0-geoInfo.anisotropy)*alphaT;alphaG=alphaB;
|
|
1324
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
1325
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
1326
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
1327
|
+
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
1328
|
+
#else
|
|
1329
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
1323
1330
|
#endif
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
#elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)
|
|
1330
|
-
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatMapData.rg,0.0);
|
|
1331
|
-
#elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
|
|
1332
|
-
gl_FragColor.rgb=clearcoatOut.clearCoatTintMapData.rgb;
|
|
1333
|
-
#elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE)
|
|
1334
|
-
gl_FragColor.rgb=sheenOut.sheenMapData.rgb;
|
|
1335
|
-
#elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)
|
|
1336
|
-
gl_FragColor.rgb=anisotropicOut.anisotropyMapData.rgb;
|
|
1337
|
-
#elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)
|
|
1338
|
-
gl_FragColor.rgb=subSurfaceOut.thicknessMap.rgb;
|
|
1339
|
-
#elif DEBUGMODE==32 && defined(BUMP)
|
|
1340
|
-
gl_FragColor.rgb=texture2D(bumpSampler,vBumpUV).rgb;
|
|
1341
|
-
#elif DEBUGMODE==40 && defined(SS_REFRACTION)
|
|
1342
|
-
gl_FragColor.rgb=subSurfaceOut.environmentRefraction.rgb;
|
|
1343
|
-
#define DEBUGMODE_GAMMA
|
|
1344
|
-
#elif DEBUGMODE==41 && defined(REFLECTION)
|
|
1345
|
-
gl_FragColor.rgb=reflectionOut.environmentRadiance.rgb;
|
|
1346
|
-
#ifndef GAMMAREFLECTION
|
|
1347
|
-
#define DEBUGMODE_GAMMA
|
|
1331
|
+
reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
|
|
1332
|
+
#ifdef REALTIME_FILTERING
|
|
1333
|
+
vec3 view=(reflectionMatrix*vec4(viewDirectionW,0.0)).xyz;vec3 tangent=(reflectionMatrix*vec4(geoInfo.anisotropicTangent,0.0)).xyz;vec3 bitangent=(reflectionMatrix*vec4(geoInfo.anisotropicBitangent,0.0)).xyz;vec3 normal=(reflectionMatrix*vec4(normalW,0.0)).xyz;
|
|
1334
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
1335
|
+
view.z*=-1.0;tangent.z*=-1.0;bitangent.z*=-1.0;normal.z*=-1.0;
|
|
1348
1336
|
#endif
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
#
|
|
1355
|
-
|
|
1356
|
-
gl_FragColor.rgb=specularBase.rgb;
|
|
1357
|
-
#define DEBUGMODE_GAMMA
|
|
1358
|
-
#elif DEBUGMODE==52 && defined(CLEARCOAT)
|
|
1359
|
-
gl_FragColor.rgb=clearCoatBase.rgb;
|
|
1360
|
-
#define DEBUGMODE_GAMMA
|
|
1361
|
-
#elif DEBUGMODE==53 && defined(SHEEN)
|
|
1362
|
-
gl_FragColor.rgb=sheenBase.rgb;
|
|
1363
|
-
#define DEBUGMODE_GAMMA
|
|
1364
|
-
#elif DEBUGMODE==54 && defined(REFLECTION)
|
|
1365
|
-
gl_FragColor.rgb=reflectionOut.environmentIrradiance.rgb;
|
|
1366
|
-
#ifndef GAMMAREFLECTION
|
|
1367
|
-
#define DEBUGMODE_GAMMA
|
|
1337
|
+
environmentRadiance=vec4(radianceAnisotropic(alphaT,alphaB,reflectionSampler,view,tangent,bitangent,normal,vReflectionFilteringInfo,noise.xy,isRefraction,ior),1.0);
|
|
1338
|
+
#else
|
|
1339
|
+
const int samples=16;vec4 radianceSample=vec4(0.0);vec3 reflectionCoords=vec3(0.0);float sample_weight=0.0;float total_weight=0.0;float step=1.0/float(max(samples-1,1));for (int i=0; i<samples; ++i) {float t=mix(-1.0,1.0,float(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);vec3 bentNormal;if (t<0.0) {float blend=t+1.0;bentNormal=normalize(mix(-geoInfo.anisotropicTangent,normalW,blend));} else if (t>0.0) {float blend=t;bentNormal=normalize(mix(normalW,geoInfo.anisotropicTangent,blend));} else {bentNormal=normalW;}
|
|
1340
|
+
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
1341
|
+
reflectionCoords=vec3(reflectionMatrix*vec4(reflectionCoords,0));
|
|
1342
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
1343
|
+
reflectionCoords.z*=-1.0;
|
|
1368
1344
|
#endif
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
#elif
|
|
1373
|
-
|
|
1374
|
-
#define DEBUGMODE_GAMMA
|
|
1375
|
-
#elif DEBUGMODE==62 && defined(METALLICWORKFLOW)
|
|
1376
|
-
gl_FragColor.rgb=vec3(reflectivityOut.metallic);
|
|
1377
|
-
#elif DEBUGMODE==71 && defined(METALLICWORKFLOW)
|
|
1378
|
-
gl_FragColor.rgb=reflectivityOut.metallicF0;
|
|
1379
|
-
#elif DEBUGMODE==63
|
|
1380
|
-
gl_FragColor.rgb=vec3(roughness);
|
|
1381
|
-
#elif DEBUGMODE==64
|
|
1382
|
-
gl_FragColor.rgb=vec3(alphaG);
|
|
1383
|
-
#elif DEBUGMODE==65
|
|
1384
|
-
gl_FragColor.rgb=vec3(NdotV);
|
|
1385
|
-
#elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
|
|
1386
|
-
gl_FragColor.rgb=clearcoatOut.clearCoatColor.rgb;
|
|
1387
|
-
#define DEBUGMODE_GAMMA
|
|
1388
|
-
#elif DEBUGMODE==67 && defined(CLEARCOAT)
|
|
1389
|
-
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatRoughness);
|
|
1390
|
-
#elif DEBUGMODE==68 && defined(CLEARCOAT)
|
|
1391
|
-
gl_FragColor.rgb=vec3(clearcoatOut.clearCoatNdotV);
|
|
1392
|
-
#elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)
|
|
1393
|
-
gl_FragColor.rgb=subSurfaceOut.transmittance;
|
|
1394
|
-
#elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION)
|
|
1395
|
-
gl_FragColor.rgb=subSurfaceOut.refractionTransmittance;
|
|
1396
|
-
#elif DEBUGMODE==72
|
|
1397
|
-
gl_FragColor.rgb=vec3(microSurface);
|
|
1398
|
-
#elif DEBUGMODE==73
|
|
1399
|
-
gl_FragColor.rgb=vAlbedoColor.rgb;
|
|
1400
|
-
#define DEBUGMODE_GAMMA
|
|
1401
|
-
#elif DEBUGMODE==74 && !defined(METALLICWORKFLOW)
|
|
1402
|
-
gl_FragColor.rgb=vReflectivityColor.rgb;
|
|
1403
|
-
#define DEBUGMODE_GAMMA
|
|
1404
|
-
#elif DEBUGMODE==75
|
|
1405
|
-
gl_FragColor.rgb=vEmissiveColor.rgb;
|
|
1406
|
-
#define DEBUGMODE_GAMMA
|
|
1407
|
-
#elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION)
|
|
1408
|
-
gl_FragColor.rgb=vec3(seo);
|
|
1409
|
-
#elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
|
|
1410
|
-
gl_FragColor.rgb=vec3(eho);
|
|
1411
|
-
#elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION)
|
|
1412
|
-
gl_FragColor.rgb=vec3(energyConservationFactor);
|
|
1413
|
-
#elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
1414
|
-
gl_FragColor.rgb=baseSpecularEnvironmentReflectance;
|
|
1415
|
-
#define DEBUGMODE_GAMMA
|
|
1416
|
-
#elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
1417
|
-
gl_FragColor.rgb=clearcoatOut.clearCoatEnvironmentReflectance;
|
|
1418
|
-
#define DEBUGMODE_GAMMA
|
|
1419
|
-
#elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION)
|
|
1420
|
-
gl_FragColor.rgb=sheenOut.sheenEnvironmentReflectance;
|
|
1421
|
-
#define DEBUGMODE_GAMMA
|
|
1422
|
-
#elif DEBUGMODE==86 && defined(ALPHABLEND)
|
|
1423
|
-
gl_FragColor.rgb=vec3(luminanceOverAlpha);
|
|
1424
|
-
#elif DEBUGMODE==87
|
|
1425
|
-
gl_FragColor.rgb=vec3(alpha);
|
|
1426
|
-
#elif DEBUGMODE==88 && defined(ALBEDO)
|
|
1427
|
-
gl_FragColor.rgb=vec3(albedoTexture.a);
|
|
1428
|
-
#elif DEBUGMODE==89
|
|
1429
|
-
gl_FragColor.rgb=aoOut.ambientOcclusionColor.rgb;
|
|
1345
|
+
radianceSample=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
1346
|
+
#ifdef RGBDREFLECTION
|
|
1347
|
+
environmentRadiance.rgb+=sample_weight*fromRGBD(radianceSample);
|
|
1348
|
+
#elif defined(GAMMAREFLECTION)
|
|
1349
|
+
environmentRadiance.rgb+=sample_weight*toLinearSpace(radianceSample.rgb);
|
|
1430
1350
|
#else
|
|
1431
|
-
|
|
1351
|
+
environmentRadiance.rgb+=sample_weight*radianceSample.rgb;
|
|
1432
1352
|
#endif
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
gl_FragColor.rgb=normalize(gl_FragColor.rgb)*0.5+0.5;
|
|
1353
|
+
total_weight+=sample_weight;}
|
|
1354
|
+
environmentRadiance=vec4(environmentRadiance.xyz/float(total_weight),1.0);
|
|
1436
1355
|
#endif
|
|
1437
|
-
|
|
1438
|
-
gl_FragColor.rgb=toGammaSpace(gl_FragColor.rgb);
|
|
1356
|
+
environmentRadiance.rgb*=vec3(vReflectionInfos.x);return environmentRadiance.rgb;}
|
|
1439
1357
|
#endif
|
|
1440
|
-
gl_FragColor.a=1.0;
|
|
1441
|
-
#ifdef PREPASS
|
|
1442
|
-
gl_FragData[0]=toLinearSpace(gl_FragColor);
|
|
1443
|
-
gl_FragData[1]=vec4(0.,0.,0.,0.);
|
|
1444
1358
|
#endif
|
|
1445
|
-
#
|
|
1446
|
-
|
|
1359
|
+
#if defined(ENVIRONMENTBRDF)
|
|
1360
|
+
#define pbr_inline
|
|
1361
|
+
float computeDielectricIblFresnel(in ReflectanceParams reflectance,in vec3 environmentBrdf)
|
|
1362
|
+
{float dielectricIblFresnel=getReflectanceFromBRDFLookup(vec3(reflectance.F0),vec3(reflectance.F90),environmentBrdf).r;float dielectricECF=1.0+reflectance.F0*(1.0/environmentBrdf.y-1.0);return clamp(dielectricIblFresnel*dielectricECF,0.0,1.0);}
|
|
1363
|
+
#define pbr_inline
|
|
1364
|
+
vec3 computeConductorIblFresnel(in ReflectanceParams reflectance,in vec3 environmentBrdf)
|
|
1365
|
+
{
|
|
1366
|
+
#if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) && defined(ENVIRONMENTBRDF)
|
|
1367
|
+
vec3 openPBRBrdf=vec3(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);vec3 b =getF82B(reflectance.coloredF0,reflectance.coloredF90);vec3 E_F82=getF82DirectionalAlbedo(reflectance.coloredF0,vec3(1.0),b,openPBRBrdf);vec3 F_avg=getF82AverageFresnel(reflectance.coloredF0,b);vec3 ECF =vec3(1.0)+F_avg*(vec3(1.0)/openPBRBrdf.y-vec3(1.0));return clamp(E_F82*ECF,vec3(0.0),vec3(1.0));
|
|
1368
|
+
#else
|
|
1369
|
+
return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
|
|
1447
1370
|
#endif
|
|
1448
1371
|
}
|
|
1449
1372
|
#endif
|
|
1450
|
-
`;o.ShaderStore.IncludesShadersStore[
|
|
1373
|
+
`;o.ShaderStore.IncludesShadersStore[c]||(o.ShaderStore.IncludesShadersStore[c]=f),e.s(["openpbrIblFunctions",0,{name:c,shader:f}],34630)},19831,e=>{"use strict";var o=e.i(2342);let t="sceneUboDeclaration",i=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection;
|
|
1374
|
+
#ifdef MULTIVIEW
|
|
1375
|
+
mat4 viewProjectionR;
|
|
1376
|
+
#endif
|
|
1377
|
+
mat4 view;mat4 projection;vec4 vEyePosition;mat4 inverseProjection;};
|
|
1378
|
+
`;o.ShaderStore.IncludesShadersStore[t]||(o.ShaderStore.IncludesShadersStore[t]=i),e.s(["sceneUboDeclaration",0,{name:t,shader:i}])}]);
|