@uptimizr/dashboard 0.4.5 → 0.4.7

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