@uptimizr/dashboard 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/404.html +1 -1
- package/out/__next.__PAGE__.txt +4 -4
- package/out/__next._full.txt +11 -11
- package/out/__next._head.txt +4 -4
- package/out/__next._index.txt +4 -4
- package/out/__next._tree.txt +2 -2
- package/out/_next/static/chunks/002cjeoit6-up.js +1 -0
- package/out/_next/static/chunks/02n1uiltexy3w.js +1 -0
- package/out/_next/static/chunks/03ab2khhe8-x5.js +1 -0
- package/out/_next/static/chunks/04_yytpc2paxy.js +1 -0
- package/out/_next/static/chunks/06qot1qvlsqaz.js +1 -0
- package/out/_next/static/chunks/07eeopuufsqp-.js +1501 -0
- package/out/_next/static/chunks/08a5xek662n8n.js +1 -0
- package/out/_next/static/chunks/08wuc9--s8zn_.js +1 -0
- package/out/_next/static/chunks/0927l-ygd5c8d.js +1 -0
- package/out/_next/static/chunks/09510356f0lad.js +1 -0
- package/out/_next/static/chunks/0_eu72k69lxj7.js +1 -0
- package/out/_next/static/chunks/0beajlqy8p8b5.js +1 -0
- package/out/_next/static/chunks/0c83pe1mpx456.js +1 -0
- package/out/_next/static/chunks/0echnagbkyx79.js +1198 -0
- package/out/_next/static/chunks/0eh1ml86u8dh7.js +1 -0
- package/out/_next/static/chunks/0fh-9h9ylxskr.js +674 -0
- package/out/_next/static/chunks/0fzmc1up21g1i.js +1 -0
- package/out/_next/static/chunks/0g_v2zswo4l6f.js +1 -0
- package/out/_next/static/chunks/0grlb9lo8e502.js +1 -0
- package/out/_next/static/chunks/0h22pg-0xrxnm.js +1 -0
- package/out/_next/static/chunks/0j6p1pmc14t96.js +1 -0
- package/out/_next/static/chunks/0j_6dx-sttgsy.js +1 -0
- package/out/_next/static/chunks/0j__xaq_8_di1.js +1 -0
- package/out/_next/static/chunks/0kfd-cvj5fvtz.js +1 -0
- package/out/_next/static/chunks/0o_mp98xzqfyf.js +1 -0
- package/out/_next/static/chunks/0otsec99kdkt7.js +213 -0
- package/out/_next/static/chunks/0ql-s-tsmel_u.js +151 -0
- package/out/_next/static/chunks/0r47gs_e93cka.js +1 -0
- package/out/_next/static/chunks/0sqys6o2pbe1q.js +1328 -0
- package/out/_next/static/chunks/0titqrn1qmcsv.js +1 -0
- package/out/_next/static/chunks/0tnlbw78tgaxp.js +4 -0
- package/out/_next/static/chunks/0tw4dyl-cp-hd.js +1 -0
- package/out/_next/static/chunks/0vbce-8omgurc.js +1 -0
- package/out/_next/static/chunks/0vfsg5byzep_0.js +1 -0
- package/out/_next/static/chunks/{0gv7mblzv3dl3.js → 0w8_1yjvol1f0.js} +20 -20
- package/out/_next/static/chunks/0xh144a5fz58h.js +1 -0
- package/out/_next/static/chunks/0xjltg_pph0c8.js +1 -0
- package/out/_next/static/chunks/0yeqgh0dnas8d.js +1 -0
- package/out/_next/static/chunks/101-7e_7up7rk.js +1 -0
- package/out/_next/static/chunks/128e51hj_04r0.js +1 -0
- package/out/_next/static/chunks/{10fnxpln_5xfd.js → 12kv810lohbsx.js} +2 -2
- package/out/_next/static/chunks/137xbvd4nd41j.js +3 -0
- package/out/_next/static/chunks/14bws-suyy5zu.js +1 -0
- package/out/_next/static/chunks/14ggsmqwej_tt.js +1656 -0
- package/out/_next/static/chunks/17genz6pkmty_.js +1 -0
- package/out/_next/static/chunks/17xd8hnazzr0g.js +1454 -0
- package/out/_next/static/chunks/18dczy9ylt2s_.js +1 -0
- package/out/_next/static/chunks/18xs_kvsaolb0.js +1 -0
- package/out/_next/static/chunks/19016f8-ry0z6.js +1 -0
- package/out/_next/static/chunks/1_6oejyxj39li.js +1 -0
- package/out/_next/static/chunks/1_aon8nz9p1fr.js +1 -0
- package/out/_next/static/chunks/1_qzlkuxukhpq.js +779 -0
- package/out/_next/static/chunks/1akaj5rhgitn3.js +1 -0
- package/out/_next/static/chunks/1bvl1ws7b_3gn.js +1 -0
- package/out/_next/static/chunks/1cdbk6kxyr1c9.js +1 -0
- package/out/_next/static/chunks/1fbjkk55uu4_g.js +1 -0
- package/out/_next/static/chunks/1furcfsgrw_3g.js +1 -0
- package/out/_next/static/chunks/1g0-f1g3gn_rs.js +1 -0
- package/out/_next/static/chunks/1g7emwu85bifo.js +557 -0
- package/out/_next/static/chunks/{37vzwr3ciejf1.js → 1gs-5722l4u59.js} +1 -1
- package/out/_next/static/chunks/1gt4kh0_xmigy.js +1 -0
- package/out/_next/static/chunks/1h8xzuuhhglu9.js +1 -0
- package/out/_next/static/chunks/1hatz-jlztrn0.js +1 -0
- package/out/_next/static/chunks/1iioifo7i0t0_.js +1 -0
- package/out/_next/static/chunks/{0impkpmxx3ttp.js → 1iiz7jqgj20z0.js} +1 -1
- package/out/_next/static/chunks/1kujmd5n0j9nk.js +1 -0
- package/out/_next/static/chunks/{2kazjq29jeamx.js → 1ltux4lwz7muf.js} +160 -372
- package/out/_next/static/chunks/1m_buecgcq67j.js +740 -0
- package/out/_next/static/chunks/1n9sy0yt5d2vq.js +1 -0
- package/out/_next/static/chunks/1p1gz6dseck--.js +1 -0
- package/out/_next/static/chunks/1p1xtsfwvpuqo.js +1 -0
- package/out/_next/static/chunks/1p8f6okk2ewbz.js +1 -0
- package/out/_next/static/chunks/1qg_etglhvp9h.js +740 -0
- package/out/_next/static/chunks/1th_t5ujeqlkf.js +1 -0
- package/out/_next/static/chunks/1thr-mdzbu96v.js +1 -0
- package/out/_next/static/chunks/1tta1a064979p.js +1 -0
- package/out/_next/static/chunks/1u_riwm0nfww7.js +1 -0
- package/out/_next/static/chunks/1ua15kzid0_8p.js +2560 -0
- package/out/_next/static/chunks/1uu-rt_8p1edp.js +2712 -0
- package/out/_next/static/chunks/1uu93wuxigx4k.js +1 -0
- package/out/_next/static/chunks/{1flb8adpj6_2o.js → 1xpwp4m1tqugp.js} +1 -1
- package/out/_next/static/chunks/1ynju1jqfrcv0.js +1 -0
- package/out/_next/static/chunks/1zfojlgb15okk.js +1 -0
- package/out/_next/static/chunks/1zj8x5wbgnzz-.js +1 -0
- package/out/_next/static/chunks/1zl6t15gh34nn.js +1 -0
- package/out/_next/static/chunks/{1thjncpj7u6pq.js → 223vrr_4sfhsj.js} +1 -1
- package/out/_next/static/chunks/22cr2b04btguf.js +1 -0
- package/out/_next/static/chunks/242xhzxxetctz.js +1 -0
- package/out/_next/static/chunks/24essz5mmvx-6.js +1 -0
- package/out/_next/static/chunks/256k1jw1m--l7.js +146 -0
- package/out/_next/static/chunks/259obyrpxcv6r.js +1 -0
- package/out/_next/static/chunks/26v9yqicofqba.js +1 -0
- package/out/_next/static/chunks/290d93hmm_e8b.js +1 -0
- package/out/_next/static/chunks/2_2fk7iddrs43.js +1 -0
- package/out/_next/static/chunks/{00k_j_r7bv_eb.js → 2bjlls8-qe05r.js} +9 -9
- package/out/_next/static/chunks/2ckd7f1wbfod-.js +1 -0
- package/out/_next/static/chunks/{163fa70v4mgxj.js → 2d6hru4qo23tt.js} +1 -1
- package/out/_next/static/chunks/2ejvntxtvf5o9.js +1 -0
- package/out/_next/static/chunks/2f7_3tzf7xhps.js +1 -0
- package/out/_next/static/chunks/2gxd_o1g89_bv.js +1 -0
- package/out/_next/static/chunks/2hd2txb4-m9k1.js +1 -0
- package/out/_next/static/chunks/2hpxou_cnp4f_.js +1 -0
- package/out/_next/static/chunks/2izioctrfc0s5.js +1 -0
- package/out/_next/static/chunks/2jhnk4h4n0udv.js +1 -0
- package/out/_next/static/chunks/2jpkhkk9zi8-f.js +1 -0
- package/out/_next/static/chunks/2kpet_l1kq2sx.js +1 -0
- package/out/_next/static/chunks/2mdbvf1b5h00_.css +3 -0
- package/out/_next/static/chunks/2nck5w4c7leb7.js +1 -0
- package/out/_next/static/chunks/2our10fwtj87e.js +1 -0
- package/out/_next/static/chunks/2qq3uzsbiicw3.js +1194 -0
- package/out/_next/static/chunks/2qqqpu0ahfdda.js +1 -0
- package/out/_next/static/chunks/2u-f7mmxvk8wj.js +1 -0
- package/out/_next/static/chunks/2ue1wo4ryk87z.js +1 -0
- package/out/_next/static/chunks/2uk-vwlxe9-xr.js +1 -0
- package/out/_next/static/chunks/2ur5-lxdvv1jm.js +1 -0
- package/out/_next/static/chunks/2veqsohwfhfqc.js +1 -0
- package/out/_next/static/chunks/2vqlv9wnewhu9.js +1 -0
- package/out/_next/static/chunks/{1zvc1tv--w8nn.js → 2wzshintp5lf8.js} +1 -1
- package/out/_next/static/chunks/2x-00glogc485.js +1 -0
- package/out/_next/static/chunks/2yfxy0f5fqs4o.js +1 -0
- package/out/_next/static/chunks/2z88mt3ixktu3.js +1 -0
- package/out/_next/static/chunks/2z_jn9ud28fk7.js +1 -0
- package/out/_next/static/chunks/3-eswqjobiqk1.js +1 -0
- package/out/_next/static/chunks/30-tbi7pys6fp.js +4 -0
- package/out/_next/static/chunks/30c-nsedy_ce0.js +1 -0
- package/out/_next/static/chunks/31u5lbu1vxznh.js +1 -0
- package/out/_next/static/chunks/{2feca0xcipcyt.js → 32ahba5ezp467.js} +156 -156
- package/out/_next/static/chunks/337hn35kts7ud.js +1 -0
- package/out/_next/static/chunks/33dgpebv-tf73.js +1 -0
- package/out/_next/static/chunks/36jkdhq6kb-cf.js +1 -0
- package/out/_next/static/chunks/37epa8fz59vba.js +1166 -0
- package/out/_next/static/chunks/3833xfnz0a-ub.js +1 -0
- package/out/_next/static/chunks/38awrh_qxn22k.js +1 -0
- package/out/_next/static/chunks/{0wrm9jr-9bw0e.js → 38x3c1ra5slhe.js} +383 -913
- package/out/_next/static/chunks/39idqlqlcp5b9.js +1 -0
- package/out/_next/static/chunks/{2a3spdq-m8drh.js → 3_gku1pwluoo0.js} +1 -1
- package/out/_next/static/chunks/3_mu-4rdjajna.js +1450 -0
- package/out/_next/static/chunks/3coacc4-g-g5c.js +1 -0
- package/out/_next/static/chunks/3e00fzdfkclzq.js +1 -0
- package/out/_next/static/chunks/3e8fmlq0k5wkg.js +1 -0
- package/out/_next/static/chunks/3e9tzyrt4_98z.js +1 -0
- package/out/_next/static/chunks/3edelqkq92pil.js +1 -0
- package/out/_next/static/chunks/3figbil1t4ssj.js +593 -0
- package/out/_next/static/chunks/3gimb3z_mteou.js +1 -0
- package/out/_next/static/chunks/{2p2vv6cc9i-3q.js → 3idaz_s77e-j_.js} +9 -9
- package/out/_next/static/chunks/3j-4wuhs5weba.js +1 -0
- package/out/_next/static/chunks/3jjfnwvybayy7.js +1 -0
- package/out/_next/static/chunks/3jwm5dfk_78gc.js +1 -0
- package/out/_next/static/chunks/3k9d4ylc3li2t.js +1352 -0
- package/out/_next/static/chunks/3l3_0ack3gy4k.js +1 -0
- package/out/_next/static/chunks/3lwhs5ja7tun3.js +1 -0
- package/out/_next/static/chunks/3m6nmp2dca6un.js +1342 -0
- package/out/_next/static/chunks/3mbnfpufs2-7e.js +7 -0
- package/out/_next/static/chunks/3mcd08gmt038z.js +1 -0
- package/out/_next/static/chunks/3mt5th7b1i_u9.js +1 -0
- package/out/_next/static/chunks/3ne77mjdz2y7o.js +1 -0
- package/out/_next/static/chunks/3puhrqtujktyv.js +1 -0
- package/out/_next/static/chunks/3rdifucupcgkg.js +1 -0
- package/out/_next/static/chunks/3riekaxl3uxfb.js +1195 -0
- package/out/_next/static/chunks/3sdoskq_buttj.js +1 -0
- package/out/_next/static/chunks/3tg-ma9tv9xu4.js +1 -0
- package/out/_next/static/chunks/3tm-pqpmq_ppw.js +1 -0
- package/out/_next/static/chunks/3w9go565cjhq3.js +1636 -0
- package/out/_next/static/chunks/3wi9gzq2mtr_q.js +8 -0
- package/out/_next/static/chunks/3xagd_2_9zft2.js +1 -0
- package/out/_next/static/chunks/3xsq_anpad-fb.js +1 -0
- package/out/_next/static/chunks/3ycv2qq7vpbua.js +1 -0
- package/out/_next/static/chunks/3z84au-mitjjw.js +1 -0
- package/out/_next/static/chunks/4030dhur2h70-.js +1 -0
- package/out/_next/static/chunks/40ffffml4h_3r.js +4 -0
- package/out/_next/static/chunks/{3-shckrcpvbxu.js → 41wt50z9tx9cx.js} +108 -711
- package/out/_next/static/chunks/431slrqh0wa0g.js +1 -0
- package/out/_next/static/chunks/43s_lbd1i2krj.js +1 -0
- package/out/_next/static/chunks/{0-2y-_oomza2l.js → 44nxswtahaq4w.js} +18 -18
- package/out/_next/static/chunks/45bwefvdpztfs.js +1 -0
- package/out/_next/static/chunks/{turbopack-0sgd6pfbe1fy6.js → turbopack-19105pdhzxp1x.js} +1 -1
- package/out/_not-found/__next._full.txt +9 -9
- package/out/_not-found/__next._head.txt +4 -4
- package/out/_not-found/__next._index.txt +4 -4
- package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
- package/out/_not-found/__next._not-found.txt +3 -3
- package/out/_not-found/__next._tree.txt +2 -2
- package/out/_not-found.html +1 -1
- package/out/_not-found.txt +9 -9
- package/out/index.html +1 -1
- package/out/index.txt +11 -11
- package/package.json +5 -4
- package/out/_next/static/chunks/068j6934u8j16.js +0 -1
- package/out/_next/static/chunks/09e4adtr6w0xe.js +0 -1
- package/out/_next/static/chunks/0_rf76jneiwal.js +0 -176
- package/out/_next/static/chunks/0aznt7717miff.js +0 -1
- package/out/_next/static/chunks/0cu-q5q3a7uf3.js +0 -1
- package/out/_next/static/chunks/0fskcfh9vbhtv.js +0 -1
- package/out/_next/static/chunks/0gg-ii7i6d_p6.js +0 -1
- package/out/_next/static/chunks/0tx1j_ghpz7rc.css +0 -3
- package/out/_next/static/chunks/0ufbyo1x3qkmo.js +0 -1
- package/out/_next/static/chunks/0wwcfw8i3j_zx.js +0 -1
- package/out/_next/static/chunks/0wwkrsvxwi57d.js +0 -1
- package/out/_next/static/chunks/0ys9-ozuluawt.js +0 -1
- package/out/_next/static/chunks/1-61zh4waha61.js +0 -1
- package/out/_next/static/chunks/10r_824wzt8hj.js +0 -1
- package/out/_next/static/chunks/123xxske5c9na.js +0 -1
- package/out/_next/static/chunks/13isnf0--pmx1.js +0 -1
- package/out/_next/static/chunks/157d9euci08yu.js +0 -1
- package/out/_next/static/chunks/18u58lorfahxi.js +0 -4
- package/out/_next/static/chunks/1_aahautsz2v_.js +0 -1
- package/out/_next/static/chunks/1o1d0p-v1z8ty.js +0 -1
- package/out/_next/static/chunks/1vdjn0pkoyypn.js +0 -1
- package/out/_next/static/chunks/1yehxf-fmeicg.js +0 -1
- package/out/_next/static/chunks/1zx2q-r32thv1.js +0 -4
- package/out/_next/static/chunks/2-sjjedfr0kfq.js +0 -1
- package/out/_next/static/chunks/25b9x-li-tvk2.js +0 -1
- package/out/_next/static/chunks/2aelw3far6rii.js +0 -1
- package/out/_next/static/chunks/2aor7m-wbis85.js +0 -1
- package/out/_next/static/chunks/2clzipqap01hp.js +0 -1
- package/out/_next/static/chunks/2fh-_9b6tqhvb.js +0 -1
- package/out/_next/static/chunks/2g5gecypj0rqe.js +0 -1
- package/out/_next/static/chunks/2szdcpl41-kzv.js +0 -1
- package/out/_next/static/chunks/2u6shh3oeycm-.js +0 -1
- package/out/_next/static/chunks/2unhhuv0arlcv.js +0 -1
- package/out/_next/static/chunks/2z5eqx5do5std.js +0 -1
- package/out/_next/static/chunks/310uz81hnnzsu.js +0 -1
- package/out/_next/static/chunks/3aqbf_wkg2sih.js +0 -3
- package/out/_next/static/chunks/3i3gbhccmhu7j.js +0 -210
- package/out/_next/static/chunks/3mqy-84_ul3t2.js +0 -1
- package/out/_next/static/chunks/3nz-dh9d7cehk.js +0 -1
- package/out/_next/static/chunks/3pufs8g4ui943.js +0 -1
- package/out/_next/static/chunks/3t06schbtqonl.js +0 -1
- package/out/_next/static/chunks/3v3-7fio3nw_t.js +0 -1
- package/out/_next/static/chunks/3v5ha25nxo43j.js +0 -1
- package/out/_next/static/chunks/3zskk1hxu3-_o.js +0 -1
- /package/out/_next/static/{vHD3x58R_2B6QWAhZXCg7 → M9ZSIaKJeBgkjz1qktYio}/_buildManifest.js +0 -0
- /package/out/_next/static/{vHD3x58R_2B6QWAhZXCg7 → M9ZSIaKJeBgkjz1qktYio}/_clientMiddlewareManifest.js +0 -0
- /package/out/_next/static/{vHD3x58R_2B6QWAhZXCg7 → M9ZSIaKJeBgkjz1qktYio}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,1194 @@
|
|
|
1
|
+
(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,63539,80713,149,e=>{"use strict";var r=e.i(12423);let i="bumpFragmentMainFunctions",o=`#ifndef TEXRD_DEFINED
|
|
2
|
+
#define TEXRD(s,uv) texture2D(s,uv)
|
|
3
|
+
#define TEXRD_DEFINED
|
|
4
|
+
#endif
|
|
5
|
+
#if defined(BUMP) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC) || defined(DETAIL)
|
|
6
|
+
#if defined(TANGENT) && defined(NORMAL)
|
|
7
|
+
varying mat3 vTBN;
|
|
8
|
+
#endif
|
|
9
|
+
#ifdef OBJECTSPACE_NORMALMAP
|
|
10
|
+
uniform mat4 normalMatrix;
|
|
11
|
+
#if defined(WEBGL2) || defined(WEBGPU)
|
|
12
|
+
mat4 toNormalMatrix(mat4 wMatrix)
|
|
13
|
+
{mat4 ret=inverse(wMatrix);ret=transpose(ret);ret[0][3]=0.;ret[1][3]=0.;ret[2][3]=0.;ret[3]=vec4(0.,0.,0.,1.);return ret;}
|
|
14
|
+
#else
|
|
15
|
+
mat4 toNormalMatrix(mat4 m)
|
|
16
|
+
{float
|
|
17
|
+
a00=m[0][0],a01=m[0][1],a02=m[0][2],a03=m[0][3],
|
|
18
|
+
a10=m[1][0],a11=m[1][1],a12=m[1][2],a13=m[1][3],
|
|
19
|
+
a20=m[2][0],a21=m[2][1],a22=m[2][2],a23=m[2][3],
|
|
20
|
+
a30=m[3][0],a31=m[3][1],a32=m[3][2],a33=m[3][3],
|
|
21
|
+
b00=a00*a11-a01*a10,
|
|
22
|
+
b01=a00*a12-a02*a10,
|
|
23
|
+
b02=a00*a13-a03*a10,
|
|
24
|
+
b03=a01*a12-a02*a11,
|
|
25
|
+
b04=a01*a13-a03*a11,
|
|
26
|
+
b05=a02*a13-a03*a12,
|
|
27
|
+
b06=a20*a31-a21*a30,
|
|
28
|
+
b07=a20*a32-a22*a30,
|
|
29
|
+
b08=a20*a33-a23*a30,
|
|
30
|
+
b09=a21*a32-a22*a31,
|
|
31
|
+
b10=a21*a33-a23*a31,
|
|
32
|
+
b11=a22*a33-a23*a32,
|
|
33
|
+
det=b00*b11-b01*b10+b02*b09+b03*b08-b04*b07+b05*b06;mat4 mi=mat4(
|
|
34
|
+
a11*b11-a12*b10+a13*b09,
|
|
35
|
+
a02*b10-a01*b11-a03*b09,
|
|
36
|
+
a31*b05-a32*b04+a33*b03,
|
|
37
|
+
a22*b04-a21*b05-a23*b03,
|
|
38
|
+
a12*b08-a10*b11-a13*b07,
|
|
39
|
+
a00*b11-a02*b08+a03*b07,
|
|
40
|
+
a32*b02-a30*b05-a33*b01,
|
|
41
|
+
a20*b05-a22*b02+a23*b01,
|
|
42
|
+
a10*b10-a11*b08+a13*b06,
|
|
43
|
+
a01*b08-a00*b10-a03*b06,
|
|
44
|
+
a30*b04-a31*b02+a33*b00,
|
|
45
|
+
a21*b02-a20*b04-a23*b00,
|
|
46
|
+
a11*b07-a10*b09-a12*b06,
|
|
47
|
+
a00*b09-a01*b07+a02*b06,
|
|
48
|
+
a31*b01-a30*b03-a32*b00,
|
|
49
|
+
a20*b03-a21*b01+a22*b00)/det;return mat4(mi[0][0],mi[1][0],mi[2][0],mi[3][0],
|
|
50
|
+
mi[0][1],mi[1][1],mi[2][1],mi[3][1],
|
|
51
|
+
mi[0][2],mi[1][2],mi[2][2],mi[3][2],
|
|
52
|
+
mi[0][3],mi[1][3],mi[2][3],mi[3][3]);}
|
|
53
|
+
#endif
|
|
54
|
+
#endif
|
|
55
|
+
vec3 perturbNormalBase(mat3 cotangentFrame,vec3 normal,float scale)
|
|
56
|
+
{
|
|
57
|
+
#ifdef NORMALXYSCALE
|
|
58
|
+
normal=normalize(normal*vec3(scale,scale,1.0));
|
|
59
|
+
#endif
|
|
60
|
+
return normalize(cotangentFrame*normal);}
|
|
61
|
+
vec3 perturbNormal(mat3 cotangentFrame,vec3 textureSample,float scale)
|
|
62
|
+
{return perturbNormalBase(cotangentFrame,textureSample*2.0-1.0,scale);}
|
|
63
|
+
mat3 cotangent_frame(vec3 normal,vec3 p,vec2 uv,vec2 tangentSpaceParams)
|
|
64
|
+
{vec3 dp1=dFdx(p);vec3 dp2=dFdy(p);vec2 duv1=dFdx(uv);vec2 duv2=dFdy(uv);vec3 dp2perp=cross(dp2,normal);vec3 dp1perp=cross(normal,dp1);vec3 tangent=dp2perp*duv1.x+dp1perp*duv2.x;vec3 bitangent=dp2perp*duv1.y+dp1perp*duv2.y;tangent*=tangentSpaceParams.x;bitangent*=tangentSpaceParams.y;float det=max(dot(tangent,tangent),dot(bitangent,bitangent));float invmax=det==0.0 ? 0.0 : inversesqrt(det);return mat3(tangent*invmax,bitangent*invmax,normal);}
|
|
65
|
+
#endif
|
|
66
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["bumpFragmentMainFunctions",0,{name:i,shader:o}],63539),e.i(80825);let a="bumpFragmentFunctions",n=`#if defined(BUMP)
|
|
67
|
+
#include<samplerFragmentDeclaration>(_DEFINENAME_,BUMP,_VARYINGNAME_,Bump,_SAMPLERNAME_,bump)
|
|
68
|
+
#endif
|
|
69
|
+
#if defined(DETAIL)
|
|
70
|
+
#include<samplerFragmentDeclaration>(_DEFINENAME_,DETAIL,_VARYINGNAME_,Detail,_SAMPLERNAME_,detail)
|
|
71
|
+
#endif
|
|
72
|
+
#if defined(BUMP) && defined(PARALLAX)
|
|
73
|
+
const float minSamples=4.;const float maxSamples=15.;const int iMaxSamples=15;vec2 parallaxOcclusion(vec3 vViewDirCoT,vec3 vNormalCoT,vec2 texCoord,float parallaxScale) {float parallaxLimit=length(vViewDirCoT.xy)/vViewDirCoT.z;parallaxLimit*=parallaxScale;vec2 vOffsetDir=normalize(vViewDirCoT.xy);vec2 vMaxOffset=vOffsetDir*parallaxLimit;float numSamples=maxSamples+(dot(vViewDirCoT,vNormalCoT)*(minSamples-maxSamples));float stepSize=1.0/numSamples;float currRayHeight=1.0;vec2 vCurrOffset=vec2(0,0);vec2 vLastOffset=vec2(0,0);float lastSampledHeight=1.0;float currSampledHeight=1.0;bool keepWorking=true;for (int i=0; i<iMaxSamples; i++)
|
|
74
|
+
{currSampledHeight=texture2D(bumpSampler,texCoord+vCurrOffset).w;if (!keepWorking)
|
|
75
|
+
{}
|
|
76
|
+
else if (currSampledHeight>currRayHeight)
|
|
77
|
+
{float delta1=currSampledHeight-currRayHeight;float delta2=(currRayHeight+stepSize)-lastSampledHeight;float ratio=delta1/(delta1+delta2);vCurrOffset=(ratio)* vLastOffset+(1.0-ratio)*vCurrOffset;keepWorking=false;}
|
|
78
|
+
else
|
|
79
|
+
{currRayHeight-=stepSize;vLastOffset=vCurrOffset;
|
|
80
|
+
#ifdef PARALLAX_RHS
|
|
81
|
+
vCurrOffset-=stepSize*vMaxOffset;
|
|
82
|
+
#else
|
|
83
|
+
vCurrOffset+=stepSize*vMaxOffset;
|
|
84
|
+
#endif
|
|
85
|
+
lastSampledHeight=currSampledHeight;}}
|
|
86
|
+
return vCurrOffset;}
|
|
87
|
+
vec2 parallaxOffset(vec3 viewDir,float heightScale)
|
|
88
|
+
{float height=texture2D(bumpSampler,vBumpUV).w;vec2 texCoordOffset=heightScale*viewDir.xy*height;
|
|
89
|
+
#ifdef PARALLAX_RHS
|
|
90
|
+
return texCoordOffset;
|
|
91
|
+
#else
|
|
92
|
+
return -texCoordOffset;
|
|
93
|
+
#endif
|
|
94
|
+
}
|
|
95
|
+
#endif
|
|
96
|
+
`;r.ShaderStore.IncludesShadersStore[a]||(r.ShaderStore.IncludesShadersStore[a]=n),e.s(["bumpFragmentFunctions",0,{name:a,shader:n}],80713);let t="bumpFragment",c=`vec2 uvOffset=vec2(0.0,0.0);
|
|
97
|
+
#if defined(BUMP) || defined(PARALLAX) || defined(DETAIL)
|
|
98
|
+
#ifdef NORMALXYSCALE
|
|
99
|
+
float normalScale=1.0;
|
|
100
|
+
#elif defined(BUMP)
|
|
101
|
+
float normalScale=vBumpInfos.y;
|
|
102
|
+
#else
|
|
103
|
+
float normalScale=1.0;
|
|
104
|
+
#endif
|
|
105
|
+
#if defined(TANGENT) && defined(NORMAL)
|
|
106
|
+
mat3 TBN=vTBN;
|
|
107
|
+
#elif defined(BUMP)
|
|
108
|
+
vec2 TBNUV=gl_FrontFacing ? vBumpUV : -vBumpUV;mat3 TBN=cotangent_frame(normalW*normalScale,vPositionW,TBNUV,vTangentSpaceParams);
|
|
109
|
+
#else
|
|
110
|
+
vec2 TBNUV=gl_FrontFacing ? vDetailUV : -vDetailUV;mat3 TBN=cotangent_frame(normalW*normalScale,vPositionW,TBNUV,vec2(1.,1.));
|
|
111
|
+
#endif
|
|
112
|
+
#elif defined(ANISOTROPIC)
|
|
113
|
+
#if defined(TANGENT) && defined(NORMAL)
|
|
114
|
+
mat3 TBN=vTBN;
|
|
115
|
+
#else
|
|
116
|
+
vec2 TBNUV=gl_FrontFacing ? vMainUV1 : -vMainUV1;mat3 TBN=cotangent_frame(normalW,vPositionW,TBNUV,vec2(1.,1.));
|
|
117
|
+
#endif
|
|
118
|
+
#endif
|
|
119
|
+
#ifdef PARALLAX
|
|
120
|
+
mat3 invTBN=transposeMat3(TBN);
|
|
121
|
+
#ifdef PARALLAXOCCLUSION
|
|
122
|
+
uvOffset=parallaxOcclusion(invTBN*-viewDirectionW,invTBN*normalW,vBumpUV,vBumpInfos.z);
|
|
123
|
+
#else
|
|
124
|
+
uvOffset=parallaxOffset(invTBN*viewDirectionW,vBumpInfos.z);
|
|
125
|
+
#endif
|
|
126
|
+
#endif
|
|
127
|
+
#ifdef DETAIL
|
|
128
|
+
vec4 detailColor=texture2D(detailSampler,vDetailUV+uvOffset);vec2 detailNormalRG=detailColor.wy*2.0-1.0;float detailNormalB=sqrt(1.-saturate(dot(detailNormalRG,detailNormalRG)));vec3 detailNormal=vec3(detailNormalRG,detailNormalB);
|
|
129
|
+
#endif
|
|
130
|
+
#ifdef BUMP
|
|
131
|
+
#ifdef OBJECTSPACE_NORMALMAP
|
|
132
|
+
#define CUSTOM_FRAGMENT_BUMP_FRAGMENT
|
|
133
|
+
normalW=normalize(TEXRD(bumpSampler,vBumpUV).xyz *2.0-1.0);normalW=normalize(mat3(normalMatrix)*normalW);
|
|
134
|
+
#elif !defined(DETAIL)
|
|
135
|
+
normalW=perturbNormal(TBN,TEXRD(bumpSampler,vBumpUV+uvOffset).xyz,vBumpInfos.y);
|
|
136
|
+
#else
|
|
137
|
+
vec3 bumpNormal=TEXRD(bumpSampler,vBumpUV+uvOffset).xyz*2.0-1.0;
|
|
138
|
+
#if DETAIL_NORMALBLENDMETHOD==0
|
|
139
|
+
detailNormal.xy*=vDetailInfos.z;vec3 blendedNormal=normalize(vec3(bumpNormal.xy+detailNormal.xy,bumpNormal.z*detailNormal.z));
|
|
140
|
+
#elif DETAIL_NORMALBLENDMETHOD==1
|
|
141
|
+
detailNormal.xy*=vDetailInfos.z;bumpNormal+=vec3(0.0,0.0,1.0);detailNormal*=vec3(-1.0,-1.0,1.0);vec3 blendedNormal=bumpNormal*dot(bumpNormal,detailNormal)/bumpNormal.z-detailNormal;
|
|
142
|
+
#endif
|
|
143
|
+
normalW=perturbNormalBase(TBN,blendedNormal,vBumpInfos.y);
|
|
144
|
+
#endif
|
|
145
|
+
#elif defined(DETAIL)
|
|
146
|
+
detailNormal.xy*=vDetailInfos.z;normalW=perturbNormalBase(TBN,detailNormal,vDetailInfos.z);
|
|
147
|
+
#endif
|
|
148
|
+
`;r.ShaderStore.IncludesShadersStore[t]||(r.ShaderStore.IncludesShadersStore[t]=c),e.s(["bumpFragment",0,{name:t,shader:c}],149)},65296,e=>{"use strict";var r=e.i(12423);let i="helperFunctions",o=`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;
|
|
149
|
+
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;
|
|
150
|
+
#define saturate(x) clamp(x,0.0,1.0)
|
|
151
|
+
#define absEps(x) abs(x)+Epsilon
|
|
152
|
+
#define maxEps(x) max(x,Epsilon)
|
|
153
|
+
#define saturateEps(x) clamp(x,Epsilon,1.0)
|
|
154
|
+
mat3 transposeMat3(mat3 inMatrix) {vec3 i0=inMatrix[0];vec3 i1=inMatrix[1];vec3 i2=inMatrix[2];mat3 outMatrix=mat3(
|
|
155
|
+
vec3(i0.x,i1.x,i2.x),
|
|
156
|
+
vec3(i0.y,i1.y,i2.y),
|
|
157
|
+
vec3(i0.z,i1.z,i2.z)
|
|
158
|
+
);return outMatrix;}
|
|
159
|
+
mat3 inverseMat3(mat3 inMatrix) {float a00=inMatrix[0][0],a01=inMatrix[0][1],a02=inMatrix[0][2];float a10=inMatrix[1][0],a11=inMatrix[1][1],a12=inMatrix[1][2];float a20=inMatrix[2][0],a21=inMatrix[2][1],a22=inMatrix[2][2];float b01=a22*a11-a12*a21;float b11=-a22*a10+a12*a20;float b21=a21*a10-a11*a20;float det=a00*b01+a01*b11+a02*b21;return mat3(b01,(-a22*a01+a02*a21),(a12*a01-a02*a11),
|
|
160
|
+
b11,(a22*a00-a02*a20),(-a12*a00+a02*a10),
|
|
161
|
+
b21,(-a21*a00+a01*a20),(a11*a00-a01*a10))/det;}
|
|
162
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
163
|
+
vec3 toLinearSpaceExact(vec3 color)
|
|
164
|
+
{vec3 nearZeroSection=0.0773993808*color;vec3 remainingSection=pow(0.947867299*(color+vec3(0.055)),vec3(2.4));
|
|
165
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
166
|
+
return mix(remainingSection,nearZeroSection,lessThanEqual(color,vec3(0.04045)));
|
|
167
|
+
#else
|
|
168
|
+
return
|
|
169
|
+
vec3(
|
|
170
|
+
color.r<=0.04045 ? nearZeroSection.r : remainingSection.r,
|
|
171
|
+
color.g<=0.04045 ? nearZeroSection.g : remainingSection.g,
|
|
172
|
+
color.b<=0.04045 ? nearZeroSection.b : remainingSection.b);
|
|
173
|
+
#endif
|
|
174
|
+
}
|
|
175
|
+
vec3 toGammaSpaceExact(vec3 color)
|
|
176
|
+
{vec3 nearZeroSection=12.92*color;vec3 remainingSection=1.055*pow(color,vec3(0.41666))-vec3(0.055);
|
|
177
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
178
|
+
return mix(remainingSection,nearZeroSection,lessThanEqual(color,vec3(0.0031308)));
|
|
179
|
+
#else
|
|
180
|
+
return
|
|
181
|
+
vec3(
|
|
182
|
+
color.r<=0.0031308 ? nearZeroSection.r : remainingSection.r,
|
|
183
|
+
color.g<=0.0031308 ? nearZeroSection.g : remainingSection.g,
|
|
184
|
+
color.b<=0.0031308 ? nearZeroSection.b : remainingSection.b);
|
|
185
|
+
#endif
|
|
186
|
+
}
|
|
187
|
+
#endif
|
|
188
|
+
float toLinearSpace(float color)
|
|
189
|
+
{
|
|
190
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
191
|
+
float nearZeroSection=0.0773993808*color;float remainingSection=pow(0.947867299*(color+0.055),2.4);return color<=0.04045 ? nearZeroSection : remainingSection;
|
|
192
|
+
#else
|
|
193
|
+
return pow(color,LinearEncodePowerApprox);
|
|
194
|
+
#endif
|
|
195
|
+
}
|
|
196
|
+
vec3 toLinearSpace(vec3 color)
|
|
197
|
+
{
|
|
198
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
199
|
+
return toLinearSpaceExact(color);
|
|
200
|
+
#else
|
|
201
|
+
return pow(color,vec3(LinearEncodePowerApprox));
|
|
202
|
+
#endif
|
|
203
|
+
}
|
|
204
|
+
vec4 toLinearSpace(vec4 color)
|
|
205
|
+
{
|
|
206
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
207
|
+
return vec4(toLinearSpaceExact(color.rgb),color.a);
|
|
208
|
+
#else
|
|
209
|
+
return vec4(pow(color.rgb,vec3(LinearEncodePowerApprox)),color.a);
|
|
210
|
+
#endif
|
|
211
|
+
}
|
|
212
|
+
float toGammaSpace(float color)
|
|
213
|
+
{
|
|
214
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
215
|
+
float nearZeroSection=12.92*color;float remainingSection=1.055*pow(color,0.41666)-0.055;return color<=0.0031308 ? nearZeroSection : remainingSection;
|
|
216
|
+
#else
|
|
217
|
+
return pow(color,GammaEncodePowerApprox);
|
|
218
|
+
#endif
|
|
219
|
+
}
|
|
220
|
+
vec3 toGammaSpace(vec3 color)
|
|
221
|
+
{
|
|
222
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
223
|
+
return toGammaSpaceExact(color);
|
|
224
|
+
#else
|
|
225
|
+
return pow(color,vec3(GammaEncodePowerApprox));
|
|
226
|
+
#endif
|
|
227
|
+
}
|
|
228
|
+
vec4 toGammaSpace(vec4 color)
|
|
229
|
+
{
|
|
230
|
+
#if USE_EXACT_SRGB_CONVERSIONS
|
|
231
|
+
return vec4(toGammaSpaceExact(color.rgb),color.a);
|
|
232
|
+
#else
|
|
233
|
+
return vec4(pow(color.rgb,vec3(GammaEncodePowerApprox)),color.a);
|
|
234
|
+
#endif
|
|
235
|
+
}
|
|
236
|
+
float square(float value)
|
|
237
|
+
{return value*value;}
|
|
238
|
+
vec3 square(vec3 value)
|
|
239
|
+
{return value*value;}
|
|
240
|
+
float pow5(float value) {float sq=value*value;return sq*sq*value;}
|
|
241
|
+
vec3 double_refract(vec3 I,vec3 N,float eta) {vec3 Tfront=refract(I,N,1.0/eta);vec3 Nback=normalize(reflect(N,Tfront));return refract(Tfront,-Nback,eta);}
|
|
242
|
+
float getLuminanceUnclamped(vec3 color)
|
|
243
|
+
{return dot(color,LuminanceEncodeApprox);}
|
|
244
|
+
float getLuminance(vec3 color)
|
|
245
|
+
{return saturate(getLuminanceUnclamped(color));}
|
|
246
|
+
float getRand(vec2 seed) {return fract(sin(dot(seed.xy ,vec2(12.9898,78.233)))*43758.5453);}
|
|
247
|
+
float dither(vec2 seed,float varianceAmount) {float rand=getRand(seed);float normVariance=varianceAmount/255.0;float dither=mix(-normVariance,normVariance,rand);return dither;}
|
|
248
|
+
const float rgbdMaxRange=255.;vec4 toRGBD(vec3 color) {float maxRGB=maxEps(max(color.r,max(color.g,color.b)));float D =max(rgbdMaxRange/maxRGB,1.);D =saturate(floor(D)/255.);vec3 rgb=color.rgb*D;rgb=toGammaSpace(rgb);return vec4(saturate(rgb),D);}
|
|
249
|
+
vec3 fromRGBD(vec4 rgbd) {rgbd.rgb=toLinearSpace(rgbd.rgb);return rgbd.rgb/rgbd.a;}
|
|
250
|
+
vec3 parallaxCorrectNormal( vec3 vertexPos,vec3 origVec,vec3 cubeSize,vec3 cubePos ) {vec3 invOrigVec=vec3(1.)/origVec;vec3 halfSize=cubeSize*0.5;vec3 intersecAtMaxPlane=(cubePos+halfSize-vertexPos)*invOrigVec;vec3 intersecAtMinPlane=(cubePos-halfSize-vertexPos)*invOrigVec;vec3 largestIntersec=max(intersecAtMaxPlane,intersecAtMinPlane);float distance=min(min(largestIntersec.x,largestIntersec.y),largestIntersec.z);vec3 intersectPositionWS=vertexPos+origVec*distance;return intersectPositionWS-cubePos;}
|
|
251
|
+
vec3 equirectangularToCubemapDirection(vec2 uv) {float longitude=uv.x*TWO_PI-PI;float latitude=HALF_PI-uv.y*PI;vec3 direction;direction.x=cos(latitude)*sin(longitude);direction.y=sin(latitude);direction.z=cos(latitude)*cos(longitude);return direction;}
|
|
252
|
+
float sqrtClamped(float value) {return sqrt(max(value,0.));}
|
|
253
|
+
float avg(vec3 value) {return dot(value,vec3(0.333333333));}
|
|
254
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
255
|
+
uint extractBits(uint value,int offset,int width) {return (value>>offset) & ((1u<<width)-1u);}
|
|
256
|
+
int onlyBitPosition(uint value) {return (floatBitsToInt(float(value))>>23)-0x7f;}
|
|
257
|
+
vec3 singleScatterToMultiScatterAlbedo(vec3 rho_ss) {vec3 s=sqrt(max(vec3(1.0)-rho_ss,vec3(0.0)));return (vec3(1.0)-s)*(vec3(1.0)-vec3(0.139)*s)/(vec3(1.0)+vec3(1.17)*s);}
|
|
258
|
+
vec3 multiScatterToSingleScatterAlbedo(vec3 rho_ms) {vec3 s=4.09712+4.20863*rho_ms-sqrt(9.59217+41.6808*rho_ms+17.7126*rho_ms*rho_ms);return 1.0-s*s;}
|
|
259
|
+
vec3 multiScatterToSingleScatterAlbedo(vec3 rho_ms,float aniso) {vec3 s=4.09712+4.20863*rho_ms-sqrt(9.59217+41.6808*rho_ms+17.7126*rho_ms*rho_ms);return (1.0-s*s)/maxEps(1.0-aniso*s*s);}
|
|
260
|
+
float min3(vec3 v) {return min(v.x,min(v.y,v.z));}
|
|
261
|
+
float max3(vec3 v) {return max(v.x,max(v.y,v.z));}
|
|
262
|
+
float uint2float(uint i) {return uintBitsToFloat(0x3F800000u | (i>>9u))-1.0;}
|
|
263
|
+
vec2 plasticSequence(const uint rstate) {return vec2(uint2float(rstate*3242174889u),
|
|
264
|
+
uint2float(rstate*2447445414u));}
|
|
265
|
+
#endif
|
|
266
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["helperFunctions",0,{name:i,shader:o}])},85668,e=>{"use strict";var r=e.i(12423);let i="sceneUboDeclaration",o=`layout(std140,column_major) uniform;uniform Scene {mat4 viewProjection;
|
|
267
|
+
#ifdef MULTIVIEW
|
|
268
|
+
mat4 viewProjectionR;
|
|
269
|
+
#endif
|
|
270
|
+
mat4 view;mat4 projection;vec4 vEyePosition;mat4 inverseProjection;};
|
|
271
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["sceneUboDeclaration",0,{name:i,shader:o}])},60990,e=>{"use strict";var r=e.i(12423);let i="pbrBRDFFunctions",o=`#define FRESNEL_MAXIMUM_ON_ROUGH 0.25
|
|
272
|
+
#define BRDF_DIFFUSE_MODEL_EON 0
|
|
273
|
+
#define BRDF_DIFFUSE_MODEL_BURLEY 1
|
|
274
|
+
#define BRDF_DIFFUSE_MODEL_LAMBERT 2
|
|
275
|
+
#define BRDF_DIFFUSE_MODEL_LEGACY 3
|
|
276
|
+
#define DIELECTRIC_SPECULAR_MODEL_GLTF 0
|
|
277
|
+
#define DIELECTRIC_SPECULAR_MODEL_OPENPBR 1
|
|
278
|
+
#define CONDUCTOR_SPECULAR_MODEL_GLTF 0
|
|
279
|
+
#define CONDUCTOR_SPECULAR_MODEL_OPENPBR 1
|
|
280
|
+
#if !defined(PBR_VERTEX_SHADER) && !defined(OPENPBR_VERTEX_SHADER)
|
|
281
|
+
#ifdef MS_BRDF_ENERGY_CONSERVATION
|
|
282
|
+
vec3 getEnergyConservationFactor(const vec3 specularEnvironmentR0,const vec3 environmentBrdf) {return 1.0+specularEnvironmentR0*(1.0/environmentBrdf.y-1.0);}
|
|
283
|
+
#endif
|
|
284
|
+
#if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR
|
|
285
|
+
#define F82_COS_THETA_MAX 0.142857143
|
|
286
|
+
#define F82_ONE_MINUS_CTM_POW5 0.462664366
|
|
287
|
+
#define F82_ONE_MINUS_CTM_POW6 0.396569457
|
|
288
|
+
#define F82_B_DENOMINATOR_RECIP 17.6512785
|
|
289
|
+
#define BRDF_Z_SCALE 16.0
|
|
290
|
+
vec3 getF82Specular(float NdotV,vec3 F0,vec3 edgeTint,float roughness) {vec3 white_minus_F0=vec3(1.0)-F0;vec3 b=(F0+white_minus_F0*F82_ONE_MINUS_CTM_POW5)*(vec3(1.0)-edgeTint)*F82_B_DENOMINATOR_RECIP;float cos_theta=max(roughness,NdotV);float one_minus_cos_theta=1.0-cos_theta;vec3 offset_from_F0=(white_minus_F0-b*cos_theta*one_minus_cos_theta)*pow(one_minus_cos_theta,5.0);return clamp(F0+offset_from_F0,0.0,1.0);}
|
|
291
|
+
vec3 getF82B(vec3 F0,vec3 edgeTint) {return (F0+(vec3(1.0)-F0)*F82_ONE_MINUS_CTM_POW5)*(vec3(1.0)-edgeTint)*F82_B_DENOMINATOR_RECIP;}
|
|
292
|
+
vec3 getF82DirectionalAlbedo(vec3 F0,vec3 F90,vec3 b,vec3 environmentBrdf) {return (F90-F0)*environmentBrdf.x+F0*environmentBrdf.y-b*environmentBrdf.z;}
|
|
293
|
+
vec3 getF82AverageFresnel(vec3 F0,vec3 b) {return F0+(vec3(1.0)-F0)/21.0-b/126.0;}
|
|
294
|
+
#endif
|
|
295
|
+
#ifdef FUZZENVIRONMENTBRDF
|
|
296
|
+
vec3 getFuzzBRDFLookup(float NdotV,float perceptualRoughness) {vec2 UV=vec2(perceptualRoughness,NdotV);vec4 brdfLookup=texture2D(environmentFuzzBrdfSampler,UV);const vec2 RiRange=vec2(0.0,0.75);const vec2 ARange =vec2(0.005,0.88);const vec2 BRange =vec2(-0.18,0.002);brdfLookup.r=mix(ARange.x, ARange.y, brdfLookup.r);brdfLookup.g=mix(BRange.x, BRange.y, brdfLookup.g);brdfLookup.b=mix(RiRange.x,RiRange.y,brdfLookup.b);return brdfLookup.rgb;}
|
|
297
|
+
#endif
|
|
298
|
+
#ifdef ENVIRONMENTBRDF
|
|
299
|
+
vec3 getBRDFLookup(float NdotV,float perceptualRoughness) {vec2 UV=vec2(NdotV,perceptualRoughness);vec4 brdfLookup=texture2D(environmentBrdfSampler,UV);
|
|
300
|
+
#ifdef ENVIRONMENTBRDF_RGBD
|
|
301
|
+
brdfLookup.rgb=fromRGBD(brdfLookup.rgba);
|
|
302
|
+
#endif
|
|
303
|
+
return brdfLookup.rgb;}
|
|
304
|
+
vec3 getReflectanceFromBRDFLookup(const vec3 specularEnvironmentR0,const vec3 specularEnvironmentR90,const vec3 environmentBrdf) {
|
|
305
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
306
|
+
vec3 reflectance=(specularEnvironmentR90-specularEnvironmentR0)*environmentBrdf.x+specularEnvironmentR0*environmentBrdf.y;
|
|
307
|
+
#else
|
|
308
|
+
vec3 reflectance=specularEnvironmentR0*environmentBrdf.x+specularEnvironmentR90*environmentBrdf.y;
|
|
309
|
+
#endif
|
|
310
|
+
return reflectance;}
|
|
311
|
+
vec3 getReflectanceFromBRDFLookup(const vec3 specularEnvironmentR0,const vec3 environmentBrdf) {
|
|
312
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
313
|
+
vec3 reflectance=mix(environmentBrdf.xxx,environmentBrdf.yyy,specularEnvironmentR0);
|
|
314
|
+
#else
|
|
315
|
+
vec3 reflectance=specularEnvironmentR0*environmentBrdf.x+environmentBrdf.y;
|
|
316
|
+
#endif
|
|
317
|
+
return reflectance;}
|
|
318
|
+
#endif
|
|
319
|
+
/* NOT USED
|
|
320
|
+
#if defined(SHEEN) && defined(SHEEN_SOFTER)
|
|
321
|
+
float getBRDFLookupCharlieSheen(float NdotV,float perceptualRoughness)
|
|
322
|
+
{float c=1.0-NdotV;float c3=c*c*c;return 0.65584461*c3+1.0/(4.16526551+exp(-7.97291361*perceptualRoughness+6.33516894));}
|
|
323
|
+
#endif
|
|
324
|
+
*/
|
|
325
|
+
#if !defined(ENVIRONMENTBRDF) || defined(REFLECTIONMAP_SKYBOX) || defined(ALPHAFRESNEL)
|
|
326
|
+
vec3 getReflectanceFromAnalyticalBRDFLookup_Jones(float VdotN,vec3 reflectance0,vec3 reflectance90,float smoothness)
|
|
327
|
+
{float weight=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);return reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));}
|
|
328
|
+
#endif
|
|
329
|
+
#if defined(SHEEN) && defined(ENVIRONMENTBRDF)
|
|
330
|
+
/**
|
|
331
|
+
* The sheen BRDF not containing F can be easily stored in the blue channel of the BRDF texture.
|
|
332
|
+
* The blue channel contains DCharlie*VAshikhmin*NdotL as a lokkup table
|
|
333
|
+
*/
|
|
334
|
+
vec3 getSheenReflectanceFromBRDFLookup(const vec3 reflectance0,const vec3 environmentBrdf) {vec3 sheenEnvironmentReflectance=reflectance0*environmentBrdf.b;return sheenEnvironmentReflectance;}
|
|
335
|
+
#endif
|
|
336
|
+
vec3 fresnelSchlickGGX(float VdotH,vec3 reflectance0,vec3 reflectance90)
|
|
337
|
+
{return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);}
|
|
338
|
+
float fresnelSchlickGGX(float VdotH,float reflectance0,float reflectance90)
|
|
339
|
+
{return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);}
|
|
340
|
+
#ifdef CLEARCOAT
|
|
341
|
+
vec3 getR0RemappedForClearCoat(vec3 f0) {
|
|
342
|
+
#ifdef CLEARCOAT_DEFAULTIOR
|
|
343
|
+
#ifdef MOBILE
|
|
344
|
+
return saturate(f0*(f0*0.526868+0.529324)-0.0482256);
|
|
345
|
+
#else
|
|
346
|
+
return saturate(f0*(f0*(0.941892-0.263008*f0)+0.346479)-0.0285998);
|
|
347
|
+
#endif
|
|
348
|
+
#else
|
|
349
|
+
vec3 s=sqrt(f0);vec3 t=(vClearCoatRefractionParams.z+vClearCoatRefractionParams.w*s)/(vClearCoatRefractionParams.w+vClearCoatRefractionParams.z*s);return square(t);
|
|
350
|
+
#endif
|
|
351
|
+
}
|
|
352
|
+
#endif
|
|
353
|
+
#ifdef IRIDESCENCE
|
|
354
|
+
const mat3 XYZ_TO_REC709=mat3(
|
|
355
|
+
3.2404542,-0.9692660, 0.0556434,
|
|
356
|
+
-1.5371385, 1.8760108,-0.2040259,
|
|
357
|
+
-0.4985314, 0.0415560, 1.0572252
|
|
358
|
+
);vec3 getIORTfromAirToSurfaceR0(vec3 f0) {vec3 sqrtF0=sqrt(f0);return (1.+sqrtF0)/(1.-sqrtF0);}
|
|
359
|
+
vec3 getR0fromIORs(vec3 iorT,float iorI) {return square((iorT-vec3(iorI))/(iorT+vec3(iorI)));}
|
|
360
|
+
float getR0fromIORs(float iorT,float iorI) {return square((iorT-iorI)/(iorT+iorI));}
|
|
361
|
+
vec3 evalSensitivity(float opd,vec3 shift) {float phase=2.0*PI*opd*1.0e-9;const vec3 val=vec3(5.4856e-13,4.4201e-13,5.2481e-13);const vec3 pos=vec3(1.6810e+06,1.7953e+06,2.2084e+06);const vec3 var=vec3(4.3278e+09,9.3046e+09,6.6121e+09);vec3 xyz=val*sqrt(2.0*PI*var)*cos(pos*phase+shift)*exp(-square(phase)*var);xyz.x+=9.7470e-14*sqrt(2.0*PI*4.5282e+09)*cos(2.2399e+06*phase+shift[0])*exp(-4.5282e+09*square(phase));xyz/=1.0685e-7;vec3 srgb=XYZ_TO_REC709*xyz;return srgb;}
|
|
362
|
+
vec3 evalIridescence(float outsideIOR,float eta2,float cosTheta1,float thinFilmThickness,vec3 baseF0) {vec3 I=vec3(1.0);float iridescenceIOR=mix(outsideIOR,eta2,smoothstep(0.0,0.03,thinFilmThickness));float sinTheta2Sq=square(outsideIOR/iridescenceIOR)*(1.0-square(cosTheta1));float cosTheta2Sq=1.0-sinTheta2Sq;if (cosTheta2Sq<0.0) {return I;}
|
|
363
|
+
float cosTheta2=sqrt(cosTheta2Sq);float R0=getR0fromIORs(iridescenceIOR,outsideIOR);float R12=fresnelSchlickGGX(cosTheta1,R0,1.);float R21=R12;float T121=1.0-R12;float phi12=0.0;if (iridescenceIOR<outsideIOR) phi12=PI;float phi21=PI-phi12;vec3 baseIOR=getIORTfromAirToSurfaceR0(clamp(baseF0,0.0,0.9999));
|
|
364
|
+
vec3 R1=getR0fromIORs(baseIOR,iridescenceIOR);float maxR1=max(R1.r,max(R1.g,R1.b));if (maxR1<1e-6) {return max(vec3(R12),vec3(0.0));}
|
|
365
|
+
vec3 R23=fresnelSchlickGGX(cosTheta2,R1,vec3(1.));vec3 phi23=vec3(0.0);if (baseIOR[0]<iridescenceIOR) phi23[0]=PI;if (baseIOR[1]<iridescenceIOR) phi23[1]=PI;if (baseIOR[2]<iridescenceIOR) phi23[2]=PI;float opd=2.0*iridescenceIOR*thinFilmThickness*cosTheta2;vec3 phi=vec3(phi21)+phi23;vec3 R123=clamp(R12*R23,1e-5,0.9999);vec3 r123=sqrt(R123);vec3 Rs=square(T121)*R23/(vec3(1.0)-R123);vec3 C0=R12+Rs;I=C0;vec3 Cm=Rs-T121;for (int m=1; m<=2; ++m)
|
|
366
|
+
{Cm*=r123;vec3 Sm=2.0*evalSensitivity(float(m)*opd,float(m)*phi);I+=Cm*Sm;}
|
|
367
|
+
return max(I,vec3(0.0));}
|
|
368
|
+
#endif
|
|
369
|
+
float normalDistributionFunction_TrowbridgeReitzGGX(float NdotH,float alphaG)
|
|
370
|
+
{float a2=square(alphaG);float d=NdotH*NdotH*(a2-1.0)+1.0;return a2/(PI*d*d);}
|
|
371
|
+
#ifdef SHEEN
|
|
372
|
+
float normalDistributionFunction_CharlieSheen(float NdotH,float alphaG)
|
|
373
|
+
{float invR=1./alphaG;float cos2h=NdotH*NdotH;float sin2h=1.-cos2h;return (2.+invR)*pow(sin2h,invR*.5)/(2.*PI);}
|
|
374
|
+
#endif
|
|
375
|
+
#ifdef ANISOTROPIC
|
|
376
|
+
float normalDistributionFunction_BurleyGGX_Anisotropic(float NdotH,float TdotH,float BdotH,const vec2 alphaTB) {float a2=alphaTB.x*alphaTB.y;vec3 v=vec3(alphaTB.y*TdotH,alphaTB.x *BdotH,a2*NdotH);float v2=dot(v,v);float w2=a2/v2;return a2*w2*w2*RECIPROCAL_PI;}
|
|
377
|
+
#endif
|
|
378
|
+
#ifdef BRDF_V_HEIGHT_CORRELATED
|
|
379
|
+
float smithVisibility_GGXCorrelated(float NdotL,float NdotV,float alphaG) {
|
|
380
|
+
#ifdef MOBILE
|
|
381
|
+
float GGXV=NdotL*(NdotV*(1.0-alphaG)+alphaG);float GGXL=NdotV*(NdotL*(1.0-alphaG)+alphaG);return 0.5/(GGXV+GGXL);
|
|
382
|
+
#else
|
|
383
|
+
float a2=alphaG*alphaG;float GGXV=NdotL*sqrt(NdotV*(NdotV-a2*NdotV)+a2);float GGXL=NdotV*sqrt(NdotL*(NdotL-a2*NdotL)+a2);return 0.5/(GGXV+GGXL);
|
|
384
|
+
#endif
|
|
385
|
+
}
|
|
386
|
+
#else
|
|
387
|
+
float smithVisibilityG1_TrowbridgeReitzGGXFast(float dot,float alphaG)
|
|
388
|
+
{
|
|
389
|
+
#ifdef MOBILE
|
|
390
|
+
return 1.0/(dot+alphaG+(1.0-alphaG)*dot ));
|
|
391
|
+
#else
|
|
392
|
+
float alphaSquared=alphaG*alphaG;return 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot));
|
|
393
|
+
#endif
|
|
394
|
+
}
|
|
395
|
+
float smithVisibility_TrowbridgeReitzGGXFast(float NdotL,float NdotV,float alphaG)
|
|
396
|
+
{float visibility=smithVisibilityG1_TrowbridgeReitzGGXFast(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGXFast(NdotV,alphaG);return visibility;}
|
|
397
|
+
#endif
|
|
398
|
+
#ifdef ANISOTROPIC
|
|
399
|
+
float smithVisibility_GGXCorrelated_Anisotropic(float NdotL,float NdotV,float TdotV,float BdotV,float TdotL,float BdotL,const vec2 alphaTB) {float lambdaV=NdotL*length(vec3(alphaTB.x*TdotV,alphaTB.y*BdotV,NdotV));float lambdaL=NdotV*length(vec3(alphaTB.x*TdotL,alphaTB.y*BdotL,NdotL));float v=0.5/(lambdaV+lambdaL);return v;}
|
|
400
|
+
#endif
|
|
401
|
+
#ifdef CLEARCOAT
|
|
402
|
+
float visibility_Kelemen(float VdotH) {return 0.25/(VdotH*VdotH); }
|
|
403
|
+
#endif
|
|
404
|
+
#ifdef SHEEN
|
|
405
|
+
float visibility_Ashikhmin(float NdotL,float NdotV)
|
|
406
|
+
{return 1./(4.*(NdotL+NdotV-NdotL*NdotV));}
|
|
407
|
+
/* NOT USED
|
|
408
|
+
#ifdef SHEEN_SOFTER
|
|
409
|
+
float l(float x,float alphaG)
|
|
410
|
+
{float oneMinusAlphaSq=(1.0-alphaG)*(1.0-alphaG);float a=mix(21.5473,25.3245,oneMinusAlphaSq);float b=mix(3.82987,3.32435,oneMinusAlphaSq);float c=mix(0.19823,0.16801,oneMinusAlphaSq);float d=mix(-1.97760,-1.27393,oneMinusAlphaSq);float e=mix(-4.32054,-4.85967,oneMinusAlphaSq);return a/(1.0+b*pow(x,c))+d*x+e;}
|
|
411
|
+
float lambdaSheen(float cosTheta,float alphaG)
|
|
412
|
+
{return abs(cosTheta)<0.5 ? exp(l(cosTheta,alphaG)) : exp(2.0*l(0.5,alphaG)-l(1.0-cosTheta,alphaG));}
|
|
413
|
+
float visibility_CharlieSheen(float NdotL,float NdotV,float alphaG)
|
|
414
|
+
{float G=1.0/(1.0+lambdaSheen(NdotV,alphaG)+lambdaSheen(NdotL,alphaG));return G/(4.0*NdotV*NdotL);}
|
|
415
|
+
#endif
|
|
416
|
+
*/
|
|
417
|
+
#endif
|
|
418
|
+
float diffuseBRDF_Burley(float NdotL,float NdotV,float VdotH,float roughness) {float diffuseFresnelNV=pow5(saturateEps(1.0-NdotL));float diffuseFresnelNL=pow5(saturateEps(1.0-NdotV));float diffuseFresnel90=0.5+2.0*VdotH*VdotH*roughness;float fresnel =
|
|
419
|
+
(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) *
|
|
420
|
+
(1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);return fresnel/PI;}
|
|
421
|
+
const float constant1_FON=0.5-2.0/(3.0*PI);const float constant2_FON=2.0/3.0-28.0/(15.0*PI);float E_FON_approx(float mu,float roughness)
|
|
422
|
+
{float sigma=roughness;
|
|
423
|
+
float mucomp=1.0-mu;float mucomp2=mucomp*mucomp;const mat2 Gcoeffs=mat2(0.0571085289,-0.332181442,
|
|
424
|
+
0.491881867,0.0714429953);float GoverPi=dot(Gcoeffs*vec2(mucomp,mucomp2),vec2(1.0,mucomp2));return (1.0+sigma*GoverPi)/(1.0+constant1_FON*sigma);}
|
|
425
|
+
vec3 diffuseBRDF_EON(vec3 albedo,float roughness,float NdotL,float NdotV,float LdotV)
|
|
426
|
+
{vec3 rho=albedo;float sigma=roughness;
|
|
427
|
+
float mu_i=NdotL;
|
|
428
|
+
float mu_o=NdotV;
|
|
429
|
+
float s=LdotV-mu_i*mu_o;
|
|
430
|
+
float sovertF=s>0.0 ? s/max(mu_i,mu_o) : s;
|
|
431
|
+
float AF=1.0/(1.0+constant1_FON*sigma);
|
|
432
|
+
vec3 f_ss=(rho*RECIPROCAL_PI)*AF*(1.0+sigma*sovertF);
|
|
433
|
+
float EFo=E_FON_approx(mu_o,sigma);
|
|
434
|
+
float EFi=E_FON_approx(mu_i,sigma);
|
|
435
|
+
float avgEF=AF*(1.0+constant2_FON*sigma);
|
|
436
|
+
vec3 rho_ms=(rho*rho)*avgEF/(vec3(1.0)-rho*(1.0-avgEF));const float eps=1.0e-7;vec3 f_ms=(rho_ms*RECIPROCAL_PI)*max(eps,1.0-EFo)
|
|
437
|
+
* max(eps,1.0-EFi)
|
|
438
|
+
/ max(eps,1.0-avgEF);return (f_ss+f_ms);}
|
|
439
|
+
#ifdef SS_TRANSLUCENCY
|
|
440
|
+
vec3 transmittanceBRDF_Burley(const vec3 tintColor,const vec3 diffusionDistance,float thickness) {vec3 S=1./maxEps(diffusionDistance);vec3 temp=exp((-0.333333333*thickness)*S);return tintColor.rgb*0.25*(temp*temp*temp+3.0*temp);}
|
|
441
|
+
float computeWrappedDiffuseNdotL(float NdotL,float w) {float t=1.0+w;float invt2=1.0/square(t);return saturate((NdotL+w)*invt2);}
|
|
442
|
+
#endif
|
|
443
|
+
#endif
|
|
444
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["pbrBRDFFunctions",0,{name:i,shader:o}])},29981,69838,e=>{"use strict";var r=e.i(12423);let i="clipPlaneFragmentDeclaration",o=`#ifdef CLIPPLANE
|
|
445
|
+
varying float fClipDistance;
|
|
446
|
+
#endif
|
|
447
|
+
#ifdef CLIPPLANE2
|
|
448
|
+
varying float fClipDistance2;
|
|
449
|
+
#endif
|
|
450
|
+
#ifdef CLIPPLANE3
|
|
451
|
+
varying float fClipDistance3;
|
|
452
|
+
#endif
|
|
453
|
+
#ifdef CLIPPLANE4
|
|
454
|
+
varying float fClipDistance4;
|
|
455
|
+
#endif
|
|
456
|
+
#ifdef CLIPPLANE5
|
|
457
|
+
varying float fClipDistance5;
|
|
458
|
+
#endif
|
|
459
|
+
#ifdef CLIPPLANE6
|
|
460
|
+
varying float fClipDistance6;
|
|
461
|
+
#endif
|
|
462
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["clipPlaneFragmentDeclaration",0,{name:i,shader:o}],29981);let a="clipPlaneFragment",n=`#if defined(CLIPPLANE) || defined(CLIPPLANE2) || defined(CLIPPLANE3) || defined(CLIPPLANE4) || defined(CLIPPLANE5) || defined(CLIPPLANE6)
|
|
463
|
+
if (false) {}
|
|
464
|
+
#endif
|
|
465
|
+
#ifdef CLIPPLANE
|
|
466
|
+
else if (fClipDistance>0.0)
|
|
467
|
+
{discard;}
|
|
468
|
+
#endif
|
|
469
|
+
#ifdef CLIPPLANE2
|
|
470
|
+
else if (fClipDistance2>0.0)
|
|
471
|
+
{discard;}
|
|
472
|
+
#endif
|
|
473
|
+
#ifdef CLIPPLANE3
|
|
474
|
+
else if (fClipDistance3>0.0)
|
|
475
|
+
{discard;}
|
|
476
|
+
#endif
|
|
477
|
+
#ifdef CLIPPLANE4
|
|
478
|
+
else if (fClipDistance4>0.0)
|
|
479
|
+
{discard;}
|
|
480
|
+
#endif
|
|
481
|
+
#ifdef CLIPPLANE5
|
|
482
|
+
else if (fClipDistance5>0.0)
|
|
483
|
+
{discard;}
|
|
484
|
+
#endif
|
|
485
|
+
#ifdef CLIPPLANE6
|
|
486
|
+
else if (fClipDistance6>0.0)
|
|
487
|
+
{discard;}
|
|
488
|
+
#endif
|
|
489
|
+
`;r.ShaderStore.IncludesShadersStore[a]||(r.ShaderStore.IncludesShadersStore[a]=n),e.s(["clipPlaneFragment",0,{name:a,shader:n}],69838)},80825,9275,e=>{"use strict";var r=e.i(12423);let i="samplerFragmentDeclaration",o=`#ifdef _DEFINENAME_
|
|
490
|
+
#if _DEFINENAME_DIRECTUV==1
|
|
491
|
+
#define v_VARYINGNAME_UV vMainUV1
|
|
492
|
+
#elif _DEFINENAME_DIRECTUV==2
|
|
493
|
+
#define v_VARYINGNAME_UV vMainUV2
|
|
494
|
+
#elif _DEFINENAME_DIRECTUV==3
|
|
495
|
+
#define v_VARYINGNAME_UV vMainUV3
|
|
496
|
+
#elif _DEFINENAME_DIRECTUV==4
|
|
497
|
+
#define v_VARYINGNAME_UV vMainUV4
|
|
498
|
+
#elif _DEFINENAME_DIRECTUV==5
|
|
499
|
+
#define v_VARYINGNAME_UV vMainUV5
|
|
500
|
+
#elif _DEFINENAME_DIRECTUV==6
|
|
501
|
+
#define v_VARYINGNAME_UV vMainUV6
|
|
502
|
+
#else
|
|
503
|
+
varying vec2 v_VARYINGNAME_UV;
|
|
504
|
+
#endif
|
|
505
|
+
uniform sampler2D _SAMPLERNAME_Sampler;
|
|
506
|
+
#endif
|
|
507
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["samplerFragmentDeclaration",0,{name:i,shader:o}],80825);let a="reflectionFunction",n=`vec3 computeFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
|
|
508
|
+
{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); }
|
|
509
|
+
vec3 computeMirroredFixedEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 direction)
|
|
510
|
+
{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); }
|
|
511
|
+
vec3 computeEquirectangularCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
512
|
+
{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);}
|
|
513
|
+
vec3 computeSphericalCoords(vec4 worldPos,vec3 worldNormal,mat4 view,mat4 reflectionMatrix)
|
|
514
|
+
{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);}
|
|
515
|
+
vec3 computePlanarCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
516
|
+
{vec3 viewDir=worldPos.xyz-eyePosition;vec3 coords=normalize(reflect(viewDir,worldNormal));return vec3(reflectionMatrix*vec4(coords,1));}
|
|
517
|
+
vec3 computeCubicCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix)
|
|
518
|
+
{vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=vec3(reflectionMatrix*vec4(coords,0));
|
|
519
|
+
#ifdef INVERTCUBICMAP
|
|
520
|
+
coords.y*=-1.0;
|
|
521
|
+
#endif
|
|
522
|
+
return coords;}
|
|
523
|
+
vec3 computeCubicLocalCoords(vec4 worldPos,vec3 worldNormal,vec3 eyePosition,mat4 reflectionMatrix,vec3 reflectionSize,vec3 reflectionPosition)
|
|
524
|
+
{vec3 viewDir=normalize(worldPos.xyz-eyePosition);vec3 coords=reflect(viewDir,worldNormal);coords=parallaxCorrectNormal(worldPos.xyz,coords,reflectionSize,reflectionPosition);coords=vec3(reflectionMatrix*vec4(coords,0));
|
|
525
|
+
#ifdef INVERTCUBICMAP
|
|
526
|
+
coords.y*=-1.0;
|
|
527
|
+
#endif
|
|
528
|
+
return coords;}
|
|
529
|
+
vec3 computeProjectionCoords(vec4 worldPos,mat4 view,mat4 reflectionMatrix)
|
|
530
|
+
{return vec3(reflectionMatrix*(view*worldPos));}
|
|
531
|
+
vec3 computeSkyBoxCoords(vec3 positionW,mat4 reflectionMatrix)
|
|
532
|
+
{return vec3(reflectionMatrix*vec4(positionW,1.));}
|
|
533
|
+
#ifdef REFLECTION
|
|
534
|
+
vec3 computeReflectionCoords(vec4 worldPos,vec3 worldNormal)
|
|
535
|
+
{
|
|
536
|
+
#ifdef REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED
|
|
537
|
+
vec3 direction=normalize(vDirectionW);return computeMirroredFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
538
|
+
#endif
|
|
539
|
+
#ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
|
|
540
|
+
vec3 direction=normalize(vDirectionW);return computeFixedEquirectangularCoords(worldPos,worldNormal,direction);
|
|
541
|
+
#endif
|
|
542
|
+
#ifdef REFLECTIONMAP_EQUIRECTANGULAR
|
|
543
|
+
return computeEquirectangularCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
|
|
544
|
+
#endif
|
|
545
|
+
#ifdef REFLECTIONMAP_SPHERICAL
|
|
546
|
+
return computeSphericalCoords(worldPos,worldNormal,view,reflectionMatrix);
|
|
547
|
+
#endif
|
|
548
|
+
#ifdef REFLECTIONMAP_PLANAR
|
|
549
|
+
return computePlanarCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
|
|
550
|
+
#endif
|
|
551
|
+
#ifdef REFLECTIONMAP_CUBIC
|
|
552
|
+
#ifdef USE_LOCAL_REFLECTIONMAP_CUBIC
|
|
553
|
+
return computeCubicLocalCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix,vReflectionSize,vReflectionPosition);
|
|
554
|
+
#else
|
|
555
|
+
return computeCubicCoords(worldPos,worldNormal,vEyePosition.xyz,reflectionMatrix);
|
|
556
|
+
#endif
|
|
557
|
+
#endif
|
|
558
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
559
|
+
return computeProjectionCoords(worldPos,view,reflectionMatrix);
|
|
560
|
+
#endif
|
|
561
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
562
|
+
return computeSkyBoxCoords(vPositionUVW,reflectionMatrix);
|
|
563
|
+
#endif
|
|
564
|
+
#ifdef REFLECTIONMAP_EXPLICIT
|
|
565
|
+
return vec3(0,0,0);
|
|
566
|
+
#endif
|
|
567
|
+
}
|
|
568
|
+
#endif
|
|
569
|
+
`;r.ShaderStore.IncludesShadersStore[a]||(r.ShaderStore.IncludesShadersStore[a]=n),e.s(["reflectionFunction",0,{name:a,shader:n}],9275)},66437,93263,e=>{"use strict";var r=e.i(12423);let i="pbrFragmentReflectionDeclaration",o=`#ifdef REFLECTION
|
|
570
|
+
#ifdef REFLECTIONMAP_3D
|
|
571
|
+
#define sampleReflection(s,c) textureCube(s,c)
|
|
572
|
+
uniform samplerCube reflectionSampler;
|
|
573
|
+
#ifdef LODBASEDMICROSFURACE
|
|
574
|
+
#define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l)
|
|
575
|
+
#else
|
|
576
|
+
uniform samplerCube reflectionSamplerLow;uniform samplerCube reflectionSamplerHigh;
|
|
577
|
+
#endif
|
|
578
|
+
#ifdef USEIRRADIANCEMAP
|
|
579
|
+
uniform samplerCube irradianceSampler;
|
|
580
|
+
#endif
|
|
581
|
+
#else
|
|
582
|
+
#define sampleReflection(s,c) texture2D(s,c)
|
|
583
|
+
uniform sampler2D reflectionSampler;
|
|
584
|
+
#ifdef LODBASEDMICROSFURACE
|
|
585
|
+
#define sampleReflectionLod(s,c,l) texture2DLodEXT(s,c,l)
|
|
586
|
+
#else
|
|
587
|
+
uniform sampler2D reflectionSamplerLow;uniform sampler2D reflectionSamplerHigh;
|
|
588
|
+
#endif
|
|
589
|
+
#ifdef USEIRRADIANCEMAP
|
|
590
|
+
uniform sampler2D irradianceSampler;
|
|
591
|
+
#endif
|
|
592
|
+
#endif
|
|
593
|
+
#ifdef REFLECTIONMAP_SKYBOX
|
|
594
|
+
varying vec3 vPositionUVW;
|
|
595
|
+
#else
|
|
596
|
+
#if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
|
|
597
|
+
varying vec3 vDirectionW;
|
|
598
|
+
#endif
|
|
599
|
+
#endif
|
|
600
|
+
#endif
|
|
601
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["pbrFragmentReflectionDeclaration",0,{name:i,shader:o}],66437);let a="pbrIBLFunctions",n=`#if defined(REFLECTION) || defined(SS_REFRACTION)
|
|
602
|
+
float getLodFromAlphaG(float cubeMapDimensionPixels,float microsurfaceAverageSlope) {float microsurfaceAverageSlopeTexels=cubeMapDimensionPixels*microsurfaceAverageSlope;float lod=log2(microsurfaceAverageSlopeTexels);return lod;}
|
|
603
|
+
float getLinearLodFromRoughness(float cubeMapDimensionPixels,float roughness) {float lod=log2(cubeMapDimensionPixels)*roughness;return lod;}
|
|
604
|
+
#endif
|
|
605
|
+
#if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)
|
|
606
|
+
float environmentRadianceOcclusion(float ambientOcclusion,float NdotVUnclamped) {float temp=NdotVUnclamped+ambientOcclusion;return saturate(square(temp)-1.0+ambientOcclusion);}
|
|
607
|
+
#endif
|
|
608
|
+
#if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)
|
|
609
|
+
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);}
|
|
610
|
+
#endif
|
|
611
|
+
#if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)
|
|
612
|
+
#define UNPACK_LOD(x) (1.0-x)*255.0
|
|
613
|
+
float getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {float microsurfaceAverageSlope=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
|
|
614
|
+
#endif
|
|
615
|
+
`;r.ShaderStore.IncludesShadersStore[a]||(r.ShaderStore.IncludesShadersStore[a]=n),e.s(["pbrIBLFunctions",0,{name:a,shader:n}],93263)},28189,74545,22633,50898,e=>{"use strict";var r=e.i(12423);let i="sceneFragmentDeclaration",o=`uniform mat4 viewProjection;
|
|
616
|
+
#ifdef MULTIVIEW
|
|
617
|
+
uniform mat4 viewProjectionR;
|
|
618
|
+
#endif
|
|
619
|
+
uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection;
|
|
620
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["sceneFragmentDeclaration",0,{name:i,shader:o}],28189);let a="openpbrDielectricReflectance",n=`struct ReflectanceParams
|
|
621
|
+
{float F0;float F90;vec3 coloredF0;vec3 coloredF90;};
|
|
622
|
+
#define pbr_inline
|
|
623
|
+
ReflectanceParams dielectricReflectance(
|
|
624
|
+
in float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight
|
|
625
|
+
)
|
|
626
|
+
{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);
|
|
627
|
+
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
628
|
+
vec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);vec3 dielectricColorF90_NoSpec=specularColor.rgb*vec3(f90Scale_NoSpec);
|
|
629
|
+
#else
|
|
630
|
+
vec3 dielectricColorF90=vec3(f90Scale);vec3 dielectricColorF90_NoSpec=vec3(f90Scale_NoSpec);
|
|
631
|
+
#endif
|
|
632
|
+
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
633
|
+
float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight)*maxF0;
|
|
634
|
+
#else
|
|
635
|
+
outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight);
|
|
636
|
+
#endif
|
|
637
|
+
outParams.F90=mix(f90Scale_NoSpec,f90Scale,specularWeight);outParams.coloredF0=mix(vec3(dielectricF0_NoSpec),vec3(dielectricF0),specularWeight)*specularColor.rgb;outParams.coloredF90=mix(dielectricColorF90_NoSpec,dielectricColorF90,specularWeight);return outParams;}
|
|
638
|
+
`;r.ShaderStore.IncludesShadersStore[a]||(r.ShaderStore.IncludesShadersStore[a]=n),e.s(["openpbrDielectricReflectance",0,{name:a,shader:n}],74545);let t="openpbrGeometryInfo",c=`struct geometryInfoOutParams
|
|
639
|
+
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;};struct geometryInfoAnisoOutParams
|
|
640
|
+
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;mat3 TBN;};
|
|
641
|
+
#define pbr_inline
|
|
642
|
+
geometryInfoOutParams geometryInfo(
|
|
643
|
+
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
644
|
+
)
|
|
645
|
+
{geometryInfoOutParams outParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
646
|
+
#if defined(ENVIRONMENTBRDF)
|
|
647
|
+
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
648
|
+
#else
|
|
649
|
+
outParams.environmentBrdf=vec3(0.0);
|
|
650
|
+
#endif
|
|
651
|
+
outParams.horizonOcclusion=1.0;
|
|
652
|
+
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
653
|
+
#ifdef HORIZONOCCLUSION
|
|
654
|
+
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
655
|
+
#ifdef REFLECTIONMAP_3D
|
|
656
|
+
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
657
|
+
#endif
|
|
658
|
+
#endif
|
|
659
|
+
#endif
|
|
660
|
+
#endif
|
|
661
|
+
return outParams;}
|
|
662
|
+
#define pbr_inline
|
|
663
|
+
geometryInfoAnisoOutParams geometryInfoAniso(
|
|
664
|
+
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
665
|
+
,in vec3 vAnisotropy,in mat3 TBN
|
|
666
|
+
)
|
|
667
|
+
{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;}`;r.ShaderStore.IncludesShadersStore[t]||(r.ShaderStore.IncludesShadersStore[t]=c),e.s(["openpbrGeometryInfo",0,{name:t,shader:c}],22633);let f="openpbrIblFunctions",l=`#ifdef REFLECTION
|
|
668
|
+
vec3 sampleIrradiance(
|
|
669
|
+
in vec3 surfaceNormal
|
|
670
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
671
|
+
,in vec3 vEnvironmentIrradianceSH
|
|
672
|
+
#endif
|
|
673
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
674
|
+
,in mat4 iblMatrix
|
|
675
|
+
#endif
|
|
676
|
+
#ifdef USEIRRADIANCEMAP
|
|
677
|
+
#ifdef REFLECTIONMAP_3D
|
|
678
|
+
,in samplerCube irradianceSampler
|
|
679
|
+
#else
|
|
680
|
+
,in sampler2D irradianceSampler
|
|
681
|
+
#endif
|
|
682
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
683
|
+
,in vec3 reflectionDominantDirection
|
|
684
|
+
#endif
|
|
685
|
+
#endif
|
|
686
|
+
#ifdef REALTIME_FILTERING
|
|
687
|
+
,in vec2 vReflectionFilteringInfo
|
|
688
|
+
#ifdef IBL_CDF_FILTERING
|
|
689
|
+
,in sampler2D icdfSampler
|
|
690
|
+
#endif
|
|
691
|
+
#endif
|
|
692
|
+
,in vec2 vReflectionInfos
|
|
693
|
+
,in vec3 viewDirectionW
|
|
694
|
+
,in float diffuseRoughness
|
|
695
|
+
,in vec3 surfaceAlbedo
|
|
696
|
+
) {vec3 environmentIrradiance=vec3(0.,0.,0.);
|
|
697
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
698
|
+
vec3 irradianceVector=(iblMatrix*vec4(surfaceNormal,0)).xyz;vec3 irradianceView=(iblMatrix*vec4(viewDirectionW,0)).xyz;
|
|
699
|
+
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
700
|
+
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
701
|
+
{float NdotV=max(dot(surfaceNormal,viewDirectionW),0.0);irradianceVector=mix(irradianceVector,irradianceView,(0.5*(1.0-NdotV))*diffuseRoughness);}
|
|
702
|
+
#endif
|
|
703
|
+
#endif
|
|
704
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
705
|
+
irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
|
|
706
|
+
#endif
|
|
707
|
+
#ifdef INVERTCUBICMAP
|
|
708
|
+
irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
|
|
709
|
+
#endif
|
|
710
|
+
#endif
|
|
711
|
+
#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
712
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
713
|
+
environmentIrradiance=vEnvironmentIrradianceSH;
|
|
714
|
+
#else
|
|
715
|
+
#if defined(REALTIME_FILTERING)
|
|
716
|
+
environmentIrradiance=irradiance(reflectionSampler,irradianceVector,vReflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
717
|
+
#ifdef IBL_CDF_FILTERING
|
|
718
|
+
,icdfSampler
|
|
719
|
+
#endif
|
|
720
|
+
);
|
|
721
|
+
#else
|
|
722
|
+
environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
|
|
723
|
+
#endif
|
|
724
|
+
#endif
|
|
725
|
+
#elif defined(USEIRRADIANCEMAP)
|
|
726
|
+
#ifdef REFLECTIONMAP_3D
|
|
727
|
+
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,irradianceVector);
|
|
728
|
+
#else
|
|
729
|
+
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,reflectionCoords);
|
|
730
|
+
#endif
|
|
731
|
+
environmentIrradiance=environmentIrradianceFromTexture.rgb;
|
|
732
|
+
#ifdef RGBDREFLECTION
|
|
733
|
+
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
734
|
+
#endif
|
|
735
|
+
#ifdef GAMMAREFLECTION
|
|
736
|
+
environmentIrradiance.rgb=toLinearSpace(environmentIrradiance.rgb);
|
|
737
|
+
#endif
|
|
738
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
739
|
+
vec3 Ls=normalize(reflectionDominantDirection);float NoL=dot(irradianceVector,Ls);float NoV=dot(irradianceVector,irradianceView);vec3 diffuseRoughnessTerm=vec3(1.0);
|
|
740
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
741
|
+
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)));
|
|
742
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
743
|
+
vec3 H=(irradianceView+Ls)*0.5;float VoH=dot(irradianceView,H);diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
744
|
+
#endif
|
|
745
|
+
environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
|
|
746
|
+
#endif
|
|
747
|
+
#endif
|
|
748
|
+
environmentIrradiance*=vReflectionInfos.x;return environmentIrradiance;}
|
|
749
|
+
#define pbr_inline
|
|
750
|
+
#ifdef REFLECTIONMAP_3D
|
|
751
|
+
vec3 createReflectionCoords(
|
|
752
|
+
#else
|
|
753
|
+
vec2 createReflectionCoords(
|
|
754
|
+
#endif
|
|
755
|
+
in vec3 vPositionW
|
|
756
|
+
,in vec3 normalW
|
|
757
|
+
)
|
|
758
|
+
{vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);
|
|
759
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
760
|
+
reflectionVector.z*=-1.0;
|
|
761
|
+
#endif
|
|
762
|
+
#ifdef REFLECTIONMAP_3D
|
|
763
|
+
vec3 reflectionCoords=reflectionVector;
|
|
764
|
+
#else
|
|
765
|
+
vec2 reflectionCoords=reflectionVector.xy;
|
|
766
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
767
|
+
reflectionCoords/=reflectionVector.z;
|
|
768
|
+
#endif
|
|
769
|
+
reflectionCoords.y=1.0-reflectionCoords.y;
|
|
770
|
+
#endif
|
|
771
|
+
return reflectionCoords;}
|
|
772
|
+
#define pbr_inline
|
|
773
|
+
#define inline
|
|
774
|
+
vec3 sampleRadiance(
|
|
775
|
+
in float alphaG
|
|
776
|
+
,in vec3 vReflectionMicrosurfaceInfos
|
|
777
|
+
,in vec2 vReflectionInfos
|
|
778
|
+
,in geometryInfoOutParams geoInfo
|
|
779
|
+
#ifdef REFLECTIONMAP_3D
|
|
780
|
+
,in samplerCube reflectionSampler
|
|
781
|
+
,const vec3 reflectionCoords
|
|
782
|
+
#else
|
|
783
|
+
,in sampler2D reflectionSampler
|
|
784
|
+
,const vec2 reflectionCoords
|
|
785
|
+
#endif
|
|
786
|
+
#ifdef REALTIME_FILTERING
|
|
787
|
+
,in vec2 vReflectionFilteringInfo
|
|
788
|
+
#endif
|
|
789
|
+
)
|
|
790
|
+
{vec4 environmentRadiance=vec4(0.,0.,0.,0.);
|
|
791
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
792
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
793
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
794
|
+
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
795
|
+
#else
|
|
796
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
797
|
+
#endif
|
|
798
|
+
reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
|
|
799
|
+
#ifdef REALTIME_FILTERING
|
|
800
|
+
environmentRadiance=vec4(radiance(alphaG,reflectionSampler,reflectionCoords,vReflectionFilteringInfo),1.0);
|
|
801
|
+
#else
|
|
802
|
+
environmentRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
803
|
+
#endif
|
|
804
|
+
#ifdef RGBDREFLECTION
|
|
805
|
+
environmentRadiance.rgb=fromRGBD(environmentRadiance);
|
|
806
|
+
#endif
|
|
807
|
+
#ifdef GAMMAREFLECTION
|
|
808
|
+
environmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);
|
|
809
|
+
#endif
|
|
810
|
+
environmentRadiance.rgb*=vec3(vReflectionInfos.x);return environmentRadiance.rgb;}
|
|
811
|
+
#if defined(ANISOTROPIC)
|
|
812
|
+
#define pbr_inline
|
|
813
|
+
#define inline
|
|
814
|
+
vec3 sampleRadianceAnisotropic(
|
|
815
|
+
in float alphaG
|
|
816
|
+
,in vec3 vReflectionMicrosurfaceInfos
|
|
817
|
+
,in vec2 vReflectionInfos
|
|
818
|
+
,in geometryInfoAnisoOutParams geoInfo
|
|
819
|
+
,const vec3 normalW
|
|
820
|
+
,const vec3 viewDirectionW
|
|
821
|
+
,const vec3 positionW
|
|
822
|
+
,const vec3 noise
|
|
823
|
+
,bool isRefraction
|
|
824
|
+
,float ior
|
|
825
|
+
#ifdef REFLECTIONMAP_3D
|
|
826
|
+
,in samplerCube reflectionSampler
|
|
827
|
+
#else
|
|
828
|
+
,in sampler2D reflectionSampler
|
|
829
|
+
#endif
|
|
830
|
+
#ifdef REALTIME_FILTERING
|
|
831
|
+
,in vec2 vReflectionFilteringInfo
|
|
832
|
+
#endif
|
|
833
|
+
)
|
|
834
|
+
{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;
|
|
835
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
836
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
837
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
838
|
+
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
839
|
+
#else
|
|
840
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
841
|
+
#endif
|
|
842
|
+
reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
|
|
843
|
+
#ifdef REALTIME_FILTERING
|
|
844
|
+
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;
|
|
845
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
846
|
+
view.z*=-1.0;tangent.z*=-1.0;bitangent.z*=-1.0;normal.z*=-1.0;
|
|
847
|
+
#endif
|
|
848
|
+
environmentRadiance =
|
|
849
|
+
vec4(radianceAnisotropic(alphaT,alphaB,reflectionSampler,
|
|
850
|
+
view,tangent,
|
|
851
|
+
bitangent,normal,
|
|
852
|
+
vReflectionFilteringInfo,noise.xy,isRefraction,ior),
|
|
853
|
+
1.0);
|
|
854
|
+
#else
|
|
855
|
+
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;}
|
|
856
|
+
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
857
|
+
reflectionCoords=vec3(reflectionMatrix*vec4(reflectionCoords,0));
|
|
858
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
859
|
+
reflectionCoords.z*=-1.0;
|
|
860
|
+
#endif
|
|
861
|
+
radianceSample=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
862
|
+
#ifdef RGBDREFLECTION
|
|
863
|
+
environmentRadiance.rgb+=sample_weight*fromRGBD(radianceSample);
|
|
864
|
+
#elif defined(GAMMAREFLECTION)
|
|
865
|
+
environmentRadiance.rgb+=sample_weight*toLinearSpace(radianceSample.rgb);
|
|
866
|
+
#else
|
|
867
|
+
environmentRadiance.rgb+=sample_weight*radianceSample.rgb;
|
|
868
|
+
#endif
|
|
869
|
+
total_weight+=sample_weight;}
|
|
870
|
+
environmentRadiance=vec4(environmentRadiance.xyz/float(total_weight),1.0);
|
|
871
|
+
#endif
|
|
872
|
+
environmentRadiance.rgb*=vec3(vReflectionInfos.x);return environmentRadiance.rgb;}
|
|
873
|
+
#endif
|
|
874
|
+
#endif
|
|
875
|
+
#if defined(ENVIRONMENTBRDF)
|
|
876
|
+
#define pbr_inline
|
|
877
|
+
float computeDielectricIblFresnel(in ReflectanceParams reflectance,in vec3 environmentBrdf)
|
|
878
|
+
{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);}
|
|
879
|
+
#define pbr_inline
|
|
880
|
+
vec3 computeConductorIblFresnel(in ReflectanceParams reflectance,in vec3 environmentBrdf)
|
|
881
|
+
{
|
|
882
|
+
#if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) && defined(ENVIRONMENTBRDF)
|
|
883
|
+
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));
|
|
884
|
+
#else
|
|
885
|
+
return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
|
|
886
|
+
#endif
|
|
887
|
+
}
|
|
888
|
+
#endif
|
|
889
|
+
`;r.ShaderStore.IncludesShadersStore[f]||(r.ShaderStore.IncludesShadersStore[f]=l),e.s(["openpbrIblFunctions",0,{name:f,shader:l}],50898)},16630,e=>{"use strict";var r=e.i(12423);let i="openpbrSubsurfaceLayerData",o=`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);
|
|
890
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
891
|
+
vec4 subsurfaceWeightFromTexture=TEXRD(subsurfaceWeightSampler,vSubsurfaceWeightUV+uvOffset);
|
|
892
|
+
#endif
|
|
893
|
+
#ifdef SUBSURFACE_COLOR
|
|
894
|
+
vec4 subsurfaceColorFromTexture=TEXRD(subsurfaceColorSampler,vSubsurfaceColorUV+uvOffset);
|
|
895
|
+
#endif
|
|
896
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
897
|
+
vec4 subsurfaceRadiusScaleFromTexture=TEXRD(subsurfaceRadiusScaleSampler,vSubsurfaceRadiusScaleUV+uvOffset);
|
|
898
|
+
#endif
|
|
899
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
900
|
+
#ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA
|
|
901
|
+
subsurface_weight*=subsurfaceWeightFromTexture.a;
|
|
902
|
+
#else
|
|
903
|
+
subsurface_weight*=subsurfaceWeightFromTexture.r;
|
|
904
|
+
#endif
|
|
905
|
+
#endif
|
|
906
|
+
#ifdef SUBSURFACE_COLOR
|
|
907
|
+
#ifdef SUBSURFACE_COLOR_GAMMA
|
|
908
|
+
subsurface_color*=toLinearSpace(subsurfaceColorFromTexture.rgb);
|
|
909
|
+
#else
|
|
910
|
+
subsurface_color*=subsurfaceColorFromTexture.rgb;
|
|
911
|
+
#endif
|
|
912
|
+
subsurface_color*=vSubsurfaceColorInfos.y;
|
|
913
|
+
#endif
|
|
914
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
915
|
+
subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
|
|
916
|
+
#endif
|
|
917
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["openpbrSubsurfaceLayerData",0,{name:i,shader:o}])},17796,e=>{"use strict";var r=e.i(12423);let i="openpbrTransmissionLayerData",o=`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;
|
|
918
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
919
|
+
vec4 transmissionWeightFromTexture=TEXRD(transmissionWeightSampler,vTransmissionWeightUV+uvOffset);
|
|
920
|
+
#endif
|
|
921
|
+
#ifdef TRANSMISSION_COLOR
|
|
922
|
+
vec4 transmissionColorFromTexture=TEXRD(transmissionColorSampler,vTransmissionColorUV+uvOffset);
|
|
923
|
+
#endif
|
|
924
|
+
#ifdef TRANSMISSION_DEPTH
|
|
925
|
+
vec4 transmissionDepthFromTexture=TEXRD(transmissionDepthSampler,vTransmissionDepthUV+uvOffset);
|
|
926
|
+
#endif
|
|
927
|
+
#ifdef TRANSMISSION_SCATTER
|
|
928
|
+
vec4 transmissionScatterFromTexture=TEXRD(transmissionScatterSampler,vTransmissionScatterUV+uvOffset);
|
|
929
|
+
#endif
|
|
930
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
931
|
+
vec4 transmissionDispersionScaleFromTexture=TEXRD(transmissionDispersionScaleSampler,vTransmissionDispersionScaleUV+uvOffset);
|
|
932
|
+
#endif
|
|
933
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
934
|
+
transmission_weight*=transmissionWeightFromTexture.r;
|
|
935
|
+
#endif
|
|
936
|
+
#ifdef TRANSMISSION_COLOR
|
|
937
|
+
#ifdef TRANSMISSION_COLOR_GAMMA
|
|
938
|
+
transmission_color*=toLinearSpace(transmissionColorFromTexture.rgb);
|
|
939
|
+
#else
|
|
940
|
+
transmission_color*=transmissionColorFromTexture.rgb;
|
|
941
|
+
#endif
|
|
942
|
+
transmission_color*=vTransmissionColorInfos.y;
|
|
943
|
+
#endif
|
|
944
|
+
#ifdef TRANSMISSION_DEPTH
|
|
945
|
+
transmission_depth*=transmissionDepthFromTexture.r;
|
|
946
|
+
#endif
|
|
947
|
+
#ifdef TRANSMISSION_SCATTER
|
|
948
|
+
transmission_scatter*=transmissionScatterFromTexture.rgb;
|
|
949
|
+
#endif
|
|
950
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
951
|
+
transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
|
|
952
|
+
#endif
|
|
953
|
+
`;r.ShaderStore.IncludesShadersStore[i]||(r.ShaderStore.IncludesShadersStore[i]=o),e.s(["openpbrTransmissionLayerData",0,{name:i,shader:o}])},61120,e=>{"use strict";var r=e.i(12423),i=e.i(29981);let o="mrtFragmentDeclaration",a=`#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
954
|
+
layout(location=0) out vec4 glFragData[{X}];
|
|
955
|
+
#endif
|
|
956
|
+
`;r.ShaderStore.IncludesShadersStore[o]||(r.ShaderStore.IncludesShadersStore[o]=a);var n=e.i(63539),t=e.i(80825),c=e.i(80713),f=e.i(65296),l=e.i(66437),s=e.i(28189),d=e.i(85668),m=e.i(60990),v=e.i(74545),u=e.i(93263),E=e.i(9275),R=e.i(22633),p=e.i(50898),S=e.i(69838),I=e.i(149),N=e.i(16630),_=e.i(17796);let T="geometryPixelShader",A=`#extension GL_EXT_draw_buffers : require
|
|
957
|
+
#if defined(BUMP) || !defined(NORMAL)
|
|
958
|
+
#extension GL_OES_standard_derivatives : enable
|
|
959
|
+
#endif
|
|
960
|
+
precision highp float;
|
|
961
|
+
#ifdef BUMP
|
|
962
|
+
varying mat4 vWorldView;varying vec3 vNormalW;
|
|
963
|
+
#else
|
|
964
|
+
varying vec3 vNormalV;
|
|
965
|
+
#endif
|
|
966
|
+
varying vec4 vViewPos;
|
|
967
|
+
#if defined(POSITION) || defined(BUMP) || defined(IRRADIANCE)
|
|
968
|
+
varying vec3 vPositionW;
|
|
969
|
+
#endif
|
|
970
|
+
#if defined(VELOCITY) || defined(VELOCITY_LINEAR)
|
|
971
|
+
varying vec4 vCurrentPosition;varying vec4 vPreviousPosition;
|
|
972
|
+
#endif
|
|
973
|
+
#ifdef NEED_UV
|
|
974
|
+
varying vec2 vUV;
|
|
975
|
+
#endif
|
|
976
|
+
#ifdef BUMP
|
|
977
|
+
uniform vec3 vBumpInfos;uniform vec2 vTangentSpaceParams;
|
|
978
|
+
#endif
|
|
979
|
+
#if defined(REFLECTIVITY)
|
|
980
|
+
#if defined(ORMTEXTURE) || defined(SPECULARGLOSSINESSTEXTURE) || defined(REFLECTIVITYTEXTURE)
|
|
981
|
+
uniform sampler2D reflectivitySampler;varying vec2 vReflectivityUV;
|
|
982
|
+
#else
|
|
983
|
+
#ifdef METALLIC_TEXTURE
|
|
984
|
+
uniform sampler2D metallicSampler;varying vec2 vMetallicUV;
|
|
985
|
+
#endif
|
|
986
|
+
#ifdef ROUGHNESS_TEXTURE
|
|
987
|
+
uniform sampler2D roughnessSampler;varying vec2 vRoughnessUV;
|
|
988
|
+
#endif
|
|
989
|
+
#endif
|
|
990
|
+
#ifdef ALBEDOTEXTURE
|
|
991
|
+
varying vec2 vAlbedoUV;uniform sampler2D albedoSampler;
|
|
992
|
+
#endif
|
|
993
|
+
#ifdef REFLECTIVITYCOLOR
|
|
994
|
+
uniform vec3 reflectivityColor;
|
|
995
|
+
#endif
|
|
996
|
+
#ifdef ALBEDOCOLOR
|
|
997
|
+
uniform vec3 albedoColor;
|
|
998
|
+
#endif
|
|
999
|
+
#ifdef METALLIC
|
|
1000
|
+
uniform float metallic;
|
|
1001
|
+
#endif
|
|
1002
|
+
#if defined(ROUGHNESS) || defined(GLOSSINESS)
|
|
1003
|
+
uniform float glossiness;
|
|
1004
|
+
#endif
|
|
1005
|
+
#endif
|
|
1006
|
+
#if defined(ALPHATEST) && defined(NEED_UV)
|
|
1007
|
+
uniform sampler2D diffuseSampler;
|
|
1008
|
+
#endif
|
|
1009
|
+
#include<clipPlaneFragmentDeclaration>
|
|
1010
|
+
#include<mrtFragmentDeclaration>[SCENE_MRT_COUNT]
|
|
1011
|
+
#include<bumpFragmentMainFunctions>
|
|
1012
|
+
#include<bumpFragmentFunctions>
|
|
1013
|
+
#include<helperFunctions>
|
|
1014
|
+
#ifdef IRRADIANCE
|
|
1015
|
+
#include<pbrFragmentReflectionDeclaration>
|
|
1016
|
+
#ifdef REFLECTION
|
|
1017
|
+
#ifdef USEIRRADIANCEMAP
|
|
1018
|
+
#include<__decl__sceneFragment>
|
|
1019
|
+
uniform mat4 reflectionMatrix;uniform vec2 vReflectionInfos;uniform vec3 vReflectionDominantDirection;
|
|
1020
|
+
#include<pbrBRDFFunctions>
|
|
1021
|
+
#include<openpbrDielectricReflectance>
|
|
1022
|
+
#include<pbrIBLFunctions>
|
|
1023
|
+
#include<reflectionFunction>
|
|
1024
|
+
#include<openpbrGeometryInfo>
|
|
1025
|
+
#include<openpbrIblFunctions>
|
|
1026
|
+
#elif defined(USESPHERICALFROMREFLECTIONMAP)
|
|
1027
|
+
varying vec3 vEnvironmentIrradiance;
|
|
1028
|
+
#endif
|
|
1029
|
+
#ifdef IBL_SHADOW_TEXTURE
|
|
1030
|
+
uniform sampler2D iblShadowSampler;uniform vec2 shadowTextureSize;
|
|
1031
|
+
#endif
|
|
1032
|
+
#ifdef IRRADIANCE_SCATTER_MASK
|
|
1033
|
+
uniform float vSubsurfaceWeight;
|
|
1034
|
+
#include<samplerFragmentDeclaration>(_DEFINENAME_,SUBSURFACE_WEIGHT,_VARYINGNAME_,SubsurfaceWeight,_SAMPLERNAME_,subsurfaceWeight)
|
|
1035
|
+
uniform float vSubsurfaceScatterAnisotropy;uniform float vTransmissionWeight;
|
|
1036
|
+
#include<samplerFragmentDeclaration>(_DEFINENAME_,TRANSMISSION_WEIGHT,_VARYINGNAME_,TransmissionWeight,_SAMPLERNAME_,transmissionWeight)
|
|
1037
|
+
uniform float vTransmissionScatterAnisotropy;
|
|
1038
|
+
#endif
|
|
1039
|
+
#endif
|
|
1040
|
+
#endif
|
|
1041
|
+
void main() {
|
|
1042
|
+
#include<clipPlaneFragment>
|
|
1043
|
+
#ifdef ALPHATEST
|
|
1044
|
+
if (texture2D(diffuseSampler,vUV).a<0.4)
|
|
1045
|
+
discard;
|
|
1046
|
+
#endif
|
|
1047
|
+
vec3 normalOutput;
|
|
1048
|
+
#ifdef BUMP
|
|
1049
|
+
vec3 normalW=normalize(vNormalW);
|
|
1050
|
+
#include<bumpFragment>
|
|
1051
|
+
#ifdef NORMAL_WORLDSPACE
|
|
1052
|
+
normalOutput=normalW;
|
|
1053
|
+
#else
|
|
1054
|
+
normalOutput=normalize(vec3(vWorldView*vec4(normalW,0.0)));
|
|
1055
|
+
#endif
|
|
1056
|
+
#elif defined(HAS_NORMAL_ATTRIBUTE)
|
|
1057
|
+
normalOutput=normalize(vNormalV);
|
|
1058
|
+
#elif defined(POSITION)
|
|
1059
|
+
normalOutput=normalize(-cross(dFdx(vPositionW),dFdy(vPositionW)));
|
|
1060
|
+
#endif
|
|
1061
|
+
#ifdef ENCODE_NORMAL
|
|
1062
|
+
normalOutput=normalOutput*0.5+0.5;
|
|
1063
|
+
#endif
|
|
1064
|
+
#ifdef DEPTH
|
|
1065
|
+
gl_FragData[DEPTH_INDEX]=vec4(vViewPos.z/vViewPos.w,0.0,0.0,1.0);
|
|
1066
|
+
#endif
|
|
1067
|
+
#ifdef NORMAL
|
|
1068
|
+
gl_FragData[NORMAL_INDEX]=vec4(normalOutput,1.0);
|
|
1069
|
+
#endif
|
|
1070
|
+
#ifdef SCREENSPACE_DEPTH
|
|
1071
|
+
gl_FragData[SCREENSPACE_DEPTH_INDEX]=vec4(gl_FragCoord.z,0.0,0.0,1.0);
|
|
1072
|
+
#endif
|
|
1073
|
+
#ifdef POSITION
|
|
1074
|
+
gl_FragData[POSITION_INDEX]=vec4(vPositionW,1.0);
|
|
1075
|
+
#endif
|
|
1076
|
+
#ifdef VELOCITY
|
|
1077
|
+
vec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;vec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;vec2 velocity=abs(a-b);velocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;gl_FragData[VELOCITY_INDEX]=vec4(velocity,0.0,1.0);
|
|
1078
|
+
#endif
|
|
1079
|
+
#ifdef VELOCITY_LINEAR
|
|
1080
|
+
vec2 velocity=vec2(0.5)*((vPreviousPosition.xy/vPreviousPosition.w) -
|
|
1081
|
+
(vCurrentPosition.xy/vCurrentPosition.w));gl_FragData[VELOCITY_LINEAR_INDEX]=vec4(velocity,0.0,1.0);
|
|
1082
|
+
#endif
|
|
1083
|
+
#ifdef REFLECTIVITY
|
|
1084
|
+
vec4 reflectivity=vec4(0.0,0.0,0.0,1.0);
|
|
1085
|
+
#ifdef METALLICWORKFLOW
|
|
1086
|
+
float metal=1.0;float roughness=1.0;
|
|
1087
|
+
#ifdef ORMTEXTURE
|
|
1088
|
+
metal*=texture2D(reflectivitySampler,vReflectivityUV).b;roughness*=texture2D(reflectivitySampler,vReflectivityUV).g;
|
|
1089
|
+
#else
|
|
1090
|
+
#ifdef METALLIC_TEXTURE
|
|
1091
|
+
metal*=texture2D(metallicSampler,vMetallicUV).r;
|
|
1092
|
+
#endif
|
|
1093
|
+
#ifdef ROUGHNESS_TEXTURE
|
|
1094
|
+
roughness*=texture2D(roughnessSampler,vRoughnessUV).r;
|
|
1095
|
+
#endif
|
|
1096
|
+
#endif
|
|
1097
|
+
#ifdef METALLIC
|
|
1098
|
+
metal*=metallic;
|
|
1099
|
+
#endif
|
|
1100
|
+
#ifdef ROUGHNESS
|
|
1101
|
+
roughness*=(1.0-glossiness);
|
|
1102
|
+
#endif
|
|
1103
|
+
reflectivity.a-=roughness;vec3 color=vec3(1.0);
|
|
1104
|
+
#ifdef ALBEDOTEXTURE
|
|
1105
|
+
color=texture2D(albedoSampler,vAlbedoUV).rgb;
|
|
1106
|
+
#ifdef GAMMAALBEDO
|
|
1107
|
+
color=toLinearSpace(color);
|
|
1108
|
+
#endif
|
|
1109
|
+
#endif
|
|
1110
|
+
#ifdef ALBEDOCOLOR
|
|
1111
|
+
color*=albedoColor.xyz;
|
|
1112
|
+
#endif
|
|
1113
|
+
reflectivity.rgb=mix(vec3(0.04),color,metal);
|
|
1114
|
+
#else
|
|
1115
|
+
#if defined(SPECULARGLOSSINESSTEXTURE) || defined(REFLECTIVITYTEXTURE)
|
|
1116
|
+
reflectivity=texture2D(reflectivitySampler,vReflectivityUV);
|
|
1117
|
+
#ifdef GAMMAREFLECTIVITYTEXTURE
|
|
1118
|
+
reflectivity.rgb=toLinearSpace(reflectivity.rgb);
|
|
1119
|
+
#endif
|
|
1120
|
+
#else
|
|
1121
|
+
#ifdef REFLECTIVITYCOLOR
|
|
1122
|
+
reflectivity.rgb=toLinearSpace(reflectivityColor.xyz);reflectivity.a=1.0;
|
|
1123
|
+
#endif
|
|
1124
|
+
#endif
|
|
1125
|
+
#ifdef GLOSSINESSS
|
|
1126
|
+
reflectivity.a*=glossiness;
|
|
1127
|
+
#endif
|
|
1128
|
+
#endif
|
|
1129
|
+
gl_FragData[REFLECTIVITY_INDEX]=reflectivity;
|
|
1130
|
+
#endif
|
|
1131
|
+
#ifdef IRRADIANCE
|
|
1132
|
+
vec3 irradiance=vec3(0.0);float irradiance_alpha=1.0;
|
|
1133
|
+
#ifdef REFLECTION
|
|
1134
|
+
#ifdef IRRADIANCE_SCATTER_MASK
|
|
1135
|
+
#ifndef BUMP
|
|
1136
|
+
vec2 uvOffset=vec2(0.0);
|
|
1137
|
+
#endif
|
|
1138
|
+
vec3 vSubsurfaceColor=vec3(1.0);float vSubsurfaceRadius=0.0;vec3 vSubsurfaceRadiusScale=vec3(1.0);
|
|
1139
|
+
#include<openpbrSubsurfaceLayerData>
|
|
1140
|
+
float vTransmissionDepth=1.0;vec3 vTransmissionColor=vec3(1.0);vec3 vTransmissionScatter=vec3(0.0);float vTransmissionDispersionScale=0.0;float vTransmissionDispersionAbbeNumber=0.0;
|
|
1141
|
+
#include<openpbrTransmissionLayerData>
|
|
1142
|
+
#endif
|
|
1143
|
+
#ifdef IBL_SHADOW_TEXTURE
|
|
1144
|
+
#ifdef COLORED_IBL_SHADOWS
|
|
1145
|
+
vec3 iblShadowValue=texture(iblShadowSampler,gl_FragCoord.xy/shadowTextureSize).rgb;
|
|
1146
|
+
#else
|
|
1147
|
+
vec3 iblShadowValue=vec3(texture(iblShadowSampler,gl_FragCoord.xy/shadowTextureSize).r);
|
|
1148
|
+
#endif
|
|
1149
|
+
#endif
|
|
1150
|
+
#if defined(USEIRRADIANCEMAP)
|
|
1151
|
+
#ifdef IRRADIANCE_SCATTER_MASK
|
|
1152
|
+
float bendAmount=subsurface_weight*-min(subsurface_scatter_anisotropy,0.0);bendAmount=mix(bendAmount,-min(transmission_scatter_anisotropy,0.0),transmission_weight);vec3 viewVector=normalize(vEyePosition.xyz-vPositionW.xyz);vec3 bentNormal=mix(normalOutput,viewVector,bendAmount*dot(normalOutput,viewVector));
|
|
1153
|
+
#else
|
|
1154
|
+
vec3 bentNormal=normalOutput;
|
|
1155
|
+
#endif
|
|
1156
|
+
irradiance=sampleIrradiance(
|
|
1157
|
+
bentNormal
|
|
1158
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
1159
|
+
,vEnvironmentIrradiance
|
|
1160
|
+
#endif
|
|
1161
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
1162
|
+
,reflectionMatrix
|
|
1163
|
+
#endif
|
|
1164
|
+
#ifdef USEIRRADIANCEMAP
|
|
1165
|
+
,irradianceSampler
|
|
1166
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
1167
|
+
,vReflectionDominantDirection
|
|
1168
|
+
#endif
|
|
1169
|
+
#endif
|
|
1170
|
+
#ifdef REALTIME_FILTERING
|
|
1171
|
+
,vReflectionFilteringInfo
|
|
1172
|
+
#ifdef IBL_CDF_FILTERING
|
|
1173
|
+
,icdfSampler
|
|
1174
|
+
#endif
|
|
1175
|
+
#endif
|
|
1176
|
+
,vReflectionInfos
|
|
1177
|
+
,vViewPos.xyz
|
|
1178
|
+
,1.0
|
|
1179
|
+
,vec3(1.0)
|
|
1180
|
+
);
|
|
1181
|
+
#elif defined(USESPHERICALFROMREFLECTIONMAP)
|
|
1182
|
+
irradiance=vEnvironmentIrradiance;
|
|
1183
|
+
#endif
|
|
1184
|
+
#ifdef IBL_SHADOW_TEXTURE
|
|
1185
|
+
irradiance*=iblShadowValue;
|
|
1186
|
+
#endif
|
|
1187
|
+
#ifdef IRRADIANCE_SCATTER_MASK
|
|
1188
|
+
irradiance_alpha=min(subsurface_weight+transmission_weight,1.0);
|
|
1189
|
+
#endif
|
|
1190
|
+
#endif
|
|
1191
|
+
gl_FragData[IRRADIANCE_INDEX]=vec4(irradiance,irradiance_alpha);
|
|
1192
|
+
#endif
|
|
1193
|
+
}
|
|
1194
|
+
`;for(let e of(r.ShaderStore.ShadersStore[T]||(r.ShaderStore.ShadersStore[T]=A),[i.clipPlaneFragmentDeclaration,{name:o,shader:a},n.bumpFragmentMainFunctions,t.samplerFragmentDeclaration,c.bumpFragmentFunctions,f.helperFunctions,l.pbrFragmentReflectionDeclaration,s.sceneFragmentDeclaration,d.sceneUboDeclaration,m.pbrBRDFFunctions,v.openpbrDielectricReflectance,u.pbrIBLFunctions,E.reflectionFunction,R.openpbrGeometryInfo,p.openpbrIblFunctions,S.clipPlaneFragment,I.bumpFragment,N.openpbrSubsurfaceLayerData,_.openpbrTransmissionLayerData]))r.ShaderStore.IncludesShadersStore[e.name]||(r.ShaderStore.IncludesShadersStore[e.name]=e.shader);e.s(["geometryPixelShader",0,{name:T,shader:A}],61120)}]);
|