@fps-games/editor-deployment 0.2.3-beta.10

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 (533) hide show
  1. package/bin/fps-editor-agent.mjs +5 -0
  2. package/bin/fps-editor-prepare.mjs +5 -0
  3. package/bin/fps-editor-project.mjs +18 -0
  4. package/bin/fps-editor-server.mjs +2 -0
  5. package/licenses/THIRD_PARTY_NOTICES.txt +7 -0
  6. package/manifest.json +2688 -0
  7. package/npm-shrinkwrap.json +21 -0
  8. package/package.json +44 -0
  9. package/public/assets/abstractAudioBus-BRAC2GY2.js +1 -0
  10. package/public/assets/animation-C6iNAO1g.js +1 -0
  11. package/public/assets/animation-C6iNAO1g.js.br +0 -0
  12. package/public/assets/animation-C6iNAO1g.js.gz +0 -0
  13. package/public/assets/animationGroup-C74XVFRE.js +1 -0
  14. package/public/assets/animationGroup-C74XVFRE.js.br +0 -0
  15. package/public/assets/animationGroup-C74XVFRE.js.gz +0 -0
  16. package/public/assets/arcRotateCamera-CIQYNBBJ.js +1 -0
  17. package/public/assets/arcRotateCamera-CIQYNBBJ.js.br +0 -0
  18. package/public/assets/arcRotateCamera-CIQYNBBJ.js.gz +0 -0
  19. package/public/assets/babylon-core-PuGyjHMj.js +13882 -0
  20. package/public/assets/babylon-core-PuGyjHMj.js.br +0 -0
  21. package/public/assets/babylon-core-PuGyjHMj.js.gz +0 -0
  22. package/public/assets/babylon-core-S0gBQJVe.js +1 -0
  23. package/public/assets/babylon-core-S0gBQJVe.js.br +0 -0
  24. package/public/assets/babylon-core-S0gBQJVe.js.gz +0 -0
  25. package/public/assets/basisTextureLoader-BdapVvhf.js +1 -0
  26. package/public/assets/basisTextureLoader-BdapVvhf.js.br +0 -0
  27. package/public/assets/basisTextureLoader-BdapVvhf.js.gz +0 -0
  28. package/public/assets/bumpVertex-DMhnr4dz.js +173 -0
  29. package/public/assets/bumpVertex-DMhnr4dz.js.br +0 -0
  30. package/public/assets/bumpVertex-DMhnr4dz.js.gz +0 -0
  31. package/public/assets/bumpVertex-DpGOKCkn.js +177 -0
  32. package/public/assets/bumpVertex-DpGOKCkn.js.br +0 -0
  33. package/public/assets/bumpVertex-DpGOKCkn.js.gz +0 -0
  34. package/public/assets/chromaticAberration.fragment-BgX-2zxS.js +7 -0
  35. package/public/assets/chromaticAberration.fragment-BgX-2zxS.js.br +0 -0
  36. package/public/assets/chromaticAberration.fragment-BgX-2zxS.js.gz +0 -0
  37. package/public/assets/chromaticAberration.fragment-D7t6Txg4.js +6 -0
  38. package/public/assets/chromaticAberration.fragment-D7t6Txg4.js.br +0 -0
  39. package/public/assets/chromaticAberration.fragment-D7t6Txg4.js.gz +0 -0
  40. package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js +17 -0
  41. package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js.br +0 -0
  42. package/public/assets/circleOfConfusion.fragment-D1RtHaPm.js.gz +0 -0
  43. package/public/assets/circleOfConfusion.fragment-D8geMRma.js +17 -0
  44. package/public/assets/circleOfConfusion.fragment-D8geMRma.js.br +0 -0
  45. package/public/assets/circleOfConfusion.fragment-D8geMRma.js.gz +0 -0
  46. package/public/assets/clipPlaneFragment-Bgl3Usc4.js +46 -0
  47. package/public/assets/clipPlaneFragment-Bgl3Usc4.js.br +0 -0
  48. package/public/assets/clipPlaneFragment-Bgl3Usc4.js.gz +0 -0
  49. package/public/assets/clipPlaneVertex-BxK9aoI2.js +177 -0
  50. package/public/assets/clipPlaneVertex-BxK9aoI2.js.br +0 -0
  51. package/public/assets/clipPlaneVertex-BxK9aoI2.js.gz +0 -0
  52. package/public/assets/color.fragment-BUdIBar6.js +20 -0
  53. package/public/assets/color.fragment-BUdIBar6.js.br +0 -0
  54. package/public/assets/color.fragment-BUdIBar6.js.gz +0 -0
  55. package/public/assets/color.fragment-CDn4ZgkT.js +21 -0
  56. package/public/assets/color.fragment-CDn4ZgkT.js.br +0 -0
  57. package/public/assets/color.fragment-CDn4ZgkT.js.gz +0 -0
  58. package/public/assets/color.vertex-CaMOSKlC.js +39 -0
  59. package/public/assets/color.vertex-CaMOSKlC.js.br +5 -0
  60. package/public/assets/color.vertex-CaMOSKlC.js.gz +0 -0
  61. package/public/assets/color.vertex-dgbB6mhK.js +32 -0
  62. package/public/assets/color.vertex-dgbB6mhK.js.br +0 -0
  63. package/public/assets/color.vertex-dgbB6mhK.js.gz +0 -0
  64. package/public/assets/dds-3J0FZYX1.js +1 -0
  65. package/public/assets/dds-3J0FZYX1.js.br +0 -0
  66. package/public/assets/dds-3J0FZYX1.js.gz +0 -0
  67. package/public/assets/ddsTextureLoader-s5HptTVZ.js +1 -0
  68. package/public/assets/ddsTextureLoader-s5HptTVZ.js.br +0 -0
  69. package/public/assets/ddsTextureLoader-s5HptTVZ.js.gz +0 -0
  70. package/public/assets/default.fragment-C4xg7O-P.js +526 -0
  71. package/public/assets/default.fragment-C4xg7O-P.js.br +0 -0
  72. package/public/assets/default.fragment-C4xg7O-P.js.gz +0 -0
  73. package/public/assets/default.fragment-C4zjkcFb.js +468 -0
  74. package/public/assets/default.fragment-C4zjkcFb.js.br +0 -0
  75. package/public/assets/default.fragment-C4zjkcFb.js.gz +0 -0
  76. package/public/assets/default.vertex-A8wQopNr.js +193 -0
  77. package/public/assets/default.vertex-A8wQopNr.js.br +0 -0
  78. package/public/assets/default.vertex-A8wQopNr.js.gz +0 -0
  79. package/public/assets/default.vertex-YrvIUn4x.js +181 -0
  80. package/public/assets/default.vertex-YrvIUn4x.js.br +0 -0
  81. package/public/assets/default.vertex-YrvIUn4x.js.gz +0 -0
  82. package/public/assets/defaultUboDeclaration-C8GCosBM.js +5 -0
  83. package/public/assets/defaultUboDeclaration-C8GCosBM.js.br +0 -0
  84. package/public/assets/defaultUboDeclaration-C8GCosBM.js.gz +0 -0
  85. package/public/assets/defaultUboDeclaration-D26o_DDO.js +7 -0
  86. package/public/assets/defaultUboDeclaration-D26o_DDO.js.br +0 -0
  87. package/public/assets/defaultUboDeclaration-D26o_DDO.js.gz +0 -0
  88. package/public/assets/depth.fragment-Bn8G24s-.js +40 -0
  89. package/public/assets/depth.fragment-Bn8G24s-.js.br +4 -0
  90. package/public/assets/depth.fragment-Bn8G24s-.js.gz +0 -0
  91. package/public/assets/depth.vertex-B2lrdlJh.js +57 -0
  92. package/public/assets/depth.vertex-B2lrdlJh.js.br +0 -0
  93. package/public/assets/depth.vertex-B2lrdlJh.js.gz +0 -0
  94. package/public/assets/depthBoxBlur.fragment-BtTv8wid.js +5 -0
  95. package/public/assets/depthBoxBlur.fragment-BtTv8wid.js.br +0 -0
  96. package/public/assets/depthBoxBlur.fragment-BtTv8wid.js.gz +0 -0
  97. package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js +6 -0
  98. package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js.br +0 -0
  99. package/public/assets/depthBoxBlur.fragment-DViDG6Vb.js.gz +0 -0
  100. package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js +26 -0
  101. package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js.br +0 -0
  102. package/public/assets/depthOfFieldMerge.fragment-DCspcdWZ.js.gz +0 -0
  103. package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js +21 -0
  104. package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js.br +0 -0
  105. package/public/assets/depthOfFieldMerge.fragment-Ds-g4Ln8.js.gz +0 -0
  106. package/public/assets/dynamicTexture-Cuby-VOT.js +1329 -0
  107. package/public/assets/dynamicTexture-Cuby-VOT.js.br +0 -0
  108. package/public/assets/dynamicTexture-Cuby-VOT.js.gz +0 -0
  109. package/public/assets/easing-DbzzrXOl.js +1 -0
  110. package/public/assets/easing-DbzzrXOl.js.br +0 -0
  111. package/public/assets/easing-DbzzrXOl.js.gz +0 -0
  112. package/public/assets/editor-core-plugin-host-c2002442.js +1 -0
  113. package/public/assets/editor-core-plugin-host-c2002442.js.br +0 -0
  114. package/public/assets/editor-core-plugin-host-c2002442.js.gz +0 -0
  115. package/public/assets/exrTextureLoader-D39k4eK_.js +1 -0
  116. package/public/assets/exrTextureLoader-D39k4eK_.js.br +0 -0
  117. package/public/assets/exrTextureLoader-D39k4eK_.js.gz +0 -0
  118. package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js +1 -0
  119. package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js.br +0 -0
  120. package/public/assets/flowGraphArrayIndexBlock-C8nTWR8h.js.gz +0 -0
  121. package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js +1 -0
  122. package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js.br +0 -0
  123. package/public/assets/flowGraphBezierCurveEasingBlock-Izh7s0Zh.js.gz +0 -0
  124. package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js +1 -0
  125. package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js.br +0 -0
  126. package/public/assets/flowGraphBinaryOperationBlock-BRfalQP5.js.gz +0 -0
  127. package/public/assets/flowGraphBranchBlock-CV_leJX3.js +1 -0
  128. package/public/assets/flowGraphBranchBlock-CV_leJX3.js.br +0 -0
  129. package/public/assets/flowGraphBranchBlock-CV_leJX3.js.gz +0 -0
  130. package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js +1 -0
  131. package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js.br +2 -0
  132. package/public/assets/flowGraphCachedOperationBlock-BysRM-Ha.js.gz +0 -0
  133. package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js +1 -0
  134. package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js.br +0 -0
  135. package/public/assets/flowGraphCancelDelayBlock-BK6tDTGy.js.gz +0 -0
  136. package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js +1 -0
  137. package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js.br +0 -0
  138. package/public/assets/flowGraphCodeExecutionBlock-CQABvaP8.js.gz +0 -0
  139. package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js +1 -0
  140. package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js.br +0 -0
  141. package/public/assets/flowGraphConditionalDataBlock-D7OU_UOM.js.gz +0 -0
  142. package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js +1 -0
  143. package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js.br +0 -0
  144. package/public/assets/flowGraphConsoleLogBlock-BBxVDGOV.js.gz +0 -0
  145. package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js +1 -0
  146. package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js.br +0 -0
  147. package/public/assets/flowGraphConstantBlock-Cn3ZMGR0.js.gz +0 -0
  148. package/public/assets/flowGraphContextBlock-BS3b2XbE.js +1 -0
  149. package/public/assets/flowGraphContextBlock-BS3b2XbE.js.br +0 -0
  150. package/public/assets/flowGraphContextBlock-BS3b2XbE.js.gz +0 -0
  151. package/public/assets/flowGraphCounterBlock-xdcRCw4l.js +1 -0
  152. package/public/assets/flowGraphCounterBlock-xdcRCw4l.js.br +0 -0
  153. package/public/assets/flowGraphCounterBlock-xdcRCw4l.js.gz +0 -0
  154. package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js +1 -0
  155. package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js.br +0 -0
  156. package/public/assets/flowGraphDataSwitchBlock-dY8TSZtd.js.gz +0 -0
  157. package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js +1 -0
  158. package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js.br +0 -0
  159. package/public/assets/flowGraphDebounceBlock-Q_f2x-ID.js.gz +0 -0
  160. package/public/assets/flowGraphDoNBlock-COo31G00.js +1 -0
  161. package/public/assets/flowGraphDoNBlock-COo31G00.js.br +0 -0
  162. package/public/assets/flowGraphDoNBlock-COo31G00.js.gz +0 -0
  163. package/public/assets/flowGraphEasingBlock-jGW-fKIB.js +1 -0
  164. package/public/assets/flowGraphEasingBlock-jGW-fKIB.js.br +0 -0
  165. package/public/assets/flowGraphEasingBlock-jGW-fKIB.js.gz +0 -0
  166. package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js +1 -0
  167. package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js.br +0 -0
  168. package/public/assets/flowGraphFlipFlopBlock-B8znf-3o.js.gz +0 -0
  169. package/public/assets/flowGraphForLoopBlock-UxZSh8US.js +1 -0
  170. package/public/assets/flowGraphForLoopBlock-UxZSh8US.js.br +0 -0
  171. package/public/assets/flowGraphForLoopBlock-UxZSh8US.js.gz +0 -0
  172. package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js +1 -0
  173. package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js.br +0 -0
  174. package/public/assets/flowGraphFunctionReferenceBlock-c3ZQWBhk.js.gz +0 -0
  175. package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js +1 -0
  176. package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js.br +0 -0
  177. package/public/assets/flowGraphGetAssetBlock-B3zYUZmJ.js.gz +0 -0
  178. package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js +1 -0
  179. package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js.br +0 -0
  180. package/public/assets/flowGraphGetPropertyBlock-D--vcmMS.js.gz +0 -0
  181. package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js +1 -0
  182. package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js.br +0 -0
  183. package/public/assets/flowGraphGetVariableBlock-BkCEyiL6.js.gz +0 -0
  184. package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js +1 -0
  185. package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js.br +0 -0
  186. package/public/assets/flowGraphIndexOfBlock-C4ipR7YB.js.gz +0 -0
  187. package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js +1 -0
  188. package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js.br +0 -0
  189. package/public/assets/flowGraphInterpolationBlock-DuRc3LX7.js.gz +0 -0
  190. package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js +1 -0
  191. package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js.br +0 -0
  192. package/public/assets/flowGraphJsonPointerParserBlock-urEWktqi.js.gz +0 -0
  193. package/public/assets/flowGraphMathBlocks-CGTCQVqz.js +1 -0
  194. package/public/assets/flowGraphMathBlocks-CGTCQVqz.js.br +0 -0
  195. package/public/assets/flowGraphMathBlocks-CGTCQVqz.js.gz +0 -0
  196. package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js +1 -0
  197. package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js.br +0 -0
  198. package/public/assets/flowGraphMathCombineExtractBlocks-DDHGbRPt.js.gz +0 -0
  199. package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js +1 -0
  200. package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js.br +0 -0
  201. package/public/assets/flowGraphMatrixMathBlocks-Bwp1BysB.js.gz +0 -0
  202. package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js +1 -0
  203. package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js.br +0 -0
  204. package/public/assets/flowGraphMeshPickEventBlock-2wkqhQCG.js.gz +0 -0
  205. package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js +1 -0
  206. package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js.br +0 -0
  207. package/public/assets/flowGraphMultiGateBlock-BuKmvqC8.js.gz +0 -0
  208. package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js +1 -0
  209. package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js.br +0 -0
  210. package/public/assets/flowGraphPauseAnimationBlock-T_-VP-t5.js.gz +0 -0
  211. package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js +1 -0
  212. package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js.br +0 -0
  213. package/public/assets/flowGraphPlayAnimationBlock-DDVrE__n.js.gz +0 -0
  214. package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js +1 -0
  215. package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js.br +0 -0
  216. package/public/assets/flowGraphPointerOutEventBlock-Cx15Sf5R.js.gz +0 -0
  217. package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js +1 -0
  218. package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js.br +0 -0
  219. package/public/assets/flowGraphPointerOverEventBlock-DzzHa-dN.js.gz +0 -0
  220. package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js +1 -0
  221. package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js.br +0 -0
  222. package/public/assets/flowGraphReceiveCustomEventBlock-DKfLODu3.js.gz +0 -0
  223. package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js +1 -0
  224. package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js.br +0 -0
  225. package/public/assets/flowGraphSceneReadyEventBlock-ClJu3s64.js.gz +0 -0
  226. package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js +1 -0
  227. package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js.br +0 -0
  228. package/public/assets/flowGraphSceneTickEventBlock-3ZNr4eqw.js.gz +0 -0
  229. package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js +1 -0
  230. package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js.br +0 -0
  231. package/public/assets/flowGraphSendCustomEventBlock-CdKQeuma.js.gz +0 -0
  232. package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js +1 -0
  233. package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js.br +0 -0
  234. package/public/assets/flowGraphSequenceBlock-D0-_bFV3.js.gz +0 -0
  235. package/public/assets/flowGraphSetDelayBlock-B8946WOc.js +1 -0
  236. package/public/assets/flowGraphSetDelayBlock-B8946WOc.js.br +0 -0
  237. package/public/assets/flowGraphSetDelayBlock-B8946WOc.js.gz +0 -0
  238. package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js +1 -0
  239. package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js.br +0 -0
  240. package/public/assets/flowGraphSetPropertyBlock-Cx0IyW-a.js.gz +0 -0
  241. package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js +1 -0
  242. package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js.br +0 -0
  243. package/public/assets/flowGraphSetVariableBlock-0dns_CH6.js.gz +0 -0
  244. package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js +1 -0
  245. package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js.br +0 -0
  246. package/public/assets/flowGraphStopAnimationBlock-z4ou311H.js.gz +0 -0
  247. package/public/assets/flowGraphSwitchBlock-E7meS39u.js +1 -0
  248. package/public/assets/flowGraphSwitchBlock-E7meS39u.js.br +0 -0
  249. package/public/assets/flowGraphSwitchBlock-E7meS39u.js.gz +0 -0
  250. package/public/assets/flowGraphThrottleBlock-CldHJDs6.js +1 -0
  251. package/public/assets/flowGraphThrottleBlock-CldHJDs6.js.br +0 -0
  252. package/public/assets/flowGraphThrottleBlock-CldHJDs6.js.gz +0 -0
  253. package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js +1 -0
  254. package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js.br +0 -0
  255. package/public/assets/flowGraphTransformCoordinatesSystemBlock-pYdpcwK7.js.gz +0 -0
  256. package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js +1 -0
  257. package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js.br +0 -0
  258. package/public/assets/flowGraphTypeToTypeBlocks-CYfvLPJ-.js.gz +0 -0
  259. package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js +1 -0
  260. package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js.br +0 -0
  261. package/public/assets/flowGraphUnaryOperationBlock-s-kJ99D8.js.gz +0 -0
  262. package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js +1 -0
  263. package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js.br +0 -0
  264. package/public/assets/flowGraphVectorMathBlocks-D7iofIoY.js.gz +0 -0
  265. package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js +1 -0
  266. package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js.br +0 -0
  267. package/public/assets/flowGraphWaitAllBlock-CAW7HgUP.js.gz +0 -0
  268. package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js +1 -0
  269. package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js.br +0 -0
  270. package/public/assets/flowGraphWhileLoopBlock-DRP9_Zd1.js.gz +0 -0
  271. package/public/assets/fogFragmentDeclaration-CzUy86ul.js +22 -0
  272. package/public/assets/fogFragmentDeclaration-CzUy86ul.js.br +0 -0
  273. package/public/assets/fogFragmentDeclaration-CzUy86ul.js.gz +0 -0
  274. package/public/assets/fogFragmentDeclaration-kfcrkpgB.js +23 -0
  275. package/public/assets/fogFragmentDeclaration-kfcrkpgB.js.br +0 -0
  276. package/public/assets/fogFragmentDeclaration-kfcrkpgB.js.gz +0 -0
  277. package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js +7 -0
  278. package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js.br +0 -0
  279. package/public/assets/glowBlurPostProcess.fragment-CS_rTtUL.js.gz +0 -0
  280. package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js +7 -0
  281. package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js.br +0 -0
  282. package/public/assets/glowBlurPostProcess.fragment-G_xfSiIr.js.gz +0 -0
  283. package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js +63 -0
  284. package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js.br +0 -0
  285. package/public/assets/glowMapGeneration.fragment-DwJ3bpr6.js.gz +0 -0
  286. package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js +63 -0
  287. package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js.br +0 -0
  288. package/public/assets/glowMapGeneration.fragment-mDEHNZRi.js.gz +0 -0
  289. package/public/assets/glowMapGeneration.vertex-BACa9-r4.js +75 -0
  290. package/public/assets/glowMapGeneration.vertex-BACa9-r4.js.br +0 -0
  291. package/public/assets/glowMapGeneration.vertex-BACa9-r4.js.gz +0 -0
  292. package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js +75 -0
  293. package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js.br +3 -0
  294. package/public/assets/glowMapGeneration.vertex-mAWUJxSB.js.gz +0 -0
  295. package/public/assets/glowMapMerge.fragment-0Im35OVD.js +23 -0
  296. package/public/assets/glowMapMerge.fragment-0Im35OVD.js.br +0 -0
  297. package/public/assets/glowMapMerge.fragment-0Im35OVD.js.gz +0 -0
  298. package/public/assets/glowMapMerge.fragment-BXHfrWgL.js +25 -0
  299. package/public/assets/glowMapMerge.fragment-BXHfrWgL.js.br +0 -0
  300. package/public/assets/glowMapMerge.fragment-BXHfrWgL.js.gz +0 -0
  301. package/public/assets/glowMapMerge.vertex-8A2ntYoS.js +7 -0
  302. package/public/assets/glowMapMerge.vertex-8A2ntYoS.js.br +0 -0
  303. package/public/assets/glowMapMerge.vertex-8A2ntYoS.js.gz +0 -0
  304. package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js +8 -0
  305. package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js.br +0 -0
  306. package/public/assets/glowMapMerge.vertex-Cnm-5WLT.js.gz +0 -0
  307. package/public/assets/grain.fragment-BMGi-Hgp.js +6 -0
  308. package/public/assets/grain.fragment-BMGi-Hgp.js.br +0 -0
  309. package/public/assets/grain.fragment-BMGi-Hgp.js.gz +0 -0
  310. package/public/assets/grain.fragment-CH9zg05c.js +5 -0
  311. package/public/assets/grain.fragment-CH9zg05c.js.br +0 -0
  312. package/public/assets/grain.fragment-CH9zg05c.js.gz +0 -0
  313. package/public/assets/harmonicsFunctions-BQTTvws3.js +192 -0
  314. package/public/assets/harmonicsFunctions-BQTTvws3.js.br +0 -0
  315. package/public/assets/harmonicsFunctions-BQTTvws3.js.gz +0 -0
  316. package/public/assets/harmonicsFunctions-DtIiYWL1.js +189 -0
  317. package/public/assets/harmonicsFunctions-DtIiYWL1.js.br +0 -0
  318. package/public/assets/harmonicsFunctions-DtIiYWL1.js.gz +0 -0
  319. package/public/assets/hdrTextureLoader-Dqvpv0kr.js +2 -0
  320. package/public/assets/hdrTextureLoader-Dqvpv0kr.js.br +0 -0
  321. package/public/assets/hdrTextureLoader-Dqvpv0kr.js.gz +0 -0
  322. package/public/assets/iesTextureLoader-B8AoKSG2.js +2 -0
  323. package/public/assets/iesTextureLoader-B8AoKSG2.js.br +0 -0
  324. package/public/assets/iesTextureLoader-B8AoKSG2.js.gz +0 -0
  325. package/public/assets/index-CiIoJ8v1.js +4 -0
  326. package/public/assets/index-CiIoJ8v1.js.br +0 -0
  327. package/public/assets/index-CiIoJ8v1.js.gz +0 -0
  328. package/public/assets/index-Dhf9rSmv.js +1 -0
  329. package/public/assets/index-Dhf9rSmv.js.br +0 -0
  330. package/public/assets/index-Dhf9rSmv.js.gz +0 -0
  331. package/public/assets/instancesDeclaration-B2a0VuuR.js +23 -0
  332. package/public/assets/instancesDeclaration-B2a0VuuR.js.br +0 -0
  333. package/public/assets/instancesDeclaration-B2a0VuuR.js.gz +0 -0
  334. package/public/assets/ktxTextureLoader-DTr7AKqG.js +1 -0
  335. package/public/assets/ktxTextureLoader-DTr7AKqG.js.br +0 -0
  336. package/public/assets/ktxTextureLoader-DTr7AKqG.js.gz +0 -0
  337. package/public/assets/lazy-Cj-01uhW.js +2 -0
  338. package/public/assets/lazy-Cj-01uhW.js.br +0 -0
  339. package/public/assets/lazy-Cj-01uhW.js.gz +0 -0
  340. package/public/assets/lod.fragment-BuvQbBhE.js +3 -0
  341. package/public/assets/lod.fragment-BuvQbBhE.js.br +0 -0
  342. package/public/assets/lod.fragment-BuvQbBhE.js.gz +0 -0
  343. package/public/assets/lod.fragment-Cp0eqGjl.js +3 -0
  344. package/public/assets/lod.fragment-Cp0eqGjl.js.br +3 -0
  345. package/public/assets/lod.fragment-Cp0eqGjl.js.gz +0 -0
  346. package/public/assets/lodCube.fragment-CI1eTppS.js +22 -0
  347. package/public/assets/lodCube.fragment-CI1eTppS.js.br +2 -0
  348. package/public/assets/lodCube.fragment-CI1eTppS.js.gz +0 -0
  349. package/public/assets/lodCube.fragment-yDzV1teg.js +22 -0
  350. package/public/assets/lodCube.fragment-yDzV1teg.js.br +0 -0
  351. package/public/assets/lodCube.fragment-yDzV1teg.js.gz +0 -0
  352. package/public/assets/logDepthDeclaration-CeLLOhuK.js +4 -0
  353. package/public/assets/logDepthDeclaration-XDsVKoT0.js +4 -0
  354. package/public/assets/logDepthFragment-BPP-rBiT.js +4 -0
  355. package/public/assets/logDepthFragment-BPP-rBiT.js.br +0 -0
  356. package/public/assets/logDepthFragment-BPP-rBiT.js.gz +0 -0
  357. package/public/assets/logDepthFragment-CDaMyvfH.js +4 -0
  358. package/public/assets/logDepthVertex-CkFa6uAf.js +4 -0
  359. package/public/assets/logDepthVertex-CkFa6uAf.js.br +0 -0
  360. package/public/assets/logDepthVertex-CkFa6uAf.js.gz +0 -0
  361. package/public/assets/logDepthVertex-H6E8NLz1.js +4 -0
  362. package/public/assets/logDepthVertex-H6E8NLz1.js.br +1 -0
  363. package/public/assets/logDepthVertex-H6E8NLz1.js.gz +0 -0
  364. package/public/assets/mainUVVaryingDeclaration-DdwP8xi_.js +4 -0
  365. package/public/assets/mainUVVaryingDeclaration-OBB3LR8s.js +4 -0
  366. package/public/assets/mesh.vertexData.functions-BXkNVxNr.js +1 -0
  367. package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.br +0 -0
  368. package/public/assets/mesh.vertexData.functions-BXkNVxNr.js.gz +0 -0
  369. package/public/assets/meshUboDeclaration-Cr5YhBB1.js +13 -0
  370. package/public/assets/meshUboDeclaration-Cr5YhBB1.js.br +0 -0
  371. package/public/assets/meshUboDeclaration-Cr5YhBB1.js.gz +0 -0
  372. package/public/assets/meshUboDeclaration-Uj1CsoJP.js +13 -0
  373. package/public/assets/meshUboDeclaration-Uj1CsoJP.js.br +0 -0
  374. package/public/assets/meshUboDeclaration-Uj1CsoJP.js.gz +0 -0
  375. package/public/assets/morphTargetsVertex-B9xWvV_u.js +100 -0
  376. package/public/assets/morphTargetsVertex-B9xWvV_u.js.br +0 -0
  377. package/public/assets/morphTargetsVertex-B9xWvV_u.js.gz +0 -0
  378. package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js +3 -0
  379. package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js.br +0 -0
  380. package/public/assets/oitFinalSimpleBlend.fragment-4NtZHGOG.js.gz +0 -0
  381. package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js +2 -0
  382. package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js.br +3 -0
  383. package/public/assets/oitFinalSimpleBlend.fragment-D8T6jyS0.js.gz +0 -0
  384. package/public/assets/oitFragment-CK8Y-Z-q.js +1202 -0
  385. package/public/assets/oitFragment-CK8Y-Z-q.js.br +0 -0
  386. package/public/assets/oitFragment-CK8Y-Z-q.js.gz +0 -0
  387. package/public/assets/oitFragment-ZUHesxAg.js +1077 -0
  388. package/public/assets/oitFragment-ZUHesxAg.js.br +0 -0
  389. package/public/assets/oitFragment-ZUHesxAg.js.gz +0 -0
  390. package/public/assets/openpbrMaterial-Dc7VVRl6.js +2 -0
  391. package/public/assets/openpbrMaterial-Dc7VVRl6.js.br +0 -0
  392. package/public/assets/openpbrMaterial-Dc7VVRl6.js.gz +0 -0
  393. package/public/assets/outline.fragment-BK0vgcx7.js +21 -0
  394. package/public/assets/outline.fragment-BK0vgcx7.js.br +0 -0
  395. package/public/assets/outline.fragment-BK0vgcx7.js.gz +0 -0
  396. package/public/assets/outline.fragment-DQK2JikO.js +18 -0
  397. package/public/assets/outline.fragment-DQK2JikO.js.br +0 -0
  398. package/public/assets/outline.fragment-DQK2JikO.js.gz +0 -0
  399. package/public/assets/outline.vertex-CHR7GZYH.js +47 -0
  400. package/public/assets/outline.vertex-CHR7GZYH.js.br +0 -0
  401. package/public/assets/outline.vertex-CHR7GZYH.js.gz +0 -0
  402. package/public/assets/outline.vertex-CKcILDiL.js +47 -0
  403. package/public/assets/outline.vertex-CKcILDiL.js.br +0 -0
  404. package/public/assets/outline.vertex-CKcILDiL.js.gz +0 -0
  405. package/public/assets/passCube.fragment-Ch6aeybh.js +23 -0
  406. package/public/assets/passCube.fragment-Ch6aeybh.js.br +0 -0
  407. package/public/assets/passCube.fragment-Ch6aeybh.js.gz +0 -0
  408. package/public/assets/passCube.fragment-wvJ8mb6_.js +23 -0
  409. package/public/assets/passCube.fragment-wvJ8mb6_.js.br +0 -0
  410. package/public/assets/passCube.fragment-wvJ8mb6_.js.gz +0 -0
  411. package/public/assets/pbr.fragment-Bo4XM7Ct.js +3277 -0
  412. package/public/assets/pbr.fragment-Bo4XM7Ct.js.br +0 -0
  413. package/public/assets/pbr.fragment-Bo4XM7Ct.js.gz +0 -0
  414. package/public/assets/pbr.fragment-T2xKI2J0.js +3327 -0
  415. package/public/assets/pbr.fragment-T2xKI2J0.js.br +0 -0
  416. package/public/assets/pbr.fragment-T2xKI2J0.js.gz +0 -0
  417. package/public/assets/pbr.vertex-BezAbBHx.js +357 -0
  418. package/public/assets/pbr.vertex-BezAbBHx.js.br +0 -0
  419. package/public/assets/pbr.vertex-BezAbBHx.js.gz +0 -0
  420. package/public/assets/pbr.vertex-w2ZWBdHy.js +227 -0
  421. package/public/assets/pbr.vertex-w2ZWBdHy.js.br +0 -0
  422. package/public/assets/pbr.vertex-w2ZWBdHy.js.gz +0 -0
  423. package/public/assets/playable-sdk-zAYuBOLj.js +8 -0
  424. package/public/assets/playable-sdk-zAYuBOLj.js.br +0 -0
  425. package/public/assets/playable-sdk-zAYuBOLj.js.gz +0 -0
  426. package/public/assets/playable-standard-project-Brbyn9c4.js +5140 -0
  427. package/public/assets/playable-standard-project-Brbyn9c4.js.br +0 -0
  428. package/public/assets/playable-standard-project-Brbyn9c4.js.gz +0 -0
  429. package/public/assets/rgbdDecode.fragment-BQ16CsAv.js +5 -0
  430. package/public/assets/rgbdDecode.fragment-BQ16CsAv.js.br +4 -0
  431. package/public/assets/rgbdDecode.fragment-BQ16CsAv.js.gz +0 -0
  432. package/public/assets/rgbdDecode.fragment-D_2CJy2O.js +5 -0
  433. package/public/assets/rgbdDecode.fragment-D_2CJy2O.js.br +0 -0
  434. package/public/assets/rgbdDecode.fragment-D_2CJy2O.js.gz +0 -0
  435. package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js +5 -0
  436. package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js.br +3 -0
  437. package/public/assets/rgbdEncode.fragment-CmDv6yEZ.js.gz +0 -0
  438. package/public/assets/rgbdEncode.fragment-QRg2h8KC.js +5 -0
  439. package/public/assets/rgbdEncode.fragment-QRg2h8KC.js.br +1 -0
  440. package/public/assets/rgbdEncode.fragment-QRg2h8KC.js.gz +0 -0
  441. package/public/assets/sceneLoader-CDreObGG.js +1 -0
  442. package/public/assets/sceneLoader-CDreObGG.js.br +0 -0
  443. package/public/assets/sceneLoader-CDreObGG.js.gz +0 -0
  444. package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js +15 -0
  445. package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js.br +0 -0
  446. package/public/assets/screenSpaceCurvature.fragment-BWdr_4iW.js.gz +0 -0
  447. package/public/assets/selection.fragment-CVXAuXcC.js +35 -0
  448. package/public/assets/selection.fragment-CVXAuXcC.js.br +0 -0
  449. package/public/assets/selection.fragment-CVXAuXcC.js.gz +0 -0
  450. package/public/assets/selection.fragment-DobH4NRw.js +35 -0
  451. package/public/assets/selection.fragment-DobH4NRw.js.br +0 -0
  452. package/public/assets/selection.fragment-DobH4NRw.js.gz +0 -0
  453. package/public/assets/selection.vertex-BUBv8X1j.js +74 -0
  454. package/public/assets/selection.vertex-BUBv8X1j.js.br +0 -0
  455. package/public/assets/selection.vertex-BUBv8X1j.js.gz +0 -0
  456. package/public/assets/selection.vertex-DlADXBtf.js +73 -0
  457. package/public/assets/selection.vertex-DlADXBtf.js.br +0 -0
  458. package/public/assets/selection.vertex-DlADXBtf.js.gz +0 -0
  459. package/public/assets/selectionOutline.fragment-CWpNrg8m.js +47 -0
  460. package/public/assets/selectionOutline.fragment-CWpNrg8m.js.br +0 -0
  461. package/public/assets/selectionOutline.fragment-CWpNrg8m.js.gz +0 -0
  462. package/public/assets/selectionOutline.fragment-DoKuUf2L.js +48 -0
  463. package/public/assets/selectionOutline.fragment-DoKuUf2L.js.br +0 -0
  464. package/public/assets/selectionOutline.fragment-DoKuUf2L.js.gz +0 -0
  465. package/public/assets/shadowMap.fragment-BEwhnKOg.js +78 -0
  466. package/public/assets/shadowMap.fragment-BEwhnKOg.js.br +0 -0
  467. package/public/assets/shadowMap.fragment-BEwhnKOg.js.gz +0 -0
  468. package/public/assets/shadowMap.fragment-CVar4C4N.js +79 -0
  469. package/public/assets/shadowMap.fragment-CVar4C4N.js.br +0 -0
  470. package/public/assets/shadowMap.fragment-CVar4C4N.js.gz +0 -0
  471. package/public/assets/shadowMap.vertex-ImOoSjTb.js +109 -0
  472. package/public/assets/shadowMap.vertex-ImOoSjTb.js.br +0 -0
  473. package/public/assets/shadowMap.vertex-ImOoSjTb.js.gz +0 -0
  474. package/public/assets/shadowMap.vertex-Q2d15P5z.js +119 -0
  475. package/public/assets/shadowMap.vertex-Q2d15P5z.js.br +0 -0
  476. package/public/assets/shadowMap.vertex-Q2d15P5z.js.gz +0 -0
  477. package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js +4 -0
  478. package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js.br +0 -0
  479. package/public/assets/shadowMapFragmentSoftTransparentShadow-BmxybqRD.js.gz +0 -0
  480. package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js +4 -0
  481. package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js.br +0 -0
  482. package/public/assets/shadowMapFragmentSoftTransparentShadow-D6ZvWsNy.js.gz +0 -0
  483. package/public/assets/sharpen.fragment-CI40r28S.js +8 -0
  484. package/public/assets/sharpen.fragment-CI40r28S.js.br +0 -0
  485. package/public/assets/sharpen.fragment-CI40r28S.js.gz +0 -0
  486. package/public/assets/textureMerger.fragment-BGsvQGn5.js +84 -0
  487. package/public/assets/textureMerger.fragment-BGsvQGn5.js.br +0 -0
  488. package/public/assets/textureMerger.fragment-BGsvQGn5.js.gz +0 -0
  489. package/public/assets/textureMerger.fragment-Q7yPwkGt.js +76 -0
  490. package/public/assets/textureMerger.fragment-Q7yPwkGt.js.br +0 -0
  491. package/public/assets/textureMerger.fragment-Q7yPwkGt.js.gz +0 -0
  492. package/public/assets/tgaTextureLoader-D7Pjisvo.js +1 -0
  493. package/public/assets/tgaTextureLoader-D7Pjisvo.js.br +0 -0
  494. package/public/assets/tgaTextureLoader-D7Pjisvo.js.gz +0 -0
  495. package/public/assets/vertexColorMixing-CwuEx4gP.js +20 -0
  496. package/public/assets/vertexColorMixing-CwuEx4gP.js.br +0 -0
  497. package/public/assets/vertexColorMixing-CwuEx4gP.js.gz +0 -0
  498. package/public/assets/vertexColorMixing-DRlcGbEu.js +24 -0
  499. package/public/assets/vertexColorMixing-DRlcGbEu.js.br +2 -0
  500. package/public/assets/vertexColorMixing-DRlcGbEu.js.gz +0 -0
  501. package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js +12 -0
  502. package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js.br +0 -0
  503. package/public/assets/volumetricLightingBlendVolume.fragment-0VKaEyya.js.gz +0 -0
  504. package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js +11 -0
  505. package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js.br +0 -0
  506. package/public/assets/volumetricLightingBlendVolume.fragment-BZLjMggm.js.gz +0 -0
  507. package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js +15 -0
  508. package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js.br +0 -0
  509. package/public/assets/volumetricLightingRenderVolume.fragment-6GAsdyvE.js.gz +0 -0
  510. package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js +13 -0
  511. package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js.br +0 -0
  512. package/public/assets/volumetricLightingRenderVolume.fragment-Da_DpfG1.js.gz +0 -0
  513. package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js +4 -0
  514. package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js.br +0 -0
  515. package/public/assets/volumetricLightingRenderVolume.vertex-BdVFX-tC.js.gz +0 -0
  516. package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js +5 -0
  517. package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js.br +0 -0
  518. package/public/assets/volumetricLightingRenderVolume.vertex-DO-VIhJn.js.gz +0 -0
  519. package/public/assets/webAudioBus-BkMWEG1L.js +1 -0
  520. package/public/assets/webAudioBus-BkMWEG1L.js.br +0 -0
  521. package/public/assets/webAudioBus-BkMWEG1L.js.gz +0 -0
  522. package/public/assets/webAudioMainBus-DYcQXAkm.js +1 -0
  523. package/public/assets/webAudioMainBus-DYcQXAkm.js.br +0 -0
  524. package/public/assets/webAudioMainBus-DYcQXAkm.js.gz +0 -0
  525. package/public/assets/workerPool-H9Ji3mCo.js +1 -0
  526. package/public/assets/workerPool-H9Ji3mCo.js.br +2 -0
  527. package/public/assets/workerPool-H9Ji3mCo.js.gz +0 -0
  528. package/public/index.html +21 -0
  529. package/public/index.html.br +0 -0
  530. package/public/index.html.gz +0 -0
  531. package/runtime/editor-control-plane.mjs +5 -0
  532. package/runtime/runtime-debug-authoring-bridge.mjs +1 -0
  533. package/worker/editor-service-worker.mjs +27 -0
@@ -0,0 +1,3327 @@
1
+ import{fr as e}from"./dynamicTexture-Cuby-VOT.js";import"./oitFragment-CK8Y-Z-q.js";import"./harmonicsFunctions-DtIiYWL1.js";import"./mainUVVaryingDeclaration-DdwP8xi_.js";import"./logDepthDeclaration-CeLLOhuK.js";import"./fogFragmentDeclaration-kfcrkpgB.js";import"./logDepthFragment-CDaMyvfH.js";import"./meshUboDeclaration-Cr5YhBB1.js";const n="pbrFragmentDeclaration",H=`uniform vec4 vEyePosition;uniform vec3 vReflectionColor;uniform vec4 vAlbedoColor;uniform float baseWeight;uniform float baseDiffuseRoughness;uniform vec4 vLightingIntensity;uniform vec4 vReflectivityColor;uniform vec4 vMetallicReflectanceFactors;uniform vec3 vEmissiveColor;uniform float visibility;uniform vec3 vAmbientColor;
2
+ #ifdef ALBEDO
3
+ uniform vec2 vAlbedoInfos;
4
+ #endif
5
+ #ifdef BASE_WEIGHT
6
+ uniform vec2 vBaseWeightInfos;
7
+ #endif
8
+ #ifdef BASE_DIFFUSE_ROUGHNESS
9
+ uniform vec2 vBaseDiffuseRoughnessInfos;
10
+ #endif
11
+ #ifdef AMBIENT
12
+ uniform vec4 vAmbientInfos;
13
+ #endif
14
+ #ifdef BUMP
15
+ uniform vec3 vBumpInfos;uniform vec2 vTangentSpaceParams;
16
+ #endif
17
+ #ifdef OPACITY
18
+ uniform vec2 vOpacityInfos;
19
+ #endif
20
+ #ifdef EMISSIVE
21
+ uniform vec2 vEmissiveInfos;
22
+ #endif
23
+ #ifdef LIGHTMAP
24
+ uniform vec2 vLightmapInfos;
25
+ #endif
26
+ #ifdef REFLECTIVITY
27
+ uniform vec3 vReflectivityInfos;
28
+ #endif
29
+ #ifdef MICROSURFACEMAP
30
+ uniform vec2 vMicroSurfaceSamplerInfos;
31
+ #endif
32
+ #if defined(REFLECTIONMAP_SPHERICAL) || defined(REFLECTIONMAP_PROJECTION) || defined(SS_REFRACTION) || defined(PREPASS)
33
+ uniform mat4 view;
34
+ #endif
35
+ #ifdef REFLECTION
36
+ uniform vec2 vReflectionInfos;
37
+ #ifdef REALTIME_FILTERING
38
+ uniform vec2 vReflectionFilteringInfo;
39
+ #endif
40
+ uniform mat4 reflectionMatrix;uniform vec3 vReflectionMicrosurfaceInfos;
41
+ #if defined(USEIRRADIANCEMAP) && defined(USE_IRRADIANCE_DOMINANT_DIRECTION)
42
+ uniform vec3 vReflectionDominantDirection;
43
+ #endif
44
+ #if defined(USE_LOCAL_REFLECTIONMAP_CUBIC) && defined(REFLECTIONMAP_CUBIC)
45
+ uniform vec3 vReflectionPosition;uniform vec3 vReflectionSize;
46
+ #endif
47
+ #endif
48
+ #if defined(SS_REFRACTION) && defined(SS_USE_LOCAL_REFRACTIONMAP_CUBIC)
49
+ uniform vec3 vRefractionPosition;uniform vec3 vRefractionSize;
50
+ #endif
51
+ #ifdef CLEARCOAT
52
+ uniform vec2 vClearCoatParams;uniform vec4 vClearCoatRefractionParams;
53
+ #if defined(CLEARCOAT_TEXTURE) || defined(CLEARCOAT_TEXTURE_ROUGHNESS)
54
+ uniform vec4 vClearCoatInfos;
55
+ #endif
56
+ #ifdef CLEARCOAT_TEXTURE
57
+ uniform mat4 clearCoatMatrix;
58
+ #endif
59
+ #ifdef CLEARCOAT_TEXTURE_ROUGHNESS
60
+ uniform mat4 clearCoatRoughnessMatrix;
61
+ #endif
62
+ #ifdef CLEARCOAT_BUMP
63
+ uniform vec2 vClearCoatBumpInfos;uniform vec2 vClearCoatTangentSpaceParams;uniform mat4 clearCoatBumpMatrix;
64
+ #endif
65
+ #ifdef CLEARCOAT_TINT
66
+ uniform vec4 vClearCoatTintParams;uniform float clearCoatColorAtDistance;
67
+ #ifdef CLEARCOAT_TINT_TEXTURE
68
+ uniform vec2 vClearCoatTintInfos;uniform mat4 clearCoatTintMatrix;
69
+ #endif
70
+ #endif
71
+ #endif
72
+ #ifdef IRIDESCENCE
73
+ uniform vec4 vIridescenceParams;
74
+ #if defined(IRIDESCENCE_TEXTURE) || defined(IRIDESCENCE_THICKNESS_TEXTURE)
75
+ uniform vec4 vIridescenceInfos;
76
+ #endif
77
+ #ifdef IRIDESCENCE_TEXTURE
78
+ uniform mat4 iridescenceMatrix;
79
+ #endif
80
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
81
+ uniform mat4 iridescenceThicknessMatrix;
82
+ #endif
83
+ #endif
84
+ #ifdef ANISOTROPIC
85
+ uniform vec3 vAnisotropy;
86
+ #ifdef ANISOTROPIC_TEXTURE
87
+ uniform vec2 vAnisotropyInfos;uniform mat4 anisotropyMatrix;
88
+ #endif
89
+ #endif
90
+ #ifdef SHEEN
91
+ uniform vec4 vSheenColor;
92
+ #ifdef SHEEN_ROUGHNESS
93
+ uniform float vSheenRoughness;
94
+ #endif
95
+ #if defined(SHEEN_TEXTURE) || defined(SHEEN_TEXTURE_ROUGHNESS)
96
+ uniform vec4 vSheenInfos;
97
+ #endif
98
+ #ifdef SHEEN_TEXTURE
99
+ uniform mat4 sheenMatrix;
100
+ #endif
101
+ #ifdef SHEEN_TEXTURE_ROUGHNESS
102
+ uniform mat4 sheenRoughnessMatrix;
103
+ #endif
104
+ #endif
105
+ #ifdef SUBSURFACE
106
+ #ifdef SS_REFRACTION
107
+ uniform vec4 vRefractionMicrosurfaceInfos;uniform vec4 vRefractionInfos;uniform mat4 refractionMatrix;
108
+ #ifdef REALTIME_FILTERING
109
+ uniform vec2 vRefractionFilteringInfo;
110
+ #endif
111
+ #ifdef SS_DISPERSION
112
+ uniform float dispersion;
113
+ #endif
114
+ #endif
115
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
116
+ uniform vec2 vThicknessInfos;uniform mat4 thicknessMatrix;
117
+ #endif
118
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
119
+ uniform vec2 vRefractionIntensityInfos;uniform mat4 refractionIntensityMatrix;
120
+ #endif
121
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
122
+ uniform vec2 vTranslucencyIntensityInfos;uniform mat4 translucencyIntensityMatrix;
123
+ #endif
124
+ uniform vec2 vThicknessParam;uniform vec3 vDiffusionDistance;uniform vec4 vTintColor;uniform vec3 vSubSurfaceIntensity;uniform vec4 vTranslucencyColor;
125
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
126
+ uniform vec2 vTranslucencyColorInfos;uniform mat4 translucencyColorMatrix;
127
+ #endif
128
+ #endif
129
+ #ifdef PREPASS
130
+ #ifdef SS_SCATTERING
131
+ uniform float scatteringDiffusionProfile;
132
+ #endif
133
+ #endif
134
+ #if DEBUGMODE>0
135
+ uniform vec2 vDebugMode;
136
+ #endif
137
+ #ifdef DETAIL
138
+ uniform vec4 vDetailInfos;
139
+ #endif
140
+ #include<decalFragmentDeclaration>
141
+ #ifdef USESPHERICALFROMREFLECTIONMAP
142
+ #ifdef SPHERICAL_HARMONICS
143
+ uniform vec3 vSphericalL00;uniform vec3 vSphericalL1_1;uniform vec3 vSphericalL10;uniform vec3 vSphericalL11;uniform vec3 vSphericalL2_2;uniform vec3 vSphericalL2_1;uniform vec3 vSphericalL20;uniform vec3 vSphericalL21;uniform vec3 vSphericalL22;
144
+ #else
145
+ uniform vec3 vSphericalX;uniform vec3 vSphericalY;uniform vec3 vSphericalZ;uniform vec3 vSphericalXX_ZZ;uniform vec3 vSphericalYY_ZZ;uniform vec3 vSphericalZZ;uniform vec3 vSphericalXY;uniform vec3 vSphericalYZ;uniform vec3 vSphericalZX;
146
+ #endif
147
+ #endif
148
+ #define ADDITIONAL_FRAGMENT_DECLARATION
149
+ `;e.IncludesShadersStore[n]||(e.IncludesShadersStore[n]=H);const a="pbrFragmentExtraDeclaration",x=`varying vec3 vPositionW;
150
+ #if DEBUGMODE>0
151
+ varying vec4 vClipSpacePosition;
152
+ #endif
153
+ #include<mainUVVaryingDeclaration>[1..7]
154
+ #ifdef NORMAL
155
+ varying vec3 vNormalW;
156
+ #if defined(USESPHERICALFROMREFLECTIONMAP) && defined(USESPHERICALINVERTEX)
157
+ varying vec3 vEnvironmentIrradiance;
158
+ #endif
159
+ #endif
160
+ #if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
161
+ varying vec4 vColor;
162
+ #endif
163
+ #if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
164
+ varying float vViewDepth;
165
+ #endif
166
+ `;e.IncludesShadersStore[a]||(e.IncludesShadersStore[a]=x);const t="samplerFragmentAlternateDeclaration",W=`#ifdef _DEFINENAME_
167
+ #if _DEFINENAME_DIRECTUV==1
168
+ #define v_VARYINGNAME_UV vMainUV1
169
+ #elif _DEFINENAME_DIRECTUV==2
170
+ #define v_VARYINGNAME_UV vMainUV2
171
+ #elif _DEFINENAME_DIRECTUV==3
172
+ #define v_VARYINGNAME_UV vMainUV3
173
+ #elif _DEFINENAME_DIRECTUV==4
174
+ #define v_VARYINGNAME_UV vMainUV4
175
+ #elif _DEFINENAME_DIRECTUV==5
176
+ #define v_VARYINGNAME_UV vMainUV5
177
+ #elif _DEFINENAME_DIRECTUV==6
178
+ #define v_VARYINGNAME_UV vMainUV6
179
+ #else
180
+ varying vec2 v_VARYINGNAME_UV;
181
+ #endif
182
+ #endif
183
+ `;e.IncludesShadersStore[t]||(e.IncludesShadersStore[t]=W);const o="pbrFragmentSamplersDeclaration",X=`#include<samplerFragmentDeclaration>(_DEFINENAME_,ALBEDO,_VARYINGNAME_,Albedo,_SAMPLERNAME_,albedo)
184
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_WEIGHT,_VARYINGNAME_,BaseWeight,_SAMPLERNAME_,baseWeight)
185
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,BASE_DIFFUSE_ROUGHNESS,_VARYINGNAME_,BaseDiffuseRoughness,_SAMPLERNAME_,baseDiffuseRoughness)
186
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,AMBIENT,_VARYINGNAME_,Ambient,_SAMPLERNAME_,ambient)
187
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,OPACITY,_VARYINGNAME_,Opacity,_SAMPLERNAME_,opacity)
188
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,EMISSIVE,_VARYINGNAME_,Emissive,_SAMPLERNAME_,emissive)
189
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,LIGHTMAP,_VARYINGNAME_,Lightmap,_SAMPLERNAME_,lightmap)
190
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTIVITY,_VARYINGNAME_,Reflectivity,_SAMPLERNAME_,reflectivity)
191
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,MICROSURFACEMAP,_VARYINGNAME_,MicroSurfaceSampler,_SAMPLERNAME_,microSurface)
192
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,METALLIC_REFLECTANCE,_VARYINGNAME_,MetallicReflectance,_SAMPLERNAME_,metallicReflectance)
193
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,REFLECTANCE,_VARYINGNAME_,Reflectance,_SAMPLERNAME_,reflectance)
194
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,DECAL,_VARYINGNAME_,Decal,_SAMPLERNAME_,decal)
195
+ #ifdef CLEARCOAT
196
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE,_VARYINGNAME_,ClearCoat,_SAMPLERNAME_,clearCoat)
197
+ #include<samplerFragmentAlternateDeclaration>(_DEFINENAME_,CLEARCOAT_TEXTURE_ROUGHNESS,_VARYINGNAME_,ClearCoatRoughness)
198
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS)
199
+ uniform sampler2D clearCoatRoughnessSampler;
200
+ #endif
201
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_BUMP,_VARYINGNAME_,ClearCoatBump,_SAMPLERNAME_,clearCoatBump)
202
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,CLEARCOAT_TINT_TEXTURE,_VARYINGNAME_,ClearCoatTint,_SAMPLERNAME_,clearCoatTint)
203
+ #endif
204
+ #ifdef IRIDESCENCE
205
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,IRIDESCENCE_TEXTURE,_VARYINGNAME_,Iridescence,_SAMPLERNAME_,iridescence)
206
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,IRIDESCENCE_THICKNESS_TEXTURE,_VARYINGNAME_,IridescenceThickness,_SAMPLERNAME_,iridescenceThickness)
207
+ #endif
208
+ #ifdef SHEEN
209
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SHEEN_TEXTURE,_VARYINGNAME_,Sheen,_SAMPLERNAME_,sheen)
210
+ #include<samplerFragmentAlternateDeclaration>(_DEFINENAME_,SHEEN_TEXTURE_ROUGHNESS,_VARYINGNAME_,SheenRoughness)
211
+ #if defined(SHEEN_ROUGHNESS) && defined(SHEEN_TEXTURE_ROUGHNESS)
212
+ uniform sampler2D sheenRoughnessSampler;
213
+ #endif
214
+ #endif
215
+ #ifdef ANISOTROPIC
216
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,ANISOTROPIC_TEXTURE,_VARYINGNAME_,Anisotropy,_SAMPLERNAME_,anisotropy)
217
+ #endif
218
+ #ifdef REFLECTION
219
+ #ifdef REFLECTIONMAP_3D
220
+ #define sampleReflection(s,c) textureCube(s,c)
221
+ uniform samplerCube reflectionSampler;
222
+ #ifdef LODBASEDMICROSFURACE
223
+ #define sampleReflectionLod(s,c,l) textureCubeLodEXT(s,c,l)
224
+ #else
225
+ uniform samplerCube reflectionSamplerLow;uniform samplerCube reflectionSamplerHigh;
226
+ #endif
227
+ #ifdef USEIRRADIANCEMAP
228
+ uniform samplerCube irradianceSampler;
229
+ #endif
230
+ #else
231
+ #define sampleReflection(s,c) texture2D(s,c)
232
+ uniform sampler2D reflectionSampler;
233
+ #ifdef LODBASEDMICROSFURACE
234
+ #define sampleReflectionLod(s,c,l) texture2DLodEXT(s,c,l)
235
+ #else
236
+ uniform sampler2D reflectionSamplerLow;uniform sampler2D reflectionSamplerHigh;
237
+ #endif
238
+ #ifdef USEIRRADIANCEMAP
239
+ uniform sampler2D irradianceSampler;
240
+ #endif
241
+ #endif
242
+ #ifdef REFLECTIONMAP_SKYBOX
243
+ varying vec3 vPositionUVW;
244
+ #else
245
+ #if defined(REFLECTIONMAP_EQUIRECTANGULAR_FIXED) || defined(REFLECTIONMAP_MIRROREDEQUIRECTANGULAR_FIXED)
246
+ varying vec3 vDirectionW;
247
+ #endif
248
+ #endif
249
+ #endif
250
+ #ifdef ENVIRONMENTBRDF
251
+ uniform sampler2D environmentBrdfSampler;
252
+ #endif
253
+ #ifdef SUBSURFACE
254
+ #ifdef SS_REFRACTION
255
+ #ifdef SS_REFRACTIONMAP_3D
256
+ #define sampleRefraction(s,c) textureCube(s,c)
257
+ uniform samplerCube refractionSampler;
258
+ #ifdef LODBASEDMICROSFURACE
259
+ #define sampleRefractionLod(s,c,l) textureCubeLodEXT(s,c,l)
260
+ #else
261
+ uniform samplerCube refractionSamplerLow;uniform samplerCube refractionSamplerHigh;
262
+ #endif
263
+ #else
264
+ #define sampleRefraction(s,c) texture2D(s,c)
265
+ uniform sampler2D refractionSampler;
266
+ #ifdef LODBASEDMICROSFURACE
267
+ #define sampleRefractionLod(s,c,l) texture2DLodEXT(s,c,l)
268
+ #else
269
+ uniform sampler2D refractionSamplerLow;uniform sampler2D refractionSamplerHigh;
270
+ #endif
271
+ #endif
272
+ #endif
273
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_THICKNESSANDMASK_TEXTURE,_VARYINGNAME_,Thickness,_SAMPLERNAME_,thickness)
274
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_REFRACTIONINTENSITY_TEXTURE,_VARYINGNAME_,RefractionIntensity,_SAMPLERNAME_,refractionIntensity)
275
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYINTENSITY_TEXTURE,_VARYINGNAME_,TranslucencyIntensity,_SAMPLERNAME_,translucencyIntensity)
276
+ #include<samplerFragmentDeclaration>(_DEFINENAME_,SS_TRANSLUCENCYCOLOR_TEXTURE,_VARYINGNAME_,TranslucencyColor,_SAMPLERNAME_,translucencyColor)
277
+ #endif
278
+ #ifdef IBL_CDF_FILTERING
279
+ uniform sampler2D icdfSampler;
280
+ #endif
281
+ `;e.IncludesShadersStore[o]||(e.IncludesShadersStore[o]=X);const r="subSurfaceScatteringFunctions",Y=`bool testLightingForSSS(float diffusionProfile)
282
+ {return diffusionProfile<1.;}`;e.IncludesShadersStore[r]||(e.IncludesShadersStore[r]=Y);const f="importanceSampling",k=`vec3 hemisphereCosSample(vec2 u) {float phi=2.*PI*u.x;float cosTheta2=1.-u.y;float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
283
+ vec3 hemisphereImportanceSampleDggx(vec2 u,float a) {float phi=2.*PI*u.x;float cosTheta2=(1.-u.y)/(1.+(a+1.)*((a-1.)*u.y));float cosTheta=sqrt(cosTheta2);float sinTheta=sqrt(1.-cosTheta2);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}
284
+ vec3 hemisphereImportanceSampleDggxAnisotropic(vec2 Xi,float alphaTangent,float alphaBitangent)
285
+ {alphaTangent=max(alphaTangent,0.0001);alphaBitangent=max(alphaBitangent,0.0001);float phi=atan(alphaBitangent/alphaTangent*tan(2.0*3.14159265*Xi.x));if (Xi.x>0.5) phi+=3.14159265;
286
+ float cosPhi=cos(phi);float sinPhi=sin(phi);float alpha2=(cosPhi*cosPhi)/(alphaTangent*alphaTangent) +
287
+ (sinPhi*sinPhi)/(alphaBitangent*alphaBitangent);float tanTheta2=Xi.y/(1.0-Xi.y)/alpha2;float cosTheta=1.0/sqrt(1.0+tanTheta2);float sinTheta=sqrt(max(0.0,1.0-cosTheta*cosTheta));return vec3(sinTheta*cosPhi,sinTheta*sinPhi,cosTheta);}
288
+ vec3 hemisphereImportanceSampleDCharlie(vec2 u,float a) {
289
+ float phi=2.*PI*u.x;float sinTheta=pow(u.y,a/(2.*a+1.));float cosTheta=sqrt(1.-sinTheta*sinTheta);return vec3(sinTheta*cos(phi),sinTheta*sin(phi),cosTheta);}`;e.IncludesShadersStore[f]||(e.IncludesShadersStore[f]=k);const c="pbrHelperFunctions",w=`#define MINIMUMVARIANCE 0.0005
290
+ float convertRoughnessToAverageSlope(float roughness)
291
+ {return square(roughness)+MINIMUMVARIANCE;}
292
+ float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;}
293
+ vec2 getAARoughnessFactors(vec3 normalVector) {
294
+ #ifdef SPECULARAA
295
+ vec3 nDfdx=dFdx(normalVector.xyz);vec3 nDfdy=dFdy(normalVector.xyz);float slopeSquare=max(dot(nDfdx,nDfdx),dot(nDfdy,nDfdy));float geometricRoughnessFactor=pow(saturate(slopeSquare),0.333);float geometricAlphaGFactor=sqrt(slopeSquare);geometricAlphaGFactor*=0.75;return vec2(geometricRoughnessFactor,geometricAlphaGFactor);
296
+ #else
297
+ return vec2(0.);
298
+ #endif
299
+ }
300
+ #ifdef ANISOTROPIC
301
+ #ifdef ANISOTROPIC_LEGACY
302
+ vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(alphaG*(1.0+anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG*(1.0-anisotropy),MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
303
+ vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 anisotropicFrameDirection;if (anisotropy>=0.0) {anisotropicFrameDirection=B;} else {anisotropicFrameDirection=T;}
304
+ vec3 anisotropicFrameTangent=cross(normalize(anisotropicFrameDirection),V);vec3 anisotropicFrameNormal=cross(anisotropicFrameTangent,anisotropicFrameDirection);vec3 anisotropicNormal=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;}
305
+ #elif ANISOTROPIC_OPENPBR
306
+ vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(alphaG*alphaG*sqrt(2.0/(1.0+(1.0-anisotropy)*(1.0-anisotropy))),MINIMUMVARIANCE);float alphaB=max(alphaT*(1.0-anisotropy),MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
307
+ #else
308
+ vec2 getAnisotropicRoughness(float alphaG,float anisotropy) {float alphaT=max(mix(alphaG,1.0,anisotropy*anisotropy),MINIMUMVARIANCE);float alphaB=max(alphaG,MINIMUMVARIANCE);return vec2(alphaT,alphaB);}
309
+ vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 bentNormal=cross(B,V);bentNormal=normalize(cross(bentNormal,B));float a=square(square(1.0-anisotropy*(1.0-roughness)));bentNormal=normalize(mix(bentNormal,N,a));return bentNormal;}
310
+ #endif
311
+ #endif
312
+ #if defined(CLEARCOAT) || defined(SS_REFRACTION)
313
+ vec3 cocaLambert(vec3 alpha,float distance) {return exp(-alpha*distance);}
314
+ vec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {return cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
315
+ vec3 computeColorAtDistanceInMedia(vec3 color,float distance) {return -log(color)/distance;}
316
+ vec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 clearCoatAbsorption=mix(vec3(1.0),
317
+ cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
318
+ clearCoatIntensity);return clearCoatAbsorption;}
319
+ #endif
320
+ #ifdef MICROSURFACEAUTOMATIC
321
+ float computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor)
322
+ {const float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;float reflectivityLuminance=getLuminance(reflectivityColor);float reflectivityLuma=sqrt(reflectivityLuminance);microSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return microSurface;}
323
+ #endif
324
+ `;e.IncludesShadersStore[c]||(e.IncludesShadersStore[c]=w);const l="pbrDirectLightingSetupFunctions",z=`struct preLightingInfo
325
+ {vec3 lightOffset;float lightDistanceSquared;float lightDistance;float attenuation;vec3 L;vec3 H;float NdotV;float NdotLUnclamped;float NdotL;float VdotH;float LdotV;float roughness;float diffuseRoughness;vec3 surfaceAlbedo;
326
+ #ifdef IRIDESCENCE
327
+ float iridescenceIntensity;
328
+ #endif
329
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
330
+ vec3 areaLightDiffuse;
331
+ #ifdef SPECULARTERM
332
+ vec3 areaLightSpecular;vec4 areaLightFresnel;
333
+ #endif
334
+ #endif
335
+ };preLightingInfo computePointAndSpotPreLightingInfo(vec4 lightData,vec3 V,vec3 N,vec3 posW) {preLightingInfo result;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);result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
336
+ preLightingInfo computeDirectionalPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;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);result.LdotV=dot(result.L,V);result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
337
+ preLightingInfo computeHemisphericPreLightingInfo(vec4 lightData,vec3 V,vec3 N) {preLightingInfo result;result.NdotL=dot(N,lightData.xyz)*0.5+0.5;result.NdotL=saturateEps(result.NdotL);result.NdotLUnclamped=result.NdotL;
338
+ #ifdef SPECULARTERM
339
+ result.L=normalize(lightData.xyz);result.H=normalize(V+result.L);result.VdotH=saturate(dot(V,result.H));
340
+ #endif
341
+ result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
342
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
343
+ #include<ltcHelperFunctions>
344
+ uniform sampler2D areaLightsLTC1Sampler;uniform sampler2D areaLightsLTC2Sampler;preLightingInfo computeAreaPreLightingInfo(sampler2D ltc1,sampler2D ltc2,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness )
345
+ {preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnel(ltc1,ltc2,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness);
346
+ #ifdef SPECULARTERM
347
+ result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
348
+ #endif
349
+ result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
350
+ preLightingInfo computeAreaPreLightingInfoWithTexture(sampler2D ltc1,sampler2D ltc2,sampler2D emissionTexture,vec3 viewDirectionW,vec3 vNormal,vec3 vPosition,vec4 lightData,vec3 halfWidth,vec3 halfHeight,float roughness )
351
+ {preLightingInfo result;result.lightOffset=lightData.xyz-vPosition;result.lightDistanceSquared=dot(result.lightOffset,result.lightOffset);result.lightDistance=sqrt(result.lightDistanceSquared);areaLightData data=computeAreaLightSpecularDiffuseFresnelWithEmission(ltc1,ltc2,emissionTexture,viewDirectionW,vNormal,vPosition,lightData.xyz,halfWidth,halfHeight,roughness);
352
+ #ifdef SPECULARTERM
353
+ result.areaLightFresnel=data.Fresnel;result.areaLightSpecular=data.Specular;
354
+ #endif
355
+ result.areaLightDiffuse=data.Diffuse;result.LdotV=0.;result.roughness=0.;result.diffuseRoughness=0.;result.surfaceAlbedo=vec3(0.);return result;}
356
+ #endif
357
+ `;e.IncludesShadersStore[l]||(e.IncludesShadersStore[l]=z);const d="pbrDirectLightingFalloffFunctions",K=`float computeDistanceLightFalloff_Standard(vec3 lightOffset,float range)
358
+ {return max(0.,1.0-length(lightOffset)/range);}
359
+ float computeDistanceLightFalloff_Physical(float lightDistanceSquared)
360
+ {return 1.0/maxEps(lightDistanceSquared);}
361
+ float computeDistanceLightFalloff_GLTF(float lightDistanceSquared,float inverseSquaredRange)
362
+ {float lightDistanceFalloff=1.0/maxEps(lightDistanceSquared);float factor=lightDistanceSquared*inverseSquaredRange;float attenuation=saturate(1.0-factor*factor);attenuation*=attenuation;lightDistanceFalloff*=attenuation;return lightDistanceFalloff;}
363
+ float computeDistanceLightFalloff(vec3 lightOffset,float lightDistanceSquared,float range,float inverseSquaredRange)
364
+ {
365
+ #ifdef USEPHYSICALLIGHTFALLOFF
366
+ return computeDistanceLightFalloff_Physical(lightDistanceSquared);
367
+ #elif defined(USEGLTFLIGHTFALLOFF)
368
+ return computeDistanceLightFalloff_GLTF(lightDistanceSquared,inverseSquaredRange);
369
+ #else
370
+ return computeDistanceLightFalloff_Standard(lightOffset,range);
371
+ #endif
372
+ }
373
+ float computeDirectionalLightFalloff_Standard(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent)
374
+ {float falloff=0.0;float cosAngle=maxEps(dot(-lightDirection,directionToLightCenterW));if (cosAngle>=cosHalfAngle)
375
+ {falloff=max(0.,pow(cosAngle,exponent));}
376
+ return falloff;}
377
+ float computeDirectionalLightFalloff_IES(vec3 lightDirection,vec3 directionToLightCenterW,sampler2D iesLightSampler)
378
+ {float cosAngle=dot(-lightDirection,directionToLightCenterW);float angle=acos(cosAngle)/PI;return texture2D(iesLightSampler,vec2(angle,0.)).r;}
379
+ float computeDirectionalLightFalloff_Physical(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle)
380
+ {const float kMinusLog2ConeAngleIntensityRatio=6.64385618977;
381
+ float concentrationKappa=kMinusLog2ConeAngleIntensityRatio/(1.0-cosHalfAngle);vec4 lightDirectionSpreadSG=vec4(-lightDirection*concentrationKappa,-concentrationKappa);float falloff=exp2(dot(vec4(directionToLightCenterW,1.0),lightDirectionSpreadSG));return falloff;}
382
+ float computeDirectionalLightFalloff_GLTF(vec3 lightDirection,vec3 directionToLightCenterW,float lightAngleScale,float lightAngleOffset)
383
+ {float cd=dot(-lightDirection,directionToLightCenterW);float falloff=saturate(cd*lightAngleScale+lightAngleOffset);falloff*=falloff;return falloff;}
384
+ float computeDirectionalLightFalloff(vec3 lightDirection,vec3 directionToLightCenterW,float cosHalfAngle,float exponent,float lightAngleScale,float lightAngleOffset)
385
+ {
386
+ #ifdef USEPHYSICALLIGHTFALLOFF
387
+ return computeDirectionalLightFalloff_Physical(lightDirection,directionToLightCenterW,cosHalfAngle);
388
+ #elif defined(USEGLTFLIGHTFALLOFF)
389
+ return computeDirectionalLightFalloff_GLTF(lightDirection,directionToLightCenterW,lightAngleScale,lightAngleOffset);
390
+ #else
391
+ return computeDirectionalLightFalloff_Standard(lightDirection,directionToLightCenterW,cosHalfAngle,exponent);
392
+ #endif
393
+ }`;e.IncludesShadersStore[d]||(e.IncludesShadersStore[d]=K);const s="hdrFilteringFunctions",$=`#if NUM_SAMPLES
394
+ #if NUM_SAMPLES>0
395
+ #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
396
+ float radicalInverse_VdC(uint bits)
397
+ {bits=(bits<<16u) | (bits>>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 float(bits)*2.3283064365386963e-10; }
398
+ vec2 hammersley(uint i,uint N)
399
+ {return vec2(float(i)/float(N),radicalInverse_VdC(i));}
400
+ #else
401
+ float vanDerCorpus(int n,int base)
402
+ {float invBase=1.0/float(base);float denom =1.0;float result =0.0;for(int i=0; i<32; ++i)
403
+ {if(n>0)
404
+ {denom =mod(float(n),2.0);result+=denom*invBase;invBase=invBase/2.0;n =int(float(n)/2.0);}}
405
+ return result;}
406
+ vec2 hammersley(int i,int N)
407
+ {return vec2(float(i)/float(N),vanDerCorpus(i,2));}
408
+ #endif
409
+ float log4(float x) {return log2(x)/2.;}
410
+ vec3 uv_to_normal(vec2 uv) {vec3 N;vec2 uvRange=uv;float theta=uvRange.x*2.*PI;float phi=uvRange.y*PI;float sinPhi=sin(phi);N.x=cos(theta)*sinPhi;N.z=sin(theta)*sinPhi;N.y=cos(phi);return N;}
411
+ const float NUM_SAMPLES_FLOAT=float(NUM_SAMPLES);const float NUM_SAMPLES_FLOAT_INVERSED=1./NUM_SAMPLES_FLOAT;const float K=4.;
412
+ #define inline
413
+ vec3 irradiance(
414
+ #ifdef CUSTOM_IRRADIANCE_FILTERING_INPUT
415
+ CUSTOM_IRRADIANCE_FILTERING_INPUT
416
+ #else
417
+ samplerCube inputTexture,
418
+ #endif
419
+ vec3 inputN,vec2 filteringInfo,
420
+ float diffuseRoughness,
421
+ vec3 surfaceAlbedo,
422
+ vec3 inputV
423
+ #if IBL_CDF_FILTERING
424
+ ,sampler2D icdfSampler
425
+ #endif
426
+ )
427
+ {vec3 n=normalize(inputN);vec3 result=vec3(0.);
428
+ #ifndef IBL_CDF_FILTERING
429
+ vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);mat3 tbnInverse=mat3(tangent.x,bitangent.x,n.x,tangent.y,bitangent.y,n.y,tangent.z,bitangent.z,n.z);
430
+ #endif
431
+ float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));
432
+ #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
433
+ for(uint i=0u; i<NUM_SAMPLES; ++i)
434
+ #else
435
+ for(int i=0; i<NUM_SAMPLES; ++i)
436
+ #endif
437
+ {vec2 Xi=hammersley(i,NUM_SAMPLES);
438
+ #if IBL_CDF_FILTERING
439
+ vec2 T;T.x=texture2D(icdfSampler,vec2(Xi.x,0.)).x;T.y=texture2D(icdfSampler,vec2(T.x,Xi.y)).y;vec3 Ls=uv_to_normal(vec2(1.0-fract(T.x+0.25),T.y));float NoL=dot(n,Ls);float NoV=dot(n,inputV);
440
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
441
+ float LoV=dot (Ls,inputV);
442
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
443
+ vec3 H=(inputV+Ls)*0.5;float VoH=dot(inputV,H);
444
+ #endif
445
+ #else
446
+ vec3 Ls=hemisphereCosSample(Xi);Ls=normalize(Ls);float NoL=Ls.z;
447
+ vec3 V=tbnInverse*inputV;float NoV=V.z;
448
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
449
+ float LoV=dot (Ls,V);
450
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
451
+ vec3 H=(V+Ls)*0.5;float VoH=dot(V,H);
452
+ #endif
453
+ #endif
454
+ if (NoL>0.) {
455
+ #if IBL_CDF_FILTERING
456
+ float pdf=texture2D(icdfSampler,T).z;vec3 c=textureCubeLodEXT(inputTexture,Ls,0.).rgb;
457
+ #else
458
+ float pdf_inversed=PI/NoL;float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(l,0.,maxLevel);
459
+ #ifdef CUSTOM_IRRADIANCE_FILTERING_FUNCTION
460
+ CUSTOM_IRRADIANCE_FILTERING_FUNCTION
461
+ #else
462
+ vec3 c=textureCubeLodEXT(inputTexture,tbn*Ls,mipLevel).rgb;
463
+ #endif
464
+ #endif
465
+ #if GAMMA_INPUT
466
+ c=toLinearSpace(c);
467
+ #endif
468
+ vec3 diffuseRoughnessTerm=vec3(1.0);
469
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
470
+ diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;
471
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
472
+ diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
473
+ #endif
474
+ #if IBL_CDF_FILTERING
475
+ vec3 light=pdf<1e-6 ? vec3(0.0) : vec3(1.0)/vec3(pdf)*c;result+=NoL*diffuseRoughnessTerm*light;
476
+ #else
477
+ result+=c*diffuseRoughnessTerm;
478
+ #endif
479
+ }}
480
+ result=result*NUM_SAMPLES_FLOAT_INVERSED;
481
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
482
+ result=result/clampedAlbedo;
483
+ #endif
484
+ return result;}
485
+ #define inline
486
+ vec3 radiance(float alphaG,samplerCube inputTexture,vec3 inputN,vec2 filteringInfo)
487
+ {vec3 n=normalize(inputN);vec3 c=textureCube(inputTexture,n).rgb;
488
+ if (alphaG==0.) {
489
+ #if GAMMA_INPUT
490
+ c=toLinearSpace(c);
491
+ #endif
492
+ return c;} else {vec3 result=vec3(0.);vec3 tangent=abs(n.z)<0.999 ? vec3(0.,0.,1.) : vec3(1.,0.,0.);tangent=normalize(cross(tangent,n));vec3 bitangent=cross(n,tangent);mat3 tbn=mat3(tangent,bitangent,n);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float omegaP=(4.*PI)/(6.*dim0*dim0);float weight=0.;
493
+ #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
494
+ for(uint i=0u; i<NUM_SAMPLES; ++i)
495
+ #else
496
+ for(int i=0; i<NUM_SAMPLES; ++i)
497
+ #endif
498
+ {vec2 Xi=hammersley(i,NUM_SAMPLES);vec3 H=hemisphereImportanceSampleDggx(Xi,alphaG);float NoV=1.;float NoH=H.z;float NoH2=H.z*H.z;float NoL=2.*NoH2-1.;vec3 L=vec3(2.*NoH*H.x,2.*NoH*H.y,NoL);L=normalize(L);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_TrowbridgeReitzGGX(NoH,alphaG);float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,tbn*L,mipLevel).rgb;
499
+ #if GAMMA_INPUT
500
+ c=toLinearSpace(c);
501
+ #endif
502
+ result+=c*NoL;}}
503
+ result=result/weight;return result;}}
504
+ #ifdef ANISOTROPIC
505
+ #define inline
506
+ vec3 radianceAnisotropic(
507
+ float alphaTangent,
508
+ float alphaBitangent,
509
+ samplerCube inputTexture,
510
+ vec3 inputView,
511
+ vec3 inputTangent,
512
+ vec3 inputBitangent,
513
+ vec3 inputNormal,
514
+ vec2 filteringInfo,
515
+ vec2 noiseInput,
516
+ bool isRefraction,
517
+ float ior
518
+ )
519
+ {vec3 V=inputView;vec3 N=inputNormal;vec3 T=inputTangent;vec3 B=inputBitangent;vec3 result=vec3(0.);float maxLevel=filteringInfo.y;float dim0=filteringInfo.x;float clampedAlphaT=max(alphaTangent,MINIMUMVARIANCE);float clampedAlphaB=max(alphaBitangent,MINIMUMVARIANCE);float effectiveDim=dim0*sqrt(clampedAlphaT*clampedAlphaB);float omegaP=(4.*PI)/(6.*effectiveDim*effectiveDim);const float noiseScale=clamp(log2(float(NUM_SAMPLES))/12.0f,0.0f,1.0f);float weight=0.;
520
+ #if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
521
+ for(uint i=0u; i<NUM_SAMPLES; ++i)
522
+ #else
523
+ for(int i=0; i<NUM_SAMPLES; ++i)
524
+ #endif
525
+ {vec2 Xi=hammersley(i,NUM_SAMPLES);Xi=fract(Xi+noiseInput*mix(0.5f,0.015f,noiseScale));
526
+ vec3 H_tangent=hemisphereImportanceSampleDggxAnisotropic(Xi,clampedAlphaT,clampedAlphaB);vec3 H=normalize(H_tangent.x*T+H_tangent.y*B+H_tangent.z*N);vec3 L;if (isRefraction) {L=refract(-V,H,1.0/ior);} else {L=reflect(-V,H);}
527
+ float NoH=max(dot(N,H),0.001);float VoH=max(dot(V,H),0.001);float NoL=max(dot(N,L),0.001);if (NoL>0.) {float pdf_inversed=4./normalDistributionFunction_BurleyGGX_Anisotropic(
528
+ H_tangent.z,H_tangent.x,H_tangent.y,vec2(clampedAlphaT,clampedAlphaB)
529
+ );float omegaS=NUM_SAMPLES_FLOAT_INVERSED*pdf_inversed;float l=log4(omegaS)-log4(omegaP)+log4(K);float mipLevel=clamp(float(l),0.0,maxLevel);weight+=NoL;vec3 c=textureCubeLodEXT(inputTexture,L,mipLevel).rgb;
530
+ #if GAMMA_INPUT
531
+ c=toLinearSpace(c);
532
+ #endif
533
+ result+=c*NoL;}}
534
+ result=result/weight;return result;}
535
+ #endif
536
+ #endif
537
+ #endif
538
+ `;e.IncludesShadersStore[s]||(e.IncludesShadersStore[s]=$);const E="pbrDirectLightingFunctions",q=`#define CLEARCOATREFLECTANCE90 1.0
539
+ struct lightingInfo
540
+ {vec3 diffuse;
541
+ #ifdef SS_TRANSLUCENCY
542
+ vec3 diffuseTransmission;
543
+ #endif
544
+ #ifdef SPECULARTERM
545
+ vec3 specular;
546
+ #endif
547
+ #ifdef CLEARCOAT
548
+ vec4 clearCoat;
549
+ #endif
550
+ #ifdef SHEEN
551
+ vec3 sheen;
552
+ #endif
553
+ };float adjustRoughnessFromLightProperties(float roughness,float lightRadius,float lightDistance) {
554
+ #if defined(USEPHYSICALLIGHTFALLOFF) || defined(USEGLTFLIGHTFALLOFF)
555
+ float lightRoughness=lightRadius/lightDistance;float totalRoughness=saturate(lightRoughness+roughness);return totalRoughness;
556
+ #else
557
+ return roughness;
558
+ #endif
559
+ }
560
+ vec3 computeHemisphericDiffuseLighting(preLightingInfo info,vec3 lightColor,vec3 groundColor) {return mix(groundColor,lightColor,info.NdotL);}
561
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
562
+ vec3 computeAreaDiffuseLighting(preLightingInfo info,vec3 lightColor) {return info.areaLightDiffuse*lightColor;}
563
+ #endif
564
+ vec3 computeDiffuseLighting(preLightingInfo info,vec3 lightColor) {vec3 diffuseTerm=vec3(1.0/PI);
565
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
566
+ diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
567
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
568
+ diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
569
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
570
+ vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
571
+ #endif
572
+ return diffuseTerm*info.attenuation*info.NdotL*lightColor;}
573
+ #define inline
574
+ vec3 computeProjectionTextureDiffuseLighting(sampler2D projectionLightSampler,mat4 textureProjectionMatrix,vec3 posW){vec4 strq=textureProjectionMatrix*vec4(posW,1.0);strq/=strq.w;vec3 textureColor=texture2D(projectionLightSampler,strq.xy).rgb;return toLinearSpace(textureColor);}
575
+ #ifdef SS_TRANSLUCENCY
576
+ vec3 computeDiffuseTransmittedLighting(preLightingInfo info,vec3 lightColor,vec3 transmittance) {vec3 transmittanceNdotL=vec3(0.);float NdotL=absEps(info.NdotLUnclamped);
577
+ #ifndef SS_TRANSLUCENCY_LEGACY
578
+ if (info.NdotLUnclamped<0.0) {
579
+ #endif
580
+ float wrapNdotL=computeWrappedDiffuseNdotL(NdotL,0.02);float trAdapt=step(0.,info.NdotLUnclamped);transmittanceNdotL=mix(transmittance*wrapNdotL,vec3(wrapNdotL),trAdapt);
581
+ #ifndef SS_TRANSLUCENCY_LEGACY
582
+ }
583
+ vec3 diffuseTerm=vec3(1.0/PI);
584
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_LEGACY
585
+ diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.roughness));
586
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
587
+ diffuseTerm=vec3(diffuseBRDF_Burley(info.NdotL,info.NdotV,info.VdotH,info.diffuseRoughness));
588
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
589
+ vec3 clampedAlbedo=clamp(info.surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseTerm=diffuseBRDF_EON(clampedAlbedo,info.diffuseRoughness,info.NdotL,info.NdotV,info.LdotV);diffuseTerm/=clampedAlbedo;
590
+ #endif
591
+ #else
592
+ float diffuseTerm=diffuseBRDF_Burley(NdotL,info.NdotV,info.VdotH,info.roughness);
593
+ #endif
594
+ return diffuseTerm*transmittanceNdotL*info.attenuation*lightColor;}
595
+ #endif
596
+ #ifdef SPECULARTERM
597
+ vec3 computeSpecularLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 fresnel,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness);
598
+ #ifdef IRIDESCENCE
599
+ fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
600
+ #endif
601
+ float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NdotH,alphaG);
602
+ #ifdef BRDF_V_HEIGHT_CORRELATED
603
+ float smithVisibility=smithVisibility_GGXCorrelated(info.NdotL,info.NdotV,alphaG);
604
+ #else
605
+ float smithVisibility=smithVisibility_TrowbridgeReitzGGXFast(info.NdotL,info.NdotV,alphaG);
606
+ #endif
607
+ vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
608
+ #if defined(AREALIGHTUSED) && defined(AREALIGHTSUPPORTED)
609
+ vec3 computeAreaSpecularLighting(preLightingInfo info,vec3 specularColor,vec3 reflectance0,vec3 reflectance90) {vec3 fresnel=specularColor*info.areaLightFresnel.x*reflectance0+( vec3( 1.0 )-specularColor )*info.areaLightFresnel.y*reflectance90;return specularColor*fresnel*info.areaLightSpecular;}
610
+ #endif
611
+ #endif
612
+ #ifdef FUZZ
613
+ float evalFuzz(vec3 L,float NdotL,float NdotV,vec3 T,vec3 B,vec3 ltcLut)
614
+ {if (NdotL<=0.0 || NdotV<=0.0)
615
+ return 0.0;mat3 M=mat3(
616
+ vec3(ltcLut.r,0.0,0.0),
617
+ vec3(ltcLut.g,1.0,0.0),
618
+ vec3(0.0,0.0,1.0)
619
+ );vec3 Llocal=vec3(dot(L,T),dot(L,B),NdotL);vec3 Lwarp=normalize(M*Llocal);float cosThetaWarp=max(Lwarp.z,0.0);return cosThetaWarp*NdotL;}
620
+ #endif
621
+ #if defined(ANISOTROPIC) && defined(ANISOTROPIC_OPENPBR)
622
+ vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=vec3(distribution*smithVisibility);return specTerm*info.attenuation*info.NdotL*lightColor;}
623
+ #elif defined(ANISOTROPIC)
624
+ vec3 computeAnisotropicSpecularLighting(preLightingInfo info,vec3 V,vec3 N,vec3 T,vec3 B,float anisotropy,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float TdotH=dot(T,info.H);float BdotH=dot(B,info.H);float TdotV=dot(T,V);float BdotV=dot(B,V);float TdotL=dot(T,info.L);float BdotL=dot(B,info.L);float alphaG=convertRoughnessToAverageSlope(info.roughness);vec2 alphaTB=getAnisotropicRoughness(alphaG,anisotropy);alphaTB=max(alphaTB,square(geometricRoughnessFactor));vec3 fresnel=fresnelSchlickGGX(info.VdotH,reflectance0,reflectance90);
625
+ #ifdef IRIDESCENCE
626
+ fresnel=mix(fresnel,reflectance0,info.iridescenceIntensity);
627
+ #endif
628
+ float distribution=normalDistributionFunction_BurleyGGX_Anisotropic(NdotH,TdotH,BdotH,alphaTB);float smithVisibility=smithVisibility_GGXCorrelated_Anisotropic(info.NdotL,info.NdotV,TdotV,BdotV,TdotL,BdotL,alphaTB);vec3 specTerm=fresnel*distribution*smithVisibility;return specTerm*info.attenuation*info.NdotL*lightColor;}
629
+ #endif
630
+ #ifdef CLEARCOAT
631
+ vec4 computeClearCoatLighting(preLightingInfo info,vec3 Ncc,float geometricRoughnessFactor,float clearCoatIntensity,vec3 lightColor) {float NccdotL=saturateEps(dot(Ncc,info.L));float NccdotH=saturateEps(dot(Ncc,info.H));float clearCoatRoughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(clearCoatRoughness);float fresnel=fresnelSchlickGGX(info.VdotH,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnel*=clearCoatIntensity;float distribution=normalDistributionFunction_TrowbridgeReitzGGX(NccdotH,alphaG);float kelemenVisibility=visibility_Kelemen(info.VdotH);float clearCoatTerm=fresnel*distribution*kelemenVisibility;return vec4(
632
+ clearCoatTerm*info.attenuation*NccdotL*lightColor,
633
+ 1.0-fresnel
634
+ );}
635
+ vec3 computeClearCoatLightingAbsorption(float NdotVRefract,vec3 L,vec3 Ncc,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 LRefract=-refract(L,Ncc,vClearCoatRefractionParams.y);float NdotLRefract=saturateEps(dot(Ncc,LRefract));vec3 absorption=computeClearCoatAbsorption(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness,clearCoatIntensity);return absorption;}
636
+ #endif
637
+ #ifdef SHEEN
638
+ vec3 computeSheenLighting(preLightingInfo info,vec3 N,vec3 reflectance0,vec3 reflectance90,float geometricRoughnessFactor,vec3 lightColor) {float NdotH=saturateEps(dot(N,info.H));float roughness=max(info.roughness,geometricRoughnessFactor);float alphaG=convertRoughnessToAverageSlope(roughness);float fresnel=1.;float distribution=normalDistributionFunction_CharlieSheen(NdotH,alphaG);/*#ifdef SHEEN_SOFTER
639
+ float visibility=visibility_CharlieSheen(info.NdotL,info.NdotV,alphaG);
640
+ #else */
641
+ float visibility=visibility_Ashikhmin(info.NdotL,info.NdotV);/* #endif */
642
+ float sheenTerm=fresnel*distribution*visibility;return sheenTerm*info.attenuation*info.NdotL*lightColor;}
643
+ #endif
644
+ `;e.IncludesShadersStore[E]||(e.IncludesShadersStore[E]=q);const R="pbrIBLFunctions",Z=`#if defined(REFLECTION) || defined(SS_REFRACTION)
645
+ float getLodFromAlphaG(float cubeMapDimensionPixels,float microsurfaceAverageSlope) {float microsurfaceAverageSlopeTexels=cubeMapDimensionPixels*microsurfaceAverageSlope;float lod=log2(microsurfaceAverageSlopeTexels);return lod;}
646
+ float getLinearLodFromRoughness(float cubeMapDimensionPixels,float roughness) {float lod=log2(cubeMapDimensionPixels)*roughness;return lod;}
647
+ #endif
648
+ #if defined(ENVIRONMENTBRDF) && defined(RADIANCEOCCLUSION)
649
+ float environmentRadianceOcclusion(float ambientOcclusion,float NdotVUnclamped) {float temp=NdotVUnclamped+ambientOcclusion;return saturate(square(temp)-1.0+ambientOcclusion);}
650
+ #endif
651
+ #if defined(ENVIRONMENTBRDF) && defined(HORIZONOCCLUSION)
652
+ float environmentHorizonOcclusion(vec3 view,vec3 normal,vec3 geometricNormal) {vec3 reflection=reflect(view,normal);float temp=saturate(1.0+1.1*dot(reflection,geometricNormal));return square(temp);}
653
+ #endif
654
+ #if defined(LODINREFLECTIONALPHA) || defined(SS_LODINREFRACTIONALPHA)
655
+ #define UNPACK_LOD(x) (1.0-x)*255.0
656
+ float getLodFromAlphaG(float cubeMapDimensionPixels,float alphaG,float NdotV) {float microsurfaceAverageSlope=alphaG;microsurfaceAverageSlope*=sqrt(abs(NdotV));return getLodFromAlphaG(cubeMapDimensionPixels,microsurfaceAverageSlope);}
657
+ #endif
658
+ `;e.IncludesShadersStore[R]||(e.IncludesShadersStore[R]=Z);const u="pbrBlockAlbedoOpacity",j=`struct albedoOpacityOutParams
659
+ {vec3 surfaceAlbedo;float alpha;};
660
+ #define pbr_inline
661
+ albedoOpacityOutParams albedoOpacityBlock(
662
+ in vec4 vAlbedoColor
663
+ #ifdef ALBEDO
664
+ ,in vec4 albedoTexture
665
+ ,in vec2 albedoInfos
666
+ #endif
667
+ ,in float baseWeight
668
+ #ifdef BASE_WEIGHT
669
+ ,in vec4 baseWeightTexture
670
+ ,in vec2 vBaseWeightInfos
671
+ #endif
672
+ #ifdef OPACITY
673
+ ,in vec4 opacityMap
674
+ ,in vec2 vOpacityInfos
675
+ #endif
676
+ #ifdef DETAIL
677
+ ,in vec4 detailColor
678
+ ,in vec4 vDetailInfos
679
+ #endif
680
+ #ifdef DECAL
681
+ ,in vec4 decalColor
682
+ ,in vec4 vDecalInfos
683
+ #endif
684
+ )
685
+ {albedoOpacityOutParams outParams;vec3 surfaceAlbedo=vAlbedoColor.rgb;float alpha=vAlbedoColor.a;
686
+ #ifdef ALBEDO
687
+ #if defined(ALPHAFROMALBEDO) || defined(ALPHATEST)
688
+ alpha*=albedoTexture.a;
689
+ #endif
690
+ #ifdef GAMMAALBEDO
691
+ surfaceAlbedo*=toLinearSpace(albedoTexture.rgb);
692
+ #else
693
+ surfaceAlbedo*=albedoTexture.rgb;
694
+ #endif
695
+ surfaceAlbedo*=albedoInfos.y;
696
+ #endif
697
+ #ifndef DECAL_AFTER_DETAIL
698
+ #include<decalFragment>
699
+ #endif
700
+ #if defined(VERTEXCOLOR) || defined(INSTANCESCOLOR) && defined(INSTANCES)
701
+ surfaceAlbedo*=vColor.rgb;
702
+ #endif
703
+ #ifdef DETAIL
704
+ float detailAlbedo=2.0*mix(0.5,detailColor.r,vDetailInfos.y);surfaceAlbedo.rgb=surfaceAlbedo.rgb*detailAlbedo*detailAlbedo;
705
+ #endif
706
+ #ifdef DECAL_AFTER_DETAIL
707
+ #include<decalFragment>
708
+ #endif
709
+ #define CUSTOM_FRAGMENT_UPDATE_ALBEDO
710
+ surfaceAlbedo*=baseWeight;
711
+ #ifdef BASE_WEIGHT
712
+ surfaceAlbedo*=baseWeightTexture.r;
713
+ #endif
714
+ #ifdef OPACITY
715
+ #ifdef OPACITYRGB
716
+ alpha=getLuminance(opacityMap.rgb);
717
+ #else
718
+ alpha*=opacityMap.a;
719
+ #endif
720
+ alpha*=vOpacityInfos.y;
721
+ #endif
722
+ #if defined(VERTEXALPHA) || defined(INSTANCESCOLOR) && defined(INSTANCES)
723
+ alpha*=vColor.a;
724
+ #endif
725
+ #if !defined(SS_LINKREFRACTIONTOTRANSPARENCY) && !defined(ALPHAFRESNEL)
726
+ #ifdef ALPHATEST
727
+ #if DEBUGMODE != 88
728
+ if (alpha<ALPHATESTVALUE)
729
+ discard;
730
+ #endif
731
+ #ifndef ALPHABLEND
732
+ alpha=1.0;
733
+ #endif
734
+ #endif
735
+ #endif
736
+ outParams.surfaceAlbedo=surfaceAlbedo;outParams.alpha=alpha;return outParams;}
737
+ `;e.IncludesShadersStore[u]||(e.IncludesShadersStore[u]=j);const C="pbrBlockReflectivity",J=`struct reflectivityOutParams
738
+ {float microSurface;float roughness;float diffuseRoughness;float reflectanceF0;vec3 reflectanceF90;vec3 colorReflectanceF0;vec3 colorReflectanceF90;
739
+ #ifdef METALLICWORKFLOW
740
+ vec3 surfaceAlbedo;float metallic;float specularWeight;vec3 dielectricColorF0;
741
+ #endif
742
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
743
+ vec3 ambientOcclusionColor;
744
+ #endif
745
+ #if DEBUGMODE>0
746
+ #ifdef METALLICWORKFLOW
747
+ #ifdef REFLECTIVITY
748
+ vec4 surfaceMetallicColorMap;
749
+ #endif
750
+ vec3 metallicF0;
751
+ #else
752
+ #ifdef REFLECTIVITY
753
+ vec4 surfaceReflectivityColorMap;
754
+ #endif
755
+ #endif
756
+ #endif
757
+ };
758
+ #define pbr_inline
759
+ reflectivityOutParams reflectivityBlock(
760
+ in vec4 reflectivityColor
761
+ #ifdef METALLICWORKFLOW
762
+ ,in vec3 surfaceAlbedo
763
+ ,in vec4 metallicReflectanceFactors
764
+ #endif
765
+ ,in float baseDiffuseRoughness
766
+ #ifdef BASE_DIFFUSE_ROUGHNESS
767
+ ,in float baseDiffuseRoughnessTexture
768
+ ,in vec2 baseDiffuseRoughnessInfos
769
+ #endif
770
+ #ifdef REFLECTIVITY
771
+ ,in vec3 reflectivityInfos
772
+ ,in vec4 surfaceMetallicOrReflectivityColorMap
773
+ #endif
774
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
775
+ ,in vec3 ambientOcclusionColorIn
776
+ #endif
777
+ #ifdef MICROSURFACEMAP
778
+ ,in vec4 microSurfaceTexel
779
+ #endif
780
+ #ifdef DETAIL
781
+ ,in vec4 detailColor
782
+ ,in vec4 vDetailInfos
783
+ #endif
784
+ )
785
+ {reflectivityOutParams outParams;float microSurface=reflectivityColor.a;vec3 surfaceReflectivityColor=reflectivityColor.rgb;
786
+ #ifdef METALLICWORKFLOW
787
+ vec2 metallicRoughness=surfaceReflectivityColor.rg;float ior=surfaceReflectivityColor.b;
788
+ #ifdef REFLECTIVITY
789
+ #if DEBUGMODE>0
790
+ outParams.surfaceMetallicColorMap=surfaceMetallicOrReflectivityColorMap;
791
+ #endif
792
+ #ifdef AOSTOREINMETALMAPRED
793
+ vec3 aoStoreInMetalMap=vec3(surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r);outParams.ambientOcclusionColor=mix(ambientOcclusionColorIn,aoStoreInMetalMap,reflectivityInfos.z);
794
+ #endif
795
+ #ifdef METALLNESSSTOREINMETALMAPBLUE
796
+ metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.b;
797
+ #else
798
+ metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.r;
799
+ #endif
800
+ #ifdef ROUGHNESSSTOREINMETALMAPALPHA
801
+ metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.a;
802
+ #else
803
+ #ifdef ROUGHNESSSTOREINMETALMAPGREEN
804
+ metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.g;
805
+ #endif
806
+ #endif
807
+ #endif
808
+ #ifdef DETAIL
809
+ float detailRoughness=mix(0.5,detailColor.b,vDetailInfos.w);float loLerp=mix(0.,metallicRoughness.g,detailRoughness*2.);float hiLerp=mix(metallicRoughness.g,1.,(detailRoughness-0.5)*2.);metallicRoughness.g=mix(loLerp,hiLerp,step(detailRoughness,0.5));
810
+ #endif
811
+ #ifdef MICROSURFACEMAP
812
+ metallicRoughness.g*=microSurfaceTexel.r;
813
+ #endif
814
+ #define CUSTOM_FRAGMENT_UPDATE_METALLICROUGHNESS
815
+ microSurface=1.0-metallicRoughness.g;vec3 baseColor=surfaceAlbedo;outParams.metallic=metallicRoughness.r;outParams.specularWeight=metallicReflectanceFactors.a;float dielectricF0=reflectivityColor.a*outParams.specularWeight;surfaceReflectivityColor=metallicReflectanceFactors.rgb;
816
+ #if DEBUGMODE>0
817
+ outParams.metallicF0=vec3(dielectricF0)*surfaceReflectivityColor;
818
+ #endif
819
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
820
+ outParams.surfaceAlbedo=baseColor.rgb*(vec3(1.0)-vec3(dielectricF0)*surfaceReflectivityColor)*(1.0-outParams.metallic);
821
+ #else
822
+ outParams.surfaceAlbedo=baseColor.rgb;
823
+ #endif
824
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
825
+ {vec3 reflectivityColor=mix(dielectricF0*surfaceReflectivityColor,baseColor.rgb,outParams.metallic);outParams.reflectanceF0=max(reflectivityColor.r,max(reflectivityColor.g,reflectivityColor.b));}
826
+ #else
827
+ #if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
828
+ float maxF0=max(surfaceReflectivityColor.r,max(surfaceReflectivityColor.g,surfaceReflectivityColor.b));outParams.reflectanceF0=mix(dielectricF0*maxF0,1.0,outParams.metallic);
829
+ #else
830
+ outParams.reflectanceF0=mix(dielectricF0,1.0,outParams.metallic);
831
+ #endif
832
+ #endif
833
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
834
+ outParams.reflectanceF90=vec3(outParams.specularWeight);float f90Scale=1.0;
835
+ #else
836
+ float f90Scale=clamp(2.0*(ior-1.0),0.0,1.0);outParams.reflectanceF90=vec3(mix(outParams.specularWeight*f90Scale,1.0,outParams.metallic));
837
+ #endif
838
+ outParams.dielectricColorF0=vec3(dielectricF0*surfaceReflectivityColor);vec3 metallicColorF0=baseColor.rgb;outParams.colorReflectanceF0=mix(outParams.dielectricColorF0,metallicColorF0,outParams.metallic);
839
+ #if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
840
+ vec3 dielectricColorF90=surfaceReflectivityColor*vec3(outParams.specularWeight)*vec3(f90Scale);
841
+ #else
842
+ vec3 dielectricColorF90=vec3(outParams.specularWeight*f90Scale);
843
+ #endif
844
+ #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
845
+ vec3 conductorColorF90=surfaceReflectivityColor;
846
+ #else
847
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
848
+ vec3 conductorColorF90=outParams.reflectanceF90;
849
+ #else
850
+ vec3 conductorColorF90=vec3(1.0);
851
+ #endif
852
+ #endif
853
+ outParams.colorReflectanceF90=mix(dielectricColorF90,conductorColorF90,outParams.metallic);
854
+ #else
855
+ #ifdef REFLECTIVITY
856
+ surfaceReflectivityColor*=surfaceMetallicOrReflectivityColorMap.rgb;
857
+ #if DEBUGMODE>0
858
+ outParams.surfaceReflectivityColorMap=surfaceMetallicOrReflectivityColorMap;
859
+ #endif
860
+ #ifdef MICROSURFACEFROMREFLECTIVITYMAP
861
+ microSurface*=surfaceMetallicOrReflectivityColorMap.a;microSurface*=reflectivityInfos.z;
862
+ #else
863
+ #ifdef MICROSURFACEAUTOMATIC
864
+ microSurface*=computeDefaultMicroSurface(microSurface,surfaceReflectivityColor);
865
+ #endif
866
+ #ifdef MICROSURFACEMAP
867
+ microSurface*=microSurfaceTexel.r;
868
+ #endif
869
+ #define CUSTOM_FRAGMENT_UPDATE_MICROSURFACE
870
+ #endif
871
+ #endif
872
+ outParams.colorReflectanceF0=surfaceReflectivityColor;outParams.reflectanceF0=max(surfaceReflectivityColor.r,max(surfaceReflectivityColor.g,surfaceReflectivityColor.b));outParams.reflectanceF90=vec3(1.0);
873
+ #if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
874
+ outParams.colorReflectanceF90=surfaceReflectivityColor;
875
+ #else
876
+ outParams.colorReflectanceF90=vec3(1.0);
877
+ #endif
878
+ #endif
879
+ microSurface=saturate(microSurface);float roughness=1.-microSurface;float diffuseRoughness=baseDiffuseRoughness;
880
+ #ifdef BASE_DIFFUSE_ROUGHNESS
881
+ diffuseRoughness*=baseDiffuseRoughnessTexture*baseDiffuseRoughnessInfos.y;
882
+ #endif
883
+ outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.diffuseRoughness=diffuseRoughness;return outParams;}
884
+ `;e.IncludesShadersStore[C]||(e.IncludesShadersStore[C]=J);const S="pbrBlockAmbientOcclusion",Q=`struct ambientOcclusionOutParams
885
+ {vec3 ambientOcclusionColor;
886
+ #if DEBUGMODE>0 && defined(AMBIENT)
887
+ vec3 ambientOcclusionColorMap;
888
+ #endif
889
+ };ambientOcclusionOutParams ambientOcclusionBlock(
890
+ #ifdef AMBIENT
891
+ in vec3 ambientOcclusionColorMap_,
892
+ in vec4 vAmbientInfos
893
+ #endif
894
+ )
895
+ {ambientOcclusionOutParams outParams;vec3 ambientOcclusionColor=vec3(1.,1.,1.);
896
+ #ifdef AMBIENT
897
+ vec3 ambientOcclusionColorMap=ambientOcclusionColorMap_*vAmbientInfos.y;
898
+ #ifdef AMBIENTINGRAYSCALE
899
+ ambientOcclusionColorMap=vec3(ambientOcclusionColorMap.r,ambientOcclusionColorMap.r,ambientOcclusionColorMap.r);
900
+ #endif
901
+ ambientOcclusionColor=mix(ambientOcclusionColor,ambientOcclusionColorMap,vAmbientInfos.z);
902
+ #if DEBUGMODE>0
903
+ outParams.ambientOcclusionColorMap=ambientOcclusionColorMap;
904
+ #endif
905
+ #endif
906
+ outParams.ambientOcclusionColor=ambientOcclusionColor;return outParams;}
907
+ `;e.IncludesShadersStore[S]||(e.IncludesShadersStore[S]=Q);const m="pbrBlockAlphaFresnel",ee=`#ifdef ALPHAFRESNEL
908
+ #if defined(ALPHATEST) || defined(ALPHABLEND)
909
+ struct alphaFresnelOutParams
910
+ {float alpha;};
911
+ #define pbr_inline
912
+ alphaFresnelOutParams alphaFresnelBlock(
913
+ in vec3 normalW,
914
+ in vec3 viewDirectionW,
915
+ in float alpha,
916
+ in float microSurface
917
+ )
918
+ {alphaFresnelOutParams outParams;float opacityPerceptual=alpha;
919
+ #ifdef LINEARALPHAFRESNEL
920
+ float opacity0=opacityPerceptual;
921
+ #else
922
+ float opacity0=opacityPerceptual*opacityPerceptual;
923
+ #endif
924
+ float opacity90=fresnelGrazingReflectance(opacity0);vec3 normalForward=faceforward(normalW,-viewDirectionW,normalW);outParams.alpha=getReflectanceFromAnalyticalBRDFLookup_Jones(saturate(dot(viewDirectionW,normalForward)),vec3(opacity0),vec3(opacity90),sqrt(microSurface)).x;
925
+ #ifdef ALPHATEST
926
+ if (outParams.alpha<ALPHATESTVALUE)
927
+ discard;
928
+ #ifndef ALPHABLEND
929
+ outParams.alpha=1.0;
930
+ #endif
931
+ #endif
932
+ return outParams;}
933
+ #endif
934
+ #endif
935
+ `;e.IncludesShadersStore[m]||(e.IncludesShadersStore[m]=ee);const A="pbrBlockAnisotropic",ie=`#ifdef ANISOTROPIC
936
+ struct anisotropicOutParams
937
+ {float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;vec3 anisotropicNormal;
938
+ #if DEBUGMODE>0 && defined(ANISOTROPIC_TEXTURE)
939
+ vec3 anisotropyMapData;
940
+ #endif
941
+ };
942
+ #define pbr_inline
943
+ anisotropicOutParams anisotropicBlock(
944
+ in vec3 vAnisotropy,
945
+ in float roughness,
946
+ #ifdef ANISOTROPIC_TEXTURE
947
+ in vec3 anisotropyMapData,
948
+ #endif
949
+ in mat3 TBN,
950
+ in vec3 normalW,
951
+ in vec3 viewDirectionW
952
+ )
953
+ {anisotropicOutParams outParams;float anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);
954
+ #ifdef ANISOTROPIC_TEXTURE
955
+ anisotropy*=anisotropyMapData.b;
956
+ #if DEBUGMODE>0
957
+ outParams.anisotropyMapData=anisotropyMapData;
958
+ #endif
959
+ anisotropyMapData.rg=anisotropyMapData.rg*2.0-1.0;
960
+ #ifdef ANISOTROPIC_LEGACY
961
+ anisotropyDirection.rg*=anisotropyMapData.rg;
962
+ #else
963
+ anisotropyDirection.xy=mat2(anisotropyDirection.x,anisotropyDirection.y,-anisotropyDirection.y,anisotropyDirection.x)*normalize(anisotropyMapData.rg);
964
+ #endif
965
+ #endif
966
+ mat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));vec3 anisotropicTangent=normalize(anisoTBN*anisotropyDirection);vec3 anisotropicBitangent=normalize(cross(anisoTBN[2],anisotropicTangent));outParams.anisotropy=anisotropy;outParams.anisotropicTangent=anisotropicTangent;outParams.anisotropicBitangent=anisotropicBitangent;outParams.anisotropicNormal=getAnisotropicBentNormals(anisotropicTangent,anisotropicBitangent,normalW,viewDirectionW,anisotropy,roughness);return outParams;}
967
+ #endif
968
+ `;e.IncludesShadersStore[A]||(e.IncludesShadersStore[A]=ie);const I="pbrBlockReflection",ne=`#ifdef REFLECTION
969
+ struct reflectionOutParams
970
+ {vec4 environmentRadiance;vec3 environmentIrradiance;
971
+ #ifdef REFLECTIONMAP_3D
972
+ vec3 reflectionCoords;
973
+ #else
974
+ vec2 reflectionCoords;
975
+ #endif
976
+ #ifdef SS_TRANSLUCENCY
977
+ #ifdef USESPHERICALFROMREFLECTIONMAP
978
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
979
+ vec3 irradianceVector;
980
+ #endif
981
+ #endif
982
+ #endif
983
+ };
984
+ #define pbr_inline
985
+ void createReflectionCoords(
986
+ in vec3 vPositionW,
987
+ in vec3 normalW,
988
+ #ifdef ANISOTROPIC
989
+ in anisotropicOutParams anisotropicOut,
990
+ #endif
991
+ #ifdef REFLECTIONMAP_3D
992
+ out vec3 reflectionCoords
993
+ #else
994
+ out vec2 reflectionCoords
995
+ #endif
996
+ )
997
+ {
998
+ #ifdef ANISOTROPIC
999
+ vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),anisotropicOut.anisotropicNormal);
1000
+ #else
1001
+ vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);
1002
+ #endif
1003
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1004
+ reflectionVector.z*=-1.0;
1005
+ #endif
1006
+ #ifdef REFLECTIONMAP_3D
1007
+ reflectionCoords=reflectionVector;
1008
+ #else
1009
+ reflectionCoords=reflectionVector.xy;
1010
+ #ifdef REFLECTIONMAP_PROJECTION
1011
+ reflectionCoords/=reflectionVector.z;
1012
+ #endif
1013
+ reflectionCoords.y=1.0-reflectionCoords.y;
1014
+ #endif
1015
+ }
1016
+ #define pbr_inline
1017
+ #define inline
1018
+ void sampleReflectionTexture(
1019
+ in float alphaG,
1020
+ in vec3 vReflectionMicrosurfaceInfos,
1021
+ in vec2 vReflectionInfos,
1022
+ in vec3 vReflectionColor,
1023
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1024
+ in float NdotVUnclamped,
1025
+ #endif
1026
+ #ifdef LINEARSPECULARREFLECTION
1027
+ in float roughness,
1028
+ #endif
1029
+ #ifdef REFLECTIONMAP_3D
1030
+ in samplerCube reflectionSampler,
1031
+ const vec3 reflectionCoords,
1032
+ #else
1033
+ in sampler2D reflectionSampler,
1034
+ const vec2 reflectionCoords,
1035
+ #endif
1036
+ #ifndef LODBASEDMICROSFURACE
1037
+ #ifdef REFLECTIONMAP_3D
1038
+ in samplerCube reflectionSamplerLow,
1039
+ in samplerCube reflectionSamplerHigh,
1040
+ #else
1041
+ in sampler2D reflectionSamplerLow,
1042
+ in sampler2D reflectionSamplerHigh,
1043
+ #endif
1044
+ #endif
1045
+ #ifdef REALTIME_FILTERING
1046
+ in vec2 vReflectionFilteringInfo,
1047
+ #endif
1048
+ out vec4 environmentRadiance
1049
+ )
1050
+ {
1051
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1052
+ float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,NdotVUnclamped);
1053
+ #elif defined(LINEARSPECULARREFLECTION)
1054
+ float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
1055
+ #else
1056
+ float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
1057
+ #endif
1058
+ #ifdef LODBASEDMICROSFURACE
1059
+ reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
1060
+ #ifdef LODINREFLECTIONALPHA
1061
+ float automaticReflectionLOD=UNPACK_LOD(sampleReflection(reflectionSampler,reflectionCoords).a);float requestedReflectionLOD=max(automaticReflectionLOD,reflectionLOD);
1062
+ #else
1063
+ float requestedReflectionLOD=reflectionLOD;
1064
+ #endif
1065
+ #ifdef REALTIME_FILTERING
1066
+ environmentRadiance=vec4(radiance(alphaG,reflectionSampler,reflectionCoords,vReflectionFilteringInfo),1.0);
1067
+ #else
1068
+ environmentRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
1069
+ #endif
1070
+ #else
1071
+ float lodReflectionNormalized=saturate(reflectionLOD/log2(vReflectionMicrosurfaceInfos.x));float lodReflectionNormalizedDoubled=lodReflectionNormalized*2.0;vec4 environmentMid=sampleReflection(reflectionSampler,reflectionCoords);if (lodReflectionNormalizedDoubled<1.0){environmentRadiance=mix(
1072
+ sampleReflection(reflectionSamplerHigh,reflectionCoords),
1073
+ environmentMid,
1074
+ lodReflectionNormalizedDoubled
1075
+ );} else {environmentRadiance=mix(
1076
+ environmentMid,
1077
+ sampleReflection(reflectionSamplerLow,reflectionCoords),
1078
+ lodReflectionNormalizedDoubled-1.0
1079
+ );}
1080
+ #endif
1081
+ #ifdef RGBDREFLECTION
1082
+ environmentRadiance.rgb=fromRGBD(environmentRadiance);
1083
+ #endif
1084
+ #ifdef GAMMAREFLECTION
1085
+ environmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);
1086
+ #endif
1087
+ environmentRadiance.rgb*=vReflectionInfos.x;environmentRadiance.rgb*=vReflectionColor.rgb;}
1088
+ #define pbr_inline
1089
+ #define inline
1090
+ reflectionOutParams reflectionBlock(
1091
+ in vec3 vPositionW
1092
+ ,in vec3 normalW
1093
+ ,in float alphaG
1094
+ ,in vec3 vReflectionMicrosurfaceInfos
1095
+ ,in vec2 vReflectionInfos
1096
+ ,in vec3 vReflectionColor
1097
+ #ifdef ANISOTROPIC
1098
+ ,in anisotropicOutParams anisotropicOut
1099
+ #endif
1100
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1101
+ ,in float NdotVUnclamped
1102
+ #endif
1103
+ #ifdef LINEARSPECULARREFLECTION
1104
+ ,in float roughness
1105
+ #endif
1106
+ #ifdef REFLECTIONMAP_3D
1107
+ ,in samplerCube reflectionSampler
1108
+ #else
1109
+ ,in sampler2D reflectionSampler
1110
+ #endif
1111
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
1112
+ ,in vec3 vEnvironmentIrradiance
1113
+ #endif
1114
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
1115
+ ,in mat4 reflectionMatrix
1116
+ #endif
1117
+ #ifdef USEIRRADIANCEMAP
1118
+ #ifdef REFLECTIONMAP_3D
1119
+ ,in samplerCube irradianceSampler
1120
+ #else
1121
+ ,in sampler2D irradianceSampler
1122
+ #endif
1123
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
1124
+ ,in vec3 reflectionDominantDirection
1125
+ #endif
1126
+ #endif
1127
+ #ifndef LODBASEDMICROSFURACE
1128
+ #ifdef REFLECTIONMAP_3D
1129
+ ,in samplerCube reflectionSamplerLow
1130
+ ,in samplerCube reflectionSamplerHigh
1131
+ #else
1132
+ ,in sampler2D reflectionSamplerLow
1133
+ ,in sampler2D reflectionSamplerHigh
1134
+ #endif
1135
+ #endif
1136
+ #ifdef REALTIME_FILTERING
1137
+ ,in vec2 vReflectionFilteringInfo
1138
+ #ifdef IBL_CDF_FILTERING
1139
+ ,in sampler2D icdfSampler
1140
+ #endif
1141
+ #endif
1142
+ ,in vec3 viewDirectionW
1143
+ ,in float diffuseRoughness
1144
+ ,in vec3 surfaceAlbedo
1145
+ )
1146
+ {reflectionOutParams outParams;vec4 environmentRadiance=vec4(0.,0.,0.,0.);
1147
+ #ifdef REFLECTIONMAP_3D
1148
+ vec3 reflectionCoords=vec3(0.);
1149
+ #else
1150
+ vec2 reflectionCoords=vec2(0.);
1151
+ #endif
1152
+ createReflectionCoords(
1153
+ vPositionW,
1154
+ normalW,
1155
+ #ifdef ANISOTROPIC
1156
+ anisotropicOut,
1157
+ #endif
1158
+ reflectionCoords
1159
+ );sampleReflectionTexture(
1160
+ alphaG,
1161
+ vReflectionMicrosurfaceInfos,
1162
+ vReflectionInfos,
1163
+ vReflectionColor,
1164
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1165
+ NdotVUnclamped,
1166
+ #endif
1167
+ #ifdef LINEARSPECULARREFLECTION
1168
+ roughness,
1169
+ #endif
1170
+ #ifdef REFLECTIONMAP_3D
1171
+ reflectionSampler,
1172
+ reflectionCoords,
1173
+ #else
1174
+ reflectionSampler,
1175
+ reflectionCoords,
1176
+ #endif
1177
+ #ifndef LODBASEDMICROSFURACE
1178
+ reflectionSamplerLow,
1179
+ reflectionSamplerHigh,
1180
+ #endif
1181
+ #ifdef REALTIME_FILTERING
1182
+ vReflectionFilteringInfo,
1183
+ #endif
1184
+ environmentRadiance
1185
+ );vec3 environmentIrradiance=vec3(0.,0.,0.);
1186
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
1187
+ #ifdef ANISOTROPIC
1188
+ vec3 irradianceVector=vec3(reflectionMatrix*vec4(anisotropicOut.anisotropicNormal,0)).xyz;
1189
+ #else
1190
+ vec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;
1191
+ #endif
1192
+ vec3 irradianceView=vec3(reflectionMatrix*vec4(viewDirectionW,0)).xyz;
1193
+ #if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
1194
+ #if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
1195
+ float NdotV=max(dot(normalW,viewDirectionW),0.0);irradianceVector=mix(irradianceVector,irradianceView,(0.5*(1.0-NdotV))*diffuseRoughness);
1196
+ #endif
1197
+ #endif
1198
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1199
+ irradianceVector.z*=-1.0;
1200
+ #endif
1201
+ #ifdef INVERTCUBICMAP
1202
+ irradianceVector.y*=-1.0;
1203
+ #endif
1204
+ #endif
1205
+ #ifdef USESPHERICALFROMREFLECTIONMAP
1206
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
1207
+ environmentIrradiance=vEnvironmentIrradiance;
1208
+ #else
1209
+ #if defined(REALTIME_FILTERING)
1210
+ environmentIrradiance=irradiance(reflectionSampler,irradianceVector,vReflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
1211
+ #ifdef IBL_CDF_FILTERING
1212
+ ,icdfSampler
1213
+ #endif
1214
+ );
1215
+ #else
1216
+ environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
1217
+ #endif
1218
+ #ifdef SS_TRANSLUCENCY
1219
+ outParams.irradianceVector=irradianceVector;
1220
+ #endif
1221
+ #endif
1222
+ #elif defined(USEIRRADIANCEMAP)
1223
+ #ifdef REFLECTIONMAP_3D
1224
+ vec4 environmentIrradiance4=sampleReflection(irradianceSampler,irradianceVector);
1225
+ #else
1226
+ vec4 environmentIrradiance4=sampleReflection(irradianceSampler,reflectionCoords);
1227
+ #endif
1228
+ environmentIrradiance=environmentIrradiance4.rgb;
1229
+ #ifdef RGBDREFLECTION
1230
+ environmentIrradiance.rgb=fromRGBD(environmentIrradiance4);
1231
+ #endif
1232
+ #ifdef GAMMAREFLECTION
1233
+ environmentIrradiance.rgb=toLinearSpace(environmentIrradiance.rgb);
1234
+ #endif
1235
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
1236
+ vec3 Ls=normalize(reflectionDominantDirection);float NoL=dot(irradianceVector,Ls);float NoV=dot(irradianceVector,irradianceView);vec3 diffuseRoughnessTerm=vec3(1.0);
1237
+ #if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
1238
+ float LoV=dot (Ls,irradianceView);float mag=length(reflectionDominantDirection)*2.0;vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3(1.0),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0,1.0)));
1239
+ #elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
1240
+ vec3 H=(irradianceView+Ls)*0.5;float VoH=dot(irradianceView,H);diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
1241
+ #endif
1242
+ environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
1243
+ #endif
1244
+ #endif
1245
+ environmentIrradiance*=vReflectionColor.rgb*vReflectionInfos.x;
1246
+ #ifdef MIX_IBL_RADIANCE_WITH_IRRADIANCE
1247
+ outParams.environmentRadiance=vec4(mix(environmentRadiance.rgb,environmentIrradiance,alphaG),environmentRadiance.a);
1248
+ #else
1249
+ outParams.environmentRadiance=environmentRadiance;
1250
+ #endif
1251
+ outParams.environmentIrradiance=environmentIrradiance;outParams.reflectionCoords=reflectionCoords;return outParams;}
1252
+ #endif
1253
+ `;e.IncludesShadersStore[I]||(e.IncludesShadersStore[I]=ne);const v="pbrBlockSheen",ae=`#ifdef SHEEN
1254
+ struct sheenOutParams
1255
+ {float sheenIntensity;vec3 sheenColor;float sheenRoughness;
1256
+ #ifdef SHEEN_LINKWITHALBEDO
1257
+ vec3 surfaceAlbedo;
1258
+ #endif
1259
+ #if defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1260
+ float sheenAlbedoScaling;
1261
+ #endif
1262
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1263
+ vec3 finalSheenRadianceScaled;
1264
+ #endif
1265
+ #if DEBUGMODE>0
1266
+ #ifdef SHEEN_TEXTURE
1267
+ vec4 sheenMapData;
1268
+ #endif
1269
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1270
+ vec3 sheenEnvironmentReflectance;
1271
+ #endif
1272
+ #endif
1273
+ };
1274
+ #define pbr_inline
1275
+ #define inline
1276
+ sheenOutParams sheenBlock(
1277
+ in vec4 vSheenColor
1278
+ #ifdef SHEEN_ROUGHNESS
1279
+ ,in float vSheenRoughness
1280
+ #if defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
1281
+ ,in vec4 sheenMapRoughnessData
1282
+ #endif
1283
+ #endif
1284
+ ,in float roughness
1285
+ #ifdef SHEEN_TEXTURE
1286
+ ,in vec4 sheenMapData
1287
+ ,in float sheenMapLevel
1288
+ #endif
1289
+ ,in float reflectance
1290
+ #ifdef SHEEN_LINKWITHALBEDO
1291
+ ,in vec3 baseColor
1292
+ ,in vec3 surfaceAlbedo
1293
+ #endif
1294
+ #ifdef ENVIRONMENTBRDF
1295
+ ,in float NdotV
1296
+ ,in vec3 environmentBrdf
1297
+ #endif
1298
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1299
+ ,in vec2 AARoughnessFactors
1300
+ ,in vec3 vReflectionMicrosurfaceInfos
1301
+ ,in vec2 vReflectionInfos
1302
+ ,in vec3 vReflectionColor
1303
+ ,in vec4 vLightingIntensity
1304
+ #ifdef REFLECTIONMAP_3D
1305
+ ,in samplerCube reflectionSampler
1306
+ ,in vec3 reflectionCoords
1307
+ #else
1308
+ ,in sampler2D reflectionSampler
1309
+ ,in vec2 reflectionCoords
1310
+ #endif
1311
+ ,in float NdotVUnclamped
1312
+ #ifndef LODBASEDMICROSFURACE
1313
+ #ifdef REFLECTIONMAP_3D
1314
+ ,in samplerCube reflectionSamplerLow
1315
+ ,in samplerCube reflectionSamplerHigh
1316
+ #else
1317
+ ,in sampler2D reflectionSamplerLow
1318
+ ,in sampler2D reflectionSamplerHigh
1319
+ #endif
1320
+ #endif
1321
+ #ifdef REALTIME_FILTERING
1322
+ ,in vec2 vReflectionFilteringInfo
1323
+ #endif
1324
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
1325
+ ,in float seo
1326
+ #endif
1327
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
1328
+ ,in float eho
1329
+ #endif
1330
+ #endif
1331
+ )
1332
+ {sheenOutParams outParams;float sheenIntensity=vSheenColor.a;
1333
+ #ifdef SHEEN_TEXTURE
1334
+ #if DEBUGMODE>0
1335
+ outParams.sheenMapData=sheenMapData;
1336
+ #endif
1337
+ #endif
1338
+ #ifdef SHEEN_LINKWITHALBEDO
1339
+ float sheenFactor=pow5(1.0-sheenIntensity);vec3 sheenColor=baseColor.rgb*(1.0-sheenFactor);float sheenRoughness=sheenIntensity;outParams.surfaceAlbedo=surfaceAlbedo*sheenFactor;
1340
+ #ifdef SHEEN_TEXTURE
1341
+ sheenIntensity*=sheenMapData.a;
1342
+ #endif
1343
+ #else
1344
+ vec3 sheenColor=vSheenColor.rgb;
1345
+ #ifdef SHEEN_TEXTURE
1346
+ #ifdef SHEEN_GAMMATEXTURE
1347
+ sheenColor.rgb*=toLinearSpace(sheenMapData.rgb);
1348
+ #else
1349
+ sheenColor.rgb*=sheenMapData.rgb;
1350
+ #endif
1351
+ sheenColor.rgb*=sheenMapLevel;
1352
+ #endif
1353
+ #ifdef SHEEN_ROUGHNESS
1354
+ float sheenRoughness=vSheenRoughness;
1355
+ #ifdef SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE
1356
+ #if defined(SHEEN_TEXTURE)
1357
+ sheenRoughness*=sheenMapData.a;
1358
+ #endif
1359
+ #elif defined(SHEEN_TEXTURE_ROUGHNESS)
1360
+ sheenRoughness*=sheenMapRoughnessData.a;
1361
+ #endif
1362
+ #else
1363
+ float sheenRoughness=roughness;
1364
+ #ifdef SHEEN_TEXTURE
1365
+ sheenIntensity*=sheenMapData.a;
1366
+ #endif
1367
+ #endif
1368
+ #if !defined(SHEEN_ALBEDOSCALING)
1369
+ sheenIntensity*=(1.-reflectance);
1370
+ #endif
1371
+ sheenColor*=sheenIntensity;
1372
+ #endif
1373
+ #ifdef ENVIRONMENTBRDF
1374
+ /*#ifdef SHEEN_SOFTER
1375
+ vec3 environmentSheenBrdf=vec3(0.,0.,getBRDFLookupCharlieSheen(NdotV,sheenRoughness));
1376
+ #else*/
1377
+ #ifdef SHEEN_ROUGHNESS
1378
+ vec3 environmentSheenBrdf=getBRDFLookup(NdotV,sheenRoughness);
1379
+ #else
1380
+ vec3 environmentSheenBrdf=environmentBrdf;
1381
+ #endif
1382
+ /*#endif*/
1383
+ #endif
1384
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
1385
+ float sheenAlphaG=convertRoughnessToAverageSlope(sheenRoughness);
1386
+ #ifdef SPECULARAA
1387
+ sheenAlphaG+=AARoughnessFactors.y;
1388
+ #endif
1389
+ vec4 environmentSheenRadiance=vec4(0.,0.,0.,0.);sampleReflectionTexture(
1390
+ sheenAlphaG,
1391
+ vReflectionMicrosurfaceInfos,
1392
+ vReflectionInfos,
1393
+ vReflectionColor,
1394
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1395
+ NdotVUnclamped,
1396
+ #endif
1397
+ #ifdef LINEARSPECULARREFLECTION
1398
+ sheenRoughness,
1399
+ #endif
1400
+ reflectionSampler,
1401
+ reflectionCoords,
1402
+ #ifndef LODBASEDMICROSFURACE
1403
+ reflectionSamplerLow,
1404
+ reflectionSamplerHigh,
1405
+ #endif
1406
+ #ifdef REALTIME_FILTERING
1407
+ vReflectionFilteringInfo,
1408
+ #endif
1409
+ environmentSheenRadiance
1410
+ );vec3 sheenEnvironmentReflectance=getSheenReflectanceFromBRDFLookup(sheenColor,environmentSheenBrdf);
1411
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
1412
+ sheenEnvironmentReflectance*=seo;
1413
+ #endif
1414
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
1415
+ sheenEnvironmentReflectance*=eho;
1416
+ #endif
1417
+ #if DEBUGMODE>0
1418
+ outParams.sheenEnvironmentReflectance=sheenEnvironmentReflectance;
1419
+ #endif
1420
+ outParams.finalSheenRadianceScaled=
1421
+ environmentSheenRadiance.rgb *
1422
+ sheenEnvironmentReflectance *
1423
+ vLightingIntensity.z;
1424
+ #endif
1425
+ #if defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
1426
+ outParams.sheenAlbedoScaling=1.0-sheenIntensity*max(max(sheenColor.r,sheenColor.g),sheenColor.b)*environmentSheenBrdf.b;
1427
+ #endif
1428
+ outParams.sheenIntensity=sheenIntensity;outParams.sheenColor=sheenColor;outParams.sheenRoughness=sheenRoughness;return outParams;}
1429
+ #endif
1430
+ `;e.IncludesShadersStore[v]||(e.IncludesShadersStore[v]=ae);const N="pbrBlockClearcoat",te=`struct clearcoatOutParams
1431
+ {vec3 specularEnvironmentR0;float conservationFactor;vec3 clearCoatNormalW;vec2 clearCoatAARoughnessFactors;float clearCoatIntensity;float clearCoatRoughness;
1432
+ #ifdef REFLECTION
1433
+ vec3 finalClearCoatRadianceScaled;
1434
+ #endif
1435
+ #ifdef CLEARCOAT_TINT
1436
+ vec3 absorption;float clearCoatNdotVRefract;vec3 clearCoatColor;float clearCoatThickness;
1437
+ #endif
1438
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1439
+ vec3 energyConservationFactorClearCoat;
1440
+ #endif
1441
+ #if DEBUGMODE>0
1442
+ #ifdef CLEARCOAT_BUMP
1443
+ mat3 TBNClearCoat;
1444
+ #endif
1445
+ #ifdef CLEARCOAT_TEXTURE
1446
+ vec2 clearCoatMapData;
1447
+ #endif
1448
+ #if defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
1449
+ vec4 clearCoatTintMapData;
1450
+ #endif
1451
+ #ifdef REFLECTION
1452
+ vec4 environmentClearCoatRadiance;vec3 clearCoatEnvironmentReflectance;
1453
+ #endif
1454
+ float clearCoatNdotV;
1455
+ #endif
1456
+ };
1457
+ #ifdef CLEARCOAT
1458
+ #define pbr_inline
1459
+ #define inline
1460
+ clearcoatOutParams clearcoatBlock(
1461
+ in vec3 vPositionW
1462
+ ,in vec3 geometricNormalW
1463
+ ,in vec3 viewDirectionW
1464
+ ,in vec2 vClearCoatParams
1465
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_TEXTURE_ROUGHNESS_IDENTICAL) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
1466
+ ,in vec4 clearCoatMapRoughnessData
1467
+ #endif
1468
+ ,in vec3 specularEnvironmentR0
1469
+ #ifdef CLEARCOAT_TEXTURE
1470
+ ,in vec2 clearCoatMapData
1471
+ #endif
1472
+ #ifdef CLEARCOAT_TINT
1473
+ ,in vec4 vClearCoatTintParams
1474
+ ,in float clearCoatColorAtDistance
1475
+ ,in vec4 vClearCoatRefractionParams
1476
+ #ifdef CLEARCOAT_TINT_TEXTURE
1477
+ ,in vec4 clearCoatTintMapData
1478
+ #endif
1479
+ #endif
1480
+ #ifdef CLEARCOAT_BUMP
1481
+ ,in vec2 vClearCoatBumpInfos
1482
+ ,in vec4 clearCoatBumpMapData
1483
+ ,in vec2 vClearCoatBumpUV
1484
+ #if defined(TANGENT) && defined(NORMAL)
1485
+ ,in mat3 vTBN
1486
+ #else
1487
+ ,in vec2 vClearCoatTangentSpaceParams
1488
+ #endif
1489
+ #ifdef OBJECTSPACE_NORMALMAP
1490
+ ,in mat4 normalMatrix
1491
+ #endif
1492
+ #endif
1493
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
1494
+ ,in vec3 faceNormal
1495
+ #endif
1496
+ #ifdef REFLECTION
1497
+ ,in vec3 vReflectionMicrosurfaceInfos
1498
+ ,in vec2 vReflectionInfos
1499
+ ,in vec3 vReflectionColor
1500
+ ,in vec4 vLightingIntensity
1501
+ #ifdef REFLECTIONMAP_3D
1502
+ ,in samplerCube reflectionSampler
1503
+ #else
1504
+ ,in sampler2D reflectionSampler
1505
+ #endif
1506
+ #ifndef LODBASEDMICROSFURACE
1507
+ #ifdef REFLECTIONMAP_3D
1508
+ ,in samplerCube reflectionSamplerLow
1509
+ ,in samplerCube reflectionSamplerHigh
1510
+ #else
1511
+ ,in sampler2D reflectionSamplerLow
1512
+ ,in sampler2D reflectionSamplerHigh
1513
+ #endif
1514
+ #endif
1515
+ #ifdef REALTIME_FILTERING
1516
+ ,in vec2 vReflectionFilteringInfo
1517
+ #endif
1518
+ #endif
1519
+ #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
1520
+ ,in float frontFacingMultiplier
1521
+ #endif
1522
+ )
1523
+ {clearcoatOutParams outParams;float clearCoatIntensity=vClearCoatParams.x;float clearCoatRoughness=vClearCoatParams.y;
1524
+ #ifdef CLEARCOAT_TEXTURE
1525
+ clearCoatIntensity*=clearCoatMapData.x;
1526
+ #ifdef CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE
1527
+ clearCoatRoughness*=clearCoatMapData.y;
1528
+ #endif
1529
+ #if DEBUGMODE>0
1530
+ outParams.clearCoatMapData=clearCoatMapData;
1531
+ #endif
1532
+ #endif
1533
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
1534
+ clearCoatRoughness*=clearCoatMapRoughnessData.y;
1535
+ #endif
1536
+ outParams.clearCoatIntensity=clearCoatIntensity;outParams.clearCoatRoughness=clearCoatRoughness;
1537
+ #ifdef CLEARCOAT_TINT
1538
+ vec3 clearCoatColor=vClearCoatTintParams.rgb;float clearCoatThickness=vClearCoatTintParams.a;
1539
+ #ifdef CLEARCOAT_TINT_TEXTURE
1540
+ #ifdef CLEARCOAT_TINT_GAMMATEXTURE
1541
+ clearCoatColor*=toLinearSpace(clearCoatTintMapData.rgb);
1542
+ #else
1543
+ clearCoatColor*=clearCoatTintMapData.rgb;
1544
+ #endif
1545
+ clearCoatThickness*=clearCoatTintMapData.a;
1546
+ #if DEBUGMODE>0
1547
+ outParams.clearCoatTintMapData=clearCoatTintMapData;
1548
+ #endif
1549
+ #endif
1550
+ outParams.clearCoatColor=computeColorAtDistanceInMedia(clearCoatColor,clearCoatColorAtDistance);outParams.clearCoatThickness=clearCoatThickness;
1551
+ #endif
1552
+ #ifdef CLEARCOAT_REMAP_F0
1553
+ vec3 specularEnvironmentR0Updated=getR0RemappedForClearCoat(specularEnvironmentR0);
1554
+ #else
1555
+ vec3 specularEnvironmentR0Updated=specularEnvironmentR0;
1556
+ #endif
1557
+ outParams.specularEnvironmentR0=mix(specularEnvironmentR0,specularEnvironmentR0Updated,clearCoatIntensity);vec3 clearCoatNormalW=geometricNormalW;
1558
+ #ifdef CLEARCOAT_BUMP
1559
+ #ifdef NORMALXYSCALE
1560
+ float clearCoatNormalScale=1.0;
1561
+ #else
1562
+ float clearCoatNormalScale=vClearCoatBumpInfos.y;
1563
+ #endif
1564
+ #if defined(TANGENT) && defined(NORMAL)
1565
+ mat3 TBNClearCoat=vTBN;
1566
+ #else
1567
+ vec2 TBNClearCoatUV=vClearCoatBumpUV*frontFacingMultiplier;mat3 TBNClearCoat=cotangent_frame(clearCoatNormalW*clearCoatNormalScale,vPositionW,TBNClearCoatUV,vClearCoatTangentSpaceParams);
1568
+ #endif
1569
+ #if DEBUGMODE>0
1570
+ outParams.TBNClearCoat=TBNClearCoat;
1571
+ #endif
1572
+ #ifdef OBJECTSPACE_NORMALMAP
1573
+ clearCoatNormalW=normalize(clearCoatBumpMapData.xyz *2.0-1.0);clearCoatNormalW=normalize(mat3(normalMatrix)*clearCoatNormalW);
1574
+ #else
1575
+ clearCoatNormalW=perturbNormal(TBNClearCoat,clearCoatBumpMapData.xyz,vClearCoatBumpInfos.y);
1576
+ #endif
1577
+ #endif
1578
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
1579
+ clearCoatNormalW*=sign(dot(clearCoatNormalW,faceNormal));
1580
+ #endif
1581
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
1582
+ clearCoatNormalW=clearCoatNormalW*frontFacingMultiplier;
1583
+ #endif
1584
+ outParams.clearCoatNormalW=clearCoatNormalW;outParams.clearCoatAARoughnessFactors=getAARoughnessFactors(clearCoatNormalW.xyz);float clearCoatNdotVUnclamped=dot(clearCoatNormalW,viewDirectionW);float clearCoatNdotV=absEps(clearCoatNdotVUnclamped);
1585
+ #if DEBUGMODE>0
1586
+ outParams.clearCoatNdotV=clearCoatNdotV;
1587
+ #endif
1588
+ #ifdef CLEARCOAT_TINT
1589
+ vec3 clearCoatVRefract=refract(-viewDirectionW,clearCoatNormalW,vClearCoatRefractionParams.y);outParams.clearCoatNdotVRefract=absEps(dot(clearCoatNormalW,clearCoatVRefract));
1590
+ #endif
1591
+ #if defined(ENVIRONMENTBRDF) && (!defined(REFLECTIONMAP_SKYBOX) || defined(MS_BRDF_ENERGY_CONSERVATION))
1592
+ vec3 environmentClearCoatBrdf=getBRDFLookup(clearCoatNdotV,clearCoatRoughness);
1593
+ #endif
1594
+ #if defined(REFLECTION)
1595
+ float clearCoatAlphaG=convertRoughnessToAverageSlope(clearCoatRoughness);
1596
+ #ifdef SPECULARAA
1597
+ clearCoatAlphaG+=outParams.clearCoatAARoughnessFactors.y;
1598
+ #endif
1599
+ vec4 environmentClearCoatRadiance=vec4(0.,0.,0.,0.);vec3 clearCoatReflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),clearCoatNormalW);
1600
+ #ifdef REFLECTIONMAP_OPPOSITEZ
1601
+ clearCoatReflectionVector.z*=-1.0;
1602
+ #endif
1603
+ #ifdef REFLECTIONMAP_3D
1604
+ vec3 clearCoatReflectionCoords=clearCoatReflectionVector;
1605
+ #else
1606
+ vec2 clearCoatReflectionCoords=clearCoatReflectionVector.xy;
1607
+ #ifdef REFLECTIONMAP_PROJECTION
1608
+ clearCoatReflectionCoords/=clearCoatReflectionVector.z;
1609
+ #endif
1610
+ clearCoatReflectionCoords.y=1.0-clearCoatReflectionCoords.y;
1611
+ #endif
1612
+ sampleReflectionTexture(
1613
+ clearCoatAlphaG,
1614
+ vReflectionMicrosurfaceInfos,
1615
+ vReflectionInfos,
1616
+ vReflectionColor,
1617
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
1618
+ clearCoatNdotVUnclamped,
1619
+ #endif
1620
+ #ifdef LINEARSPECULARREFLECTION
1621
+ clearCoatRoughness,
1622
+ #endif
1623
+ reflectionSampler,
1624
+ clearCoatReflectionCoords,
1625
+ #ifndef LODBASEDMICROSFURACE
1626
+ reflectionSamplerLow,
1627
+ reflectionSamplerHigh,
1628
+ #endif
1629
+ #ifdef REALTIME_FILTERING
1630
+ vReflectionFilteringInfo,
1631
+ #endif
1632
+ environmentClearCoatRadiance
1633
+ );
1634
+ #if DEBUGMODE>0
1635
+ outParams.environmentClearCoatRadiance=environmentClearCoatRadiance;
1636
+ #endif
1637
+ #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
1638
+ vec3 clearCoatEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(vClearCoatRefractionParams.x),environmentClearCoatBrdf);
1639
+ #ifdef HORIZONOCCLUSION
1640
+ #ifdef BUMP
1641
+ #ifdef REFLECTIONMAP_3D
1642
+ float clearCoatEho=environmentHorizonOcclusion(-viewDirectionW,clearCoatNormalW,geometricNormalW);clearCoatEnvironmentReflectance*=clearCoatEho;
1643
+ #endif
1644
+ #endif
1645
+ #endif
1646
+ #else
1647
+ vec3 clearCoatEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(clearCoatNdotV,vec3(1.),vec3(1.),sqrt(1.-clearCoatRoughness));
1648
+ #endif
1649
+ clearCoatEnvironmentReflectance*=clearCoatIntensity;
1650
+ #if DEBUGMODE>0
1651
+ outParams.clearCoatEnvironmentReflectance=clearCoatEnvironmentReflectance;
1652
+ #endif
1653
+ outParams.finalClearCoatRadianceScaled=
1654
+ environmentClearCoatRadiance.rgb *
1655
+ clearCoatEnvironmentReflectance *
1656
+ vLightingIntensity.z;
1657
+ #endif
1658
+ #if defined(CLEARCOAT_TINT)
1659
+ outParams.absorption=computeClearCoatAbsorption(outParams.clearCoatNdotVRefract,outParams.clearCoatNdotVRefract,outParams.clearCoatColor,clearCoatThickness,clearCoatIntensity);
1660
+ #endif
1661
+ float fresnelIBLClearCoat=fresnelSchlickGGX(clearCoatNdotV,vClearCoatRefractionParams.x,CLEARCOATREFLECTANCE90);fresnelIBLClearCoat*=clearCoatIntensity;outParams.conservationFactor=(1.-fresnelIBLClearCoat);
1662
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
1663
+ outParams.energyConservationFactorClearCoat=getEnergyConservationFactor(outParams.specularEnvironmentR0,environmentClearCoatBrdf);
1664
+ #endif
1665
+ return outParams;}
1666
+ #endif
1667
+ `;e.IncludesShadersStore[N]||(e.IncludesShadersStore[N]=te);const T="pbrBlockIridescence",oe=`struct iridescenceOutParams
1668
+ {float iridescenceIntensity;float iridescenceIOR;float iridescenceThickness;vec3 specularEnvironmentR0;};
1669
+ #ifdef IRIDESCENCE
1670
+ #define pbr_inline
1671
+ #define inline
1672
+ iridescenceOutParams iridescenceBlock(
1673
+ in vec4 vIridescenceParams
1674
+ ,in float viewAngle
1675
+ ,in vec3 specularEnvironmentR0
1676
+ #ifdef IRIDESCENCE_TEXTURE
1677
+ ,in vec2 iridescenceMapData
1678
+ #endif
1679
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
1680
+ ,in vec2 iridescenceThicknessMapData
1681
+ #endif
1682
+ #ifdef CLEARCOAT
1683
+ ,in float NdotVUnclamped
1684
+ ,in vec2 vClearCoatParams
1685
+ #ifdef CLEARCOAT_TEXTURE
1686
+ ,in vec2 clearCoatMapData
1687
+ #endif
1688
+ #endif
1689
+ )
1690
+ {iridescenceOutParams outParams;float iridescenceIntensity=vIridescenceParams.x;float iridescenceIOR=vIridescenceParams.y;float iridescenceThicknessMin=vIridescenceParams.z;float iridescenceThicknessMax=vIridescenceParams.w;float iridescenceThicknessWeight=1.;
1691
+ #ifdef IRIDESCENCE_TEXTURE
1692
+ iridescenceIntensity*=iridescenceMapData.x;
1693
+ #endif
1694
+ #if defined(IRIDESCENCE_THICKNESS_TEXTURE)
1695
+ iridescenceThicknessWeight=iridescenceThicknessMapData.g;
1696
+ #endif
1697
+ float iridescenceThickness=mix(iridescenceThicknessMin,iridescenceThicknessMax,iridescenceThicknessWeight);float topIor=1.;
1698
+ #ifdef CLEARCOAT
1699
+ float clearCoatIntensity=vClearCoatParams.x;
1700
+ #ifdef CLEARCOAT_TEXTURE
1701
+ clearCoatIntensity*=clearCoatMapData.x;
1702
+ #endif
1703
+ topIor=mix(1.0,vClearCoatRefractionParams.w-1.,clearCoatIntensity);viewAngle=sqrt(1.0+square(1.0/topIor)*(square(NdotVUnclamped)-1.0));
1704
+ #endif
1705
+ vec3 iridescenceFresnel=evalIridescence(topIor,iridescenceIOR,viewAngle,iridescenceThickness,specularEnvironmentR0);outParams.specularEnvironmentR0=mix(specularEnvironmentR0,iridescenceFresnel,iridescenceIntensity);outParams.iridescenceIntensity=iridescenceIntensity;outParams.iridescenceThickness=iridescenceThickness;outParams.iridescenceIOR=iridescenceIOR;return outParams;}
1706
+ #endif
1707
+ `;e.IncludesShadersStore[T]||(e.IncludesShadersStore[T]=oe);const O="pbrBlockSubSurface",re=`struct subSurfaceOutParams
1708
+ {vec3 specularEnvironmentReflectance;
1709
+ #ifdef SS_REFRACTION
1710
+ vec3 finalRefraction;vec3 surfaceAlbedo;
1711
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1712
+ float alpha;
1713
+ #endif
1714
+ float refractionOpacity;
1715
+ #endif
1716
+ #ifdef SS_TRANSLUCENCY
1717
+ vec3 transmittance;float translucencyIntensity;
1718
+ #ifdef REFLECTION
1719
+ vec3 refractionIrradiance;
1720
+ #endif
1721
+ #endif
1722
+ #if DEBUGMODE>0
1723
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1724
+ vec4 thicknessMap;
1725
+ #endif
1726
+ #ifdef SS_REFRACTION
1727
+ vec4 environmentRefraction;vec3 refractionTransmittance;
1728
+ #endif
1729
+ #endif
1730
+ };
1731
+ #ifdef SUBSURFACE
1732
+ #ifdef SS_REFRACTION
1733
+ #define pbr_inline
1734
+ #define inline
1735
+ vec4 sampleEnvironmentRefraction(
1736
+ in float ior
1737
+ ,in float thickness
1738
+ ,in float refractionLOD
1739
+ ,in vec3 normalW
1740
+ ,in vec3 vPositionW
1741
+ ,in vec3 viewDirectionW
1742
+ ,in mat4 view
1743
+ ,in vec4 vRefractionInfos
1744
+ ,in mat4 refractionMatrix
1745
+ ,in vec4 vRefractionMicrosurfaceInfos
1746
+ ,in float alphaG
1747
+ #ifdef SS_REFRACTIONMAP_3D
1748
+ ,in samplerCube refractionSampler
1749
+ #ifndef LODBASEDMICROSFURACE
1750
+ ,in samplerCube refractionSamplerLow
1751
+ ,in samplerCube refractionSamplerHigh
1752
+ #endif
1753
+ #else
1754
+ ,in sampler2D refractionSampler
1755
+ #ifndef LODBASEDMICROSFURACE
1756
+ ,in sampler2D refractionSamplerLow
1757
+ ,in sampler2D refractionSamplerHigh
1758
+ #endif
1759
+ #endif
1760
+ #ifdef ANISOTROPIC
1761
+ ,in anisotropicOutParams anisotropicOut
1762
+ #endif
1763
+ #ifdef REALTIME_FILTERING
1764
+ ,in vec2 vRefractionFilteringInfo
1765
+ #endif
1766
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1767
+ ,in vec3 refractionPosition
1768
+ ,in vec3 refractionSize
1769
+ #endif
1770
+ ) {vec4 environmentRefraction=vec4(0.,0.,0.,0.);
1771
+ #ifdef ANISOTROPIC
1772
+ vec3 refractionVector=refract(-viewDirectionW,anisotropicOut.anisotropicNormal,ior);
1773
+ #else
1774
+ vec3 refractionVector=refract(-viewDirectionW,normalW,ior);
1775
+ #endif
1776
+ #ifdef SS_REFRACTIONMAP_OPPOSITEZ
1777
+ refractionVector.z*=-1.0;
1778
+ #endif
1779
+ #ifdef SS_REFRACTIONMAP_3D
1780
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1781
+ refractionVector=parallaxCorrectNormal(vPositionW,refractionVector,refractionSize,refractionPosition);
1782
+ #endif
1783
+ refractionVector.y=refractionVector.y*vRefractionInfos.w;vec3 refractionCoords=refractionVector;refractionCoords=vec3(refractionMatrix*vec4(refractionCoords,0));
1784
+ #else
1785
+ #ifdef SS_USE_THICKNESS_AS_DEPTH
1786
+ vec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*thickness,1.0)));
1787
+ #else
1788
+ vec3 vRefractionUVW=vec3(refractionMatrix*(view*vec4(vPositionW+refractionVector*vRefractionInfos.z,1.0)));
1789
+ #endif
1790
+ vec2 refractionCoords=vRefractionUVW.xy/vRefractionUVW.z;refractionCoords.y=1.0-refractionCoords.y;
1791
+ #endif
1792
+ #ifdef LODBASEDMICROSFURACE
1793
+ refractionLOD=refractionLOD*vRefractionMicrosurfaceInfos.y+vRefractionMicrosurfaceInfos.z;
1794
+ #ifdef SS_LODINREFRACTIONALPHA
1795
+ float automaticRefractionLOD=UNPACK_LOD(sampleRefraction(refractionSampler,refractionCoords).a);float requestedRefractionLOD=max(automaticRefractionLOD,refractionLOD);
1796
+ #else
1797
+ float requestedRefractionLOD=refractionLOD;
1798
+ #endif
1799
+ #if defined(REALTIME_FILTERING) && defined(SS_REFRACTIONMAP_3D)
1800
+ environmentRefraction=vec4(radiance(alphaG,refractionSampler,refractionCoords,vRefractionFilteringInfo),1.0);
1801
+ #else
1802
+ environmentRefraction=sampleRefractionLod(refractionSampler,refractionCoords,requestedRefractionLOD);
1803
+ #endif
1804
+ #else
1805
+ float lodRefractionNormalized=saturate(refractionLOD/log2(vRefractionMicrosurfaceInfos.x));float lodRefractionNormalizedDoubled=lodRefractionNormalized*2.0;vec4 environmentRefractionMid=sampleRefraction(refractionSampler,refractionCoords);if (lodRefractionNormalizedDoubled<1.0){environmentRefraction=mix(
1806
+ sampleRefraction(refractionSamplerHigh,refractionCoords),
1807
+ environmentRefractionMid,
1808
+ lodRefractionNormalizedDoubled
1809
+ );} else {environmentRefraction=mix(
1810
+ environmentRefractionMid,
1811
+ sampleRefraction(refractionSamplerLow,refractionCoords),
1812
+ lodRefractionNormalizedDoubled-1.0
1813
+ );}
1814
+ #endif
1815
+ #ifdef SS_RGBDREFRACTION
1816
+ environmentRefraction.rgb=fromRGBD(environmentRefraction);
1817
+ #endif
1818
+ #ifdef SS_GAMMAREFRACTION
1819
+ environmentRefraction.rgb=toLinearSpace(environmentRefraction.rgb);
1820
+ #endif
1821
+ return environmentRefraction;}
1822
+ #endif
1823
+ #define pbr_inline
1824
+ #define inline
1825
+ subSurfaceOutParams subSurfaceBlock(
1826
+ in vec3 vSubSurfaceIntensity
1827
+ ,in vec2 vThicknessParam
1828
+ ,in vec4 vTintColor
1829
+ ,in vec3 normalW
1830
+ ,in vec3 vSpecularEnvironmentReflectance
1831
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1832
+ ,in vec4 thicknessMap
1833
+ #endif
1834
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
1835
+ ,in vec4 refractionIntensityMap
1836
+ #endif
1837
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
1838
+ ,in vec4 translucencyIntensityMap
1839
+ #endif
1840
+ #ifdef REFLECTION
1841
+ #ifdef SS_TRANSLUCENCY
1842
+ ,in mat4 reflectionMatrix
1843
+ #ifdef USESPHERICALFROMREFLECTIONMAP
1844
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
1845
+ ,in vec3 irradianceVector_
1846
+ #endif
1847
+ #if defined(REALTIME_FILTERING)
1848
+ ,in samplerCube reflectionSampler
1849
+ ,in vec2 vReflectionFilteringInfo
1850
+ #ifdef IBL_CDF_FILTERING
1851
+ ,in sampler2D icdfSampler
1852
+ #endif
1853
+ #endif
1854
+ #endif
1855
+ #ifdef USEIRRADIANCEMAP
1856
+ #ifdef REFLECTIONMAP_3D
1857
+ ,in samplerCube irradianceSampler
1858
+ #else
1859
+ ,in sampler2D irradianceSampler
1860
+ #endif
1861
+ #endif
1862
+ #endif
1863
+ #endif
1864
+ #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
1865
+ ,in vec3 surfaceAlbedo
1866
+ #endif
1867
+ #ifdef SS_REFRACTION
1868
+ ,in vec3 vPositionW
1869
+ ,in vec3 viewDirectionW
1870
+ ,in mat4 view
1871
+ ,in vec4 vRefractionInfos
1872
+ ,in mat4 refractionMatrix
1873
+ ,in vec4 vRefractionMicrosurfaceInfos
1874
+ ,in vec4 vLightingIntensity
1875
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1876
+ ,in float alpha
1877
+ #endif
1878
+ #ifdef SS_LODINREFRACTIONALPHA
1879
+ ,in float NdotVUnclamped
1880
+ #endif
1881
+ #ifdef SS_LINEARSPECULARREFRACTION
1882
+ ,in float roughness
1883
+ #endif
1884
+ ,in float alphaG
1885
+ #ifdef SS_REFRACTIONMAP_3D
1886
+ ,in samplerCube refractionSampler
1887
+ #ifndef LODBASEDMICROSFURACE
1888
+ ,in samplerCube refractionSamplerLow
1889
+ ,in samplerCube refractionSamplerHigh
1890
+ #endif
1891
+ #else
1892
+ ,in sampler2D refractionSampler
1893
+ #ifndef LODBASEDMICROSFURACE
1894
+ ,in sampler2D refractionSamplerLow
1895
+ ,in sampler2D refractionSamplerHigh
1896
+ #endif
1897
+ #endif
1898
+ #ifdef ANISOTROPIC
1899
+ ,in anisotropicOutParams anisotropicOut
1900
+ #endif
1901
+ #ifdef REALTIME_FILTERING
1902
+ ,in vec2 vRefractionFilteringInfo
1903
+ #endif
1904
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
1905
+ ,in vec3 refractionPosition
1906
+ ,in vec3 refractionSize
1907
+ #endif
1908
+ #ifdef SS_DISPERSION
1909
+ ,in float dispersion
1910
+ #endif
1911
+ #endif
1912
+ #ifdef SS_TRANSLUCENCY
1913
+ ,in vec3 vDiffusionDistance
1914
+ ,in vec4 vTranslucencyColor
1915
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
1916
+ ,in vec4 translucencyColorMap
1917
+ #endif
1918
+ #endif
1919
+ )
1920
+ {subSurfaceOutParams outParams;outParams.specularEnvironmentReflectance=vSpecularEnvironmentReflectance;
1921
+ #ifdef SS_REFRACTION
1922
+ float refractionIntensity=vSubSurfaceIntensity.x;
1923
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
1924
+ refractionIntensity*=(1.0-alpha);outParams.alpha=1.0;
1925
+ #endif
1926
+ #endif
1927
+ #ifdef SS_TRANSLUCENCY
1928
+ float translucencyIntensity=vSubSurfaceIntensity.y;
1929
+ #endif
1930
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
1931
+ #ifdef SS_USE_GLTF_TEXTURES
1932
+ float thickness=thicknessMap.g*vThicknessParam.y+vThicknessParam.x;
1933
+ #else
1934
+ float thickness=thicknessMap.r*vThicknessParam.y+vThicknessParam.x;
1935
+ #endif
1936
+ #if DEBUGMODE>0
1937
+ outParams.thicknessMap=thicknessMap;
1938
+ #endif
1939
+ #if defined(SS_REFRACTION) && defined(SS_REFRACTION_USE_INTENSITY_FROM_THICKNESS)
1940
+ #ifdef SS_USE_GLTF_TEXTURES
1941
+ refractionIntensity*=thicknessMap.r;
1942
+ #else
1943
+ refractionIntensity*=thicknessMap.g;
1944
+ #endif
1945
+ #endif
1946
+ #if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCY_USE_INTENSITY_FROM_THICKNESS)
1947
+ #ifdef SS_USE_GLTF_TEXTURES
1948
+ translucencyIntensity*=thicknessMap.a;
1949
+ #else
1950
+ translucencyIntensity*=thicknessMap.b;
1951
+ #endif
1952
+ #endif
1953
+ #else
1954
+ float thickness=vThicknessParam.y;
1955
+ #endif
1956
+ #if defined(SS_REFRACTION) && defined(SS_REFRACTIONINTENSITY_TEXTURE)
1957
+ #ifdef SS_USE_GLTF_TEXTURES
1958
+ refractionIntensity*=refractionIntensityMap.r;
1959
+ #else
1960
+ refractionIntensity*=refractionIntensityMap.g;
1961
+ #endif
1962
+ #endif
1963
+ #if defined(SS_TRANSLUCENCY) && defined(SS_TRANSLUCENCYINTENSITY_TEXTURE)
1964
+ #ifdef SS_USE_GLTF_TEXTURES
1965
+ translucencyIntensity*=translucencyIntensityMap.a;
1966
+ #else
1967
+ translucencyIntensity*=translucencyIntensityMap.b;
1968
+ #endif
1969
+ #endif
1970
+ #ifdef SS_TRANSLUCENCY
1971
+ thickness=maxEps(thickness);vec4 translucencyColor=vTranslucencyColor;
1972
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
1973
+ translucencyColor*=translucencyColorMap;
1974
+ #endif
1975
+ vec3 transmittance=transmittanceBRDF_Burley(translucencyColor.rgb,vDiffusionDistance,thickness);transmittance*=translucencyIntensity;outParams.transmittance=transmittance;outParams.translucencyIntensity=translucencyIntensity;
1976
+ #endif
1977
+ #ifdef SS_REFRACTION
1978
+ vec4 environmentRefraction=vec4(0.,0.,0.,0.);
1979
+ #ifdef SS_HAS_THICKNESS
1980
+ float ior=vRefractionInfos.y;
1981
+ #else
1982
+ float ior=vRefractionMicrosurfaceInfos.w;
1983
+ #endif
1984
+ #ifdef SS_LODINREFRACTIONALPHA
1985
+ float refractionAlphaG=alphaG;refractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));float refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG,NdotVUnclamped);
1986
+ #elif defined(SS_LINEARSPECULARREFRACTION)
1987
+ float refractionRoughness=alphaG;refractionRoughness=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));float refractionLOD=getLinearLodFromRoughness(vRefractionMicrosurfaceInfos.x,refractionRoughness);
1988
+ #else
1989
+ float refractionAlphaG=alphaG;refractionAlphaG=mix(alphaG,0.0,clamp(ior*3.0-2.0,0.0,1.0));float refractionLOD=getLodFromAlphaG(vRefractionMicrosurfaceInfos.x,refractionAlphaG);
1990
+ #endif
1991
+ float refraction_ior=vRefractionInfos.y;
1992
+ #ifdef SS_DISPERSION
1993
+ float realIOR=1.0/refraction_ior;float iorDispersionSpread=0.04*dispersion*(realIOR-1.0);vec3 iors=vec3(1.0/(realIOR-iorDispersionSpread),refraction_ior,1.0/(realIOR+iorDispersionSpread));for (int i=0; i<3; i++) {refraction_ior=iors[i];
1994
+ #endif
1995
+ vec4 envSample=sampleEnvironmentRefraction(refraction_ior,thickness,refractionLOD,normalW,vPositionW,viewDirectionW,view,vRefractionInfos,refractionMatrix,vRefractionMicrosurfaceInfos,alphaG
1996
+ #ifdef SS_REFRACTIONMAP_3D
1997
+ ,refractionSampler
1998
+ #ifndef LODBASEDMICROSFURACE
1999
+ ,refractionSamplerLow
2000
+ ,refractionSamplerHigh
2001
+ #endif
2002
+ #else
2003
+ ,refractionSampler
2004
+ #ifndef LODBASEDMICROSFURACE
2005
+ ,refractionSamplerLow
2006
+ ,refractionSamplerHigh
2007
+ #endif
2008
+ #endif
2009
+ #ifdef ANISOTROPIC
2010
+ ,anisotropicOut
2011
+ #endif
2012
+ #ifdef REALTIME_FILTERING
2013
+ ,vRefractionFilteringInfo
2014
+ #endif
2015
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
2016
+ ,refractionPosition
2017
+ ,refractionSize
2018
+ #endif
2019
+ );
2020
+ #ifdef SS_DISPERSION
2021
+ environmentRefraction[i]=envSample[i];}
2022
+ #else
2023
+ environmentRefraction=envSample;
2024
+ #endif
2025
+ environmentRefraction.rgb*=vRefractionInfos.x;
2026
+ #endif
2027
+ #ifdef SS_REFRACTION
2028
+ vec3 refractionTransmittance=vec3(refractionIntensity);
2029
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
2030
+ vec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);refractionTransmittance*=cocaLambert(volumeAlbedo,thickness);
2031
+ #elif defined(SS_LINKREFRACTIONTOTRANSPARENCY)
2032
+ float maxChannel=max(max(surfaceAlbedo.r,surfaceAlbedo.g),surfaceAlbedo.b);vec3 volumeAlbedo=saturate(maxChannel*surfaceAlbedo);environmentRefraction.rgb*=volumeAlbedo;
2033
+ #else
2034
+ vec3 volumeAlbedo=computeColorAtDistanceInMedia(vTintColor.rgb,vTintColor.w);refractionTransmittance*=cocaLambert(volumeAlbedo,vThicknessParam.y);
2035
+ #endif
2036
+ #ifdef SS_ALBEDOFORREFRACTIONTINT
2037
+ environmentRefraction.rgb*=surfaceAlbedo.rgb;
2038
+ #endif
2039
+ outParams.surfaceAlbedo=surfaceAlbedo;outParams.refractionOpacity=1.-refractionIntensity;
2040
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
2041
+ outParams.surfaceAlbedo*=outParams.refractionOpacity;
2042
+ #endif
2043
+ #ifdef UNUSED_MULTIPLEBOUNCES
2044
+ vec3 bounceSpecularEnvironmentReflectance=(2.0*vSpecularEnvironmentReflectance)/(1.0+vSpecularEnvironmentReflectance);outParams.specularEnvironmentReflectance=mix(bounceSpecularEnvironmentReflectance,vSpecularEnvironmentReflectance,refractionIntensity);
2045
+ #endif
2046
+ #if DEBUGMODE>0
2047
+ outParams.refractionTransmittance=refractionTransmittance;
2048
+ #endif
2049
+ outParams.finalRefraction=environmentRefraction.rgb*refractionTransmittance*vLightingIntensity.z;outParams.finalRefraction*=vec3(1.0)-vSpecularEnvironmentReflectance;
2050
+ #if DEBUGMODE>0
2051
+ outParams.environmentRefraction=environmentRefraction;
2052
+ #endif
2053
+ #endif
2054
+ #if defined(REFLECTION) && defined(SS_TRANSLUCENCY)
2055
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX) || !defined(USESPHERICALFROMREFLECTIONMAP)
2056
+ vec3 irradianceVector=vec3(reflectionMatrix*vec4(normalW,0)).xyz;
2057
+ #ifdef REFLECTIONMAP_OPPOSITEZ
2058
+ irradianceVector.z*=-1.0;
2059
+ #endif
2060
+ #ifdef INVERTCUBICMAP
2061
+ irradianceVector.y*=-1.0;
2062
+ #endif
2063
+ #else
2064
+ vec3 irradianceVector=irradianceVector_;
2065
+ #endif
2066
+ #if defined(USESPHERICALFROMREFLECTIONMAP)
2067
+ #if defined(REALTIME_FILTERING)
2068
+ vec3 refractionIrradiance=irradiance(reflectionSampler,-irradianceVector,vReflectionFilteringInfo,0.0,surfaceAlbedo,irradianceVector
2069
+ #ifdef IBL_CDF_FILTERING
2070
+ ,icdfSampler
2071
+ #endif
2072
+ );
2073
+ #else
2074
+ vec3 refractionIrradiance=computeEnvironmentIrradiance(-irradianceVector);
2075
+ #endif
2076
+ #elif defined(USEIRRADIANCEMAP)
2077
+ #ifdef REFLECTIONMAP_3D
2078
+ vec3 irradianceCoords=irradianceVector;
2079
+ #else
2080
+ vec2 irradianceCoords=irradianceVector.xy;
2081
+ #ifdef REFLECTIONMAP_PROJECTION
2082
+ irradianceCoords/=irradianceVector.z;
2083
+ #endif
2084
+ irradianceCoords.y=1.0-irradianceCoords.y;
2085
+ #endif
2086
+ vec4 refractionIrradiance=sampleReflection(irradianceSampler,-irradianceCoords);
2087
+ #ifdef RGBDREFLECTION
2088
+ refractionIrradiance.rgb=fromRGBD(refractionIrradiance);
2089
+ #endif
2090
+ #ifdef GAMMAREFLECTION
2091
+ refractionIrradiance.rgb=toLinearSpace(refractionIrradiance.rgb);
2092
+ #endif
2093
+ #else
2094
+ vec4 refractionIrradiance=vec4(0.);
2095
+ #endif
2096
+ refractionIrradiance.rgb*=transmittance;
2097
+ #ifdef SS_ALBEDOFORTRANSLUCENCYTINT
2098
+ refractionIrradiance.rgb*=surfaceAlbedo.rgb;
2099
+ #endif
2100
+ outParams.refractionIrradiance=refractionIrradiance.rgb;
2101
+ #endif
2102
+ return outParams;}
2103
+ #endif
2104
+ `;e.IncludesShadersStore[O]||(e.IncludesShadersStore[O]=re);const p="pbrBlockReflectance0",fe=`float reflectanceF0=reflectivityOut.reflectanceF0;vec3 specularEnvironmentR0=reflectivityOut.colorReflectanceF0;vec3 specularEnvironmentR90=reflectivityOut.colorReflectanceF90;
2105
+ #ifdef ALPHAFRESNEL
2106
+ float reflectance90=fresnelGrazingReflectance(reflectanceF0);specularEnvironmentR90=specularEnvironmentR90*reflectance90;
2107
+ #endif
2108
+ `;e.IncludesShadersStore[p]||(e.IncludesShadersStore[p]=fe);const L="pbrClusteredLightingFunctions",ce=`#if defined(CLUSTLIGHT_BATCH) && CLUSTLIGHT_BATCH>0
2109
+ #include<clusteredLightingFunctions>
2110
+ #define inline
2111
+ lightingInfo computeClusteredLighting(
2112
+ sampler2D lightDataTexture,
2113
+ sampler2D tileMaskTexture,
2114
+ vec4 lightData,
2115
+ ivec2 sliceRange,
2116
+ vec3 V,
2117
+ vec3 N,
2118
+ vec3 posW,
2119
+ vec3 surfaceAlbedo,
2120
+ reflectivityOutParams reflectivityOut
2121
+ #ifdef IRIDESCENCE
2122
+ ,float iridescenceIntensity
2123
+ #endif
2124
+ #ifdef SS_TRANSLUCENCY
2125
+ ,subSurfaceOutParams subSurfaceOut
2126
+ #endif
2127
+ #ifdef SPECULARTERM
2128
+ ,float AARoughnessFactor
2129
+ #endif
2130
+ #ifdef ANISOTROPIC
2131
+ ,anisotropicOutParams anisotropicOut
2132
+ #endif
2133
+ #ifdef SHEEN
2134
+ ,sheenOutParams sheenOut
2135
+ #endif
2136
+ #ifdef CLEARCOAT
2137
+ ,clearcoatOutParams clearcoatOut
2138
+ #endif
2139
+ ) {float NdotV=absEps(dot(N,V));
2140
+ #include<pbrBlockReflectance0>
2141
+ #ifdef CLEARCOAT
2142
+ specularEnvironmentR0=clearcoatOut.specularEnvironmentR0;
2143
+ #endif
2144
+ lightingInfo result;ivec2 tilePosition=ivec2(gl_FragCoord.xy*lightData.xy);int maskHeight=int(lightData.z);tilePosition.y=min(tilePosition.y,maskHeight-1);ivec2 batchRange=sliceRange/CLUSTLIGHT_BATCH;int batchOffset=batchRange.x*CLUSTLIGHT_BATCH;tilePosition.y+=maskHeight*batchRange.x;for (int i=batchRange.x; i<=batchRange.y; i+=1) {uint mask=uint(texelFetch(tileMaskTexture,tilePosition,0).r);tilePosition.y+=maskHeight;int maskOffset=max(sliceRange.x-batchOffset,0);int maskWidth=min(sliceRange.y-batchOffset+1,CLUSTLIGHT_BATCH);mask=extractBits(mask,maskOffset,maskWidth);while (mask != 0u) {uint bit=mask & -mask;mask ^= bit;int position=onlyBitPosition(bit);ClusteredLight light=getClusteredLight(lightDataTexture,batchOffset+maskOffset+position);preLightingInfo preInfo=computePointAndSpotPreLightingInfo(light.vLightData,V,N,posW);preInfo.NdotV=NdotV;preInfo.attenuation=computeDistanceLightFalloff(preInfo.lightOffset,preInfo.lightDistanceSquared,light.vLightFalloff.x,light.vLightFalloff.y);if (light.vLightDirection.w>=0.0) {preInfo.attenuation*=computeDirectionalLightFalloff(light.vLightDirection.xyz,preInfo.L,light.vLightDirection.w,light.vLightData.w,light.vLightFalloff.z,light.vLightFalloff.w);}
2145
+ preInfo.roughness=adjustRoughnessFromLightProperties(reflectivityOut.roughness,light.vLightSpecular.a,preInfo.lightDistance);preInfo.diffuseRoughness=reflectivityOut.diffuseRoughness;preInfo.surfaceAlbedo=surfaceAlbedo;
2146
+ #ifdef IRIDESCENCE
2147
+ preInfo.iridescenceIntensity=iridescenceIntensity;
2148
+ #endif
2149
+ lightingInfo info;
2150
+ #ifdef SS_TRANSLUCENCY
2151
+ #ifdef SS_TRANSLUCENCY_LEGACY
2152
+ info.diffuse=computeDiffuseTransmittedLighting(preInfo,light.vLightDiffuse.rgb,subSurfaceOut.transmittance);info.diffuseTransmission=vec3(0);
2153
+ #else
2154
+ info.diffuse=computeDiffuseLighting(preInfo,light.vLightDiffuse.rgb)*(1.0-subSurfaceOut.translucencyIntensity);info.diffuseTransmission=computeDiffuseTransmittedLighting(preInfo,light.vLightDiffuse.rgb,subSurfaceOut.transmittance);
2155
+ #endif
2156
+ #else
2157
+ info.diffuse=computeDiffuseLighting(preInfo,light.vLightDiffuse.rgb);
2158
+ #endif
2159
+ #ifdef SPECULARTERM
2160
+ #if CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR
2161
+ vec3 metalFresnel=reflectivityOut.specularWeight*getF82Specular(preInfo.VdotH,specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);vec3 dielectricFresnel=fresnelSchlickGGX(preInfo.VdotH,reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90);vec3 coloredFresnel=mix(dielectricFresnel,metalFresnel,reflectivityOut.metallic);
2162
+ #else
2163
+ vec3 coloredFresnel=fresnelSchlickGGX(preInfo.VdotH,specularEnvironmentR0,reflectivityOut.colorReflectanceF90);
2164
+ #endif
2165
+ #ifndef LEGACY_SPECULAR_ENERGY_CONSERVATION
2166
+ float NdotH=dot(N,preInfo.H);vec3 fresnel=fresnelSchlickGGX(NdotH,vec3(reflectanceF0),specularEnvironmentR90);info.diffuse*=(vec3(1.0)-fresnel);
2167
+ #endif
2168
+ #ifdef ANISOTROPIC
2169
+ info.specular=computeAnisotropicSpecularLighting(preInfo,V,N,anisotropicOut.anisotropicTangent,anisotropicOut.anisotropicBitangent,anisotropicOut.anisotropy,clearcoatOut.specularEnvironmentR0,specularEnvironmentR90,AARoughnessFactor,light.vLightDiffuse.rgb);
2170
+ #else
2171
+ info.specular=computeSpecularLighting(preInfo,N,specularEnvironmentR0,coloredFresnel,AARoughnessFactor,light.vLightDiffuse.rgb);
2172
+ #endif
2173
+ #endif
2174
+ #ifdef SHEEN
2175
+ #ifdef SHEEN_LINKWITHALBEDO
2176
+ preInfo.roughness=sheenOut.sheenIntensity;
2177
+ #else
2178
+ preInfo.roughness=adjustRoughnessFromLightProperties(sheenOut.sheenRoughness,light.vLightSpecular.a,preInfo.lightDistance);
2179
+ #endif
2180
+ info.sheen=computeSheenLighting(preInfo,normalW,sheenOut.sheenColor,specularEnvironmentR90,AARoughnessFactor,light.vLightDiffuse.rgb);
2181
+ #endif
2182
+ #ifdef CLEARCOAT
2183
+ preInfo.roughness=adjustRoughnessFromLightProperties(clearcoatOut.clearCoatRoughness,light.vLightSpecular.a,preInfo.lightDistance);info.clearCoat=computeClearCoatLighting(preInfo,clearcoatOut.clearCoatNormalW,clearcoatOut.clearCoatAARoughnessFactors.x,clearcoatOut.clearCoatIntensity,light.vLightDiffuse.rgb);
2184
+ #ifdef CLEARCOAT_TINT
2185
+ float absorption=computeClearCoatLightingAbsorption(clearcoatOut.clearCoatNdotVRefract,preInfo.L,clearcoatOut.clearCoatNormalW,clearcoatOut.clearCoatColor,clearcoatOut.clearCoatThickness,clearcoatOut.clearCoatIntensity);info.diffuse*=absorption;
2186
+ #ifdef SS_TRANSLUCENCY
2187
+ info.diffuseTransmission*=absorption;
2188
+ #endif
2189
+ #ifdef SPECULARTERM
2190
+ info.specular*=absorption;
2191
+ #endif
2192
+ #endif
2193
+ info.diffuse*=info.clearCoat.w;
2194
+ #ifdef SS_TRANSLUCENCY
2195
+ info.diffuseTransmission*=info.clearCoat.w;
2196
+ #endif
2197
+ #ifdef SPECULARTERM
2198
+ info.specular*=info.clearCoat.w;
2199
+ #endif
2200
+ #ifdef SHEEN
2201
+ info.sheen*=info.clearCoat.w;
2202
+ #endif
2203
+ #endif
2204
+ result.diffuse+=info.diffuse;
2205
+ #ifdef SS_TRANSLUCENCY
2206
+ result.diffuseTransmission+=info.diffuseTransmission;
2207
+ #endif
2208
+ #ifdef SPECULARTERM
2209
+ result.specular+=info.specular;
2210
+ #endif
2211
+ #ifdef CLEARCOAT
2212
+ result.clearCoat+=info.clearCoat;
2213
+ #endif
2214
+ #ifdef SHEEN
2215
+ result.sheen+=info.sheen;
2216
+ #endif
2217
+ }
2218
+ batchOffset+=CLUSTLIGHT_BATCH;}
2219
+ return result;}
2220
+ #endif
2221
+ `;e.IncludesShadersStore[L]||(e.IncludesShadersStore[L]=ce);const g="pbrBlockNormalGeometric",le=`vec3 viewDirectionW=normalize(vEyePosition.xyz-vPositionW);
2222
+ #ifdef NORMAL
2223
+ vec3 normalW=normalize(vNormalW);
2224
+ #else
2225
+ vec3 normalW=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;
2226
+ #endif
2227
+ vec3 geometricNormalW=normalW;
2228
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
2229
+ geometricNormalW=gl_FrontFacing ? geometricNormalW : -geometricNormalW;
2230
+ #endif
2231
+ `;e.IncludesShadersStore[g]||(e.IncludesShadersStore[g]=le);const _="pbrBlockNormalFinal",de=`#if defined(FORCENORMALFORWARD) && defined(NORMAL)
2232
+ vec3 faceNormal=normalize(cross(dFdx(vPositionW),dFdy(vPositionW)))*vEyePosition.w;
2233
+ #if defined(TWOSIDEDLIGHTING)
2234
+ faceNormal=gl_FrontFacing ? faceNormal : -faceNormal;
2235
+ #endif
2236
+ normalW*=sign(dot(normalW,faceNormal));
2237
+ #endif
2238
+ #if defined(TWOSIDEDLIGHTING) && defined(NORMAL)
2239
+ #if defined(MIRRORED)
2240
+ normalW=gl_FrontFacing ? -normalW : normalW;
2241
+ #else
2242
+ normalW=gl_FrontFacing ? normalW : -normalW;
2243
+ #endif
2244
+ #endif
2245
+ `;e.IncludesShadersStore[_]||(e.IncludesShadersStore[_]=de);const h="pbrBlockLightmapInit",se=`#ifdef LIGHTMAP
2246
+ vec4 lightmapColor=texture2D(lightmapSampler,vLightmapUV+uvOffset);
2247
+ #ifdef RGBDLIGHTMAP
2248
+ lightmapColor.rgb=fromRGBD(lightmapColor);
2249
+ #endif
2250
+ #ifdef GAMMALIGHTMAP
2251
+ lightmapColor.rgb=toLinearSpace(lightmapColor.rgb);
2252
+ #endif
2253
+ lightmapColor.rgb*=vLightmapInfos.y;
2254
+ #endif
2255
+ `;e.IncludesShadersStore[h]||(e.IncludesShadersStore[h]=se);const D="pbrBlockGeometryInfo",Ee=`float NdotVUnclamped=dot(normalW,viewDirectionW);float NdotV=absEps(NdotVUnclamped);float alphaG=convertRoughnessToAverageSlope(roughness);vec2 AARoughnessFactors=getAARoughnessFactors(normalW.xyz);
2256
+ #ifdef SPECULARAA
2257
+ alphaG+=AARoughnessFactors.y;
2258
+ #endif
2259
+ #if defined(ENVIRONMENTBRDF)
2260
+ vec3 environmentBrdf=getBRDFLookup(NdotV,roughness);
2261
+ #endif
2262
+ #if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2263
+ #ifdef RADIANCEOCCLUSION
2264
+ #ifdef AMBIENTINGRAYSCALE
2265
+ float ambientMonochrome=aoOut.ambientOcclusionColor.r;
2266
+ #else
2267
+ float ambientMonochrome=getLuminance(aoOut.ambientOcclusionColor);
2268
+ #endif
2269
+ float seo=environmentRadianceOcclusion(ambientMonochrome,NdotVUnclamped);
2270
+ #endif
2271
+ #ifdef HORIZONOCCLUSION
2272
+ #ifdef BUMP
2273
+ #ifdef REFLECTIONMAP_3D
2274
+ float eho=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
2275
+ #endif
2276
+ #endif
2277
+ #endif
2278
+ #endif
2279
+ `;e.IncludesShadersStore[D]||(e.IncludesShadersStore[D]=Ee);const M="pbrBlockReflectance",Re=`#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2280
+ vec3 baseSpecularEnvironmentReflectance=getReflectanceFromBRDFLookup(vec3(reflectanceF0),reflectivityOut.reflectanceF90,environmentBrdf);
2281
+ #if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
2282
+ vec3 metalEnvironmentReflectance=reflectivityOut.specularWeight*getF82Specular(NdotV,clearcoatOut.specularEnvironmentR0,reflectivityOut.colorReflectanceF90,reflectivityOut.roughness);vec3 dielectricEnvironmentReflectance=getReflectanceFromBRDFLookup(reflectivityOut.dielectricColorF0,reflectivityOut.colorReflectanceF90,environmentBrdf);vec3 colorSpecularEnvironmentReflectance=mix(dielectricEnvironmentReflectance,metalEnvironmentReflectance,reflectivityOut.metallic);
2283
+ #else
2284
+ vec3 colorSpecularEnvironmentReflectance=getReflectanceFromBRDFLookup(clearcoatOut.specularEnvironmentR0,reflectivityOut.colorReflectanceF90,environmentBrdf);
2285
+ #endif
2286
+ #ifdef RADIANCEOCCLUSION
2287
+ colorSpecularEnvironmentReflectance*=seo;
2288
+ #endif
2289
+ #ifdef HORIZONOCCLUSION
2290
+ #ifdef BUMP
2291
+ #ifdef REFLECTIONMAP_3D
2292
+ colorSpecularEnvironmentReflectance*=eho;
2293
+ #endif
2294
+ #endif
2295
+ #endif
2296
+ #else
2297
+ vec3 colorSpecularEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(NdotV,clearcoatOut.specularEnvironmentR0,specularEnvironmentR90,sqrt(microSurface));vec3 baseSpecularEnvironmentReflectance=getReflectanceFromAnalyticalBRDFLookup_Jones(NdotV,vec3(reflectanceF0),reflectivityOut.reflectanceF90,sqrt(microSurface));
2298
+ #endif
2299
+ #ifdef CLEARCOAT
2300
+ colorSpecularEnvironmentReflectance*=clearcoatOut.conservationFactor;
2301
+ #if defined(CLEARCOAT_TINT)
2302
+ colorSpecularEnvironmentReflectance*=clearcoatOut.absorption;
2303
+ #endif
2304
+ #endif
2305
+ `;e.IncludesShadersStore[M]||(e.IncludesShadersStore[M]=Re);const F="pbrBlockDirectLighting",ue=`vec3 diffuseBase=vec3(0.,0.,0.);
2306
+ #ifdef SS_TRANSLUCENCY
2307
+ vec3 diffuseTransmissionBase=vec3(0.,0.,0.);
2308
+ #endif
2309
+ #ifdef SPECULARTERM
2310
+ vec3 specularBase=vec3(0.,0.,0.);
2311
+ #endif
2312
+ #ifdef CLEARCOAT
2313
+ vec3 clearCoatBase=vec3(0.,0.,0.);
2314
+ #endif
2315
+ #ifdef SHEEN
2316
+ vec3 sheenBase=vec3(0.,0.,0.);
2317
+ #endif
2318
+ #if defined(SPECULARTERM) && defined(LIGHT0)
2319
+ vec3 coloredFresnel;
2320
+ #endif
2321
+ preLightingInfo preInfo;lightingInfo info;float shadow=1.;
2322
+ float aggShadow=0.;float numLights=0.;
2323
+ #if defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
2324
+ vec3 absorption=vec3(0.);
2325
+ #endif
2326
+ `;e.IncludesShadersStore[F]||(e.IncludesShadersStore[F]=ue);const P="pbrBlockFinalLitComponents",Ce=`aggShadow=aggShadow/numLights;
2327
+ #if defined(ENVIRONMENTBRDF)
2328
+ #ifdef MS_BRDF_ENERGY_CONSERVATION
2329
+ vec3 baseSpecularEnergyConservationFactor=getEnergyConservationFactor(vec3(reflectanceF0),environmentBrdf);vec3 coloredEnergyConservationFactor=getEnergyConservationFactor(clearcoatOut.specularEnvironmentR0,environmentBrdf);
2330
+ #endif
2331
+ #endif
2332
+ #if defined(SHEEN) && defined(SHEEN_ALBEDOSCALING) && defined(ENVIRONMENTBRDF)
2333
+ surfaceAlbedo.rgb=sheenOut.sheenAlbedoScaling*surfaceAlbedo.rgb;
2334
+ #endif
2335
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
2336
+ #ifndef METALLICWORKFLOW
2337
+ #ifdef SPECULAR_GLOSSINESS_ENERGY_CONSERVATION
2338
+ surfaceAlbedo.rgb=(1.-reflectanceF0)*surfaceAlbedo.rgb;
2339
+ #endif
2340
+ #endif
2341
+ #endif
2342
+ #ifdef REFLECTION
2343
+ vec3 finalIrradiance=reflectionOut.environmentIrradiance;
2344
+ #ifndef LEGACY_SPECULAR_ENERGY_CONSERVATION
2345
+ #if defined(METALLICWORKFLOW) || defined(SPECULAR_GLOSSINESS_ENERGY_CONSERVATION)
2346
+ vec3 baseSpecularEnergy=vec3(baseSpecularEnvironmentReflectance);
2347
+ #if defined(ENVIRONMENTBRDF)
2348
+ #ifdef MS_BRDF_ENERGY_CONSERVATION
2349
+ baseSpecularEnergy*=baseSpecularEnergyConservationFactor;
2350
+ #endif
2351
+ #endif
2352
+ finalIrradiance*=clamp(vec3(1.0)-baseSpecularEnergy,0.0,1.0);
2353
+ #endif
2354
+ #endif
2355
+ #if defined(CLEARCOAT)
2356
+ finalIrradiance*=clearcoatOut.conservationFactor;
2357
+ #if defined(CLEARCOAT_TINT)
2358
+ finalIrradiance*=clearcoatOut.absorption;
2359
+ #endif
2360
+ #endif
2361
+ #ifndef SS_APPLY_ALBEDO_AFTER_SUBSURFACE
2362
+ finalIrradiance*=surfaceAlbedo.rgb;
2363
+ #endif
2364
+ #if defined(SS_REFRACTION)
2365
+ finalIrradiance*=subSurfaceOut.refractionOpacity;
2366
+ #endif
2367
+ #if defined(SS_TRANSLUCENCY)
2368
+ finalIrradiance*=(1.0-subSurfaceOut.translucencyIntensity);finalIrradiance+=subSurfaceOut.refractionIrradiance;
2369
+ #endif
2370
+ #ifdef SS_APPLY_ALBEDO_AFTER_SUBSURFACE
2371
+ finalIrradiance*=surfaceAlbedo.rgb;
2372
+ #endif
2373
+ finalIrradiance*=vLightingIntensity.z;finalIrradiance*=aoOut.ambientOcclusionColor;
2374
+ #endif
2375
+ #ifdef SPECULARTERM
2376
+ vec3 finalSpecular=specularBase;finalSpecular=max(finalSpecular,0.0);vec3 finalSpecularScaled=finalSpecular*vLightingIntensity.x*vLightingIntensity.w;
2377
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
2378
+ finalSpecularScaled*=coloredEnergyConservationFactor;
2379
+ #endif
2380
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
2381
+ finalSpecularScaled*=sheenOut.sheenAlbedoScaling;
2382
+ #endif
2383
+ #endif
2384
+ #ifdef REFLECTION
2385
+ vec3 finalRadiance=reflectionOut.environmentRadiance.rgb;finalRadiance*=colorSpecularEnvironmentReflectance;vec3 finalRadianceScaled=finalRadiance*vLightingIntensity.z;
2386
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
2387
+ finalRadianceScaled*=coloredEnergyConservationFactor;
2388
+ #endif
2389
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF) && defined(SHEEN_ALBEDOSCALING)
2390
+ finalRadianceScaled*=sheenOut.sheenAlbedoScaling;
2391
+ #endif
2392
+ #endif
2393
+ #ifdef SHEEN
2394
+ vec3 finalSheen=sheenBase*sheenOut.sheenColor;finalSheen=max(finalSheen,0.0);vec3 finalSheenScaled=finalSheen*vLightingIntensity.x*vLightingIntensity.w;
2395
+ #if defined(CLEARCOAT) && defined(REFLECTION) && defined(ENVIRONMENTBRDF)
2396
+ sheenOut.finalSheenRadianceScaled*=clearcoatOut.conservationFactor;
2397
+ #if defined(CLEARCOAT_TINT)
2398
+ sheenOut.finalSheenRadianceScaled*=clearcoatOut.absorption;
2399
+ #endif
2400
+ #endif
2401
+ #endif
2402
+ #ifdef CLEARCOAT
2403
+ vec3 finalClearCoat=clearCoatBase;finalClearCoat=max(finalClearCoat,0.0);vec3 finalClearCoatScaled=finalClearCoat*vLightingIntensity.x*vLightingIntensity.w;
2404
+ #if defined(ENVIRONMENTBRDF) && defined(MS_BRDF_ENERGY_CONSERVATION)
2405
+ finalClearCoatScaled*=clearcoatOut.energyConservationFactorClearCoat;
2406
+ #endif
2407
+ #ifdef SS_REFRACTION
2408
+ subSurfaceOut.finalRefraction*=clearcoatOut.conservationFactor;
2409
+ #ifdef CLEARCOAT_TINT
2410
+ subSurfaceOut.finalRefraction*=clearcoatOut.absorption;
2411
+ #endif
2412
+ #endif
2413
+ #endif
2414
+ #ifdef ALPHABLEND
2415
+ float luminanceOverAlpha=0.0;
2416
+ #if defined(REFLECTION) && defined(RADIANCEOVERALPHA)
2417
+ luminanceOverAlpha+=getLuminance(finalRadianceScaled);
2418
+ #if defined(CLEARCOAT)
2419
+ luminanceOverAlpha+=getLuminance(clearcoatOut.finalClearCoatRadianceScaled);
2420
+ #endif
2421
+ #endif
2422
+ #if defined(SPECULARTERM) && defined(SPECULAROVERALPHA)
2423
+ luminanceOverAlpha+=getLuminance(finalSpecularScaled);
2424
+ #endif
2425
+ #if defined(CLEARCOAT) && defined(CLEARCOATOVERALPHA)
2426
+ luminanceOverAlpha+=getLuminance(finalClearCoatScaled);
2427
+ #endif
2428
+ #if defined(RADIANCEOVERALPHA) || defined(SPECULAROVERALPHA) || defined(CLEARCOATOVERALPHA)
2429
+ alpha=saturate(alpha+luminanceOverAlpha*luminanceOverAlpha);
2430
+ #endif
2431
+ #endif
2432
+ `;e.IncludesShadersStore[P]||(e.IncludesShadersStore[P]=Ce);const U="pbrBlockFinalUnlitComponents",Se=`vec3 finalDiffuse=diffuseBase;finalDiffuse*=surfaceAlbedo;
2433
+ #if defined(SS_REFRACTION) && !defined(UNLIT) && !defined(LEGACY_SPECULAR_ENERGY_CONSERVATION)
2434
+ finalDiffuse*=subSurfaceOut.refractionOpacity;
2435
+ #endif
2436
+ #if defined(SS_TRANSLUCENCY) && !defined(UNLIT)
2437
+ finalDiffuse+=diffuseTransmissionBase;
2438
+ #endif
2439
+ finalDiffuse=max(finalDiffuse,0.0);finalDiffuse*=vLightingIntensity.x;vec3 finalAmbient=vAmbientColor;finalAmbient*=surfaceAlbedo.rgb;vec3 finalEmissive=vEmissiveColor;
2440
+ #ifdef EMISSIVE
2441
+ vec3 emissiveColorTex=texture2D(emissiveSampler,vEmissiveUV+uvOffset).rgb;
2442
+ #ifdef GAMMAEMISSIVE
2443
+ finalEmissive*=toLinearSpace(emissiveColorTex.rgb);
2444
+ #else
2445
+ finalEmissive*=emissiveColorTex.rgb;
2446
+ #endif
2447
+ finalEmissive*= vEmissiveInfos.y;
2448
+ #endif
2449
+ finalEmissive*=vLightingIntensity.y;
2450
+ #ifdef AMBIENT
2451
+ vec3 ambientOcclusionForDirectDiffuse=mix(vec3(1.),aoOut.ambientOcclusionColor,vAmbientInfos.w);
2452
+ #else
2453
+ vec3 ambientOcclusionForDirectDiffuse=aoOut.ambientOcclusionColor;
2454
+ #endif
2455
+ finalAmbient*=aoOut.ambientOcclusionColor;finalDiffuse*=ambientOcclusionForDirectDiffuse;
2456
+ `;e.IncludesShadersStore[U]||(e.IncludesShadersStore[U]=Se);const b="pbrBlockFinalColorComposition",me=`vec4 finalColor=vec4(
2457
+ #ifndef UNLIT
2458
+ #ifdef REFLECTION
2459
+ finalIrradiance +
2460
+ #endif
2461
+ #ifdef SPECULARTERM
2462
+ finalSpecularScaled +
2463
+ #endif
2464
+ #ifdef SHEEN
2465
+ finalSheenScaled +
2466
+ #endif
2467
+ #ifdef CLEARCOAT
2468
+ finalClearCoatScaled +
2469
+ #endif
2470
+ #ifdef REFLECTION
2471
+ finalRadianceScaled +
2472
+ #if defined(SHEEN) && defined(ENVIRONMENTBRDF)
2473
+ sheenOut.finalSheenRadianceScaled +
2474
+ #endif
2475
+ #ifdef CLEARCOAT
2476
+ clearcoatOut.finalClearCoatRadianceScaled +
2477
+ #endif
2478
+ #endif
2479
+ #ifdef SS_REFRACTION
2480
+ subSurfaceOut.finalRefraction +
2481
+ #endif
2482
+ #endif
2483
+ finalAmbient +
2484
+ finalDiffuse,
2485
+ alpha);
2486
+ #ifdef LIGHTMAP
2487
+ #ifndef LIGHTMAPEXCLUDED
2488
+ #ifdef USELIGHTMAPASSHADOWMAP
2489
+ finalColor.rgb*=lightmapColor.rgb;
2490
+ #else
2491
+ finalColor.rgb+=lightmapColor.rgb;
2492
+ #endif
2493
+ #endif
2494
+ #endif
2495
+ finalColor.rgb+=finalEmissive;
2496
+ #define CUSTOM_FRAGMENT_BEFORE_FOG
2497
+ finalColor=max(finalColor,0.0);
2498
+ `;e.IncludesShadersStore[b]||(e.IncludesShadersStore[b]=me);const B="pbrBlockImageProcessing",Ae=`#if defined(IMAGEPROCESSINGPOSTPROCESS) || defined(SS_SCATTERING)
2499
+ #if !defined(SKIPFINALCOLORCLAMP)
2500
+ finalColor.rgb=clamp(finalColor.rgb,0.,30.0);
2501
+ #endif
2502
+ #else
2503
+ finalColor=applyImageProcessing(finalColor);
2504
+ #endif
2505
+ finalColor.a*=visibility;
2506
+ #ifdef PREMULTIPLYALPHA
2507
+ finalColor.rgb*=finalColor.a;
2508
+ #endif
2509
+ `;e.IncludesShadersStore[B]||(e.IncludesShadersStore[B]=Ae);const y="pbrBlockPrePass",Ie=`#if SCENE_MRT_COUNT>0
2510
+ float writeGeometryInfo=finalColor.a>ALPHATESTVALUE ? 1.0 : 0.0;
2511
+ #ifdef PREPASS_POSITION
2512
+ gl_FragData[PREPASS_POSITION_INDEX]=vec4(vPositionW,writeGeometryInfo);
2513
+ #endif
2514
+ #ifdef PREPASS_LOCAL_POSITION
2515
+ gl_FragData[PREPASS_LOCAL_POSITION_INDEX]=vec4(vPosition,writeGeometryInfo);
2516
+ #endif
2517
+ #if defined(PREPASS_VELOCITY)
2518
+ vec2 a=(vCurrentPosition.xy/vCurrentPosition.w)*0.5+0.5;vec2 b=(vPreviousPosition.xy/vPreviousPosition.w)*0.5+0.5;vec2 velocity=abs(a-b);velocity=vec2(pow(velocity.x,1.0/3.0),pow(velocity.y,1.0/3.0))*sign(a-b)*0.5+0.5;gl_FragData[PREPASS_VELOCITY_INDEX]=vec4(velocity,0.0,writeGeometryInfo);
2519
+ #elif defined(PREPASS_VELOCITY_LINEAR)
2520
+ vec2 velocity=vec2(0.5)*((vPreviousPosition.xy/vPreviousPosition.w)-(vCurrentPosition.xy/vCurrentPosition.w));gl_FragData[PREPASS_VELOCITY_LINEAR_INDEX]=vec4(velocity,0.0,writeGeometryInfo);
2521
+ #endif
2522
+ #ifdef PREPASS_ALBEDO
2523
+ gl_FragData[PREPASS_ALBEDO_INDEX]=vec4(surfaceAlbedo,writeGeometryInfo);
2524
+ #endif
2525
+ #ifdef PREPASS_ALBEDO_SQRT
2526
+ vec3 sqAlbedo=sqrt(surfaceAlbedo);
2527
+ #endif
2528
+ #ifdef PREPASS_IRRADIANCE
2529
+ vec3 irradiance=finalDiffuse;
2530
+ #ifndef UNLIT
2531
+ #ifdef REFLECTION
2532
+ irradiance+=finalIrradiance;
2533
+ #endif
2534
+ #endif
2535
+ #ifdef SS_SCATTERING
2536
+ #ifdef PREPASS_COLOR
2537
+ gl_FragData[PREPASS_COLOR_INDEX]=vec4(finalColor.rgb-irradiance,finalColor.a);
2538
+ #endif
2539
+ irradiance/=sqAlbedo;
2540
+ #else
2541
+ #ifdef PREPASS_COLOR
2542
+ gl_FragData[PREPASS_COLOR_INDEX]=finalColor;
2543
+ #endif
2544
+ float scatteringDiffusionProfile=255.;
2545
+ #endif
2546
+ gl_FragData[PREPASS_IRRADIANCE_INDEX]=vec4(clamp(irradiance,vec3(0.),vec3(1.)),writeGeometryInfo*scatteringDiffusionProfile/255.);
2547
+ #elif defined(PREPASS_COLOR)
2548
+ gl_FragData[PREPASS_COLOR_INDEX]=vec4(finalColor.rgb,finalColor.a);
2549
+ #endif
2550
+ #ifdef PREPASS_DEPTH
2551
+ gl_FragData[PREPASS_DEPTH_INDEX]=vec4(vViewPos.z,0.0,0.0,writeGeometryInfo);
2552
+ #endif
2553
+ #ifdef PREPASS_SCREENSPACE_DEPTH
2554
+ gl_FragData[PREPASS_SCREENSPACE_DEPTH_INDEX]=vec4(gl_FragCoord.z,0.0,0.0,writeGeometryInfo);
2555
+ #endif
2556
+ #ifdef PREPASS_NORMALIZED_VIEW_DEPTH
2557
+ gl_FragData[PREPASS_NORMALIZED_VIEW_DEPTH_INDEX]=vec4(vNormViewDepth,0.0,0.0,writeGeometryInfo);
2558
+ #endif
2559
+ #ifdef PREPASS_NORMAL
2560
+ #ifdef PREPASS_NORMAL_WORLDSPACE
2561
+ gl_FragData[PREPASS_NORMAL_INDEX]=vec4(normalW,writeGeometryInfo);
2562
+ #else
2563
+ gl_FragData[PREPASS_NORMAL_INDEX]=vec4(normalize((view*vec4(normalW,0.0)).rgb),writeGeometryInfo);
2564
+ #endif
2565
+ #endif
2566
+ #ifdef PREPASS_WORLD_NORMAL
2567
+ gl_FragData[PREPASS_WORLD_NORMAL_INDEX]=vec4(normalW*0.5+0.5,writeGeometryInfo);
2568
+ #endif
2569
+ #ifdef PREPASS_ALBEDO_SQRT
2570
+ gl_FragData[PREPASS_ALBEDO_SQRT_INDEX]=vec4(sqAlbedo,writeGeometryInfo);
2571
+ #endif
2572
+ #ifdef PREPASS_REFLECTIVITY
2573
+ #ifndef UNLIT
2574
+ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4(specularEnvironmentR0,microSurface)*writeGeometryInfo;
2575
+ #else
2576
+ gl_FragData[PREPASS_REFLECTIVITY_INDEX]=vec4( 0.0,0.0,0.0,1.0 )*writeGeometryInfo;
2577
+ #endif
2578
+ #endif
2579
+ #endif
2580
+ `;e.IncludesShadersStore[y]||(e.IncludesShadersStore[y]=Ie);const G="pbrDebug",ve=`#if DEBUGMODE>0
2581
+ if (vClipSpacePosition.x/vClipSpacePosition.w>=vDebugMode.x) {
2582
+ #if DEBUGMODE==1
2583
+ gl_FragColor.rgb=vPositionW.rgb;
2584
+ #define DEBUGMODE_NORMALIZE
2585
+ #elif DEBUGMODE==2 && defined(NORMAL)
2586
+ gl_FragColor.rgb=vNormalW.rgb;
2587
+ #define DEBUGMODE_NORMALIZE
2588
+ #elif DEBUGMODE==3 && defined(BUMP) || DEBUGMODE==3 && defined(PARALLAX) || DEBUGMODE==3 && defined(ANISOTROPIC)
2589
+ gl_FragColor.rgb=TBN[0];
2590
+ #define DEBUGMODE_NORMALIZE
2591
+ #elif DEBUGMODE==4 && defined(BUMP) || DEBUGMODE==4 && defined(PARALLAX) || DEBUGMODE==4 && defined(ANISOTROPIC)
2592
+ gl_FragColor.rgb=TBN[1];
2593
+ #define DEBUGMODE_NORMALIZE
2594
+ #elif DEBUGMODE==5
2595
+ gl_FragColor.rgb=normalW;
2596
+ #define DEBUGMODE_NORMALIZE
2597
+ #elif DEBUGMODE==6 && defined(MAINUV1)
2598
+ gl_FragColor.rgb=vec3(vMainUV1,0.0);
2599
+ #elif DEBUGMODE==7 && defined(MAINUV2)
2600
+ gl_FragColor.rgb=vec3(vMainUV2,0.0);
2601
+ #elif DEBUGMODE==8 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
2602
+ gl_FragColor.rgb=clearcoatOut.TBNClearCoat[0];
2603
+ #define DEBUGMODE_NORMALIZE
2604
+ #elif DEBUGMODE==9 && defined(CLEARCOAT) && defined(CLEARCOAT_BUMP)
2605
+ gl_FragColor.rgb=clearcoatOut.TBNClearCoat[1];
2606
+ #define DEBUGMODE_NORMALIZE
2607
+ #elif DEBUGMODE==10 && defined(CLEARCOAT)
2608
+ gl_FragColor.rgb=clearcoatOut.clearCoatNormalW;
2609
+ #define DEBUGMODE_NORMALIZE
2610
+ #elif DEBUGMODE==11 && defined(ANISOTROPIC)
2611
+ gl_FragColor.rgb=anisotropicOut.anisotropicNormal;
2612
+ #define DEBUGMODE_NORMALIZE
2613
+ #elif DEBUGMODE==12 && defined(ANISOTROPIC)
2614
+ gl_FragColor.rgb=anisotropicOut.anisotropicTangent;
2615
+ #define DEBUGMODE_NORMALIZE
2616
+ #elif DEBUGMODE==13 && defined(ANISOTROPIC)
2617
+ gl_FragColor.rgb=anisotropicOut.anisotropicBitangent;
2618
+ #define DEBUGMODE_NORMALIZE
2619
+ #elif DEBUGMODE==20 && defined(ALBEDO)
2620
+ gl_FragColor.rgb=albedoTexture.rgb;
2621
+ #ifndef GAMMAALBEDO
2622
+ #define DEBUGMODE_GAMMA
2623
+ #endif
2624
+ #elif DEBUGMODE==21 && defined(AMBIENT)
2625
+ gl_FragColor.rgb=aoOut.ambientOcclusionColorMap.rgb;
2626
+ #elif DEBUGMODE==22 && defined(OPACITY)
2627
+ gl_FragColor.rgb=opacityMap.rgb;
2628
+ #elif DEBUGMODE==23 && defined(EMISSIVE)
2629
+ gl_FragColor.rgb=emissiveColorTex.rgb;
2630
+ #ifndef GAMMAEMISSIVE
2631
+ #define DEBUGMODE_GAMMA
2632
+ #endif
2633
+ #elif DEBUGMODE==24 && defined(LIGHTMAP)
2634
+ gl_FragColor.rgb=lightmapColor.rgb;
2635
+ #ifndef GAMMALIGHTMAP
2636
+ #define DEBUGMODE_GAMMA
2637
+ #endif
2638
+ #elif DEBUGMODE==25 && defined(REFLECTIVITY) && defined(METALLICWORKFLOW)
2639
+ gl_FragColor.rgb=reflectivityOut.surfaceMetallicColorMap.rgb;
2640
+ #elif DEBUGMODE==26 && defined(REFLECTIVITY) && !defined(METALLICWORKFLOW)
2641
+ gl_FragColor.rgb=reflectivityOut.surfaceReflectivityColorMap.rgb;
2642
+ #define DEBUGMODE_GAMMA
2643
+ #elif DEBUGMODE==27 && defined(CLEARCOAT) && defined(CLEARCOAT_TEXTURE)
2644
+ gl_FragColor.rgb=vec3(clearcoatOut.clearCoatMapData.rg,0.0);
2645
+ #elif DEBUGMODE==28 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
2646
+ gl_FragColor.rgb=clearcoatOut.clearCoatTintMapData.rgb;
2647
+ #elif DEBUGMODE==29 && defined(SHEEN) && defined(SHEEN_TEXTURE)
2648
+ gl_FragColor.rgb=sheenOut.sheenMapData.rgb;
2649
+ #elif DEBUGMODE==30 && defined(ANISOTROPIC) && defined(ANISOTROPIC_TEXTURE)
2650
+ gl_FragColor.rgb=anisotropicOut.anisotropyMapData.rgb;
2651
+ #elif DEBUGMODE==31 && defined(SUBSURFACE) && defined(SS_THICKNESSANDMASK_TEXTURE)
2652
+ gl_FragColor.rgb=subSurfaceOut.thicknessMap.rgb;
2653
+ #elif DEBUGMODE==32 && defined(BUMP)
2654
+ gl_FragColor.rgb=texture2D(bumpSampler,vBumpUV).rgb;
2655
+ #elif DEBUGMODE==40 && defined(SS_REFRACTION)
2656
+ gl_FragColor.rgb=subSurfaceOut.environmentRefraction.rgb;
2657
+ #define DEBUGMODE_GAMMA
2658
+ #elif DEBUGMODE==41 && defined(REFLECTION)
2659
+ gl_FragColor.rgb=reflectionOut.environmentRadiance.rgb;
2660
+ #ifndef GAMMAREFLECTION
2661
+ #define DEBUGMODE_GAMMA
2662
+ #endif
2663
+ #elif DEBUGMODE==42 && defined(CLEARCOAT) && defined(REFLECTION)
2664
+ gl_FragColor.rgb=clearcoatOut.environmentClearCoatRadiance.rgb;
2665
+ #define DEBUGMODE_GAMMA
2666
+ #elif DEBUGMODE==50
2667
+ gl_FragColor.rgb=diffuseBase.rgb;
2668
+ #define DEBUGMODE_GAMMA
2669
+ #elif DEBUGMODE==51 && defined(SPECULARTERM)
2670
+ gl_FragColor.rgb=specularBase.rgb;
2671
+ #define DEBUGMODE_GAMMA
2672
+ #elif DEBUGMODE==52 && defined(CLEARCOAT)
2673
+ gl_FragColor.rgb=clearCoatBase.rgb;
2674
+ #define DEBUGMODE_GAMMA
2675
+ #elif DEBUGMODE==53 && defined(SHEEN)
2676
+ gl_FragColor.rgb=sheenBase.rgb;
2677
+ #define DEBUGMODE_GAMMA
2678
+ #elif DEBUGMODE==54 && defined(REFLECTION)
2679
+ gl_FragColor.rgb=reflectionOut.environmentIrradiance.rgb;
2680
+ #ifndef GAMMAREFLECTION
2681
+ #define DEBUGMODE_GAMMA
2682
+ #endif
2683
+ #elif DEBUGMODE==60
2684
+ gl_FragColor.rgb=surfaceAlbedo.rgb;
2685
+ #define DEBUGMODE_GAMMA
2686
+ #elif DEBUGMODE==61
2687
+ gl_FragColor.rgb=clearcoatOut.specularEnvironmentR0;
2688
+ #define DEBUGMODE_GAMMA
2689
+ #elif DEBUGMODE==62 && defined(METALLICWORKFLOW)
2690
+ gl_FragColor.rgb=vec3(reflectivityOut.metallic);
2691
+ #elif DEBUGMODE==71 && defined(METALLICWORKFLOW)
2692
+ gl_FragColor.rgb=reflectivityOut.metallicF0;
2693
+ #elif DEBUGMODE==63
2694
+ gl_FragColor.rgb=vec3(roughness);
2695
+ #elif DEBUGMODE==64
2696
+ gl_FragColor.rgb=vec3(alphaG);
2697
+ #elif DEBUGMODE==65
2698
+ gl_FragColor.rgb=vec3(NdotV);
2699
+ #elif DEBUGMODE==66 && defined(CLEARCOAT) && defined(CLEARCOAT_TINT)
2700
+ gl_FragColor.rgb=clearcoatOut.clearCoatColor.rgb;
2701
+ #define DEBUGMODE_GAMMA
2702
+ #elif DEBUGMODE==67 && defined(CLEARCOAT)
2703
+ gl_FragColor.rgb=vec3(clearcoatOut.clearCoatRoughness);
2704
+ #elif DEBUGMODE==68 && defined(CLEARCOAT)
2705
+ gl_FragColor.rgb=vec3(clearcoatOut.clearCoatNdotV);
2706
+ #elif DEBUGMODE==69 && defined(SUBSURFACE) && defined(SS_TRANSLUCENCY)
2707
+ gl_FragColor.rgb=subSurfaceOut.transmittance;
2708
+ #elif DEBUGMODE==70 && defined(SUBSURFACE) && defined(SS_REFRACTION)
2709
+ gl_FragColor.rgb=subSurfaceOut.refractionTransmittance;
2710
+ #elif DEBUGMODE==72
2711
+ gl_FragColor.rgb=vec3(microSurface);
2712
+ #elif DEBUGMODE==73
2713
+ gl_FragColor.rgb=vAlbedoColor.rgb;
2714
+ #define DEBUGMODE_GAMMA
2715
+ #elif DEBUGMODE==74 && !defined(METALLICWORKFLOW)
2716
+ gl_FragColor.rgb=vReflectivityColor.rgb;
2717
+ #define DEBUGMODE_GAMMA
2718
+ #elif DEBUGMODE==75
2719
+ gl_FragColor.rgb=vEmissiveColor.rgb;
2720
+ #define DEBUGMODE_GAMMA
2721
+ #elif DEBUGMODE==80 && defined(RADIANCEOCCLUSION)
2722
+ gl_FragColor.rgb=vec3(seo);
2723
+ #elif DEBUGMODE==81 && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
2724
+ gl_FragColor.rgb=vec3(eho);
2725
+ #elif DEBUGMODE==82 && defined(MS_BRDF_ENERGY_CONSERVATION)
2726
+ gl_FragColor.rgb=vec3(energyConservationFactor);
2727
+ #elif DEBUGMODE==83 && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2728
+ gl_FragColor.rgb=baseSpecularEnvironmentReflectance;
2729
+ #define DEBUGMODE_GAMMA
2730
+ #elif DEBUGMODE==84 && defined(CLEARCOAT) && defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
2731
+ gl_FragColor.rgb=clearcoatOut.clearCoatEnvironmentReflectance;
2732
+ #define DEBUGMODE_GAMMA
2733
+ #elif DEBUGMODE==85 && defined(SHEEN) && defined(REFLECTION)
2734
+ gl_FragColor.rgb=sheenOut.sheenEnvironmentReflectance;
2735
+ #define DEBUGMODE_GAMMA
2736
+ #elif DEBUGMODE==86 && defined(ALPHABLEND)
2737
+ gl_FragColor.rgb=vec3(luminanceOverAlpha);
2738
+ #elif DEBUGMODE==87
2739
+ gl_FragColor.rgb=vec3(alpha);
2740
+ #elif DEBUGMODE==88 && defined(ALBEDO)
2741
+ gl_FragColor.rgb=vec3(albedoTexture.a);
2742
+ #elif DEBUGMODE==89
2743
+ gl_FragColor.rgb=aoOut.ambientOcclusionColor.rgb;
2744
+ #else
2745
+ float stripeWidth=30.;float stripePos=floor(gl_FragCoord.x/stripeWidth);float whichColor=mod(stripePos,2.);vec3 color1=vec3(.6,.2,.2);vec3 color2=vec3(.3,.1,.1);gl_FragColor.rgb=mix(color1,color2,whichColor);
2746
+ #endif
2747
+ gl_FragColor.rgb*=vDebugMode.y;
2748
+ #ifdef DEBUGMODE_NORMALIZE
2749
+ gl_FragColor.rgb=normalize(gl_FragColor.rgb)*0.5+0.5;
2750
+ #endif
2751
+ #ifdef DEBUGMODE_GAMMA
2752
+ gl_FragColor.rgb=toGammaSpace(gl_FragColor.rgb);
2753
+ #endif
2754
+ gl_FragColor.a=1.0;
2755
+ #ifdef PREPASS
2756
+ gl_FragData[0]=toLinearSpace(gl_FragColor);
2757
+ gl_FragData[1]=vec4(0.,0.,0.,0.);
2758
+ #endif
2759
+ #ifdef DEBUGMODE_FORCERETURN
2760
+ return;
2761
+ #endif
2762
+ }
2763
+ #endif
2764
+ `;e.IncludesShadersStore[G]||(e.IncludesShadersStore[G]=ve);const i="pbrPixelShader",V=`#define PBR_FRAGMENT_SHADER
2765
+ #define CUSTOM_FRAGMENT_EXTENSION
2766
+ #if defined(BUMP) || !defined(NORMAL) || defined(FORCENORMALFORWARD) || defined(SPECULARAA) || defined(CLEARCOAT_BUMP) || defined(ANISOTROPIC)
2767
+ #extension GL_OES_standard_derivatives : enable
2768
+ #endif
2769
+ #ifdef LODBASEDMICROSFURACE
2770
+ #extension GL_EXT_shader_texture_lod : enable
2771
+ #endif
2772
+ #define CUSTOM_FRAGMENT_BEGIN
2773
+ #ifdef LOGARITHMICDEPTH
2774
+ #extension GL_EXT_frag_depth : enable
2775
+ #endif
2776
+ #if SCENE_MRT_COUNT>0
2777
+ #include<prePassDeclaration>[SCENE_MRT_COUNT]
2778
+ #endif
2779
+ precision highp float;
2780
+ #include<oitDeclaration>
2781
+ #ifndef FROMLINEARSPACE
2782
+ #define FROMLINEARSPACE
2783
+ #endif
2784
+ #include<__decl__pbrFragment>
2785
+ #include<pbrFragmentExtraDeclaration>
2786
+ #include<__decl__lightFragment>[0..maxSimultaneousLights]
2787
+ #include<pbrFragmentSamplersDeclaration>
2788
+ #include<imageProcessingDeclaration>
2789
+ #include<clipPlaneFragmentDeclaration>
2790
+ #include<logDepthDeclaration>
2791
+ #include<fogFragmentDeclaration>
2792
+ #include<helperFunctions>
2793
+ #include<subSurfaceScatteringFunctions>
2794
+ #include<importanceSampling>
2795
+ #include<pbrHelperFunctions>
2796
+ #include<imageProcessingFunctions>
2797
+ #include<shadowsFragmentFunctions>
2798
+ #include<harmonicsFunctions>
2799
+ #include<pbrDirectLightingSetupFunctions>
2800
+ #include<pbrDirectLightingFalloffFunctions>
2801
+ #include<pbrBRDFFunctions>
2802
+ #include<hdrFilteringFunctions>
2803
+ #include<pbrDirectLightingFunctions>
2804
+ #include<pbrIBLFunctions>
2805
+ #include<bumpFragmentMainFunctions>
2806
+ #include<bumpFragmentFunctions>
2807
+ #ifdef REFLECTION
2808
+ #include<reflectionFunction>
2809
+ #endif
2810
+ #define CUSTOM_FRAGMENT_DEFINITIONS
2811
+ #include<pbrBlockAlbedoOpacity>
2812
+ #include<pbrBlockReflectivity>
2813
+ #include<pbrBlockAmbientOcclusion>
2814
+ #include<pbrBlockAlphaFresnel>
2815
+ #include<pbrBlockAnisotropic>
2816
+ #include<pbrBlockReflection>
2817
+ #include<pbrBlockSheen>
2818
+ #include<pbrBlockClearcoat>
2819
+ #include<pbrBlockIridescence>
2820
+ #include<pbrBlockSubSurface>
2821
+ #include<pbrClusteredLightingFunctions>
2822
+ void main(void) {
2823
+ #define CUSTOM_FRAGMENT_MAIN_BEGIN
2824
+ #include<clipPlaneFragment>
2825
+ #include<pbrBlockNormalGeometric>
2826
+ #include<bumpFragment>
2827
+ #include<pbrBlockNormalFinal>
2828
+ albedoOpacityOutParams albedoOpacityOut;
2829
+ #ifdef ALBEDO
2830
+ vec4 albedoTexture=texture2D(albedoSampler,vAlbedoUV+uvOffset);
2831
+ #endif
2832
+ #ifdef BASE_WEIGHT
2833
+ vec4 baseWeightTexture=texture2D(baseWeightSampler,vBaseWeightUV+uvOffset);
2834
+ #endif
2835
+ #ifdef OPACITY
2836
+ vec4 opacityMap=texture2D(opacitySampler,vOpacityUV+uvOffset);
2837
+ #endif
2838
+ #ifdef DECAL
2839
+ vec4 decalColor=texture2D(decalSampler,vDecalUV+uvOffset);
2840
+ #endif
2841
+ albedoOpacityOut=albedoOpacityBlock(
2842
+ vAlbedoColor
2843
+ #ifdef ALBEDO
2844
+ ,albedoTexture
2845
+ ,vAlbedoInfos
2846
+ #endif
2847
+ ,baseWeight
2848
+ #ifdef BASE_WEIGHT
2849
+ ,baseWeightTexture
2850
+ ,vBaseWeightInfos
2851
+ #endif
2852
+ #ifdef OPACITY
2853
+ ,opacityMap
2854
+ ,vOpacityInfos
2855
+ #endif
2856
+ #ifdef DETAIL
2857
+ ,detailColor
2858
+ ,vDetailInfos
2859
+ #endif
2860
+ #ifdef DECAL
2861
+ ,decalColor
2862
+ ,vDecalInfos
2863
+ #endif
2864
+ );vec3 surfaceAlbedo=albedoOpacityOut.surfaceAlbedo;float alpha=albedoOpacityOut.alpha;
2865
+ #define CUSTOM_FRAGMENT_UPDATE_ALPHA
2866
+ #include<depthPrePass>
2867
+ #define CUSTOM_FRAGMENT_BEFORE_LIGHTS
2868
+ ambientOcclusionOutParams aoOut;
2869
+ #ifdef AMBIENT
2870
+ vec3 ambientOcclusionColorMap=texture2D(ambientSampler,vAmbientUV+uvOffset).rgb;
2871
+ #endif
2872
+ aoOut=ambientOcclusionBlock(
2873
+ #ifdef AMBIENT
2874
+ ambientOcclusionColorMap,
2875
+ vAmbientInfos
2876
+ #endif
2877
+ );
2878
+ #include<pbrBlockLightmapInit>
2879
+ #ifdef UNLIT
2880
+ vec3 diffuseBase=vec3(1.,1.,1.);
2881
+ #else
2882
+ vec3 baseColor=surfaceAlbedo;reflectivityOutParams reflectivityOut;
2883
+ #if defined(REFLECTIVITY)
2884
+ vec4 surfaceMetallicOrReflectivityColorMap=texture2D(reflectivitySampler,vReflectivityUV+uvOffset);vec4 baseReflectivity=surfaceMetallicOrReflectivityColorMap;
2885
+ #ifndef METALLICWORKFLOW
2886
+ #ifdef REFLECTIVITY_GAMMA
2887
+ surfaceMetallicOrReflectivityColorMap=toLinearSpace(surfaceMetallicOrReflectivityColorMap);
2888
+ #endif
2889
+ surfaceMetallicOrReflectivityColorMap.rgb*=vReflectivityInfos.y;
2890
+ #endif
2891
+ #endif
2892
+ #if defined(MICROSURFACEMAP)
2893
+ vec4 microSurfaceTexel=texture2D(microSurfaceSampler,vMicroSurfaceSamplerUV+uvOffset)*vMicroSurfaceSamplerInfos.y;
2894
+ #endif
2895
+ #ifdef METALLICWORKFLOW
2896
+ vec4 metallicReflectanceFactors=vMetallicReflectanceFactors;
2897
+ #ifdef REFLECTANCE
2898
+ vec4 reflectanceFactorsMap=texture2D(reflectanceSampler,vReflectanceUV+uvOffset);
2899
+ #ifdef REFLECTANCE_GAMMA
2900
+ reflectanceFactorsMap=toLinearSpace(reflectanceFactorsMap);
2901
+ #endif
2902
+ metallicReflectanceFactors.rgb*=reflectanceFactorsMap.rgb;
2903
+ #endif
2904
+ #ifdef METALLIC_REFLECTANCE
2905
+ vec4 metallicReflectanceFactorsMap=texture2D(metallicReflectanceSampler,vMetallicReflectanceUV+uvOffset);
2906
+ #ifdef METALLIC_REFLECTANCE_GAMMA
2907
+ metallicReflectanceFactorsMap=toLinearSpace(metallicReflectanceFactorsMap);
2908
+ #endif
2909
+ #ifndef METALLIC_REFLECTANCE_USE_ALPHA_ONLY
2910
+ metallicReflectanceFactors.rgb*=metallicReflectanceFactorsMap.rgb;
2911
+ #endif
2912
+ metallicReflectanceFactors.a*=metallicReflectanceFactorsMap.a;
2913
+ #endif
2914
+ #endif
2915
+ #ifdef BASE_DIFFUSE_ROUGHNESS
2916
+ float baseDiffuseRoughnessTexture=texture2D(baseDiffuseRoughnessSampler,vBaseDiffuseRoughnessUV+uvOffset).r;
2917
+ #endif
2918
+ reflectivityOut=reflectivityBlock(
2919
+ vReflectivityColor
2920
+ #ifdef METALLICWORKFLOW
2921
+ ,surfaceAlbedo
2922
+ ,metallicReflectanceFactors
2923
+ #endif
2924
+ ,baseDiffuseRoughness
2925
+ #ifdef BASE_DIFFUSE_ROUGHNESS
2926
+ ,baseDiffuseRoughnessTexture
2927
+ ,vBaseDiffuseRoughnessInfos
2928
+ #endif
2929
+ #ifdef REFLECTIVITY
2930
+ ,vReflectivityInfos
2931
+ ,surfaceMetallicOrReflectivityColorMap
2932
+ #endif
2933
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
2934
+ ,aoOut.ambientOcclusionColor
2935
+ #endif
2936
+ #ifdef MICROSURFACEMAP
2937
+ ,microSurfaceTexel
2938
+ #endif
2939
+ #ifdef DETAIL
2940
+ ,detailColor
2941
+ ,vDetailInfos
2942
+ #endif
2943
+ );float microSurface=reflectivityOut.microSurface;float roughness=reflectivityOut.roughness;float diffuseRoughness=reflectivityOut.diffuseRoughness;
2944
+ #ifdef METALLICWORKFLOW
2945
+ surfaceAlbedo=reflectivityOut.surfaceAlbedo;
2946
+ #endif
2947
+ #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
2948
+ aoOut.ambientOcclusionColor=reflectivityOut.ambientOcclusionColor;
2949
+ #endif
2950
+ #ifdef ALPHAFRESNEL
2951
+ #if defined(ALPHATEST) || defined(ALPHABLEND)
2952
+ alphaFresnelOutParams alphaFresnelOut;alphaFresnelOut=alphaFresnelBlock(
2953
+ normalW,
2954
+ viewDirectionW,
2955
+ alpha,
2956
+ microSurface
2957
+ );alpha=alphaFresnelOut.alpha;
2958
+ #endif
2959
+ #endif
2960
+ #include<pbrBlockGeometryInfo>
2961
+ #ifdef ANISOTROPIC
2962
+ anisotropicOutParams anisotropicOut;
2963
+ #ifdef ANISOTROPIC_TEXTURE
2964
+ vec3 anisotropyMapData=texture2D(anisotropySampler,vAnisotropyUV+uvOffset).rgb*vAnisotropyInfos.y;
2965
+ #endif
2966
+ anisotropicOut=anisotropicBlock(
2967
+ vAnisotropy,
2968
+ roughness,
2969
+ #ifdef ANISOTROPIC_TEXTURE
2970
+ anisotropyMapData,
2971
+ #endif
2972
+ TBN,
2973
+ normalW,
2974
+ viewDirectionW
2975
+ );
2976
+ #endif
2977
+ #ifdef REFLECTION
2978
+ reflectionOutParams reflectionOut;
2979
+ #ifndef USE_CUSTOM_REFLECTION
2980
+ reflectionOut=reflectionBlock(
2981
+ vPositionW
2982
+ ,normalW
2983
+ ,alphaG
2984
+ ,vReflectionMicrosurfaceInfos
2985
+ ,vReflectionInfos
2986
+ ,vReflectionColor
2987
+ #ifdef ANISOTROPIC
2988
+ ,anisotropicOut
2989
+ #endif
2990
+ #if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
2991
+ ,NdotVUnclamped
2992
+ #endif
2993
+ #ifdef LINEARSPECULARREFLECTION
2994
+ ,roughness
2995
+ #endif
2996
+ ,reflectionSampler
2997
+ #if defined(NORMAL) && defined(USESPHERICALINVERTEX)
2998
+ ,vEnvironmentIrradiance
2999
+ #endif
3000
+ #if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
3001
+ ,reflectionMatrix
3002
+ #endif
3003
+ #ifdef USEIRRADIANCEMAP
3004
+ ,irradianceSampler
3005
+ #ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
3006
+ ,vReflectionDominantDirection
3007
+ #endif
3008
+ #endif
3009
+ #ifndef LODBASEDMICROSFURACE
3010
+ ,reflectionSamplerLow
3011
+ ,reflectionSamplerHigh
3012
+ #endif
3013
+ #ifdef REALTIME_FILTERING
3014
+ ,vReflectionFilteringInfo
3015
+ #ifdef IBL_CDF_FILTERING
3016
+ ,icdfSampler
3017
+ #endif
3018
+ #endif
3019
+ ,viewDirectionW
3020
+ ,diffuseRoughness
3021
+ ,baseColor
3022
+ );
3023
+ #else
3024
+ #define CUSTOM_REFLECTION
3025
+ #endif
3026
+ #endif
3027
+ #include<pbrBlockReflectance0>
3028
+ #ifdef SHEEN
3029
+ sheenOutParams sheenOut;
3030
+ #ifdef SHEEN_TEXTURE
3031
+ vec4 sheenMapData=texture2D(sheenSampler,vSheenUV+uvOffset);
3032
+ #endif
3033
+ #if defined(SHEEN_ROUGHNESS) && defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
3034
+ vec4 sheenMapRoughnessData=texture2D(sheenRoughnessSampler,vSheenRoughnessUV+uvOffset)*vSheenInfos.w;
3035
+ #endif
3036
+ sheenOut=sheenBlock(
3037
+ vSheenColor
3038
+ #ifdef SHEEN_ROUGHNESS
3039
+ ,vSheenRoughness
3040
+ #if defined(SHEEN_TEXTURE_ROUGHNESS) && !defined(SHEEN_USE_ROUGHNESS_FROM_MAINTEXTURE)
3041
+ ,sheenMapRoughnessData
3042
+ #endif
3043
+ #endif
3044
+ ,roughness
3045
+ #ifdef SHEEN_TEXTURE
3046
+ ,sheenMapData
3047
+ ,vSheenInfos.y
3048
+ #endif
3049
+ ,reflectanceF0
3050
+ #ifdef SHEEN_LINKWITHALBEDO
3051
+ ,baseColor
3052
+ ,surfaceAlbedo
3053
+ #endif
3054
+ #ifdef ENVIRONMENTBRDF
3055
+ ,NdotV
3056
+ ,environmentBrdf
3057
+ #endif
3058
+ #if defined(REFLECTION) && defined(ENVIRONMENTBRDF)
3059
+ ,AARoughnessFactors
3060
+ ,vReflectionMicrosurfaceInfos
3061
+ ,vReflectionInfos
3062
+ ,vReflectionColor
3063
+ ,vLightingIntensity
3064
+ ,reflectionSampler
3065
+ ,reflectionOut.reflectionCoords
3066
+ ,NdotVUnclamped
3067
+ #ifndef LODBASEDMICROSFURACE
3068
+ ,reflectionSamplerLow
3069
+ ,reflectionSamplerHigh
3070
+ #endif
3071
+ #ifdef REALTIME_FILTERING
3072
+ ,vReflectionFilteringInfo
3073
+ #endif
3074
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(RADIANCEOCCLUSION)
3075
+ ,seo
3076
+ #endif
3077
+ #if !defined(REFLECTIONMAP_SKYBOX) && defined(HORIZONOCCLUSION) && defined(BUMP) && defined(REFLECTIONMAP_3D)
3078
+ ,eho
3079
+ #endif
3080
+ #endif
3081
+ );
3082
+ #ifdef SHEEN_LINKWITHALBEDO
3083
+ surfaceAlbedo=sheenOut.surfaceAlbedo;
3084
+ #endif
3085
+ #endif
3086
+ #ifdef CLEARCOAT
3087
+ #ifdef CLEARCOAT_TEXTURE
3088
+ vec2 clearCoatMapData=texture2D(clearCoatSampler,vClearCoatUV+uvOffset).rg*vClearCoatInfos.y;
3089
+ #endif
3090
+ #endif
3091
+ #ifdef IRIDESCENCE
3092
+ iridescenceOutParams iridescenceOut;
3093
+ #ifdef IRIDESCENCE_TEXTURE
3094
+ vec2 iridescenceMapData=texture2D(iridescenceSampler,vIridescenceUV+uvOffset).rg*vIridescenceInfos.y;
3095
+ #endif
3096
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
3097
+ vec2 iridescenceThicknessMapData=texture2D(iridescenceThicknessSampler,vIridescenceThicknessUV+uvOffset).rg*vIridescenceInfos.w;
3098
+ #endif
3099
+ iridescenceOut=iridescenceBlock(
3100
+ vIridescenceParams
3101
+ ,NdotV
3102
+ ,specularEnvironmentR0
3103
+ #ifdef IRIDESCENCE_TEXTURE
3104
+ ,iridescenceMapData
3105
+ #endif
3106
+ #ifdef IRIDESCENCE_THICKNESS_TEXTURE
3107
+ ,iridescenceThicknessMapData
3108
+ #endif
3109
+ #ifdef CLEARCOAT
3110
+ ,NdotVUnclamped
3111
+ ,vClearCoatParams
3112
+ #ifdef CLEARCOAT_TEXTURE
3113
+ ,clearCoatMapData
3114
+ #endif
3115
+ #endif
3116
+ );float iridescenceIntensity=iridescenceOut.iridescenceIntensity;specularEnvironmentR0=iridescenceOut.specularEnvironmentR0;
3117
+ #endif
3118
+ clearcoatOutParams clearcoatOut;
3119
+ #ifdef CLEARCOAT
3120
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
3121
+ vec4 clearCoatMapRoughnessData=texture2D(clearCoatRoughnessSampler,vClearCoatRoughnessUV+uvOffset)*vClearCoatInfos.w;
3122
+ #endif
3123
+ #if defined(CLEARCOAT_TINT) && defined(CLEARCOAT_TINT_TEXTURE)
3124
+ vec4 clearCoatTintMapData=texture2D(clearCoatTintSampler,vClearCoatTintUV+uvOffset);
3125
+ #endif
3126
+ #ifdef CLEARCOAT_BUMP
3127
+ vec4 clearCoatBumpMapData=texture2D(clearCoatBumpSampler,vClearCoatBumpUV+uvOffset);
3128
+ #endif
3129
+ clearcoatOut=clearcoatBlock(
3130
+ vPositionW
3131
+ ,geometricNormalW
3132
+ ,viewDirectionW
3133
+ ,vClearCoatParams
3134
+ #if defined(CLEARCOAT_TEXTURE_ROUGHNESS) && !defined(CLEARCOAT_USE_ROUGHNESS_FROM_MAINTEXTURE)
3135
+ ,clearCoatMapRoughnessData
3136
+ #endif
3137
+ ,specularEnvironmentR0
3138
+ #ifdef CLEARCOAT_TEXTURE
3139
+ ,clearCoatMapData
3140
+ #endif
3141
+ #ifdef CLEARCOAT_TINT
3142
+ ,vClearCoatTintParams
3143
+ ,clearCoatColorAtDistance
3144
+ ,vClearCoatRefractionParams
3145
+ #ifdef CLEARCOAT_TINT_TEXTURE
3146
+ ,clearCoatTintMapData
3147
+ #endif
3148
+ #endif
3149
+ #ifdef CLEARCOAT_BUMP
3150
+ ,vClearCoatBumpInfos
3151
+ ,clearCoatBumpMapData
3152
+ ,vClearCoatBumpUV
3153
+ #if defined(TANGENT) && defined(NORMAL)
3154
+ ,vTBN
3155
+ #else
3156
+ ,vClearCoatTangentSpaceParams
3157
+ #endif
3158
+ #ifdef OBJECTSPACE_NORMALMAP
3159
+ ,normalMatrix
3160
+ #endif
3161
+ #endif
3162
+ #if defined(FORCENORMALFORWARD) && defined(NORMAL)
3163
+ ,faceNormal
3164
+ #endif
3165
+ #ifdef REFLECTION
3166
+ ,vReflectionMicrosurfaceInfos
3167
+ ,vReflectionInfos
3168
+ ,vReflectionColor
3169
+ ,vLightingIntensity
3170
+ ,reflectionSampler
3171
+ #ifndef LODBASEDMICROSFURACE
3172
+ ,reflectionSamplerLow
3173
+ ,reflectionSamplerHigh
3174
+ #endif
3175
+ #ifdef REALTIME_FILTERING
3176
+ ,vReflectionFilteringInfo
3177
+ #endif
3178
+ #endif
3179
+ #if defined(CLEARCOAT_BUMP) || defined(TWOSIDEDLIGHTING)
3180
+ ,(gl_FrontFacing ? 1. : -1.)
3181
+ #endif
3182
+ );
3183
+ #else
3184
+ clearcoatOut.specularEnvironmentR0=specularEnvironmentR0;
3185
+ #endif
3186
+ #include<pbrBlockReflectance>
3187
+ subSurfaceOutParams subSurfaceOut;
3188
+ #ifdef SUBSURFACE
3189
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
3190
+ vec4 thicknessMap=texture2D(thicknessSampler,vThicknessUV+uvOffset);
3191
+ #endif
3192
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
3193
+ vec4 refractionIntensityMap=texture2D(refractionIntensitySampler,vRefractionIntensityUV+uvOffset);
3194
+ #endif
3195
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
3196
+ vec4 translucencyIntensityMap=texture2D(translucencyIntensitySampler,vTranslucencyIntensityUV+uvOffset);
3197
+ #endif
3198
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
3199
+ vec4 translucencyColorMap=texture2D(translucencyColorSampler,vTranslucencyColorUV+uvOffset);
3200
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE_GAMMA
3201
+ translucencyColorMap=toLinearSpace(translucencyColorMap);
3202
+ #endif
3203
+ #endif
3204
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
3205
+ vec3 vSpecularEnvironmentReflectance=vec3(max(colorSpecularEnvironmentReflectance.r,max(colorSpecularEnvironmentReflectance.g,colorSpecularEnvironmentReflectance.b)));
3206
+ #endif
3207
+ subSurfaceOut=subSurfaceBlock(
3208
+ vSubSurfaceIntensity
3209
+ ,vThicknessParam
3210
+ ,vTintColor
3211
+ ,normalW
3212
+ #ifdef LEGACY_SPECULAR_ENERGY_CONSERVATION
3213
+ ,vSpecularEnvironmentReflectance
3214
+ #else
3215
+ ,baseSpecularEnvironmentReflectance
3216
+ #endif
3217
+ #ifdef SS_THICKNESSANDMASK_TEXTURE
3218
+ ,thicknessMap
3219
+ #endif
3220
+ #ifdef SS_REFRACTIONINTENSITY_TEXTURE
3221
+ ,refractionIntensityMap
3222
+ #endif
3223
+ #ifdef SS_TRANSLUCENCYINTENSITY_TEXTURE
3224
+ ,translucencyIntensityMap
3225
+ #endif
3226
+ #ifdef REFLECTION
3227
+ #ifdef SS_TRANSLUCENCY
3228
+ ,reflectionMatrix
3229
+ #ifdef USESPHERICALFROMREFLECTIONMAP
3230
+ #if !defined(NORMAL) || !defined(USESPHERICALINVERTEX)
3231
+ ,reflectionOut.irradianceVector
3232
+ #endif
3233
+ #if defined(REALTIME_FILTERING)
3234
+ ,reflectionSampler
3235
+ ,vReflectionFilteringInfo
3236
+ #ifdef IBL_CDF_FILTERING
3237
+ ,icdfSampler
3238
+ #endif
3239
+ #endif
3240
+ #endif
3241
+ #ifdef USEIRRADIANCEMAP
3242
+ ,irradianceSampler
3243
+ #endif
3244
+ #endif
3245
+ #endif
3246
+ #if defined(SS_REFRACTION) || defined(SS_TRANSLUCENCY)
3247
+ ,surfaceAlbedo
3248
+ #endif
3249
+ #ifdef SS_REFRACTION
3250
+ ,vPositionW
3251
+ ,viewDirectionW
3252
+ ,view
3253
+ ,vRefractionInfos
3254
+ ,refractionMatrix
3255
+ ,vRefractionMicrosurfaceInfos
3256
+ ,vLightingIntensity
3257
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
3258
+ ,alpha
3259
+ #endif
3260
+ #ifdef SS_LODINREFRACTIONALPHA
3261
+ ,NdotVUnclamped
3262
+ #endif
3263
+ #ifdef SS_LINEARSPECULARREFRACTION
3264
+ ,roughness
3265
+ #endif
3266
+ ,alphaG
3267
+ ,refractionSampler
3268
+ #ifndef LODBASEDMICROSFURACE
3269
+ ,refractionSamplerLow
3270
+ ,refractionSamplerHigh
3271
+ #endif
3272
+ #ifdef ANISOTROPIC
3273
+ ,anisotropicOut
3274
+ #endif
3275
+ #ifdef REALTIME_FILTERING
3276
+ ,vRefractionFilteringInfo
3277
+ #endif
3278
+ #ifdef SS_USE_LOCAL_REFRACTIONMAP_CUBIC
3279
+ ,vRefractionPosition
3280
+ ,vRefractionSize
3281
+ #endif
3282
+ #ifdef SS_DISPERSION
3283
+ ,dispersion
3284
+ #endif
3285
+ #endif
3286
+ #ifdef SS_TRANSLUCENCY
3287
+ ,vDiffusionDistance
3288
+ ,vTranslucencyColor
3289
+ #ifdef SS_TRANSLUCENCYCOLOR_TEXTURE
3290
+ ,translucencyColorMap
3291
+ #endif
3292
+ #endif
3293
+ );
3294
+ #ifdef SS_REFRACTION
3295
+ surfaceAlbedo=subSurfaceOut.surfaceAlbedo;
3296
+ #ifdef SS_LINKREFRACTIONTOTRANSPARENCY
3297
+ alpha=subSurfaceOut.alpha;
3298
+ #endif
3299
+ #endif
3300
+ #else
3301
+ subSurfaceOut.specularEnvironmentReflectance=colorSpecularEnvironmentReflectance;
3302
+ #endif
3303
+ #include<pbrBlockDirectLighting>
3304
+ #include<lightFragment>[0..maxSimultaneousLights]
3305
+ #include<pbrBlockFinalLitComponents>
3306
+ #endif
3307
+ #include<pbrBlockFinalUnlitComponents>
3308
+ #define CUSTOM_FRAGMENT_BEFORE_FINALCOLORCOMPOSITION
3309
+ #include<pbrBlockFinalColorComposition>
3310
+ #include<logDepthFragment>
3311
+ #include<fogFragment>(color,finalColor)
3312
+ #include<pbrBlockImageProcessing>
3313
+ #define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR
3314
+ #ifdef PREPASS
3315
+ #include<pbrBlockPrePass>
3316
+ #endif
3317
+ #if !defined(PREPASS) || defined(WEBGL2)
3318
+ gl_FragColor=finalColor;
3319
+ #endif
3320
+ #include<oitFragment>
3321
+ #if ORDER_INDEPENDENT_TRANSPARENCY
3322
+ if (fragDepth==nearestDepth) {frontColor.rgb+=finalColor.rgb*finalColor.a*alphaMultiplier;frontColor.a=1.0-alphaMultiplier*(1.0-finalColor.a);} else {backColor+=finalColor;}
3323
+ #endif
3324
+ #include<pbrDebug>
3325
+ #define CUSTOM_FRAGMENT_MAIN_END
3326
+ }
3327
+ `;e.ShadersStore[i]||(e.ShadersStore[i]=V);const De={name:i,shader:V};export{De as pbrPixelShader};