@babylonjs/viewer 7.25.1 → 7.25.2-alpha

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 (530) hide show
  1. package/dist/babylon-viewer.esm.js +2 -0
  2. package/dist/babylon-viewer.esm.js.map +1 -0
  3. package/dist/babylon-viewer.esm.min.js +2 -0
  4. package/dist/babylon-viewer.esm.min.js.map +1 -0
  5. package/dist/chunks/EXT_lights_image_based-BH3hZg5O.esm.min.js +2 -0
  6. package/dist/chunks/EXT_lights_image_based-BH3hZg5O.esm.min.js.map +1 -0
  7. package/dist/chunks/EXT_lights_image_based-DzfllwXH.esm.js +170 -0
  8. package/dist/chunks/EXT_lights_image_based-DzfllwXH.esm.js.map +1 -0
  9. package/dist/chunks/EXT_mesh_gpu_instancing-C9OEhnvW.esm.js +86 -0
  10. package/dist/chunks/EXT_mesh_gpu_instancing-C9OEhnvW.esm.js.map +1 -0
  11. package/dist/chunks/EXT_mesh_gpu_instancing-CXIBSaqJ.esm.min.js +2 -0
  12. package/dist/chunks/EXT_mesh_gpu_instancing-CXIBSaqJ.esm.min.js.map +1 -0
  13. package/dist/chunks/EXT_meshopt_compression-FHhysyRP.esm.min.js +2 -0
  14. package/dist/chunks/EXT_meshopt_compression-FHhysyRP.esm.min.js.map +1 -0
  15. package/dist/chunks/EXT_meshopt_compression-MDnzeuix.esm.js +134 -0
  16. package/dist/chunks/EXT_meshopt_compression-MDnzeuix.esm.js.map +1 -0
  17. package/dist/chunks/EXT_texture_avif-DYg5PN0r.esm.js +44 -0
  18. package/dist/chunks/EXT_texture_avif-DYg5PN0r.esm.js.map +1 -0
  19. package/dist/chunks/EXT_texture_avif-aYOG80m1.esm.min.js +2 -0
  20. package/dist/chunks/EXT_texture_avif-aYOG80m1.esm.min.js.map +1 -0
  21. package/dist/chunks/EXT_texture_webp-C4SoS8oM.esm.min.js +2 -0
  22. package/dist/chunks/EXT_texture_webp-C4SoS8oM.esm.min.js.map +1 -0
  23. package/dist/chunks/EXT_texture_webp-CFXwdFPL.esm.js +43 -0
  24. package/dist/chunks/EXT_texture_webp-CFXwdFPL.esm.js.map +1 -0
  25. package/dist/chunks/ExtrasAsMetadata-0irOjN40.esm.min.js +2 -0
  26. package/dist/chunks/ExtrasAsMetadata-0irOjN40.esm.min.js.map +1 -0
  27. package/dist/chunks/ExtrasAsMetadata-CMMGMmGq.esm.js +64 -0
  28. package/dist/chunks/ExtrasAsMetadata-CMMGMmGq.esm.js.map +1 -0
  29. package/dist/chunks/KHR_animation_pointer-BP1GTrPy.esm.js +343 -0
  30. package/dist/chunks/KHR_animation_pointer-BP1GTrPy.esm.js.map +1 -0
  31. package/dist/chunks/KHR_animation_pointer-DYUHlqMb.esm.min.js +2 -0
  32. package/dist/chunks/KHR_animation_pointer-DYUHlqMb.esm.min.js.map +1 -0
  33. package/dist/chunks/KHR_draco_mesh_compression-1__XqV2v.esm.js +610 -0
  34. package/dist/chunks/KHR_draco_mesh_compression-1__XqV2v.esm.js.map +1 -0
  35. package/dist/chunks/KHR_draco_mesh_compression-DugkDX1-.esm.min.js +2 -0
  36. package/dist/chunks/KHR_draco_mesh_compression-DugkDX1-.esm.min.js.map +1 -0
  37. package/dist/chunks/KHR_interactivity-CG9wdbbE.esm.js +4033 -0
  38. package/dist/chunks/KHR_interactivity-CG9wdbbE.esm.js.map +1 -0
  39. package/dist/chunks/KHR_interactivity-DTEAfXZw.esm.min.js +2 -0
  40. package/dist/chunks/KHR_interactivity-DTEAfXZw.esm.min.js.map +1 -0
  41. package/dist/chunks/KHR_lights_punctual-BJoC3s-k.esm.js +1253 -0
  42. package/dist/chunks/KHR_lights_punctual-BJoC3s-k.esm.js.map +1 -0
  43. package/dist/chunks/KHR_lights_punctual-CJ8IXFIN.esm.min.js +2 -0
  44. package/dist/chunks/KHR_lights_punctual-CJ8IXFIN.esm.min.js.map +1 -0
  45. package/dist/chunks/KHR_materials_anisotropy-D-JkJqtx.esm.min.js +2 -0
  46. package/dist/chunks/KHR_materials_anisotropy-D-JkJqtx.esm.min.js.map +1 -0
  47. package/dist/chunks/KHR_materials_anisotropy-vQUJOfyf.esm.js +64 -0
  48. package/dist/chunks/KHR_materials_anisotropy-vQUJOfyf.esm.js.map +1 -0
  49. package/dist/chunks/KHR_materials_clearcoat-DGkjpld9.esm.js +96 -0
  50. package/dist/chunks/KHR_materials_clearcoat-DGkjpld9.esm.js.map +1 -0
  51. package/dist/chunks/KHR_materials_clearcoat-D_sScrmJ.esm.min.js +2 -0
  52. package/dist/chunks/KHR_materials_clearcoat-D_sScrmJ.esm.min.js.map +1 -0
  53. package/dist/chunks/KHR_materials_diffuse_transmission-B-AVMVdy.esm.js +97 -0
  54. package/dist/chunks/KHR_materials_diffuse_transmission-B-AVMVdy.esm.js.map +1 -0
  55. package/dist/chunks/KHR_materials_diffuse_transmission-D89RzboR.esm.min.js +2 -0
  56. package/dist/chunks/KHR_materials_diffuse_transmission-D89RzboR.esm.min.js.map +1 -0
  57. package/dist/chunks/KHR_materials_dispersion-B8b6MXDS.esm.min.js +2 -0
  58. package/dist/chunks/KHR_materials_dispersion-B8b6MXDS.esm.min.js.map +1 -0
  59. package/dist/chunks/KHR_materials_dispersion-Biijd7CZ.esm.js +62 -0
  60. package/dist/chunks/KHR_materials_dispersion-Biijd7CZ.esm.js.map +1 -0
  61. package/dist/chunks/KHR_materials_emissive_strength-CphmP7Mx.esm.min.js +2 -0
  62. package/dist/chunks/KHR_materials_emissive_strength-CphmP7Mx.esm.min.js.map +1 -0
  63. package/dist/chunks/KHR_materials_emissive_strength-HYht21Ls.esm.js +55 -0
  64. package/dist/chunks/KHR_materials_emissive_strength-HYht21Ls.esm.js.map +1 -0
  65. package/dist/chunks/KHR_materials_ior-CMHiVWXF.esm.js +64 -0
  66. package/dist/chunks/KHR_materials_ior-CMHiVWXF.esm.js.map +1 -0
  67. package/dist/chunks/KHR_materials_ior-Dtd5Uruf.esm.min.js +2 -0
  68. package/dist/chunks/KHR_materials_ior-Dtd5Uruf.esm.min.js.map +1 -0
  69. package/dist/chunks/KHR_materials_iridescence-BPYqwadf.esm.min.js +2 -0
  70. package/dist/chunks/KHR_materials_iridescence-BPYqwadf.esm.min.js.map +1 -0
  71. package/dist/chunks/KHR_materials_iridescence-uiK5wAia.esm.js +72 -0
  72. package/dist/chunks/KHR_materials_iridescence-uiK5wAia.esm.js.map +1 -0
  73. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-At-foveb.esm.js +81 -0
  74. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-At-foveb.esm.js.map +1 -0
  75. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-D-0vzv_p.esm.min.js +2 -0
  76. package/dist/chunks/KHR_materials_pbrSpecularGlossiness-D-0vzv_p.esm.min.js.map +1 -0
  77. package/dist/chunks/KHR_materials_sheen-D9QlTIrL.esm.min.js +2 -0
  78. package/dist/chunks/KHR_materials_sheen-D9QlTIrL.esm.min.js.map +1 -0
  79. package/dist/chunks/KHR_materials_sheen-D_dNVJOm.esm.js +85 -0
  80. package/dist/chunks/KHR_materials_sheen-D_dNVJOm.esm.js.map +1 -0
  81. package/dist/chunks/KHR_materials_specular-BoPxT-Mo.esm.min.js +2 -0
  82. package/dist/chunks/KHR_materials_specular-BoPxT-Mo.esm.min.js.map +1 -0
  83. package/dist/chunks/KHR_materials_specular-DQxjj2Cx.esm.js +75 -0
  84. package/dist/chunks/KHR_materials_specular-DQxjj2Cx.esm.js.map +1 -0
  85. package/dist/chunks/KHR_materials_transmission-BFM7Cmhe.esm.js +307 -0
  86. package/dist/chunks/KHR_materials_transmission-BFM7Cmhe.esm.js.map +1 -0
  87. package/dist/chunks/KHR_materials_transmission-Cmv46WbD.esm.min.js +2 -0
  88. package/dist/chunks/KHR_materials_transmission-Cmv46WbD.esm.min.js.map +1 -0
  89. package/dist/chunks/KHR_materials_unlit-5NSHSTuh.esm.js +74 -0
  90. package/dist/chunks/KHR_materials_unlit-5NSHSTuh.esm.js.map +1 -0
  91. package/dist/chunks/KHR_materials_unlit-D0eVH4Om.esm.min.js +2 -0
  92. package/dist/chunks/KHR_materials_unlit-D0eVH4Om.esm.min.js.map +1 -0
  93. package/dist/chunks/KHR_materials_variants-DV9kQ9N0.esm.js +238 -0
  94. package/dist/chunks/KHR_materials_variants-DV9kQ9N0.esm.js.map +1 -0
  95. package/dist/chunks/KHR_materials_variants-q_OSyG78.esm.min.js +2 -0
  96. package/dist/chunks/KHR_materials_variants-q_OSyG78.esm.min.js.map +1 -0
  97. package/dist/chunks/KHR_materials_volume-B-2guGwk.esm.min.js +2 -0
  98. package/dist/chunks/KHR_materials_volume-B-2guGwk.esm.min.js.map +1 -0
  99. package/dist/chunks/KHR_materials_volume-ByNJMyHb.esm.js +87 -0
  100. package/dist/chunks/KHR_materials_volume-ByNJMyHb.esm.js.map +1 -0
  101. package/dist/chunks/KHR_mesh_quantization-B-dDY2nG.esm.min.js +2 -0
  102. package/dist/chunks/KHR_mesh_quantization-B-dDY2nG.esm.min.js.map +1 -0
  103. package/dist/chunks/KHR_mesh_quantization-CtRIMI9n.esm.js +26 -0
  104. package/dist/chunks/KHR_mesh_quantization-CtRIMI9n.esm.js.map +1 -0
  105. package/dist/chunks/KHR_texture_basisu-Bpv_M6W8.esm.js +43 -0
  106. package/dist/chunks/KHR_texture_basisu-Bpv_M6W8.esm.js.map +1 -0
  107. package/dist/chunks/KHR_texture_basisu-CDZ_8ojt.esm.min.js +2 -0
  108. package/dist/chunks/KHR_texture_basisu-CDZ_8ojt.esm.min.js.map +1 -0
  109. package/dist/chunks/KHR_texture_transform-DR04vBMi.esm.js +63 -0
  110. package/dist/chunks/KHR_texture_transform-DR04vBMi.esm.js.map +1 -0
  111. package/dist/chunks/KHR_texture_transform-Dxlw1ALx.esm.min.js +2 -0
  112. package/dist/chunks/KHR_texture_transform-Dxlw1ALx.esm.min.js.map +1 -0
  113. package/dist/chunks/KHR_xmp_json_ld-BE7tnUAA.esm.js +51 -0
  114. package/dist/chunks/KHR_xmp_json_ld-BE7tnUAA.esm.js.map +1 -0
  115. package/dist/chunks/KHR_xmp_json_ld-Cba_e7FN.esm.min.js +2 -0
  116. package/dist/chunks/KHR_xmp_json_ld-Cba_e7FN.esm.min.js.map +1 -0
  117. package/dist/chunks/MSFT_audio_emitter-C7N149TS.esm.min.js +2 -0
  118. package/dist/chunks/MSFT_audio_emitter-C7N149TS.esm.min.js.map +1 -0
  119. package/dist/chunks/MSFT_audio_emitter-Dli0UATE.esm.js +2236 -0
  120. package/dist/chunks/MSFT_audio_emitter-Dli0UATE.esm.js.map +1 -0
  121. package/dist/chunks/MSFT_lod-B_XcOQr8.esm.min.js +2 -0
  122. package/dist/chunks/MSFT_lod-B_XcOQr8.esm.min.js.map +1 -0
  123. package/dist/chunks/MSFT_lod-Ce-KRZp9.esm.js +337 -0
  124. package/dist/chunks/MSFT_lod-Ce-KRZp9.esm.js.map +1 -0
  125. package/dist/chunks/MSFT_minecraftMesh-C1iLB8-L.esm.min.js +2 -0
  126. package/dist/chunks/MSFT_minecraftMesh-C1iLB8-L.esm.min.js.map +1 -0
  127. package/dist/chunks/MSFT_minecraftMesh-D7vFOPNh.esm.js +46 -0
  128. package/dist/chunks/MSFT_minecraftMesh-D7vFOPNh.esm.js.map +1 -0
  129. package/dist/chunks/MSFT_sRGBFactors-DCJApvhI.esm.js +47 -0
  130. package/dist/chunks/MSFT_sRGBFactors-DCJApvhI.esm.js.map +1 -0
  131. package/dist/chunks/MSFT_sRGBFactors-IRTTNK8h.esm.min.js +2 -0
  132. package/dist/chunks/MSFT_sRGBFactors-IRTTNK8h.esm.min.js.map +1 -0
  133. package/dist/chunks/assetContainer-9BV4w6Ec.esm.js +1598 -0
  134. package/dist/chunks/assetContainer-9BV4w6Ec.esm.js.map +1 -0
  135. package/dist/chunks/assetContainer-Cu6LKJHz.esm.min.js +2 -0
  136. package/dist/chunks/assetContainer-Cu6LKJHz.esm.min.js.map +1 -0
  137. package/dist/chunks/audioEngine-Bh-HZCai.esm.min.js +2 -0
  138. package/dist/chunks/audioEngine-Bh-HZCai.esm.min.js.map +1 -0
  139. package/dist/chunks/audioEngine-pydGAEd8.esm.js +305 -0
  140. package/dist/chunks/audioEngine-pydGAEd8.esm.js.map +1 -0
  141. package/dist/chunks/basisTextureLoader-BD8_wqQL.esm.min.js +2 -0
  142. package/dist/chunks/basisTextureLoader-BD8_wqQL.esm.min.js.map +1 -0
  143. package/dist/chunks/basisTextureLoader-JmRg1Sfn.esm.js +600 -0
  144. package/dist/chunks/basisTextureLoader-JmRg1Sfn.esm.js.map +1 -0
  145. package/dist/chunks/ddsTextureLoader-Bpjp8qSf.esm.js +87 -0
  146. package/dist/chunks/ddsTextureLoader-Bpjp8qSf.esm.js.map +1 -0
  147. package/dist/chunks/ddsTextureLoader-CEyJTB3O.esm.min.js +2 -0
  148. package/dist/chunks/ddsTextureLoader-CEyJTB3O.esm.min.js.map +1 -0
  149. package/dist/chunks/default.fragment-B11bdnrB.esm.min.js +2 -0
  150. package/dist/chunks/default.fragment-B11bdnrB.esm.min.js.map +1 -0
  151. package/dist/chunks/default.fragment-Bawtijue.esm.min.js +2 -0
  152. package/dist/chunks/default.fragment-Bawtijue.esm.min.js.map +1 -0
  153. package/dist/chunks/default.fragment-D3k4gvNV.esm.js +456 -0
  154. package/dist/chunks/default.fragment-D3k4gvNV.esm.js.map +1 -0
  155. package/dist/chunks/default.fragment-DL3qA9UG.esm.js +515 -0
  156. package/dist/chunks/default.fragment-DL3qA9UG.esm.js.map +1 -0
  157. package/dist/chunks/default.vertex-B7OOfc9A.esm.js +178 -0
  158. package/dist/chunks/default.vertex-B7OOfc9A.esm.js.map +1 -0
  159. package/dist/chunks/default.vertex-BKC2A0e0.esm.js +199 -0
  160. package/dist/chunks/default.vertex-BKC2A0e0.esm.js.map +1 -0
  161. package/dist/chunks/default.vertex-BRncvhAx.esm.min.js +2 -0
  162. package/dist/chunks/default.vertex-BRncvhAx.esm.min.js.map +1 -0
  163. package/dist/chunks/default.vertex-sJaJV_6d.esm.min.js +2 -0
  164. package/dist/chunks/default.vertex-sJaJV_6d.esm.min.js.map +1 -0
  165. package/dist/chunks/defaultUboDeclaration-C1JdSocs.esm.min.js +2 -0
  166. package/dist/chunks/defaultUboDeclaration-C1JdSocs.esm.min.js.map +1 -0
  167. package/dist/chunks/defaultUboDeclaration-Cszg1EQW.esm.js +13 -0
  168. package/dist/chunks/defaultUboDeclaration-Cszg1EQW.esm.js.map +1 -0
  169. package/dist/chunks/defaultUboDeclaration-DB7zHENU.esm.js +15 -0
  170. package/dist/chunks/defaultUboDeclaration-DB7zHENU.esm.js.map +1 -0
  171. package/dist/chunks/defaultUboDeclaration-XHlan1gc.esm.min.js +2 -0
  172. package/dist/chunks/defaultUboDeclaration-XHlan1gc.esm.min.js.map +1 -0
  173. package/dist/chunks/engine-DZrewcWP.esm.js +1613 -0
  174. package/dist/chunks/engine-DZrewcWP.esm.js.map +1 -0
  175. package/dist/chunks/engine-sFOTJhn4.esm.min.js +2 -0
  176. package/dist/chunks/engine-sFOTJhn4.esm.min.js.map +1 -0
  177. package/dist/chunks/envTextureLoader-DLAJXIl8.esm.min.js +2 -0
  178. package/dist/chunks/envTextureLoader-DLAJXIl8.esm.min.js.map +1 -0
  179. package/dist/chunks/envTextureLoader-DpLIoFjS.esm.js +63 -0
  180. package/dist/chunks/envTextureLoader-DpLIoFjS.esm.js.map +1 -0
  181. package/dist/chunks/environmentTextureTools-CiyJLBbf.esm.min.js +2 -0
  182. package/dist/chunks/environmentTextureTools-CiyJLBbf.esm.min.js.map +1 -0
  183. package/dist/chunks/environmentTextureTools-bPqq81in.esm.js +381 -0
  184. package/dist/chunks/environmentTextureTools-bPqq81in.esm.js.map +1 -0
  185. package/dist/chunks/exrTextureLoader-DJ7PbPlF.esm.min.js +2 -0
  186. package/dist/chunks/exrTextureLoader-DJ7PbPlF.esm.min.js.map +1 -0
  187. package/dist/chunks/exrTextureLoader-DYsBnFky.esm.js +1682 -0
  188. package/dist/chunks/exrTextureLoader-DYsBnFky.esm.js.map +1 -0
  189. package/dist/chunks/fogFragment-BLvD2fqs.esm.min.js +2 -0
  190. package/dist/chunks/fogFragment-BLvD2fqs.esm.min.js.map +1 -0
  191. package/dist/chunks/fogFragment-b0NlRwYe.esm.js +102 -0
  192. package/dist/chunks/fogFragment-b0NlRwYe.esm.js.map +1 -0
  193. package/dist/chunks/glTFLoader-BikrhFtn.esm.js +7552 -0
  194. package/dist/chunks/glTFLoader-BikrhFtn.esm.js.map +1 -0
  195. package/dist/chunks/glTFLoader-mZPFBYSM.esm.min.js +2 -0
  196. package/dist/chunks/glTFLoader-mZPFBYSM.esm.min.js.map +1 -0
  197. package/dist/chunks/glTFLoaderAnimation-BdwTR5Nl.esm.js +77 -0
  198. package/dist/chunks/glTFLoaderAnimation-BdwTR5Nl.esm.js.map +1 -0
  199. package/dist/chunks/glTFLoaderAnimation-CiKBDKnk.esm.min.js +2 -0
  200. package/dist/chunks/glTFLoaderAnimation-CiKBDKnk.esm.min.js.map +1 -0
  201. package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js +2 -0
  202. package/dist/chunks/gltfPathToObjectConverter-Dyt_Y9jE.esm.min.js.map +1 -0
  203. package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js +67 -0
  204. package/dist/chunks/gltfPathToObjectConverter-GcUmfOyo.esm.js.map +1 -0
  205. package/dist/chunks/harmonicsFunctions-C12V8Ng1.esm.js +35 -0
  206. package/dist/chunks/harmonicsFunctions-C12V8Ng1.esm.js.map +1 -0
  207. package/dist/chunks/harmonicsFunctions-CRoab7mv.esm.min.js +2 -0
  208. package/dist/chunks/harmonicsFunctions-CRoab7mv.esm.min.js.map +1 -0
  209. package/dist/chunks/harmonicsFunctions-CZi4YSE7.esm.js +34 -0
  210. package/dist/chunks/harmonicsFunctions-CZi4YSE7.esm.js.map +1 -0
  211. package/dist/chunks/harmonicsFunctions-GFzLo9xW.esm.min.js +2 -0
  212. package/dist/chunks/harmonicsFunctions-GFzLo9xW.esm.min.js.map +1 -0
  213. package/dist/chunks/hdrTextureLoader-CsWJNnG5.esm.js +252 -0
  214. package/dist/chunks/hdrTextureLoader-CsWJNnG5.esm.js.map +1 -0
  215. package/dist/chunks/hdrTextureLoader-Cwi3SM4o.esm.min.js +2 -0
  216. package/dist/chunks/hdrTextureLoader-Cwi3SM4o.esm.min.js.map +1 -0
  217. package/dist/chunks/helperFunctions-21b9-yGo.esm.min.js +2 -0
  218. package/dist/chunks/helperFunctions-21b9-yGo.esm.min.js.map +1 -0
  219. package/dist/chunks/helperFunctions-COVDWwPu.esm.js +80 -0
  220. package/dist/chunks/helperFunctions-COVDWwPu.esm.js.map +1 -0
  221. package/dist/chunks/helperFunctions-CQzJ5T38.esm.min.js +2 -0
  222. package/dist/chunks/helperFunctions-CQzJ5T38.esm.min.js.map +1 -0
  223. package/dist/chunks/helperFunctions-CUKI67ax.esm.js +108 -0
  224. package/dist/chunks/helperFunctions-CUKI67ax.esm.js.map +1 -0
  225. package/dist/chunks/index-5EaMDaGg.esm.js +79820 -0
  226. package/dist/chunks/index-5EaMDaGg.esm.js.map +1 -0
  227. package/dist/chunks/index-RwQCgcf4.esm.min.js +57 -0
  228. package/dist/chunks/index-RwQCgcf4.esm.min.js.map +1 -0
  229. package/dist/chunks/ktxTextureLoader-34pzZN2D.esm.js +814 -0
  230. package/dist/chunks/ktxTextureLoader-34pzZN2D.esm.js.map +1 -0
  231. package/dist/chunks/ktxTextureLoader-Dj2b7tTw.esm.min.js +2 -0
  232. package/dist/chunks/ktxTextureLoader-Dj2b7tTw.esm.min.js.map +1 -0
  233. package/dist/chunks/logDepthDeclaration-BTOfKIR5.esm.min.js +2 -0
  234. package/dist/chunks/logDepthDeclaration-BTOfKIR5.esm.min.js.map +1 -0
  235. package/dist/chunks/logDepthDeclaration-Boz5U8vN.esm.min.js +2 -0
  236. package/dist/chunks/logDepthDeclaration-Boz5U8vN.esm.min.js.map +1 -0
  237. package/dist/chunks/logDepthDeclaration-Dc0_n0rX.esm.js +42 -0
  238. package/dist/chunks/logDepthDeclaration-Dc0_n0rX.esm.js.map +1 -0
  239. package/dist/chunks/logDepthDeclaration-cImBekwl.esm.js +35 -0
  240. package/dist/chunks/logDepthDeclaration-cImBekwl.esm.js.map +1 -0
  241. package/dist/chunks/logDepthVertex-ABvK0V0R.esm.js +77 -0
  242. package/dist/chunks/logDepthVertex-ABvK0V0R.esm.js.map +1 -0
  243. package/dist/chunks/logDepthVertex-BA4bq6Km.esm.min.js +2 -0
  244. package/dist/chunks/logDepthVertex-BA4bq6Km.esm.min.js.map +1 -0
  245. package/dist/chunks/logDepthVertex-C7FgfYJH.esm.js +605 -0
  246. package/dist/chunks/logDepthVertex-C7FgfYJH.esm.js.map +1 -0
  247. package/dist/chunks/logDepthVertex-Da8gAKX-.esm.min.js +2 -0
  248. package/dist/chunks/logDepthVertex-Da8gAKX-.esm.min.js.map +1 -0
  249. package/dist/chunks/mainUVVaryingDeclaration-B-9VKUsa.esm.js +11 -0
  250. package/dist/chunks/mainUVVaryingDeclaration-B-9VKUsa.esm.js.map +1 -0
  251. package/dist/chunks/mainUVVaryingDeclaration-CNcp6TRG.esm.min.js +2 -0
  252. package/dist/chunks/mainUVVaryingDeclaration-CNcp6TRG.esm.min.js.map +1 -0
  253. package/dist/chunks/objFileLoader-3iAEdRPX.esm.js +1280 -0
  254. package/dist/chunks/objFileLoader-3iAEdRPX.esm.js.map +1 -0
  255. package/dist/chunks/objFileLoader-Cr90DdHJ.esm.min.js +2 -0
  256. package/dist/chunks/objFileLoader-Cr90DdHJ.esm.min.js.map +1 -0
  257. package/dist/chunks/oitFragment-BxefW3dP.esm.min.js +2 -0
  258. package/dist/chunks/oitFragment-BxefW3dP.esm.min.js.map +1 -0
  259. package/dist/chunks/oitFragment-DNM4M_TM.esm.js +1166 -0
  260. package/dist/chunks/oitFragment-DNM4M_TM.esm.js.map +1 -0
  261. package/dist/chunks/oitFragment-QOO-2oNY.esm.min.js +2 -0
  262. package/dist/chunks/oitFragment-QOO-2oNY.esm.min.js.map +1 -0
  263. package/dist/chunks/oitFragment-c8QTGncf.esm.js +1210 -0
  264. package/dist/chunks/oitFragment-c8QTGncf.esm.js.map +1 -0
  265. package/dist/chunks/pass.fragment-54wWMjH0.esm.js +15 -0
  266. package/dist/chunks/pass.fragment-54wWMjH0.esm.js.map +1 -0
  267. package/dist/chunks/pass.fragment-C2zJ2wfh.esm.min.js +2 -0
  268. package/dist/chunks/pass.fragment-C2zJ2wfh.esm.min.js.map +1 -0
  269. package/dist/chunks/pbr.fragment-B2LdxiLY.esm.js +3163 -0
  270. package/dist/chunks/pbr.fragment-B2LdxiLY.esm.js.map +1 -0
  271. package/dist/chunks/pbr.fragment-BdB3ttR4.esm.min.js +2 -0
  272. package/dist/chunks/pbr.fragment-BdB3ttR4.esm.min.js.map +1 -0
  273. package/dist/chunks/pbr.fragment-BweiXotT.esm.js +3219 -0
  274. package/dist/chunks/pbr.fragment-BweiXotT.esm.js.map +1 -0
  275. package/dist/chunks/pbr.fragment-DO84e7Qh.esm.min.js +2 -0
  276. package/dist/chunks/pbr.fragment-DO84e7Qh.esm.min.js.map +1 -0
  277. package/dist/chunks/pbr.vertex-BXRa8Hxv.esm.js +335 -0
  278. package/dist/chunks/pbr.vertex-BXRa8Hxv.esm.js.map +1 -0
  279. package/dist/chunks/pbr.vertex-CF2Ccw8q.esm.min.js +2 -0
  280. package/dist/chunks/pbr.vertex-CF2Ccw8q.esm.min.js.map +1 -0
  281. package/dist/chunks/pbr.vertex-Dp1NB2h0.esm.min.js +2 -0
  282. package/dist/chunks/pbr.vertex-Dp1NB2h0.esm.min.js.map +1 -0
  283. package/dist/chunks/pbr.vertex-ou_Fcm2v.esm.js +208 -0
  284. package/dist/chunks/pbr.vertex-ou_Fcm2v.esm.js.map +1 -0
  285. package/dist/chunks/postprocess.vertex-C12ptRTz.esm.js +20 -0
  286. package/dist/chunks/postprocess.vertex-C12ptRTz.esm.js.map +1 -0
  287. package/dist/chunks/postprocess.vertex-D9PCzQ_C.esm.min.js +2 -0
  288. package/dist/chunks/postprocess.vertex-D9PCzQ_C.esm.min.js.map +1 -0
  289. package/dist/chunks/rawTexture-BTLHgkBf.esm.js +562 -0
  290. package/dist/chunks/rawTexture-BTLHgkBf.esm.js.map +1 -0
  291. package/dist/chunks/rawTexture-Cb8Vzv3y.esm.min.js +2 -0
  292. package/dist/chunks/rawTexture-Cb8Vzv3y.esm.min.js.map +1 -0
  293. package/dist/chunks/rgbdDecode.fragment-4VUd_LZa.esm.js +17 -0
  294. package/dist/chunks/rgbdDecode.fragment-4VUd_LZa.esm.js.map +1 -0
  295. package/dist/chunks/rgbdDecode.fragment-B97s0YHK.esm.min.js +2 -0
  296. package/dist/chunks/rgbdDecode.fragment-B97s0YHK.esm.min.js.map +1 -0
  297. package/dist/chunks/rgbdDecode.fragment-CgqRZDLm.esm.js +17 -0
  298. package/dist/chunks/rgbdDecode.fragment-CgqRZDLm.esm.js.map +1 -0
  299. package/dist/chunks/rgbdDecode.fragment-DSa_xyAA.esm.min.js +2 -0
  300. package/dist/chunks/rgbdDecode.fragment-DSa_xyAA.esm.min.js.map +1 -0
  301. package/dist/chunks/rgbdEncode.fragment-C3-vIdKY.esm.js +17 -0
  302. package/dist/chunks/rgbdEncode.fragment-C3-vIdKY.esm.js.map +1 -0
  303. package/dist/chunks/rgbdEncode.fragment-CZ7DFmJC.esm.min.js +2 -0
  304. package/dist/chunks/rgbdEncode.fragment-CZ7DFmJC.esm.min.js.map +1 -0
  305. package/dist/chunks/rgbdEncode.fragment-CnIc0eyH.esm.min.js +2 -0
  306. package/dist/chunks/rgbdEncode.fragment-CnIc0eyH.esm.min.js.map +1 -0
  307. package/dist/chunks/rgbdEncode.fragment-DA8KkHQU.esm.js +17 -0
  308. package/dist/chunks/rgbdEncode.fragment-DA8KkHQU.esm.js.map +1 -0
  309. package/dist/chunks/splatFileLoader-BiXQ9pqp.esm.min.js +2 -0
  310. package/dist/chunks/splatFileLoader-BiXQ9pqp.esm.min.js.map +1 -0
  311. package/dist/chunks/splatFileLoader-D17axd4l.esm.js +3179 -0
  312. package/dist/chunks/splatFileLoader-D17axd4l.esm.js.map +1 -0
  313. package/dist/chunks/standardMaterial-CYafMW8c.esm.js +1809 -0
  314. package/dist/chunks/standardMaterial-CYafMW8c.esm.js.map +1 -0
  315. package/dist/chunks/standardMaterial-xLALVwqX.esm.min.js +2 -0
  316. package/dist/chunks/standardMaterial-xLALVwqX.esm.min.js.map +1 -0
  317. package/dist/chunks/stlFileLoader-BIeNnvqG.esm.js +237 -0
  318. package/dist/chunks/stlFileLoader-BIeNnvqG.esm.js.map +1 -0
  319. package/dist/chunks/stlFileLoader-CqtYJIkJ.esm.min.js +2 -0
  320. package/dist/chunks/stlFileLoader-CqtYJIkJ.esm.min.js.map +1 -0
  321. package/dist/chunks/tgaTextureLoader-CDefV-xQ.esm.min.js +2 -0
  322. package/dist/chunks/tgaTextureLoader-CDefV-xQ.esm.min.js.map +1 -0
  323. package/dist/chunks/tgaTextureLoader-CerR7twj.esm.js +349 -0
  324. package/dist/chunks/tgaTextureLoader-CerR7twj.esm.js.map +1 -0
  325. package/dist/chunks/thinInstanceMesh-InKoMs06.esm.js +314 -0
  326. package/dist/chunks/thinInstanceMesh-InKoMs06.esm.js.map +1 -0
  327. package/dist/chunks/thinInstanceMesh-XV_b72vY.esm.min.js +2 -0
  328. package/dist/chunks/thinInstanceMesh-XV_b72vY.esm.min.js.map +1 -0
  329. package/dist/chunks/vertexColorMixing-Dm0jnWj1.esm.js +528 -0
  330. package/dist/chunks/vertexColorMixing-Dm0jnWj1.esm.js.map +1 -0
  331. package/dist/chunks/vertexColorMixing-N0v0Ism3.esm.min.js +2 -0
  332. package/dist/chunks/vertexColorMixing-N0v0Ism3.esm.min.js.map +1 -0
  333. package/dist/chunks/workerPool-BUOov2K1.esm.js +122 -0
  334. package/dist/chunks/workerPool-BUOov2K1.esm.js.map +1 -0
  335. package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js +2 -0
  336. package/dist/chunks/workerPool-BWHiDmEZ.esm.min.js.map +1 -0
  337. package/lib/index.d.ts +275 -0
  338. package/lib/index.js +942 -0
  339. package/lib/index.js.map +1 -0
  340. package/package.json +17 -27
  341. package/readme.md +35 -21
  342. package/configuration/configuration.d.ts +0 -107
  343. package/configuration/configuration.js +0 -16
  344. package/configuration/configuration.js.map +0 -1
  345. package/configuration/configurationCompatibility.d.ts +0 -8
  346. package/configuration/configurationCompatibility.js +0 -66
  347. package/configuration/configurationCompatibility.js.map +0 -1
  348. package/configuration/configurationContainer.d.ts +0 -10
  349. package/configuration/configurationContainer.js +0 -10
  350. package/configuration/configurationContainer.js.map +0 -1
  351. package/configuration/globals.d.ts +0 -6
  352. package/configuration/globals.js +0 -18
  353. package/configuration/globals.js.map +0 -1
  354. package/configuration/index.d.ts +0 -2
  355. package/configuration/index.js +0 -4
  356. package/configuration/index.js.map +0 -1
  357. package/configuration/interfaces/cameraConfiguration.d.ts +0 -31
  358. package/configuration/interfaces/cameraConfiguration.js +0 -2
  359. package/configuration/interfaces/cameraConfiguration.js.map +0 -1
  360. package/configuration/interfaces/colorGradingConfiguration.d.ts +0 -81
  361. package/configuration/interfaces/colorGradingConfiguration.js +0 -2
  362. package/configuration/interfaces/colorGradingConfiguration.js.map +0 -1
  363. package/configuration/interfaces/defaultRenderingPipelineConfiguration.d.ts +0 -20
  364. package/configuration/interfaces/defaultRenderingPipelineConfiguration.js +0 -2
  365. package/configuration/interfaces/defaultRenderingPipelineConfiguration.js.map +0 -1
  366. package/configuration/interfaces/environmentMapConfiguration.d.ts +0 -22
  367. package/configuration/interfaces/environmentMapConfiguration.js +0 -2
  368. package/configuration/interfaces/environmentMapConfiguration.js.map +0 -1
  369. package/configuration/interfaces/groundConfiguration.d.ts +0 -24
  370. package/configuration/interfaces/groundConfiguration.js +0 -2
  371. package/configuration/interfaces/groundConfiguration.js.map +0 -1
  372. package/configuration/interfaces/imageProcessingConfiguration.d.ts +0 -45
  373. package/configuration/interfaces/imageProcessingConfiguration.js +0 -2
  374. package/configuration/interfaces/imageProcessingConfiguration.js.map +0 -1
  375. package/configuration/interfaces/index.d.ts +0 -15
  376. package/configuration/interfaces/index.js +0 -16
  377. package/configuration/interfaces/index.js.map +0 -1
  378. package/configuration/interfaces/lightConfiguration.d.ts +0 -60
  379. package/configuration/interfaces/lightConfiguration.js +0 -2
  380. package/configuration/interfaces/lightConfiguration.js.map +0 -1
  381. package/configuration/interfaces/modelAnimationConfiguration.d.ts +0 -26
  382. package/configuration/interfaces/modelAnimationConfiguration.js +0 -2
  383. package/configuration/interfaces/modelAnimationConfiguration.js.map +0 -1
  384. package/configuration/interfaces/modelConfiguration.d.ts +0 -65
  385. package/configuration/interfaces/modelConfiguration.js +0 -2
  386. package/configuration/interfaces/modelConfiguration.js.map +0 -1
  387. package/configuration/interfaces/observersConfiguration.d.ts +0 -5
  388. package/configuration/interfaces/observersConfiguration.js +0 -2
  389. package/configuration/interfaces/observersConfiguration.js.map +0 -1
  390. package/configuration/interfaces/sceneConfiguration.d.ts +0 -48
  391. package/configuration/interfaces/sceneConfiguration.js +0 -2
  392. package/configuration/interfaces/sceneConfiguration.js.map +0 -1
  393. package/configuration/interfaces/sceneOptimizerConfiguration.d.ts +0 -23
  394. package/configuration/interfaces/sceneOptimizerConfiguration.js +0 -2
  395. package/configuration/interfaces/sceneOptimizerConfiguration.js.map +0 -1
  396. package/configuration/interfaces/skyboxConfiguration.d.ts +0 -21
  397. package/configuration/interfaces/skyboxConfiguration.js +0 -2
  398. package/configuration/interfaces/skyboxConfiguration.js.map +0 -1
  399. package/configuration/interfaces/templateConfiguration.d.ts +0 -67
  400. package/configuration/interfaces/templateConfiguration.js +0 -2
  401. package/configuration/interfaces/templateConfiguration.js.map +0 -1
  402. package/configuration/interfaces/vrConfiguration.d.ts +0 -16
  403. package/configuration/interfaces/vrConfiguration.js +0 -2
  404. package/configuration/interfaces/vrConfiguration.js.map +0 -1
  405. package/configuration/loader.d.ts +0 -4
  406. package/configuration/loader.js +0 -17
  407. package/configuration/loader.js.map +0 -1
  408. package/configuration/mappers.d.ts +0 -43
  409. package/configuration/mappers.js +0 -192
  410. package/configuration/mappers.js.map +0 -1
  411. package/configuration/renderOnlyLoader.d.ts +0 -33
  412. package/configuration/renderOnlyLoader.js +0 -162
  413. package/configuration/renderOnlyLoader.js.map +0 -1
  414. package/configuration/types/default.d.ts +0 -6
  415. package/configuration/types/default.js +0 -121
  416. package/configuration/types/default.js.map +0 -1
  417. package/configuration/types/environmentMap.d.ts +0 -5
  418. package/configuration/types/environmentMap.js +0 -14
  419. package/configuration/types/environmentMap.js.map +0 -1
  420. package/configuration/types/extended.d.ts +0 -6
  421. package/configuration/types/extended.js +0 -317
  422. package/configuration/types/extended.js.map +0 -1
  423. package/configuration/types/index.d.ts +0 -14
  424. package/configuration/types/index.js +0 -51
  425. package/configuration/types/index.js.map +0 -1
  426. package/configuration/types/minimal.d.ts +0 -6
  427. package/configuration/types/minimal.js +0 -43
  428. package/configuration/types/minimal.js.map +0 -1
  429. package/configuration/types/renderOnlyDefault.d.ts +0 -30
  430. package/configuration/types/renderOnlyDefault.js +0 -31
  431. package/configuration/types/renderOnlyDefault.js.map +0 -1
  432. package/configuration/types/shadowLight.d.ts +0 -9
  433. package/configuration/types/shadowLight.js +0 -64
  434. package/configuration/types/shadowLight.js.map +0 -1
  435. package/helper/index.d.ts +0 -29
  436. package/helper/index.js +0 -66
  437. package/helper/index.js.map +0 -1
  438. package/index.d.ts +0 -30
  439. package/index.js +0 -46
  440. package/index.js.map +0 -1
  441. package/initializer.d.ts +0 -11
  442. package/initializer.js +0 -35
  443. package/initializer.js.map +0 -1
  444. package/interfaces.d.ts +0 -5
  445. package/interfaces.js +0 -7
  446. package/interfaces.js.map +0 -1
  447. package/labs/environmentSerializer.d.ts +0 -126
  448. package/labs/environmentSerializer.js +0 -191
  449. package/labs/environmentSerializer.js.map +0 -1
  450. package/labs/texture.d.ts +0 -183
  451. package/labs/texture.js +0 -350
  452. package/labs/texture.js.map +0 -1
  453. package/labs/viewerLabs.d.ts +0 -51
  454. package/labs/viewerLabs.js +0 -134
  455. package/labs/viewerLabs.js.map +0 -1
  456. package/loader/modelLoader.d.ts +0 -56
  457. package/loader/modelLoader.js +0 -199
  458. package/loader/modelLoader.js.map +0 -1
  459. package/loader/plugins/applyMaterialConfig.d.ts +0 -12
  460. package/loader/plugins/applyMaterialConfig.js +0 -16
  461. package/loader/plugins/applyMaterialConfig.js.map +0 -1
  462. package/loader/plugins/extendedMaterialLoaderPlugin.d.ts +0 -9
  463. package/loader/plugins/extendedMaterialLoaderPlugin.js +0 -16
  464. package/loader/plugins/extendedMaterialLoaderPlugin.js.map +0 -1
  465. package/loader/plugins/index.d.ts +0 -19
  466. package/loader/plugins/index.js +0 -44
  467. package/loader/plugins/index.js.map +0 -1
  468. package/loader/plugins/loaderPlugin.d.ts +0 -24
  469. package/loader/plugins/loaderPlugin.js +0 -2
  470. package/loader/plugins/loaderPlugin.js.map +0 -1
  471. package/loader/plugins/msftLodLoaderPlugin.d.ts +0 -12
  472. package/loader/plugins/msftLodLoaderPlugin.js +0 -21
  473. package/loader/plugins/msftLodLoaderPlugin.js.map +0 -1
  474. package/loader/plugins/telemetryLoaderPlugin.d.ts +0 -12
  475. package/loader/plugins/telemetryLoaderPlugin.js +0 -36
  476. package/loader/plugins/telemetryLoaderPlugin.js.map +0 -1
  477. package/managers/observablesManager.d.ts +0 -66
  478. package/managers/observablesManager.js +0 -35
  479. package/managers/observablesManager.js.map +0 -1
  480. package/managers/sceneManager.d.ts +0 -245
  481. package/managers/sceneManager.js +0 -1375
  482. package/managers/sceneManager.js.map +0 -1
  483. package/managers/telemetryManager.d.ts +0 -78
  484. package/managers/telemetryManager.js +0 -117
  485. package/managers/telemetryManager.js.map +0 -1
  486. package/model/modelAnimation.d.ts +0 -215
  487. package/model/modelAnimation.js +0 -237
  488. package/model/modelAnimation.js.map +0 -1
  489. package/model/viewerModel.d.ts +0 -233
  490. package/model/viewerModel.js +0 -673
  491. package/model/viewerModel.js.map +0 -1
  492. package/optimizer/custom/extended.d.ts +0 -13
  493. package/optimizer/custom/extended.js +0 -101
  494. package/optimizer/custom/extended.js.map +0 -1
  495. package/optimizer/custom/index.d.ts +0 -9
  496. package/optimizer/custom/index.js +0 -26
  497. package/optimizer/custom/index.js.map +0 -1
  498. package/renderOnlyIndex.d.ts +0 -11
  499. package/renderOnlyIndex.js +0 -18
  500. package/renderOnlyIndex.js.map +0 -1
  501. package/templating/eventManager.d.ts +0 -35
  502. package/templating/eventManager.js +0 -66
  503. package/templating/eventManager.js.map +0 -1
  504. package/templating/plugins/hdButtonPlugin.d.ts +0 -9
  505. package/templating/plugins/hdButtonPlugin.js +0 -21
  506. package/templating/plugins/hdButtonPlugin.js.map +0 -1
  507. package/templating/plugins/printButton.d.ts +0 -9
  508. package/templating/plugins/printButton.js +0 -40
  509. package/templating/plugins/printButton.js.map +0 -1
  510. package/templating/templateManager.d.ts +0 -197
  511. package/templating/templateManager.js +0 -561
  512. package/templating/templateManager.js.map +0 -1
  513. package/templating/viewerTemplatePlugin.d.ts +0 -21
  514. package/templating/viewerTemplatePlugin.js +0 -69
  515. package/templating/viewerTemplatePlugin.js.map +0 -1
  516. package/viewer/defaultViewer.d.ts +0 -130
  517. package/viewer/defaultViewer.js +0 -675
  518. package/viewer/defaultViewer.js.map +0 -1
  519. package/viewer/renderOnlyViewer.d.ts +0 -9
  520. package/viewer/renderOnlyViewer.js +0 -46
  521. package/viewer/renderOnlyViewer.js.map +0 -1
  522. package/viewer/viewer.d.ts +0 -258
  523. package/viewer/viewer.js +0 -783
  524. package/viewer/viewer.js.map +0 -1
  525. package/viewer/viewerManager.d.ts +0 -58
  526. package/viewer/viewerManager.js +0 -91
  527. package/viewer/viewerManager.js.map +0 -1
  528. package/viewer/viewerWithTemplate.d.ts +0 -9
  529. package/viewer/viewerWithTemplate.js +0 -20
  530. package/viewer/viewerWithTemplate.js.map +0 -1
@@ -0,0 +1,3163 @@
1
+ import { S as ShaderStore } from './index-5EaMDaGg.esm.js';
2
+ import './oitFragment-DNM4M_TM.esm.js';
3
+ import './harmonicsFunctions-CZi4YSE7.esm.js';
4
+ import './logDepthDeclaration-Dc0_n0rX.esm.js';
5
+ import './helperFunctions-COVDWwPu.esm.js';
6
+
7
+ // Do not edit.
8
+ const name$y = "pbrFragmentExtraDeclaration";
9
+ const shader$y = `varying vPositionW: vec3f;
10
+ #if DEBUGMODE>0
11
+ varying vClipSpacePosition: vec4f;
12
+ #endif
13
+ #include<mainUVVaryingDeclaration>[1..7]
14
+ #ifdef NORMAL
15
+ varying vNormalW: vec3f;
16
+ #if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
17
+ varying vEnvironmentIrradiance: vec3f;
18
+ #endif
19
+ #endif
20
+ #if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
21
+ varying vColor: vec4f;
22
+ #endif
23
+ `;
24
+ // Sideeffect
25
+ ShaderStore.IncludesShadersStoreWGSL[name$y] = shader$y;
26
+
27
+ // Do not edit.
28
+ const name$x = "samplerFragmentAlternateDeclaration";
29
+ const shader$x = `#ifdef _DEFINENAME_
30
+ #if _DEFINENAME_DIRECTUV==1
31
+ #define v_VARYINGNAME_UV vMainUV1
32
+ #elif _DEFINENAME_DIRECTUV==2
33
+ #define v_VARYINGNAME_UV vMainUV2
34
+ #elif _DEFINENAME_DIRECTUV==3
35
+ #define v_VARYINGNAME_UV vMainUV3
36
+ #elif _DEFINENAME_DIRECTUV==4
37
+ #define v_VARYINGNAME_UV vMainUV4
38
+ #elif _DEFINENAME_DIRECTUV==5
39
+ #define v_VARYINGNAME_UV vMainUV5
40
+ #elif _DEFINENAME_DIRECTUV==6
41
+ #define v_VARYINGNAME_UV vMainUV6
42
+ #else
43
+ varying v_VARYINGNAME_UV: vec2f;
44
+ #endif
45
+ #endif
46
+ `;
47
+ // Sideeffect
48
+ ShaderStore.IncludesShadersStoreWGSL[name$x] = shader$x;
49
+
50
+ // Do not edit.
51
+ const name$w = "pbrFragmentSamplersDeclaration";
52
+ const shader$w = `#include<samplerFragmentDeclaration>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo)
53
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient)
54
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_SAMPLERNAME_,opacity)
55
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_SAMPLERNAME_,emissive)
56
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)
57
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity,_SAMPLERNAME_,reflectivity)
58
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler,_SAMPLERNAME_,microSurface)
59
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance,_SAMPLERNAME_,metallicReflectance)
60
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance,_SAMPLERNAME_,reflectance)
61
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_SAMPLERNAME_,decal)
62
+ #ifdef CLEARCOAT
63
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat,_SAMPLERNAME_,clearCoat)
64
+ #include<samplerFragmentAlternateDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness)
65
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS)
66
+ var clearCoatRoughnessSamplerSampler: sampler;var clearCoatRoughnessSampler: texture_2d<f32>;
67
+ #endif
68
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump,_SAMPLERNAME_,clearCoatBump)
69
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint,_SAMPLERNAME_,clearCoatTint)
70
+ #endif
71
+ #ifdef IRIDESCENCE
72
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence,_SAMPLERNAME_,iridescence)
73
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness,_SAMPLERNAME_,iridescenceThickness)
74
+ #endif
75
+ #ifdef SHEEN
76
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen,_SAMPLERNAME_,sheen)
77
+ #include<samplerFragmentAlternateDeclaration>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness)
78
+ #if defined(SHEEN_ROUGHNESS) && defined(SHEEN_TEXTURE_ROUGHNESS)
79
+ var sheenRoughnessSamplerSampler: sampler;var sheenRoughnessSampler: texture_2d<f32>;
80
+ #endif
81
+ #endif
82
+ #ifdef ANISOTROPIC
83
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy,_SAMPLERNAME_,anisotropy)
84
+ #endif
85
+ #ifdef REFLECTION
86
+ #ifdef REFLECTIONMAP_3D
87
+ var reflectionSamplerSampler: sampler;var reflectionSampler: texture_cube<f32>;
88
+ #ifdef LODBASEDMICROSFURACE
89
+ #else
90
+ var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_cube<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_cube<f32>;
91
+ #endif
92
+ #ifdef USEIRRADIANCEMAP
93
+ var irradianceSamplerSampler: sampler;var irradianceSampler: texture_cube<f32>;
94
+ #endif
95
+ #else
96
+ var reflectionSamplerSampler: sampler;var reflectionSampler: texture_2d<f32>;
97
+ #ifdef LODBASEDMICROSFURACE
98
+ #else
99
+ var reflectionLowSamplerSampler: sampler;var reflectionLowSampler: texture_2d<f32>;var reflectionHighSamplerSampler: sampler;var reflectionHighSampler: texture_2d<f32>;
100
+ #endif
101
+ #ifdef USEIRRADIANCEMAP
102
+ var irradianceSamplerSampler: sampler;var irradianceSampler: texture_2d<f32>;
103
+ #endif
104
+ #endif
105
+ #ifdef REFLECTIONMAP_SKYBOX
106
+ varying vPositionUVW: vec3f;
107
+ #else
108
+ #if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
109
+ varying vDirectionW: vec3f;
110
+ #endif
111
+ #endif
112
+ #endif
113
+ #ifdef ENVIRONMENTBRDF
114
+ var environmentBrdfSamplerSampler: sampler;var environmentBrdfSampler: texture_2d<f32>;
115
+ #endif
116
+ #ifdef SUBSURFACE
117
+ #ifdef SS_REFRACTION
118
+ #ifdef SS_REFRACTIONMAP_3D
119
+ var refractionSamplerSampler: sampler;var refractionSampler: texture_cube<f32>;
120
+ #ifdef LODBASEDMICROSFURACE
121
+ #else
122
+ var refractionLowSamplerSampler: sampler;var refractionLowSampler: texture_cube<f32>;var refractionHighSamplerSampler: sampler;var refractionHighSampler: texture_cube<f32>;
123
+ #endif
124
+ #else
125
+ var refractionSamplerSampler: sampler;var refractionSampler: texture_2d<f32>;
126
+ #ifdef LODBASEDMICROSFURACE
127
+ #else
128
+ var refractionLowSamplerSampler: sampler;var refractionLowSampler: texture_2d<f32>;var refractionHighSamplerSampler: sampler;var refractionHighSampler: texture_2d<f32>;
129
+ #endif
130
+ #endif
131
+ #endif
132
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness,_SAMPLERNAME_,thickness)
133
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity,_SAMPLERNAME_,refractionIntensity)
134
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity,_SAMPLERNAME_,translucencyIntensity)
135
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor,_SAMPLERNAME_,translucencyColor)
136
+ #endif
137
+ `;
138
+ // Sideeffect
139
+ ShaderStore.IncludesShadersStoreWGSL[name$w] = shader$w;
140
+
141
+ // Do not edit.
142
+ const name$v = "subSurfaceScatteringFunctions";
143
+ const shader$v = `fn testLightingForSSS(diffusionProfile: f32)->bool
144
+ {return diffusionProfile<1.;}`;
145
+ // Sideeffect
146
+ ShaderStore.IncludesShadersStoreWGSL[name$v] = shader$v;
147
+
148
+ // Do not edit.
149
+ const name$u = "importanceSampling";
150
+ const shader$u = `fn hemisphereCosSample(u: vec2f)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=1.-u.y;var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
151
+ fn hemisphereImportanceSampleDggx(u: vec2f,a: f32)->vec3f {var phi: f32=2.*PI*u.x;var cosTheta2: f32=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));var cosTheta: f32=sqrt(cosTheta2);var sinTheta: f32=sqrt(1.-cosTheta2);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
152
+ fn hemisphereImportanceSampleDCharlie(u: vec2f,a: f32)->vec3f {
153
+ var phi: f32=2.*PI*u.x;var sinTheta: f32=pow(u.y,a/(2.*a+1.));var cosTheta: f32=sqrt(1.-sinTheta*sinTheta);return vec3f(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;
154
+ // Sideeffect
155
+ ShaderStore.IncludesShadersStoreWGSL[name$u] = shader$u;
156
+
157
+ // Do not edit.
158
+ const name$t = "pbrHelperFunctions";
159
+ const shader$t = `#define MINIMUMVARIANCE 0.0005
160
+ fn convertRoughnessToAverageSlope(roughness: f32)->f32
161
+ {return roughness*roughness+MINIMUMVARIANCE;}
162
+ fn fresnelGrazingReflectance(reflectance0: f32)->f32 {var reflectance90: f32=saturate(reflectance0*25.0);return reflectance90;}
163
+ fn getAARoughnessFactors(normalVector: vec3f)->vec2f {
164
+ #ifdef SPECULARAA
165
+ var nDfdx: vec3f=dpdx(normalVector.xyz);var nDfdy: vec3f=dpdy(normalVector.xyz);var slopeSquare: f32=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));var geometricRoughnessFactor: f32=pow(saturate(slopeSquare),0.333);var geometricAlphaGFactor: f32=sqrt(slopeSquare);geometricAlphaGFactor*=0.75;return vec2f(geometricRoughnessFactor,geometricAlphaGFactor);
166
+ #else
167
+ return vec2f(0.);
168
+ #endif
169
+ }
170
+ #ifdef ANISOTROPIC
171
+ #ifdef ANISOTROPIC_LEGACY
172
+ fn getAnisotropicRoughness(alphaG: f32,anisotropy: f32)->vec2f {var alphaT: f32=max(alphaG*(1.0+anisotropy),MINIMUMVARIANCE);var alphaB: f32=max(alphaG*(1.0-anisotropy),MINIMUMVARIANCE);return vec2f(alphaT,alphaB);}
173
+ fn getAnisotropicBentNormals(T: vec3f,B: vec3f,N: vec3f,V: vec3f,anisotropy: f32,roughness: f32)->vec3f {var anisotropicFrameDirection: vec3f=select(T,B,anisotropy>=0.0);var anisotropicFrameTangent: vec3f=cross(normalize(anisotropicFrameDirection),V);var anisotropicFrameNormal: vec3f=cross(anisotropicFrameTangent,anisotropicFrameDirection);var anisotropicNormal: vec3f=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;}
174
+ #else
175
+ fn getAnisotropicRoughness(alphaG: f32,anisotropy: f32)->vec2f {var alphaT: f32=max(mix(alphaG,1.0,anisotropy*anisotropy),MINIMUMVARIANCE);var alphaB: f32=max(alphaG,MINIMUMVARIANCE);return vec2f(alphaT,alphaB);}
176
+ fn getAnisotropicBentNormals(T: vec3f,B: vec3f,N: vec3f,V: vec3f,anisotropy: f32,roughness: f32)->vec3f {var bentNormal: vec3f=cross(B,V);bentNormal=normalize(cross(bentNormal,B));var sq=1.0-anisotropy*(1.0-roughness);var a: f32=sq*sq*sq*sq;bentNormal=normalize(mix(bentNormal,N,a));return bentNormal;}
177
+ #endif
178
+ #endif
179
+ #if defined(CLEARCOAT) || defined(SS_REFRACTION)
180
+ fn cocaLambertVec3(alpha: vec3f,distance: f32)->vec3f {return exp(-alpha*distance);}
181
+ fn cocaLambert(NdotVRefract: f32,NdotLRefract: f32,alpha: vec3f,thickness: f32)->vec3f {return cocaLambertVec3(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
182
+ fn computeColorAtDistanceInMedia(color: vec3f,distance: f32)->vec3f {return -log(color)/distance;}
183
+ fn computeClearCoatAbsorption(NdotVRefract: f32,NdotLRefract: f32,clearCoatColor: vec3f,clearCoatThickness: f32,clearCoatIntensity: f32)->vec3f {var clearCoatAbsorption: vec3f=mix( vec3f(1.0),
184
+ cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
185
+ clearCoatIntensity);return clearCoatAbsorption;}
186
+ #endif
187
+ #ifdef MICROSURFACEAUTOMATIC
188
+ fn computeDefaultMicroSurface(microSurface: f32,reflectivityColor: vec3f)->f32
189
+ {const kReflectivityNoAlphaWorkflow_SmoothnessMax: f32=0.95;var reflectivityLuminance: f32=getLuminance(reflectivityColor);var reflectivityLuma: f32=sqrt(reflectivityLuminance);var resultMicroSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return resultMicroSurface;}
190
+ #endif
191
+ `;
192
+ // Sideeffect
193
+ ShaderStore.IncludesShadersStoreWGSL[name$t] = shader$t;
194
+
195
+ // Do not edit.
196
+ const name$s = "pbrDirectLightingSetupFunctions";
197
+ const shader$s = `struct preLightingInfo
198
+ {lightOffset: vec3f,
199
+ lightDistanceSquared: f32,
200
+ lightDistance: f32,
201
+ attenuation: f32,
202
+ L: vec3f,
203
+ H: vec3f,
204
+ NdotV: f32,
205
+ NdotLUnclamped: f32,
206
+ NdotL: f32,
207
+ VdotH: f32,
208
+ roughness: f32,
209
+ #ifdef IRIDESCENCE
210
+ iridescenceIntensity: f32
211
+ #endif
212
+ };fn computePointAndSpotPreLightingInfo(lightData: vec4f,V: vec3f,N: vec3f,posW: vec3f)->preLightingInfo {var result: preLightingInfo;result.lightOffset=lightData.xyz-posW;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);result.L=normalize(result.lightOffset);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));result.NdotLUnclamped=dot(N,result.L);result.NdotL=saturateEps(result.NdotLUnclamped);return result;}
213
+ fn computeDirectionalPreLightingInfo(lightData: vec4f,V: vec3f,N: vec3f)->preLightingInfo {var result: preLightingInfo;result.lightDistance=length(-lightData.xyz);result.L=normalize(-lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));result.NdotLUnclamped=dot(N,result.L);result.NdotL=saturateEps(result.NdotLUnclamped);return result;}
214
+ fn computeHemisphericPreLightingInfo(lightData: vec4f,V: vec3f,N: vec3f)->preLightingInfo {var result: preLightingInfo;result.NdotL=dot(N,lightData.xyz)*0.5+0.5;result.NdotL=saturateEps(result.NdotL);result.NdotLUnclamped=result.NdotL;
215
+ #ifdef SPECULARTERM
216
+ result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));
217
+ #endif
218
+ return result;}`;
219
+ // Sideeffect
220
+ ShaderStore.IncludesShadersStoreWGSL[name$s] = shader$s;
221
+
222
+ // Do not edit.
223
+ const name$r = "pbrDirectLightingFalloffFunctions";
224
+ const shader$r = `fn computeDistanceLightFalloff_Standard(lightOffset: vec3f,range: f32)->f32
225
+ {return max(0.,1.0-length(lightOffset)/range);}
226
+ fn computeDistanceLightFalloff_Physical(lightDistanceSquared: f32)->f32
227
+ {return 1.0/maxEps(lightDistanceSquared);}
228
+ fn computeDistanceLightFalloff_GLTF(lightDistanceSquared: f32,inverseSquaredRange: f32)->f32
229
+ {var lightDistanceFalloff: f32=1.0/maxEps(lightDistanceSquared);var factor: f32=lightDistanceSquared*inverseSquaredRange;var attenuation: f32=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;}
230
+ fn computeDistanceLightFalloff(lightOffset: vec3f,lightDistanceSquared: f32,range: f32,inverseSquaredRange: f32)->f32
231
+ {
232
+ #ifdef USEPHYSICALLIGHTFALLOFF
233
+ return computeDistanceLightFalloff_Physical(lightDistanceSquared);
234
+ #elif defined(USEGLTFLIGHTFALLOFF)
235
+ return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);
236
+ #else
237
+ return computeDistanceLightFalloff_Standard(lightOffset,range);
238
+ #endif
239
+ }
240
+ fn computeDirectionalLightFalloff_Standard(lightDirection: vec3f,directionToLightCenterW: vec3f,cosHalfAngle: f32,exponent: f32)->f32
241
+ {var falloff: f32=0.0;var cosAngle: f32=maxEps(dot(-lightDirection,directionToLightCenterW));if (cosAngle>=cosHalfAngle)
242
+ {falloff=max(0.,pow(cosAngle,exponent));}
243
+ return falloff;}
244
+ fn computeDirectionalLightFalloff_Physical(lightDirection: vec3f,directionToLightCenterW: vec3f,cosHalfAngle: f32)->f32
245
+ {const kMinusLog2ConeAngleIntensityRatio: f32=6.64385618977;
246
+ var concentrationKappa: f32=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);var lightDirectionSpreadSG: vec4f= vec4f(-lightDirection*concentrationKappa,-concentrationKappa);var falloff: f32=exp2(dot( vec4f(directionToLightCenterW,1.0),lightDirectionSpreadSG));return falloff;}
247
+ fn computeDirectionalLightFalloff_GLTF(lightDirection: vec3f,directionToLightCenterW: vec3f,lightAngleScale: f32,lightAngleOffset: f32)->f32
248
+ {var cd: f32=dot(-lightDirection,directionToLightCenterW);var falloff: f32=saturate(cd*lightAngleScale+lightAngleOffset);falloff*=falloff;return falloff;}
249
+ fn computeDirectionalLightFalloff(lightDirection: vec3f,directionToLightCenterW: vec3f,cosHalfAngle: f32,exponent: f32,lightAngleScale: f32,lightAngleOffset: f32)->f32
250
+ {
251
+ #ifdef USEPHYSICALLIGHTFALLOFF
252
+ return computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);
253
+ #elif defined(USEGLTFLIGHTFALLOFF)
254
+ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);
255
+ #else
256
+ return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);
257
+ #endif
258
+ }`;
259
+ // Sideeffect
260
+ ShaderStore.IncludesShadersStoreWGSL[name$r] = shader$r;
261
+
262
+ // Do not edit.
263
+ const name$q = "pbrBRDFFunctions";
264
+ const shader$q = `#define FRESNEL_MAXIMUM_ON_ROUGH 0.25
265
+ #ifdef MS_BRDF_ENERGY_CONSERVATION
266
+ fn getEnergyConservationFactor(specularEnvironmentR0: vec3f,environmentBrdf: vec3f)->vec3f {return 1.0+specularEnvironmentR0*(1.0/environmentBrdf.y-1.0);}
267
+ #endif
268
+ #ifdef ENVIRONMENTBRDF
269
+ fn getBRDFLookup(NdotV: f32,perceptualRoughness: f32)->vec3f {var UV: vec2f= vec2f(NdotV,perceptualRoughness);var brdfLookup: vec4f= textureSample(environmentBrdfSampler,environmentBrdfSamplerSampler,UV);
270
+ #ifdef ENVIRONMENTBRDF_RGBD
271
+ brdfLookup=vec4f(fromRGBD(brdfLookup.rgba),brdfLookup.a);
272
+ #endif
273
+ return brdfLookup.rgb;}
274
+ fn getReflectanceFromBRDFWithEnvLookup(specularEnvironmentR0: vec3f,specularEnvironmentR90: vec3f,environmentBrdf: vec3f)->vec3f {
275
+ #ifdef BRDF_V_HEIGHT_CORRELATED
276
+ var reflectance: vec3f=(specularEnvironmentR90-specularEnvironmentR0)*environmentBrdf.x+specularEnvironmentR0*environmentBrdf.y;
277
+ #else
278
+ var reflectance: vec3f=specularEnvironmentR0*environmentBrdf.x+specularEnvironmentR90*environmentBrdf.y;
279
+ #endif
280
+ return reflectance;}
281
+ fn getReflectanceFromBRDFLookup(specularEnvironmentR0: vec3f,environmentBrdf: vec3f)->vec3f {
282
+ #ifdef BRDF_V_HEIGHT_CORRELATED
283
+ var reflectance: vec3f=mix(environmentBrdf.xxx,environmentBrdf.yyy,specularEnvironmentR0);
284
+ #else
285
+ var reflectance: vec3f=specularEnvironmentR0*environmentBrdf.x+environmentBrdf.y;
286
+ #endif
287
+ return reflectance;}
288
+ #endif
289
+ /* NOT USED
290
+ #if defined(SHEEN) && defined(SHEEN_SOFTER)
291
+ fn getBRDFLookupCharlieSheen(NdotV: f32,perceptualRoughness: f32)->f32
292
+ {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));}
293
+ #endif
294
+ */
295
+ #if !defined(ENVIRONMENTBRDF) || defined(REFLECTIONMAP_SKYBOX) || defined(ALPHAFRESNEL)
296
+ fn getReflectanceFromAnalyticalBRDFLookup_Jones(VdotN: f32,reflectance0: vec3f,reflectance90: vec3f,smoothness: f32)->vec3f
297
+ {var weight: f32=mix(FRESNEL_MAXIMUM_ON_ROUGH,1.0,smoothness);return reflectance0+weight*(reflectance90-reflectance0)*pow5(saturate(1.0-VdotN));}
298
+ #endif
299
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF)
300
+ /**
301
+ * The sheen BRDF not containing F can be easily stored in the blue channel of the BRDF texture.
302
+ * The blue channel contains DCharlie*VAshikhmin*NdotL as a lokkup table
303
+ */
304
+ fn getSheenReflectanceFromBRDFLookup(reflectance0: vec3f,environmentBrdf: vec3f)->vec3f {var sheenEnvironmentReflectance: vec3f=reflectance0*environmentBrdf.b;return sheenEnvironmentReflectance;}
305
+ #endif
306
+ fn fresnelSchlickGGXVec3(VdotH: f32,reflectance0: vec3f,reflectance90: vec3f)->vec3f
307
+ {return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);}
308
+ fn fresnelSchlickGGX(VdotH: f32,reflectance0: f32,reflectance90: f32)->f32
309
+ {return reflectance0+(reflectance90-reflectance0)*pow5(1.0-VdotH);}
310
+ #ifdef CLEARCOAT
311
+ fn getR0RemappedForClearCoat(f0: vec3f)->vec3f {
312
+ #ifdef CLEARCOAT_DEFAULTIOR
313
+ #ifdef MOBILE
314
+ return saturateVec3(f0*(f0*0.526868+0.529324)-0.0482256);
315
+ #else
316
+ return saturateVec3(f0*(f0*(0.941892-0.263008*f0)+0.346479)-0.0285998);
317
+ #endif
318
+ #else
319
+ 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);
320
+ #endif
321
+ }
322
+ #endif
323
+ #ifdef IRIDESCENCE
324
+ const XYZ_TO_REC709: mat3x3f= mat3x3f(
325
+ 3.2404542,-0.9692660, 0.0556434,
326
+ -1.5371385, 1.8760108,-0.2040259,
327
+ -0.4985314, 0.0415560, 1.0572252
328
+ );fn getIORTfromAirToSurfaceR0(f0: vec3f)->vec3f {var sqrtF0: vec3f=sqrt(f0);return (1.+sqrtF0)/(1.-sqrtF0);}
329
+ fn getR0fromIORsVec3(iorT: vec3f,iorI: f32)->vec3f {return squareVec3((iorT- vec3f(iorI))/(iorT+ vec3f(iorI)));}
330
+ fn getR0fromIORs(iorT: f32,iorI: f32)->f32 {return square((iorT-iorI)/(iorT+iorI));}
331
+ 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;}
332
+ 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;}
333
+ 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;}
334
+ var phi21: f32=PI-phi12;var baseIOR: vec3f=getIORTfromAirToSurfaceR0(clamp(baseF0,vec3f(0.0),vec3f(0.9999)));
335
+ var R1: vec3f=getR0fromIORsVec3(baseIOR,iridescenceIOR);var R23: vec3f=fresnelSchlickGGXVec3(cosTheta2,R1, vec3f(1.));var phi23: vec3f= vec3f(0.0);if (baseIOR[0]<iridescenceIOR) {phi23[0]=PI;}
336
+ if (baseIOR[1]<iridescenceIOR) {phi23[1]=PI;}
337
+ if (baseIOR[2]<iridescenceIOR) {phi23[2]=PI;}
338
+ 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++)
339
+ {Cm*=r123;var Sm: vec3f=2.0*evalSensitivity( f32(m)*opd, f32(m)*phi);I+=Cm*Sm;}
340
+ return max(I, vec3f(0.0));}
341
+ #endif
342
+ fn normalDistributionFunction_TrowbridgeReitzGGX(NdotH: f32,alphaG: f32)->f32
343
+ {var a2: f32=alphaG*alphaG;var d: f32=NdotH*NdotH*(a2-1.0)+1.0;return a2/(PI*d*d);}
344
+ #ifdef SHEEN
345
+ fn normalDistributionFunction_CharlieSheen(NdotH: f32,alphaG: f32)->f32
346
+ {var invR: f32=1./alphaG;var cos2h: f32=NdotH*NdotH;var sin2h: f32=1.-cos2h;return (2.+invR)*pow(sin2h,invR*.5)/(2.*PI);}
347
+ #endif
348
+ #ifdef ANISOTROPIC
349
+ 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;}
350
+ #endif
351
+ #ifdef BRDF_V_HEIGHT_CORRELATED
352
+ fn smithVisibility_GGXCorrelated(NdotL: f32,NdotV: f32,alphaG: f32)->f32 {
353
+ #ifdef MOBILE
354
+ var GGXV: f32=NdotL*(NdotV*(1.0-alphaG)+alphaG);var GGXL: f32=NdotV*(NdotL*(1.0-alphaG)+alphaG);return 0.5/(GGXV+GGXL);
355
+ #else
356
+ 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);
357
+ #endif
358
+ }
359
+ #else
360
+ fn smithVisibilityG1_TrowbridgeReitzGGXFast(dot: f32,alphaG: f32)->f32
361
+ {
362
+ #ifdef MOBILE
363
+ return 1.0/(dot+alphaG+(1.0-alphaG)*dot ));
364
+ #else
365
+ var alphaSquared: f32=alphaG*alphaG;return 1.0/(dot+sqrt(alphaSquared+(1.0-alphaSquared)*dot*dot));
366
+ #endif
367
+ }
368
+ fn smithVisibility_TrowbridgeReitzGGXFast(NdotL: f32,NdotV: f32,alphaG: f32)->f32
369
+ {var visibility: f32=smithVisibilityG1_TrowbridgeReitzGGXFast(NdotL,alphaG)*smithVisibilityG1_TrowbridgeReitzGGXFast(NdotV,alphaG);return visibility;}
370
+ #endif
371
+ #ifdef ANISOTROPIC
372
+ 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;}
373
+ #endif
374
+ #ifdef CLEARCOAT
375
+ fn visibility_Kelemen(VdotH: f32)->f32 {return 0.25/(VdotH*VdotH); }
376
+ #endif
377
+ #ifdef SHEEN
378
+ fn visibility_Ashikhmin(NdotL: f32,NdotV: f32)->f32
379
+ {return 1./(4.*(NdotL+NdotV-NdotL*NdotV));}
380
+ /* NOT USED
381
+ #ifdef SHEEN_SOFTER
382
+ fn l(x: f32,alphaG: f32)->f32
383
+ {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;}
384
+ fn lambdaSheen(cosTheta: f32,alphaG: f32)->f32
385
+ {return abs(cosTheta)<0.5 ? exp(l(cosTheta,alphaG)) : exp(2.0*l(0.5,alphaG)-l(1.0-cosTheta,alphaG));}
386
+ fn visibility_CharlieSheen(NdotL: f32,NdotV: f32,alphaG: f32)->f32
387
+ {var G: f32=1.0/(1.0+lambdaSheen(NdotV,alphaG)+lambdaSheen(NdotL,alphaG));return G/(4.0*NdotV*NdotL);}
388
+ #endif
389
+ */
390
+ #endif
391
+ 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 =
392
+ (1.0+(diffuseFresnel90-1.0)*diffuseFresnelNL) *
393
+ (1.0+(diffuseFresnel90-1.0)*diffuseFresnelNV);return fresnel/PI;}
394
+ #ifdef SS_TRANSLUCENCY
395
+ 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);}
396
+ 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);}
397
+ #endif
398
+ `;
399
+ // Sideeffect
400
+ ShaderStore.IncludesShadersStoreWGSL[name$q] = shader$q;
401
+
402
+ // Do not edit.
403
+ const name$p = "hdrFilteringFunctions";
404
+ const shader$p = `#ifdef NUM_SAMPLES
405
+ #if NUM_SAMPLES>0
406
+ fn radicalInverse_VdC(value: u32)->f32
407
+ {var bits=(value<<16u) | (value>>16u);bits=((bits & 0x55555555u)<<1u) | ((bits & 0xAAAAAAAAu)>>1u);bits=((bits & 0x33333333u)<<2u) | ((bits & 0xCCCCCCCCu)>>2u);bits=((bits & 0x0F0F0F0Fu)<<4u) | ((bits & 0xF0F0F0F0u)>>4u);bits=((bits & 0x00FF00FFu)<<8u) | ((bits & 0xFF00FF00u)>>8u);return f32(bits)*2.3283064365386963e-10; }
408
+ fn hammersley(i: u32,N: u32)->vec2f
409
+ {return vec2f( f32(i)/ f32(N),radicalInverse_VdC(i));}
410
+ fn log4(x: f32)->f32 {return log2(x)/2.;}
411
+ const NUM_SAMPLES_FLOAT: f32= f32(NUM_SAMPLES);const NUM_SAMPLES_FLOAT_INVERSED: f32=1./NUM_SAMPLES_FLOAT;const K: f32=4.;fn irradiance(inputTexture: texture_cube<f32>,inputSampler: sampler,inputN: vec3f,filteringInfo: vec2f)->vec3f
412
+ {var n: vec3f=normalize(inputN);var result: vec3f= vec3f(0.0);var tangent: vec3f=select(vec3f(1.,0.,0.),vec3f(0.,0.,1.),abs(n.z)<0.999);tangent=normalize(cross(tangent,n));var bitangent: vec3f=cross(n,tangent);var tbn: mat3x3f= mat3x3f(tangent,bitangent,n);var maxLevel: f32=filteringInfo.y;var dim0: f32=filteringInfo.x;var omegaP: f32=(4.*PI)/(6.*dim0*dim0);for(var i: u32=0u; i<NUM_SAMPLES; i++)
413
+ {var Xi: vec2f=hammersley(i,NUM_SAMPLES);var Ls: vec3f=hemisphereCosSample(Xi);Ls=normalize(Ls);var Ns: vec3f= vec3f(0.,0.,1.);var NoL: f32=dot(Ns,Ls);if (NoL>0.) {var pdf_inversed: f32=PI/NoL;var omegaS: f32=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;var l: f32=log4(omegaS)-log4(omegaP)+log4(K);var mipLevel: f32=clamp(l,0.0,maxLevel);var c: vec3f=textureSampleLevel(inputTexture,inputSampler,tbn*Ls,mipLevel).rgb;
414
+ #ifdef GAMMA_INPUT
415
+ c=toLinearSpaceVec3(c);
416
+ #endif
417
+ result+=c;}}
418
+ result=result*NUM_SAMPLES_FLOAT_INVERSED;return result;}
419
+ fn radiance(alphaG: f32,inputTexture: texture_cube<f32>,inputSampler: sampler,inputN: vec3f,filteringInfo: vec2f)->vec3f
420
+ {var n: vec3f=normalize(inputN);var c: vec3f=textureSample(inputTexture,inputSampler,n).rgb;
421
+ if (alphaG==0.) {
422
+ #ifdef GAMMA_INPUT
423
+ c=toLinearSpace(c);
424
+ #endif
425
+ return c;} else {var result: vec3f= vec3f(0.);var tangent: vec3f=select(vec3f(1.,0.,0.),vec3f(0.,0.,1.),abs(n.z)<0.999);tangent=normalize(cross(tangent,n));var bitangent: vec3f=cross(n,tangent);var tbn: mat3x3f= mat3x3f(tangent,bitangent,n);var maxLevel: f32=filteringInfo.y;var dim0: f32=filteringInfo.x;var omegaP: f32=(4.*PI)/(6.*dim0*dim0);var weight: f32=0.;for(var i: u32=0u; i<NUM_SAMPLES; i++)
426
+ {var Xi: vec2f=hammersley(i,NUM_SAMPLES);var H: vec3f=hemisphereImportanceSampleDggx(Xi,alphaG);var NoV: f32=1.;var NoH: f32=H.z;var NoH2: f32=H.z*H.z;var NoL: f32=2.*NoH2-1.;var L: vec3f= vec3f(2.*NoH*H.x,2.*NoH*H.y,NoL);L=normalize(L);if (NoL>0.) {var pdf_inversed: f32=4./normalDistributionFunction_TrowbridgeReitzGGX(NoH,alphaG);var omegaS: f32=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;var l: f32=log4(omegaS)-log4(omegaP)+log4(K);var mipLevel: f32=clamp( f32(l),0.0,maxLevel);weight+=NoL;var c: vec3f=textureSampleLevel(inputTexture,inputSampler,tbn*L,mipLevel).rgb;
427
+ #ifdef GAMMA_INPUT
428
+ c=toLinearSpace(c);
429
+ #endif
430
+ result+=c*NoL;}}
431
+ result=result/weight;return result;}}
432
+ #endif
433
+ #endif
434
+ `;
435
+ // Sideeffect
436
+ ShaderStore.IncludesShadersStoreWGSL[name$p] = shader$p;
437
+
438
+ // Do not edit.
439
+ const name$o = "pbrDirectLightingFunctions";
440
+ const shader$o = `#define CLEARCOATREFLECTANCE90 1.0
441
+ struct lightingInfo
442
+ {diffuse: vec3f,
443
+ #ifdef SPECULARTERM
444
+ specular: vec3f,
445
+ #endif
446
+ #ifdef CLEARCOAT
447
+ clearCoat: vec4f,
448
+ #endif
449
+ #ifdef SHEEN
450
+ sheen: vec3f
451
+ #endif
452
+ };fn adjustRoughnessFromLightProperties(roughness: f32,lightRadius: f32,lightDistance: f32)->f32 {
453
+ #if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)
454
+ var lightRoughness: f32=lightRadius/lightDistance;var totalRoughness: f32=saturate(lightRoughness+roughness);return totalRoughness;
455
+ #else
456
+ return roughness;
457
+ #endif
458
+ }
459
+ fn computeHemisphericDiffuseLighting(info: preLightingInfo,lightColor: vec3f,groundColor: vec3f)->vec3f {return mix(groundColor,lightColor,info.NdotL);}
460
+ fn computeDiffuseLighting(info: preLightingInfo,lightColor: vec3f)->vec3f {var diffuseTerm: f32=diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness);return diffuseTerm*info.attenuation*info.NdotL*lightColor;}
461
+ fn computeProjectionTextureDiffuseLighting(projectionLightTexture: texture_2d<f32>,projectionLightSampler: sampler,textureProjectionMatrix: mat4x4f,posW: vec3f)->vec3f{var strq: vec4f=textureProjectionMatrix* vec4f(posW,1.0);strq/=strq.w;var textureColor: vec3f=textureSample(projectionLightTexture,projectionLightSampler,strq.xy).rgb;return toLinearSpaceVec3(textureColor);}
462
+ #ifdef SS_TRANSLUCENCY
463
+ fn computeDiffuseAndTransmittedLighting(info: preLightingInfo,lightColor: vec3f,transmittance: vec3f)->vec3f {var NdotL: f32=absEps(info.NdotLUnclamped);var wrapNdotL: f32=computeWrappedDiffuseNdotL(NdotL,0.02);var trAdapt: f32=step(0.,info.NdotLUnclamped);var transmittanceNdotL: vec3f=mix(transmittance*wrapNdotL, vec3f(wrapNdotL),trAdapt);var diffuseTerm: f32=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);return diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;}
464
+ #endif
465
+ #ifdef SPECULARTERM
466
+ fn computeSpecularLighting(info: preLightingInfo,N: vec3f,reflectance0: vec3f,reflectance90: vec3f,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var roughness: f32=max(info.roughness,geometricRoughnessFactor);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var fresnel: vec3f=fresnelSchlickGGXVec3(info.VdotH,reflectance0,reflectance90);
467
+ #ifdef IRIDESCENCE
468
+ fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
469
+ #endif
470
+ var distribution: f32=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);
471
+ #ifdef BRDF_V_HEIGHT_CORRELATED
472
+ var smithVisibility: f32=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG);
473
+ #else
474
+ var smithVisibility: f32=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG);
475
+ #endif
476
+ var specTerm: vec3f=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
477
+ #endif
478
+ #ifdef ANISOTROPIC
479
+ fn computeAnisotropicSpecularLighting(info: preLightingInfo,V: vec3f,N: vec3f,T: vec3f,B: vec3f,anisotropy: f32,reflectance0: vec3f,reflectance90: vec3f,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var TdotH: f32=dot(T,info.H);var BdotH: f32=dot(B,info.H);var TdotV: f32=dot(T,V);var BdotV: f32=dot(B,V);var TdotL: f32=dot(T,info.L);var BdotL: f32=dot(B,info.L);var alphaG: f32=convertRoughnessToAverageSlope(info.roughness);var alphaTB: vec2f=getAnisotropicRoughness(alphaG,anisotropy);alphaTB=max(alphaTB,vec2f(geometricRoughnessFactor*geometricRoughnessFactor));var fresnel: vec3f=fresnelSchlickGGXVec3(info.VdotH,reflectance0,reflectance90);
480
+ #ifdef IRIDESCENCE
481
+ fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
482
+ #endif
483
+ var distribution: f32=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);var smithVisibility: f32=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);var specTerm: vec3f=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
484
+ #endif
485
+ #ifdef CLEARCOAT
486
+ fn computeClearCoatLighting(info: preLightingInfo,Ncc: vec3f,geometricRoughnessFactor: f32,clearCoatIntensity: f32,lightColor: vec3f)->vec4f {var NccdotL: f32=saturateEps(dot(Ncc,info.L));var NccdotH: f32=saturateEps(dot(Ncc,info.H));var clearCoatRoughness: f32=max(info.roughness,geometricRoughnessFactor);var alphaG: f32=convertRoughnessToAverageSlope(clearCoatRoughness);var fresnel: f32=fresnelSchlickGGX(info.VdotH,uniforms.vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnel*=clearCoatIntensity;var distribution: f32=normalDistributionFunction_TrowbridgeReitzGGX(NccdotH,alphaG);var kelemenVisibility: f32=visibility_Kelemen(info.VdotH);var clearCoatTerm: f32=fresnel*distribution*kelemenVisibility;return vec4f(
487
+ clearCoatTerm*info.attenuation*NccdotL*lightColor,
488
+ 1.0-fresnel
489
+ );}
490
+ fn computeClearCoatLightingAbsorption(NdotVRefract: f32,L: vec3f,Ncc: vec3f,clearCoatColor: vec3f,clearCoatThickness: f32,clearCoatIntensity: f32)->vec3f {var LRefract: vec3f=-refract(L,Ncc,uniforms.vClearCoatRefractionParams.y);var NdotLRefract: f32=saturateEps(dot(Ncc,LRefract));var absorption: vec3f=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);return absorption;}
491
+ #endif
492
+ #ifdef SHEEN
493
+ fn computeSheenLighting(info: preLightingInfo,N: vec3f,reflectance0: vec3f,reflectance90: vec3f,geometricRoughnessFactor: f32,lightColor: vec3f)->vec3f {var NdotH: f32=saturateEps(dot(N,info.H));var roughness: f32=max(info.roughness,geometricRoughnessFactor);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var fresnel: f32=1.;var distribution: f32=normalDistributionFunction_CharlieSheen(NdotH,alphaG);/*#ifdef SHEEN_SOFTER
494
+ var visibility: f32=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG);
495
+ #else */
496
+ var visibility: f32=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */
497
+ var sheenTerm: f32=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;}
498
+ #endif
499
+ `;
500
+ // Sideeffect
501
+ ShaderStore.IncludesShadersStoreWGSL[name$o] = shader$o;
502
+
503
+ // Do not edit.
504
+ const name$n = "pbrIBLFunctions";
505
+ const shader$n = `#if defined(REFLECTION) || defined(SS_REFRACTION)
506
+ fn getLodFromAlphaG(cubeMapDimensionPixels: f32,microsurfaceAverageSlope: f32)->f32 {var microsurfaceAverageSlopeTexels: f32=cubeMapDimensionPixels*microsurfaceAverageSlope;var lod: f32=log2(microsurfaceAverageSlopeTexels);return lod;}
507
+ fn getLinearLodFromRoughness(cubeMapDimensionPixels: f32,roughness: f32)->f32 {var lod: f32=log2(cubeMapDimensionPixels)*roughness;return lod;}
508
+ #endif
509
+ #if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)
510
+ fn environmentRadianceOcclusion(ambientOcclusion: f32,NdotVUnclamped: f32)->f32 {var temp: f32=NdotVUnclamped+ambientOcclusion;return saturate(temp*temp-1.0+ambientOcclusion);}
511
+ #endif
512
+ #if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)
513
+ 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;}
514
+ #endif
515
+ #if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)
516
+ fn UNPACK_LOD(x: f32)->f32 {return (1.0-x)*255.0;}
517
+ fn getLodFromAlphaGNdotV(cubeMapDimensionPixels: f32,alphaG: f32,NdotV: f32)->f32 {var microsurfaceAverageSlope: f32=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
518
+ #endif
519
+ `;
520
+ // Sideeffect
521
+ ShaderStore.IncludesShadersStoreWGSL[name$n] = shader$n;
522
+
523
+ // Do not edit.
524
+ const name$m = "pbrBlockAlbedoOpacity";
525
+ const shader$m = `struct albedoOpacityOutParams
526
+ {surfaceAlbedo: vec3f,
527
+ alpha: f32};
528
+ #define pbr_inline
529
+ fn albedoOpacityBlock(
530
+ vAlbedoColor: vec4f
531
+ #ifdef ALBEDO
532
+ ,albedoTexture: vec4f
533
+ ,albedoInfos: vec2f
534
+ #endif
535
+ #ifdef OPACITY
536
+ ,opacityMap: vec4f
537
+ ,vOpacityInfos: vec2f
538
+ #endif
539
+ #ifdef DETAIL
540
+ ,detailColor: vec4f
541
+ ,vDetailInfos: vec4f
542
+ #endif
543
+ #ifdef DECAL
544
+ ,decalColor: vec4f
545
+ ,vDecalInfos: vec4f
546
+ #endif
547
+ )->albedoOpacityOutParams
548
+ {var outParams: albedoOpacityOutParams;var surfaceAlbedo: vec3f=vAlbedoColor.rgb;var alpha: f32=vAlbedoColor.a;
549
+ #ifdef ALBEDO
550
+ #if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)
551
+ alpha*=albedoTexture.a;
552
+ #endif
553
+ #ifdef GAMMAALBEDO
554
+ surfaceAlbedo*=toLinearSpaceVec3(albedoTexture.rgb);
555
+ #else
556
+ surfaceAlbedo*=albedoTexture.rgb;
557
+ #endif
558
+ surfaceAlbedo*=albedoInfos.y;
559
+ #endif
560
+ #ifndef DECAL_AFTER_DETAIL
561
+ #include<decalFragment>
562
+ #endif
563
+ #if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
564
+ surfaceAlbedo*=fragmentInputs.vColor.rgb;
565
+ #endif
566
+ #ifdef DETAIL
567
+ var detailAlbedo: f32=2.0*mix(0.5,detailColor.r,vDetailInfos.y);surfaceAlbedo=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo;
568
+ #endif
569
+ #ifdef DECAL_AFTER_DETAIL
570
+ #include<decalFragment>
571
+ #endif
572
+ #define CUSTOM_FRAGMENT_UPDATE_ALBEDO
573
+ #ifdef OPACITY
574
+ #ifdef OPACITYRGB
575
+ alpha=getLuminance(opacityMap.rgb);
576
+ #else
577
+ alpha*=opacityMap.a;
578
+ #endif
579
+ alpha*=vOpacityInfos.y;
580
+ #endif
581
+ #if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)
582
+ alpha*=fragmentInputs.vColor.a;
583
+ #endif
584
+ #if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)
585
+ #ifdef ALPHATEST
586
+ #if DEBUGMODE != 88
587
+ if (alpha<ALPHATESTVALUE) {discard;}
588
+ #endif
589
+ #ifndef ALPHABLEND
590
+ alpha=1.0;
591
+ #endif
592
+ #endif
593
+ #endif
594
+ outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;}
595
+ `;
596
+ // Sideeffect
597
+ ShaderStore.IncludesShadersStoreWGSL[name$m] = shader$m;
598
+
599
+ // Do not edit.
600
+ const name$l = "pbrBlockReflectivity";
601
+ const shader$l = `struct reflectivityOutParams
602
+ {microSurface: f32,
603
+ roughness: f32,
604
+ surfaceReflectivityColor: vec3f,
605
+ #ifdef METALLICWORKFLOW
606
+ surfaceAlbedo: vec3f,
607
+ #endif
608
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
609
+ ambientOcclusionColor: vec3f,
610
+ #endif
611
+ #if DEBUGMODE>0
612
+ #ifdef METALLICWORKFLOW
613
+ metallicRoughness: vec2f,
614
+ #ifdef REFLECTIVITY
615
+ surfaceMetallicColorMap: vec4f,
616
+ #endif
617
+ #ifndef FROSTBITE_REFLECTANCE
618
+ metallicF0: vec3f,
619
+ #endif
620
+ #else
621
+ #ifdef REFLECTIVITY
622
+ surfaceReflectivityColorMap: vec4f,
623
+ #endif
624
+ #endif
625
+ #endif
626
+ };
627
+ #define pbr_inline
628
+ fn reflectivityBlock(
629
+ vReflectivityColor: vec4f
630
+ #ifdef METALLICWORKFLOW
631
+ ,surfaceAlbedo: vec3f
632
+ ,metallicReflectanceFactors: vec4f
633
+ #endif
634
+ #ifdef REFLECTIVITY
635
+ ,reflectivityInfos: vec3f
636
+ ,surfaceMetallicOrReflectivityColorMap: vec4f
637
+ #endif
638
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
639
+ ,ambientOcclusionColorIn: vec3f
640
+ #endif
641
+ #ifdef MICROSURFACEMAP
642
+ ,microSurfaceTexel: vec4f
643
+ #endif
644
+ #ifdef DETAIL
645
+ ,detailColor: vec4f
646
+ ,vDetailInfos: vec4f
647
+ #endif
648
+ )->reflectivityOutParams
649
+ {var outParams: reflectivityOutParams;var microSurface: f32=vReflectivityColor.a;var surfaceReflectivityColor: vec3f=vReflectivityColor.rgb;
650
+ #ifdef METALLICWORKFLOW
651
+ var metallicRoughness: vec2f=surfaceReflectivityColor.rg;
652
+ #ifdef REFLECTIVITY
653
+ #if DEBUGMODE>0
654
+ outParams.surfaceMetallicColorMap=surfaceMetallicOrReflectivityColorMap;
655
+ #endif
656
+ #ifdef AOSTOREINMETALMAPRED
657
+ var aoStoreInMetalMap: vec3f= vec3f(surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r);outParams.ambientOcclusionColor=mix(ambientOcclusionColorIn,aoStoreInMetalMap,reflectivityInfos.z);
658
+ #endif
659
+ #ifdef METALLNESSSTOREINMETALMAPBLUE
660
+ metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.b;
661
+ #else
662
+ metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.r;
663
+ #endif
664
+ #ifdef ROUGHNESSSTOREINMETALMAPALPHA
665
+ metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.a;
666
+ #else
667
+ #ifdef ROUGHNESSSTOREINMETALMAPGREEN
668
+ metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.g;
669
+ #endif
670
+ #endif
671
+ #endif
672
+ #ifdef DETAIL
673
+ var detailRoughness: f32=mix(0.5,detailColor.b,vDetailInfos.w);var loLerp: f32=mix(0.,metallicRoughness.g,detailRoughness*2.);var hiLerp: f32=mix(metallicRoughness.g,1.,(detailRoughness-0.5)*2.);metallicRoughness.g=mix(loLerp,hiLerp,step(detailRoughness,0.5));
674
+ #endif
675
+ #ifdef MICROSURFACEMAP
676
+ metallicRoughness.g*=microSurfaceTexel.r;
677
+ #endif
678
+ #if DEBUGMODE>0
679
+ outParams.metallicRoughness=metallicRoughness;
680
+ #endif
681
+ #define CUSTOM_FRAGMENT_UPDATE_METALLICROUGHNESS
682
+ microSurface=1.0-metallicRoughness.g;var baseColor: vec3f=surfaceAlbedo;
683
+ #ifdef FROSTBITE_REFLECTANCE
684
+ outParams.surfaceAlbedo=baseColor.rgb*(1.0-metallicRoughness.r);surfaceReflectivityColor=mix(0.16*reflectance*reflectance,baseColor,metallicRoughness.r);
685
+ #else
686
+ var metallicF0: vec3f=metallicReflectanceFactors.rgb;
687
+ #if DEBUGMODE>0
688
+ outParams.metallicF0=metallicF0;
689
+ #endif
690
+ outParams.surfaceAlbedo=mix(baseColor.rgb*(1.0-metallicF0), vec3f(0.,0.,0.),metallicRoughness.r);surfaceReflectivityColor=mix(metallicF0,baseColor,metallicRoughness.r);
691
+ #endif
692
+ #else
693
+ #ifdef REFLECTIVITY
694
+ surfaceReflectivityColor*=surfaceMetallicOrReflectivityColorMap.rgb;
695
+ #if DEBUGMODE>0
696
+ outParams.surfaceReflectivityColorMap=surfaceMetallicOrReflectivityColorMap;
697
+ #endif
698
+ #ifdef MICROSURFACEFROMREFLECTIVITYMAP
699
+ microSurface*=surfaceMetallicOrReflectivityColorMap.a;microSurface*=reflectivityInfos.z;
700
+ #else
701
+ #ifdef MICROSURFACEAUTOMATIC
702
+ microSurface*=computeDefaultMicroSurface(microSurface,surfaceReflectivityColor);
703
+ #endif
704
+ #ifdef MICROSURFACEMAP
705
+ microSurface*=microSurfaceTexel.r;
706
+ #endif
707
+ #define CUSTOM_FRAGMENT_UPDATE_MICROSURFACE
708
+ #endif
709
+ #endif
710
+ #endif
711
+ microSurface=saturate(microSurface);var roughness: f32=1.-microSurface;outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.surfaceReflectivityColor=surfaceReflectivityColor;return outParams;}
712
+ `;
713
+ // Sideeffect
714
+ ShaderStore.IncludesShadersStoreWGSL[name$l] = shader$l;
715
+
716
+ // Do not edit.
717
+ const name$k = "pbrBlockAmbientOcclusion";
718
+ const shader$k = `struct ambientOcclusionOutParams
719
+ {ambientOcclusionColor: vec3f,
720
+ #if DEBUGMODE>0 && defined(AMBIENT)
721
+ ambientOcclusionColorMap: vec3f
722
+ #endif
723
+ };
724
+ #define pbr_inline
725
+ fn ambientOcclusionBlock(
726
+ #ifdef AMBIENT
727
+ ambientOcclusionColorMap_: vec3f,
728
+ vAmbientInfos: vec4f
729
+ #endif
730
+ )->ambientOcclusionOutParams
731
+ {
732
+ var outParams: ambientOcclusionOutParams;var ambientOcclusionColor: vec3f= vec3f(1.,1.,1.);
733
+ #ifdef AMBIENT
734
+ var ambientOcclusionColorMap: vec3f=ambientOcclusionColorMap_*vAmbientInfos.y;
735
+ #ifdef AMBIENTINGRAYSCALE
736
+ ambientOcclusionColorMap= vec3f(ambientOcclusionColorMap.r,ambientOcclusionColorMap.r,ambientOcclusionColorMap.r);
737
+ #endif
738
+ ambientOcclusionColor=mix(ambientOcclusionColor,ambientOcclusionColorMap,vAmbientInfos.z);
739
+ #if DEBUGMODE>0
740
+ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap;
741
+ #endif
742
+ #endif
743
+ outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;}
744
+ `;
745
+ // Sideeffect
746
+ ShaderStore.IncludesShadersStoreWGSL[name$k] = shader$k;
747
+
748
+ // Do not edit.
749
+ const name$j = "pbrBlockAlphaFresnel";
750
+ const shader$j = `#ifdef ALPHAFRESNEL
751
+ #if defined(ALPHATEST) || defined(ALPHABLEND)
752
+ struct alphaFresnelOutParams
753
+ {alpha: f32};fn faceforward(N: vec3<f32>,I: vec3<f32>,Nref: vec3<f32>)->vec3<f32> {return select(N,-N,dot(Nref,I)>0.0);}
754
+ #define pbr_inline
755
+ fn alphaFresnelBlock(
756
+ normalW: vec3f,
757
+ viewDirectionW: vec3f,
758
+ alpha: f32,
759
+ microSurface: f32
760
+ )->alphaFresnelOutParams
761
+ {var outParams: alphaFresnelOutParams;var opacityPerceptual: f32=alpha;
762
+ #ifdef LINEARALPHAFRESNEL
763
+ var opacity0: f32=opacityPerceptual;
764
+ #else
765
+ var opacity0: f32=opacityPerceptual*opacityPerceptual;
766
+ #endif
767
+ var opacity90: f32=fresnelGrazingReflectance(opacity0);var normalForward: vec3f=faceforward(normalW,-viewDirectionW,normalW);outParams.alpha=getReflectanceFromAnalyticalBRDFLookup_Jones(saturate(dot(viewDirectionW,normalForward)), vec3f(opacity0), vec3f(opacity90),sqrt(microSurface)).x;
768
+ #ifdef ALPHATEST
769
+ if (outParams.alpha<ALPHATESTVALUE) {discard;}
770
+ #ifndef ALPHABLEND
771
+ outParams.alpha=1.0;
772
+ #endif
773
+ #endif
774
+ return outParams;}
775
+ #endif
776
+ #endif
777
+ `;
778
+ // Sideeffect
779
+ ShaderStore.IncludesShadersStoreWGSL[name$j] = shader$j;
780
+
781
+ // Do not edit.
782
+ const name$i = "pbrBlockAnisotropic";
783
+ const shader$i = `#ifdef ANISOTROPIC
784
+ struct anisotropicOutParams
785
+ {anisotropy: f32,
786
+ anisotropicTangent: vec3f,
787
+ anisotropicBitangent: vec3f,
788
+ anisotropicNormal: vec3f,
789
+ #if DEBUGMODE>0 && defined(ANISOTROPIC_TEXTURE)
790
+ anisotropyMapData: vec3f
791
+ #endif
792
+ };
793
+ #define pbr_inline
794
+ fn anisotropicBlock(
795
+ vAnisotropy: vec3f,
796
+ roughness: f32,
797
+ #ifdef ANISOTROPIC_TEXTURE
798
+ anisotropyMapData: vec3f,
799
+ #endif
800
+ TBN: mat3x3f,
801
+ normalW: vec3f,
802
+ viewDirectionW: vec3f
803
+ )->anisotropicOutParams
804
+ {
805
+ var outParams: anisotropicOutParams;var anisotropy: f32=vAnisotropy.b;var anisotropyDirection: vec3f= vec3f(vAnisotropy.xy,0.);
806
+ #ifdef ANISOTROPIC_TEXTURE
807
+ var amd=anisotropyMapData.rg;anisotropy*=anisotropyMapData.b;
808
+ #if DEBUGMODE>0
809
+ outParams.anisotropyMapData=anisotropyMapData;
810
+ #endif
811
+ amd=amd*2.0-1.0;
812
+ #ifdef ANISOTROPIC_LEGACY
813
+ anisotropyDirection=vec3f(anisotropyDirection.xy*amd,anisotropyDirection.z);
814
+ #else
815
+ anisotropyDirection=vec3f(mat2x2f(anisotropyDirection.x,anisotropyDirection.y,-anisotropyDirection.y,anisotropyDirection.x)*normalize(amd),anisotropyDirection.z);
816
+ #endif
817
+ #endif
818
+ var anisoTBN: mat3x3f= mat3x3f(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));var anisotropicTangent: vec3f=normalize(anisoTBN*anisotropyDirection);var anisotropicBitangent: vec3f=normalize(cross(anisoTBN[2],anisotropicTangent));outParams.anisotropy=anisotropy;outParams.anisotropicTangent=anisotropicTangent;outParams.anisotropicBitangent=anisotropicBitangent;outParams.anisotropicNormal=getAnisotropicBentNormals(anisotropicTangent,anisotropicBitangent,normalW,viewDirectionW,anisotropy,roughness);return outParams;}
819
+ #endif
820
+ `;
821
+ // Sideeffect
822
+ ShaderStore.IncludesShadersStoreWGSL[name$i] = shader$i;
823
+
824
+ // Do not edit.
825
+ const name$h = "pbrBlockReflection";
826
+ const shader$h = `#ifdef REFLECTION
827
+ struct reflectionOutParams
828
+ {environmentRadiance: vec4f
829
+ ,environmentIrradiance: vec3f
830
+ #ifdef REFLECTIONMAP_3D
831
+ ,reflectionCoords: vec3f
832
+ #else
833
+ ,reflectionCoords: vec2f
834
+ #endif
835
+ #ifdef SS_TRANSLUCENCY
836
+ #ifdef USESPHERICALFROMREFLECTIONMAP
837
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
838
+ ,irradianceVector: vec3f
839
+ #endif
840
+ #endif
841
+ #endif
842
+ };
843
+ #define pbr_inline
844
+ #ifdef REFLECTIONMAP_3D
845
+ fn createReflectionCoords(
846
+ vPositionW: vec3f,
847
+ normalW: vec3f,
848
+ #ifdef ANISOTROPIC
849
+ anisotropicOut: anisotropicOutParams,
850
+ #endif
851
+ )->vec3f
852
+ {var reflectionCoords: vec3f;
853
+ #else
854
+ fn createReflectionCoords(
855
+ vPositionW: vec3f,
856
+ normalW: vec3f,
857
+ #ifdef ANISOTROPIC
858
+ anisotropicOut: anisotropicOutParams,
859
+ #endif
860
+ )->vec2f
861
+ {
862
+ var reflectionCoords: vec2f;
863
+ #endif
864
+ #ifdef ANISOTROPIC
865
+ var reflectionVector: vec3f=computeReflectionCoords( vec4f(vPositionW,1.0),anisotropicOut.anisotropicNormal);
866
+ #else
867
+ var reflectionVector: vec3f=computeReflectionCoords( vec4f(vPositionW,1.0),normalW);
868
+ #endif
869
+ #ifdef REFLECTIONMAP_OPPOSITEZ
870
+ reflectionVector.z*=-1.0;
871
+ #endif
872
+ #ifdef REFLECTIONMAP_3D
873
+ reflectionCoords=reflectionVector;
874
+ #else
875
+ reflectionCoords=reflectionVector.xy;
876
+ #ifdef REFLECTIONMAP_PROJECTION
877
+ reflectionCoords/=reflectionVector.z;
878
+ #endif
879
+ reflectionCoords.y=1.0-reflectionCoords.y;
880
+ #endif
881
+ return reflectionCoords;}
882
+ #define pbr_inline
883
+ fn sampleReflectionTexture(
884
+ alphaG: f32
885
+ ,vReflectionMicrosurfaceInfos: vec3f
886
+ ,vReflectionInfos: vec2f
887
+ ,vReflectionColor: vec3f
888
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
889
+ ,NdotVUnclamped: f32
890
+ #endif
891
+ #ifdef LINEARSPECULARREFLECTION
892
+ ,roughness: f32
893
+ #endif
894
+ #ifdef REFLECTIONMAP_3D
895
+ ,reflectionSampler: texture_cube<f32>
896
+ ,reflectionSamplerSampler: sampler
897
+ ,reflectionCoords: vec3f
898
+ #else
899
+ ,reflectionSampler: texture_2d<f32>
900
+ ,reflectionSamplerSampler: sampler
901
+ ,reflectionCoords: vec2f
902
+ #endif
903
+ #ifndef LODBASEDMICROSFURACE
904
+ #ifdef REFLECTIONMAP_3D
905
+ ,reflectionLowSampler: texture_cube<f32>
906
+ ,reflectionLowSamplerSampler: sampler
907
+ ,reflectionHighSampler: texture_cube<f32>
908
+ ,reflectionHighSamplerSampler: sampler
909
+ #else
910
+ ,reflectionLowSampler: texture_2d<f32>
911
+ ,reflectionLowSamplerSampler: sampler
912
+ ,reflectionHighSampler: texture_2d<f32>
913
+ ,reflectionHighSamplerSampler: sampler
914
+ #endif
915
+ #endif
916
+ #ifdef REALTIME_FILTERING
917
+ ,vReflectionFilteringInfo: vec2f
918
+ #endif
919
+ )->vec4f
920
+ {var environmentRadiance: vec4f;
921
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
922
+ var reflectionLOD: f32=getLodFromAlphaGNdotV(vReflectionMicrosurfaceInfos.x,alphaG,NdotVUnclamped);
923
+ #elif defined(LINEARSPECULARREFLECTION)
924
+ var reflectionLOD: f32=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
925
+ #else
926
+ var reflectionLOD: f32=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
927
+ #endif
928
+ #ifdef LODBASEDMICROSFURACE
929
+ reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
930
+ #ifdef LODINREFLECTIONALPHA
931
+ var automaticReflectionLOD: f32=UNPACK_LOD(textureSample(reflectionSampler,reflectionSamplerSampler,reflectionCoords).a);var requestedReflectionLOD: f32=max(automaticReflectionLOD,reflectionLOD);
932
+ #else
933
+ var requestedReflectionLOD: f32=reflectionLOD;
934
+ #endif
935
+ #ifdef REALTIME_FILTERING
936
+ environmentRadiance= vec4f(radiance(alphaG,reflectionSampler,reflectionSamplerSampler,reflectionCoords,vReflectionFilteringInfo),1.0);
937
+ #else
938
+ environmentRadiance=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
939
+ #endif
940
+ #else
941
+ var lodReflectionNormalized: f32=saturate(reflectionLOD/log2(vReflectionMicrosurfaceInfos.x));var lodReflectionNormalizedDoubled: f32=lodReflectionNormalized*2.0;var environmentMid: vec4f=textureSample(reflectionSampler,reflectionSamplerSampler,reflectionCoords);if (lodReflectionNormalizedDoubled<1.0){environmentRadiance=mix(
942
+ textureSample(reflectionHighSampler,reflectionHighSamplerSampler,reflectionCoords),
943
+ environmentMid,
944
+ lodReflectionNormalizedDoubled
945
+ );} else {environmentRadiance=mix(
946
+ environmentMid,
947
+ textureSample(reflectionLowSampler,reflectionLowSamplerSampler,reflectionCoords),
948
+ lodReflectionNormalizedDoubled-1.0
949
+ );}
950
+ #endif
951
+ var envRadiance=environmentRadiance.rgb;
952
+ #ifdef RGBDREFLECTION
953
+ envRadiance=fromRGBD(environmentRadiance);
954
+ #endif
955
+ #ifdef GAMMAREFLECTION
956
+ envRadiance=toLinearSpaceVec3(environmentRadiance.rgb);
957
+ #endif
958
+ envRadiance*=vReflectionInfos.x;envRadiance*=vReflectionColor.rgb;return vec4f(envRadiance,environmentRadiance.a);}
959
+ #define pbr_inline
960
+ fn reflectionBlock(
961
+ vPositionW: vec3f
962
+ ,normalW: vec3f
963
+ ,alphaG: f32
964
+ ,vReflectionMicrosurfaceInfos: vec3f
965
+ ,vReflectionInfos: vec2f
966
+ ,vReflectionColor: vec3f
967
+ #ifdef ANISOTROPIC
968
+ ,anisotropicOut: anisotropicOutParams
969
+ #endif
970
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
971
+ ,NdotVUnclamped: f32
972
+ #endif
973
+ #ifdef LINEARSPECULARREFLECTION
974
+ ,roughness: f32
975
+ #endif
976
+ #ifdef REFLECTIONMAP_3D
977
+ ,reflectionSampler: texture_cube<f32>
978
+ ,reflectionSamplerSampler: sampler
979
+ #else
980
+ ,reflectionSampler: texture_2d<f32>
981
+ ,reflectionSamplerSampler: sampler
982
+ #endif
983
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
984
+ ,vEnvironmentIrradiance: vec3f
985
+ #endif
986
+ #ifdef USESPHERICALFROMREFLECTIONMAP
987
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
988
+ ,reflectionMatrix: mat4x4f
989
+ #endif
990
+ #endif
991
+ #ifdef USEIRRADIANCEMAP
992
+ #ifdef REFLECTIONMAP_3D
993
+ ,irradianceSampler: texture_cube<f32>
994
+ ,irradianceSamplerSampler: sampler
995
+ #else
996
+ ,irradianceSampler: texture_2d<f32>
997
+ ,irradianceSamplerSampler: sampler
998
+ #endif
999
+ #endif
1000
+ #ifndef LODBASEDMICROSFURACE
1001
+ #ifdef REFLECTIONMAP_3D
1002
+ ,reflectionLowSampler: texture_cube<f32>
1003
+ ,reflectionLowSamplerSampler: sampler
1004
+ ,reflectionHighSampler: texture_cube<f32>
1005
+ ,reflectionHighSamplerSampler: sampler
1006
+ #else
1007
+ ,reflectionLowSampler: texture_2d<f32>
1008
+ ,reflectionLowSamplerSampler: sampler
1009
+ ,reflectionHighSampler: texture_2d<f32>
1010
+ ,reflectionHighSamplerSampler: sampler
1011
+ #endif
1012
+ #endif
1013
+ #ifdef REALTIME_FILTERING
1014
+ ,vReflectionFilteringInfo: vec2f
1015
+ #endif
1016
+ )->reflectionOutParams
1017
+ {var outParams: reflectionOutParams;var environmentRadiance: vec4f= vec4f(0.,0.,0.,0.);
1018
+ #ifdef REFLECTIONMAP_3D
1019
+ var reflectionCoords: vec3f= vec3f(0.);
1020
+ #else
1021
+ var reflectionCoords: vec2f= vec2f(0.);
1022
+ #endif
1023
+ reflectionCoords=createReflectionCoords(
1024
+ vPositionW,
1025
+ normalW,
1026
+ #ifdef ANISOTROPIC
1027
+ anisotropicOut,
1028
+ #endif
1029
+ );environmentRadiance=sampleReflectionTexture(
1030
+ alphaG
1031
+ ,vReflectionMicrosurfaceInfos
1032
+ ,vReflectionInfos
1033
+ ,vReflectionColor
1034
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1035
+ ,NdotVUnclamped
1036
+ #endif
1037
+ #ifdef LINEARSPECULARREFLECTION
1038
+ ,roughness
1039
+ #endif
1040
+ #ifdef REFLECTIONMAP_3D
1041
+ ,reflectionSampler
1042
+ ,reflectionSamplerSampler
1043
+ ,reflectionCoords
1044
+ #else
1045
+ ,reflectionSampler
1046
+ ,reflectionSamplerSampler
1047
+ ,reflectionCoords
1048
+ #endif
1049
+ #ifndef LODBASEDMICROSFURACE
1050
+ ,reflectionLowSampler
1051
+ ,reflectionLowSamplerSampler
1052
+ ,reflectionHighSampler
1053
+ ,reflectionHighSamplerSampler
1054
+ #endif
1055
+ #ifdef REALTIME_FILTERING
1056
+ ,vReflectionFilteringInfo
1057
+ #endif
1058
+ );var environmentIrradiance: vec3f= vec3f(0.,0.,0.);
1059
+ #ifdef USESPHERICALFROMREFLECTIONMAP
1060
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
1061
+ environmentIrradiance=vEnvironmentIrradiance;
1062
+ #else
1063
+ #ifdef ANISOTROPIC
1064
+ var irradianceVector: vec3f= (reflectionMatrix* vec4f(anisotropicOut.anisotropicNormal,0)).xyz;
1065
+ #else
1066
+ var irradianceVector: vec3f= (reflectionMatrix* vec4f(normalW,0)).xyz;
1067
+ #endif
1068
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1069
+ irradianceVector.z*=-1.0;
1070
+ #endif
1071
+ #ifdef INVERTCUBICMAP
1072
+ irradianceVector.y*=-1.0;
1073
+ #endif
1074
+ #if defined(REALTIME_FILTERING)
1075
+ environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,vReflectionFilteringInfo);
1076
+ #else
1077
+ environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
1078
+ #endif
1079
+ #ifdef SS_TRANSLUCENCY
1080
+ outParams.irradianceVector=irradianceVector;
1081
+ #endif
1082
+ #endif
1083
+ #elif defined(USEIRRADIANCEMAP)
1084
+ var environmentIrradiance4: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,reflectionCoords);environmentIrradiance=environmentIrradiance4.rgb;
1085
+ #ifdef RGBDREFLECTION
1086
+ environmentIrradiance=fromRGBD(environmentIrradiance4);
1087
+ #endif
1088
+ #ifdef GAMMAREFLECTION
1089
+ environmentIrradiance=toLinearSpaceVec3(environmentIrradiance.rgb);
1090
+ #endif
1091
+ #endif
1092
+ environmentIrradiance*=vReflectionColor.rgb;outParams.environmentRadiance=environmentRadiance;outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;}
1093
+ #endif
1094
+ `;
1095
+ // Sideeffect
1096
+ ShaderStore.IncludesShadersStoreWGSL[name$h] = shader$h;
1097
+
1098
+ // Do not edit.
1099
+ const name$g = "pbrBlockSheen";
1100
+ const shader$g = `#ifdef SHEEN
1101
+ struct sheenOutParams
1102
+ {sheenIntensity: f32
1103
+ ,sheenColor: vec3f
1104
+ ,sheenRoughness: f32
1105
+ #ifdef SHEEN_LINKWITHALBEDO
1106
+ ,surfaceAlbedo: vec3f
1107
+ #endif
1108
+ #if defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1109
+ ,sheenAlbedoScaling: f32
1110
+ #endif
1111
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1112
+ ,finalSheenRadianceScaled: vec3f
1113
+ #endif
1114
+ #if DEBUGMODE>0
1115
+ #ifdef SHEEN_TEXTURE
1116
+ ,sheenMapData: vec4f
1117
+ #endif
1118
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1119
+ ,sheenEnvironmentReflectance: vec3f
1120
+ #endif
1121
+ #endif
1122
+ };
1123
+ #define pbr_inline
1124
+ fn sheenBlock(
1125
+ vSheenColor: vec4f
1126
+ #ifdef SHEEN_ROUGHNESS
1127
+ ,vSheenRoughness: f32
1128
+ #if defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
1129
+ ,sheenMapRoughnessData: vec4f
1130
+ #endif
1131
+ #endif
1132
+ ,roughness: f32
1133
+ #ifdef SHEEN_TEXTURE
1134
+ ,sheenMapData: vec4f
1135
+ ,sheenMapLevel: f32
1136
+ #endif
1137
+ ,reflectance: f32
1138
+ #ifdef SHEEN_LINKWITHALBEDO
1139
+ ,baseColor: vec3f
1140
+ ,surfaceAlbedo: vec3f
1141
+ #endif
1142
+ #ifdef ENVIRONMENTBRDF
1143
+ ,NdotV: f32
1144
+ ,environmentBrdf: vec3f
1145
+ #endif
1146
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1147
+ ,AARoughnessFactors: vec2f
1148
+ ,vReflectionMicrosurfaceInfos: vec3f
1149
+ ,vReflectionInfos: vec2f
1150
+ ,vReflectionColor: vec3f
1151
+ ,vLightingIntensity: vec4f
1152
+ #ifdef REFLECTIONMAP_3D
1153
+ ,reflectionSampler: texture_cube<f32>
1154
+ ,reflectionSamplerSampler: sampler
1155
+ ,reflectionCoords: vec3f
1156
+ #else
1157
+ ,reflectionSampler: texture_2d<f32>
1158
+ ,reflectionSamplerSampler: sampler
1159
+ ,reflectionCoords: vec2f
1160
+ #endif
1161
+ ,NdotVUnclamped: f32
1162
+ #ifndef LODBASEDMICROSFURACE
1163
+ #ifdef REFLECTIONMAP_3D
1164
+ ,reflectionLowSampler: texture_cube<f32>
1165
+ ,reflectionLowSamplerSampler: sampler
1166
+ ,reflectionHighSampler: texture_cube<f32>
1167
+ ,reflectionHighSamplerSampler: sampler
1168
+ #else
1169
+ ,reflectionLowSampler: texture_2d<f32>
1170
+ ,reflectionLowSamplerSampler: sampler
1171
+ ,reflectionHighSampler: texture_2d<f32>
1172
+ ,reflectionHighSamplerSampler: sampler
1173
+ #endif
1174
+ #endif
1175
+ #ifdef REALTIME_FILTERING
1176
+ ,vReflectionFilteringInfo: vec2f
1177
+ #endif
1178
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
1179
+ ,seo: f32
1180
+ #endif
1181
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
1182
+ ,eho: f32
1183
+ #endif
1184
+ #endif
1185
+ )->sheenOutParams
1186
+ {var outParams: sheenOutParams;var sheenIntensity: f32=vSheenColor.a;
1187
+ #ifdef SHEEN_TEXTURE
1188
+ #if DEBUGMODE>0
1189
+ outParams.sheenMapData=sheenMapData;
1190
+ #endif
1191
+ #endif
1192
+ #ifdef SHEEN_LINKWITHALBEDO
1193
+ var sheenFactor: f32=pow5(1.0-sheenIntensity);var sheenColor: vec3f=baseColor.rgb*(1.0-sheenFactor);var sheenRoughness: f32=sheenIntensity;outParams.surfaceAlbedo=surfaceAlbedo*sheenFactor;
1194
+ #ifdef SHEEN_TEXTURE
1195
+ sheenIntensity*=sheenMapData.a;
1196
+ #endif
1197
+ #else
1198
+ var sheenColor: vec3f=vSheenColor.rgb;
1199
+ #ifdef SHEEN_TEXTURE
1200
+ #ifdef SHEEN_GAMMATEXTURE
1201
+ sheenColor*=toLinearSpaceVec3(sheenMapData.rgb);
1202
+ #else
1203
+ sheenColor*=sheenMapData.rgb;
1204
+ #endif
1205
+ sheenColor*=sheenMapLevel;
1206
+ #endif
1207
+ #ifdef SHEEN_ROUGHNESS
1208
+ var sheenRoughness: f32=vSheenRoughness;
1209
+ #ifdef SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE
1210
+ #if defined(SHEEN_TEXTURE)
1211
+ sheenRoughness*=sheenMapData.a;
1212
+ #endif
1213
+ #elif defined(SHEEN_TEXTURE_ROUGHNESS)
1214
+ sheenRoughness*=sheenMapRoughnessData.a;
1215
+ #endif
1216
+ #else
1217
+ var sheenRoughness: f32=roughness;
1218
+ #ifdef SHEEN_TEXTURE
1219
+ sheenIntensity*=sheenMapData.a;
1220
+ #endif
1221
+ #endif
1222
+ #if !defined(SHEEN_ALBEDOSCALING)
1223
+ sheenIntensity*=(1.-reflectance);
1224
+ #endif
1225
+ sheenColor*=sheenIntensity;
1226
+ #endif
1227
+ #ifdef ENVIRONMENTBRDF
1228
+ /*#ifdef SHEEN_SOFTER
1229
+ var environmentSheenBrdf: vec3f= vec3f(0.,0.,getBRDFLookupCharlieSheen(NdotV,sheenRoughness));
1230
+ #else*/
1231
+ #ifdef SHEEN_ROUGHNESS
1232
+ var environmentSheenBrdf: vec3f=getBRDFLookup(NdotV,sheenRoughness);
1233
+ #else
1234
+ var environmentSheenBrdf: vec3f=environmentBrdf;
1235
+ #endif
1236
+ /*#endif*/
1237
+ #endif
1238
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1239
+ var sheenAlphaG: f32=convertRoughnessToAverageSlope(sheenRoughness);
1240
+ #ifdef SPECULARAA
1241
+ sheenAlphaG+=AARoughnessFactors.y;
1242
+ #endif
1243
+ var environmentSheenRadiance: vec4f= vec4f(0.,0.,0.,0.);environmentSheenRadiance=sampleReflectionTexture(
1244
+ sheenAlphaG
1245
+ ,vReflectionMicrosurfaceInfos
1246
+ ,vReflectionInfos
1247
+ ,vReflectionColor
1248
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1249
+ ,NdotVUnclamped
1250
+ #endif
1251
+ #ifdef LINEARSPECULARREFLECTION
1252
+ ,sheenRoughness
1253
+ #endif
1254
+ ,reflectionSampler
1255
+ ,reflectionSamplerSampler
1256
+ ,reflectionCoords
1257
+ #ifndef LODBASEDMICROSFURACE
1258
+ ,reflectionLowSampler
1259
+ ,reflectionLowSamplerSampler
1260
+ ,reflectionHighSampler
1261
+ ,reflectionHighSamplerSampler
1262
+ #endif
1263
+ #ifdef REALTIME_FILTERING
1264
+ ,vReflectionFilteringInfo
1265
+ #endif
1266
+ );var sheenEnvironmentReflectance: vec3f=getSheenReflectanceFromBRDFLookup(sheenColor,environmentSheenBrdf);
1267
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
1268
+ sheenEnvironmentReflectance*=seo;
1269
+ #endif
1270
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
1271
+ sheenEnvironmentReflectance*=eho;
1272
+ #endif
1273
+ #if DEBUGMODE>0
1274
+ outParams.sheenEnvironmentReflectance=sheenEnvironmentReflectance;
1275
+ #endif
1276
+ outParams.finalSheenRadianceScaled=
1277
+ environmentSheenRadiance.rgb *
1278
+ sheenEnvironmentReflectance *
1279
+ vLightingIntensity.z;
1280
+ #endif
1281
+ #if defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1282
+ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor.g),sheenColor.b)*environmentSheenBrdf.b;
1283
+ #endif
1284
+ outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;}
1285
+ #endif
1286
+ `;
1287
+ // Sideeffect
1288
+ ShaderStore.IncludesShadersStoreWGSL[name$g] = shader$g;
1289
+
1290
+ // Do not edit.
1291
+ const name$f = "pbrBlockClearcoat";
1292
+ const shader$f = `struct clearcoatOutParams
1293
+ {specularEnvironmentR0: vec3f,
1294
+ conservationFactor: f32,
1295
+ clearCoatNormalW: vec3f,
1296
+ clearCoatAARoughnessFactors: vec2f,
1297
+ clearCoatIntensity: f32,
1298
+ clearCoatRoughness: f32,
1299
+ #ifdef REFLECTION
1300
+ finalClearCoatRadianceScaled: vec3f,
1301
+ #endif
1302
+ #ifdef CLEARCOAT_TINT
1303
+ absorption: vec3f,
1304
+ clearCoatNdotVRefract: f32,
1305
+ clearCoatColor: vec3f,
1306
+ clearCoatThickness: f32,
1307
+ #endif
1308
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1309
+ energyConservationFactorClearCoat: vec3f,
1310
+ #endif
1311
+ #if DEBUGMODE>0
1312
+ #ifdef CLEARCOAT_BUMP
1313
+ TBNClearCoat: mat3x3f,
1314
+ #endif
1315
+ #ifdef CLEARCOAT_TEXTURE
1316
+ clearCoatMapData: vec2f,
1317
+ #endif
1318
+ #if defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
1319
+ clearCoatTintMapData: vec4f,
1320
+ #endif
1321
+ #ifdef REFLECTION
1322
+ environmentClearCoatRadiance: vec4f,
1323
+ clearCoatEnvironmentReflectance: vec3f,
1324
+ #endif
1325
+ clearCoatNdotV: f32
1326
+ #endif
1327
+ };
1328
+ #ifdef CLEARCOAT
1329
+ #define pbr_inline
1330
+ fn clearcoatBlock(
1331
+ vPositionW: vec3f
1332
+ ,geometricNormalW: vec3f
1333
+ ,viewDirectionW: vec3f
1334
+ ,vClearCoatParams: vec2f
1335
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
1336
+ ,clearCoatMapRoughnessData: vec4f
1337
+ #endif
1338
+ ,specularEnvironmentR0: vec3f
1339
+ #ifdef CLEARCOAT_TEXTURE
1340
+ ,clearCoatMapData: vec2f
1341
+ #endif
1342
+ #ifdef CLEARCOAT_TINT
1343
+ ,vClearCoatTintParams: vec4f
1344
+ ,clearCoatColorAtDistance: f32
1345
+ ,vClearCoatRefractionParams: vec4f
1346
+ #ifdef CLEARCOAT_TINT_TEXTURE
1347
+ ,clearCoatTintMapData: vec4f
1348
+ #endif
1349
+ #endif
1350
+ #ifdef CLEARCOAT_BUMP
1351
+ ,vClearCoatBumpInfos: vec2f
1352
+ ,clearCoatBumpMapData: vec4f
1353
+ ,vClearCoatBumpUV: vec2f
1354
+ #if defined(TANGENT) && defined(NORMAL)
1355
+ ,vTBN: mat3x3f
1356
+ #else
1357
+ ,vClearCoatTangentSpaceParams: vec2f
1358
+ #endif
1359
+ #ifdef OBJECTSPACE_NORMALMAP
1360
+ ,normalMatrix: mat4x4f
1361
+ #endif
1362
+ #endif
1363
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
1364
+ ,faceNormal: vec3f
1365
+ #endif
1366
+ #ifdef REFLECTION
1367
+ ,vReflectionMicrosurfaceInfos: vec3f
1368
+ ,vReflectionInfos: vec2f
1369
+ ,vReflectionColor: vec3f
1370
+ ,vLightingIntensity: vec4f
1371
+ #ifdef REFLECTIONMAP_3D
1372
+ ,reflectionSampler: texture_cube<f32>
1373
+ ,reflectionSamplerSampler: sampler
1374
+ #else
1375
+ ,reflectionSampler: texture_2d<f32>
1376
+ ,reflectionSamplerSampler: sampler
1377
+ #endif
1378
+ #ifndef LODBASEDMICROSFURACE
1379
+ #ifdef REFLECTIONMAP_3D
1380
+ ,reflectionLowSampler: texture_cube<f32>
1381
+ ,reflectionLowSamplerSampler: sampler
1382
+ ,reflectionHighSampler: texture_cube<f32>
1383
+ ,reflectionHighSamplerSampler: sampler
1384
+ #else
1385
+ ,reflectionLowSampler: texture_2d<f32>
1386
+ ,reflectionLowSamplerSampler: sampler
1387
+ ,reflectionHighSampler: texture_2d<f32>
1388
+ ,reflectionHighSamplerSampler: sampler
1389
+ #endif
1390
+ #endif
1391
+ #ifdef REALTIME_FILTERING
1392
+ ,vReflectionFilteringInfo: vec2f
1393
+ #endif
1394
+ #endif
1395
+ #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
1396
+ ,frontFacingMultiplier: f32
1397
+ #endif
1398
+ )->clearcoatOutParams
1399
+ {var outParams: clearcoatOutParams;var clearCoatIntensity: f32=vClearCoatParams.x;var clearCoatRoughness: f32=vClearCoatParams.y;
1400
+ #ifdef CLEARCOAT_TEXTURE
1401
+ clearCoatIntensity*=clearCoatMapData.x;
1402
+ #ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE
1403
+ clearCoatRoughness*=clearCoatMapData.y;
1404
+ #endif
1405
+ #if DEBUGMODE>0
1406
+ outParams.clearCoatMapData=clearCoatMapData;
1407
+ #endif
1408
+ #endif
1409
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
1410
+ clearCoatRoughness*=clearCoatMapRoughnessData.y;
1411
+ #endif
1412
+ outParams.clearCoatIntensity=clearCoatIntensity;outParams.clearCoatRoughness=clearCoatRoughness;
1413
+ #ifdef CLEARCOAT_TINT
1414
+ var clearCoatColor: vec3f=vClearCoatTintParams.rgb;var clearCoatThickness: f32=vClearCoatTintParams.a;
1415
+ #ifdef CLEARCOAT_TINT_TEXTURE
1416
+ #ifdef CLEARCOAT_TINT_GAMMATEXTURE
1417
+ clearCoatColor*=toLinearSpaceVec3(clearCoatTintMapData.rgb);
1418
+ #else
1419
+ clearCoatColor*=clearCoatTintMapData.rgb;
1420
+ #endif
1421
+ clearCoatThickness*=clearCoatTintMapData.a;
1422
+ #if DEBUGMODE>0
1423
+ outParams.clearCoatTintMapData=clearCoatTintMapData;
1424
+ #endif
1425
+ #endif
1426
+ outParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);outParams.clearCoatThickness=clearCoatThickness;
1427
+ #endif
1428
+ #ifdef CLEARCOAT_REMAP_F0
1429
+ var specularEnvironmentR0Updated: vec3f=getR0RemappedForClearCoat(specularEnvironmentR0);
1430
+ #else
1431
+ var specularEnvironmentR0Updated: vec3f=specularEnvironmentR0;
1432
+ #endif
1433
+ outParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);var clearCoatNormalW: vec3f=geometricNormalW;
1434
+ #ifdef CLEARCOAT_BUMP
1435
+ #ifdef NORMALXYSCALE
1436
+ var clearCoatNormalScale: f32=1.0;
1437
+ #else
1438
+ var clearCoatNormalScale: f32=vClearCoatBumpInfos.y;
1439
+ #endif
1440
+ #if defined(TANGENT) && defined(NORMAL)
1441
+ var TBNClearCoat: mat3x3f=vTBN;
1442
+ #else
1443
+ var TBNClearCoatUV: vec2f=vClearCoatBumpUV*frontFacingMultiplier;var TBNClearCoat: mat3x3f=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);
1444
+ #endif
1445
+ #if DEBUGMODE>0
1446
+ outParams.TBNClearCoat=TBNClearCoat;
1447
+ #endif
1448
+ #ifdef OBJECTSPACE_NORMALMAP
1449
+ clearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);clearCoatNormalW=normalize( mat3x3f(normalMatrix[0].xyz,normalMatrix[1].xyz,normalMatrix[2].xyz)*clearCoatNormalW);
1450
+ #else
1451
+ clearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);
1452
+ #endif
1453
+ #endif
1454
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
1455
+ clearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));
1456
+ #endif
1457
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
1458
+ clearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;
1459
+ #endif
1460
+ outParams.clearCoatNormalW=clearCoatNormalW;outParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);var clearCoatNdotVUnclamped: f32=dot(clearCoatNormalW,viewDirectionW);var clearCoatNdotV: f32=absEps(clearCoatNdotVUnclamped);
1461
+ #if DEBUGMODE>0
1462
+ outParams.clearCoatNdotV=clearCoatNdotV;
1463
+ #endif
1464
+ #ifdef CLEARCOAT_TINT
1465
+ var clearCoatVRefract: vec3f=refract(-viewDirectionW,clearCoatNormalW,vClearCoatRefractionParams.y);outParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));
1466
+ #endif
1467
+ #if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))
1468
+ var environmentClearCoatBrdf: vec3f=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);
1469
+ #endif
1470
+ #if defined(REFLECTION)
1471
+ var clearCoatAlphaG: f32=convertRoughnessToAverageSlope(clearCoatRoughness);
1472
+ #ifdef SPECULARAA
1473
+ clearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;
1474
+ #endif
1475
+ var environmentClearCoatRadiance: vec4f= vec4f(0.,0.,0.,0.);var clearCoatReflectionVector: vec3f=computeReflectionCoords( vec4f(vPositionW,1.0),clearCoatNormalW);
1476
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1477
+ clearCoatReflectionVector.z*=-1.0;
1478
+ #endif
1479
+ #ifdef REFLECTIONMAP_3D
1480
+ var clearCoatReflectionCoords: vec3f=clearCoatReflectionVector;
1481
+ #else
1482
+ var clearCoatReflectionCoords: vec2f=clearCoatReflectionVector.xy;
1483
+ #ifdef REFLECTIONMAP_PROJECTION
1484
+ clearCoatReflectionCoords/=clearCoatReflectionVector.z;
1485
+ #endif
1486
+ clearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;
1487
+ #endif
1488
+ environmentClearCoatRadiance=sampleReflectionTexture(
1489
+ clearCoatAlphaG
1490
+ ,vReflectionMicrosurfaceInfos
1491
+ ,vReflectionInfos
1492
+ ,vReflectionColor
1493
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1494
+ ,clearCoatNdotVUnclamped
1495
+ #endif
1496
+ #ifdef LINEARSPECULARREFLECTION
1497
+ ,clearCoatRoughness
1498
+ #endif
1499
+ ,reflectionSampler
1500
+ ,reflectionSamplerSampler
1501
+ ,clearCoatReflectionCoords
1502
+ #ifndef LODBASEDMICROSFURACE
1503
+ ,reflectionLowSampler
1504
+ ,reflectionLowSamplerSampler
1505
+ ,reflectionHighSampler
1506
+ ,reflectionHighSamplerSampler
1507
+ #endif
1508
+ #ifdef REALTIME_FILTERING
1509
+ ,vReflectionFilteringInfo
1510
+ #endif
1511
+ );
1512
+ #if DEBUGMODE>0
1513
+ outParams.environmentClearCoatRadiance=environmentClearCoatRadiance;
1514
+ #endif
1515
+ #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
1516
+ var clearCoatEnvironmentReflectance: vec3f=getReflectanceFromBRDFLookup(vec3f(uniforms.vClearCoatRefractionParams.x),environmentClearCoatBrdf);
1517
+ #ifdef HORIZONOCCLUSION
1518
+ #ifdef BUMP
1519
+ #ifdef REFLECTIONMAP_3D
1520
+ var clearCoatEho: f32=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);clearCoatEnvironmentReflectance*=clearCoatEho;
1521
+ #endif
1522
+ #endif
1523
+ #endif
1524
+ #else
1525
+ var clearCoatEnvironmentReflectance: vec3f=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV, vec3f(1.), vec3f(1.),sqrt(1.-clearCoatRoughness));
1526
+ #endif
1527
+ clearCoatEnvironmentReflectance*=clearCoatIntensity;
1528
+ #if DEBUGMODE>0
1529
+ outParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;
1530
+ #endif
1531
+ outParams.finalClearCoatRadianceScaled=
1532
+ environmentClearCoatRadiance.rgb *
1533
+ clearCoatEnvironmentReflectance *
1534
+ vLightingIntensity.z;
1535
+ #endif
1536
+ #if defined(CLEARCOAT_TINT)
1537
+ outParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);
1538
+ #endif
1539
+ var fresnelIBLClearCoat: f32=fresnelSchlickGGX(clearCoatNdotV,uniforms.vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnelIBLClearCoat*=clearCoatIntensity;outParams.conservationFactor=(1.-fresnelIBLClearCoat);
1540
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1541
+ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);
1542
+ #endif
1543
+ return outParams;}
1544
+ #endif
1545
+ `;
1546
+ // Sideeffect
1547
+ ShaderStore.IncludesShadersStoreWGSL[name$f] = shader$f;
1548
+
1549
+ // Do not edit.
1550
+ const name$e = "pbrBlockIridescence";
1551
+ const shader$e = `struct iridescenceOutParams
1552
+ {iridescenceIntensity: f32,
1553
+ iridescenceIOR: f32,
1554
+ iridescenceThickness: f32,
1555
+ specularEnvironmentR0: vec3f};
1556
+ #ifdef IRIDESCENCE
1557
+ fn iridescenceBlock(
1558
+ vIridescenceParams: vec4f
1559
+ ,viewAngle: f32
1560
+ ,specularEnvironmentR0: vec3f
1561
+ #ifdef IRIDESCENCE_TEXTURE
1562
+ ,iridescenceMapData: vec2f
1563
+ #endif
1564
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
1565
+ ,iridescenceThicknessMapData: vec2f
1566
+ #endif
1567
+ #ifdef CLEARCOAT
1568
+ ,NdotVUnclamped: f32
1569
+ #ifdef CLEARCOAT_TEXTURE
1570
+ ,clearCoatMapData: vec2f
1571
+ #endif
1572
+ #endif
1573
+ )->iridescenceOutParams
1574
+ {var outParams: iridescenceOutParams;var iridescenceIntensity: f32=vIridescenceParams.x;var iridescenceIOR: f32=vIridescenceParams.y;var iridescenceThicknessMin: f32=vIridescenceParams.z;var iridescenceThicknessMax: f32=vIridescenceParams.w;var iridescenceThicknessWeight: f32=1.;
1575
+ #ifdef IRIDESCENCE_TEXTURE
1576
+ iridescenceIntensity*=iridescenceMapData.x;
1577
+ #endif
1578
+ #if defined(IRIDESCENCE_THICKNESS_TEXTURE)
1579
+ iridescenceThicknessWeight=iridescenceThicknessMapData.g;
1580
+ #endif
1581
+ var iridescenceThickness: f32=mix(iridescenceThicknessMin,iridescenceThicknessMax,iridescenceThicknessWeight);var topIor: f32=1.;
1582
+ #ifdef CLEARCOAT
1583
+ var clearCoatIntensity: f32=vClearCoatParams.x;
1584
+ #ifdef CLEARCOAT_TEXTURE
1585
+ clearCoatIntensity*=clearCoatMapData.x;
1586
+ #endif
1587
+ topIor=mix(1.0,uniforms.vClearCoatRefractionParams.w-1.,clearCoatIntensity);viewAngle=sqrt(1.0+((1.0/topIor)*(1.0/topIor))*((NdotVUnclamped*NdotVUnclamped)-1.0));
1588
+ #endif
1589
+ var iridescenceFresnel: vec3f=evalIridescence(topIor,iridescenceIOR,viewAngle,iridescenceThickness,specularEnvironmentR0);outParams.specularEnvironmentR0=mix(specularEnvironmentR0,iridescenceFresnel,iridescenceIntensity);outParams.iridescenceIntensity=iridescenceIntensity;outParams.iridescenceThickness=iridescenceThickness;outParams.iridescenceIOR=iridescenceIOR;return outParams;}
1590
+ #endif
1591
+ `;
1592
+ // Sideeffect
1593
+ ShaderStore.IncludesShadersStoreWGSL[name$e] = shader$e;
1594
+
1595
+ // Do not edit.
1596
+ const name$d = "pbrBlockSubSurface";
1597
+ const shader$d = `struct subSurfaceOutParams
1598
+ {specularEnvironmentReflectance: vec3f,
1599
+ #ifdef SS_REFRACTION
1600
+ finalRefraction: vec3f,
1601
+ surfaceAlbedo: vec3f,
1602
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1603
+ alpha: f32,
1604
+ #endif
1605
+ #ifdef REFLECTION
1606
+ refractionFactorForIrradiance: f32,
1607
+ #endif
1608
+ #endif
1609
+ #ifdef SS_TRANSLUCENCY
1610
+ transmittance: vec3f,
1611
+ translucencyIntensity: f32,
1612
+ #ifdef REFLECTION
1613
+ refractionIrradiance: vec3f,
1614
+ #endif
1615
+ #endif
1616
+ #if DEBUGMODE>0
1617
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1618
+ thicknessMap: vec4f,
1619
+ #endif
1620
+ #ifdef SS_REFRACTION
1621
+ environmentRefraction: vec4f,
1622
+ refractionTransmittance: vec3f
1623
+ #endif
1624
+ #endif
1625
+ };
1626
+ #ifdef SUBSURFACE
1627
+ #ifdef SS_REFRACTION
1628
+ #define pbr_inline
1629
+ fn sampleEnvironmentRefraction(
1630
+ ior: f32
1631
+ ,thickness: f32
1632
+ ,refractionLOD: f32
1633
+ ,normalW: vec3f
1634
+ ,vPositionW: vec3f
1635
+ ,viewDirectionW: vec3f
1636
+ ,view: mat4x4f
1637
+ ,vRefractionInfos: vec4f
1638
+ ,refractionMatrix: mat4x4f
1639
+ ,vRefractionMicrosurfaceInfos: vec4f
1640
+ ,alphaG: f32
1641
+ #ifdef SS_REFRACTIONMAP_3D
1642
+ ,refractionSampler: texture_cube<f32>
1643
+ ,refractionSamplerSampler: sampler
1644
+ #ifndef LODBASEDMICROSFURACE
1645
+ ,refractionLowSampler: texture_cube<f32>
1646
+ ,refractionLowSamplerSampler: sampler
1647
+ ,refractionHighSampler: texture_cube<f32>
1648
+ ,refractionHighSamplerSampler: sampler
1649
+ #endif
1650
+ #else
1651
+ ,refractionSampler: texture_2d<f32>
1652
+ ,refractionSamplerSampler: sampler
1653
+ #ifndef LODBASEDMICROSFURACE
1654
+ ,refractionLowSampler: texture_2d<f32>
1655
+ ,refractionLowSamplerSampler: sampler
1656
+ ,refractionHighSampler: texture_2d<f32>
1657
+ ,refractionHighSamplerSampler: sampler
1658
+ #endif
1659
+ #endif
1660
+ #ifdef ANISOTROPIC
1661
+ ,anisotropicOut: anisotropicOutParams
1662
+ #endif
1663
+ #ifdef REALTIME_FILTERING
1664
+ ,vRefractionFilteringInfo: vec2f
1665
+ #endif
1666
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1667
+ ,refractionPosition: vec3f
1668
+ ,refractionSize: vec3f
1669
+ #endif
1670
+ )->vec4f {var environmentRefraction: vec4f= vec4f(0.,0.,0.,0.);
1671
+ #ifdef ANISOTROPIC
1672
+ var refractionVector: vec3f=refract(-viewDirectionW,anisotropicOut.anisotropicNormal,ior);
1673
+ #else
1674
+ var refractionVector: vec3f=refract(-viewDirectionW,normalW,ior);
1675
+ #endif
1676
+ #ifdef SS_REFRACTIONMAP_OPPOSITEZ
1677
+ refractionVector.z*=-1.0;
1678
+ #endif
1679
+ #ifdef SS_REFRACTIONMAP_3D
1680
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1681
+ refractionVector=parallaxCorrectNormal(vPositionW,refractionVector,refractionSize,refractionPosition);
1682
+ #endif
1683
+ refractionVector.y=refractionVector.y*vRefractionInfos.w;var refractionCoords: vec3f=refractionVector;refractionCoords= (refractionMatrix* vec4f(refractionCoords,0)).xyz;
1684
+ #else
1685
+ #ifdef SS_USE_THICKNESS_AS_DEPTH
1686
+ var vRefractionUVW: vec3f= (refractionMatrix*(view* vec4f(vPositionW+refractionVector*thickness,1.0))).xyz;
1687
+ #else
1688
+ var vRefractionUVW: vec3f= (refractionMatrix*(view* vec4f(vPositionW+refractionVector*vRefractionInfos.z,1.0))).xyz;
1689
+ #endif
1690
+ var refractionCoords: vec2f=vRefractionUVW.xy/vRefractionUVW.z;refractionCoords.y=1.0-refractionCoords.y;
1691
+ #endif
1692
+ #ifdef LODBASEDMICROSFURACE
1693
+ var lod=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;
1694
+ #ifdef SS_LODINREFRACTIONALPHA
1695
+ var automaticRefractionLOD: f32=UNPACK_LOD(textureSample(refractionSampler,refractionSamplerSampler,refractionCoords).a);var requestedRefractionLOD: f32=max(automaticRefractionLOD,lod);
1696
+ #else
1697
+ var requestedRefractionLOD: f32=lod;
1698
+ #endif
1699
+ #if defined(REALTIME_FILTERING) && defined(SS_REFRACTIONMAP_3D)
1700
+ environmentRefraction= vec4f(radiance(alphaG,refractionSampler,refractionSamplerSampler,refractionCoords,vRefractionFilteringInfo),1.0);
1701
+ #else
1702
+ environmentRefraction=textureSampleLevel(refractionSampler,refractionSamplerSampler,refractionCoords,requestedRefractionLOD);
1703
+ #endif
1704
+ #else
1705
+ var lodRefractionNormalized: f32=saturate(refractionLOD/log2(vRefractionMicrosurfaceInfos.x));var lodRefractionNormalizedDoubled: f32=lodRefractionNormalized*2.0;var environmentRefractionMid: vec4f=textureSample(refractionSampler,refractionSamplerSampler,refractionCoords);if (lodRefractionNormalizedDoubled<1.0){environmentRefraction=mix(
1706
+ textureSample(refractionHighSampler,refractionHighSamplerSampler,refractionCoords),
1707
+ environmentRefractionMid,
1708
+ lodRefractionNormalizedDoubled
1709
+ );} else {environmentRefraction=mix(
1710
+ environmentRefractionMid,
1711
+ textureSample(refractionLowSampler,refractionLowSamplerSampler,refractionCoords),
1712
+ lodRefractionNormalizedDoubled-1.0
1713
+ );}
1714
+ #endif
1715
+ var refraction=environmentRefraction.rgb;
1716
+ #ifdef SS_RGBDREFRACTION
1717
+ refraction=fromRGBD(environmentRefraction);
1718
+ #endif
1719
+ #ifdef SS_GAMMAREFRACTION
1720
+ refraction=toLinearSpaceVec3(environmentRefraction.rgb);
1721
+ #endif
1722
+ return vec4f(refraction,environmentRefraction.a);}
1723
+ #endif
1724
+ #define pbr_inline
1725
+ fn subSurfaceBlock(
1726
+ vSubSurfaceIntensity: vec3f
1727
+ ,vThicknessParam: vec2f
1728
+ ,vTintColor: vec4f
1729
+ ,normalW: vec3f
1730
+ ,specularEnvironmentReflectance: vec3f
1731
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1732
+ ,thicknessMap: vec4f
1733
+ #endif
1734
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
1735
+ ,refractionIntensityMap: vec4f
1736
+ #endif
1737
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
1738
+ ,translucencyIntensityMap: vec4f
1739
+ #endif
1740
+ #ifdef REFLECTION
1741
+ #ifdef SS_TRANSLUCENCY
1742
+ ,reflectionMatrix: mat4x4f
1743
+ #ifdef USESPHERICALFROMREFLECTIONMAP
1744
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
1745
+ ,irradianceVector_: vec3f
1746
+ #endif
1747
+ #if defined(REALTIME_FILTERING)
1748
+ ,reflectionSampler: texture_cube<f32>
1749
+ ,reflectionSamplerSampler: sampler
1750
+ ,vReflectionFilteringInfo: vec2f
1751
+ #endif
1752
+ #endif
1753
+ #ifdef USEIRRADIANCEMAP
1754
+ #ifdef REFLECTIONMAP_3D
1755
+ ,irradianceSampler: texture_cube<f32>
1756
+ ,irradianceSamplerSampler: sampler
1757
+ #else
1758
+ ,irradianceSampler: texture_2d<f32>
1759
+ ,irradianceSamplerSampler: sampler
1760
+ #endif
1761
+ #endif
1762
+ #endif
1763
+ #endif
1764
+ #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
1765
+ ,surfaceAlbedo: vec3f
1766
+ #endif
1767
+ #ifdef SS_REFRACTION
1768
+ ,vPositionW: vec3f
1769
+ ,viewDirectionW: vec3f
1770
+ ,view: mat4x4f
1771
+ ,vRefractionInfos: vec4f
1772
+ ,refractionMatrix: mat4x4f
1773
+ ,vRefractionMicrosurfaceInfos: vec4f
1774
+ ,vLightingIntensity: vec4f
1775
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1776
+ ,alpha: f32
1777
+ #endif
1778
+ #ifdef SS_LODINREFRACTIONALPHA
1779
+ ,NdotVUnclamped: f32
1780
+ #endif
1781
+ #ifdef SS_LINEARSPECULARREFRACTION
1782
+ ,roughness: f32
1783
+ #endif
1784
+ ,alphaG: f32
1785
+ #ifdef SS_REFRACTIONMAP_3D
1786
+ ,refractionSampler: texture_cube<f32>
1787
+ ,refractionSamplerSampler: sampler
1788
+ #ifndef LODBASEDMICROSFURACE
1789
+ ,refractionLowSampler: texture_cube<f32>
1790
+ ,refractionLowSamplerSampler: sampler
1791
+ ,refractionHighSampler: texture_cube<f32>
1792
+ ,refractionHighSamplerSampler: sampler
1793
+ #endif
1794
+ #else
1795
+ ,refractionSampler: texture_2d<f32>
1796
+ ,refractionSamplerSampler: sampler
1797
+ #ifndef LODBASEDMICROSFURACE
1798
+ ,refractionLowSampler: texture_2d<f32>
1799
+ ,refractionLowSamplerSampler: sampler
1800
+ ,refractionHighSampler: texture_2d<f32>
1801
+ ,refractionHighSamplerSampler: sampler
1802
+ #endif
1803
+ #endif
1804
+ #ifdef ANISOTROPIC
1805
+ ,anisotropicOut: anisotropicOutParams
1806
+ #endif
1807
+ #ifdef REALTIME_FILTERING
1808
+ ,vRefractionFilteringInfo: vec2f
1809
+ #endif
1810
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1811
+ ,refractionPosition: vec3f
1812
+ ,refractionSize: vec3f
1813
+ #endif
1814
+ #ifdef SS_DISPERSION
1815
+ ,dispersion: f32
1816
+ #endif
1817
+ #endif
1818
+ #ifdef SS_TRANSLUCENCY
1819
+ ,vDiffusionDistance: vec3f
1820
+ ,vTranslucencyColor: vec4f
1821
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
1822
+ ,translucencyColorMap: vec4f
1823
+ #endif
1824
+ #endif
1825
+ )->subSurfaceOutParams
1826
+ {var outParams: subSurfaceOutParams;outParams.specularEnvironmentReflectance=specularEnvironmentReflectance;
1827
+ #ifdef SS_REFRACTION
1828
+ var refractionIntensity: f32=vSubSurfaceIntensity.x;
1829
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1830
+ refractionIntensity*=(1.0-alpha);outParams.alpha=1.0;
1831
+ #endif
1832
+ #endif
1833
+ #ifdef SS_TRANSLUCENCY
1834
+ var translucencyIntensity: f32=vSubSurfaceIntensity.y;
1835
+ #endif
1836
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1837
+ #ifdef SS_USE_GLTF_TEXTURES
1838
+ var thickness: f32=thicknessMap.g*vThicknessParam.y+vThicknessParam.x;
1839
+ #else
1840
+ var thickness: f32=thicknessMap.r*vThicknessParam.y+vThicknessParam.x;
1841
+ #endif
1842
+ #if DEBUGMODE>0
1843
+ outParams.thicknessMap=thicknessMap;
1844
+ #endif
1845
+ #if defined(SS_REFRACTION) && defined(SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS)
1846
+ #ifdef SS_USE_GLTF_TEXTURES
1847
+ refractionIntensity*=thicknessMap.r;
1848
+ #else
1849
+ refractionIntensity*=thicknessMap.g;
1850
+ #endif
1851
+ #endif
1852
+ #if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS)
1853
+ #ifdef SS_USE_GLTF_TEXTURES
1854
+ translucencyIntensity*=thicknessMap.a;
1855
+ #else
1856
+ translucencyIntensity*=thicknessMap.b;
1857
+ #endif
1858
+ #endif
1859
+ #else
1860
+ var thickness: f32=vThicknessParam.y;
1861
+ #endif
1862
+ #if defined(SS_REFRACTION) && defined(SS_REFRACTIONINTENSITY_TEXTURE)
1863
+ #ifdef SS_USE_GLTF_TEXTURES
1864
+ refractionIntensity*=refractionIntensityMap.r;
1865
+ #else
1866
+ refractionIntensity*=refractionIntensityMap.g;
1867
+ #endif
1868
+ #endif
1869
+ #if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCYINTENSITY_TEXTURE)
1870
+ #ifdef SS_USE_GLTF_TEXTURES
1871
+ translucencyIntensity*=translucencyIntensityMap.a;
1872
+ #else
1873
+ translucencyIntensity*=translucencyIntensityMap.b;
1874
+ #endif
1875
+ #endif
1876
+ #ifdef SS_TRANSLUCENCY
1877
+ thickness=maxEps(thickness);var translucencyColor: vec4f=vTranslucencyColor;
1878
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
1879
+ translucencyColor*=translucencyColorMap;
1880
+ #endif
1881
+ var transmittance: vec3f=transmittanceBRDF_Burley(translucencyColor.rgb,vDiffusionDistance,thickness);transmittance*=translucencyIntensity;outParams.transmittance=transmittance;outParams.translucencyIntensity=translucencyIntensity;
1882
+ #endif
1883
+ #ifdef SS_REFRACTION
1884
+ var environmentRefraction: vec4f= vec4f(0.,0.,0.,0.);
1885
+ #ifdef SS_HAS_THICKNESS
1886
+ var ior: f32=vRefractionInfos.y;
1887
+ #else
1888
+ var ior: f32=vRefractionMicrosurfaceInfos.w;
1889
+ #endif
1890
+ #ifdef SS_LODINREFRACTIONALPHA
1891
+ var refractionAlphaG: f32=alphaG;refractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));var refractionLOD: f32=getLodFromAlphaGNdotV(vRefractionMicrosurfaceInfos.x,refractionAlphaG,NdotVUnclamped);
1892
+ #elif defined(SS_LINEARSPECULARREFRACTION)
1893
+ var refractionRoughness: f32=alphaG;refractionRoughness=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));var refractionLOD: f32=getLinearLodFromRoughness(vRefractionMicrosurfaceInfos.x,refractionRoughness);
1894
+ #else
1895
+ var refractionAlphaG: f32=alphaG;refractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));var refractionLOD: f32=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG);
1896
+ #endif
1897
+ var refraction_ior: f32=vRefractionInfos.y;
1898
+ #ifdef SS_DISPERSION
1899
+ var realIOR: f32=1.0/refraction_ior;var iorDispersionSpread: f32=0.04*dispersion*(realIOR-1.0);var iors: vec3f= vec3f(1.0/(realIOR-iorDispersionSpread),refraction_ior,1.0/(realIOR+iorDispersionSpread));for (var i: i32=0; i<3; i++) {refraction_ior=iors[i];
1900
+ #endif
1901
+ var envSample: vec4f=sampleEnvironmentRefraction(refraction_ior,thickness,refractionLOD,normalW,vPositionW,viewDirectionW,view,vRefractionInfos,refractionMatrix,vRefractionMicrosurfaceInfos,alphaG
1902
+ #ifdef SS_REFRACTIONMAP_3D
1903
+ ,refractionSampler
1904
+ ,refractionSamplerSampler
1905
+ #ifndef LODBASEDMICROSFURACE
1906
+ ,refractionLowSampler
1907
+ ,refractionLowSamplerSampler
1908
+ ,refractionHighSampler
1909
+ ,refractionHighSamplerSampler
1910
+ #endif
1911
+ #else
1912
+ ,refractionSampler
1913
+ ,refractionSamplerSampler
1914
+ #ifndef LODBASEDMICROSFURACE
1915
+ ,refractionLowSampler
1916
+ ,refractionLowSamplerSampler
1917
+ ,refractionHighSampler
1918
+ ,refractionHighSamplerSampler
1919
+ #endif
1920
+ #endif
1921
+ #ifdef ANISOTROPIC
1922
+ ,anisotropicOut
1923
+ #endif
1924
+ #ifdef REALTIME_FILTERING
1925
+ ,vRefractionFilteringInfo
1926
+ #endif
1927
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1928
+ ,refractionPosition
1929
+ ,refractionSize
1930
+ #endif
1931
+ );
1932
+ #ifdef SS_DISPERSION
1933
+ environmentRefraction[i]=envSample[i];}
1934
+ #else
1935
+ environmentRefraction=envSample;
1936
+ #endif
1937
+ environmentRefraction=vec4f(environmentRefraction.rgb*vRefractionInfos.x,environmentRefraction.a);
1938
+ #endif
1939
+ #ifdef SS_REFRACTION
1940
+ var refractionTransmittance: vec3f= vec3f(refractionIntensity);
1941
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1942
+ var volumeAlbedo: vec3f=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);refractionTransmittance*=cocaLambertVec3(volumeAlbedo,thickness);
1943
+ #elif defined(SS_LINKREFRACTIONTOTRANSPARENCY)
1944
+ var maxChannel: f32=max(max(surfaceAlbedo.r,surfaceAlbedo.g),surfaceAlbedo.b);var volumeAlbedo: vec3f=saturateVec3(maxChannel*surfaceAlbedo);environmentRefraction=vec4f(environmentRefraction.rgb*volumeAlbedo,environmentRefraction.a);
1945
+ #else
1946
+ var volumeAlbedo: vec3f=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);refractionTransmittance*=cocaLambertVec3(volumeAlbedo,vThicknessParam.y);
1947
+ #endif
1948
+ #ifdef SS_ALBEDOFORREFRACTIONTINT
1949
+ environmentRefraction=vec4f(environmentRefraction.rgb*surfaceAlbedo.rgb,environmentRefraction.a);
1950
+ #endif
1951
+ outParams.surfaceAlbedo=surfaceAlbedo*(1.-refractionIntensity);
1952
+ #ifdef REFLECTION
1953
+ outParams.refractionFactorForIrradiance=(1.-refractionIntensity);
1954
+ #endif
1955
+ #ifdef UNUSED_MULTIPLEBOUNCES
1956
+ var bounceSpecularEnvironmentReflectance: vec3f=(2.0*specularEnvironmentReflectance)/(1.0+specularEnvironmentReflectance);outParams.specularEnvironmentReflectance=mix(bounceSpecularEnvironmentReflectance,specularEnvironmentReflectance,refractionIntensity);
1957
+ #endif
1958
+ refractionTransmittance*=1.0-outParams.specularEnvironmentReflectance;
1959
+ #if DEBUGMODE>0
1960
+ outParams.refractionTransmittance=refractionTransmittance;
1961
+ #endif
1962
+ outParams.finalRefraction=environmentRefraction.rgb*refractionTransmittance*vLightingIntensity.z;
1963
+ #if DEBUGMODE>0
1964
+ outParams.environmentRefraction=environmentRefraction;
1965
+ #endif
1966
+ #endif
1967
+ #if defined(REFLECTION) && defined(SS_TRANSLUCENCY)
1968
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX) || !defined(USESPHERICALFROMREFLECTIONMAP)
1969
+ var irradianceVector: vec3f= (reflectionMatrix* vec4f(normalW,0)).xyz;
1970
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1971
+ irradianceVector.z*=-1.0;
1972
+ #endif
1973
+ #ifdef INVERTCUBICMAP
1974
+ irradianceVector.y*=-1.0;
1975
+ #endif
1976
+ #else
1977
+ var irradianceVector: vec3f=irradianceVector_;
1978
+ #endif
1979
+ #if defined(USESPHERICALFROMREFLECTIONMAP)
1980
+ #if defined(REALTIME_FILTERING)
1981
+ var refractionIrradiance: vec3f=irradiance(reflectionSampler,reflectionSamplerSampler,-irradianceVector,vReflectionFilteringInfo);
1982
+ #else
1983
+ var refractionIrradiance: vec3f=computeEnvironmentIrradiance(-irradianceVector);
1984
+ #endif
1985
+ #elif defined(USEIRRADIANCEMAP)
1986
+ #ifdef REFLECTIONMAP_3D
1987
+ var irradianceCoords: vec3f=irradianceVector;
1988
+ #else
1989
+ var irradianceCoords: vec2f=irradianceVector.xy;
1990
+ #ifdef REFLECTIONMAP_PROJECTION
1991
+ irradianceCoords/=irradianceVector.z;
1992
+ #endif
1993
+ irradianceCoords.y=1.0-irradianceCoords.y;
1994
+ #endif
1995
+ var temp: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,-irradianceCoords);var refractionIrradiance=temp.rgb;
1996
+ #ifdef RGBDREFLECTION
1997
+ refractionIrradiance=fromRGBD(temp).rgb;
1998
+ #endif
1999
+ #ifdef GAMMAREFLECTION
2000
+ refractionIrradiance=toLinearSpaceVec3(refractionIrradiance);
2001
+ #endif
2002
+ #else
2003
+ var refractionIrradiance: vec3f= vec3f(0.);
2004
+ #endif
2005
+ refractionIrradiance*=transmittance;
2006
+ #ifdef SS_ALBEDOFORTRANSLUCENCYTINT
2007
+ refractionIrradiance*=surfaceAlbedo.rgb;
2008
+ #endif
2009
+ outParams.refractionIrradiance=refractionIrradiance;
2010
+ #endif
2011
+ return outParams;}
2012
+ #endif
2013
+ `;
2014
+ // Sideeffect
2015
+ ShaderStore.IncludesShadersStoreWGSL[name$d] = shader$d;
2016
+
2017
+ // Do not edit.
2018
+ const name$c = "pbrBlockNormalGeometric";
2019
+ const shader$c = `var viewDirectionW: vec3f=normalize(scene.vEyePosition.xyz-input.vPositionW);
2020
+ #ifdef NORMAL
2021
+ var normalW: vec3f=normalize(input.vNormalW);
2022
+ #else
2023
+ var normalW: vec3f=normalize(cross(dpdx(input.vPositionW),dpdy(input.vPositionW)))*scene.vEyePosition.w;
2024
+ #endif
2025
+ var geometricNormalW: vec3f=normalW;
2026
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
2027
+ geometricNormalW=select(-geometricNormalW,geometricNormalW,fragmentInputs.frontFacing);
2028
+ #endif
2029
+ `;
2030
+ // Sideeffect
2031
+ ShaderStore.IncludesShadersStoreWGSL[name$c] = shader$c;
2032
+
2033
+ // Do not edit.
2034
+ const name$b = "pbrBlockNormalFinal";
2035
+ const shader$b = `#if defined(FORCENORMALFORWARD) && defined(NORMAL)
2036
+ var faceNormal: vec3f=normalize(cross(dpdx(fragmentInputs.vPositionW),dpdy(fragmentInputs.vPositionW)))*scene.vEyePosition.w;
2037
+ #if defined(TWOSIDEDLIGHTING)
2038
+ faceNormal=select(-faceNormal,faceNormal,fragmentInputs.frontFacing);
2039
+ #endif
2040
+ normalW*=sign(dot(normalW,faceNormal));
2041
+ #endif
2042
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
2043
+ normalW=select(-normalW,normalW,fragmentInputs.frontFacing);
2044
+ #endif
2045
+ `;
2046
+ // Sideeffect
2047
+ ShaderStore.IncludesShadersStoreWGSL[name$b] = shader$b;
2048
+
2049
+ // Do not edit.
2050
+ const name$a = "pbrBlockLightmapInit";
2051
+ const shader$a = `#ifdef LIGHTMAP
2052
+ var lightmapColor: vec4f=textureSample(lightmapSampler,lightmapSamplerSampler,fragmentInputs.vLightmapUV+uvOffset);
2053
+ #ifdef RGBDLIGHTMAP
2054
+ lightmapColor=vec4f(fromRGBD(lightmapColor),lightmapColor.a);
2055
+ #endif
2056
+ #ifdef GAMMALIGHTMAP
2057
+ lightmapColor=vec4f(toLinearSpaceVec3(lightmapColor.rgb),lightmapColor.a);
2058
+ #endif
2059
+ lightmapColor=vec4f(lightmapColor.rgb*uniforms.vLightmapInfos.y,lightmapColor.a);
2060
+ #endif
2061
+ `;
2062
+ // Sideeffect
2063
+ ShaderStore.IncludesShadersStoreWGSL[name$a] = shader$a;
2064
+
2065
+ // Do not edit.
2066
+ const name$9 = "pbrBlockGeometryInfo";
2067
+ const shader$9 = `var NdotVUnclamped: f32=dot(normalW,viewDirectionW);var NdotV: f32=absEps(NdotVUnclamped);var alphaG: f32=convertRoughnessToAverageSlope(roughness);var AARoughnessFactors: vec2f=getAARoughnessFactors(normalW.xyz);
2068
+ #ifdef SPECULARAA
2069
+ alphaG+=AARoughnessFactors.y;
2070
+ #endif
2071
+ #if defined(ENVIRONMENTBRDF)
2072
+ var environmentBrdf: vec3f=getBRDFLookup(NdotV,roughness);
2073
+ #endif
2074
+ #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2075
+ #ifdef RADIANCEOCCLUSION
2076
+ #ifdef AMBIENTINGRAYSCALE
2077
+ var ambientMonochrome: f32=aoOut.ambientOcclusionColor.r;
2078
+ #else
2079
+ var ambientMonochrome: f32=getLuminance(aoOut.ambientOcclusionColor);
2080
+ #endif
2081
+ var seo: f32=environmentRadianceOcclusion(ambientMonochrome,NdotVUnclamped);
2082
+ #endif
2083
+ #ifdef HORIZONOCCLUSION
2084
+ #ifdef BUMP
2085
+ #ifdef REFLECTIONMAP_3D
2086
+ var eho: f32=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
2087
+ #endif
2088
+ #endif
2089
+ #endif
2090
+ #endif
2091
+ `;
2092
+ // Sideeffect
2093
+ ShaderStore.IncludesShadersStoreWGSL[name$9] = shader$9;
2094
+
2095
+ // Do not edit.
2096
+ const name$8 = "pbrBlockReflectance0";
2097
+ const shader$8 = `var reflectance: f32=max(max(reflectivityOut.surfaceReflectivityColor.r,reflectivityOut.surfaceReflectivityColor.g),reflectivityOut.surfaceReflectivityColor.b);var specularEnvironmentR0: vec3f=reflectivityOut.surfaceReflectivityColor.rgb;
2098
+ #ifdef METALLICWORKFLOW
2099
+ var specularEnvironmentR90: vec3f= vec3f(metallicReflectanceFactors.a);
2100
+ #else
2101
+ var specularEnvironmentR90: vec3f= vec3f(1.0,1.0,1.0);
2102
+ #endif
2103
+ #ifdef ALPHAFRESNEL
2104
+ var reflectance90: f32=fresnelGrazingReflectance(reflectance);specularEnvironmentR90=specularEnvironmentR90*reflectance90;
2105
+ #endif
2106
+ `;
2107
+ // Sideeffect
2108
+ ShaderStore.IncludesShadersStoreWGSL[name$8] = shader$8;
2109
+
2110
+ // Do not edit.
2111
+ const name$7 = "pbrBlockReflectance";
2112
+ const shader$7 = `#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2113
+ var specularEnvironmentReflectance: vec3f=getReflectanceFromBRDFWithEnvLookup(clearcoatOut.specularEnvironmentR0,specularEnvironmentR90,environmentBrdf);
2114
+ #ifdef RADIANCEOCCLUSION
2115
+ specularEnvironmentReflectance*=seo;
2116
+ #endif
2117
+ #ifdef HORIZONOCCLUSION
2118
+ #ifdef BUMP
2119
+ #ifdef REFLECTIONMAP_3D
2120
+ specularEnvironmentReflectance*=eho;
2121
+ #endif
2122
+ #endif
2123
+ #endif
2124
+ #else
2125
+ var specularEnvironmentReflectance: vec3f=getReflectanceFromAnalyticalBRDFLookup_Jones(NdotV,clearcoatOut.specularEnvironmentR0,specularEnvironmentR90,sqrt(microSurface));
2126
+ #endif
2127
+ #ifdef CLEARCOAT
2128
+ specularEnvironmentReflectance*=clearcoatOut.conservationFactor;
2129
+ #if defined(CLEARCOAT_TINT)
2130
+ specularEnvironmentReflectance*=clearcoatOut.absorption;
2131
+ #endif
2132
+ #endif
2133
+ `;
2134
+ // Sideeffect
2135
+ ShaderStore.IncludesShadersStoreWGSL[name$7] = shader$7;
2136
+
2137
+ // Do not edit.
2138
+ const name$6 = "pbrBlockDirectLighting";
2139
+ const shader$6 = `var diffuseBase: vec3f=vec3f(0.,0.,0.);
2140
+ #ifdef SPECULARTERM
2141
+ var specularBase: vec3f=vec3f(0.,0.,0.);
2142
+ #endif
2143
+ #ifdef CLEARCOAT
2144
+ var clearCoatBase: vec3f=vec3f(0.,0.,0.);
2145
+ #endif
2146
+ #ifdef SHEEN
2147
+ var sheenBase: vec3f=vec3f(0.,0.,0.);
2148
+ #endif
2149
+ var preInfo: preLightingInfo;var info: lightingInfo;var shadow: f32=1.;
2150
+ var aggShadow: f32=0.;var numLights: f32=0.;
2151
+ #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
2152
+ var absorption: vec3f=vec3f(0.);
2153
+ #endif
2154
+ `;
2155
+ // Sideeffect
2156
+ ShaderStore.IncludesShadersStoreWGSL[name$6] = shader$6;
2157
+
2158
+ // Do not edit.
2159
+ const name$5 = "pbrBlockFinalLitComponents";
2160
+ const shader$5 = `aggShadow=aggShadow/numLights;
2161
+ #if defined(ENVIRONMENTBRDF)
2162
+ #ifdef MS_BRDF_ENERGY_CONSERVATION
2163
+ var energyConservationFactor: vec3f=getEnergyConservationFactor(clearcoatOut.specularEnvironmentR0,environmentBrdf);
2164
+ #endif
2165
+ #endif
2166
+ #ifndef METALLICWORKFLOW
2167
+ #ifdef SPECULAR_GLOSSINESS_ENERGY_CONSERVATION
2168
+ surfaceAlbedo=(1.-reflectance)*surfaceAlbedo.rgb;
2169
+ #endif
2170
+ #endif
2171
+ #if defined(SHEEN) && defined(SHEEN_ALBEDOSCALING) && defined(ENVIRONMENTBRDF)
2172
+ surfaceAlbedo=sheenOut.sheenAlbedoScaling*surfaceAlbedo.rgb;
2173
+ #endif
2174
+ #ifdef REFLECTION
2175
+ var finalIrradiance: vec3f=reflectionOut.environmentIrradiance;
2176
+ #if defined(CLEARCOAT)
2177
+ finalIrradiance*=clearcoatOut.conservationFactor;
2178
+ #if defined(CLEARCOAT_TINT)
2179
+ finalIrradiance*=clearcoatOut.absorption;
2180
+ #endif
2181
+ #endif
2182
+ #if defined(SS_REFRACTION)
2183
+ finalIrradiance*=subSurfaceOut.refractionFactorForIrradiance;
2184
+ #endif
2185
+ #if defined(SS_TRANSLUCENCY)
2186
+ finalIrradiance*=(1.0-subSurfaceOut.translucencyIntensity);finalIrradiance+=subSurfaceOut.refractionIrradiance;
2187
+ #endif
2188
+ finalIrradiance*=surfaceAlbedo.rgb;finalIrradiance*=uniforms.vLightingIntensity.z;finalIrradiance*=aoOut.ambientOcclusionColor;
2189
+ #endif
2190
+ #ifdef SPECULARTERM
2191
+ var finalSpecular: vec3f=specularBase;finalSpecular=max(finalSpecular,vec3f(0.0));var finalSpecularScaled: vec3f=finalSpecular*uniforms.vLightingIntensity.x*uniforms.vLightingIntensity.w;
2192
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
2193
+ finalSpecularScaled*=energyConservationFactor;
2194
+ #endif
2195
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
2196
+ finalSpecularScaled*=sheenOut.sheenAlbedoScaling;
2197
+ #endif
2198
+ #endif
2199
+ #ifdef REFLECTION
2200
+ var finalRadiance: vec3f=reflectionOut.environmentRadiance.rgb;finalRadiance*=subSurfaceOut.specularEnvironmentReflectance;var finalRadianceScaled: vec3f=finalRadiance*uniforms.vLightingIntensity.z;
2201
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
2202
+ finalRadianceScaled*=energyConservationFactor;
2203
+ #endif
2204
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
2205
+ finalRadianceScaled*=sheenOut.sheenAlbedoScaling;
2206
+ #endif
2207
+ #endif
2208
+ #ifdef SHEEN
2209
+ var finalSheen: vec3f=sheenBase*sheenOut.sheenColor;finalSheen=max(finalSheen,vec3f(0.0));var finalSheenScaled: vec3f=finalSheen*uniforms.vLightingIntensity.x*uniforms.vLightingIntensity.w;
2210
+ #if defined(CLEARCOAT) && defined(REFLECTION) && defined(ENVIRONMENTBRDF)
2211
+ sheenOut.finalSheenRadianceScaled*=clearcoatOut.conservationFactor;
2212
+ #if defined(CLEARCOAT_TINT)
2213
+ sheenOut.finalSheenRadianceScaled*=clearcoatOut.absorption;
2214
+ #endif
2215
+ #endif
2216
+ #endif
2217
+ #ifdef CLEARCOAT
2218
+ var finalClearCoat: vec3f=clearCoatBase;finalClearCoat=max(finalClearCoat,vec3f(0.0));var finalClearCoatScaled: vec3f=finalClearCoat*uniforms.vLightingIntensity.x*uniforms.vLightingIntensity.w;
2219
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
2220
+ finalClearCoatScaled*=clearcoatOut.energyConservationFactorClearCoat;
2221
+ #endif
2222
+ #ifdef SS_REFRACTION
2223
+ subSurfaceOut.finalRefraction*=clearcoatOut.conservationFactor;
2224
+ #ifdef CLEARCOAT_TINT
2225
+ subSurfaceOut.finalRefraction*=clearcoatOut.absorption;
2226
+ #endif
2227
+ #endif
2228
+ #endif
2229
+ #ifdef ALPHABLEND
2230
+ var luminanceOverAlpha: f32=0.0;
2231
+ #if defined(REFLECTION) && defined(RADIANCEOVERALPHA)
2232
+ luminanceOverAlpha+=getLuminance(finalRadianceScaled);
2233
+ #if defined(CLEARCOAT)
2234
+ luminanceOverAlpha+=getLuminance(clearcoatOut.finalClearCoatRadianceScaled);
2235
+ #endif
2236
+ #endif
2237
+ #if defined(SPECULARTERM) && defined(SPECULAROVERALPHA)
2238
+ luminanceOverAlpha+=getLuminance(finalSpecularScaled);
2239
+ #endif
2240
+ #if defined(CLEARCOAT) && defined(CLEARCOATOVERALPHA)
2241
+ luminanceOverAlpha+=getLuminance(finalClearCoatScaled);
2242
+ #endif
2243
+ #if defined(RADIANCEOVERALPHA) || defined(SPECULAROVERALPHA) || defined(CLEARCOATOVERALPHA)
2244
+ alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha);
2245
+ #endif
2246
+ #endif
2247
+ `;
2248
+ // Sideeffect
2249
+ ShaderStore.IncludesShadersStoreWGSL[name$5] = shader$5;
2250
+
2251
+ // Do not edit.
2252
+ const name$4 = "pbrBlockFinalUnlitComponents";
2253
+ const shader$4 = `var finalDiffuse: vec3f=diffuseBase;finalDiffuse*=surfaceAlbedo.rgb;finalDiffuse=max(finalDiffuse,vec3f(0.0));finalDiffuse*=uniforms.vLightingIntensity.x;var finalAmbient: vec3f=uniforms.vAmbientColor;finalAmbient*=surfaceAlbedo.rgb;var finalEmissive: vec3f=uniforms.vEmissiveColor;
2254
+ #ifdef EMISSIVE
2255
+ var emissiveColorTex: vec3f=textureSample(emissiveSampler,emissiveSamplerSampler,fragmentInputs.vEmissiveUV+uvOffset).rgb;
2256
+ #ifdef GAMMAEMISSIVE
2257
+ finalEmissive*=toLinearSpaceVec3(emissiveColorTex.rgb);
2258
+ #else
2259
+ finalEmissive*=emissiveColorTex.rgb;
2260
+ #endif
2261
+ finalEmissive*= uniforms.vEmissiveInfos.y;
2262
+ #endif
2263
+ finalEmissive*=uniforms.vLightingIntensity.y;
2264
+ #ifdef AMBIENT
2265
+ var ambientOcclusionForDirectDiffuse: vec3f=mix( vec3f(1.),aoOut.ambientOcclusionColor,uniforms.vAmbientInfos.w);
2266
+ #else
2267
+ var ambientOcclusionForDirectDiffuse: vec3f=aoOut.ambientOcclusionColor;
2268
+ #endif
2269
+ finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse;
2270
+ `;
2271
+ // Sideeffect
2272
+ ShaderStore.IncludesShadersStoreWGSL[name$4] = shader$4;
2273
+
2274
+ // Do not edit.
2275
+ const name$3 = "pbrBlockFinalColorComposition";
2276
+ const shader$3 = `var finalColor: vec4f= vec4f(
2277
+ #ifndef UNLIT
2278
+ #ifdef REFLECTION
2279
+ finalIrradiance +
2280
+ #endif
2281
+ #ifdef SPECULARTERM
2282
+ finalSpecularScaled +
2283
+ #endif
2284
+ #ifdef SHEEN
2285
+ finalSheenScaled +
2286
+ #endif
2287
+ #ifdef CLEARCOAT
2288
+ finalClearCoatScaled +
2289
+ #endif
2290
+ #ifdef REFLECTION
2291
+ finalRadianceScaled +
2292
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF)
2293
+ sheenOut.finalSheenRadianceScaled +
2294
+ #endif
2295
+ #ifdef CLEARCOAT
2296
+ clearcoatOut.finalClearCoatRadianceScaled +
2297
+ #endif
2298
+ #endif
2299
+ #ifdef SS_REFRACTION
2300
+ subSurfaceOut.finalRefraction +
2301
+ #endif
2302
+ #endif
2303
+ finalAmbient +
2304
+ finalDiffuse,
2305
+ alpha);
2306
+ #ifdef LIGHTMAP
2307
+ #ifndef LIGHTMAPEXCLUDED
2308
+ #ifdef USELIGHTMAPASSHADOWMAP
2309
+ finalColor=vec4f(finalColor.rgb*lightmapColor.rgb,finalColor.a);
2310
+ #else
2311
+ finalColor=vec4f(finalColor.rgb+lightmapColor.rgb,finalColor.a);
2312
+ #endif
2313
+ #endif
2314
+ #endif
2315
+ finalColor=vec4f(finalColor.rgb+finalEmissive,finalColor.a);
2316
+ #define CUSTOM_FRAGMENT_BEFORE_FOG
2317
+ finalColor=max(finalColor,vec4f(0.0));
2318
+ `;
2319
+ // Sideeffect
2320
+ ShaderStore.IncludesShadersStoreWGSL[name$3] = shader$3;
2321
+
2322
+ // Do not edit.
2323
+ const name$2 = "pbrBlockImageProcessing";
2324
+ const shader$2 = `#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING)
2325
+ #if !defined(SKIPFINALCOLORCLAMP)
2326
+ finalColor=vec4f(clamp(finalColor.rgb,vec3f(0.),vec3f(30.0)),finalColor.a);
2327
+ #endif
2328
+ #else
2329
+ finalColor=applyImageProcessing(finalColor);
2330
+ #endif
2331
+ finalColor=vec4f(finalColor.rgb,finalColor.a*mesh.visibility);
2332
+ #ifdef PREMULTIPLYALPHA
2333
+ finalColor=vec4f(finalColor.rgb*finalColor.a,finalColor.a);;
2334
+ #endif
2335
+ `;
2336
+ // Sideeffect
2337
+ ShaderStore.IncludesShadersStoreWGSL[name$2] = shader$2;
2338
+
2339
+ // Do not edit.
2340
+ const name$1 = "pbrDebug";
2341
+ const shader$1 = `#if DEBUGMODE>0
2342
+ if (input.vClipSpacePosition.x/input.vClipSpacePosition.w>=uniforms.vDebugMode.x) {var color: vec3f;
2343
+ #if DEBUGMODE==1
2344
+ color=fragmentInputs.vPositionW.rgb;
2345
+ #define DEBUGMODE_NORMALIZE
2346
+ #elif DEBUGMODE==2 && defined(NORMAL)
2347
+ color=fragmentInputs.vNormalW.rgb;
2348
+ #define DEBUGMODE_NORMALIZE
2349
+ #elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC)
2350
+ color=TBN[0];
2351
+ #define DEBUGMODE_NORMALIZE
2352
+ #elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC)
2353
+ color=TBN[1];
2354
+ #define DEBUGMODE_NORMALIZE
2355
+ #elif DEBUGMODE==5
2356
+ color=normalW;
2357
+ #define DEBUGMODE_NORMALIZE
2358
+ #elif DEBUGMODE==6 && defined(MAINUV1)
2359
+ color= vec3f(input.vMainUV1,0.0);
2360
+ #elif DEBUGMODE==7 && defined(MAINUV2)
2361
+ color= vec3f(input.vMainUV2,0.0);
2362
+ #elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
2363
+ color=clearcoatOut.TBNClearCoat[0];
2364
+ #define DEBUGMODE_NORMALIZE
2365
+ #elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
2366
+ color=clearcoatOut.TBNClearCoat[1];
2367
+ #define DEBUGMODE_NORMALIZE
2368
+ #elif DEBUGMODE==10 && defined(CLEARCOAT)
2369
+ color=clearcoatOut.clearCoatNormalW;
2370
+ #define DEBUGMODE_NORMALIZE
2371
+ #elif DEBUGMODE==11 && defined(ANISOTROPIC)
2372
+ color=anisotropicOut.anisotropicNormal;
2373
+ #define DEBUGMODE_NORMALIZE
2374
+ #elif DEBUGMODE==12 && defined(ANISOTROPIC)
2375
+ color=anisotropicOut.anisotropicTangent;
2376
+ #define DEBUGMODE_NORMALIZE
2377
+ #elif DEBUGMODE==13 && defined(ANISOTROPIC)
2378
+ color=anisotropicOut.anisotropicBitangent;
2379
+ #define DEBUGMODE_NORMALIZE
2380
+ #elif DEBUGMODE==20 && defined(ALBEDO)
2381
+ color=albedoTexture.rgb;
2382
+ #ifndef GAMMAALBEDO
2383
+ #define DEBUGMODE_GAMMA
2384
+ #endif
2385
+ #elif DEBUGMODE==21 && defined(AMBIENT)
2386
+ color=aoOut.ambientOcclusionColorMap.rgb;
2387
+ #elif DEBUGMODE==22 && defined(OPACITY)
2388
+ color=opacityMap.rgb;
2389
+ #elif DEBUGMODE==23 && defined(EMISSIVE)
2390
+ color=emissiveColorTex.rgb;
2391
+ #ifndef GAMMAEMISSIVE
2392
+ #define DEBUGMODE_GAMMA
2393
+ #endif
2394
+ #elif DEBUGMODE==24 && defined(LIGHTMAP)
2395
+ color=lightmapColor;
2396
+ #ifndef GAMMALIGHTMAP
2397
+ #define DEBUGMODE_GAMMA
2398
+ #endif
2399
+ #elif DEBUGMODE==25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW)
2400
+ color=reflectivityOut.surfaceMetallicColorMap.rgb;
2401
+ #elif DEBUGMODE==26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW)
2402
+ color=reflectivityOut.surfaceReflectivityColorMap.rgb;
2403
+ #define DEBUGMODE_GAMMA
2404
+ #elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)
2405
+ color= vec3f(clearcoatOut.clearCoatMapData.rg,0.0);
2406
+ #elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
2407
+ color=clearcoatOut.clearCoatTintMapData.rgb;
2408
+ #elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE)
2409
+ color=sheenOut.sheenMapData.rgb;
2410
+ #elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)
2411
+ color=anisotropicOut.anisotropyMapData.rgb;
2412
+ #elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)
2413
+ color=subSurfaceOut.thicknessMap.rgb;
2414
+ #elif DEBUGMODE==32 && defined(BUMP)
2415
+ color=textureSample(bumpSampler,bumpSamplerSampler,fragmentInputs.vBumpUV).rgb;
2416
+ #elif DEBUGMODE==40 && defined(SS_REFRACTION)
2417
+ color=subSurfaceOut.environmentRefraction.rgb;
2418
+ #define DEBUGMODE_GAMMA
2419
+ #elif DEBUGMODE==41 && defined(REFLECTION)
2420
+ color=reflectionOut.environmentRadiance.rgb;
2421
+ #ifndef GAMMAREFLECTION
2422
+ #define DEBUGMODE_GAMMA
2423
+ #endif
2424
+ #elif DEBUGMODE==42 && defined(CLEARCOAT) && defined(REFLECTION)
2425
+ color=clearcoatOut.environmentClearCoatRadiance.rgb;
2426
+ #define DEBUGMODE_GAMMA
2427
+ #elif DEBUGMODE==50
2428
+ color=diffuseBase.rgb;
2429
+ #define DEBUGMODE_GAMMA
2430
+ #elif DEBUGMODE==51 && defined(SPECULARTERM)
2431
+ color=specularBase.rgb;
2432
+ #define DEBUGMODE_GAMMA
2433
+ #elif DEBUGMODE==52 && defined(CLEARCOAT)
2434
+ color=clearCoatBase.rgb;
2435
+ #define DEBUGMODE_GAMMA
2436
+ #elif DEBUGMODE==53 && defined(SHEEN)
2437
+ color=sheenBase.rgb;
2438
+ #define DEBUGMODE_GAMMA
2439
+ #elif DEBUGMODE==54 && defined(REFLECTION)
2440
+ color=reflectionOut.environmentIrradiance.rgb;
2441
+ #ifndef GAMMAREFLECTION
2442
+ #define DEBUGMODE_GAMMA
2443
+ #endif
2444
+ #elif DEBUGMODE==60
2445
+ color=surfaceAlbedo.rgb;
2446
+ #define DEBUGMODE_GAMMA
2447
+ #elif DEBUGMODE==61
2448
+ color=clearcoatOut.specularEnvironmentR0;
2449
+ #define DEBUGMODE_GAMMA
2450
+ #elif DEBUGMODE==62 && defined(METALLICWORKFLOW)
2451
+ color= vec3f(reflectivityOut.metallicRoughness.r);
2452
+ #elif DEBUGMODE==71 && defined(METALLICWORKFLOW)
2453
+ color=reflectivityOut.metallicF0;
2454
+ #elif DEBUGMODE==63
2455
+ color= vec3f(roughness);
2456
+ #elif DEBUGMODE==64
2457
+ color= vec3f(alphaG);
2458
+ #elif DEBUGMODE==65
2459
+ color= vec3f(NdotV);
2460
+ #elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
2461
+ color=clearcoatOut.clearCoatColor;
2462
+ #define DEBUGMODE_GAMMA
2463
+ #elif DEBUGMODE==67 && defined(CLEARCOAT)
2464
+ color= vec3f(clearcoatOut.clearCoatRoughness);
2465
+ #elif DEBUGMODE==68 && defined(CLEARCOAT)
2466
+ color= vec3f(clearcoatOut.clearCoatNdotV);
2467
+ #elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)
2468
+ color=subSurfaceOut.transmittance;
2469
+ #elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION)
2470
+ color=subSurfaceOut.refractionTransmittance;
2471
+ #elif DEBUGMODE==72
2472
+ color= vec3f(microSurface);
2473
+ #elif DEBUGMODE==73
2474
+ color=uniforms.vAlbedoColor.rgb;
2475
+ #define DEBUGMODE_GAMMA
2476
+ #elif DEBUGMODE==74 && !defined(METALLICWORKFLOW)
2477
+ color=uniforms.vReflectivityColor.rgb;
2478
+ #define DEBUGMODE_GAMMA
2479
+ #elif DEBUGMODE==75
2480
+ color=uniforms.vEmissiveColor;
2481
+ #define DEBUGMODE_GAMMA
2482
+ #elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION)
2483
+ color= vec3f(seo);
2484
+ #elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
2485
+ color= vec3f(eho);
2486
+ #elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION)
2487
+ color= vec3f(energyConservationFactor);
2488
+ #elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2489
+ color=specularEnvironmentReflectance;
2490
+ #define DEBUGMODE_GAMMA
2491
+ #elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2492
+ color=clearcoatOut.clearCoatEnvironmentReflectance;
2493
+ #define DEBUGMODE_GAMMA
2494
+ #elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION)
2495
+ color=sheenOut.sheenEnvironmentReflectance;
2496
+ #define DEBUGMODE_GAMMA
2497
+ #elif DEBUGMODE==86 && defined(ALPHABLEND)
2498
+ color= vec3f(luminanceOverAlpha);
2499
+ #elif DEBUGMODE==87
2500
+ color= vec3f(alpha);
2501
+ #elif DEBUGMODE==88 && defined(ALBEDO)
2502
+ color= vec3f(albedoTexture.a);
2503
+ #elif DEBUGMODE==89
2504
+ color=aoOut.ambientOcclusionColor;
2505
+ #else
2506
+ var stripeWidth: f32=30.;var stripePos: f32=abs(floor(input.position.x/stripeWidth));var whichColor: f32=((stripePos)%(2.));var color1: vec3f= vec3f(.6,.2,.2);var color2: vec3f= vec3f(.3,.1,.1);color=mix(color1,color2,whichColor);
2507
+ #endif
2508
+ color*=uniforms.vDebugMode.y;
2509
+ #ifdef DEBUGMODE_NORMALIZE
2510
+ color=normalize(color)*0.5+0.5;
2511
+ #endif
2512
+ #ifdef DEBUGMODE_GAMMA
2513
+ color=toGammaSpaceVec3(color);
2514
+ #endif
2515
+ fragmentOutputs.color=vec4f(color,1.0);
2516
+ #ifdef PREPASS
2517
+ fragmentOutputs.fragData0=toLinearSpaceVec3(color);
2518
+ fragmentOutputs.fragData1=vec4f(0.,0.,0.,0.);
2519
+ #endif
2520
+ #ifdef DEBUGMODE_FORCERETURN
2521
+ return fragmentOutputs;
2522
+ #endif
2523
+ }
2524
+ #endif
2525
+ `;
2526
+ // Sideeffect
2527
+ ShaderStore.IncludesShadersStoreWGSL[name$1] = shader$1;
2528
+
2529
+ // Do not edit.
2530
+ const name = "pbrPixelShader";
2531
+ const shader = `#define CUSTOM_FRAGMENT_BEGIN
2532
+ #include<prePassDeclaration>[SCENE_MRT_COUNT]
2533
+ #include<oitDeclaration>
2534
+ #ifndef FROMLINEARSPACE
2535
+ #define FROMLINEARSPACE
2536
+ #endif
2537
+ #include<pbrUboDeclaration>
2538
+ #include<pbrFragmentExtraDeclaration>
2539
+ #include<lightUboDeclaration>[0..maxSimultaneousLights]
2540
+ #include<pbrFragmentSamplersDeclaration>
2541
+ #include<imageProcessingDeclaration>
2542
+ #include<clipPlaneFragmentDeclaration>
2543
+ #include<logDepthDeclaration>
2544
+ #include<fogFragmentDeclaration>
2545
+ #include<helperFunctions>
2546
+ #include<subSurfaceScatteringFunctions>
2547
+ #include<importanceSampling>
2548
+ #include<pbrHelperFunctions>
2549
+ #include<imageProcessingFunctions>
2550
+ #include<shadowsFragmentFunctions>
2551
+ #include<harmonicsFunctions>
2552
+ #include<pbrDirectLightingSetupFunctions>
2553
+ #include<pbrDirectLightingFalloffFunctions>
2554
+ #include<pbrBRDFFunctions>
2555
+ #include<hdrFilteringFunctions>
2556
+ #include<pbrDirectLightingFunctions>
2557
+ #include<pbrIBLFunctions>
2558
+ #include<bumpFragmentMainFunctions>
2559
+ #include<bumpFragmentFunctions>
2560
+ #ifdef REFLECTION
2561
+ #include<reflectionFunction>
2562
+ #endif
2563
+ #define CUSTOM_FRAGMENT_DEFINITIONS
2564
+ #include<pbrBlockAlbedoOpacity>
2565
+ #include<pbrBlockReflectivity>
2566
+ #include<pbrBlockAmbientOcclusion>
2567
+ #include<pbrBlockAlphaFresnel>
2568
+ #include<pbrBlockAnisotropic>
2569
+ #include<pbrBlockReflection>
2570
+ #include<pbrBlockSheen>
2571
+ #include<pbrBlockClearcoat>
2572
+ #include<pbrBlockIridescence>
2573
+ #include<pbrBlockSubSurface>
2574
+ @fragment
2575
+ fn main(input: FragmentInputs)->FragmentOutputs {
2576
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
2577
+ #include<clipPlaneFragment>
2578
+ #include<pbrBlockNormalGeometric>
2579
+ #include<bumpFragment>
2580
+ #include<pbrBlockNormalFinal>
2581
+ var albedoOpacityOut: albedoOpacityOutParams;
2582
+ #ifdef ALBEDO
2583
+ var albedoTexture: vec4f=textureSample(albedoSampler,albedoSamplerSampler,fragmentInputs.vAlbedoUV+uvOffset);
2584
+ #endif
2585
+ #ifdef OPACITY
2586
+ var opacityMap: vec4f=textureSample(opacitySampler,opacitySamplerSampler,fragmentInputs.vOpacityUV+uvOffset);
2587
+ #endif
2588
+ #ifdef DECAL
2589
+ var decalColor: vec4f=textureSample(decalSampler,decalSamplerSampler,fragmentInputs.vDecalUV+uvOffset);
2590
+ #endif
2591
+ albedoOpacityOut=albedoOpacityBlock(
2592
+ uniforms.vAlbedoColor
2593
+ #ifdef ALBEDO
2594
+ ,albedoTexture
2595
+ ,uniforms.vAlbedoInfos
2596
+ #endif
2597
+ #ifdef OPACITY
2598
+ ,opacityMap
2599
+ ,uniforms.vOpacityInfos
2600
+ #endif
2601
+ #ifdef DETAIL
2602
+ ,detailColor
2603
+ ,uniforms.vDetailInfos
2604
+ #endif
2605
+ #ifdef DECAL
2606
+ ,decalColor
2607
+ ,uniforms.vDecalInfos
2608
+ #endif
2609
+ );var surfaceAlbedo: vec3f=albedoOpacityOut.surfaceAlbedo;var alpha: f32=albedoOpacityOut.alpha;
2610
+ #define CUSTOM_FRAGMENT_UPDATE_ALPHA
2611
+ #include<depthPrePass>
2612
+ #define CUSTOM_FRAGMENT_BEFORE_LIGHTS
2613
+ var aoOut: ambientOcclusionOutParams;
2614
+ #ifdef AMBIENT
2615
+ var ambientOcclusionColorMap: vec3f=textureSample(ambientSampler,ambientSamplerSampler,fragmentInputs.vAmbientUV+uvOffset).rgb;
2616
+ #endif
2617
+ aoOut=ambientOcclusionBlock(
2618
+ #ifdef AMBIENT
2619
+ ambientOcclusionColorMap,
2620
+ uniforms.vAmbientInfos
2621
+ #endif
2622
+ );
2623
+ #include<pbrBlockLightmapInit>
2624
+ #ifdef UNLIT
2625
+ var diffuseBase: vec3f= vec3f(1.,1.,1.);
2626
+ #else
2627
+ var baseColor: vec3f=surfaceAlbedo;var reflectivityOut: reflectivityOutParams;
2628
+ #if defined(REFLECTIVITY)
2629
+ var surfaceMetallicOrReflectivityColorMap: vec4f=textureSample(reflectivitySampler,reflectivitySamplerSampler,fragmentInputs.vReflectivityUV+uvOffset);var baseReflectivity: vec4f=surfaceMetallicOrReflectivityColorMap;
2630
+ #ifndef METALLICWORKFLOW
2631
+ #ifdef REFLECTIVITY_GAMMA
2632
+ surfaceMetallicOrReflectivityColorMap=toLinearSpaceVec4(surfaceMetallicOrReflectivityColorMap);
2633
+ #endif
2634
+ surfaceMetallicOrReflectivityColorMap=vec4f(surfaceMetallicOrReflectivityColorMap.rgb*uniforms.vReflectivityInfos.y,surfaceMetallicOrReflectivityColorMap.a);
2635
+ #endif
2636
+ #endif
2637
+ #if defined(MICROSURFACEMAP)
2638
+ var microSurfaceTexel: vec4f=textureSample(microSurfaceSampler,microSurfaceSamplerSampler,fragmentInputs.vMicroSurfaceSamplerUV+uvOffset)*uniforms.vMicroSurfaceSamplerInfos.y;
2639
+ #endif
2640
+ #ifdef METALLICWORKFLOW
2641
+ var metallicReflectanceFactors: vec4f=uniforms.vMetallicReflectanceFactors;
2642
+ #ifdef REFLECTANCE
2643
+ var reflectanceFactorsMap: vec4f=textureSample(reflectanceSampler,reflectanceSamplerSampler,fragmentInputs.vReflectanceUV+uvOffset);
2644
+ #ifdef REFLECTANCE_GAMMA
2645
+ reflectanceFactorsMap=toLinearSpaceVec4(reflectanceFactorsMap);
2646
+ #endif
2647
+ metallicReflectanceFactors=vec4f(metallicReflectanceFactors.rgb*reflectanceFactorsMap.rgb,metallicReflectanceFactors.a);
2648
+ #endif
2649
+ #ifdef METALLIC_REFLECTANCE
2650
+ var metallicReflectanceFactorsMap: vec4f=textureSample(metallicReflectanceSampler,metallicReflectanceSamplerSampler,fragmentInputs.vMetallicReflectanceUV+uvOffset);
2651
+ #ifdef METALLIC_REFLECTANCE_GAMMA
2652
+ metallicReflectanceFactorsMap=toLinearSpaceVec4(metallicReflectanceFactorsMap);
2653
+ #endif
2654
+ #ifndef METALLIC_REFLECTANCE_USE_ALPHA_ONLY
2655
+ metallicReflectanceFactors=vec4f(metallicReflectanceFactors.rgb*reflectanceFactorsMap.rgb,metallicReflectanceFactors.a);
2656
+ #endif
2657
+ metallicReflectanceFactors*=metallicReflectanceFactorsMap.a;
2658
+ #endif
2659
+ #endif
2660
+ reflectivityOut=reflectivityBlock(
2661
+ uniforms.vReflectivityColor
2662
+ #ifdef METALLICWORKFLOW
2663
+ ,surfaceAlbedo
2664
+ ,metallicReflectanceFactors
2665
+ #endif
2666
+ #ifdef REFLECTIVITY
2667
+ ,uniforms.vReflectivityInfos
2668
+ ,surfaceMetallicOrReflectivityColorMap
2669
+ #endif
2670
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
2671
+ ,aoOut.ambientOcclusionColor
2672
+ #endif
2673
+ #ifdef MICROSURFACEMAP
2674
+ ,microSurfaceTexel
2675
+ #endif
2676
+ #ifdef DETAIL
2677
+ ,detailColor
2678
+ ,uniforms.vDetailInfos
2679
+ #endif
2680
+ );var microSurface: f32=reflectivityOut.microSurface;var roughness: f32=reflectivityOut.roughness;
2681
+ #ifdef METALLICWORKFLOW
2682
+ surfaceAlbedo=reflectivityOut.surfaceAlbedo;
2683
+ #endif
2684
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
2685
+ aoOut.ambientOcclusionColor=reflectivityOut.ambientOcclusionColor;
2686
+ #endif
2687
+ #ifdef ALPHAFRESNEL
2688
+ #if defined(ALPHATEST) || defined(ALPHABLEND)
2689
+ var alphaFresnelOut: alphaFresnelOutParams;alphaFresnelOut=alphaFresnelBlock(
2690
+ normalW,
2691
+ viewDirectionW,
2692
+ alpha,
2693
+ microSurface
2694
+ );alpha=alphaFresnelOut.alpha;
2695
+ #endif
2696
+ #endif
2697
+ #include<pbrBlockGeometryInfo>
2698
+ #ifdef ANISOTROPIC
2699
+ var anisotropicOut: anisotropicOutParams;
2700
+ #ifdef ANISOTROPIC_TEXTURE
2701
+ var anisotropyMapData: vec3f=textureSample(anisotropySampler,anisotropySamplerSampler,fragmentInputs.vAnisotropyUV+uvOffset).rgb*uniforms.vAnisotropyInfos.y;
2702
+ #endif
2703
+ anisotropicOut=anisotropicBlock(
2704
+ uniforms.vAnisotropy,
2705
+ roughness,
2706
+ #ifdef ANISOTROPIC_TEXTURE
2707
+ anisotropyMapData,
2708
+ #endif
2709
+ TBN,
2710
+ normalW,
2711
+ viewDirectionW
2712
+ );
2713
+ #endif
2714
+ #ifdef REFLECTION
2715
+ var reflectionOut: reflectionOutParams;
2716
+ #ifndef USE_CUSTOM_REFLECTION
2717
+ reflectionOut=reflectionBlock(
2718
+ fragmentInputs.vPositionW
2719
+ ,normalW
2720
+ ,alphaG
2721
+ ,uniforms.vReflectionMicrosurfaceInfos
2722
+ ,uniforms.vReflectionInfos
2723
+ ,uniforms.vReflectionColor
2724
+ #ifdef ANISOTROPIC
2725
+ ,anisotropicOut
2726
+ #endif
2727
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
2728
+ ,NdotVUnclamped
2729
+ #endif
2730
+ #ifdef LINEARSPECULARREFLECTION
2731
+ ,roughness
2732
+ #endif
2733
+ ,reflectionSampler
2734
+ ,reflectionSamplerSampler
2735
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
2736
+ ,fragmentInputs.vEnvironmentIrradiance
2737
+ #endif
2738
+ #ifdef USESPHERICALFROMREFLECTIONMAP
2739
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
2740
+ ,uniforms.reflectionMatrix
2741
+ #endif
2742
+ #endif
2743
+ #ifdef USEIRRADIANCEMAP
2744
+ ,irradianceSampler
2745
+ ,irradianceSamplerSampler
2746
+ #endif
2747
+ #ifndef LODBASEDMICROSFURACE
2748
+ ,reflectionLowSampler
2749
+ ,reflectionLowSamplerSampler
2750
+ ,reflectionHighSampler
2751
+ ,reflectionHighSamplerSampler
2752
+ #endif
2753
+ #ifdef REALTIME_FILTERING
2754
+ ,uniforms.vReflectionFilteringInfo
2755
+ #endif
2756
+ );
2757
+ #else
2758
+ #define CUSTOM_REFLECTION
2759
+ #endif
2760
+ #endif
2761
+ #include<pbrBlockReflectance0>
2762
+ #ifdef SHEEN
2763
+ var sheenOut: sheenOutParams;
2764
+ #ifdef SHEEN_TEXTURE
2765
+ var sheenMapData: vec4f=textureSample(sheenSampler,sheenSamplerSampler,fragmentInputs.vSheenUV+uvOffset);
2766
+ #endif
2767
+ #if defined(SHEEN_ROUGHNESS) && defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
2768
+ var sheenMapRoughnessData: vec4f=textureSample(sheenRoughnessSampler,sheenRoughnessSamplerSampler,fragmentInputs.vSheenRoughnessUV+uvOffset)*uniforms.vSheenInfos.w;
2769
+ #endif
2770
+ sheenOut=sheenBlock(
2771
+ uniforms.vSheenColor
2772
+ #ifdef SHEEN_ROUGHNESS
2773
+ ,uniforms.vSheenRoughness
2774
+ #if defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
2775
+ ,sheenMapRoughnessData
2776
+ #endif
2777
+ #endif
2778
+ ,roughness
2779
+ #ifdef SHEEN_TEXTURE
2780
+ ,sheenMapData
2781
+ ,uniforms.vSheenInfos.y
2782
+ #endif
2783
+ ,reflectance
2784
+ #ifdef SHEEN_LINKWITHALBEDO
2785
+ ,baseColor
2786
+ ,surfaceAlbedo
2787
+ #endif
2788
+ #ifdef ENVIRONMENTBRDF
2789
+ ,NdotV
2790
+ ,environmentBrdf
2791
+ #endif
2792
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
2793
+ ,AARoughnessFactors
2794
+ ,uniforms.vReflectionMicrosurfaceInfos
2795
+ ,uniforms.vReflectionInfos
2796
+ ,uniforms.vReflectionColor
2797
+ ,uniforms.vLightingIntensity
2798
+ ,reflectionSampler
2799
+ ,reflectionSamplerSampler
2800
+ ,reflectionOut.reflectionCoords
2801
+ ,NdotVUnclamped
2802
+ #ifndef LODBASEDMICROSFURACE
2803
+ ,reflectionLowSampler
2804
+ ,reflectionLowSamplerSampler
2805
+ ,reflectionHighSampler
2806
+ ,reflectionHighSamplerSampler
2807
+ #endif
2808
+ #ifdef REALTIME_FILTERING
2809
+ ,vReflectionFilteringInfo
2810
+ #endif
2811
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
2812
+ ,seo
2813
+ #endif
2814
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
2815
+ ,eho
2816
+ #endif
2817
+ #endif
2818
+ );
2819
+ #ifdef SHEEN_LINKWITHALBEDO
2820
+ surfaceAlbedo=sheenOut.surfaceAlbedo;
2821
+ #endif
2822
+ #endif
2823
+ #ifdef CLEARCOAT
2824
+ #ifdef CLEARCOAT_TEXTURE
2825
+ var clearCoatMapData: vec2f=textureSample(clearCoatSampler,clearCoatSamplerSampler,fragmentInputs.vClearCoatUV+uvOffset).rg*uniforms.vClearCoatInfos.y;
2826
+ #endif
2827
+ #endif
2828
+ #ifdef IRIDESCENCE
2829
+ var iridescenceOut: iridescenceOutParams;
2830
+ #ifdef IRIDESCENCE_TEXTURE
2831
+ var iridescenceMapData: vec2f=textureSample(iridescenceSampler,iridescenceSamplerSampler,fragmentInputs.vIridescenceUV+uvOffset).rg*vIridescenceInfos.y;
2832
+ #endif
2833
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
2834
+ var iridescenceThicknessMapData: vec2f=textureSample(iridescenceThicknessSampler,iridescenceThicknessSamplerSampler,fragmentInputs.vIridescenceThicknessUV+uvOffset).rg*vIridescenceInfos.w;
2835
+ #endif
2836
+ iridescenceOut=iridescenceBlock(
2837
+ uniforms.vIridescenceParams
2838
+ ,NdotV
2839
+ ,specularEnvironmentR0
2840
+ #ifdef IRIDESCENCE_TEXTURE
2841
+ ,iridescenceMapData
2842
+ #endif
2843
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
2844
+ ,iridescenceThicknessMapData
2845
+ #endif
2846
+ #ifdef CLEARCOAT
2847
+ ,NdotVUnclamped
2848
+ #ifdef CLEARCOAT_TEXTURE
2849
+ ,clearCoatMapData
2850
+ #endif
2851
+ #endif
2852
+ );var iridescenceIntensity: f32=iridescenceOut.iridescenceIntensity;specularEnvironmentR0=iridescenceOut.specularEnvironmentR0;
2853
+ #endif
2854
+ var clearcoatOut: clearcoatOutParams;
2855
+ #ifdef CLEARCOAT
2856
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
2857
+ var clearCoatMapRoughnessData: vec4f=textureSample(clearCoatRoughnessSampler,clearCoatRoughnessSamplerSampler,fragmentInputs.vClearCoatRoughnessUV+uvOffset)*uniforms.vClearCoatInfos.w;
2858
+ #endif
2859
+ #if defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
2860
+ var clearCoatTintMapData: vec4f=textureSample(clearCoatTintSampler,clearCoatTintSamplerSampler,fragmentInputs.vClearCoatTintUV+uvOffset);
2861
+ #endif
2862
+ #ifdef CLEARCOAT_BUMP
2863
+ var clearCoatBumpMapData: vec4f=textureSample(clearCoatBumpSampler,clearCoatBumpSamplerSampler,fragmentInputs.vClearCoatBumpUV+uvOffset);
2864
+ #endif
2865
+ clearcoatOut=clearcoatBlock(
2866
+ fragmentInputs.vPositionW
2867
+ ,geometricNormalW
2868
+ ,viewDirectionW
2869
+ ,uniforms.vClearCoatParams
2870
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
2871
+ ,clearCoatMapRoughnessData
2872
+ #endif
2873
+ ,specularEnvironmentR0
2874
+ #ifdef CLEARCOAT_TEXTURE
2875
+ ,clearCoatMapData
2876
+ #endif
2877
+ #ifdef CLEARCOAT_TINT
2878
+ ,uniforms.vClearCoatTintParams
2879
+ ,uniforms.clearCoatColorAtDistance
2880
+ ,uniforms.vClearCoatRefractionParams
2881
+ #ifdef CLEARCOAT_TINT_TEXTURE
2882
+ ,clearCoatTintMapData
2883
+ #endif
2884
+ #endif
2885
+ #ifdef CLEARCOAT_BUMP
2886
+ ,uniforms.vClearCoatBumpInfos
2887
+ ,clearCoatBumpMapData
2888
+ ,fragmentInputs.vClearCoatBumpUV
2889
+ #if defined(TANGENT) && defined(NORMAL)
2890
+ ,vTBN
2891
+ #else
2892
+ ,uniforms.vClearCoatTangentSpaceParams
2893
+ #endif
2894
+ #ifdef OBJECTSPACE_NORMALMAP
2895
+ ,uniforms.normalMatrix
2896
+ #endif
2897
+ #endif
2898
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
2899
+ ,faceNormal
2900
+ #endif
2901
+ #ifdef REFLECTION
2902
+ ,uniforms.vReflectionMicrosurfaceInfos
2903
+ ,uniforms.vReflectionInfos
2904
+ ,uniforms.vReflectionColor
2905
+ ,uniforms.vLightingIntensity
2906
+ ,reflectionSampler
2907
+ ,reflectionSamplerSampler
2908
+ #ifndef LODBASEDMICROSFURACE
2909
+ ,reflectionLowSampler
2910
+ ,reflectionLowSamplerSampler
2911
+ ,reflectionHighSampler
2912
+ ,reflectionHighSamplerSampler
2913
+ #endif
2914
+ #ifdef REALTIME_FILTERING
2915
+ ,uniforms.vReflectionFilteringInfo
2916
+ #endif
2917
+ #endif
2918
+ #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
2919
+ ,select(-1.,1.,fragmentInputs.frontFacing)
2920
+ #endif
2921
+ );
2922
+ #else
2923
+ clearcoatOut.specularEnvironmentR0=specularEnvironmentR0;
2924
+ #endif
2925
+ #include<pbrBlockReflectance>
2926
+ var subSurfaceOut: subSurfaceOutParams;
2927
+ #ifdef SUBSURFACE
2928
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
2929
+ var thicknessMap: vec4f=textureSample(thicknessSampler,thicknessSamplerSampler,fragmentInputs.vThicknessUV+uvOffset);
2930
+ #endif
2931
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
2932
+ var refractionIntensityMap: vec4f=textureSample(refractionIntensitySampler,refractionIntensitySamplerSampler,fragmentInputs.vRefractionIntensityUV+uvOffset);
2933
+ #endif
2934
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
2935
+ var translucencyIntensityMap: vec4f=textureSample(translucencyIntensitySampler,translucencyIntensitySamplerSampler,fragmentInputs.vTranslucencyIntensityUV+uvOffset);
2936
+ #endif
2937
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
2938
+ var translucencyColorMap: vec4f=textureSample(translucencyColorSampler,translucencyColorSamplerSampler,fragmentInputs.vTranslucencyColorUV+uvOffset);
2939
+ #endif
2940
+ subSurfaceOut=subSurfaceBlock(
2941
+ uniforms.vSubSurfaceIntensity
2942
+ ,uniforms.vThicknessParam
2943
+ ,uniforms.vTintColor
2944
+ ,normalW
2945
+ ,specularEnvironmentReflectance
2946
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
2947
+ ,thicknessMap
2948
+ #endif
2949
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
2950
+ ,refractionIntensityMap
2951
+ #endif
2952
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
2953
+ ,translucencyIntensityMap
2954
+ #endif
2955
+ #ifdef REFLECTION
2956
+ #ifdef SS_TRANSLUCENCY
2957
+ ,uniforms.reflectionMatrix
2958
+ #ifdef USESPHERICALFROMREFLECTIONMAP
2959
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
2960
+ ,reflectionOut.irradianceVector
2961
+ #endif
2962
+ #if defined(REALTIME_FILTERING)
2963
+ ,reflectionSampler
2964
+ ,reflectionSamplerSampler
2965
+ ,vReflectionFilteringInfo
2966
+ #endif
2967
+ #endif
2968
+ #ifdef USEIRRADIANCEMAP
2969
+ ,irradianceSampler
2970
+ ,irradianceSamplerSampler
2971
+ #endif
2972
+ #endif
2973
+ #endif
2974
+ #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
2975
+ ,surfaceAlbedo
2976
+ #endif
2977
+ #ifdef SS_REFRACTION
2978
+ ,fragmentInputs.vPositionW
2979
+ ,viewDirectionW
2980
+ ,scene.view
2981
+ ,uniforms.vRefractionInfos
2982
+ ,uniforms.refractionMatrix
2983
+ ,uniforms.vRefractionMicrosurfaceInfos
2984
+ ,uniforms.vLightingIntensity
2985
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
2986
+ ,alpha
2987
+ #endif
2988
+ #ifdef SS_LODINREFRACTIONALPHA
2989
+ ,NdotVUnclamped
2990
+ #endif
2991
+ #ifdef SS_LINEARSPECULARREFRACTION
2992
+ ,roughness
2993
+ #endif
2994
+ ,alphaG
2995
+ ,refractionSampler
2996
+ ,refractionSamplerSampler
2997
+ #ifndef LODBASEDMICROSFURACE
2998
+ ,refractionLowSampler
2999
+ ,refractionLowSamplerSampler
3000
+ ,refractionHighSampler
3001
+ ,refractionHighSamplerSampler
3002
+ #endif
3003
+ #ifdef ANISOTROPIC
3004
+ ,anisotropicOut
3005
+ #endif
3006
+ #ifdef REALTIME_FILTERING
3007
+ ,uniforms.vRefractionFilteringInfo
3008
+ #endif
3009
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
3010
+ ,uniforms.vRefractionPosition
3011
+ ,uniforms.vRefractionSize
3012
+ #endif
3013
+ #ifdef SS_DISPERSION
3014
+ ,dispersion
3015
+ #endif
3016
+ #endif
3017
+ #ifdef SS_TRANSLUCENCY
3018
+ ,uniforms.vDiffusionDistance
3019
+ ,uniforms.vTranslucencyColor
3020
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
3021
+ ,translucencyColorMap
3022
+ #endif
3023
+ #endif
3024
+ );
3025
+ #ifdef SS_REFRACTION
3026
+ surfaceAlbedo=subSurfaceOut.surfaceAlbedo;
3027
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
3028
+ alpha=subSurfaceOut.alpha;
3029
+ #endif
3030
+ #endif
3031
+ #else
3032
+ subSurfaceOut.specularEnvironmentReflectance=specularEnvironmentReflectance;
3033
+ #endif
3034
+ #include<pbrBlockDirectLighting>
3035
+ #include<lightFragment>[0..maxSimultaneousLights]
3036
+ #include<pbrBlockFinalLitComponents>
3037
+ #endif
3038
+ #include<pbrBlockFinalUnlitComponents>
3039
+ #define CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION
3040
+ #include<pbrBlockFinalColorComposition>
3041
+ #include<logDepthFragment>
3042
+ #include<fogFragment>(color,finalColor)
3043
+ #include<pbrBlockImageProcessing>
3044
+ #define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR
3045
+ #ifdef PREPASS
3046
+ var writeGeometryInfo: f32=select(0.0,1.0,finalColor.a>ALPHATESTVALUE);var fragData: array<vec4<f32>,SCENE_MRT_COUNT>;
3047
+ #ifdef PREPASS_POSITION
3048
+ fragData[PREPASS_POSITION_INDEX]= vec4f(fragmentInputs.vPositionW,writeGeometryInfo);
3049
+ #endif
3050
+ #ifdef PREPASS_LOCAL_POSITION
3051
+ fragData[PREPASS_LOCAL_POSITION_INDEX] =
3052
+ vec4f(fragmentInputs.vPosition,writeGeometryInfo);
3053
+ #endif
3054
+ #ifdef PREPASS_VELOCITY
3055
+ var a: vec2f=(fragmentInputs.vCurrentPosition.xy/fragmentInputs.vCurrentPosition.w)*0.5+0.5;var b: vec2f=(fragmentInputs.vPreviousPosition.xy/fragmentInputs.vPreviousPosition.w)*0.5+0.5;var velocity: vec2f=abs(a-b);velocity= vec2f(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;fragData[PREPASS_VELOCITY_INDEX]= vec4f(velocity,0.0,writeGeometryInfo);
3056
+ #elif defined(PREPASS_VELOCITY_LINEAR)
3057
+ var velocity : vec2f=vec2f(0.5)*((fragmentInputs.vPreviousPosition.xy /
3058
+ fragmentInputs.vPreviousPosition.w) -
3059
+ (fragmentInputs.vCurrentPosition.xy /
3060
+ fragmentInputs.vCurrentPosition.w));fragData[PREPASS_VELOCITY_LINEAR_INDEX] =
3061
+ vec4f(velocity,0.0,writeGeometryInfo);
3062
+ #endif
3063
+ #ifdef PREPASS_ALBEDO_SQRT
3064
+ var sqAlbedo : vec3f=sqrt(surfaceAlbedo);
3065
+ #endif
3066
+ #ifdef PREPASS_IRRADIANCE
3067
+ var irradiance : vec3f=finalDiffuse;
3068
+ #ifndef UNLIT
3069
+ #ifdef REFLECTION
3070
+ irradiance+=finalIrradiance;
3071
+ #endif
3072
+ #endif
3073
+ #ifdef SS_SCATTERING
3074
+ fragData[0]=vec4f(finalColor.rgb-irradiance,
3075
+ finalColor.a);
3076
+ irradiance/=sqAlbedo;
3077
+ #else
3078
+ fragData[0]=finalColor;
3079
+ var scatteringDiffusionProfile : f32=255.;
3080
+ #endif
3081
+ fragData[PREPASS_IRRADIANCE_INDEX] =
3082
+ vec4f(clamp(irradiance,vec3f(0.),vec3f(1.)),
3083
+ writeGeometryInfo*scatteringDiffusionProfile /
3084
+ 255.);
3085
+ #else
3086
+ fragData[0]=vec4f(finalColor.rgb,finalColor.a);
3087
+ #endif
3088
+ #ifdef PREPASS_DEPTH
3089
+ fragData[PREPASS_DEPTH_INDEX]=vec4f(fragmentInputs.vViewPos.z,0.0,0.0,
3090
+ writeGeometryInfo);
3091
+ #endif
3092
+ #ifdef PREPASS_SCREENSPACE_DEPTH
3093
+ fragData[PREPASS_SCREENSPACE_DEPTH_INDEX] =
3094
+ vec4f(fragmentInputs.position.z,0.0,0.0,writeGeometryInfo);
3095
+ #endif
3096
+ #ifdef PREPASS_NORMAL
3097
+ #ifdef PREPASS_NORMAL_WORLDSPACE
3098
+ fragData[PREPASS_NORMAL_INDEX] =
3099
+ vec4f(normalW,writeGeometryInfo);
3100
+ #else
3101
+ fragData[PREPASS_NORMAL_INDEX] =
3102
+ vec4f(normalize((scene.view*vec4f(normalW,0.0)).rgb),
3103
+ writeGeometryInfo);
3104
+ #endif
3105
+ #endif
3106
+ #ifdef PREPASS_WORLD_NORMAL
3107
+ fragData[PREPASS_WORLD_NORMAL_INDEX]=vec4f(normalW*0.5+0.5,writeGeometryInfo);
3108
+ #endif
3109
+ #ifdef PREPASS_ALBEDO_SQRT
3110
+ fragData[PREPASS_ALBEDO_SQRT_INDEX] =
3111
+ vec4f(sqAlbedo,writeGeometryInfo);
3112
+ #endif
3113
+ #ifdef PREPASS_REFLECTIVITY
3114
+ #ifndef UNLIT
3115
+ fragData[PREPASS_REFLECTIVITY_INDEX] =
3116
+ vec4f(specularEnvironmentR0,microSurface)*writeGeometryInfo;
3117
+ #else
3118
+ fragData[PREPASS_REFLECTIVITY_INDEX] =
3119
+ vec4f(0.0,0.0,0.0,1.0)*writeGeometryInfo;
3120
+ #endif
3121
+ #endif
3122
+ #if SCENE_MRT_COUNT>0
3123
+ fragmentOutputs.fragData0=fragData[0];
3124
+ #endif
3125
+ #if SCENE_MRT_COUNT>1
3126
+ fragmentOutputs.fragData1=fragData[1];
3127
+ #endif
3128
+ #if SCENE_MRT_COUNT>2
3129
+ fragmentOutputs.fragData2=fragData[2];
3130
+ #endif
3131
+ #if SCENE_MRT_COUNT>3
3132
+ fragmentOutputs.fragData3=fragData[3];
3133
+ #endif
3134
+ #if SCENE_MRT_COUNT>4
3135
+ fragmentOutputs.fragData4=fragData[4];
3136
+ #endif
3137
+ #if SCENE_MRT_COUNT>5
3138
+ fragmentOutputs.fragData5=fragData[5];
3139
+ #endif
3140
+ #if SCENE_MRT_COUNT>6
3141
+ fragmentOutputs.fragData6=fragData[6];
3142
+ #endif
3143
+ #if SCENE_MRT_COUNT>7
3144
+ fragmentOutputs.fragData7=fragData[7];
3145
+ #endif
3146
+ #endif
3147
+ #if !defined(PREPASS) && !defined(ORDER_INDEPENDENT_TRANSPARENCY)
3148
+ fragmentOutputs.color=finalColor;
3149
+ #endif
3150
+ #include<oitFragment>
3151
+ #if ORDER_INDEPENDENT_TRANSPARENCY
3152
+ if (fragDepth==nearestDepth) {fragmentOutputs.frontColor=vec4f(fragmentOutputs.frontColor.rgb+finalColor.rgb*finalColor.a*alphaMultiplier,1.0-alphaMultiplier*(1.0-finalColor.a));} else {fragmentOutputs.backColor+=finalColor;}
3153
+ #endif
3154
+ #include<pbrDebug>
3155
+ #define CUSTOM_FRAGMENT_MAIN_END
3156
+ }`;
3157
+ // Sideeffect
3158
+ ShaderStore.ShadersStoreWGSL[name] = shader;
3159
+ /** @internal */
3160
+ const pbrPixelShaderWGSL = { name, shader };
3161
+
3162
+ export { pbrPixelShaderWGSL };
3163
+ //# sourceMappingURL=pbr.fragment-B2LdxiLY.esm.js.map