@uptimizr/dashboard 0.1.3 → 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.
Files changed (235) hide show
  1. package/out/404.html +1 -1
  2. package/out/__next.__PAGE__.txt +4 -4
  3. package/out/__next._full.txt +11 -11
  4. package/out/__next._head.txt +4 -4
  5. package/out/__next._index.txt +4 -4
  6. package/out/__next._tree.txt +2 -2
  7. package/out/_next/static/chunks/002cjeoit6-up.js +1 -0
  8. package/out/_next/static/chunks/02n1uiltexy3w.js +1 -0
  9. package/out/_next/static/chunks/03ab2khhe8-x5.js +1 -0
  10. package/out/_next/static/chunks/04_yytpc2paxy.js +1 -0
  11. package/out/_next/static/chunks/06qot1qvlsqaz.js +1 -0
  12. package/out/_next/static/chunks/07eeopuufsqp-.js +1501 -0
  13. package/out/_next/static/chunks/08a5xek662n8n.js +1 -0
  14. package/out/_next/static/chunks/08wuc9--s8zn_.js +1 -0
  15. package/out/_next/static/chunks/09510356f0lad.js +1 -0
  16. package/out/_next/static/chunks/0_eu72k69lxj7.js +1 -0
  17. package/out/_next/static/chunks/0beajlqy8p8b5.js +1 -0
  18. package/out/_next/static/chunks/0c83pe1mpx456.js +1 -0
  19. package/out/_next/static/chunks/0echnagbkyx79.js +1198 -0
  20. package/out/_next/static/chunks/0eh1ml86u8dh7.js +1 -0
  21. package/out/_next/static/chunks/0fh-9h9ylxskr.js +674 -0
  22. package/out/_next/static/chunks/0fzmc1up21g1i.js +1 -0
  23. package/out/_next/static/chunks/0grlb9lo8e502.js +1 -0
  24. package/out/_next/static/chunks/0h22pg-0xrxnm.js +1 -0
  25. package/out/_next/static/chunks/0j6p1pmc14t96.js +1 -0
  26. package/out/_next/static/chunks/0j_6dx-sttgsy.js +1 -0
  27. package/out/_next/static/chunks/0j__xaq_8_di1.js +1 -0
  28. package/out/_next/static/chunks/0kfd-cvj5fvtz.js +1 -0
  29. package/out/_next/static/chunks/0o_mp98xzqfyf.js +1 -0
  30. package/out/_next/static/chunks/0otsec99kdkt7.js +213 -0
  31. package/out/_next/static/chunks/0ql-s-tsmel_u.js +151 -0
  32. package/out/_next/static/chunks/0r47gs_e93cka.js +1 -0
  33. package/out/_next/static/chunks/0sqys6o2pbe1q.js +1328 -0
  34. package/out/_next/static/chunks/0titqrn1qmcsv.js +1 -0
  35. package/out/_next/static/chunks/0tnlbw78tgaxp.js +4 -0
  36. package/out/_next/static/chunks/0tw4dyl-cp-hd.js +1 -0
  37. package/out/_next/static/chunks/0vbce-8omgurc.js +1 -0
  38. package/out/_next/static/chunks/0vfsg5byzep_0.js +1 -0
  39. package/out/_next/static/chunks/{0gv7mblzv3dl3.js → 0w8_1yjvol1f0.js} +20 -20
  40. package/out/_next/static/chunks/0xh144a5fz58h.js +1 -0
  41. package/out/_next/static/chunks/0xjltg_pph0c8.js +1 -0
  42. package/out/_next/static/chunks/0yeqgh0dnas8d.js +1 -0
  43. package/out/_next/static/chunks/101-7e_7up7rk.js +1 -0
  44. package/out/_next/static/chunks/128e51hj_04r0.js +1 -0
  45. package/out/_next/static/chunks/{10fnxpln_5xfd.js → 12kv810lohbsx.js} +2 -2
  46. package/out/_next/static/chunks/137xbvd4nd41j.js +3 -0
  47. package/out/_next/static/chunks/14bws-suyy5zu.js +1 -0
  48. package/out/_next/static/chunks/14ggsmqwej_tt.js +1656 -0
  49. package/out/_next/static/chunks/17genz6pkmty_.js +1 -0
  50. package/out/_next/static/chunks/17xd8hnazzr0g.js +1454 -0
  51. package/out/_next/static/chunks/18dczy9ylt2s_.js +1 -0
  52. package/out/_next/static/chunks/18xs_kvsaolb0.js +1 -0
  53. package/out/_next/static/chunks/19016f8-ry0z6.js +1 -0
  54. package/out/_next/static/chunks/1_6oejyxj39li.js +1 -0
  55. package/out/_next/static/chunks/1_aon8nz9p1fr.js +1 -0
  56. package/out/_next/static/chunks/1_qzlkuxukhpq.js +779 -0
  57. package/out/_next/static/chunks/1akaj5rhgitn3.js +1 -0
  58. package/out/_next/static/chunks/1bvl1ws7b_3gn.js +1 -0
  59. package/out/_next/static/chunks/1cdbk6kxyr1c9.js +1 -0
  60. package/out/_next/static/chunks/1fbjkk55uu4_g.js +1 -0
  61. package/out/_next/static/chunks/1furcfsgrw_3g.js +1 -0
  62. package/out/_next/static/chunks/1g0-f1g3gn_rs.js +1 -0
  63. package/out/_next/static/chunks/1g7emwu85bifo.js +557 -0
  64. package/out/_next/static/chunks/{37vzwr3ciejf1.js → 1gs-5722l4u59.js} +1 -1
  65. package/out/_next/static/chunks/1gt4kh0_xmigy.js +1 -0
  66. package/out/_next/static/chunks/1h8xzuuhhglu9.js +1 -0
  67. package/out/_next/static/chunks/1hatz-jlztrn0.js +1 -0
  68. package/out/_next/static/chunks/1iioifo7i0t0_.js +1 -0
  69. package/out/_next/static/chunks/{0impkpmxx3ttp.js → 1iiz7jqgj20z0.js} +1 -1
  70. package/out/_next/static/chunks/1kujmd5n0j9nk.js +1 -0
  71. package/out/_next/static/chunks/{2kazjq29jeamx.js → 1ltux4lwz7muf.js} +160 -372
  72. package/out/_next/static/chunks/1m_buecgcq67j.js +740 -0
  73. package/out/_next/static/chunks/1n9sy0yt5d2vq.js +1 -0
  74. package/out/_next/static/chunks/1p1gz6dseck--.js +1 -0
  75. package/out/_next/static/chunks/1p1xtsfwvpuqo.js +1 -0
  76. package/out/_next/static/chunks/1p8f6okk2ewbz.js +1 -0
  77. package/out/_next/static/chunks/1qg_etglhvp9h.js +740 -0
  78. package/out/_next/static/chunks/1th_t5ujeqlkf.js +1 -0
  79. package/out/_next/static/chunks/1thr-mdzbu96v.js +1 -0
  80. package/out/_next/static/chunks/1tta1a064979p.js +1 -0
  81. package/out/_next/static/chunks/1u_riwm0nfww7.js +1 -0
  82. package/out/_next/static/chunks/1ua15kzid0_8p.js +2560 -0
  83. package/out/_next/static/chunks/1uu-rt_8p1edp.js +2712 -0
  84. package/out/_next/static/chunks/1uu93wuxigx4k.js +1 -0
  85. package/out/_next/static/chunks/{1flb8adpj6_2o.js → 1xpwp4m1tqugp.js} +1 -1
  86. package/out/_next/static/chunks/1ynju1jqfrcv0.js +1 -0
  87. package/out/_next/static/chunks/1zfojlgb15okk.js +1 -0
  88. package/out/_next/static/chunks/1zj8x5wbgnzz-.js +1 -0
  89. package/out/_next/static/chunks/1zl6t15gh34nn.js +1 -0
  90. package/out/_next/static/chunks/{1thjncpj7u6pq.js → 223vrr_4sfhsj.js} +1 -1
  91. package/out/_next/static/chunks/22cr2b04btguf.js +1 -0
  92. package/out/_next/static/chunks/242xhzxxetctz.js +1 -0
  93. package/out/_next/static/chunks/24essz5mmvx-6.js +1 -0
  94. package/out/_next/static/chunks/256k1jw1m--l7.js +146 -0
  95. package/out/_next/static/chunks/259obyrpxcv6r.js +1 -0
  96. package/out/_next/static/chunks/26v9yqicofqba.js +1 -0
  97. package/out/_next/static/chunks/290d93hmm_e8b.js +1 -0
  98. package/out/_next/static/chunks/2_2fk7iddrs43.js +1 -0
  99. package/out/_next/static/chunks/{00k_j_r7bv_eb.js → 2bjlls8-qe05r.js} +9 -9
  100. package/out/_next/static/chunks/2ckd7f1wbfod-.js +1 -0
  101. package/out/_next/static/chunks/{163fa70v4mgxj.js → 2d6hru4qo23tt.js} +1 -1
  102. package/out/_next/static/chunks/2ejvntxtvf5o9.js +1 -0
  103. package/out/_next/static/chunks/2f7_3tzf7xhps.js +1 -0
  104. package/out/_next/static/chunks/2gxd_o1g89_bv.js +1 -0
  105. package/out/_next/static/chunks/2hd2txb4-m9k1.js +1 -0
  106. package/out/_next/static/chunks/2hpxou_cnp4f_.js +1 -0
  107. package/out/_next/static/chunks/2izioctrfc0s5.js +1 -0
  108. package/out/_next/static/chunks/2jhnk4h4n0udv.js +1 -0
  109. package/out/_next/static/chunks/2jpkhkk9zi8-f.js +1 -0
  110. package/out/_next/static/chunks/2kpet_l1kq2sx.js +1 -0
  111. package/out/_next/static/chunks/2mdbvf1b5h00_.css +3 -0
  112. package/out/_next/static/chunks/2nck5w4c7leb7.js +1 -0
  113. package/out/_next/static/chunks/2our10fwtj87e.js +1 -0
  114. package/out/_next/static/chunks/2qq3uzsbiicw3.js +1194 -0
  115. package/out/_next/static/chunks/2qqqpu0ahfdda.js +1 -0
  116. package/out/_next/static/chunks/2u-f7mmxvk8wj.js +1 -0
  117. package/out/_next/static/chunks/2ue1wo4ryk87z.js +1 -0
  118. package/out/_next/static/chunks/2uk-vwlxe9-xr.js +1 -0
  119. package/out/_next/static/chunks/2ur5-lxdvv1jm.js +1 -0
  120. package/out/_next/static/chunks/2veqsohwfhfqc.js +1 -0
  121. package/out/_next/static/chunks/2vqlv9wnewhu9.js +1 -0
  122. package/out/_next/static/chunks/{1zvc1tv--w8nn.js → 2wzshintp5lf8.js} +1 -1
  123. package/out/_next/static/chunks/2x-00glogc485.js +1 -0
  124. package/out/_next/static/chunks/2yfxy0f5fqs4o.js +1 -0
  125. package/out/_next/static/chunks/2z88mt3ixktu3.js +1 -0
  126. package/out/_next/static/chunks/2z_jn9ud28fk7.js +1 -0
  127. package/out/_next/static/chunks/3-eswqjobiqk1.js +1 -0
  128. package/out/_next/static/chunks/30-tbi7pys6fp.js +4 -0
  129. package/out/_next/static/chunks/30c-nsedy_ce0.js +1 -0
  130. package/out/_next/static/chunks/31u5lbu1vxznh.js +1 -0
  131. package/out/_next/static/chunks/{2feca0xcipcyt.js → 32ahba5ezp467.js} +156 -156
  132. package/out/_next/static/chunks/337hn35kts7ud.js +1 -0
  133. package/out/_next/static/chunks/33dgpebv-tf73.js +1 -0
  134. package/out/_next/static/chunks/36jkdhq6kb-cf.js +1 -0
  135. package/out/_next/static/chunks/37epa8fz59vba.js +1166 -0
  136. package/out/_next/static/chunks/3833xfnz0a-ub.js +1 -0
  137. package/out/_next/static/chunks/38awrh_qxn22k.js +1 -0
  138. package/out/_next/static/chunks/{0wrm9jr-9bw0e.js → 38x3c1ra5slhe.js} +383 -913
  139. package/out/_next/static/chunks/39idqlqlcp5b9.js +1 -0
  140. package/out/_next/static/chunks/{2a3spdq-m8drh.js → 3_gku1pwluoo0.js} +1 -1
  141. package/out/_next/static/chunks/3_mu-4rdjajna.js +1450 -0
  142. package/out/_next/static/chunks/3coacc4-g-g5c.js +1 -0
  143. package/out/_next/static/chunks/3e00fzdfkclzq.js +1 -0
  144. package/out/_next/static/chunks/3e8fmlq0k5wkg.js +1 -0
  145. package/out/_next/static/chunks/3e9tzyrt4_98z.js +1 -0
  146. package/out/_next/static/chunks/3edelqkq92pil.js +1 -0
  147. package/out/_next/static/chunks/3figbil1t4ssj.js +593 -0
  148. package/out/_next/static/chunks/3gimb3z_mteou.js +1 -0
  149. package/out/_next/static/chunks/{2p2vv6cc9i-3q.js → 3idaz_s77e-j_.js} +9 -9
  150. package/out/_next/static/chunks/3j-4wuhs5weba.js +1 -0
  151. package/out/_next/static/chunks/3jjfnwvybayy7.js +1 -0
  152. package/out/_next/static/chunks/3jwm5dfk_78gc.js +1 -0
  153. package/out/_next/static/chunks/3k9d4ylc3li2t.js +1352 -0
  154. package/out/_next/static/chunks/3l3_0ack3gy4k.js +1 -0
  155. package/out/_next/static/chunks/3lwhs5ja7tun3.js +1 -0
  156. package/out/_next/static/chunks/3m6nmp2dca6un.js +1342 -0
  157. package/out/_next/static/chunks/3mbnfpufs2-7e.js +7 -0
  158. package/out/_next/static/chunks/3mcd08gmt038z.js +1 -0
  159. package/out/_next/static/chunks/3mt5th7b1i_u9.js +1 -0
  160. package/out/_next/static/chunks/3ne77mjdz2y7o.js +1 -0
  161. package/out/_next/static/chunks/3puhrqtujktyv.js +1 -0
  162. package/out/_next/static/chunks/3rdifucupcgkg.js +1 -0
  163. package/out/_next/static/chunks/3riekaxl3uxfb.js +1195 -0
  164. package/out/_next/static/chunks/3sdoskq_buttj.js +1 -0
  165. package/out/_next/static/chunks/3tg-ma9tv9xu4.js +1 -0
  166. package/out/_next/static/chunks/3tm-pqpmq_ppw.js +1 -0
  167. package/out/_next/static/chunks/3w9go565cjhq3.js +1636 -0
  168. package/out/_next/static/chunks/3wi9gzq2mtr_q.js +8 -0
  169. package/out/_next/static/chunks/3xagd_2_9zft2.js +1 -0
  170. package/out/_next/static/chunks/3xsq_anpad-fb.js +1 -0
  171. package/out/_next/static/chunks/3ycv2qq7vpbua.js +1 -0
  172. package/out/_next/static/chunks/3z84au-mitjjw.js +1 -0
  173. package/out/_next/static/chunks/4030dhur2h70-.js +1 -0
  174. package/out/_next/static/chunks/40ffffml4h_3r.js +4 -0
  175. package/out/_next/static/chunks/{3-shckrcpvbxu.js → 41wt50z9tx9cx.js} +108 -711
  176. package/out/_next/static/chunks/431slrqh0wa0g.js +1 -0
  177. package/out/_next/static/chunks/43s_lbd1i2krj.js +1 -0
  178. package/out/_next/static/chunks/{0-2y-_oomza2l.js → 44nxswtahaq4w.js} +18 -18
  179. package/out/_next/static/chunks/45bwefvdpztfs.js +1 -0
  180. package/out/_next/static/chunks/{turbopack-0sgd6pfbe1fy6.js → turbopack-19105pdhzxp1x.js} +1 -1
  181. package/out/_not-found/__next._full.txt +9 -9
  182. package/out/_not-found/__next._head.txt +4 -4
  183. package/out/_not-found/__next._index.txt +4 -4
  184. package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
  185. package/out/_not-found/__next._not-found.txt +3 -3
  186. package/out/_not-found/__next._tree.txt +2 -2
  187. package/out/_not-found.html +1 -1
  188. package/out/_not-found.txt +9 -9
  189. package/out/index.html +1 -1
  190. package/out/index.txt +11 -11
  191. package/package.json +5 -4
  192. package/out/_next/static/chunks/068j6934u8j16.js +0 -1
  193. package/out/_next/static/chunks/09e4adtr6w0xe.js +0 -1
  194. package/out/_next/static/chunks/0_rf76jneiwal.js +0 -176
  195. package/out/_next/static/chunks/0aznt7717miff.js +0 -1
  196. package/out/_next/static/chunks/0cu-q5q3a7uf3.js +0 -1
  197. package/out/_next/static/chunks/0fskcfh9vbhtv.js +0 -1
  198. package/out/_next/static/chunks/0o_tpe5tlugtr.js +0 -3
  199. package/out/_next/static/chunks/0pj9pajm2xz97.css +0 -3
  200. package/out/_next/static/chunks/0ufbyo1x3qkmo.js +0 -1
  201. package/out/_next/static/chunks/0wwcfw8i3j_zx.js +0 -1
  202. package/out/_next/static/chunks/0ys9-ozuluawt.js +0 -1
  203. package/out/_next/static/chunks/1-61zh4waha61.js +0 -1
  204. package/out/_next/static/chunks/10r_824wzt8hj.js +0 -1
  205. package/out/_next/static/chunks/11v6j6q59u-f_.js +0 -1
  206. package/out/_next/static/chunks/123xxske5c9na.js +0 -1
  207. package/out/_next/static/chunks/13isnf0--pmx1.js +0 -1
  208. package/out/_next/static/chunks/157d9euci08yu.js +0 -1
  209. package/out/_next/static/chunks/18u58lorfahxi.js +0 -4
  210. package/out/_next/static/chunks/1_aahautsz2v_.js +0 -1
  211. package/out/_next/static/chunks/1o1d0p-v1z8ty.js +0 -1
  212. package/out/_next/static/chunks/1vdjn0pkoyypn.js +0 -1
  213. package/out/_next/static/chunks/1yehxf-fmeicg.js +0 -1
  214. package/out/_next/static/chunks/1zx2q-r32thv1.js +0 -4
  215. package/out/_next/static/chunks/2-sjjedfr0kfq.js +0 -1
  216. package/out/_next/static/chunks/25b9x-li-tvk2.js +0 -1
  217. package/out/_next/static/chunks/2aelw3far6rii.js +0 -1
  218. package/out/_next/static/chunks/2aor7m-wbis85.js +0 -1
  219. package/out/_next/static/chunks/2fh-_9b6tqhvb.js +0 -1
  220. package/out/_next/static/chunks/2g5gecypj0rqe.js +0 -1
  221. package/out/_next/static/chunks/2szdcpl41-kzv.js +0 -1
  222. package/out/_next/static/chunks/2u6shh3oeycm-.js +0 -1
  223. package/out/_next/static/chunks/2unhhuv0arlcv.js +0 -1
  224. package/out/_next/static/chunks/310uz81hnnzsu.js +0 -1
  225. package/out/_next/static/chunks/3i3gbhccmhu7j.js +0 -210
  226. package/out/_next/static/chunks/3mqy-84_ul3t2.js +0 -1
  227. package/out/_next/static/chunks/3nz-dh9d7cehk.js +0 -1
  228. package/out/_next/static/chunks/3pufs8g4ui943.js +0 -1
  229. package/out/_next/static/chunks/3t06schbtqonl.js +0 -1
  230. package/out/_next/static/chunks/3v3-7fio3nw_t.js +0 -1
  231. package/out/_next/static/chunks/3v5ha25nxo43j.js +0 -1
  232. package/out/_next/static/chunks/3zskk1hxu3-_o.js +0 -1
  233. /package/out/_next/static/{yttuijl-0Cn9k8uTCfhIM → M9ZSIaKJeBgkjz1qktYio}/_buildManifest.js +0 -0
  234. /package/out/_next/static/{yttuijl-0Cn9k8uTCfhIM → M9ZSIaKJeBgkjz1qktYio}/_clientMiddlewareManifest.js +0 -0
  235. /package/out/_next/static/{yttuijl-0Cn9k8uTCfhIM → M9ZSIaKJeBgkjz1qktYio}/_ssgManifest.js +0 -0
@@ -0,0 +1,2712 @@
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,21506,e=>{"use strict";var i=e.i(12423),n=e.i(55587),a=e.i(52195),r=e.i(1935);let f="pbrFragmentDeclaration",o=`uniform vec4 vEyePosition;uniform vec3 vReflectionColor;uniform vec4 vAlbedoColor;uniform float baseWeight;uniform float baseDiffuseRoughness;uniform vec4 vLightingIntensity;uniform vec4 vReflectivityColor;uniform vec4 vMetallicReflectanceFactors;uniform vec3 vEmissiveColor;uniform float visibility;uniform vec3 vAmbientColor;
2
+ #ifdef ALBEDO
3
+ uniform vec2 vAlbedoInfos;
4
+ #endif
5
+ #ifdef BASE_WEIGHT
6
+ uniform vec2 vBaseWeightInfos;
7
+ #endif
8
+ #ifdef BASE_DIFFUSE_ROUGHNESS
9
+ uniform vec2 vBaseDiffuseRoughnessInfos;
10
+ #endif
11
+ #ifdef AMBIENT
12
+ uniform vec4 vAmbientInfos;
13
+ #endif
14
+ #ifdef BUMP
15
+ uniform vec3 vBumpInfos;uniform vec2 vTangentSpaceParams;
16
+ #endif
17
+ #ifdef OPACITY
18
+ uniform vec2 vOpacityInfos;
19
+ #endif
20
+ #ifdef EMISSIVE
21
+ uniform vec2 vEmissiveInfos;
22
+ #endif
23
+ #ifdef LIGHTMAP
24
+ uniform vec2 vLightmapInfos;
25
+ #endif
26
+ #ifdef REFLECTIVITY
27
+ uniform vec3 vReflectivityInfos;
28
+ #endif
29
+ #ifdef MICROSURFACEMAP
30
+ uniform vec2 vMicroSurfaceSamplerInfos;
31
+ #endif
32
+ #if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(SS_REFRACTION) || defined(PREPASS)
33
+ uniform mat4 view;
34
+ #endif
35
+ #ifdef REFLECTION
36
+ uniform vec2 vReflectionInfos;
37
+ #ifdef REALTIME_FILTERING
38
+ uniform vec2 vReflectionFilteringInfo;
39
+ #endif
40
+ uniform mat4 reflectionMatrix;uniform vec3 vReflectionMicrosurfaceInfos;
41
+ #if defined(USEIRRADIANCEMAP) && defined(USE_IRRADIANCE_DOMINANT_DIRECTION)
42
+ uniform vec3 vReflectionDominantDirection;
43
+ #endif
44
+ #if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)
45
+ uniform vec3 vReflectionPosition;uniform vec3 vReflectionSize;
46
+ #endif
47
+ #endif
48
+ #if defined(SS_REFRACTION) && defined(SS_USE_LOCAL_REFRACTIONMAP_CUBIC)
49
+ uniform vec3 vRefractionPosition;uniform vec3 vRefractionSize;
50
+ #endif
51
+ #ifdef CLEARCOAT
52
+ uniform vec2 vClearCoatParams;uniform vec4 vClearCoatRefractionParams;
53
+ #if defined(CLEARCOAT_TEXTURE) || defined(CLEARCOAT_TEXTURE_ROUGHNESS)
54
+ uniform vec4 vClearCoatInfos;
55
+ #endif
56
+ #ifdef CLEARCOAT_TEXTURE
57
+ uniform mat4 clearCoatMatrix;
58
+ #endif
59
+ #ifdef CLEARCOAT_TEXTURE_ROUGHNESS
60
+ uniform mat4 clearCoatRoughnessMatrix;
61
+ #endif
62
+ #ifdef CLEARCOAT_BUMP
63
+ uniform vec2 vClearCoatBumpInfos;uniform vec2 vClearCoatTangentSpaceParams;uniform mat4 clearCoatBumpMatrix;
64
+ #endif
65
+ #ifdef CLEARCOAT_TINT
66
+ uniform vec4 vClearCoatTintParams;uniform float clearCoatColorAtDistance;
67
+ #ifdef CLEARCOAT_TINT_TEXTURE
68
+ uniform vec2 vClearCoatTintInfos;uniform mat4 clearCoatTintMatrix;
69
+ #endif
70
+ #endif
71
+ #endif
72
+ #ifdef IRIDESCENCE
73
+ uniform vec4 vIridescenceParams;
74
+ #if defined(IRIDESCENCE_TEXTURE) || defined(IRIDESCENCE_THICKNESS_TEXTURE)
75
+ uniform vec4 vIridescenceInfos;
76
+ #endif
77
+ #ifdef IRIDESCENCE_TEXTURE
78
+ uniform mat4 iridescenceMatrix;
79
+ #endif
80
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
81
+ uniform mat4 iridescenceThicknessMatrix;
82
+ #endif
83
+ #endif
84
+ #ifdef ANISOTROPIC
85
+ uniform vec3 vAnisotropy;
86
+ #ifdef ANISOTROPIC_TEXTURE
87
+ uniform vec2 vAnisotropyInfos;uniform mat4 anisotropyMatrix;
88
+ #endif
89
+ #endif
90
+ #ifdef SHEEN
91
+ uniform vec4 vSheenColor;
92
+ #ifdef SHEEN_ROUGHNESS
93
+ uniform float vSheenRoughness;
94
+ #endif
95
+ #if defined(SHEEN_TEXTURE) || defined(SHEEN_TEXTURE_ROUGHNESS)
96
+ uniform vec4 vSheenInfos;
97
+ #endif
98
+ #ifdef SHEEN_TEXTURE
99
+ uniform mat4 sheenMatrix;
100
+ #endif
101
+ #ifdef SHEEN_TEXTURE_ROUGHNESS
102
+ uniform mat4 sheenRoughnessMatrix;
103
+ #endif
104
+ #endif
105
+ #ifdef SUBSURFACE
106
+ #ifdef SS_REFRACTION
107
+ uniform vec4 vRefractionMicrosurfaceInfos;uniform vec4 vRefractionInfos;uniform mat4 refractionMatrix;
108
+ #ifdef REALTIME_FILTERING
109
+ uniform vec2 vRefractionFilteringInfo;
110
+ #endif
111
+ #ifdef SS_DISPERSION
112
+ uniform float dispersion;
113
+ #endif
114
+ #endif
115
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
116
+ uniform vec2 vThicknessInfos;uniform mat4 thicknessMatrix;
117
+ #endif
118
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
119
+ uniform vec2 vRefractionIntensityInfos;uniform mat4 refractionIntensityMatrix;
120
+ #endif
121
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
122
+ uniform vec2 vTranslucencyIntensityInfos;uniform mat4 translucencyIntensityMatrix;
123
+ #endif
124
+ uniform vec2 vThicknessParam;uniform vec3 vDiffusionDistance;uniform vec4 vTintColor;uniform vec3 vSubSurfaceIntensity;uniform vec4 vTranslucencyColor;
125
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
126
+ uniform vec2 vTranslucencyColorInfos;uniform mat4 translucencyColorMatrix;
127
+ #endif
128
+ #endif
129
+ #ifdef PREPASS
130
+ #ifdef SS_SCATTERING
131
+ uniform float scatteringDiffusionProfile;
132
+ #endif
133
+ #endif
134
+ #if DEBUGMODE>0
135
+ uniform vec2 vDebugMode;
136
+ #endif
137
+ #ifdef DETAIL
138
+ uniform vec4 vDetailInfos;
139
+ #endif
140
+ #include<decalFragmentDeclaration>
141
+ #ifdef USESPHERICALFROMREFLECTIONMAP
142
+ #ifdef SPHERICAL_HARMONICS
143
+ uniform vec3 vSphericalL00;uniform vec3 vSphericalL1_1;uniform vec3 vSphericalL10;uniform vec3 vSphericalL11;uniform vec3 vSphericalL2_2;uniform vec3 vSphericalL2_1;uniform vec3 vSphericalL20;uniform vec3 vSphericalL21;uniform vec3 vSphericalL22;
144
+ #else
145
+ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;uniform vec3 vSphericalXX_ZZ;uniform vec3 vSphericalYY_ZZ;uniform vec3 vSphericalZZ;uniform vec3 vSphericalXY;uniform vec3 vSphericalYZ;uniform vec3 vSphericalZX;
146
+ #endif
147
+ #endif
148
+ #if TEXTURE_REPETITION_MODE>0
149
+ uniform vec4 vTextureRepetitionHexTilingParams;
150
+ #endif
151
+ #define ADDITIONAL_FRAGMENT_DECLARATION
152
+ `;i.ShaderStore.IncludesShadersStore[f]||(i.ShaderStore.IncludesShadersStore[f]=o);var t=e.i(85668),c=e.i(6232),l=e.i(87326),d=e.i(92692),s=e.i(84449),E=e.i(2097),R=e.i(98351),S=e.i(80825);let C="samplerFragmentAlternateDeclaration",u=`#ifdef _DEFINENAME_
153
+ #if _DEFINENAME_DIRECTUV==1
154
+ #define v_VARYINGNAME_UV vMainUV1
155
+ #elif _DEFINENAME_DIRECTUV==2
156
+ #define v_VARYINGNAME_UV vMainUV2
157
+ #elif _DEFINENAME_DIRECTUV==3
158
+ #define v_VARYINGNAME_UV vMainUV3
159
+ #elif _DEFINENAME_DIRECTUV==4
160
+ #define v_VARYINGNAME_UV vMainUV4
161
+ #elif _DEFINENAME_DIRECTUV==5
162
+ #define v_VARYINGNAME_UV vMainUV5
163
+ #elif _DEFINENAME_DIRECTUV==6
164
+ #define v_VARYINGNAME_UV vMainUV6
165
+ #else
166
+ varying vec2 v_VARYINGNAME_UV;
167
+ #endif
168
+ #endif
169
+ `;i.ShaderStore.IncludesShadersStore[C]||(i.ShaderStore.IncludesShadersStore[C]=u);var A=e.i(66437);let I="pbrFragmentSamplersDeclaration",m=`#include<samplerFragmentDeclaration>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo)
170
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight)
171
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness)
172
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient)
173
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_SAMPLERNAME_,opacity)
174
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_SAMPLERNAME_,emissive)
175
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)
176
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity,_SAMPLERNAME_,reflectivity)
177
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler,_SAMPLERNAME_,microSurface)
178
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance,_SAMPLERNAME_,metallicReflectance)
179
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance,_SAMPLERNAME_,reflectance)
180
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_SAMPLERNAME_,decal)
181
+ #ifdef CLEARCOAT
182
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat,_SAMPLERNAME_,clearCoat)
183
+ #include<samplerFragmentAlternateDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness)
184
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS)
185
+ uniform sampler2D clearCoatRoughnessSampler;
186
+ #endif
187
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump,_SAMPLERNAME_,clearCoatBump)
188
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint,_SAMPLERNAME_,clearCoatTint)
189
+ #endif
190
+ #ifdef IRIDESCENCE
191
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence,_SAMPLERNAME_,iridescence)
192
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness,_SAMPLERNAME_,iridescenceThickness)
193
+ #endif
194
+ #ifdef SHEEN
195
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen,_SAMPLERNAME_,sheen)
196
+ #include<samplerFragmentAlternateDeclaration>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness)
197
+ #if defined(SHEEN_ROUGHNESS) && defined(SHEEN_TEXTURE_ROUGHNESS)
198
+ uniform sampler2D sheenRoughnessSampler;
199
+ #endif
200
+ #endif
201
+ #ifdef ANISOTROPIC
202
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy,_SAMPLERNAME_,anisotropy)
203
+ #endif
204
+ #include<pbrFragmentReflectionDeclaration>
205
+ #ifdef ENVIRONMENTBRDF
206
+ uniform sampler2D environmentBrdfSampler;
207
+ #endif
208
+ #ifdef SUBSURFACE
209
+ #ifdef SS_REFRACTION
210
+ #ifdef SS_REFRACTIONMAP_3D
211
+ #define sampleRefraction(s,c) textureCube(s,c)
212
+ uniform samplerCube refractionSampler;
213
+ #ifdef LODBASEDMICROSFURACE
214
+ #define sampleRefractionLod(s,c,l) textureCubeLodEXT(s,c,l)
215
+ #else
216
+ uniform samplerCube refractionSamplerLow;uniform samplerCube refractionSamplerHigh;
217
+ #endif
218
+ #else
219
+ #define sampleRefraction(s,c) texture2D(s,c)
220
+ uniform sampler2D refractionSampler;
221
+ #ifdef LODBASEDMICROSFURACE
222
+ #define sampleRefractionLod(s,c,l) texture2DLodEXT(s,c,l)
223
+ #else
224
+ uniform sampler2D refractionSamplerLow;uniform sampler2D refractionSamplerHigh;
225
+ #endif
226
+ #endif
227
+ #endif
228
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness,_SAMPLERNAME_,thickness)
229
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity,_SAMPLERNAME_,refractionIntensity)
230
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity,_SAMPLERNAME_,translucencyIntensity)
231
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor,_SAMPLERNAME_,translucencyColor)
232
+ #endif
233
+ #ifdef IBL_CDF_FILTERING
234
+ uniform sampler2D icdfSampler;
235
+ #endif
236
+ `;i.ShaderStore.IncludesShadersStore[I]||(i.ShaderStore.IncludesShadersStore[I]=m);var v=e.i(53843),T=e.i(29981),N=e.i(97226),O=e.i(56770),p=e.i(71209),L=e.i(65296),_=e.i(60070),D=e.i(43249),M=e.i(69100),h=e.i(54994),F=e.i(40234),g=e.i(50438),P=e.i(41932),U=e.i(98333),b=e.i(74239),y=e.i(60990),B=e.i(3921),G=e.i(56072),V=e.i(93263),H=e.i(63539),x=e.i(80713),X=e.i(9275),W=e.i(6967);let Y="pbrBlockAlbedoOpacity",k=`struct albedoOpacityOutParams
237
+ {vec3 surfaceAlbedo;float alpha;};
238
+ #define pbr_inline
239
+ albedoOpacityOutParams albedoOpacityBlock(
240
+ in vec4 vAlbedoColor
241
+ #ifdef ALBEDO
242
+ ,in vec4 albedoTexture
243
+ ,in vec2 albedoInfos
244
+ #endif
245
+ ,in float baseWeight
246
+ #ifdef BASE_WEIGHT
247
+ ,in vec4 baseWeightTexture
248
+ ,in vec2 vBaseWeightInfos
249
+ #endif
250
+ #ifdef OPACITY
251
+ ,in vec4 opacityMap
252
+ ,in vec2 vOpacityInfos
253
+ #endif
254
+ #ifdef DETAIL
255
+ ,in vec4 detailColor
256
+ ,in vec4 vDetailInfos
257
+ #endif
258
+ #ifdef DECAL
259
+ ,in vec4 decalColor
260
+ ,in vec4 vDecalInfos
261
+ #endif
262
+ )
263
+ {albedoOpacityOutParams outParams;vec3 surfaceAlbedo=vAlbedoColor.rgb;float alpha=vAlbedoColor.a;
264
+ #ifdef ALBEDO
265
+ #if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)
266
+ alpha*=albedoTexture.a;
267
+ #endif
268
+ #ifdef GAMMAALBEDO
269
+ surfaceAlbedo*=toLinearSpace(albedoTexture.rgb);
270
+ #else
271
+ surfaceAlbedo*=albedoTexture.rgb;
272
+ #endif
273
+ surfaceAlbedo*=albedoInfos.y;
274
+ #endif
275
+ #ifndef DECAL_AFTER_DETAIL
276
+ #include<decalFragment>
277
+ #endif
278
+ #if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
279
+ surfaceAlbedo*=vColor.rgb;
280
+ #endif
281
+ #ifdef DETAIL
282
+ float detailAlbedo=2.0*mix(0.5,detailColor.r,vDetailInfos.y);surfaceAlbedo.rgb=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo;
283
+ #endif
284
+ #ifdef DECAL_AFTER_DETAIL
285
+ #include<decalFragment>
286
+ #endif
287
+ #define CUSTOM_FRAGMENT_UPDATE_ALBEDO
288
+ surfaceAlbedo*=baseWeight;
289
+ #ifdef BASE_WEIGHT
290
+ surfaceAlbedo*=baseWeightTexture.r;
291
+ #endif
292
+ #ifdef OPACITY
293
+ #ifdef OPACITYRGB
294
+ alpha=getLuminance(opacityMap.rgb);
295
+ #else
296
+ alpha*=opacityMap.a;
297
+ #endif
298
+ alpha*=vOpacityInfos.y;
299
+ #endif
300
+ #if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)
301
+ alpha*=vColor.a;
302
+ #endif
303
+ #if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)
304
+ #ifdef ALPHATEST
305
+ #if DEBUGMODE != 88
306
+ if (alpha<ALPHATESTVALUE)
307
+ discard;
308
+ #endif
309
+ #ifndef ALPHABLEND
310
+ alpha=1.0;
311
+ #endif
312
+ #endif
313
+ #endif
314
+ outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;}
315
+ `;i.ShaderStore.IncludesShadersStore[Y]||(i.ShaderStore.IncludesShadersStore[Y]=k);let w="pbrBlockReflectivity",K=`struct reflectivityOutParams
316
+ {float microSurface;float roughness;float diffuseRoughness;float reflectanceF0;vec3 reflectanceF90;vec3 colorReflectanceF0;vec3 colorReflectanceF90;
317
+ #ifdef METALLICWORKFLOW
318
+ vec3 surfaceAlbedo;float metallic;float specularWeight;vec3 dielectricColorF0;
319
+ #endif
320
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
321
+ vec3 ambientOcclusionColor;
322
+ #endif
323
+ #if DEBUGMODE>0
324
+ #ifdef METALLICWORKFLOW
325
+ #ifdef REFLECTIVITY
326
+ vec4 surfaceMetallicColorMap;
327
+ #endif
328
+ vec3 metallicF0;
329
+ #else
330
+ #ifdef REFLECTIVITY
331
+ vec4 surfaceReflectivityColorMap;
332
+ #endif
333
+ #endif
334
+ #endif
335
+ };
336
+ #define pbr_inline
337
+ reflectivityOutParams reflectivityBlock(
338
+ in vec4 reflectivityColor
339
+ #ifdef METALLICWORKFLOW
340
+ ,in vec3 surfaceAlbedo
341
+ ,in vec4 metallicReflectanceFactors
342
+ #endif
343
+ ,in float baseDiffuseRoughness
344
+ #ifdef BASE_DIFFUSE_ROUGHNESS
345
+ ,in float baseDiffuseRoughnessTexture
346
+ ,in vec2 baseDiffuseRoughnessInfos
347
+ #endif
348
+ #ifdef REFLECTIVITY
349
+ ,in vec3 reflectivityInfos
350
+ ,in vec4 surfaceMetallicOrReflectivityColorMap
351
+ #endif
352
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
353
+ ,in vec3 ambientOcclusionColorIn
354
+ #endif
355
+ #ifdef MICROSURFACEMAP
356
+ ,in vec4 microSurfaceTexel
357
+ #endif
358
+ #ifdef DETAIL
359
+ ,in vec4 detailColor
360
+ ,in vec4 vDetailInfos
361
+ #endif
362
+ )
363
+ {reflectivityOutParams outParams;float microSurface=reflectivityColor.a;vec3 surfaceReflectivityColor=reflectivityColor.rgb;
364
+ #ifdef METALLICWORKFLOW
365
+ vec2 metallicRoughness=surfaceReflectivityColor.rg;float ior=surfaceReflectivityColor.b;
366
+ #ifdef REFLECTIVITY
367
+ #if DEBUGMODE>0
368
+ outParams.surfaceMetallicColorMap=surfaceMetallicOrReflectivityColorMap;
369
+ #endif
370
+ #ifdef AOSTOREINMETALMAPRED
371
+ vec3 aoStoreInMetalMap=vec3(surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r);outParams.ambientOcclusionColor=mix(ambientOcclusionColorIn,aoStoreInMetalMap,reflectivityInfos.z);
372
+ #endif
373
+ #ifdef METALLNESSSTOREINMETALMAPBLUE
374
+ metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.b;
375
+ #else
376
+ metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.r;
377
+ #endif
378
+ #ifdef ROUGHNESSSTOREINMETALMAPALPHA
379
+ metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.a;
380
+ #else
381
+ #ifdef ROUGHNESSSTOREINMETALMAPGREEN
382
+ metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.g;
383
+ #endif
384
+ #endif
385
+ #endif
386
+ #ifdef DETAIL
387
+ float detailRoughness=mix(0.5,detailColor.b,vDetailInfos.w);float loLerp=mix(0.,metallicRoughness.g,detailRoughness*2.);float hiLerp=mix(metallicRoughness.g,1.,(detailRoughness-0.5)*2.);metallicRoughness.g=mix(loLerp,hiLerp,step(detailRoughness,0.5));
388
+ #endif
389
+ #ifdef MICROSURFACEMAP
390
+ metallicRoughness.g*=microSurfaceTexel.r;
391
+ #endif
392
+ #define CUSTOM_FRAGMENT_UPDATE_METALLICROUGHNESS
393
+ microSurface=1.0-metallicRoughness.g;vec3 baseColor=surfaceAlbedo;outParams.metallic=metallicRoughness.r;outParams.specularWeight=metallicReflectanceFactors.a;float dielectricF0=reflectivityColor.a*outParams.specularWeight;surfaceReflectivityColor=metallicReflectanceFactors.rgb;
394
+ #if DEBUGMODE>0
395
+ outParams.metallicF0=vec3(dielectricF0)*surfaceReflectivityColor;
396
+ #endif
397
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
398
+ outParams.surfaceAlbedo=baseColor.rgb*(vec3(1.0)-vec3(dielectricF0)*surfaceReflectivityColor)*(1.0-outParams.metallic);
399
+ #else
400
+ outParams.surfaceAlbedo=baseColor.rgb;
401
+ #endif
402
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
403
+ {vec3 reflectivityColor=mix(dielectricF0*surfaceReflectivityColor,baseColor.rgb,outParams.metallic);outParams.reflectanceF0=max(reflectivityColor.r,max(reflectivityColor.g,reflectivityColor.b));}
404
+ #else
405
+ #if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
406
+ float maxF0=max(surfaceReflectivityColor.r,max(surfaceReflectivityColor.g,surfaceReflectivityColor.b));outParams.reflectanceF0=mix(dielectricF0*maxF0,1.0,outParams.metallic);
407
+ #else
408
+ outParams.reflectanceF0=mix(dielectricF0,1.0,outParams.metallic);
409
+ #endif
410
+ #endif
411
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
412
+ outParams.reflectanceF90=vec3(outParams.specularWeight);float f90Scale=1.0;
413
+ #else
414
+ float f90Scale=clamp(2.0*(ior-1.0),0.0,1.0);outParams.reflectanceF90=vec3(mix(outParams.specularWeight*f90Scale,1.0,outParams.metallic));
415
+ #endif
416
+ outParams.dielectricColorF0=vec3(dielectricF0*surfaceReflectivityColor);vec3 metallicColorF0=baseColor.rgb;outParams.colorReflectanceF0=mix(outParams.dielectricColorF0,metallicColorF0,outParams.metallic);
417
+ #if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
418
+ vec3 dielectricColorF90=surfaceReflectivityColor*vec3(outParams.specularWeight)*vec3(f90Scale);
419
+ #else
420
+ vec3 dielectricColorF90=vec3(outParams.specularWeight*f90Scale);
421
+ #endif
422
+ #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
423
+ vec3 conductorColorF90=surfaceReflectivityColor;
424
+ #else
425
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
426
+ vec3 conductorColorF90=outParams.reflectanceF90;
427
+ #else
428
+ vec3 conductorColorF90=vec3(1.0);
429
+ #endif
430
+ #endif
431
+ outParams.colorReflectanceF90=mix(dielectricColorF90,conductorColorF90,outParams.metallic);
432
+ #else
433
+ #ifdef REFLECTIVITY
434
+ surfaceReflectivityColor*=surfaceMetallicOrReflectivityColorMap.rgb;
435
+ #if DEBUGMODE>0
436
+ outParams.surfaceReflectivityColorMap=surfaceMetallicOrReflectivityColorMap;
437
+ #endif
438
+ #ifdef MICROSURFACEFROMREFLECTIVITYMAP
439
+ microSurface*=surfaceMetallicOrReflectivityColorMap.a;microSurface*=reflectivityInfos.z;
440
+ #else
441
+ #ifdef MICROSURFACEAUTOMATIC
442
+ microSurface*=computeDefaultMicroSurface(microSurface,surfaceReflectivityColor);
443
+ #endif
444
+ #ifdef MICROSURFACEMAP
445
+ microSurface*=microSurfaceTexel.r;
446
+ #endif
447
+ #define CUSTOM_FRAGMENT_UPDATE_MICROSURFACE
448
+ #endif
449
+ #endif
450
+ outParams.colorReflectanceF0=surfaceReflectivityColor;outParams.reflectanceF0=max(surfaceReflectivityColor.r,max(surfaceReflectivityColor.g,surfaceReflectivityColor.b));outParams.reflectanceF90=vec3(1.0);
451
+ #if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
452
+ outParams.colorReflectanceF90=surfaceReflectivityColor;
453
+ #else
454
+ outParams.colorReflectanceF90=vec3(1.0);
455
+ #endif
456
+ #endif
457
+ microSurface=saturate(microSurface);float roughness=1.-microSurface;float diffuseRoughness=baseDiffuseRoughness;
458
+ #ifdef BASE_DIFFUSE_ROUGHNESS
459
+ diffuseRoughness*=baseDiffuseRoughnessTexture*baseDiffuseRoughnessInfos.y;
460
+ #endif
461
+ outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.diffuseRoughness=diffuseRoughness;return outParams;}
462
+ `;i.ShaderStore.IncludesShadersStore[w]||(i.ShaderStore.IncludesShadersStore[w]=K);let z="pbrBlockAmbientOcclusion",Z=`struct ambientOcclusionOutParams
463
+ {vec3 ambientOcclusionColor;
464
+ #if DEBUGMODE>0 && defined(AMBIENT)
465
+ vec3 ambientOcclusionColorMap;
466
+ #endif
467
+ };ambientOcclusionOutParams ambientOcclusionBlock(
468
+ #ifdef AMBIENT
469
+ in vec3 ambientOcclusionColorMap_,
470
+ in vec4 vAmbientInfos
471
+ #endif
472
+ )
473
+ {ambientOcclusionOutParams outParams;vec3 ambientOcclusionColor=vec3(1.,1.,1.);
474
+ #ifdef AMBIENT
475
+ vec3 ambientOcclusionColorMap=ambientOcclusionColorMap_*vAmbientInfos.y;
476
+ #ifdef AMBIENTINGRAYSCALE
477
+ ambientOcclusionColorMap=vec3(ambientOcclusionColorMap.r,ambientOcclusionColorMap.r,ambientOcclusionColorMap.r);
478
+ #endif
479
+ ambientOcclusionColor=mix(ambientOcclusionColor,ambientOcclusionColorMap,vAmbientInfos.z);
480
+ #if DEBUGMODE>0
481
+ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap;
482
+ #endif
483
+ #endif
484
+ outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;}
485
+ `;i.ShaderStore.IncludesShadersStore[z]||(i.ShaderStore.IncludesShadersStore[z]=Z);let q="pbrBlockAlphaFresnel",J=`#ifdef ALPHAFRESNEL
486
+ #if defined(ALPHATEST) || defined(ALPHABLEND)
487
+ struct alphaFresnelOutParams
488
+ {float alpha;};
489
+ #define pbr_inline
490
+ alphaFresnelOutParams alphaFresnelBlock(
491
+ in vec3 normalW,
492
+ in vec3 viewDirectionW,
493
+ in float alpha,
494
+ in float microSurface
495
+ )
496
+ {alphaFresnelOutParams outParams;float opacityPerceptual=alpha;
497
+ #ifdef LINEARALPHAFRESNEL
498
+ float opacity0=opacityPerceptual;
499
+ #else
500
+ float opacity0=opacityPerceptual*opacityPerceptual;
501
+ #endif
502
+ float opacity90=fresnelGrazingReflectance(opacity0);vec3 normalForward=faceforward(normalW,-viewDirectionW,normalW);outParams.alpha=getReflectanceFromAnalyticalBRDFLookup_Jones(saturate(dot(viewDirectionW,normalForward)),vec3(opacity0),vec3(opacity90),sqrt(microSurface)).x;
503
+ #ifdef ALPHATEST
504
+ if (outParams.alpha<ALPHATESTVALUE)
505
+ discard;
506
+ #ifndef ALPHABLEND
507
+ outParams.alpha=1.0;
508
+ #endif
509
+ #endif
510
+ return outParams;}
511
+ #endif
512
+ #endif
513
+ `;i.ShaderStore.IncludesShadersStore[q]||(i.ShaderStore.IncludesShadersStore[q]=J);let j="pbrBlockAnisotropic",Q=`#ifdef ANISOTROPIC
514
+ struct anisotropicOutParams
515
+ {float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;vec3 anisotropicNormal;
516
+ #if DEBUGMODE>0 && defined(ANISOTROPIC_TEXTURE)
517
+ vec3 anisotropyMapData;
518
+ #endif
519
+ };
520
+ #define pbr_inline
521
+ anisotropicOutParams anisotropicBlock(
522
+ in vec3 vAnisotropy,
523
+ in float roughness,
524
+ #ifdef ANISOTROPIC_TEXTURE
525
+ in vec3 anisotropyMapData,
526
+ #endif
527
+ in mat3 TBN,
528
+ in vec3 normalW,
529
+ in vec3 viewDirectionW
530
+ )
531
+ {anisotropicOutParams outParams;float anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);
532
+ #ifdef ANISOTROPIC_TEXTURE
533
+ anisotropy*=anisotropyMapData.b;
534
+ #if DEBUGMODE>0
535
+ outParams.anisotropyMapData=anisotropyMapData;
536
+ #endif
537
+ anisotropyMapData.rg=anisotropyMapData.rg*2.0-1.0;
538
+ #ifdef ANISOTROPIC_LEGACY
539
+ anisotropyDirection.rg*=anisotropyMapData.rg;
540
+ #else
541
+ anisotropyDirection.xy=mat2(anisotropyDirection.x,anisotropyDirection.y,-anisotropyDirection.y,anisotropyDirection.x)*normalize(anisotropyMapData.rg);
542
+ #endif
543
+ #endif
544
+ mat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));vec3 anisotropicTangent=normalize(anisoTBN*anisotropyDirection);vec3 anisotropicBitangent=normalize(cross(anisoTBN[2],anisotropicTangent));outParams.anisotropy=anisotropy;outParams.anisotropicTangent=anisotropicTangent;outParams.anisotropicBitangent=anisotropicBitangent;outParams.anisotropicNormal=getAnisotropicBentNormals(anisotropicTangent,anisotropicBitangent,normalW,viewDirectionW,anisotropy,roughness);return outParams;}
545
+ #endif
546
+ `;i.ShaderStore.IncludesShadersStore[j]||(i.ShaderStore.IncludesShadersStore[j]=Q);let $="pbrBlockReflection",ee=`#ifdef REFLECTION
547
+ struct reflectionOutParams
548
+ {vec4 environmentRadiance;vec3 environmentIrradiance;
549
+ #ifdef REFLECTIONMAP_3D
550
+ vec3 reflectionCoords;
551
+ #else
552
+ vec2 reflectionCoords;
553
+ #endif
554
+ #ifdef SS_TRANSLUCENCY
555
+ #ifdef USESPHERICALFROMREFLECTIONMAP
556
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
557
+ vec3 irradianceVector;
558
+ #endif
559
+ #endif
560
+ #endif
561
+ };
562
+ #define pbr_inline
563
+ void createReflectionCoords(
564
+ in vec3 vPositionW,
565
+ in vec3 normalW,
566
+ #ifdef ANISOTROPIC
567
+ in anisotropicOutParams anisotropicOut,
568
+ #endif
569
+ #ifdef REFLECTIONMAP_3D
570
+ out vec3 reflectionCoords
571
+ #else
572
+ out vec2 reflectionCoords
573
+ #endif
574
+ )
575
+ {
576
+ #ifdef ANISOTROPIC
577
+ vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),anisotropicOut.anisotropicNormal);
578
+ #else
579
+ vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);
580
+ #endif
581
+ #ifdef REFLECTIONMAP_OPPOSITEZ
582
+ reflectionVector.z*=-1.0;
583
+ #endif
584
+ #ifdef REFLECTIONMAP_3D
585
+ reflectionCoords=reflectionVector;
586
+ #else
587
+ reflectionCoords=reflectionVector.xy;
588
+ #ifdef REFLECTIONMAP_PROJECTION
589
+ reflectionCoords/=reflectionVector.z;
590
+ #endif
591
+ reflectionCoords.y=1.0-reflectionCoords.y;
592
+ #endif
593
+ }
594
+ #define pbr_inline
595
+ #define inline
596
+ void sampleReflectionTexture(
597
+ in float alphaG,
598
+ in vec3 vReflectionMicrosurfaceInfos,
599
+ in vec2 vReflectionInfos,
600
+ in vec3 vReflectionColor,
601
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
602
+ in float NdotVUnclamped,
603
+ #endif
604
+ #ifdef LINEARSPECULARREFLECTION
605
+ in float roughness,
606
+ #endif
607
+ #ifdef REFLECTIONMAP_3D
608
+ in samplerCube reflectionSampler,
609
+ const vec3 reflectionCoords,
610
+ #else
611
+ in sampler2D reflectionSampler,
612
+ const vec2 reflectionCoords,
613
+ #endif
614
+ #ifndef LODBASEDMICROSFURACE
615
+ #ifdef REFLECTIONMAP_3D
616
+ in samplerCube reflectionSamplerLow,
617
+ in samplerCube reflectionSamplerHigh,
618
+ #else
619
+ in sampler2D reflectionSamplerLow,
620
+ in sampler2D reflectionSamplerHigh,
621
+ #endif
622
+ #endif
623
+ #ifdef REALTIME_FILTERING
624
+ in vec2 vReflectionFilteringInfo,
625
+ #endif
626
+ out vec4 environmentRadiance
627
+ )
628
+ {
629
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
630
+ float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,NdotVUnclamped);
631
+ #elif defined(LINEARSPECULARREFLECTION)
632
+ float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
633
+ #else
634
+ float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
635
+ #endif
636
+ #ifdef LODBASEDMICROSFURACE
637
+ reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
638
+ #ifdef LODINREFLECTIONALPHA
639
+ float automaticReflectionLOD=UNPACK_LOD(sampleReflection(reflectionSampler,reflectionCoords).a);float requestedReflectionLOD=max(automaticReflectionLOD,reflectionLOD);
640
+ #else
641
+ float requestedReflectionLOD=reflectionLOD;
642
+ #endif
643
+ #ifdef REALTIME_FILTERING
644
+ environmentRadiance=vec4(radiance(alphaG,reflectionSampler,reflectionCoords,vReflectionFilteringInfo),1.0);
645
+ #else
646
+ environmentRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
647
+ #endif
648
+ #else
649
+ float lodReflectionNormalized=saturate(reflectionLOD/log2(vReflectionMicrosurfaceInfos.x));float lodReflectionNormalizedDoubled=lodReflectionNormalized*2.0;vec4 environmentMid=sampleReflection(reflectionSampler,reflectionCoords);if (lodReflectionNormalizedDoubled<1.0){environmentRadiance=mix(
650
+ sampleReflection(reflectionSamplerHigh,reflectionCoords),
651
+ environmentMid,
652
+ lodReflectionNormalizedDoubled
653
+ );} else {environmentRadiance=mix(
654
+ environmentMid,
655
+ sampleReflection(reflectionSamplerLow,reflectionCoords),
656
+ lodReflectionNormalizedDoubled-1.0
657
+ );}
658
+ #endif
659
+ #ifdef RGBDREFLECTION
660
+ environmentRadiance.rgb=fromRGBD(environmentRadiance);
661
+ #endif
662
+ #ifdef GAMMAREFLECTION
663
+ environmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);
664
+ #endif
665
+ environmentRadiance.rgb*=vReflectionInfos.x;environmentRadiance.rgb*=vReflectionColor.rgb;}
666
+ #define pbr_inline
667
+ #define inline
668
+ reflectionOutParams reflectionBlock(
669
+ in vec3 vPositionW
670
+ ,in vec3 normalW
671
+ ,in float alphaG
672
+ ,in vec3 vReflectionMicrosurfaceInfos
673
+ ,in vec2 vReflectionInfos
674
+ ,in vec3 vReflectionColor
675
+ #ifdef ANISOTROPIC
676
+ ,in anisotropicOutParams anisotropicOut
677
+ #endif
678
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
679
+ ,in float NdotVUnclamped
680
+ #endif
681
+ #ifdef LINEARSPECULARREFLECTION
682
+ ,in float roughness
683
+ #endif
684
+ #ifdef REFLECTIONMAP_3D
685
+ ,in samplerCube reflectionSampler
686
+ #else
687
+ ,in sampler2D reflectionSampler
688
+ #endif
689
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
690
+ ,in vec3 vEnvironmentIrradiance
691
+ #endif
692
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
693
+ ,in mat4 reflectionMatrix
694
+ #endif
695
+ #ifdef USEIRRADIANCEMAP
696
+ #ifdef REFLECTIONMAP_3D
697
+ ,in samplerCube irradianceSampler
698
+ #else
699
+ ,in sampler2D irradianceSampler
700
+ #endif
701
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
702
+ ,in vec3 reflectionDominantDirection
703
+ #endif
704
+ #endif
705
+ #ifndef LODBASEDMICROSFURACE
706
+ #ifdef REFLECTIONMAP_3D
707
+ ,in samplerCube reflectionSamplerLow
708
+ ,in samplerCube reflectionSamplerHigh
709
+ #else
710
+ ,in sampler2D reflectionSamplerLow
711
+ ,in sampler2D reflectionSamplerHigh
712
+ #endif
713
+ #endif
714
+ #ifdef REALTIME_FILTERING
715
+ ,in vec2 vReflectionFilteringInfo
716
+ #ifdef IBL_CDF_FILTERING
717
+ ,in sampler2D icdfSampler
718
+ #endif
719
+ #endif
720
+ ,in vec3 viewDirectionW
721
+ ,in float diffuseRoughness
722
+ ,in vec3 surfaceAlbedo
723
+ )
724
+ {reflectionOutParams outParams;vec4 environmentRadiance=vec4(0.,0.,0.,0.);
725
+ #ifdef REFLECTIONMAP_3D
726
+ vec3 reflectionCoords=vec3(0.);
727
+ #else
728
+ vec2 reflectionCoords=vec2(0.);
729
+ #endif
730
+ createReflectionCoords(
731
+ vPositionW,
732
+ normalW,
733
+ #ifdef ANISOTROPIC
734
+ anisotropicOut,
735
+ #endif
736
+ reflectionCoords
737
+ );sampleReflectionTexture(
738
+ alphaG,
739
+ vReflectionMicrosurfaceInfos,
740
+ vReflectionInfos,
741
+ vReflectionColor,
742
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
743
+ NdotVUnclamped,
744
+ #endif
745
+ #ifdef LINEARSPECULARREFLECTION
746
+ roughness,
747
+ #endif
748
+ #ifdef REFLECTIONMAP_3D
749
+ reflectionSampler,
750
+ reflectionCoords,
751
+ #else
752
+ reflectionSampler,
753
+ reflectionCoords,
754
+ #endif
755
+ #ifndef LODBASEDMICROSFURACE
756
+ reflectionSamplerLow,
757
+ reflectionSamplerHigh,
758
+ #endif
759
+ #ifdef REALTIME_FILTERING
760
+ vReflectionFilteringInfo,
761
+ #endif
762
+ environmentRadiance
763
+ );vec3 environmentIrradiance=vec3(0.,0.,0.);
764
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
765
+ #ifdef ANISOTROPIC
766
+ vec3 irradianceVector=vec3(reflectionMatrix*vec4(anisotropicOut.anisotropicNormal,0)).xyz;
767
+ #else
768
+ vec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;
769
+ #endif
770
+ vec3 irradianceView=vec3(reflectionMatrix*vec4(viewDirectionW,0)).xyz;
771
+ #if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
772
+ #if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
773
+ float NdotV=max(dot(normalW,viewDirectionW),0.0);irradianceVector=mix(irradianceVector,irradianceView,(0.5*(1.0-NdotV))*diffuseRoughness);
774
+ #endif
775
+ #endif
776
+ #ifdef REFLECTIONMAP_OPPOSITEZ
777
+ irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
778
+ #endif
779
+ #ifdef INVERTCUBICMAP
780
+ irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
781
+ #endif
782
+ #endif
783
+ #ifdef USESPHERICALFROMREFLECTIONMAP
784
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
785
+ environmentIrradiance=vEnvironmentIrradiance;
786
+ #else
787
+ #if defined(REALTIME_FILTERING)
788
+ environmentIrradiance=irradiance(reflectionSampler,irradianceVector,vReflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
789
+ #ifdef IBL_CDF_FILTERING
790
+ ,icdfSampler
791
+ #endif
792
+ );
793
+ #else
794
+ environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
795
+ #endif
796
+ #ifdef SS_TRANSLUCENCY
797
+ outParams.irradianceVector=irradianceVector;
798
+ #endif
799
+ #endif
800
+ #elif defined(USEIRRADIANCEMAP)
801
+ #ifdef REFLECTIONMAP_3D
802
+ vec4 environmentIrradiance4=sampleReflection(irradianceSampler,irradianceVector);
803
+ #else
804
+ vec4 environmentIrradiance4=sampleReflection(irradianceSampler,reflectionCoords);
805
+ #endif
806
+ environmentIrradiance=environmentIrradiance4.rgb;
807
+ #ifdef RGBDREFLECTION
808
+ environmentIrradiance.rgb=fromRGBD(environmentIrradiance4);
809
+ #endif
810
+ #ifdef GAMMAREFLECTION
811
+ environmentIrradiance.rgb=toLinearSpace(environmentIrradiance.rgb);
812
+ #endif
813
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
814
+ vec3 Ls=normalize(reflectionDominantDirection);float NoL=dot(irradianceVector,Ls);float NoV=dot(irradianceVector,irradianceView);vec3 diffuseRoughnessTerm=vec3(1.0);
815
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
816
+ 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)));
817
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
818
+ vec3 H=(irradianceView+Ls)*0.5;float VoH=dot(irradianceView,H);diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
819
+ #endif
820
+ environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
821
+ #endif
822
+ #endif
823
+ environmentIrradiance*=vReflectionColor.rgb*vReflectionInfos.x;
824
+ #ifdef MIX_IBL_RADIANCE_WITH_IRRADIANCE
825
+ outParams.environmentRadiance=vec4(mix(environmentRadiance.rgb,environmentIrradiance,alphaG),environmentRadiance.a);
826
+ #else
827
+ outParams.environmentRadiance=environmentRadiance;
828
+ #endif
829
+ outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;}
830
+ #endif
831
+ `;i.ShaderStore.IncludesShadersStore[$]||(i.ShaderStore.IncludesShadersStore[$]=ee);let ei="pbrBlockSheen",en=`#ifdef SHEEN
832
+ struct sheenOutParams
833
+ {float sheenIntensity;vec3 sheenColor;float sheenRoughness;
834
+ #ifdef SHEEN_LINKWITHALBEDO
835
+ vec3 surfaceAlbedo;
836
+ #endif
837
+ #if defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
838
+ float sheenAlbedoScaling;
839
+ #endif
840
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
841
+ vec3 finalSheenRadianceScaled;
842
+ #endif
843
+ #if DEBUGMODE>0
844
+ #ifdef SHEEN_TEXTURE
845
+ vec4 sheenMapData;
846
+ #endif
847
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
848
+ vec3 sheenEnvironmentReflectance;
849
+ #endif
850
+ #endif
851
+ };
852
+ #define pbr_inline
853
+ #define inline
854
+ sheenOutParams sheenBlock(
855
+ in vec4 vSheenColor
856
+ #ifdef SHEEN_ROUGHNESS
857
+ ,in float vSheenRoughness
858
+ #if defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
859
+ ,in vec4 sheenMapRoughnessData
860
+ #endif
861
+ #endif
862
+ ,in float roughness
863
+ #ifdef SHEEN_TEXTURE
864
+ ,in vec4 sheenMapData
865
+ ,in float sheenMapLevel
866
+ #endif
867
+ ,in float reflectance
868
+ #ifdef SHEEN_LINKWITHALBEDO
869
+ ,in vec3 baseColor
870
+ ,in vec3 surfaceAlbedo
871
+ #endif
872
+ #ifdef ENVIRONMENTBRDF
873
+ ,in float NdotV
874
+ ,in vec3 environmentBrdf
875
+ #endif
876
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
877
+ ,in vec2 AARoughnessFactors
878
+ ,in vec3 vReflectionMicrosurfaceInfos
879
+ ,in vec2 vReflectionInfos
880
+ ,in vec3 vReflectionColor
881
+ ,in vec4 vLightingIntensity
882
+ #ifdef REFLECTIONMAP_3D
883
+ ,in samplerCube reflectionSampler
884
+ ,in vec3 reflectionCoords
885
+ #else
886
+ ,in sampler2D reflectionSampler
887
+ ,in vec2 reflectionCoords
888
+ #endif
889
+ ,in float NdotVUnclamped
890
+ #ifndef LODBASEDMICROSFURACE
891
+ #ifdef REFLECTIONMAP_3D
892
+ ,in samplerCube reflectionSamplerLow
893
+ ,in samplerCube reflectionSamplerHigh
894
+ #else
895
+ ,in sampler2D reflectionSamplerLow
896
+ ,in sampler2D reflectionSamplerHigh
897
+ #endif
898
+ #endif
899
+ #ifdef REALTIME_FILTERING
900
+ ,in vec2 vReflectionFilteringInfo
901
+ #endif
902
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
903
+ ,in float seo
904
+ #endif
905
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
906
+ ,in float eho
907
+ #endif
908
+ #endif
909
+ )
910
+ {sheenOutParams outParams;float sheenIntensity=vSheenColor.a;
911
+ #ifdef SHEEN_TEXTURE
912
+ #if DEBUGMODE>0
913
+ outParams.sheenMapData=sheenMapData;
914
+ #endif
915
+ #endif
916
+ #ifdef SHEEN_LINKWITHALBEDO
917
+ float sheenFactor=pow5(1.0-sheenIntensity);vec3 sheenColor=baseColor.rgb*(1.0-sheenFactor);float sheenRoughness=sheenIntensity;outParams.surfaceAlbedo=surfaceAlbedo*sheenFactor;
918
+ #ifdef SHEEN_TEXTURE
919
+ sheenIntensity*=sheenMapData.a;
920
+ #endif
921
+ #else
922
+ vec3 sheenColor=vSheenColor.rgb;
923
+ #ifdef SHEEN_TEXTURE
924
+ #ifdef SHEEN_GAMMATEXTURE
925
+ sheenColor.rgb*=toLinearSpace(sheenMapData.rgb);
926
+ #else
927
+ sheenColor.rgb*=sheenMapData.rgb;
928
+ #endif
929
+ sheenColor.rgb*=sheenMapLevel;
930
+ #endif
931
+ #ifdef SHEEN_ROUGHNESS
932
+ float sheenRoughness=vSheenRoughness;
933
+ #ifdef SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE
934
+ #if defined(SHEEN_TEXTURE)
935
+ sheenRoughness*=sheenMapData.a;
936
+ #endif
937
+ #elif defined(SHEEN_TEXTURE_ROUGHNESS)
938
+ sheenRoughness*=sheenMapRoughnessData.a;
939
+ #endif
940
+ #else
941
+ float sheenRoughness=roughness;
942
+ #ifdef SHEEN_TEXTURE
943
+ sheenIntensity*=sheenMapData.a;
944
+ #endif
945
+ #endif
946
+ #if !defined(SHEEN_ALBEDOSCALING)
947
+ sheenIntensity*=(1.-reflectance);
948
+ #endif
949
+ sheenColor*=sheenIntensity;
950
+ #endif
951
+ #ifdef ENVIRONMENTBRDF
952
+ /*#ifdef SHEEN_SOFTER
953
+ vec3 environmentSheenBrdf=vec3(0.,0.,getBRDFLookupCharlieSheen(NdotV,sheenRoughness));
954
+ #else*/
955
+ #ifdef SHEEN_ROUGHNESS
956
+ vec3 environmentSheenBrdf=getBRDFLookup(NdotV,sheenRoughness);
957
+ #else
958
+ vec3 environmentSheenBrdf=environmentBrdf;
959
+ #endif
960
+ /*#endif*/
961
+ #endif
962
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
963
+ float sheenAlphaG=convertRoughnessToAverageSlope(sheenRoughness);
964
+ #ifdef SPECULARAA
965
+ sheenAlphaG+=AARoughnessFactors.y;
966
+ #endif
967
+ vec4 environmentSheenRadiance=vec4(0.,0.,0.,0.);sampleReflectionTexture(
968
+ sheenAlphaG,
969
+ vReflectionMicrosurfaceInfos,
970
+ vReflectionInfos,
971
+ vReflectionColor,
972
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
973
+ NdotVUnclamped,
974
+ #endif
975
+ #ifdef LINEARSPECULARREFLECTION
976
+ sheenRoughness,
977
+ #endif
978
+ reflectionSampler,
979
+ reflectionCoords,
980
+ #ifndef LODBASEDMICROSFURACE
981
+ reflectionSamplerLow,
982
+ reflectionSamplerHigh,
983
+ #endif
984
+ #ifdef REALTIME_FILTERING
985
+ vReflectionFilteringInfo,
986
+ #endif
987
+ environmentSheenRadiance
988
+ );vec3 sheenEnvironmentReflectance=getSheenReflectanceFromBRDFLookup(sheenColor,environmentSheenBrdf);
989
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
990
+ sheenEnvironmentReflectance*=seo;
991
+ #endif
992
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
993
+ sheenEnvironmentReflectance*=eho;
994
+ #endif
995
+ #if DEBUGMODE>0
996
+ outParams.sheenEnvironmentReflectance=sheenEnvironmentReflectance;
997
+ #endif
998
+ outParams.finalSheenRadianceScaled=
999
+ environmentSheenRadiance.rgb *
1000
+ sheenEnvironmentReflectance *
1001
+ vLightingIntensity.z;
1002
+ #endif
1003
+ #if defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1004
+ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor.g),sheenColor.b)*environmentSheenBrdf.b;
1005
+ #endif
1006
+ outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;}
1007
+ #endif
1008
+ `;i.ShaderStore.IncludesShadersStore[ei]||(i.ShaderStore.IncludesShadersStore[ei]=en);let ea="pbrBlockClearcoat",er=`struct clearcoatOutParams
1009
+ {vec3 specularEnvironmentR0;float conservationFactor;vec3 clearCoatNormalW;vec2 clearCoatAARoughnessFactors;float clearCoatIntensity;float clearCoatRoughness;
1010
+ #ifdef REFLECTION
1011
+ vec3 finalClearCoatRadianceScaled;
1012
+ #endif
1013
+ #ifdef CLEARCOAT_TINT
1014
+ vec3 absorption;float clearCoatNdotVRefract;vec3 clearCoatColor;float clearCoatThickness;
1015
+ #endif
1016
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1017
+ vec3 energyConservationFactorClearCoat;
1018
+ #endif
1019
+ #if DEBUGMODE>0
1020
+ #ifdef CLEARCOAT_BUMP
1021
+ mat3 TBNClearCoat;
1022
+ #endif
1023
+ #ifdef CLEARCOAT_TEXTURE
1024
+ vec2 clearCoatMapData;
1025
+ #endif
1026
+ #if defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
1027
+ vec4 clearCoatTintMapData;
1028
+ #endif
1029
+ #ifdef REFLECTION
1030
+ vec4 environmentClearCoatRadiance;vec3 clearCoatEnvironmentReflectance;
1031
+ #endif
1032
+ float clearCoatNdotV;
1033
+ #endif
1034
+ };
1035
+ #ifdef CLEARCOAT
1036
+ #define pbr_inline
1037
+ #define inline
1038
+ clearcoatOutParams clearcoatBlock(
1039
+ in vec3 vPositionW
1040
+ ,in vec3 geometricNormalW
1041
+ ,in vec3 viewDirectionW
1042
+ ,in vec2 vClearCoatParams
1043
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
1044
+ ,in vec4 clearCoatMapRoughnessData
1045
+ #endif
1046
+ ,in vec3 specularEnvironmentR0
1047
+ #ifdef CLEARCOAT_TEXTURE
1048
+ ,in vec2 clearCoatMapData
1049
+ #endif
1050
+ #ifdef CLEARCOAT_TINT
1051
+ ,in vec4 vClearCoatTintParams
1052
+ ,in float clearCoatColorAtDistance
1053
+ ,in vec4 vClearCoatRefractionParams
1054
+ #ifdef CLEARCOAT_TINT_TEXTURE
1055
+ ,in vec4 clearCoatTintMapData
1056
+ #endif
1057
+ #endif
1058
+ #ifdef CLEARCOAT_BUMP
1059
+ ,in vec2 vClearCoatBumpInfos
1060
+ ,in vec4 clearCoatBumpMapData
1061
+ ,in vec2 vClearCoatBumpUV
1062
+ #if defined(TANGENT) && defined(NORMAL)
1063
+ ,in mat3 vTBN
1064
+ #else
1065
+ ,in vec2 vClearCoatTangentSpaceParams
1066
+ #endif
1067
+ #ifdef OBJECTSPACE_NORMALMAP
1068
+ ,in mat4 normalMatrix
1069
+ #endif
1070
+ #endif
1071
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
1072
+ ,in vec3 faceNormal
1073
+ #endif
1074
+ #ifdef REFLECTION
1075
+ ,in vec3 vReflectionMicrosurfaceInfos
1076
+ ,in vec2 vReflectionInfos
1077
+ ,in vec3 vReflectionColor
1078
+ ,in vec4 vLightingIntensity
1079
+ #ifdef REFLECTIONMAP_3D
1080
+ ,in samplerCube reflectionSampler
1081
+ #else
1082
+ ,in sampler2D reflectionSampler
1083
+ #endif
1084
+ #ifndef LODBASEDMICROSFURACE
1085
+ #ifdef REFLECTIONMAP_3D
1086
+ ,in samplerCube reflectionSamplerLow
1087
+ ,in samplerCube reflectionSamplerHigh
1088
+ #else
1089
+ ,in sampler2D reflectionSamplerLow
1090
+ ,in sampler2D reflectionSamplerHigh
1091
+ #endif
1092
+ #endif
1093
+ #ifdef REALTIME_FILTERING
1094
+ ,in vec2 vReflectionFilteringInfo
1095
+ #endif
1096
+ #endif
1097
+ #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
1098
+ ,in float frontFacingMultiplier
1099
+ #endif
1100
+ )
1101
+ {clearcoatOutParams outParams;float clearCoatIntensity=vClearCoatParams.x;float clearCoatRoughness=vClearCoatParams.y;
1102
+ #ifdef CLEARCOAT_TEXTURE
1103
+ clearCoatIntensity*=clearCoatMapData.x;
1104
+ #ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE
1105
+ clearCoatRoughness*=clearCoatMapData.y;
1106
+ #endif
1107
+ #if DEBUGMODE>0
1108
+ outParams.clearCoatMapData=clearCoatMapData;
1109
+ #endif
1110
+ #endif
1111
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
1112
+ clearCoatRoughness*=clearCoatMapRoughnessData.y;
1113
+ #endif
1114
+ outParams.clearCoatIntensity=clearCoatIntensity;outParams.clearCoatRoughness=clearCoatRoughness;
1115
+ #ifdef CLEARCOAT_TINT
1116
+ vec3 clearCoatColor=vClearCoatTintParams.rgb;float clearCoatThickness=vClearCoatTintParams.a;
1117
+ #ifdef CLEARCOAT_TINT_TEXTURE
1118
+ #ifdef CLEARCOAT_TINT_GAMMATEXTURE
1119
+ clearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);
1120
+ #else
1121
+ clearCoatColor*=clearCoatTintMapData.rgb;
1122
+ #endif
1123
+ clearCoatThickness*=clearCoatTintMapData.a;
1124
+ #if DEBUGMODE>0
1125
+ outParams.clearCoatTintMapData=clearCoatTintMapData;
1126
+ #endif
1127
+ #endif
1128
+ outParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);outParams.clearCoatThickness=clearCoatThickness;
1129
+ #endif
1130
+ #ifdef CLEARCOAT_REMAP_F0
1131
+ vec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);
1132
+ #else
1133
+ vec3 specularEnvironmentR0Updated=specularEnvironmentR0;
1134
+ #endif
1135
+ outParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);vec3 clearCoatNormalW=geometricNormalW;
1136
+ #ifdef CLEARCOAT_BUMP
1137
+ #ifdef NORMALXYSCALE
1138
+ float clearCoatNormalScale=1.0;
1139
+ #else
1140
+ float clearCoatNormalScale=vClearCoatBumpInfos.y;
1141
+ #endif
1142
+ #if defined(TANGENT) && defined(NORMAL)
1143
+ mat3 TBNClearCoat=vTBN;
1144
+ #else
1145
+ vec2 TBNClearCoatUV=vClearCoatBumpUV*frontFacingMultiplier;mat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);
1146
+ #endif
1147
+ #if DEBUGMODE>0
1148
+ outParams.TBNClearCoat=TBNClearCoat;
1149
+ #endif
1150
+ #ifdef OBJECTSPACE_NORMALMAP
1151
+ clearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);clearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);
1152
+ #else
1153
+ clearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);
1154
+ #endif
1155
+ #endif
1156
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
1157
+ clearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));
1158
+ #endif
1159
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
1160
+ clearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;
1161
+ #endif
1162
+ outParams.clearCoatNormalW=clearCoatNormalW;outParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);float clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);float clearCoatNdotV=absEps(clearCoatNdotVUnclamped);
1163
+ #if DEBUGMODE>0
1164
+ outParams.clearCoatNdotV=clearCoatNdotV;
1165
+ #endif
1166
+ #ifdef CLEARCOAT_TINT
1167
+ vec3 clearCoatVRefract=refract(-viewDirectionW,clearCoatNormalW,vClearCoatRefractionParams.y);outParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));
1168
+ #endif
1169
+ #if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))
1170
+ vec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);
1171
+ #endif
1172
+ #if defined(REFLECTION)
1173
+ float clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);
1174
+ #ifdef SPECULARAA
1175
+ clearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;
1176
+ #endif
1177
+ vec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);vec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);
1178
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1179
+ clearCoatReflectionVector.z*=-1.0;
1180
+ #endif
1181
+ #ifdef REFLECTIONMAP_3D
1182
+ vec3 clearCoatReflectionCoords=clearCoatReflectionVector;
1183
+ #else
1184
+ vec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;
1185
+ #ifdef REFLECTIONMAP_PROJECTION
1186
+ clearCoatReflectionCoords/=clearCoatReflectionVector.z;
1187
+ #endif
1188
+ clearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;
1189
+ #endif
1190
+ sampleReflectionTexture(
1191
+ clearCoatAlphaG,
1192
+ vReflectionMicrosurfaceInfos,
1193
+ vReflectionInfos,
1194
+ vReflectionColor,
1195
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1196
+ clearCoatNdotVUnclamped,
1197
+ #endif
1198
+ #ifdef LINEARSPECULARREFLECTION
1199
+ clearCoatRoughness,
1200
+ #endif
1201
+ reflectionSampler,
1202
+ clearCoatReflectionCoords,
1203
+ #ifndef LODBASEDMICROSFURACE
1204
+ reflectionSamplerLow,
1205
+ reflectionSamplerHigh,
1206
+ #endif
1207
+ #ifdef REALTIME_FILTERING
1208
+ vReflectionFilteringInfo,
1209
+ #endif
1210
+ environmentClearCoatRadiance
1211
+ );
1212
+ #if DEBUGMODE>0
1213
+ outParams.environmentClearCoatRadiance=environmentClearCoatRadiance;
1214
+ #endif
1215
+ #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
1216
+ vec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);
1217
+ #ifdef HORIZONOCCLUSION
1218
+ #ifdef BUMP
1219
+ #ifdef REFLECTIONMAP_3D
1220
+ float clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);clearCoatEnvironmentReflectance*=clearCoatEho;
1221
+ #endif
1222
+ #endif
1223
+ #endif
1224
+ #else
1225
+ vec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));
1226
+ #endif
1227
+ clearCoatEnvironmentReflectance*=clearCoatIntensity;
1228
+ #if DEBUGMODE>0
1229
+ outParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;
1230
+ #endif
1231
+ outParams.finalClearCoatRadianceScaled=
1232
+ environmentClearCoatRadiance.rgb *
1233
+ clearCoatEnvironmentReflectance *
1234
+ vLightingIntensity.z;
1235
+ #endif
1236
+ #if defined(CLEARCOAT_TINT)
1237
+ outParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);
1238
+ #endif
1239
+ float fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnelIBLClearCoat*=clearCoatIntensity;outParams.conservationFactor=(1.-fresnelIBLClearCoat);
1240
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1241
+ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);
1242
+ #endif
1243
+ return outParams;}
1244
+ #endif
1245
+ `;i.ShaderStore.IncludesShadersStore[ea]||(i.ShaderStore.IncludesShadersStore[ea]=er);let ef="pbrBlockIridescence",eo=`struct iridescenceOutParams
1246
+ {float iridescenceIntensity;float iridescenceIOR;float iridescenceThickness;vec3 specularEnvironmentR0;};
1247
+ #ifdef IRIDESCENCE
1248
+ #define pbr_inline
1249
+ #define inline
1250
+ iridescenceOutParams iridescenceBlock(
1251
+ in vec4 vIridescenceParams
1252
+ ,in float viewAngle
1253
+ ,in vec3 specularEnvironmentR0
1254
+ #ifdef IRIDESCENCE_TEXTURE
1255
+ ,in vec2 iridescenceMapData
1256
+ #endif
1257
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
1258
+ ,in vec2 iridescenceThicknessMapData
1259
+ #endif
1260
+ #ifdef CLEARCOAT
1261
+ ,in float NdotVUnclamped
1262
+ ,in vec2 vClearCoatParams
1263
+ #ifdef CLEARCOAT_TEXTURE
1264
+ ,in vec2 clearCoatMapData
1265
+ #endif
1266
+ #endif
1267
+ )
1268
+ {iridescenceOutParams outParams;float iridescenceIntensity=vIridescenceParams.x;float iridescenceIOR=vIridescenceParams.y;float iridescenceThicknessMin=vIridescenceParams.z;float iridescenceThicknessMax=vIridescenceParams.w;float iridescenceThicknessWeight=1.;
1269
+ #ifdef IRIDESCENCE_TEXTURE
1270
+ iridescenceIntensity*=iridescenceMapData.x;
1271
+ #endif
1272
+ #if defined(IRIDESCENCE_THICKNESS_TEXTURE)
1273
+ iridescenceThicknessWeight=iridescenceThicknessMapData.g;
1274
+ #endif
1275
+ float iridescenceThickness=mix(iridescenceThicknessMin,iridescenceThicknessMax,iridescenceThicknessWeight);float topIor=1.;
1276
+ #ifdef CLEARCOAT
1277
+ float clearCoatIntensity=vClearCoatParams.x;
1278
+ #ifdef CLEARCOAT_TEXTURE
1279
+ clearCoatIntensity*=clearCoatMapData.x;
1280
+ #endif
1281
+ topIor=mix(1.0,vClearCoatRefractionParams.w-1.,clearCoatIntensity);viewAngle=sqrt(1.0+square(1.0/topIor)*(square(NdotVUnclamped)-1.0));
1282
+ #endif
1283
+ vec3 iridescenceFresnel=evalIridescence(topIor,iridescenceIOR,viewAngle,iridescenceThickness,specularEnvironmentR0);outParams.specularEnvironmentR0=mix(specularEnvironmentR0,iridescenceFresnel,iridescenceIntensity);outParams.iridescenceIntensity=iridescenceIntensity;outParams.iridescenceThickness=iridescenceThickness;outParams.iridescenceIOR=iridescenceIOR;return outParams;}
1284
+ #endif
1285
+ `;i.ShaderStore.IncludesShadersStore[ef]||(i.ShaderStore.IncludesShadersStore[ef]=eo);let et="pbrBlockSubSurface",ec=`struct subSurfaceOutParams
1286
+ {vec3 specularEnvironmentReflectance;
1287
+ #ifdef SS_REFRACTION
1288
+ vec3 finalRefraction;vec3 surfaceAlbedo;
1289
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1290
+ float alpha;
1291
+ #endif
1292
+ float refractionOpacity;
1293
+ #endif
1294
+ #ifdef SS_TRANSLUCENCY
1295
+ vec3 transmittance;float translucencyIntensity;
1296
+ #ifdef REFLECTION
1297
+ vec3 refractionIrradiance;
1298
+ #endif
1299
+ #endif
1300
+ #if DEBUGMODE>0
1301
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1302
+ vec4 thicknessMap;
1303
+ #endif
1304
+ #ifdef SS_REFRACTION
1305
+ vec4 environmentRefraction;vec3 refractionTransmittance;
1306
+ #endif
1307
+ #endif
1308
+ };
1309
+ #ifdef SUBSURFACE
1310
+ #ifdef SS_REFRACTION
1311
+ #define pbr_inline
1312
+ #define inline
1313
+ vec4 sampleEnvironmentRefraction(
1314
+ in float ior
1315
+ ,in float thickness
1316
+ ,in float refractionLOD
1317
+ ,in vec3 normalW
1318
+ ,in vec3 vPositionW
1319
+ ,in vec3 viewDirectionW
1320
+ ,in mat4 view
1321
+ ,in vec4 vRefractionInfos
1322
+ ,in mat4 refractionMatrix
1323
+ ,in vec4 vRefractionMicrosurfaceInfos
1324
+ ,in float alphaG
1325
+ #ifdef SS_REFRACTIONMAP_3D
1326
+ ,in samplerCube refractionSampler
1327
+ #ifndef LODBASEDMICROSFURACE
1328
+ ,in samplerCube refractionSamplerLow
1329
+ ,in samplerCube refractionSamplerHigh
1330
+ #endif
1331
+ #else
1332
+ ,in sampler2D refractionSampler
1333
+ #ifndef LODBASEDMICROSFURACE
1334
+ ,in sampler2D refractionSamplerLow
1335
+ ,in sampler2D refractionSamplerHigh
1336
+ #endif
1337
+ #endif
1338
+ #ifdef ANISOTROPIC
1339
+ ,in anisotropicOutParams anisotropicOut
1340
+ #endif
1341
+ #ifdef REALTIME_FILTERING
1342
+ ,in vec2 vRefractionFilteringInfo
1343
+ #endif
1344
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1345
+ ,in vec3 refractionPosition
1346
+ ,in vec3 refractionSize
1347
+ #endif
1348
+ ) {vec4 environmentRefraction=vec4(0.,0.,0.,0.);
1349
+ #ifdef ANISOTROPIC
1350
+ vec3 refractionVector=refract(-viewDirectionW,anisotropicOut.anisotropicNormal,ior);
1351
+ #else
1352
+ vec3 refractionVector=refract(-viewDirectionW,normalW,ior);
1353
+ #endif
1354
+ #ifdef SS_REFRACTIONMAP_OPPOSITEZ
1355
+ refractionVector.z*=-1.0;
1356
+ #endif
1357
+ #ifdef SS_REFRACTIONMAP_3D
1358
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1359
+ refractionVector=parallaxCorrectNormal(vPositionW,refractionVector,refractionSize,refractionPosition);
1360
+ #endif
1361
+ refractionVector.y=refractionVector.y*vRefractionInfos.w;vec3 refractionCoords=refractionVector;refractionCoords=vec3(refractionMatrix*vec4(refractionCoords,0));
1362
+ #else
1363
+ #ifdef SS_USE_THICKNESS_AS_DEPTH
1364
+ vec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*thickness,1.0)));
1365
+ #else
1366
+ vec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));
1367
+ #endif
1368
+ vec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;refractionCoords.y=1.0-refractionCoords.y;
1369
+ #endif
1370
+ #ifdef LODBASEDMICROSFURACE
1371
+ refractionLOD=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;
1372
+ #ifdef SS_LODINREFRACTIONALPHA
1373
+ float automaticRefractionLOD=UNPACK_LOD(sampleRefraction(refractionSampler,refractionCoords).a);float requestedRefractionLOD=max(automaticRefractionLOD,refractionLOD);
1374
+ #else
1375
+ float requestedRefractionLOD=refractionLOD;
1376
+ #endif
1377
+ #if defined(REALTIME_FILTERING) && defined(SS_REFRACTIONMAP_3D)
1378
+ environmentRefraction=vec4(radiance(alphaG,refractionSampler,refractionCoords,vRefractionFilteringInfo),1.0);
1379
+ #else
1380
+ environmentRefraction=sampleRefractionLod(refractionSampler,refractionCoords,requestedRefractionLOD);
1381
+ #endif
1382
+ #else
1383
+ float lodRefractionNormalized=saturate(refractionLOD/log2(vRefractionMicrosurfaceInfos.x));float lodRefractionNormalizedDoubled=lodRefractionNormalized*2.0;vec4 environmentRefractionMid=sampleRefraction(refractionSampler,refractionCoords);if (lodRefractionNormalizedDoubled<1.0){environmentRefraction=mix(
1384
+ sampleRefraction(refractionSamplerHigh,refractionCoords),
1385
+ environmentRefractionMid,
1386
+ lodRefractionNormalizedDoubled
1387
+ );} else {environmentRefraction=mix(
1388
+ environmentRefractionMid,
1389
+ sampleRefraction(refractionSamplerLow,refractionCoords),
1390
+ lodRefractionNormalizedDoubled-1.0
1391
+ );}
1392
+ #endif
1393
+ #ifdef SS_RGBDREFRACTION
1394
+ environmentRefraction.rgb=fromRGBD(environmentRefraction);
1395
+ #endif
1396
+ #ifdef SS_GAMMAREFRACTION
1397
+ environmentRefraction.rgb=toLinearSpace(environmentRefraction.rgb);
1398
+ #endif
1399
+ return environmentRefraction;}
1400
+ #endif
1401
+ #define pbr_inline
1402
+ #define inline
1403
+ subSurfaceOutParams subSurfaceBlock(
1404
+ in vec3 vSubSurfaceIntensity
1405
+ ,in vec2 vThicknessParam
1406
+ ,in vec4 vTintColor
1407
+ ,in vec3 normalW
1408
+ ,in vec3 vSpecularEnvironmentReflectance
1409
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1410
+ ,in vec4 thicknessMap
1411
+ #endif
1412
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
1413
+ ,in vec4 refractionIntensityMap
1414
+ #endif
1415
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
1416
+ ,in vec4 translucencyIntensityMap
1417
+ #endif
1418
+ #ifdef REFLECTION
1419
+ #ifdef SS_TRANSLUCENCY
1420
+ ,in mat4 reflectionMatrix
1421
+ #ifdef USESPHERICALFROMREFLECTIONMAP
1422
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
1423
+ ,in vec3 irradianceVector_
1424
+ #endif
1425
+ #if defined(REALTIME_FILTERING)
1426
+ ,in samplerCube reflectionSampler
1427
+ ,in vec2 vReflectionFilteringInfo
1428
+ #ifdef IBL_CDF_FILTERING
1429
+ ,in sampler2D icdfSampler
1430
+ #endif
1431
+ #endif
1432
+ #endif
1433
+ #ifdef USEIRRADIANCEMAP
1434
+ #ifdef REFLECTIONMAP_3D
1435
+ ,in samplerCube irradianceSampler
1436
+ #else
1437
+ ,in sampler2D irradianceSampler
1438
+ #endif
1439
+ #endif
1440
+ #endif
1441
+ #endif
1442
+ #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
1443
+ ,in vec3 surfaceAlbedo
1444
+ #endif
1445
+ #ifdef SS_REFRACTION
1446
+ ,in vec3 vPositionW
1447
+ ,in vec3 viewDirectionW
1448
+ ,in mat4 view
1449
+ ,in vec4 vRefractionInfos
1450
+ ,in mat4 refractionMatrix
1451
+ ,in vec4 vRefractionMicrosurfaceInfos
1452
+ ,in vec4 vLightingIntensity
1453
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1454
+ ,in float alpha
1455
+ #endif
1456
+ #ifdef SS_LODINREFRACTIONALPHA
1457
+ ,in float NdotVUnclamped
1458
+ #endif
1459
+ #ifdef SS_LINEARSPECULARREFRACTION
1460
+ ,in float roughness
1461
+ #endif
1462
+ ,in float alphaG
1463
+ #ifdef SS_REFRACTIONMAP_3D
1464
+ ,in samplerCube refractionSampler
1465
+ #ifndef LODBASEDMICROSFURACE
1466
+ ,in samplerCube refractionSamplerLow
1467
+ ,in samplerCube refractionSamplerHigh
1468
+ #endif
1469
+ #else
1470
+ ,in sampler2D refractionSampler
1471
+ #ifndef LODBASEDMICROSFURACE
1472
+ ,in sampler2D refractionSamplerLow
1473
+ ,in sampler2D refractionSamplerHigh
1474
+ #endif
1475
+ #endif
1476
+ #ifdef ANISOTROPIC
1477
+ ,in anisotropicOutParams anisotropicOut
1478
+ #endif
1479
+ #ifdef REALTIME_FILTERING
1480
+ ,in vec2 vRefractionFilteringInfo
1481
+ #endif
1482
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1483
+ ,in vec3 refractionPosition
1484
+ ,in vec3 refractionSize
1485
+ #endif
1486
+ #ifdef SS_DISPERSION
1487
+ ,in float dispersion
1488
+ #endif
1489
+ #endif
1490
+ #ifdef SS_TRANSLUCENCY
1491
+ ,in vec3 vDiffusionDistance
1492
+ ,in vec4 vTranslucencyColor
1493
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
1494
+ ,in vec4 translucencyColorMap
1495
+ #endif
1496
+ #endif
1497
+ )
1498
+ {subSurfaceOutParams outParams;outParams.specularEnvironmentReflectance=vSpecularEnvironmentReflectance;
1499
+ #ifdef SS_REFRACTION
1500
+ float refractionIntensity=vSubSurfaceIntensity.x;
1501
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1502
+ refractionIntensity*=(1.0-alpha);outParams.alpha=1.0;
1503
+ #endif
1504
+ #endif
1505
+ #ifdef SS_TRANSLUCENCY
1506
+ float translucencyIntensity=vSubSurfaceIntensity.y;
1507
+ #endif
1508
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1509
+ #ifdef SS_USE_GLTF_TEXTURES
1510
+ float thickness=thicknessMap.g*vThicknessParam.y+vThicknessParam.x;
1511
+ #else
1512
+ float thickness=thicknessMap.r*vThicknessParam.y+vThicknessParam.x;
1513
+ #endif
1514
+ #if DEBUGMODE>0
1515
+ outParams.thicknessMap=thicknessMap;
1516
+ #endif
1517
+ #if defined(SS_REFRACTION) && defined(SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS)
1518
+ #ifdef SS_USE_GLTF_TEXTURES
1519
+ refractionIntensity*=thicknessMap.r;
1520
+ #else
1521
+ refractionIntensity*=thicknessMap.g;
1522
+ #endif
1523
+ #endif
1524
+ #if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS)
1525
+ #ifdef SS_USE_GLTF_TEXTURES
1526
+ translucencyIntensity*=thicknessMap.a;
1527
+ #else
1528
+ translucencyIntensity*=thicknessMap.b;
1529
+ #endif
1530
+ #endif
1531
+ #else
1532
+ float thickness=vThicknessParam.y;
1533
+ #endif
1534
+ #if defined(SS_REFRACTION) && defined(SS_REFRACTIONINTENSITY_TEXTURE)
1535
+ #ifdef SS_USE_GLTF_TEXTURES
1536
+ refractionIntensity*=refractionIntensityMap.r;
1537
+ #else
1538
+ refractionIntensity*=refractionIntensityMap.g;
1539
+ #endif
1540
+ #endif
1541
+ #if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCYINTENSITY_TEXTURE)
1542
+ #ifdef SS_USE_GLTF_TEXTURES
1543
+ translucencyIntensity*=translucencyIntensityMap.a;
1544
+ #else
1545
+ translucencyIntensity*=translucencyIntensityMap.b;
1546
+ #endif
1547
+ #endif
1548
+ #ifdef SS_TRANSLUCENCY
1549
+ thickness=maxEps(thickness);vec4 translucencyColor=vTranslucencyColor;
1550
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
1551
+ translucencyColor*=translucencyColorMap;
1552
+ #endif
1553
+ vec3 transmittance=transmittanceBRDF_Burley(translucencyColor.rgb,vDiffusionDistance,thickness);transmittance*=translucencyIntensity;outParams.transmittance=transmittance;outParams.translucencyIntensity=translucencyIntensity;
1554
+ #endif
1555
+ #ifdef SS_REFRACTION
1556
+ vec4 environmentRefraction=vec4(0.,0.,0.,0.);
1557
+ #ifdef SS_HAS_THICKNESS
1558
+ float ior=vRefractionInfos.y;
1559
+ #else
1560
+ float ior=vRefractionMicrosurfaceInfos.w;
1561
+ #endif
1562
+ #ifdef SS_LODINREFRACTIONALPHA
1563
+ float refractionAlphaG=alphaG;refractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));float refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG,NdotVUnclamped);
1564
+ #elif defined(SS_LINEARSPECULARREFRACTION)
1565
+ float refractionRoughness=alphaG;refractionRoughness=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));float refractionLOD=getLinearLodFromRoughness(vRefractionMicrosurfaceInfos.x,refractionRoughness);
1566
+ #else
1567
+ float refractionAlphaG=alphaG;refractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));float refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG);
1568
+ #endif
1569
+ float refraction_ior=vRefractionInfos.y;
1570
+ #ifdef SS_DISPERSION
1571
+ float realIOR=1.0/refraction_ior;float iorDispersionSpread=0.04*dispersion*(realIOR-1.0);vec3 iors=vec3(1.0/(realIOR-iorDispersionSpread),refraction_ior,1.0/(realIOR+iorDispersionSpread));for (int i=0; i<3; i++) {refraction_ior=iors[i];
1572
+ #endif
1573
+ vec4 envSample=sampleEnvironmentRefraction(refraction_ior,thickness,refractionLOD,normalW,vPositionW,viewDirectionW,view,vRefractionInfos,refractionMatrix,vRefractionMicrosurfaceInfos,alphaG
1574
+ #ifdef SS_REFRACTIONMAP_3D
1575
+ ,refractionSampler
1576
+ #ifndef LODBASEDMICROSFURACE
1577
+ ,refractionSamplerLow
1578
+ ,refractionSamplerHigh
1579
+ #endif
1580
+ #else
1581
+ ,refractionSampler
1582
+ #ifndef LODBASEDMICROSFURACE
1583
+ ,refractionSamplerLow
1584
+ ,refractionSamplerHigh
1585
+ #endif
1586
+ #endif
1587
+ #ifdef ANISOTROPIC
1588
+ ,anisotropicOut
1589
+ #endif
1590
+ #ifdef REALTIME_FILTERING
1591
+ ,vRefractionFilteringInfo
1592
+ #endif
1593
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1594
+ ,refractionPosition
1595
+ ,refractionSize
1596
+ #endif
1597
+ );
1598
+ #ifdef SS_DISPERSION
1599
+ environmentRefraction[i]=envSample[i];}
1600
+ #else
1601
+ environmentRefraction=envSample;
1602
+ #endif
1603
+ environmentRefraction.rgb*=vRefractionInfos.x;
1604
+ #endif
1605
+ #ifdef SS_REFRACTION
1606
+ vec3 refractionTransmittance=vec3(refractionIntensity);
1607
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1608
+ vec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);refractionTransmittance*=cocaLambert(volumeAlbedo,thickness);
1609
+ #elif defined(SS_LINKREFRACTIONTOTRANSPARENCY)
1610
+ float maxChannel=max(max(surfaceAlbedo.r,surfaceAlbedo.g),surfaceAlbedo.b);vec3 volumeAlbedo=saturate(maxChannel*surfaceAlbedo);environmentRefraction.rgb*=volumeAlbedo;
1611
+ #else
1612
+ vec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);refractionTransmittance*=cocaLambert(volumeAlbedo,vThicknessParam.y);
1613
+ #endif
1614
+ #ifdef SS_ALBEDOFORREFRACTIONTINT
1615
+ environmentRefraction.rgb*=surfaceAlbedo.rgb;
1616
+ #endif
1617
+ outParams.surfaceAlbedo=surfaceAlbedo;outParams.refractionOpacity=1.-refractionIntensity;
1618
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
1619
+ outParams.surfaceAlbedo*=outParams.refractionOpacity;
1620
+ #endif
1621
+ #ifdef UNUSED_MULTIPLEBOUNCES
1622
+ vec3 bounceSpecularEnvironmentReflectance=(2.0*vSpecularEnvironmentReflectance)/(1.0+vSpecularEnvironmentReflectance);outParams.specularEnvironmentReflectance=mix(bounceSpecularEnvironmentReflectance,vSpecularEnvironmentReflectance,refractionIntensity);
1623
+ #endif
1624
+ #if DEBUGMODE>0
1625
+ outParams.refractionTransmittance=refractionTransmittance;
1626
+ #endif
1627
+ outParams.finalRefraction=environmentRefraction.rgb*refractionTransmittance*vLightingIntensity.z;outParams.finalRefraction*=vec3(1.0)-vSpecularEnvironmentReflectance;
1628
+ #if DEBUGMODE>0
1629
+ outParams.environmentRefraction=environmentRefraction;
1630
+ #endif
1631
+ #endif
1632
+ #if defined(REFLECTION) && defined(SS_TRANSLUCENCY)
1633
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX) || !defined(USESPHERICALFROMREFLECTIONMAP)
1634
+ vec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;
1635
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1636
+ irradianceVector.z*=-1.0;
1637
+ #endif
1638
+ #ifdef INVERTCUBICMAP
1639
+ irradianceVector.y*=-1.0;
1640
+ #endif
1641
+ #else
1642
+ vec3 irradianceVector=irradianceVector_;
1643
+ #endif
1644
+ #if defined(USESPHERICALFROMREFLECTIONMAP)
1645
+ #if defined(REALTIME_FILTERING)
1646
+ vec3 refractionIrradiance=irradiance(reflectionSampler,-irradianceVector,vReflectionFilteringInfo,0.0,surfaceAlbedo,irradianceVector
1647
+ #ifdef IBL_CDF_FILTERING
1648
+ ,icdfSampler
1649
+ #endif
1650
+ );
1651
+ #else
1652
+ vec3 refractionIrradiance=computeEnvironmentIrradiance(-irradianceVector);
1653
+ #endif
1654
+ #elif defined(USEIRRADIANCEMAP)
1655
+ #ifdef REFLECTIONMAP_3D
1656
+ vec3 irradianceCoords=irradianceVector;
1657
+ #else
1658
+ vec2 irradianceCoords=irradianceVector.xy;
1659
+ #ifdef REFLECTIONMAP_PROJECTION
1660
+ irradianceCoords/=irradianceVector.z;
1661
+ #endif
1662
+ irradianceCoords.y=1.0-irradianceCoords.y;
1663
+ #endif
1664
+ vec4 refractionIrradiance=sampleReflection(irradianceSampler,-irradianceCoords);
1665
+ #ifdef RGBDREFLECTION
1666
+ refractionIrradiance.rgb=fromRGBD(refractionIrradiance);
1667
+ #endif
1668
+ #ifdef GAMMAREFLECTION
1669
+ refractionIrradiance.rgb=toLinearSpace(refractionIrradiance.rgb);
1670
+ #endif
1671
+ #else
1672
+ vec4 refractionIrradiance=vec4(0.);
1673
+ #endif
1674
+ refractionIrradiance.rgb*=transmittance;
1675
+ #ifdef SS_ALBEDOFORTRANSLUCENCYTINT
1676
+ refractionIrradiance.rgb*=surfaceAlbedo.rgb;
1677
+ #endif
1678
+ outParams.refractionIrradiance=refractionIrradiance.rgb;
1679
+ #endif
1680
+ return outParams;}
1681
+ #endif
1682
+ `;i.ShaderStore.IncludesShadersStore[et]||(i.ShaderStore.IncludesShadersStore[et]=ec);var el=e.i(31463);let ed="pbrBlockReflectance0",es=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90;
1683
+ #ifdef ALPHAFRESNEL
1684
+ float reflectance90=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90;
1685
+ #endif
1686
+ `;i.ShaderStore.IncludesShadersStore[ed]||(i.ShaderStore.IncludesShadersStore[ed]=es);let eE="pbrClusteredLightingFunctions",eR=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
1687
+ #include<clusteredLightingFunctions>
1688
+ #define inline
1689
+ lightingInfo computeClusteredLighting(
1690
+ sampler2D lightDataTexture,
1691
+ sampler2D tileMaskTexture,
1692
+ vec4 lightData,
1693
+ ivec2 sliceRange,
1694
+ vec3 V,
1695
+ vec3 N,
1696
+ vec3 posW,
1697
+ vec3 surfaceAlbedo,
1698
+ reflectivityOutParams reflectivityOut
1699
+ #ifdef IRIDESCENCE
1700
+ ,float iridescenceIntensity
1701
+ #endif
1702
+ #ifdef SS_TRANSLUCENCY
1703
+ ,subSurfaceOutParams subSurfaceOut
1704
+ #endif
1705
+ #ifdef SPECULARTERM
1706
+ ,float AARoughnessFactor
1707
+ #endif
1708
+ #ifdef ANISOTROPIC
1709
+ ,anisotropicOutParams anisotropicOut
1710
+ #endif
1711
+ #ifdef SHEEN
1712
+ ,sheenOutParams sheenOut
1713
+ #endif
1714
+ #ifdef CLEARCOAT
1715
+ ,clearcoatOutParams clearcoatOut
1716
+ #endif
1717
+ ) {float NdotV=absEps(dot(N,V));
1718
+ #include<pbrBlockReflectance0>
1719
+ #ifdef CLEARCOAT
1720
+ specularEnvironmentR0=clearcoatOut.specularEnvironmentR0;
1721
+ #endif
1722
+ lightingInfo result;ivec2 tilePosition=ivec2(gl_FragCoord.xy*lightData.xy);int maskHeight=int(lightData.z);tilePosition.y=min(tilePosition.y,maskHeight-1);ivec2 batchRange=sliceRange/CLUSTLIGHT_BATCH;int batchOffset=batchRange.x*CLUSTLIGHT_BATCH;tilePosition.y+=maskHeight*batchRange.x;for (int i=batchRange.x; i<=batchRange.y; i+=1) {uint mask=uint(texelFetch(tileMaskTexture,tilePosition,0).r);tilePosition.y+=maskHeight;int maskOffset=max(sliceRange.x-batchOffset,0);int maskWidth=min(sliceRange.y-batchOffset+1,CLUSTLIGHT_BATCH);mask=extractBits(mask,maskOffset,maskWidth);while (mask != 0u) {uint bit=mask & -mask;mask ^= bit;int position=onlyBitPosition(bit);ClusteredLight light=getClusteredLight(lightDataTexture,batchOffset+maskOffset+position);preLightingInfo preInfo=computePointAndSpotPreLightingInfo(light.vLightData,V,N,posW);preInfo.NdotV=NdotV;preInfo.attenuation=computeDistanceLightFalloff(preInfo.lightOffset,preInfo.lightDistanceSquared,light.vLightFalloff.x,light.vLightFalloff.y);if (light.vLightDirection.w>=0.0) {preInfo.attenuation*=computeDirectionalLightFalloff(light.vLightDirection.xyz,preInfo.L,light.vLightDirection.w,light.vLightData.w,light.vLightFalloff.z,light.vLightFalloff.w);}
1723
+ preInfo.roughness=adjustRoughnessFromLightProperties(reflectivityOut.roughness,light.vLightSpecular.a,preInfo.lightDistance);preInfo.diffuseRoughness=reflectivityOut.diffuseRoughness;preInfo.surfaceAlbedo=surfaceAlbedo;
1724
+ #ifdef IRIDESCENCE
1725
+ preInfo.iridescenceIntensity=iridescenceIntensity;
1726
+ #endif
1727
+ lightingInfo info;
1728
+ #ifdef SS_TRANSLUCENCY
1729
+ #ifdef SS_TRANSLUCENCY_LEGACY
1730
+ info.diffuse=computeDiffuseTransmittedLighting(preInfo,light.vLightDiffuse.rgb,subSurfaceOut.transmittance);info.diffuseTransmission=vec3(0);
1731
+ #else
1732
+ info.diffuse=computeDiffuseLighting(preInfo,light.vLightDiffuse.rgb)*(1.0-subSurfaceOut.translucencyIntensity);info.diffuseTransmission=computeDiffuseTransmittedLighting(preInfo,light.vLightDiffuse.rgb,subSurfaceOut.transmittance);
1733
+ #endif
1734
+ #else
1735
+ info.diffuse=computeDiffuseLighting(preInfo,light.vLightDiffuse.rgb);
1736
+ #endif
1737
+ #ifdef SPECULARTERM
1738
+ #if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR
1739
+ vec3 metalFresnel=reflectivityOut.specularWeight*getF82Specular(preInfo.VdotH,specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);vec3 dielectricFresnel=fresnelSchlickGGX(preInfo.VdotH,reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90);vec3 coloredFresnel=mix(dielectricFresnel,metalFresnel,reflectivityOut.metallic);
1740
+ #else
1741
+ vec3 coloredFresnel=fresnelSchlickGGX(preInfo.VdotH,specularEnvironmentR0,reflectivityOut.colorReflectanceF90);
1742
+ #endif
1743
+ #ifndef LEGACY_SPECULAR_ENERGY_CONSERVATION
1744
+ float NdotH=dot(N,preInfo.H);vec3 fresnel=fresnelSchlickGGX(NdotH,vec3(reflectanceF0),specularEnvironmentR90);info.diffuse*=(vec3(1.0)-fresnel);
1745
+ #endif
1746
+ #ifdef ANISOTROPIC
1747
+ info.specular=computeAnisotropicSpecularLighting(preInfo,V,N,anisotropicOut.anisotropicTangent,anisotropicOut.anisotropicBitangent,anisotropicOut.anisotropy,specularEnvironmentR0,specularEnvironmentR90,AARoughnessFactor,light.vLightDiffuse.rgb);
1748
+ #else
1749
+ info.specular=computeSpecularLighting(preInfo,N,specularEnvironmentR0,coloredFresnel,AARoughnessFactor,light.vLightDiffuse.rgb);
1750
+ #endif
1751
+ #endif
1752
+ #ifdef SHEEN
1753
+ #ifdef SHEEN_LINKWITHALBEDO
1754
+ preInfo.roughness=sheenOut.sheenIntensity;
1755
+ #else
1756
+ preInfo.roughness=adjustRoughnessFromLightProperties(sheenOut.sheenRoughness,light.vLightSpecular.a,preInfo.lightDistance);
1757
+ #endif
1758
+ info.sheen=computeSheenLighting(preInfo,normalW,sheenOut.sheenColor,specularEnvironmentR90,AARoughnessFactor,light.vLightDiffuse.rgb);
1759
+ #endif
1760
+ #ifdef CLEARCOAT
1761
+ preInfo.roughness=adjustRoughnessFromLightProperties(clearcoatOut.clearCoatRoughness,light.vLightSpecular.a,preInfo.lightDistance);info.clearCoat=computeClearCoatLighting(preInfo,clearcoatOut.clearCoatNormalW,clearcoatOut.clearCoatAARoughnessFactors.x,clearcoatOut.clearCoatIntensity,light.vLightDiffuse.rgb);
1762
+ #ifdef CLEARCOAT_TINT
1763
+ float absorption=computeClearCoatLightingAbsorption(clearcoatOut.clearCoatNdotVRefract,preInfo.L,clearcoatOut.clearCoatNormalW,clearcoatOut.clearCoatColor,clearcoatOut.clearCoatThickness,clearcoatOut.clearCoatIntensity);info.diffuse*=absorption;
1764
+ #ifdef SS_TRANSLUCENCY
1765
+ info.diffuseTransmission*=absorption;
1766
+ #endif
1767
+ #ifdef SPECULARTERM
1768
+ info.specular*=absorption;
1769
+ #endif
1770
+ #endif
1771
+ info.diffuse*=info.clearCoat.w;
1772
+ #ifdef SS_TRANSLUCENCY
1773
+ info.diffuseTransmission*=info.clearCoat.w;
1774
+ #endif
1775
+ #ifdef SPECULARTERM
1776
+ info.specular*=info.clearCoat.w;
1777
+ #endif
1778
+ #ifdef SHEEN
1779
+ info.sheen*=info.clearCoat.w;
1780
+ #endif
1781
+ #endif
1782
+ result.diffuse+=info.diffuse;
1783
+ #ifdef SS_TRANSLUCENCY
1784
+ result.diffuseTransmission+=info.diffuseTransmission;
1785
+ #endif
1786
+ #ifdef SPECULARTERM
1787
+ result.specular+=info.specular;
1788
+ #endif
1789
+ #ifdef CLEARCOAT
1790
+ result.clearCoat+=info.clearCoat;
1791
+ #endif
1792
+ #ifdef SHEEN
1793
+ result.sheen+=info.sheen;
1794
+ #endif
1795
+ }
1796
+ batchOffset+=CLUSTLIGHT_BATCH;}
1797
+ return result;}
1798
+ #endif
1799
+ `;i.ShaderStore.IncludesShadersStore[eE]||(i.ShaderStore.IncludesShadersStore[eE]=eR);var eS=e.i(69838),eC=e.i(26873),eu=e.i(149);let eA="pbrBlockNormalFinal",eI=`#if defined(FORCENORMALFORWARD) && defined(NORMAL)
1800
+ vec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;
1801
+ #if defined(TWOSIDEDLIGHTING)
1802
+ faceNormal=gl_FrontFacing ? faceNormal : -faceNormal;
1803
+ #endif
1804
+ normalW*=sign(dot(normalW,faceNormal));
1805
+ #endif
1806
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
1807
+ #if defined(MIRRORED)
1808
+ normalW=gl_FrontFacing ? -normalW : normalW;
1809
+ #else
1810
+ normalW=gl_FrontFacing ? normalW : -normalW;
1811
+ #endif
1812
+ #endif
1813
+ `;i.ShaderStore.IncludesShadersStore[eA]||(i.ShaderStore.IncludesShadersStore[eA]=eI);var em=e.i(76286);let ev="pbrBlockLightmapInit",eT=`#ifdef LIGHTMAP
1814
+ vec4 lightmapColor=TEXRD(lightmapSampler,vLightmapUV+uvOffset);
1815
+ #ifdef RGBDLIGHTMAP
1816
+ lightmapColor.rgb=fromRGBD(lightmapColor);
1817
+ #endif
1818
+ #ifdef GAMMALIGHTMAP
1819
+ lightmapColor.rgb=toLinearSpace(lightmapColor.rgb);
1820
+ #endif
1821
+ lightmapColor.rgb*=vLightmapInfos.y;
1822
+ #endif
1823
+ `;i.ShaderStore.IncludesShadersStore[ev]||(i.ShaderStore.IncludesShadersStore[ev]=eT);let eN="pbrBlockGeometryInfo",eO=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz);
1824
+ #ifdef SPECULARAA
1825
+ alphaG+=AARoughnessFactors.y;
1826
+ #endif
1827
+ #if defined(ENVIRONMENTBRDF)
1828
+ vec3 environmentBrdf=getBRDFLookup(NdotV,roughness);
1829
+ #endif
1830
+ #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
1831
+ #ifdef RADIANCEOCCLUSION
1832
+ #ifdef AMBIENTINGRAYSCALE
1833
+ float ambientMonochrome=aoOut.ambientOcclusionColor.r;
1834
+ #else
1835
+ float ambientMonochrome=getLuminance(aoOut.ambientOcclusionColor);
1836
+ #endif
1837
+ float seo=environmentRadianceOcclusion(ambientMonochrome,NdotVUnclamped);
1838
+ #endif
1839
+ #ifdef HORIZONOCCLUSION
1840
+ #ifdef BUMP
1841
+ #ifdef REFLECTIONMAP_3D
1842
+ float eho=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
1843
+ #endif
1844
+ #endif
1845
+ #endif
1846
+ #endif
1847
+ `;i.ShaderStore.IncludesShadersStore[eN]||(i.ShaderStore.IncludesShadersStore[eN]=eO);let ep="pbrBlockReflectance",eL=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
1848
+ vec3 baseSpecularEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(reflectanceF0),reflectivityOut.reflectanceF90,environmentBrdf);
1849
+ #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
1850
+ vec3 metalEnvironmentReflectance=reflectivityOut.specularWeight*getF82Specular(NdotV,clearcoatOut.specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);vec3 dielectricEnvironmentReflectance=getReflectanceFromBRDFLookup(reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90,environmentBrdf);vec3 colorSpecularEnvironmentReflectance=mix(dielectricEnvironmentReflectance,metalEnvironmentReflectance,reflectivityOut.metallic);
1851
+ #else
1852
+ vec3 colorSpecularEnvironmentReflectance=getReflectanceFromBRDFLookup(clearcoatOut.specularEnvironmentR0,reflectivityOut.colorReflectanceF90,environmentBrdf);
1853
+ #endif
1854
+ #ifdef RADIANCEOCCLUSION
1855
+ colorSpecularEnvironmentReflectance*=seo;
1856
+ #endif
1857
+ #ifdef HORIZONOCCLUSION
1858
+ #ifdef BUMP
1859
+ #ifdef REFLECTIONMAP_3D
1860
+ colorSpecularEnvironmentReflectance*=eho;
1861
+ #endif
1862
+ #endif
1863
+ #endif
1864
+ #else
1865
+ vec3 colorSpecularEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(NdotV,clearcoatOut.specularEnvironmentR0,specularEnvironmentR90,sqrt(microSurface));vec3 baseSpecularEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(NdotV,vec3(reflectanceF0),reflectivityOut.reflectanceF90,sqrt(microSurface));
1866
+ #endif
1867
+ #ifdef CLEARCOAT
1868
+ colorSpecularEnvironmentReflectance*=clearcoatOut.conservationFactor;
1869
+ #if defined(CLEARCOAT_TINT)
1870
+ colorSpecularEnvironmentReflectance*=clearcoatOut.absorption;
1871
+ #endif
1872
+ #endif
1873
+ `;i.ShaderStore.IncludesShadersStore[ep]||(i.ShaderStore.IncludesShadersStore[ep]=eL);let e_="pbrBlockDirectLighting",eD=`vec3 diffuseBase=vec3(0.,0.,0.);
1874
+ #ifdef SS_TRANSLUCENCY
1875
+ vec3 diffuseTransmissionBase=vec3(0.,0.,0.);
1876
+ #endif
1877
+ #ifdef SPECULARTERM
1878
+ vec3 specularBase=vec3(0.,0.,0.);
1879
+ #endif
1880
+ #ifdef CLEARCOAT
1881
+ vec3 clearCoatBase=vec3(0.,0.,0.);
1882
+ #endif
1883
+ #ifdef SHEEN
1884
+ vec3 sheenBase=vec3(0.,0.,0.);
1885
+ #endif
1886
+ #if defined(SPECULARTERM) && defined(LIGHT0)
1887
+ vec3 coloredFresnel;
1888
+ #endif
1889
+ preLightingInfo preInfo;lightingInfo info;float shadow=1.;
1890
+ float aggShadow=0.;float numLights=0.;
1891
+ #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
1892
+ vec3 absorption=vec3(0.);
1893
+ #endif
1894
+ `;i.ShaderStore.IncludesShadersStore[e_]||(i.ShaderStore.IncludesShadersStore[e_]=eD);var eM=e.i(73717);let eh="pbrBlockFinalLitComponents",eF=`aggShadow=aggShadow/numLights;
1895
+ #if defined(ENVIRONMENTBRDF)
1896
+ #ifdef MS_BRDF_ENERGY_CONSERVATION
1897
+ vec3 baseSpecularEnergyConservationFactor=getEnergyConservationFactor(vec3(reflectanceF0),environmentBrdf);vec3 coloredEnergyConservationFactor=getEnergyConservationFactor(clearcoatOut.specularEnvironmentR0,environmentBrdf);
1898
+ #endif
1899
+ #endif
1900
+ #if defined(SHEEN) && defined(SHEEN_ALBEDOSCALING) && defined(ENVIRONMENTBRDF)
1901
+ surfaceAlbedo.rgb=sheenOut.sheenAlbedoScaling*surfaceAlbedo.rgb;
1902
+ #endif
1903
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
1904
+ #ifndef METALLICWORKFLOW
1905
+ #ifdef SPECULAR_GLOSSINESS_ENERGY_CONSERVATION
1906
+ surfaceAlbedo.rgb=(1.-reflectanceF0)*surfaceAlbedo.rgb;
1907
+ #endif
1908
+ #endif
1909
+ #endif
1910
+ #ifdef REFLECTION
1911
+ vec3 finalIrradiance=reflectionOut.environmentIrradiance;
1912
+ #ifndef LEGACY_SPECULAR_ENERGY_CONSERVATION
1913
+ #if defined(METALLICWORKFLOW) || defined(SPECULAR_GLOSSINESS_ENERGY_CONSERVATION)
1914
+ vec3 baseSpecularEnergy=vec3(baseSpecularEnvironmentReflectance);
1915
+ #if defined(ENVIRONMENTBRDF)
1916
+ #ifdef MS_BRDF_ENERGY_CONSERVATION
1917
+ baseSpecularEnergy*=baseSpecularEnergyConservationFactor;
1918
+ #endif
1919
+ #endif
1920
+ finalIrradiance*=clamp(vec3(1.0)-baseSpecularEnergy,0.0,1.0);
1921
+ #endif
1922
+ #endif
1923
+ #if defined(CLEARCOAT)
1924
+ finalIrradiance*=clearcoatOut.conservationFactor;
1925
+ #if defined(CLEARCOAT_TINT)
1926
+ finalIrradiance*=clearcoatOut.absorption;
1927
+ #endif
1928
+ #endif
1929
+ #ifndef SS_APPLY_ALBEDO_AFTER_SUBSURFACE
1930
+ finalIrradiance*=surfaceAlbedo.rgb;
1931
+ #endif
1932
+ #if defined(SS_REFRACTION) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION)
1933
+ finalIrradiance*=subSurfaceOut.refractionOpacity;
1934
+ #endif
1935
+ #if defined(SS_TRANSLUCENCY)
1936
+ finalIrradiance*=(1.0-subSurfaceOut.translucencyIntensity);finalIrradiance+=subSurfaceOut.refractionIrradiance;
1937
+ #endif
1938
+ #ifdef SS_APPLY_ALBEDO_AFTER_SUBSURFACE
1939
+ finalIrradiance*=surfaceAlbedo.rgb;
1940
+ #endif
1941
+ finalIrradiance*=vLightingIntensity.z;finalIrradiance*=aoOut.ambientOcclusionColor;
1942
+ #endif
1943
+ #ifdef SPECULARTERM
1944
+ vec3 finalSpecular=specularBase;finalSpecular=max(finalSpecular,0.0);vec3 finalSpecularScaled=finalSpecular*vLightingIntensity.x*vLightingIntensity.w;
1945
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1946
+ finalSpecularScaled*=coloredEnergyConservationFactor;
1947
+ #endif
1948
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1949
+ finalSpecularScaled*=sheenOut.sheenAlbedoScaling;
1950
+ #endif
1951
+ #endif
1952
+ #ifdef REFLECTION
1953
+ vec3 finalRadiance=reflectionOut.environmentRadiance.rgb;finalRadiance*=colorSpecularEnvironmentReflectance;vec3 finalRadianceScaled=finalRadiance*vLightingIntensity.z;
1954
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1955
+ finalRadianceScaled*=coloredEnergyConservationFactor;
1956
+ #endif
1957
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1958
+ finalRadianceScaled*=sheenOut.sheenAlbedoScaling;
1959
+ #endif
1960
+ #endif
1961
+ #ifdef SHEEN
1962
+ vec3 finalSheen=sheenBase*sheenOut.sheenColor;finalSheen=max(finalSheen,0.0);vec3 finalSheenScaled=finalSheen*vLightingIntensity.x*vLightingIntensity.w;
1963
+ #if defined(CLEARCOAT) && defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1964
+ sheenOut.finalSheenRadianceScaled*=clearcoatOut.conservationFactor;
1965
+ #if defined(CLEARCOAT_TINT)
1966
+ sheenOut.finalSheenRadianceScaled*=clearcoatOut.absorption;
1967
+ #endif
1968
+ #endif
1969
+ #endif
1970
+ #ifdef CLEARCOAT
1971
+ vec3 finalClearCoat=clearCoatBase;finalClearCoat=max(finalClearCoat,0.0);vec3 finalClearCoatScaled=finalClearCoat*vLightingIntensity.x*vLightingIntensity.w;
1972
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1973
+ finalClearCoatScaled*=clearcoatOut.energyConservationFactorClearCoat;
1974
+ #endif
1975
+ #ifdef SS_REFRACTION
1976
+ subSurfaceOut.finalRefraction*=clearcoatOut.conservationFactor;
1977
+ #ifdef CLEARCOAT_TINT
1978
+ subSurfaceOut.finalRefraction*=clearcoatOut.absorption;
1979
+ #endif
1980
+ #endif
1981
+ #endif
1982
+ #ifdef ALPHABLEND
1983
+ float luminanceOverAlpha=0.0;
1984
+ #if defined(REFLECTION) && defined(RADIANCEOVERALPHA)
1985
+ luminanceOverAlpha+=getLuminance(finalRadianceScaled);
1986
+ #if defined(CLEARCOAT)
1987
+ luminanceOverAlpha+=getLuminance(clearcoatOut.finalClearCoatRadianceScaled);
1988
+ #endif
1989
+ #endif
1990
+ #if defined(SPECULARTERM) && defined(SPECULAROVERALPHA)
1991
+ luminanceOverAlpha+=getLuminance(finalSpecularScaled);
1992
+ #endif
1993
+ #if defined(CLEARCOAT) && defined(CLEARCOATOVERALPHA)
1994
+ luminanceOverAlpha+=getLuminance(finalClearCoatScaled);
1995
+ #endif
1996
+ #if defined(RADIANCEOVERALPHA) || defined(SPECULAROVERALPHA) || defined(CLEARCOATOVERALPHA)
1997
+ alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha);
1998
+ #endif
1999
+ #endif
2000
+ `;i.ShaderStore.IncludesShadersStore[eh]||(i.ShaderStore.IncludesShadersStore[eh]=eF);let eg="pbrBlockFinalUnlitComponents",eP=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo;
2001
+ #if defined(SS_REFRACTION) && !defined(UNLIT) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION)
2002
+ finalDiffuse*=subSurfaceOut.refractionOpacity;
2003
+ #endif
2004
+ #if defined(SS_TRANSLUCENCY) && !defined(UNLIT)
2005
+ finalDiffuse+=diffuseTransmissionBase;
2006
+ #endif
2007
+ finalDiffuse=max(finalDiffuse,0.0);finalDiffuse*=vLightingIntensity.x;vec3 finalAmbient=vAmbientColor;finalAmbient*=surfaceAlbedo.rgb;vec3 finalEmissive=vEmissiveColor;
2008
+ #ifdef EMISSIVE
2009
+ vec3 emissiveColorTex=TEXRD(emissiveSampler,vEmissiveUV+uvOffset).rgb;
2010
+ #ifdef GAMMAEMISSIVE
2011
+ finalEmissive*=toLinearSpace(emissiveColorTex.rgb);
2012
+ #else
2013
+ finalEmissive*=emissiveColorTex.rgb;
2014
+ #endif
2015
+ finalEmissive*= vEmissiveInfos.y;
2016
+ #endif
2017
+ finalEmissive*=vLightingIntensity.y;
2018
+ #ifdef AMBIENT
2019
+ vec3 ambientOcclusionForDirectDiffuse=mix(vec3(1.),aoOut.ambientOcclusionColor,vAmbientInfos.w);
2020
+ #else
2021
+ vec3 ambientOcclusionForDirectDiffuse=aoOut.ambientOcclusionColor;
2022
+ #endif
2023
+ finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse;
2024
+ `;i.ShaderStore.IncludesShadersStore[eg]||(i.ShaderStore.IncludesShadersStore[eg]=eP);let eU="pbrBlockFinalColorComposition",eb=`vec4 finalColor=vec4(
2025
+ #ifndef UNLIT
2026
+ #ifdef REFLECTION
2027
+ finalIrradiance +
2028
+ #endif
2029
+ #ifdef SPECULARTERM
2030
+ finalSpecularScaled +
2031
+ #endif
2032
+ #ifdef SHEEN
2033
+ finalSheenScaled +
2034
+ #endif
2035
+ #ifdef CLEARCOAT
2036
+ finalClearCoatScaled +
2037
+ #endif
2038
+ #ifdef REFLECTION
2039
+ finalRadianceScaled +
2040
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF)
2041
+ sheenOut.finalSheenRadianceScaled +
2042
+ #endif
2043
+ #ifdef CLEARCOAT
2044
+ clearcoatOut.finalClearCoatRadianceScaled +
2045
+ #endif
2046
+ #endif
2047
+ #ifdef SS_REFRACTION
2048
+ subSurfaceOut.finalRefraction +
2049
+ #endif
2050
+ #endif
2051
+ finalAmbient +
2052
+ finalDiffuse,
2053
+ alpha);
2054
+ #ifdef LIGHTMAP
2055
+ #ifndef LIGHTMAPEXCLUDED
2056
+ #ifdef USELIGHTMAPASSHADOWMAP
2057
+ finalColor.rgb*=lightmapColor.rgb;
2058
+ #else
2059
+ finalColor.rgb+=lightmapColor.rgb;
2060
+ #endif
2061
+ #endif
2062
+ #endif
2063
+ finalColor.rgb+=finalEmissive;
2064
+ #define CUSTOM_FRAGMENT_BEFORE_FOG
2065
+ finalColor=max(finalColor,0.0);
2066
+ `;i.ShaderStore.IncludesShadersStore[eU]||(i.ShaderStore.IncludesShadersStore[eU]=eb);var ey=e.i(68695),eB=e.i(40671),eG=e.i(53251);let eV="pbrBlockPrePass",eH=`#if SCENE_MRT_COUNT>0
2067
+ float writeGeometryInfo=finalColor.a>ALPHATESTVALUE ? 1.0 : 0.0;
2068
+ #ifdef PREPASS_POSITION
2069
+ gl_FragData[PREPASS_POSITION_INDEX]=vec4(vPositionW,writeGeometryInfo);
2070
+ #endif
2071
+ #ifdef PREPASS_LOCAL_POSITION
2072
+ gl_FragData[PREPASS_LOCAL_POSITION_INDEX]=vec4(vPosition,writeGeometryInfo);
2073
+ #endif
2074
+ #if defined(PREPASS_VELOCITY)
2075
+ 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[PREPASS_VELOCITY_INDEX]=vec4(velocity,0.0,writeGeometryInfo);
2076
+ #elif defined(PREPASS_VELOCITY_LINEAR)
2077
+ vec2 velocity=vec2(0.5)*((vPreviousPosition.xy/vPreviousPosition.w)-(vCurrentPosition.xy/vCurrentPosition.w));gl_FragData[PREPASS_VELOCITY_LINEAR_INDEX]=vec4(velocity,0.0,writeGeometryInfo);
2078
+ #endif
2079
+ #ifdef PREPASS_ALBEDO
2080
+ gl_FragData[PREPASS_ALBEDO_INDEX]=vec4(surfaceAlbedo,writeGeometryInfo);
2081
+ #endif
2082
+ #ifdef PREPASS_ALBEDO_SQRT
2083
+ vec3 sqAlbedo=sqrt(surfaceAlbedo);
2084
+ #endif
2085
+ #ifdef PREPASS_IRRADIANCE_LEGACY
2086
+ vec3 irradiance=finalDiffuse;
2087
+ #ifndef UNLIT
2088
+ #ifdef REFLECTION
2089
+ irradiance+=finalIrradiance;
2090
+ #endif
2091
+ #endif
2092
+ #ifdef SS_SCATTERING
2093
+ #ifdef PREPASS_COLOR
2094
+ gl_FragData[PREPASS_COLOR_INDEX]=vec4(finalColor.rgb-irradiance,finalColor.a);
2095
+ #endif
2096
+ irradiance/=sqAlbedo;
2097
+ #else
2098
+ #ifdef PREPASS_COLOR
2099
+ gl_FragData[PREPASS_COLOR_INDEX]=finalColor;
2100
+ #endif
2101
+ float scatteringDiffusionProfile=255.;
2102
+ #endif
2103
+ gl_FragData[PREPASS_IRRADIANCE_LEGACY_INDEX]=vec4(clamp(irradiance,vec3(0.),vec3(1.)),writeGeometryInfo*scatteringDiffusionProfile/255.);
2104
+ #else
2105
+ #ifdef PREPASS_IRRADIANCE
2106
+ vec3 irradiance=finalDiffuse;
2107
+ #ifndef UNLIT
2108
+ #ifdef REFLECTION
2109
+ irradiance+=finalIrradiance;
2110
+ #endif
2111
+ #endif
2112
+ gl_FragData[PREPASS_IRRADIANCE_INDEX]=vec4(irradiance,writeGeometryInfo);
2113
+ #endif
2114
+ #if defined(PREPASS_COLOR)
2115
+ gl_FragData[PREPASS_COLOR_INDEX]=vec4(finalColor.rgb,finalColor.a);
2116
+ #endif
2117
+ #endif
2118
+ #ifdef PREPASS_DEPTH
2119
+ gl_FragData[PREPASS_DEPTH_INDEX]=vec4(vViewPos.z,0.0,0.0,writeGeometryInfo);
2120
+ #endif
2121
+ #ifdef PREPASS_SCREENSPACE_DEPTH
2122
+ gl_FragData[PREPASS_SCREENSPACE_DEPTH_INDEX]=vec4(gl_FragCoord.z,0.0,0.0,writeGeometryInfo);
2123
+ #endif
2124
+ #ifdef PREPASS_NORMALIZED_VIEW_DEPTH
2125
+ gl_FragData[PREPASS_NORMALIZED_VIEW_DEPTH_INDEX]=vec4(vNormViewDepth,0.0,0.0,writeGeometryInfo);
2126
+ #endif
2127
+ #ifdef PREPASS_NORMAL
2128
+ #ifdef PREPASS_NORMAL_WORLDSPACE
2129
+ gl_FragData[PREPASS_NORMAL_INDEX]=vec4(normalW,writeGeometryInfo);
2130
+ #else
2131
+ gl_FragData[PREPASS_NORMAL_INDEX]=vec4(normalize((view*vec4(normalW,0.0)).rgb),writeGeometryInfo);
2132
+ #endif
2133
+ #endif
2134
+ #ifdef PREPASS_WORLD_NORMAL
2135
+ gl_FragData[PREPASS_WORLD_NORMAL_INDEX]=vec4(normalW*0.5+0.5,writeGeometryInfo);
2136
+ #endif
2137
+ #ifdef PREPASS_ALBEDO_SQRT
2138
+ gl_FragData[PREPASS_ALBEDO_SQRT_INDEX]=vec4(sqAlbedo,writeGeometryInfo);
2139
+ #endif
2140
+ #ifdef PREPASS_REFLECTIVITY
2141
+ #ifndef UNLIT
2142
+ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4(specularEnvironmentR0,microSurface)*writeGeometryInfo;
2143
+ #else
2144
+ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4( 0.0,0.0,0.0,1.0 )*writeGeometryInfo;
2145
+ #endif
2146
+ #endif
2147
+ #endif
2148
+ `;i.ShaderStore.IncludesShadersStore[eV]||(i.ShaderStore.IncludesShadersStore[eV]=eH);var ex=e.i(19310),eX=e.i(3291);let eW="pbrPixelShader",eY=`#define PBR_FRAGMENT_SHADER
2149
+ #define CUSTOM_FRAGMENT_EXTENSION
2150
+ #if defined(BUMP) || !defined(NORMAL) || defined(FORCENORMALFORWARD) || defined(SPECULARAA) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC)
2151
+ #extension GL_OES_standard_derivatives : enable
2152
+ #endif
2153
+ #ifdef LODBASEDMICROSFURACE
2154
+ #extension GL_EXT_shader_texture_lod : enable
2155
+ #endif
2156
+ #define CUSTOM_FRAGMENT_BEGIN
2157
+ #ifdef LOGARITHMICDEPTH
2158
+ #extension GL_EXT_frag_depth : enable
2159
+ #endif
2160
+ #if SCENE_MRT_COUNT>0
2161
+ #include<prePassDeclaration>[SCENE_MRT_COUNT]
2162
+ #endif
2163
+ precision highp float;
2164
+ #include<oitDeclaration>
2165
+ #ifndef FROMLINEARSPACE
2166
+ #define FROMLINEARSPACE
2167
+ #endif
2168
+ #include<__decl__pbrFragment>
2169
+ #include<pbrFragmentExtraDeclaration>
2170
+ #include<__decl__lightFragment>[0..maxSimultaneousLights]
2171
+ #include<pbrFragmentSamplersDeclaration>
2172
+ #include<imageProcessingDeclaration>
2173
+ #include<clipPlaneFragmentDeclaration>
2174
+ #include<logDepthDeclaration>
2175
+ #include<fogFragmentDeclaration>
2176
+ #include<textureRepetitionFunctions>
2177
+ #include<helperFunctions>
2178
+ #include<subSurfaceScatteringFunctions>
2179
+ #include<importanceSampling>
2180
+ #include<pbrHelperFunctions>
2181
+ #include<imageProcessingFunctions>
2182
+ #include<shadowsFragmentFunctions>
2183
+ #include<harmonicsFunctions>
2184
+ #include<pbrDirectLightingSetupFunctions>
2185
+ #include<pbrDirectLightingFalloffFunctions>
2186
+ #include<pbrBRDFFunctions>
2187
+ #include<hdrFilteringFunctions>
2188
+ #include<pbrDirectLightingFunctions>
2189
+ #include<pbrIBLFunctions>
2190
+ #include<bumpFragmentMainFunctions>
2191
+ #include<bumpFragmentFunctions>
2192
+ #ifdef REFLECTION
2193
+ #include<reflectionFunction>
2194
+ #endif
2195
+ #define CUSTOM_FRAGMENT_DEFINITIONS
2196
+ #include<pbrBlockAlbedoOpacity>
2197
+ #include<pbrBlockReflectivity>
2198
+ #include<pbrBlockAmbientOcclusion>
2199
+ #include<pbrBlockAlphaFresnel>
2200
+ #include<pbrBlockAnisotropic>
2201
+ #include<pbrBlockReflection>
2202
+ #include<pbrBlockSheen>
2203
+ #include<pbrBlockClearcoat>
2204
+ #include<pbrBlockIridescence>
2205
+ #include<pbrBlockSubSurface>
2206
+ #include<pbrClusteredLightingFunctions>
2207
+ void main(void) {
2208
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
2209
+ #include<clipPlaneFragment>
2210
+ #include<pbrBlockNormalGeometric>
2211
+ #include<bumpFragment>
2212
+ #include<pbrBlockNormalFinal>
2213
+ albedoOpacityOutParams albedoOpacityOut;
2214
+ #ifdef ALBEDO
2215
+ vec4 albedoTexture=TEXRD(albedoSampler,vAlbedoUV+uvOffset);
2216
+ #endif
2217
+ #ifdef BASE_WEIGHT
2218
+ vec4 baseWeightTexture=TEXRD(baseWeightSampler,vBaseWeightUV+uvOffset);
2219
+ #endif
2220
+ #ifdef OPACITY
2221
+ vec4 opacityMap=TEXRD(opacitySampler,vOpacityUV+uvOffset);
2222
+ #endif
2223
+ #ifdef DECAL
2224
+ vec4 decalColor=texture2D(decalSampler,vDecalUV+uvOffset);
2225
+ #endif
2226
+ albedoOpacityOut=albedoOpacityBlock(
2227
+ vAlbedoColor
2228
+ #ifdef ALBEDO
2229
+ ,albedoTexture
2230
+ ,vAlbedoInfos
2231
+ #endif
2232
+ ,baseWeight
2233
+ #ifdef BASE_WEIGHT
2234
+ ,baseWeightTexture
2235
+ ,vBaseWeightInfos
2236
+ #endif
2237
+ #ifdef OPACITY
2238
+ ,opacityMap
2239
+ ,vOpacityInfos
2240
+ #endif
2241
+ #ifdef DETAIL
2242
+ ,detailColor
2243
+ ,vDetailInfos
2244
+ #endif
2245
+ #ifdef DECAL
2246
+ ,decalColor
2247
+ ,vDecalInfos
2248
+ #endif
2249
+ );vec3 surfaceAlbedo=albedoOpacityOut.surfaceAlbedo;float alpha=albedoOpacityOut.alpha;
2250
+ #define CUSTOM_FRAGMENT_UPDATE_ALPHA
2251
+ #include<depthPrePass>
2252
+ #define CUSTOM_FRAGMENT_BEFORE_LIGHTS
2253
+ ambientOcclusionOutParams aoOut;
2254
+ #ifdef AMBIENT
2255
+ vec3 ambientOcclusionColorMap=TEXRD(ambientSampler,vAmbientUV+uvOffset).rgb;
2256
+ #endif
2257
+ aoOut=ambientOcclusionBlock(
2258
+ #ifdef AMBIENT
2259
+ ambientOcclusionColorMap,
2260
+ vAmbientInfos
2261
+ #endif
2262
+ );
2263
+ #include<pbrBlockLightmapInit>
2264
+ #ifdef UNLIT
2265
+ vec3 diffuseBase=vec3(1.,1.,1.);
2266
+ #else
2267
+ vec3 baseColor=surfaceAlbedo;reflectivityOutParams reflectivityOut;
2268
+ #if defined(REFLECTIVITY)
2269
+ vec4 surfaceMetallicOrReflectivityColorMap=TEXRD(reflectivitySampler,vReflectivityUV+uvOffset);vec4 baseReflectivity=surfaceMetallicOrReflectivityColorMap;
2270
+ #ifndef METALLICWORKFLOW
2271
+ #ifdef REFLECTIVITY_GAMMA
2272
+ surfaceMetallicOrReflectivityColorMap=toLinearSpace(surfaceMetallicOrReflectivityColorMap);
2273
+ #endif
2274
+ surfaceMetallicOrReflectivityColorMap.rgb*=vReflectivityInfos.y;
2275
+ #endif
2276
+ #endif
2277
+ #if defined(MICROSURFACEMAP)
2278
+ vec4 microSurfaceTexel=TEXRD(microSurfaceSampler,vMicroSurfaceSamplerUV+uvOffset)*vMicroSurfaceSamplerInfos.y;
2279
+ #endif
2280
+ #ifdef METALLICWORKFLOW
2281
+ vec4 metallicReflectanceFactors=vMetallicReflectanceFactors;
2282
+ #ifdef REFLECTANCE
2283
+ vec4 reflectanceFactorsMap=TEXRD(reflectanceSampler,vReflectanceUV+uvOffset);
2284
+ #ifdef REFLECTANCE_GAMMA
2285
+ reflectanceFactorsMap=toLinearSpace(reflectanceFactorsMap);
2286
+ #endif
2287
+ metallicReflectanceFactors.rgb*=reflectanceFactorsMap.rgb;
2288
+ #endif
2289
+ #ifdef METALLIC_REFLECTANCE
2290
+ vec4 metallicReflectanceFactorsMap=TEXRD(metallicReflectanceSampler,vMetallicReflectanceUV+uvOffset);
2291
+ #ifdef METALLIC_REFLECTANCE_GAMMA
2292
+ metallicReflectanceFactorsMap=toLinearSpace(metallicReflectanceFactorsMap);
2293
+ #endif
2294
+ #ifndef METALLIC_REFLECTANCE_USE_ALPHA_ONLY
2295
+ metallicReflectanceFactors.rgb*=metallicReflectanceFactorsMap.rgb;
2296
+ #endif
2297
+ metallicReflectanceFactors.a*=metallicReflectanceFactorsMap.a;
2298
+ #endif
2299
+ #endif
2300
+ #ifdef BASE_DIFFUSE_ROUGHNESS
2301
+ float baseDiffuseRoughnessTexture=TEXRD(baseDiffuseRoughnessSampler,vBaseDiffuseRoughnessUV+uvOffset).r;
2302
+ #endif
2303
+ reflectivityOut=reflectivityBlock(
2304
+ vReflectivityColor
2305
+ #ifdef METALLICWORKFLOW
2306
+ ,surfaceAlbedo
2307
+ ,metallicReflectanceFactors
2308
+ #endif
2309
+ ,baseDiffuseRoughness
2310
+ #ifdef BASE_DIFFUSE_ROUGHNESS
2311
+ ,baseDiffuseRoughnessTexture
2312
+ ,vBaseDiffuseRoughnessInfos
2313
+ #endif
2314
+ #ifdef REFLECTIVITY
2315
+ ,vReflectivityInfos
2316
+ ,surfaceMetallicOrReflectivityColorMap
2317
+ #endif
2318
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
2319
+ ,aoOut.ambientOcclusionColor
2320
+ #endif
2321
+ #ifdef MICROSURFACEMAP
2322
+ ,microSurfaceTexel
2323
+ #endif
2324
+ #ifdef DETAIL
2325
+ ,detailColor
2326
+ ,vDetailInfos
2327
+ #endif
2328
+ );float microSurface=reflectivityOut.microSurface;float roughness=reflectivityOut.roughness;float diffuseRoughness=reflectivityOut.diffuseRoughness;
2329
+ #ifdef METALLICWORKFLOW
2330
+ surfaceAlbedo=reflectivityOut.surfaceAlbedo;
2331
+ #endif
2332
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
2333
+ aoOut.ambientOcclusionColor=reflectivityOut.ambientOcclusionColor;
2334
+ #endif
2335
+ #ifdef ALPHAFRESNEL
2336
+ #if defined(ALPHATEST) || defined(ALPHABLEND)
2337
+ alphaFresnelOutParams alphaFresnelOut;alphaFresnelOut=alphaFresnelBlock(
2338
+ normalW,
2339
+ viewDirectionW,
2340
+ alpha,
2341
+ microSurface
2342
+ );alpha=alphaFresnelOut.alpha;
2343
+ #endif
2344
+ #endif
2345
+ #include<pbrBlockGeometryInfo>
2346
+ #ifdef ANISOTROPIC
2347
+ anisotropicOutParams anisotropicOut;
2348
+ #ifdef ANISOTROPIC_TEXTURE
2349
+ vec3 anisotropyMapData=TEXRD(anisotropySampler,vAnisotropyUV+uvOffset).rgb*vAnisotropyInfos.y;
2350
+ #endif
2351
+ anisotropicOut=anisotropicBlock(
2352
+ vAnisotropy,
2353
+ roughness,
2354
+ #ifdef ANISOTROPIC_TEXTURE
2355
+ anisotropyMapData,
2356
+ #endif
2357
+ TBN,
2358
+ normalW,
2359
+ viewDirectionW
2360
+ );
2361
+ #endif
2362
+ #ifdef REFLECTION
2363
+ reflectionOutParams reflectionOut;
2364
+ #ifndef USE_CUSTOM_REFLECTION
2365
+ reflectionOut=reflectionBlock(
2366
+ vPositionW
2367
+ ,normalW
2368
+ ,alphaG
2369
+ ,vReflectionMicrosurfaceInfos
2370
+ ,vReflectionInfos
2371
+ ,vReflectionColor
2372
+ #ifdef ANISOTROPIC
2373
+ ,anisotropicOut
2374
+ #endif
2375
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
2376
+ ,NdotVUnclamped
2377
+ #endif
2378
+ #ifdef LINEARSPECULARREFLECTION
2379
+ ,roughness
2380
+ #endif
2381
+ ,reflectionSampler
2382
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
2383
+ ,vEnvironmentIrradiance
2384
+ #endif
2385
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
2386
+ ,reflectionMatrix
2387
+ #endif
2388
+ #ifdef USEIRRADIANCEMAP
2389
+ ,irradianceSampler
2390
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
2391
+ ,vReflectionDominantDirection
2392
+ #endif
2393
+ #endif
2394
+ #ifndef LODBASEDMICROSFURACE
2395
+ ,reflectionSamplerLow
2396
+ ,reflectionSamplerHigh
2397
+ #endif
2398
+ #ifdef REALTIME_FILTERING
2399
+ ,vReflectionFilteringInfo
2400
+ #ifdef IBL_CDF_FILTERING
2401
+ ,icdfSampler
2402
+ #endif
2403
+ #endif
2404
+ ,viewDirectionW
2405
+ ,diffuseRoughness
2406
+ ,baseColor
2407
+ );
2408
+ #else
2409
+ #define CUSTOM_REFLECTION
2410
+ #endif
2411
+ #endif
2412
+ #include<pbrBlockReflectance0>
2413
+ #ifdef SHEEN
2414
+ sheenOutParams sheenOut;
2415
+ #ifdef SHEEN_TEXTURE
2416
+ vec4 sheenMapData=TEXRD(sheenSampler,vSheenUV+uvOffset);
2417
+ #endif
2418
+ #if defined(SHEEN_ROUGHNESS) && defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
2419
+ vec4 sheenMapRoughnessData=TEXRD(sheenRoughnessSampler,vSheenRoughnessUV+uvOffset)*vSheenInfos.w;
2420
+ #endif
2421
+ sheenOut=sheenBlock(
2422
+ vSheenColor
2423
+ #ifdef SHEEN_ROUGHNESS
2424
+ ,vSheenRoughness
2425
+ #if defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
2426
+ ,sheenMapRoughnessData
2427
+ #endif
2428
+ #endif
2429
+ ,roughness
2430
+ #ifdef SHEEN_TEXTURE
2431
+ ,sheenMapData
2432
+ ,vSheenInfos.y
2433
+ #endif
2434
+ ,reflectanceF0
2435
+ #ifdef SHEEN_LINKWITHALBEDO
2436
+ ,baseColor
2437
+ ,surfaceAlbedo
2438
+ #endif
2439
+ #ifdef ENVIRONMENTBRDF
2440
+ ,NdotV
2441
+ ,environmentBrdf
2442
+ #endif
2443
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
2444
+ ,AARoughnessFactors
2445
+ ,vReflectionMicrosurfaceInfos
2446
+ ,vReflectionInfos
2447
+ ,vReflectionColor
2448
+ ,vLightingIntensity
2449
+ ,reflectionSampler
2450
+ ,reflectionOut.reflectionCoords
2451
+ ,NdotVUnclamped
2452
+ #ifndef LODBASEDMICROSFURACE
2453
+ ,reflectionSamplerLow
2454
+ ,reflectionSamplerHigh
2455
+ #endif
2456
+ #ifdef REALTIME_FILTERING
2457
+ ,vReflectionFilteringInfo
2458
+ #endif
2459
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
2460
+ ,seo
2461
+ #endif
2462
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
2463
+ ,eho
2464
+ #endif
2465
+ #endif
2466
+ );
2467
+ #ifdef SHEEN_LINKWITHALBEDO
2468
+ surfaceAlbedo=sheenOut.surfaceAlbedo;
2469
+ #endif
2470
+ #endif
2471
+ #ifdef CLEARCOAT
2472
+ #ifdef CLEARCOAT_TEXTURE
2473
+ vec2 clearCoatMapData=TEXRD(clearCoatSampler,vClearCoatUV+uvOffset).rg*vClearCoatInfos.y;
2474
+ #endif
2475
+ #endif
2476
+ #ifdef IRIDESCENCE
2477
+ iridescenceOutParams iridescenceOut;
2478
+ #ifdef IRIDESCENCE_TEXTURE
2479
+ vec2 iridescenceMapData=TEXRD(iridescenceSampler,vIridescenceUV+uvOffset).rg*vIridescenceInfos.y;
2480
+ #endif
2481
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
2482
+ vec2 iridescenceThicknessMapData=TEXRD(iridescenceThicknessSampler,vIridescenceThicknessUV+uvOffset).rg*vIridescenceInfos.w;
2483
+ #endif
2484
+ iridescenceOut=iridescenceBlock(
2485
+ vIridescenceParams
2486
+ ,NdotV
2487
+ ,specularEnvironmentR0
2488
+ #ifdef IRIDESCENCE_TEXTURE
2489
+ ,iridescenceMapData
2490
+ #endif
2491
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
2492
+ ,iridescenceThicknessMapData
2493
+ #endif
2494
+ #ifdef CLEARCOAT
2495
+ ,NdotVUnclamped
2496
+ ,vClearCoatParams
2497
+ #ifdef CLEARCOAT_TEXTURE
2498
+ ,clearCoatMapData
2499
+ #endif
2500
+ #endif
2501
+ );float iridescenceIntensity=iridescenceOut.iridescenceIntensity;specularEnvironmentR0=iridescenceOut.specularEnvironmentR0;
2502
+ #endif
2503
+ clearcoatOutParams clearcoatOut;
2504
+ #ifdef CLEARCOAT
2505
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
2506
+ vec4 clearCoatMapRoughnessData=TEXRD(clearCoatRoughnessSampler,vClearCoatRoughnessUV+uvOffset)*vClearCoatInfos.w;
2507
+ #endif
2508
+ #if defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
2509
+ vec4 clearCoatTintMapData=TEXRD(clearCoatTintSampler,vClearCoatTintUV+uvOffset);
2510
+ #endif
2511
+ #ifdef CLEARCOAT_BUMP
2512
+ vec4 clearCoatBumpMapData=TEXRD(clearCoatBumpSampler,vClearCoatBumpUV+uvOffset);
2513
+ #endif
2514
+ clearcoatOut=clearcoatBlock(
2515
+ vPositionW
2516
+ ,geometricNormalW
2517
+ ,viewDirectionW
2518
+ ,vClearCoatParams
2519
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
2520
+ ,clearCoatMapRoughnessData
2521
+ #endif
2522
+ ,specularEnvironmentR0
2523
+ #ifdef CLEARCOAT_TEXTURE
2524
+ ,clearCoatMapData
2525
+ #endif
2526
+ #ifdef CLEARCOAT_TINT
2527
+ ,vClearCoatTintParams
2528
+ ,clearCoatColorAtDistance
2529
+ ,vClearCoatRefractionParams
2530
+ #ifdef CLEARCOAT_TINT_TEXTURE
2531
+ ,clearCoatTintMapData
2532
+ #endif
2533
+ #endif
2534
+ #ifdef CLEARCOAT_BUMP
2535
+ ,vClearCoatBumpInfos
2536
+ ,clearCoatBumpMapData
2537
+ ,vClearCoatBumpUV
2538
+ #if defined(TANGENT) && defined(NORMAL)
2539
+ ,vTBN
2540
+ #else
2541
+ ,vClearCoatTangentSpaceParams
2542
+ #endif
2543
+ #ifdef OBJECTSPACE_NORMALMAP
2544
+ ,normalMatrix
2545
+ #endif
2546
+ #endif
2547
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
2548
+ ,faceNormal
2549
+ #endif
2550
+ #ifdef REFLECTION
2551
+ ,vReflectionMicrosurfaceInfos
2552
+ ,vReflectionInfos
2553
+ ,vReflectionColor
2554
+ ,vLightingIntensity
2555
+ ,reflectionSampler
2556
+ #ifndef LODBASEDMICROSFURACE
2557
+ ,reflectionSamplerLow
2558
+ ,reflectionSamplerHigh
2559
+ #endif
2560
+ #ifdef REALTIME_FILTERING
2561
+ ,vReflectionFilteringInfo
2562
+ #endif
2563
+ #endif
2564
+ #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
2565
+ ,(gl_FrontFacing ? 1. : -1.)
2566
+ #endif
2567
+ );
2568
+ #else
2569
+ clearcoatOut.specularEnvironmentR0=specularEnvironmentR0;
2570
+ #endif
2571
+ #include<pbrBlockReflectance>
2572
+ subSurfaceOutParams subSurfaceOut;
2573
+ #ifdef SUBSURFACE
2574
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
2575
+ vec4 thicknessMap=TEXRD(thicknessSampler,vThicknessUV+uvOffset);
2576
+ #endif
2577
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
2578
+ vec4 refractionIntensityMap=TEXRD(refractionIntensitySampler,vRefractionIntensityUV+uvOffset);
2579
+ #endif
2580
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
2581
+ vec4 translucencyIntensityMap=TEXRD(translucencyIntensitySampler,vTranslucencyIntensityUV+uvOffset);
2582
+ #endif
2583
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
2584
+ vec4 translucencyColorMap=TEXRD(translucencyColorSampler,vTranslucencyColorUV+uvOffset);
2585
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA
2586
+ translucencyColorMap=toLinearSpace(translucencyColorMap);
2587
+ #endif
2588
+ #endif
2589
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
2590
+ vec3 vSpecularEnvironmentReflectance=vec3(max(colorSpecularEnvironmentReflectance.r,max(colorSpecularEnvironmentReflectance.g,colorSpecularEnvironmentReflectance.b)));
2591
+ #endif
2592
+ subSurfaceOut=subSurfaceBlock(
2593
+ vSubSurfaceIntensity
2594
+ ,vThicknessParam
2595
+ ,vTintColor
2596
+ ,normalW
2597
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
2598
+ ,vSpecularEnvironmentReflectance
2599
+ #else
2600
+ ,baseSpecularEnvironmentReflectance
2601
+ #endif
2602
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
2603
+ ,thicknessMap
2604
+ #endif
2605
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
2606
+ ,refractionIntensityMap
2607
+ #endif
2608
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
2609
+ ,translucencyIntensityMap
2610
+ #endif
2611
+ #ifdef REFLECTION
2612
+ #ifdef SS_TRANSLUCENCY
2613
+ ,reflectionMatrix
2614
+ #ifdef USESPHERICALFROMREFLECTIONMAP
2615
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
2616
+ ,reflectionOut.irradianceVector
2617
+ #endif
2618
+ #if defined(REALTIME_FILTERING)
2619
+ ,reflectionSampler
2620
+ ,vReflectionFilteringInfo
2621
+ #ifdef IBL_CDF_FILTERING
2622
+ ,icdfSampler
2623
+ #endif
2624
+ #endif
2625
+ #endif
2626
+ #ifdef USEIRRADIANCEMAP
2627
+ ,irradianceSampler
2628
+ #endif
2629
+ #endif
2630
+ #endif
2631
+ #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
2632
+ ,surfaceAlbedo
2633
+ #endif
2634
+ #ifdef SS_REFRACTION
2635
+ ,vPositionW
2636
+ ,viewDirectionW
2637
+ ,view
2638
+ ,vRefractionInfos
2639
+ ,refractionMatrix
2640
+ ,vRefractionMicrosurfaceInfos
2641
+ ,vLightingIntensity
2642
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
2643
+ ,alpha
2644
+ #endif
2645
+ #ifdef SS_LODINREFRACTIONALPHA
2646
+ ,NdotVUnclamped
2647
+ #endif
2648
+ #ifdef SS_LINEARSPECULARREFRACTION
2649
+ ,roughness
2650
+ #endif
2651
+ ,alphaG
2652
+ ,refractionSampler
2653
+ #ifndef LODBASEDMICROSFURACE
2654
+ ,refractionSamplerLow
2655
+ ,refractionSamplerHigh
2656
+ #endif
2657
+ #ifdef ANISOTROPIC
2658
+ ,anisotropicOut
2659
+ #endif
2660
+ #ifdef REALTIME_FILTERING
2661
+ ,vRefractionFilteringInfo
2662
+ #endif
2663
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
2664
+ ,vRefractionPosition
2665
+ ,vRefractionSize
2666
+ #endif
2667
+ #ifdef SS_DISPERSION
2668
+ ,dispersion
2669
+ #endif
2670
+ #endif
2671
+ #ifdef SS_TRANSLUCENCY
2672
+ ,vDiffusionDistance
2673
+ ,vTranslucencyColor
2674
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
2675
+ ,translucencyColorMap
2676
+ #endif
2677
+ #endif
2678
+ );
2679
+ #ifdef SS_REFRACTION
2680
+ surfaceAlbedo=subSurfaceOut.surfaceAlbedo;
2681
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
2682
+ alpha=subSurfaceOut.alpha;
2683
+ #endif
2684
+ #endif
2685
+ #else
2686
+ subSurfaceOut.specularEnvironmentReflectance=colorSpecularEnvironmentReflectance;
2687
+ #endif
2688
+ #include<pbrBlockDirectLighting>
2689
+ #include<lightFragment>[0..maxSimultaneousLights]
2690
+ #include<pbrBlockFinalLitComponents>
2691
+ #endif
2692
+ #include<pbrBlockFinalUnlitComponents>
2693
+ #define CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION
2694
+ #include<pbrBlockFinalColorComposition>
2695
+ #include<logDepthFragment>
2696
+ #include<fogFragment>(color,finalColor)
2697
+ #include<pbrBlockImageProcessing>
2698
+ #define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR
2699
+ #ifdef PREPASS
2700
+ #include<pbrBlockPrePass>
2701
+ #endif
2702
+ #if !defined(PREPASS) || defined(WEBGL2)
2703
+ gl_FragColor=finalColor;
2704
+ #endif
2705
+ #include<oitFragment>
2706
+ #if ORDER_INDEPENDENT_TRANSPARENCY
2707
+ if (fragDepth==nearestDepth) {frontColor.rgb+=finalColor.rgb*finalColor.a*alphaMultiplier;frontColor.a=1.0-alphaMultiplier*(1.0-finalColor.a);} else {backColor+=finalColor;}
2708
+ #endif
2709
+ #include<pbrDebug>
2710
+ #define CUSTOM_FRAGMENT_MAIN_END
2711
+ }
2712
+ `;for(let e of(i.ShaderStore.ShadersStore[eW]||(i.ShaderStore.ShadersStore[eW]=eY),[n.prePassDeclaration,a.oitDeclaration,r.decalFragmentDeclaration,{name:f,shader:o},t.sceneUboDeclaration,c.meshUboDeclaration,l.pbrUboDeclaration,d.mainUVVaryingDeclaration,s.pbrFragmentExtraDeclaration,E.lightFragmentDeclaration,R.lightUboDeclaration,S.samplerFragmentDeclaration,{name:C,shader:u},A.pbrFragmentReflectionDeclaration,{name:I,shader:m},v.imageProcessingDeclaration,T.clipPlaneFragmentDeclaration,N.logDepthDeclaration,O.fogFragmentDeclaration,p.textureRepetitionFunctions,L.helperFunctions,_.subSurfaceScatteringFunctions,D.importanceSampling,M.pbrHelperFunctions,h.imageProcessingFunctions,F.shadowsFragmentFunctions,g.harmonicsFunctions,P.ltcHelperFunctions,U.pbrDirectLightingSetupFunctions,b.pbrDirectLightingFalloffFunctions,y.pbrBRDFFunctions,B.hdrFilteringFunctions,G.pbrDirectLightingFunctions,V.pbrIBLFunctions,H.bumpFragmentMainFunctions,x.bumpFragmentFunctions,X.reflectionFunction,W.decalFragment,{name:Y,shader:k},{name:w,shader:K},{name:z,shader:Z},{name:q,shader:J},{name:j,shader:Q},{name:$,shader:ee},{name:ei,shader:en},{name:ea,shader:er},{name:ef,shader:eo},{name:et,shader:ec},el.clusteredLightingFunctions,{name:ed,shader:es},{name:eE,shader:eR},eS.clipPlaneFragment,eC.pbrBlockNormalGeometric,eu.bumpFragment,{name:eA,shader:eI},em.depthPrePass,{name:ev,shader:eT},{name:eN,shader:eO},{name:ep,shader:eL},{name:e_,shader:eD},eM.lightFragment,{name:eh,shader:eF},{name:eg,shader:eP},{name:eU,shader:eb},ey.logDepthFragment,eB.fogFragment,eG.pbrBlockImageProcessing,{name:eV,shader:eH},ex.oitFragment,eX.pbrDebug]))i.ShaderStore.IncludesShadersStore[e.name]||(i.ShaderStore.IncludesShadersStore[e.name]=e.shader);e.s(["pbrPixelShader",0,{name:eW,shader:eY}],21506)}]);