pbrBlockReflectivity.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. // Do not edit.
  2. import { ShaderStore } from "../../Engines/shaderStore.js";
  3. const name = "pbrBlockReflectivity";
  4. const shader = `struct reflectivityOutParams
  5. {float microSurface;float roughness;vec3 surfaceReflectivityColor;
  6. #ifdef METALLICWORKFLOW
  7. vec3 surfaceAlbedo;
  8. #endif
  9. #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
  10. vec3 ambientOcclusionColor;
  11. #endif
  12. #if DEBUGMODE>0
  13. #ifdef METALLICWORKFLOW
  14. vec2 metallicRoughness;
  15. #ifdef REFLECTIVITY
  16. vec4 surfaceMetallicColorMap;
  17. #endif
  18. #ifndef FROSTBITE_REFLECTANCE
  19. vec3 metallicF0;
  20. #endif
  21. #else
  22. #ifdef REFLECTIVITY
  23. vec4 surfaceReflectivityColorMap;
  24. #endif
  25. #endif
  26. #endif
  27. };
  28. #define pbr_inline
  29. void reflectivityBlock(
  30. in vec4 vReflectivityColor,
  31. #ifdef METALLICWORKFLOW
  32. in vec3 surfaceAlbedo,
  33. in vec4 metallicReflectanceFactors,
  34. #endif
  35. #ifdef REFLECTIVITY
  36. in vec3 reflectivityInfos,
  37. in vec4 surfaceMetallicOrReflectivityColorMap,
  38. #endif
  39. #if defined(METALLICWORKFLOW) && defined(REFLECTIVITY) && defined(AOSTOREINMETALMAPRED)
  40. in vec3 ambientOcclusionColorIn,
  41. #endif
  42. #ifdef MICROSURFACEMAP
  43. in vec4 microSurfaceTexel,
  44. #endif
  45. #ifdef DETAIL
  46. in vec4 detailColor,
  47. in vec4 vDetailInfos,
  48. #endif
  49. out reflectivityOutParams outParams
  50. )
  51. {float microSurface=vReflectivityColor.a;vec3 surfaceReflectivityColor=vReflectivityColor.rgb;
  52. #ifdef METALLICWORKFLOW
  53. vec2 metallicRoughness=surfaceReflectivityColor.rg;
  54. #ifdef REFLECTIVITY
  55. #if DEBUGMODE>0
  56. outParams.surfaceMetallicColorMap=surfaceMetallicOrReflectivityColorMap;
  57. #endif
  58. #ifdef AOSTOREINMETALMAPRED
  59. vec3 aoStoreInMetalMap=vec3(surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r);outParams.ambientOcclusionColor=mix(ambientOcclusionColorIn,aoStoreInMetalMap,reflectivityInfos.z);
  60. #endif
  61. #ifdef METALLNESSSTOREINMETALMAPBLUE
  62. metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.b;
  63. #else
  64. metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.r;
  65. #endif
  66. #ifdef ROUGHNESSSTOREINMETALMAPALPHA
  67. metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.a;
  68. #else
  69. #ifdef ROUGHNESSSTOREINMETALMAPGREEN
  70. metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.g;
  71. #endif
  72. #endif
  73. #endif
  74. #ifdef DETAIL
  75. 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));
  76. #endif
  77. #ifdef MICROSURFACEMAP
  78. metallicRoughness.g*=microSurfaceTexel.r;
  79. #endif
  80. #if DEBUGMODE>0
  81. outParams.metallicRoughness=metallicRoughness;
  82. #endif
  83. #define CUSTOM_FRAGMENT_UPDATE_METALLICROUGHNESS
  84. microSurface=1.0-metallicRoughness.g;vec3 baseColor=surfaceAlbedo;
  85. #ifdef FROSTBITE_REFLECTANCE
  86. outParams.surfaceAlbedo=baseColor.rgb*(1.0-metallicRoughness.r);surfaceReflectivityColor=mix(0.16*reflectance*reflectance,baseColor,metallicRoughness.r);
  87. #else
  88. vec3 metallicF0=metallicReflectanceFactors.rgb;
  89. #if DEBUGMODE>0
  90. outParams.metallicF0=metallicF0;
  91. #endif
  92. outParams.surfaceAlbedo=mix(baseColor.rgb*(1.0-metallicF0),vec3(0.,0.,0.),metallicRoughness.r);surfaceReflectivityColor=mix(metallicF0,baseColor,metallicRoughness.r);
  93. #endif
  94. #else
  95. #ifdef REFLECTIVITY
  96. surfaceReflectivityColor*=surfaceMetallicOrReflectivityColorMap.rgb;
  97. #if DEBUGMODE>0
  98. outParams.surfaceReflectivityColorMap=surfaceMetallicOrReflectivityColorMap;
  99. #endif
  100. #ifdef MICROSURFACEFROMREFLECTIVITYMAP
  101. microSurface*=surfaceMetallicOrReflectivityColorMap.a;microSurface*=reflectivityInfos.z;
  102. #else
  103. #ifdef MICROSURFACEAUTOMATIC
  104. microSurface*=computeDefaultMicroSurface(microSurface,surfaceReflectivityColor);
  105. #endif
  106. #ifdef MICROSURFACEMAP
  107. microSurface*=microSurfaceTexel.r;
  108. #endif
  109. #define CUSTOM_FRAGMENT_UPDATE_MICROSURFACE
  110. #endif
  111. #endif
  112. #endif
  113. microSurface=saturate(microSurface);float roughness=1.-microSurface;outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.surfaceReflectivityColor=surfaceReflectivityColor;}
  114. `;
  115. // Sideeffect
  116. ShaderStore.IncludesShadersStore[name] = shader;
  117. /** @internal */
  118. export const pbrBlockReflectivity = { name, shader };
  119. //# sourceMappingURL=pbrBlockReflectivity.js.map