@uptimizr/dashboard 0.4.6 → 0.4.8

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 (388) hide show
  1. package/out/404.html +1 -1
  2. package/out/__next.__PAGE__.txt +19 -5
  3. package/out/__next._full.txt +10 -10
  4. package/out/__next._tree.txt +1 -1
  5. package/out/_next/static/chunks/{3cp5nmtwxq4gr.js → 0-6mdj5wxsfid.js} +1 -1
  6. package/out/_next/static/chunks/{2clevl_9ayd0x.js → 0-qthfqvm1jyj.js} +1 -1
  7. package/out/_next/static/chunks/01viyuclp2gm9.js +1 -0
  8. package/out/_next/static/chunks/02aym4t2hgo5c.js +1 -0
  9. package/out/_next/static/chunks/{1fervgvgv10r-.js → 02ic9b5ejugow.js} +1 -1
  10. package/out/_next/static/chunks/03p70i4c7qt0v.js +1 -0
  11. package/out/_next/static/chunks/{3zv5kyos9vtmm.js → 03pjr-ivdicng.js} +1 -1
  12. package/out/_next/static/chunks/041a06-lxipy5.js +1 -0
  13. package/out/_next/static/chunks/{3-yhe6rcsjh88.js → 06dzkwetqis-5.js} +1 -1
  14. package/out/_next/static/chunks/{2mjjo0yj-4ro4.js → 06kvanz5-fo52.js} +1 -1
  15. package/out/_next/static/chunks/{28i3wgvgn_at1.js → 07y8ke_iy59dn.js} +1 -1
  16. package/out/_next/static/chunks/09jukc-4jl735.js +1 -0
  17. package/out/_next/static/chunks/{0cmyc-uvk93kl.js → 09khmdgez3t0a.js} +74 -74
  18. package/out/_next/static/chunks/{2x-7kbwq8tl-o.js → 0_dca4876jshu.js} +196 -196
  19. package/out/_next/static/chunks/0axcgnl5qzr6e.js +1 -0
  20. package/out/_next/static/chunks/0ay4fjomijs3n.js +1 -0
  21. package/out/_next/static/chunks/0c7fy79wlccat.js +1 -0
  22. package/out/_next/static/chunks/0cqe4-l3imct3.js +1 -0
  23. package/out/_next/static/chunks/0cssvelju788j.js +1 -0
  24. package/out/_next/static/chunks/{2-_a-v1xeo5hb.js → 0ctain5xq2wsd.js} +116 -115
  25. package/out/_next/static/chunks/{3yk0hzfq5rcs6.js → 0df-dr3otg_4w.js} +1 -1
  26. package/out/_next/static/chunks/{0i9wa8hjd-5tc.js → 0endw997j7ao9.js} +1 -1
  27. package/out/_next/static/chunks/0ev_pbit1v_qg.js +1 -0
  28. package/out/_next/static/chunks/0eyw9oiwipywb.js +1 -0
  29. package/out/_next/static/chunks/0fkzbuo1tex4u.js +1 -0
  30. package/out/_next/static/chunks/0govas0u0t4w3.js +1 -0
  31. package/out/_next/static/chunks/{287hakn2ijupp.js → 0guzhnususp3-.js} +2 -2
  32. package/out/_next/static/chunks/0h7bq_ysu17q7.js +3 -0
  33. package/out/_next/static/chunks/0hneh_3xzlo28.js +1 -0
  34. package/out/_next/static/chunks/0iaqwme19z_0s.js +1 -0
  35. package/out/_next/static/chunks/0ibmar10xndpn.js +1 -0
  36. package/out/_next/static/chunks/0ii8mqoteppgh.js +11 -0
  37. package/out/_next/static/chunks/{3ioxfi3bvznhh.js → 0ip6v64di_l6x.js} +1 -1
  38. package/out/_next/static/chunks/{184pz6z3dflfm.js → 0ixymgjgz3grn.js} +20 -20
  39. package/out/_next/static/chunks/0kuah8g7lt5ox.js +1 -0
  40. package/out/_next/static/chunks/0l3k4j19vxm17.js +1 -0
  41. package/out/_next/static/chunks/0l6hg0ohwh9-m.js +1 -0
  42. package/out/_next/static/chunks/0m4um4ylhlfan.js +1 -0
  43. package/out/_next/static/chunks/0mj837d4h0ddq.js +1 -0
  44. package/out/_next/static/chunks/0nyn-f4905o91.js +1 -0
  45. package/out/_next/static/chunks/0og6i9rsgkuif.js +1 -0
  46. package/out/_next/static/chunks/0os1x-fxzgnxs.js +1 -0
  47. package/out/_next/static/chunks/0otnra7mp0hog.js +1 -0
  48. package/out/_next/static/chunks/{3p03l0z65c8vc.js → 0oyf2xzv8ofkk.js} +253 -253
  49. package/out/_next/static/chunks/0qvsy3gcqjm12.js +1 -0
  50. package/out/_next/static/chunks/{0yd4_xh476fjn.js → 0rl4ddh2vgxyl.js} +97 -97
  51. package/out/_next/static/chunks/0rwpttmsmqvn_.js +1 -0
  52. package/out/_next/static/chunks/0so3wjp9ch93y.js +1 -0
  53. package/out/_next/static/chunks/{36pz_ews7u0xb.js → 0te4g160_rb5d.js} +1 -1
  54. package/out/_next/static/chunks/0uby-zvu799ef.js +1 -0
  55. package/out/_next/static/chunks/{2kk_vvmr2xm3d.js → 0uvn0op2mlr2u.js} +12 -12
  56. package/out/_next/static/chunks/0vwj4hxjm0igv.js +1 -0
  57. package/out/_next/static/chunks/{0r-x702_jvhud.js → 0w7c30w07uct2.js} +12 -12
  58. package/out/_next/static/chunks/0wm38z3u2133a.js +1 -0
  59. package/out/_next/static/chunks/0y7yk5al7_p8q.js +4 -0
  60. package/out/_next/static/chunks/0ycr0gi6fn6bt.js +1 -0
  61. package/out/_next/static/chunks/0ywvahq9t0tki.js +1 -0
  62. package/out/_next/static/chunks/0zh6nslagkby-.js +1 -0
  63. package/out/_next/static/chunks/{3twr9ds68-9us.js → 0zo8xa0nej3ex.js} +1 -1
  64. package/out/_next/static/chunks/{1lu7rjfvxj8yj.js → 0zsir95gpf3xw.js} +1 -1
  65. package/out/_next/static/chunks/{1j4c0nvdo5q68.js → 0zu6ryyj0ig-j.js} +1 -1
  66. package/out/_next/static/chunks/{1bv-jzy_2jiqs.js → 1-jv8k10q_1uw.js} +1 -1
  67. package/out/_next/static/chunks/{0xx7_7y5jdlh4.js → 1-s5ioie9a94e.js} +1 -1
  68. package/out/_next/static/chunks/{27z7j17kcrty_.js → 1-yos1h0qws5e.js} +11 -11
  69. package/out/_next/static/chunks/10o7brc3x027r.js +1 -0
  70. package/out/_next/static/chunks/{2xe4bgir5l-9b.js → 10pae4gb9i929.js} +504 -504
  71. package/out/_next/static/chunks/13p93itm8a3ym.js +1 -0
  72. package/out/_next/static/chunks/{2mrkv0z2i74pv.js → 147s8i_lktp4_.js} +2 -2
  73. package/out/_next/static/chunks/{3nwaovnpiyrt8.js → 14tgo5xt_3j4w.js} +3 -3
  74. package/out/_next/static/chunks/1699hx-vlak0n.js +22 -0
  75. package/out/_next/static/chunks/{2b5nt7yn-pq3a.js → 16d6n9e77rqti.js} +1 -1
  76. package/out/_next/static/chunks/{3nr48h9zwum-3.js → 16f3d5dv83rsr.js} +1 -1
  77. package/out/_next/static/chunks/16i_tpwn_cmr-.js +1 -0
  78. package/out/_next/static/chunks/{2117sv2qzo6yq.js → 16rfr165nbha0.js} +1 -1
  79. package/out/_next/static/chunks/16sl51pvzo4tf.js +1 -0
  80. package/out/_next/static/chunks/1760s-32qpwgg.js +1 -0
  81. package/out/_next/static/chunks/{3rj-5v0j_2-_2.js → 18kq07c5xy_4g.js} +4 -4
  82. package/out/_next/static/chunks/{2wgh5i70bzelt.js → 190tbzt861ao3.js} +392 -392
  83. package/out/_next/static/chunks/19bhv6cupnnyj.js +1 -0
  84. package/out/_next/static/chunks/1_14pn2wwebxy.js +1 -0
  85. package/out/_next/static/chunks/{2_lw4d7t-xcqi.js → 1_kikmeubh0wq.js} +523 -522
  86. package/out/_next/static/chunks/1ay3z6agelsvz.js +1 -0
  87. package/out/_next/static/chunks/1b-fi3bfmpe31.js +1 -0
  88. package/out/_next/static/chunks/1bae3tqv53x9_.js +1 -0
  89. package/out/_next/static/chunks/{2s4fzgzkwjluu.js → 1bf421g4peccx.js} +2 -2
  90. package/out/_next/static/chunks/1bfony5qsc5tp.js +1 -0
  91. package/out/_next/static/chunks/{3vtmucpx25o7q.js → 1ddt0ot7kl8vq.js} +584 -584
  92. package/out/_next/static/chunks/1emz2vjkgck4z.js +1 -0
  93. package/out/_next/static/chunks/1eogzzw8i1wsg.js +1 -0
  94. package/out/_next/static/chunks/1g9p2h1-31q8o.js +1 -0
  95. package/out/_next/static/chunks/1gcz1k1v1woca.js +1 -0
  96. package/out/_next/static/chunks/1h8lyicgqhpxa.js +1 -0
  97. package/out/_next/static/chunks/{0e5dcxmkprebg.js → 1hot663akaepl.js} +1 -1
  98. package/out/_next/static/chunks/1i7pgl3ks5ye0.js +1 -0
  99. package/out/_next/static/chunks/{0xzamrecplwzw.js → 1i8sk_qgpdjhs.js} +1 -1
  100. package/out/_next/static/chunks/1kk3ct7pkpf3b.js +1 -0
  101. package/out/_next/static/chunks/1kq9o8del67le.js +1 -0
  102. package/out/_next/static/chunks/1l7tzyx2mumlq.js +1 -0
  103. package/out/_next/static/chunks/1n_uwed9o--go.js +1 -0
  104. package/out/_next/static/chunks/1o351eldttogn.js +1 -0
  105. package/out/_next/static/chunks/{1f07l3q77zat1.js → 1ogs4_aj84bfn.js} +1 -1
  106. package/out/_next/static/chunks/{3_dm45k0vk1aa.js → 1p206txlluipi.js} +565 -565
  107. package/out/_next/static/chunks/1p2bt1w845v6c.js +1 -0
  108. package/out/_next/static/chunks/1p3rgz4aef1gk.js +1 -0
  109. package/out/_next/static/chunks/{0ypejzd74ixbw.js → 1qcgdx9yl0gfx.js} +15 -15
  110. package/out/_next/static/chunks/1ql3mm2w5r-m8.js +1 -0
  111. package/out/_next/static/chunks/1qvcyuyshi3ll.js +53 -0
  112. package/out/_next/static/chunks/1r0yyg5a_0knc.js +1 -0
  113. package/out/_next/static/chunks/{374lzksboll-t.js → 1sa6qiidtcyk2.js} +1 -1
  114. package/out/_next/static/chunks/1t-9vrdrsi8le.js +1 -0
  115. package/out/_next/static/chunks/1t97zo0tlpbnz.js +1 -0
  116. package/out/_next/static/chunks/1te2tinzqnwck.js +1 -0
  117. package/out/_next/static/chunks/{3j3ol_d1vsdhx.js → 1trt-m2nrck0v.js} +1 -1
  118. package/out/_next/static/chunks/{3vu5y270muh-7.js → 1ty9jpwr3o_st.js} +1 -1
  119. package/out/_next/static/chunks/{415g3asdds1ac.js → 1u6w6veke8rze.js} +1 -1
  120. package/out/_next/static/chunks/{0-laj-bivzp4x.js → 1u900urmrbv73.js} +1 -1
  121. package/out/_next/static/chunks/{0o73w0cn5n_vl.js → 1vz2gd8k74lpi.js} +1 -1
  122. package/out/_next/static/chunks/1wkpl9bfb0wn7.js +1 -0
  123. package/out/_next/static/chunks/1wrly9a9c3teq.js +1 -0
  124. package/out/_next/static/chunks/1x0m05155yy4e.js +1 -0
  125. package/out/_next/static/chunks/{1my968s78he8g.js → 1xf1wfow43ekc.js} +15 -15
  126. package/out/_next/static/chunks/1y10o40v9odam.js +1 -0
  127. package/out/_next/static/chunks/{3_gfl66zf638s.js → 1y_zykt3fpen4.js} +901 -906
  128. package/out/_next/static/chunks/1ye6xtbm16pg4.js +1 -0
  129. package/out/_next/static/chunks/1z6_57k5h31u7.js +1 -0
  130. package/out/_next/static/chunks/1zboqft0h6mop.js +1 -0
  131. package/out/_next/static/chunks/1zr3c351x0ri5.js +1 -0
  132. package/out/_next/static/chunks/2-5p2lcedvrli.js +1 -0
  133. package/out/_next/static/chunks/{1_4hh3dfop93j.js → 206hxrq60f1_e.js} +1 -1
  134. package/out/_next/static/chunks/20r05k3-studj.js +1 -0
  135. package/out/_next/static/chunks/22gs24kj2du56.js +1 -0
  136. package/out/_next/static/chunks/22x5pd1gyp7sf.js +1 -0
  137. package/out/_next/static/chunks/{3qo7e6b73mfxq.js → 22z-2t_yp1jzs.js} +1 -1
  138. package/out/_next/static/chunks/{3d43gd91r06y6.js → 23hmfdw6z5zfy.js} +507 -505
  139. package/out/_next/static/chunks/23y1krqnc-8sm.js +1 -0
  140. package/out/_next/static/chunks/{0gk5rnci1hznh.js → 24tbkj1qkux88.js} +2 -2
  141. package/out/_next/static/chunks/{2-i29-jdbwww6.js → 26cmri51v7497.js} +111 -111
  142. package/out/_next/static/chunks/27jalbk9zu-2b.js +1 -0
  143. package/out/_next/static/chunks/285d2s9096ryc.js +1 -0
  144. package/out/_next/static/chunks/296ykep2nvppv.js +1 -0
  145. package/out/_next/static/chunks/29nehg5cal-ug.js +1 -0
  146. package/out/_next/static/chunks/2_a56_k3x7to6.js +1 -0
  147. package/out/_next/static/chunks/2a-0l6eb1blh3.js +4 -0
  148. package/out/_next/static/chunks/{2oacwtbslo90t.js → 2a31-txop1jzg.js} +360 -360
  149. package/out/_next/static/chunks/2bse5vll1o-x0.js +1 -0
  150. package/out/_next/static/chunks/2ct40spu9wfj7.js +1 -0
  151. package/out/_next/static/chunks/{2epukrz6paj9n.js → 2ept01b7t-e03.js} +1 -1
  152. package/out/_next/static/chunks/{22yht3s7c-xih.js → 2ey5dqelco_g5.js} +1 -1
  153. package/out/_next/static/chunks/2fd_009hw7y0m.js +1 -0
  154. package/out/_next/static/chunks/{2fspbfbxbswzd.js → 2ftz9kaxrsgxh.js} +1 -1
  155. package/out/_next/static/chunks/2gefdnozflr7p.js +1 -0
  156. package/out/_next/static/chunks/{2as_br1awqk6k.js → 2gs-u1n5uv7iz.js} +496 -496
  157. package/out/_next/static/chunks/{1a94whad0y57f.js → 2hizqql79u-54.js} +1 -1
  158. package/out/_next/static/chunks/2iqf2dpdg_vfl.js +1 -0
  159. package/out/_next/static/chunks/2j7z127s_ycjd.js +1 -0
  160. package/out/_next/static/chunks/2kax7uslfxdnx.js +31 -0
  161. package/out/_next/static/chunks/{2laz1v9fg2a2z.js → 2lh_w9rzy3vek.js} +1 -1
  162. package/out/_next/static/chunks/{3mmy9zsb7zo-m.js → 2ln1na26qwp-3.js} +23 -23
  163. package/out/_next/static/chunks/2n08l1q5o_27e.js +1 -0
  164. package/out/_next/static/chunks/2n7268gyd9z-6.js +1 -0
  165. package/out/_next/static/chunks/2nq9cgjmtqwvp.js +1 -0
  166. package/out/_next/static/chunks/{25brs445bjbik.js → 2oj8qc_pv14nk.js} +2 -2
  167. package/out/_next/static/chunks/2q24e72-olbe8.js +1 -0
  168. package/out/_next/static/chunks/2qc4hscs26cro.js +1 -0
  169. package/out/_next/static/chunks/2qe46redkqhfg.js +1 -0
  170. package/out/_next/static/chunks/2qmfe0mqw150h.js +1 -0
  171. package/out/_next/static/chunks/2qtc0nbl_521e.js +1 -0
  172. package/out/_next/static/chunks/2rofu6gu1xzuq.js +1 -0
  173. package/out/_next/static/chunks/2tdi94rkq739i.js +1 -0
  174. package/out/_next/static/chunks/2u_2sacqa9xa7.js +1 -0
  175. package/out/_next/static/chunks/2ujqz6088shm5.js +1 -0
  176. package/out/_next/static/chunks/{3my05px5mv_s5.js → 2urh9qafp3fiw.js} +235 -235
  177. package/out/_next/static/chunks/{23-y1f_zw56vo.js → 2v06n4z8wsmn9.js} +1 -1
  178. package/out/_next/static/chunks/2vp-5skbk1nfu.js +1 -0
  179. package/out/_next/static/chunks/2vu973j_n6cpx.js +1 -0
  180. package/out/_next/static/chunks/2wwra56rehfcj.js +1 -0
  181. package/out/_next/static/chunks/2xpwr97h2asal.js +1 -0
  182. package/out/_next/static/chunks/3000-0b8n9t_2.js +1 -0
  183. package/out/_next/static/chunks/{0q0i4pdyq66gb.js → 30t3203d7p2da.js} +1 -1
  184. package/out/_next/static/chunks/{3t4ys6th6gf2w.js → 31kto7-dxkt3z.js} +1 -1
  185. package/out/_next/static/chunks/{0j0a0wvmmghxj.js → 32oflcl79d8mu.js} +1 -1
  186. package/out/_next/static/chunks/32ovg81ae0l03.js +1 -0
  187. package/out/_next/static/chunks/{2c8rmxz151fxa.js → 331kthnvoma7n.js} +224 -224
  188. package/out/_next/static/chunks/337kn1mn34rc6.js +1 -0
  189. package/out/_next/static/chunks/{336ckqpboqmbn.js → 33xug8kf0-a1o.js} +1 -1
  190. package/out/_next/static/chunks/34dcb7_flbrvo.js +1 -0
  191. package/out/_next/static/chunks/34zotyeqrz_nq.js +1 -0
  192. package/out/_next/static/chunks/351wsmi75l8db.js +1 -0
  193. package/out/_next/static/chunks/36yv-ialtpx98.js +1 -0
  194. package/out/_next/static/chunks/37hwasxtee5e0.js +1 -0
  195. package/out/_next/static/chunks/37t0iclgxes05.js +1 -0
  196. package/out/_next/static/chunks/{1x0j78ohufpul.js → 37xnvnx1jxfaf.js} +1 -1
  197. package/out/_next/static/chunks/{29hkkj9raxte9.js → 38w74ixqt-9co.js} +77 -77
  198. package/out/_next/static/chunks/{0jap7l5-bskj4.js → 39t2x_9zd2rst.js} +12 -12
  199. package/out/_next/static/chunks/{38q0enmlg5q9o.js → 39v73timmzwny.js} +2 -2
  200. package/out/_next/static/chunks/{3puu2_-t0lln9.js → 3_xqc3658d8sw.js} +12 -12
  201. package/out/_next/static/chunks/3ba8eudvlczwe.js +1 -0
  202. package/out/_next/static/chunks/3buezhxqc8n6n.js +1 -0
  203. package/out/_next/static/chunks/3c5iwwj-fhbue.js +1 -0
  204. package/out/_next/static/chunks/{2kmmk9coo9_b0.js → 3d8ot2tw6yqfq.js} +143 -143
  205. package/out/_next/static/chunks/3dc057ffe7ij-.js +1 -0
  206. package/out/_next/static/chunks/3djnlzwj9869o.js +1 -0
  207. package/out/_next/static/chunks/{2_6b9lraq-exh.js → 3fuqxjjf8o1v9.js} +5 -5
  208. package/out/_next/static/chunks/{0j2ygtc_-bo3m.js → 3gt6rzg9qw-an.js} +1 -1
  209. package/out/_next/static/chunks/{0rykrf_vofbad.js → 3h_05w5j8x538.js} +1 -1
  210. package/out/_next/static/chunks/{3txu-i5qn183a.js → 3hkhd1_k8xohv.js} +321 -321
  211. package/out/_next/static/chunks/{2h07np207nlx7.js → 3ijcc5tfisfnj.js} +1 -1
  212. package/out/_next/static/chunks/3j0dbpd9zop3p.js +1 -0
  213. package/out/_next/static/chunks/{14e4k-718qadd.js → 3ju83xk-ca7ma.js} +163 -168
  214. package/out/_next/static/chunks/3jxhl4apmhbm1.js +13 -0
  215. package/out/_next/static/chunks/{1h1gixjbjkbsl.js → 3la99oz_0p0r6.js} +5 -5
  216. package/out/_next/static/chunks/{1mt4cnd_d6jvf.js → 3n1b34fd5fdrh.js} +1 -1
  217. package/out/_next/static/chunks/3nq_hq4x3rn3r.js +1 -0
  218. package/out/_next/static/chunks/3pgb1kkqrdl9t.js +1 -0
  219. package/out/_next/static/chunks/3pik_-jj-zkfl.js +1 -0
  220. package/out/_next/static/chunks/{1zmx71cvc6ksk.js → 3q38kdbzd2nbd.js} +1 -1
  221. package/out/_next/static/chunks/3q5zl4ks17au2.js +1 -0
  222. package/out/_next/static/chunks/{1t2g1v0ubcsam.js → 3qr10445lte-n.js} +1 -1
  223. package/out/_next/static/chunks/3r-8bnguvxsyo.js +1 -0
  224. package/out/_next/static/chunks/3sg56j8boe-3o.js +1 -0
  225. package/out/_next/static/chunks/3u7zj1-jdg781.js +1 -0
  226. package/out/_next/static/chunks/{0o0qtv35dqv3i.js → 3wj5dmf6cywz8.js} +239 -239
  227. package/out/_next/static/chunks/{2iu0_3cx-ny74.js → 3wr_oijfsq8lr.js} +11 -11
  228. package/out/_next/static/chunks/3xu0dh1ikzwj2.js +1 -0
  229. package/out/_next/static/chunks/{0vzo-8t8c26k9.js → 3y5tpixt23-fl.js} +1 -1
  230. package/out/_next/static/chunks/40gjf-_jt8upu.js +5 -0
  231. package/out/_next/static/chunks/41f12o_5lf-i9.js +1 -0
  232. package/out/_next/static/chunks/42ma8lqduohlc.js +1 -0
  233. package/out/_next/static/chunks/43usshq2nc125.js +1 -0
  234. package/out/_next/static/chunks/{161yjxmdz9obc.js → 44bl4ufopbmyh.js} +1 -1
  235. package/out/_next/static/chunks/44iutzkw9r21x.js +1 -0
  236. package/out/_next/static/chunks/turbopack-1xrxa3noq196-.js +1 -0
  237. package/out/_not-found/__next._full.txt +11 -11
  238. package/out/_not-found/__next._not-found.__PAGE__.txt +19 -2
  239. package/out/_not-found/__next._tree.txt +1 -1
  240. package/out/_not-found.html +1 -1
  241. package/out/_not-found.txt +11 -11
  242. package/out/index.html +1 -1
  243. package/out/index.txt +10 -10
  244. package/package.json +11 -11
  245. package/out/__next._head.txt +0 -6
  246. package/out/__next._index.txt +0 -5
  247. package/out/_next/static/chunks/0-k4hp87gwues.js +0 -1
  248. package/out/_next/static/chunks/04zj0yf1qhk1o.js +0 -1
  249. package/out/_next/static/chunks/06fbalmyyfpsy.js +0 -1
  250. package/out/_next/static/chunks/07hgbbqksqd1g.js +0 -1
  251. package/out/_next/static/chunks/08ou2nvy48e0u.js +0 -1
  252. package/out/_next/static/chunks/08y5-irjbsiy8.js +0 -1
  253. package/out/_next/static/chunks/0_jrfk2u1u3fi.js +0 -1
  254. package/out/_next/static/chunks/0a475u_q5i_dd.js +0 -62
  255. package/out/_next/static/chunks/0aad2r4s4wl1x.js +0 -5
  256. package/out/_next/static/chunks/0d9pxx1w_zqr9.js +0 -1
  257. package/out/_next/static/chunks/0gnjtwq-474uc.js +0 -1
  258. package/out/_next/static/chunks/0gsh_d0m5xss1.js +0 -1
  259. package/out/_next/static/chunks/0ibzpjo0h731v.js +0 -1
  260. package/out/_next/static/chunks/0j_3k5qhv_mdx.js +0 -1
  261. package/out/_next/static/chunks/0jis2w2mfx062.js +0 -1
  262. package/out/_next/static/chunks/0jjvp2slpf7d6.js +0 -1
  263. package/out/_next/static/chunks/0ko10wo4rc9-b.js +0 -1
  264. package/out/_next/static/chunks/0lqmvz6k2h_of.js +0 -1
  265. package/out/_next/static/chunks/0lwjmr8efrlbt.js +0 -17
  266. package/out/_next/static/chunks/0noxyupihh8dk.js +0 -1
  267. package/out/_next/static/chunks/0o1vph7x9shzu.js +0 -1
  268. package/out/_next/static/chunks/0p6phe9kjlxn8.js +0 -1
  269. package/out/_next/static/chunks/0ptxb9dcwsw3o.js +0 -1
  270. package/out/_next/static/chunks/0q8pt8fd0ma30.js +0 -1
  271. package/out/_next/static/chunks/0qqx9aoz8l5d2.js +0 -1
  272. package/out/_next/static/chunks/0tsk32q-88t_7.js +0 -1
  273. package/out/_next/static/chunks/0u7577db_ivyr.js +0 -1
  274. package/out/_next/static/chunks/0unnrt0un064x.js +0 -1
  275. package/out/_next/static/chunks/0uygtr4mo3h0v.js +0 -1
  276. package/out/_next/static/chunks/0vf3facit951s.js +0 -1
  277. package/out/_next/static/chunks/0xyija62b6txc.js +0 -1
  278. package/out/_next/static/chunks/0zeb37703zcz3.js +0 -1
  279. package/out/_next/static/chunks/0zu5ato7-1-q9.js +0 -1
  280. package/out/_next/static/chunks/0zydv7y47dxgh.js +0 -1
  281. package/out/_next/static/chunks/103x4jwovb6d-.js +0 -1
  282. package/out/_next/static/chunks/107wfq84g9-kn.js +0 -1
  283. package/out/_next/static/chunks/10afagk8yn__n.js +0 -1
  284. package/out/_next/static/chunks/12ory_c78yl31.js +0 -1
  285. package/out/_next/static/chunks/133dqp8_7_yo6.js +0 -1
  286. package/out/_next/static/chunks/1365lgwdd4vuo.js +0 -1
  287. package/out/_next/static/chunks/146ou-ohb_qhs.js +0 -1
  288. package/out/_next/static/chunks/14orr68xgdykd.js +0 -1
  289. package/out/_next/static/chunks/15qfoj-vl9thu.js +0 -1
  290. package/out/_next/static/chunks/166yqx3_qvbpy.js +0 -1
  291. package/out/_next/static/chunks/16gwjao676ieb.js +0 -1
  292. package/out/_next/static/chunks/16rmmzhy2p7bw.js +0 -1
  293. package/out/_next/static/chunks/17_jjyx4jz9dd.js +0 -1
  294. package/out/_next/static/chunks/18h9ugdz6igdb.js +0 -1
  295. package/out/_next/static/chunks/19d8n5t7ka2fb.js +0 -1
  296. package/out/_next/static/chunks/1_rbzw3n4fk0g.js +0 -1
  297. package/out/_next/static/chunks/1aa9g197l4twm.js +0 -1
  298. package/out/_next/static/chunks/1bq0fcnt1wy86.js +0 -1
  299. package/out/_next/static/chunks/1c6mho7e0enta.js +0 -1
  300. package/out/_next/static/chunks/1dfaheve77dhi.js +0 -1
  301. package/out/_next/static/chunks/1dgf112ehnhm1.js +0 -1
  302. package/out/_next/static/chunks/1eirucr9s6-h5.js +0 -1
  303. package/out/_next/static/chunks/1fsof7un7igrn.js +0 -1
  304. package/out/_next/static/chunks/1gvu5a6ffbs7l.js +0 -1
  305. package/out/_next/static/chunks/1iel4pzhhh-c3.js +0 -1
  306. package/out/_next/static/chunks/1iojfx3-g4_n9.js +0 -1
  307. package/out/_next/static/chunks/1j4jt5q7px8sy.js +0 -1
  308. package/out/_next/static/chunks/1jjw9hxgi2vzi.js +0 -1
  309. package/out/_next/static/chunks/1k_8olnprvi8r.js +0 -1
  310. package/out/_next/static/chunks/1l0rt7d4m-xdk.js +0 -5
  311. package/out/_next/static/chunks/1s0dpdqy480hg.js +0 -1
  312. package/out/_next/static/chunks/1t-yolk97lmot.js +0 -12
  313. package/out/_next/static/chunks/1tbes2sv-qzcx.js +0 -1
  314. package/out/_next/static/chunks/1upy8a5cb75kt.js +0 -1
  315. package/out/_next/static/chunks/1xed71f608m4b.js +0 -1
  316. package/out/_next/static/chunks/1z790xxb46gxy.js +0 -1
  317. package/out/_next/static/chunks/219n3q-_eengm.js +0 -1
  318. package/out/_next/static/chunks/21wo3vdr_uby8.js +0 -1
  319. package/out/_next/static/chunks/25gep78-izw79.js +0 -4
  320. package/out/_next/static/chunks/26i7dn31afdtm.js +0 -1
  321. package/out/_next/static/chunks/27hbplu797elx.js +0 -1
  322. package/out/_next/static/chunks/2992eiy52nazj.js +0 -1
  323. package/out/_next/static/chunks/29_n5j-hg_gsa.js +0 -1
  324. package/out/_next/static/chunks/29bxq-67oazfg.js +0 -1
  325. package/out/_next/static/chunks/29ings58w7kp1.js +0 -1
  326. package/out/_next/static/chunks/2_n0cpkdsjzli.js +0 -1
  327. package/out/_next/static/chunks/2a3iy701j4r_y.js +0 -1
  328. package/out/_next/static/chunks/2al9dh3_1ixhv.js +0 -1
  329. package/out/_next/static/chunks/2awr1c_vfsutb.js +0 -1
  330. package/out/_next/static/chunks/2bxe3kjr17tdp.js +0 -1
  331. package/out/_next/static/chunks/2dvbzar93ooc-.js +0 -1
  332. package/out/_next/static/chunks/2e-vp0e11g9ew.js +0 -1
  333. package/out/_next/static/chunks/2exj9-0p6n9x-.js +0 -1
  334. package/out/_next/static/chunks/2gf8l6hbmt7v3.js +0 -1
  335. package/out/_next/static/chunks/2h9i_adbqaxs4.js +0 -1
  336. package/out/_next/static/chunks/2jio3sio-_43z.js +0 -1
  337. package/out/_next/static/chunks/2neieeo9g2u56.js +0 -1
  338. package/out/_next/static/chunks/2pb_uosb-aa8x.js +0 -1
  339. package/out/_next/static/chunks/2qu-gpm3ux1l6.js +0 -1
  340. package/out/_next/static/chunks/2rsi6v7qmqx2b.js +0 -1
  341. package/out/_next/static/chunks/2tdvuc-27khif.js +0 -1
  342. package/out/_next/static/chunks/2trolrgd7neax.js +0 -1
  343. package/out/_next/static/chunks/2uyuafmoe5wi0.js +0 -3
  344. package/out/_next/static/chunks/2w2e0pxgs-n8f.js +0 -1
  345. package/out/_next/static/chunks/2xujlsx3stqig.js +0 -1
  346. package/out/_next/static/chunks/30y71dxdpv52d.js +0 -1
  347. package/out/_next/static/chunks/32c-e_v8_2xkf.js +0 -1
  348. package/out/_next/static/chunks/32oj0iudhp8bm.js +0 -1
  349. package/out/_next/static/chunks/33p9du6y9eegg.js +0 -1
  350. package/out/_next/static/chunks/38om-j0h0rryk.js +0 -1
  351. package/out/_next/static/chunks/39cou9lia_g7l.js +0 -1
  352. package/out/_next/static/chunks/39pkya0_bvcaj.js +0 -1
  353. package/out/_next/static/chunks/39rhmj_32ujyj.js +0 -1
  354. package/out/_next/static/chunks/3_1zzmx92j9c0.js +0 -1
  355. package/out/_next/static/chunks/3_earszshuz4n.js +0 -1
  356. package/out/_next/static/chunks/3ap_uxc8lx7ni.js +0 -1
  357. package/out/_next/static/chunks/3b6na8zrex8jo.js +0 -1
  358. package/out/_next/static/chunks/3c0cxt72vilyz.js +0 -1
  359. package/out/_next/static/chunks/3g78x0pdaoi_4.js +0 -1
  360. package/out/_next/static/chunks/3gjvl1p-tugfe.js +0 -4
  361. package/out/_next/static/chunks/3i8iro1gas1vx.js +0 -1
  362. package/out/_next/static/chunks/3kpqfqr99vo7z.js +0 -1
  363. package/out/_next/static/chunks/3lladf_wemm-2.js +0 -1
  364. package/out/_next/static/chunks/3n62hbywoknop.js +0 -1
  365. package/out/_next/static/chunks/3o_dmzpahx-5g.js +0 -1
  366. package/out/_next/static/chunks/3r7v7un976sn7.js +0 -1
  367. package/out/_next/static/chunks/3rl_nhqwew40w.js +0 -1
  368. package/out/_next/static/chunks/3s7hqij6xp_4e.js +0 -1
  369. package/out/_next/static/chunks/3si3migsmvz9o.js +0 -1
  370. package/out/_next/static/chunks/3uarw1i1ij1er.js +0 -1
  371. package/out/_next/static/chunks/3un-w6wutw1qn.js +0 -1
  372. package/out/_next/static/chunks/3v8kgnjk27wbe.js +0 -1
  373. package/out/_next/static/chunks/3we1khqfexh3x.js +0 -1
  374. package/out/_next/static/chunks/3z35loj4i-id4.js +0 -1
  375. package/out/_next/static/chunks/42lqt7ig40wk5.js +0 -1
  376. package/out/_next/static/chunks/42s6ghsurq5q7.js +0 -1
  377. package/out/_next/static/chunks/42yctcfi2rfwr.js +0 -1
  378. package/out/_next/static/chunks/43_fau1gg69eo.js +0 -1
  379. package/out/_next/static/chunks/43ywrdzg_7af8.js +0 -31
  380. package/out/_next/static/chunks/44m1ijc5cv80x.js +0 -1
  381. package/out/_next/static/chunks/453_bg0lgesmp.js +0 -1
  382. package/out/_next/static/chunks/turbopack-1s36ieuku1ds3.js +0 -1
  383. package/out/_not-found/__next._head.txt +0 -6
  384. package/out/_not-found/__next._index.txt +0 -5
  385. package/out/_not-found/__next._not-found.txt +0 -5
  386. /package/out/_next/static/{5UjNvd7WCk97iC2cSmEGH → 4r0L0ZMJeBwOJCVDsvvZ4}/_buildManifest.js +0 -0
  387. /package/out/_next/static/{5UjNvd7WCk97iC2cSmEGH → 4r0L0ZMJeBwOJCVDsvvZ4}/_clientMiddlewareManifest.js +0 -0
  388. /package/out/_next/static/{5UjNvd7WCk97iC2cSmEGH → 4r0L0ZMJeBwOJCVDsvvZ4}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,42241,2886,92544,e=>{"use strict";var r=e.i(47150);let a="bumpFragmentMainFunctions",i=`#ifndef TEXRD_DEFINED
1
+ (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,41588,757,76850,e=>{"use strict";var r=e.i(25044);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}],42241),e.i(9343);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}],41588),e.i(71184);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}],2886);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}],757);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,17 +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}],92544)},97793,e=>{"use strict";var r=e.i(47150);let a="sceneUboDeclaration",i=`struct Scene {viewProjection : mat4x4<f32>,
128
- #ifdef MULTIVIEW
129
- viewProjectionR : mat4x4<f32>,
130
- #endif
131
- view : mat4x4<f32>,
132
- projection : mat4x4<f32>,
133
- vEyePosition : vec4<f32>,
134
- inverseProjection : mat4x4<f32>,};
135
- #define SCENE_UBO
136
- var<uniform> scene : Scene;
137
- `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["sceneUboDeclarationWGSL",0,{name:a,shader:i}])},55880,e=>{"use strict";var r=e.i(47150);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}],76850)},96045,63122,e=>{"use strict";var r=e.i(25044);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}],96045);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}],63122)},65503,e=>{"use strict";var r=e.i(25044);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;
138
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;}
139
174
  fn saturate(x: f32)->f32 {return clamp(x,0.0,1.0);}
140
175
  fn saturateVec3(x: vec3f)->vec3f {return clamp(x,vec3f(),vec3f(1.0));}
@@ -220,689 +255,654 @@ fn max3(v: vec3f)->f32 {return max(v.x,max(v.y,v.z));}
220
255
  fn uint2float(i: u32)->f32 {return bitcast<f32>(0x3F800000u | (i>>9u))-1.0;}
221
256
  fn plasticSequence(rstate: u32)->vec2f {return vec2f(uint2float(rstate*3242174889u),
222
257
  uint2float(rstate*2447445414u));}
223
- `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["helperFunctionsWGSL",0,{name:a,shader:i}])},88887,e=>{"use strict";var r=e.i(47150);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}])},47622,41690,32923,e=>{"use strict";var r=e.i(25044);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}],47622);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}],41690);let t="openpbrIblFunctions",o=`#ifdef REFLECTION
317
+ fn sampleIrradiance(
318
+ surfaceNormal: vec3f
319
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
320
+ ,vEnvironmentIrradianceSH: vec3f
294
321
  #endif
295
- #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);
322
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
323
+ ,iblMatrix: mat4x4f
297
324
  #endif
298
- }
325
+ #ifdef USEIRRADIANCEMAP
326
+ #ifdef REFLECTIONMAP_3D
327
+ ,irradianceSampler: texture_cube<f32>
328
+ ,irradianceSamplerSampler: sampler
329
+ #else
330
+ ,irradianceSampler: texture_2d<f32>
331
+ ,irradianceSamplerSampler: sampler
299
332
  #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));}
333
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
334
+ ,reflectionDominantDirection: vec3f
319
335
  #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);}
325
336
  #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;}
337
+ #ifdef REALTIME_FILTERING
338
+ ,reflectionFilteringInfo: vec2f
339
+ #ifdef IBL_CDF_FILTERING
340
+ ,icdfSampler: texture_2d<f32>
341
+ ,icdfSamplerSampler: sampler
328
342
  #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);
335
343
  #endif
336
- }
337
- #else
338
- fn smithVisibilityG1_TrowbridgeReitzGGXFast(dot: f32,alphaG: f32)->f32
339
- {
340
- #ifdef MOBILE
341
- return 1.0/(dot+alphaG+(1.0-alphaG)*dot ));
342
- #else
343
- var alphaSquared: f32=alphaG*alphaG;return 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot));
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);}
344
354
  #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
355
  #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;}
356
+ #ifdef REFLECTIONMAP_OPPOSITEZ
357
+ irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
351
358
  #endif
352
- #ifdef CLEARCOAT
353
- fn visibility_Kelemen(VdotH: f32)->f32 {return 0.25/(VdotH*VdotH); }
359
+ #ifdef INVERTCUBICMAP
360
+ irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
354
361
  #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
362
  #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}])},29741,69809,e=>{"use strict";var r=e.i(47150);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}],29741);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;}
423
- #endif
424
- #ifdef CLIPPLANE3
425
- else if (fragmentInputs.fClipDistance3>0.0)
426
- {discard;}
427
- #endif
428
- #ifdef CLIPPLANE4
429
- else if (fragmentInputs.fClipDistance4>0.0)
430
- {discard;}
431
- #endif
432
- #ifdef CLIPPLANE5
433
- else if (fragmentInputs.fClipDistance5>0.0)
434
- {discard;}
435
- #endif
436
- #ifdef CLIPPLANE6
437
- else if (fragmentInputs.fClipDistance6>0.0)
438
- {discard;}
439
- #endif
440
- `;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["clipPlaneFragmentWGSL",0,{name:f,shader:n}],69809)},9343,49852,e=>{"use strict";var r=e.i(47150);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
363
+ #ifdef USESPHERICALFROMREFLECTIONMAP
364
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
365
+ environmentIrradiance=vEnvironmentIrradianceSH;
453
366
  #else
454
- varying v_VARYINGNAME_UV: vec2f;
367
+ #if defined(REALTIME_FILTERING)
368
+ environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,reflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
369
+ #ifdef IBL_CDF_FILTERING
370
+ ,icdfSampler
371
+ ,icdfSamplerSampler
455
372
  #endif
456
- var _SAMPLERNAME_SamplerSampler: sampler;var _SAMPLERNAME_Sampler: texture_2d<f32>;
373
+ );
374
+ #else
375
+ environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
457
376
  #endif
458
- `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["samplerFragmentDeclarationWGSL",0,{name:a,shader:i}],9343);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
377
  #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;
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);
478
383
  #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);
384
+ environmentIrradiance=environmentIrradianceFromTexture.rgb;
385
+ #ifdef RGBDREFLECTION
386
+ environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
489
387
  #endif
490
- #ifdef REFLECTIONMAP_EQUIRECTANGULAR_FIXED
491
- var direction: vec3f=normalize(fragmentInputs.vDirectionW);return computeFixedEquirectangularCoords(worldPos,worldNormal,direction);
388
+ #ifdef GAMMAREFLECTION
389
+ environmentIrradiance.rgb=toLinearSpaceVec3(environmentIrradiance.rgb);
492
390
  #endif
493
- #ifdef REFLECTIONMAP_EQUIRECTANGULAR
494
- return computeEquirectangularCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
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);
495
397
  #endif
496
- #ifdef REFLECTIONMAP_SPHERICAL
497
- return computeSphericalCoords(worldPos,worldNormal,scene.view,uniforms.reflectionMatrix);
398
+ environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
498
399
  #endif
499
- #ifdef REFLECTIONMAP_PLANAR
500
- return computePlanarCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
501
400
  #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);
401
+ environmentIrradiance*=reflectionInfos.x;return environmentIrradiance;}
402
+ #ifdef REFLECTIONMAP_3D
403
+ fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec3f
505
404
  #else
506
- return computeCubicCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
405
+ fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec2f
507
406
  #endif
407
+ {var reflectionVector: vec3f=computeReflectionCoords(vec4f(vPositionW,1.0f),normalW);
408
+ #ifdef REFLECTIONMAP_OPPOSITEZ
409
+ reflectionVector.z*=-1.0;
508
410
  #endif
411
+ #ifdef REFLECTIONMAP_3D
412
+ var reflectionCoords: vec3f=reflectionVector;
413
+ #else
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}],49852)},17765,85959,e=>{"use strict";var r=e.i(47150);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}],17765);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}],85959)},78845,25799,60533,e=>{"use strict";var r=e.i(47150);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);let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f);
574
- #if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
575
- let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale);
576
- #else
577
- let dielectricColorF90: vec3f=vec3f(f90Scale);
520
+ environmentRadiance=vec4f(environmentRadiance.rgb*reflectionInfos.xxx,environmentRadiance.a);return environmentRadiance.rgb;}
578
521
  #endif
579
- #if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
580
- let maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight;
581
- #else
582
- outParams.F0=dielectricF0*specularWeight;
583
522
  #endif
584
- outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;outParams.coloredF90=dielectricColorF90*vec3f(specularWeight);return outParams;}
585
- `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrDielectricReflectanceWGSL",0,{name:a,shader:i}],78845);let f="openpbrGeometryInfo",n=`struct geometryInfoOutParams
586
- {NdotV: f32,
587
- NdotVUnclamped: f32,
588
- environmentBrdf: vec3f,
589
- horizonOcclusion: f32};struct geometryInfoAnisoOutParams
590
- {NdotV: f32,
591
- NdotVUnclamped: f32,
592
- environmentBrdf: vec3f,
593
- horizonOcclusion: f32,
594
- anisotropy: f32,
595
- anisotropicTangent: vec3f,
596
- anisotropicBitangent: vec3f,
597
- TBN: mat3x3<f32>};fn geometryInfo(
598
- normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
599
- )->geometryInfoOutParams
600
- {var outParams: geometryInfoOutParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
601
- #if defined(ENVIRONMENTBRDF)
602
- 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));
603
530
  #else
604
- outParams.environmentBrdf=vec3f(0.0);
531
+ return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
605
532
  #endif
606
- outParams.horizonOcclusion=1.0f;
607
- #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
608
- #ifdef HORIZONOCCLUSION
609
- #if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
610
- #ifdef REFLECTIONMAP_3D
611
- outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
533
+ }
612
534
  #endif
535
+ `;r.ShaderStore.IncludesShadersStoreWGSL[t]||(r.ShaderStore.IncludesShadersStoreWGSL[t]=o),e.s(["openpbrIblFunctionsWGSL",0,{name:t,shader:o}],32923)},24186,e=>{"use strict";var r=e.i(25044);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);
613
538
  #endif
539
+ #ifdef SUBSURFACE_COLOR
540
+ let subsurfaceColorFromTexture: vec4f=TEXRD(subsurfaceColorSampler,subsurfaceColorSamplerSampler,fragmentInputs.vSubsurfaceColorUV+uvOffset);
614
541
  #endif
542
+ #ifdef SUBSURFACE_RADIUS_SCALE
543
+ let subsurfaceRadiusScaleFromTexture: vec4f=TEXRD(subsurfaceRadiusScaleSampler,subsurfaceRadiusScaleSamplerSampler,fragmentInputs.vSubsurfaceRadiusScaleUV+uvOffset);
615
544
  #endif
616
- return outParams;}
617
- fn geometryInfoAniso(
618
- normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
619
- ,vAnisotropy: vec3f,TBN: mat3x3<f32>
620
- )->geometryInfoAnisoOutParams
621
- {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;}
622
- `;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["openpbrGeometryInfoWGSL",0,{name:f,shader:n}],25799);let t="openpbrIblFunctions",o=`#ifdef REFLECTION
623
- fn sampleIrradiance(
624
- surfaceNormal: vec3f
625
- #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
626
- ,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;
627
550
  #endif
628
- #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
629
- ,iblMatrix: mat4x4f
630
551
  #endif
631
- #ifdef USEIRRADIANCEMAP
632
- #ifdef REFLECTIONMAP_3D
633
- ,irradianceSampler: texture_cube<f32>
634
- ,irradianceSamplerSampler: sampler
552
+ #ifdef SUBSURFACE_COLOR
553
+ #ifdef SUBSURFACE_COLOR_GAMMA
554
+ subsurface_color*=toLinearSpaceVec3(subsurfaceColorFromTexture.rgb);
635
555
  #else
636
- ,irradianceSampler: texture_2d<f32>
637
- ,irradianceSamplerSampler: sampler
638
- #endif
639
- #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
640
- ,reflectionDominantDirection: vec3f
556
+ subsurface_color*=subsurfaceColorFromTexture.rgb;
641
557
  #endif
558
+ subsurface_color*=uniforms.vSubsurfaceColorInfos.y;
642
559
  #endif
643
- #ifdef REALTIME_FILTERING
644
- ,reflectionFilteringInfo: vec2f
645
- #ifdef IBL_CDF_FILTERING
646
- ,icdfSampler: texture_2d<f32>
647
- ,icdfSamplerSampler: sampler
560
+ #ifdef SUBSURFACE_RADIUS_SCALE
561
+ subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
648
562
  #endif
563
+ `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrSubsurfaceLayerDataWGSL",0,{name:a,shader:i}])},24095,e=>{"use strict";var r=e.i(25044);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);
649
566
  #endif
650
- ,reflectionInfos: vec2f
651
- ,viewDirectionW: vec3f
652
- ,diffuseRoughness: f32
653
- ,surfaceAlbedo: vec3f
654
- )->vec3f {var environmentIrradiance=vec3f(0.,0.,0.);
655
- #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
656
- var irradianceVector=(iblMatrix*vec4f(surfaceNormal,0.0f)).xyz;var irradianceView=(iblMatrix*vec4f(viewDirectionW,0.0f)).xyz;
657
- #if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
658
- #if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
659
- {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);
660
569
  #endif
570
+ #ifdef TRANSMISSION_DEPTH
571
+ let transmissionDepthFromTexture: vec4f=TEXRD(transmissionDepthSampler,transmissionDepthSamplerSampler,fragmentInputs.vTransmissionDepthUV+uvOffset);
661
572
  #endif
662
- #ifdef REFLECTIONMAP_OPPOSITEZ
663
- irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
573
+ #ifdef TRANSMISSION_SCATTER
574
+ let transmissionScatterFromTexture: vec4f=TEXRD(transmissionScatterSampler,transmissionScatterSamplerSampler,fragmentInputs.vTransmissionScatterUV+uvOffset);
664
575
  #endif
665
- #ifdef INVERTCUBICMAP
666
- irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
576
+ #ifdef TRANSMISSION_DISPERSION_SCALE
577
+ let transmissionDispersionScaleFromTexture: vec4f=TEXRD(transmissionDispersionScaleSampler,transmissionDispersionScaleSamplerSampler,fragmentInputs.vTransmissionDispersionScaleUV+uvOffset);
667
578
  #endif
579
+ #ifdef TRANSMISSION_WEIGHT
580
+ transmission_weight*=transmissionWeightFromTexture.r;
668
581
  #endif
669
- #ifdef USESPHERICALFROMREFLECTIONMAP
670
- #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
671
- environmentIrradiance=vEnvironmentIrradianceSH;
582
+ #ifdef TRANSMISSION_COLOR
583
+ #ifdef TRANSMISSION_COLOR_GAMMA
584
+ transmission_color*=toLinearSpaceVec3(transmissionColorFromTexture.rgb);
672
585
  #else
673
- #if defined(REALTIME_FILTERING)
674
- environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,reflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
675
- #ifdef IBL_CDF_FILTERING
676
- ,icdfSampler
677
- ,icdfSamplerSampler
586
+ transmission_color*=transmissionColorFromTexture.rgb;
678
587
  #endif
679
- );
680
- #else
681
- environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
588
+ transmission_color*=uniforms.vTransmissionColorInfos.y;
682
589
  #endif
590
+ #ifdef TRANSMISSION_DEPTH
591
+ transmission_depth*=transmissionDepthFromTexture.r;
683
592
  #endif
684
- #elif defined(USEIRRADIANCEMAP)
685
- #ifdef REFLECTIONMAP_3D
686
- let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,irradianceVector);
687
- #else
688
- let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,reflectionCoords);
593
+ #ifdef TRANSMISSION_SCATTER
594
+ transmission_scatter*=transmissionScatterFromTexture.rgb;
689
595
  #endif
690
- environmentIrradiance=environmentIrradianceFromTexture.rgb;
691
- #ifdef RGBDREFLECTION
692
- environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
596
+ #ifdef TRANSMISSION_DISPERSION_SCALE
597
+ transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
693
598
  #endif
694
- #ifdef GAMMAREFLECTION
695
- environmentIrradiance.rgb=toLinearSpaceVec3(environmentIrradiance.rgb);
599
+ `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrTransmissionLayerDataWGSL",0,{name:a,shader:i}])},86165,e=>{"use strict";var r=e.i(25044);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);}
696
611
  #endif
697
- #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
698
- let Ls: vec3f=normalize(reflectionDominantDirection);let NoL: f32=dot(irradianceVector,Ls);let NoV: f32=dot(irradianceVector,irradianceView);var diffuseRoughnessTerm=vec3f(1.0f);
699
- #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
700
- 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)));
701
- #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
702
- 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;}
703
617
  #endif
704
- 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;}
705
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);
706
625
  #endif
707
- environmentIrradiance*=reflectionInfos.x;return environmentIrradiance;}
708
- #ifdef REFLECTIONMAP_3D
709
- 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;
710
630
  #else
711
- fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec2f
712
- #endif
713
- {var reflectionVector: vec3f=computeReflectionCoords(vec4f(vPositionW,1.0f),normalW);
714
- #ifdef REFLECTIONMAP_OPPOSITEZ
715
- reflectionVector.z*=-1.0;
631
+ var reflectance: vec3f=specularEnvironmentR0*environmentBrdf.x+specularEnvironmentR90*environmentBrdf.y;
716
632
  #endif
717
- #ifdef REFLECTIONMAP_3D
718
- 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);
719
637
  #else
720
- var reflectionCoords: vec2f=reflectionVector.xy;
721
- #ifdef REFLECTIONMAP_PROJECTION
722
- reflectionCoords/=reflectionVector.z;
638
+ var reflectance: vec3f=specularEnvironmentR0*environmentBrdf.x+environmentBrdf.y;
723
639
  #endif
724
- reflectionCoords.y=1.0f-reflectionCoords.y;
640
+ return reflectance;}
725
641
  #endif
726
- return reflectionCoords;}
727
- fn sampleRadiance(
728
- alphaG: f32
729
- ,reflectionMicrosurfaceInfos: vec3f
730
- ,reflectionInfos: vec2f
731
- ,geoInfo: geometryInfoOutParams
732
- #ifdef REFLECTIONMAP_3D
733
- ,reflectionSampler: texture_cube<f32>
734
- ,reflectionSamplerSampler: sampler
735
- ,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);
736
668
  #else
737
- ,reflectionSampler: texture_2d<f32>
738
- ,reflectionSamplerSampler: sampler
739
- ,reflectionCoords: vec2f
669
+ return saturateVec3(f0*(f0*(0.941892-0.263008*f0)+0.346479)-0.0285998);
740
670
  #endif
741
- #ifdef REALTIME_FILTERING
742
- ,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);
743
673
  #endif
744
- )->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f);
745
- #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
746
- var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
747
- #elif defined(LINEARSPECULARREFLECTION)
748
- 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);
749
709
  #else
750
- 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);
751
711
  #endif
752
- reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z;
753
- #ifdef REALTIME_FILTERING
754
- 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 ));
755
718
  #else
756
- environmentRadiance=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
719
+ var alphaSquared: f32=alphaG*alphaG;return 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot));
757
720
  #endif
758
- var envRadiance: vec3f=environmentRadiance.rgb;
759
- #ifdef RGBDREFLECTION
760
- 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;}
761
724
  #endif
762
- #ifdef GAMMAREFLECTION
763
- 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;}
764
727
  #endif
765
- envRadiance*=reflectionInfos.x;return envRadiance;}
766
- #if defined(ANISOTROPIC)
767
- fn sampleRadianceAnisotropic(
768
- alphaG: f32
769
- ,reflectionMicrosurfaceInfos: vec3f
770
- ,reflectionInfos: vec2f
771
- ,geoInfo: geometryInfoAnisoOutParams
772
- ,normalW: vec3f
773
- ,viewDirectionW: vec3f
774
- ,positionW: vec3f
775
- ,noise: vec3f
776
- ,isRefraction: bool
777
- ,ior: f32
778
- #ifdef REFLECTIONMAP_3D
779
- ,reflectionSampler: texture_cube<f32>
780
- ,reflectionSamplerSampler: sampler
781
- #else
782
- ,reflectionSampler: texture_2d<f32>
783
- ,reflectionSamplerSampler: sampler
728
+ #ifdef CLEARCOAT
729
+ fn visibility_Kelemen(VdotH: f32)->f32 {return 0.25/(VdotH*VdotH); }
784
730
  #endif
785
- #ifdef REALTIME_FILTERING
786
- ,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);}
787
742
  #endif
788
- )->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;
789
- #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
790
- var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG,geoInfo.NdotVUnclamped);
791
- #elif defined(LINEARSPECULARREFLECTION)
792
- var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness);
793
- #else
794
- var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG);
743
+ */
795
744
  #endif
796
- reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z;
797
- #ifdef REALTIME_FILTERING
798
- 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;
799
- #ifdef REFLECTIONMAP_OPPOSITEZ
800
- 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);}
801
769
  #endif
802
- environmentRadiance =
803
- vec4f(radianceAnisotropic(alphaT,alphaB,reflectionSampler,reflectionSamplerSampler,
804
- view,tangent,
805
- bitangent,normal,
806
- reflectionFilteringInfo,noise.xy,isRefraction,ior),
807
- 1.0f);
770
+ #endif
771
+ `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["pbrBRDFFunctionsWGSL",0,{name:a,shader:i}])},10486,31278,e=>{"use strict";var r=e.i(25044);let a="pbrFragmentReflectionDeclaration",i=`#ifdef REFLECTION
772
+ #ifdef REFLECTIONMAP_3D
773
+ var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube<f32>;
774
+ #ifdef LODBASEDMICROSFURACE
808
775
  #else
809
- 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;}
810
- if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
811
- reflectionCoords=(uniforms.reflectionMatrix*vec4f(reflectionCoords,0.f)).xyz;
812
- #ifdef REFLECTIONMAP_OPPOSITEZ
813
- reflectionCoords.z*=-1.0f;
776
+ var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_cube<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_cube<f32>;
814
777
  #endif
815
- radianceSample=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
816
- #ifdef RGBDREFLECTION
817
- accumulatedRadiance+=vec3f(sample_weight)*fromRGBD(radianceSample);
818
- #elif defined(GAMMAREFLECTION)
819
- accumulatedRadiance+=vec3f(sample_weight)*toLinearSpaceVec3(radianceSample.rgb);
820
- #else
821
- accumulatedRadiance+=vec3f(sample_weight)*radianceSample.rgb;
778
+ #ifdef USEIRRADIANCEMAP
779
+ var irradianceSamplerSampler: sampler;var irradianceSampler: texture_cube<f32>;
822
780
  #endif
823
- total_weight+=sample_weight;}
824
- 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>;
825
786
  #endif
826
- environmentRadiance=vec4f(environmentRadiance.rgb*reflectionInfos.xxx,environmentRadiance.a);return environmentRadiance.rgb;}
787
+ #ifdef USEIRRADIANCEMAP
788
+ var irradianceSamplerSampler: sampler;var irradianceSampler: texture_2d<f32>;
827
789
  #endif
828
790
  #endif
829
- #ifdef ENVIRONMENTBRDF
830
- fn computeDielectricIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->f32
831
- {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);}
832
- fn computeConductorIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->vec3f
833
- {
834
- #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
835
- 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;
836
793
  #else
837
- return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
794
+ #if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
795
+ varying vDirectionW: vec3f;
838
796
  #endif
839
- }
840
797
  #endif
841
- `;r.ShaderStore.IncludesShadersStoreWGSL[t]||(r.ShaderStore.IncludesShadersStoreWGSL[t]=o),e.s(["openpbrIblFunctionsWGSL",0,{name:t,shader:o}],60533)},76350,e=>{"use strict";var r=e.i(47150);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);
842
- #ifdef SUBSURFACE_WEIGHT
843
- let subsurfaceWeightFromTexture: vec4f=TEXRD(subsurfaceWeightSampler,subsurfaceWeightSamplerSampler,fragmentInputs.vSubsurfaceWeightUV+uvOffset);
844
798
  #endif
845
- #ifdef SUBSURFACE_COLOR
846
- 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}],10486);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;}
847
802
  #endif
848
- #ifdef SUBSURFACE_RADIUS_SCALE
849
- 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);}
850
805
  #endif
851
- #ifdef SUBSURFACE_WEIGHT
852
- #ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA
853
- subsurface_weight*=subsurfaceWeightFromTexture.a;
854
- #else
855
- 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;}
856
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);}
857
812
  #endif
858
- #ifdef SUBSURFACE_COLOR
859
- #ifdef SUBSURFACE_COLOR_GAMMA
860
- subsurface_color*=toLinearSpaceVec3(subsurfaceColorFromTexture.rgb);
813
+ `;r.ShaderStore.IncludesShadersStoreWGSL[f]||(r.ShaderStore.IncludesShadersStoreWGSL[f]=n),e.s(["pbrIBLFunctionsWGSL",0,{name:f,shader:n}],31278)},71184,71047,e=>{"use strict";var r=e.i(25044);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
861
826
  #else
862
- subsurface_color*=subsurfaceColorFromTexture.rgb;
827
+ varying v_VARYINGNAME_UV: vec2f;
863
828
  #endif
864
- subsurface_color*=uniforms.vSubsurfaceColorInfos.y;
829
+ var _SAMPLERNAME_SamplerSampler: sampler;var _SAMPLERNAME_Sampler: texture_2d<f32>;
865
830
  #endif
866
- #ifdef SUBSURFACE_RADIUS_SCALE
867
- subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
831
+ `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["samplerFragmentDeclarationWGSL",0,{name:a,shader:i}],71184);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;
868
845
  #endif
869
- `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrSubsurfaceLayerDataWGSL",0,{name:a,shader:i}])},20777,e=>{"use strict";var r=e.i(47150);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;
870
- #ifdef TRANSMISSION_WEIGHT
871
- 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;
872
851
  #endif
873
- #ifdef TRANSMISSION_COLOR
874
- 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);
875
862
  #endif
876
- #ifdef TRANSMISSION_DEPTH
877
- 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);
878
865
  #endif
879
- #ifdef TRANSMISSION_SCATTER
880
- let transmissionScatterFromTexture: vec4f=TEXRD(transmissionScatterSampler,transmissionScatterSamplerSampler,fragmentInputs.vTransmissionScatterUV+uvOffset);
866
+ #ifdef REFLECTIONMAP_EQUIRECTANGULAR
867
+ return computeEquirectangularCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
881
868
  #endif
882
- #ifdef TRANSMISSION_DISPERSION_SCALE
883
- let transmissionDispersionScaleFromTexture: vec4f=TEXRD(transmissionDispersionScaleSampler,transmissionDispersionScaleSamplerSampler,fragmentInputs.vTransmissionDispersionScaleUV+uvOffset);
869
+ #ifdef REFLECTIONMAP_SPHERICAL
870
+ return computeSphericalCoords(worldPos,worldNormal,scene.view,uniforms.reflectionMatrix);
884
871
  #endif
885
- #ifdef TRANSMISSION_WEIGHT
886
- transmission_weight*=transmissionWeightFromTexture.r;
872
+ #ifdef REFLECTIONMAP_PLANAR
873
+ return computePlanarCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
887
874
  #endif
888
- #ifdef TRANSMISSION_COLOR
889
- #ifdef TRANSMISSION_COLOR_GAMMA
890
- 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);
891
878
  #else
892
- transmission_color*=transmissionColorFromTexture.rgb;
879
+ return computeCubicCoords(worldPos,worldNormal,scene.vEyePosition.xyz,uniforms.reflectionMatrix);
893
880
  #endif
894
- transmission_color*=uniforms.vTransmissionColorInfos.y;
895
881
  #endif
896
- #ifdef TRANSMISSION_DEPTH
897
- transmission_depth*=transmissionDepthFromTexture.r;
882
+ #ifdef REFLECTIONMAP_PROJECTION
883
+ return computeProjectionCoords(worldPos,scene.view,uniforms.reflectionMatrix);
898
884
  #endif
899
- #ifdef TRANSMISSION_SCATTER
900
- transmission_scatter*=transmissionScatterFromTexture.rgb;
885
+ #ifndef REFLECTIONMAP_CUBIC
886
+ #ifdef REFLECTIONMAP_SKYBOX
887
+ return computeSkyBoxCoords(fragmentInputs.vPositionUVW,uniforms.reflectionMatrix);
901
888
  #endif
902
- #ifdef TRANSMISSION_DISPERSION_SCALE
903
- transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
904
889
  #endif
905
- `;r.ShaderStore.IncludesShadersStoreWGSL[a]||(r.ShaderStore.IncludesShadersStoreWGSL[a]=i),e.s(["openpbrTransmissionLayerDataWGSL",0,{name:a,shader:i}])},53814,e=>{"use strict";var r=e.i(47150),a=e.i(29741),i=e.i(42241),f=e.i(9343),n=e.i(2886),t=e.i(55880),o=e.i(17765),c=e.i(97793),s=e.i(88887),l=e.i(78845),d=e.i(85959),v=e.i(49852),m=e.i(25799),u=e.i(60533),p=e.i(69809),S=e.i(92544),E=e.i(76350),R=e.i(20777);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}],71047)},38267,e=>{"use strict";var r=e.i(25044);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}])},27572,e=>{"use strict";var r=e.i(25044),a=e.i(96045),i=e.i(41588),f=e.i(71184),n=e.i(757),t=e.i(65503),o=e.i(10486),c=e.i(38267),s=e.i(86165),l=e.i(47622),d=e.i(31278),v=e.i(71047),m=e.i(41690),u=e.i(32923),p=e.i(63122),S=e.i(76850),E=e.i(24186),R=e.i(24095);let I="geometryPixelShader",N=`#ifdef BUMP
906
906
  varying vWorldView0: vec4f;varying vWorldView1: vec4f;varying vWorldView2: vec4f;varying vWorldView3: vec4f;varying vNormalW: vec3f;
907
907
  #else
908
908
  varying vNormalV: vec3f;