pbrBlockIridescence.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Do not edit.
  2. import { ShaderStore } from "../../Engines/shaderStore.js";
  3. const name = "pbrBlockIridescence";
  4. const shader = `struct iridescenceOutParams
  5. {float iridescenceIntensity;float iridescenceIOR;float iridescenceThickness;vec3 specularEnvironmentR0;};
  6. #ifdef IRIDESCENCE
  7. #define pbr_inline
  8. #define inline
  9. void iridescenceBlock(
  10. in vec4 vIridescenceParams,
  11. in float viewAngle,
  12. in vec3 specularEnvironmentR0,
  13. #ifdef IRIDESCENCE_TEXTURE
  14. in vec2 iridescenceMapData,
  15. #endif
  16. #ifdef IRIDESCENCE_THICKNESS_TEXTURE
  17. in vec2 iridescenceThicknessMapData,
  18. #endif
  19. #ifdef CLEARCOAT
  20. in float NdotVUnclamped,
  21. #ifdef CLEARCOAT_TEXTURE
  22. in vec2 clearCoatMapData,
  23. #endif
  24. #endif
  25. out iridescenceOutParams outParams
  26. )
  27. {float iridescenceIntensity=vIridescenceParams.x;float iridescenceIOR=vIridescenceParams.y;float iridescenceThicknessMin=vIridescenceParams.z;float iridescenceThicknessMax=vIridescenceParams.w;float iridescenceThicknessWeight=1.;
  28. #ifdef IRIDESCENCE_TEXTURE
  29. iridescenceIntensity*=iridescenceMapData.x;
  30. #endif
  31. #if defined(IRIDESCENCE_THICKNESS_TEXTURE)
  32. iridescenceThicknessWeight=iridescenceThicknessMapData.g;
  33. #endif
  34. float iridescenceThickness=mix(iridescenceThicknessMin,iridescenceThicknessMax,iridescenceThicknessWeight);float topIor=1.;
  35. #ifdef CLEARCOAT
  36. float clearCoatIntensity=vClearCoatParams.x;
  37. #ifdef CLEARCOAT_TEXTURE
  38. clearCoatIntensity*=clearCoatMapData.x;
  39. #endif
  40. topIor=mix(1.0,vClearCoatRefractionParams.w-1.,clearCoatIntensity);viewAngle=sqrt(1.0+square(1.0/topIor)*(square(NdotVUnclamped)-1.0));
  41. #endif
  42. vec3 iridescenceFresnel=evalIridescence(topIor,iridescenceIOR,viewAngle,iridescenceThickness,specularEnvironmentR0);outParams.specularEnvironmentR0=mix(specularEnvironmentR0,iridescenceFresnel,iridescenceIntensity);outParams.iridescenceIntensity=iridescenceIntensity;outParams.iridescenceThickness=iridescenceThickness;outParams.iridescenceIOR=iridescenceIOR;}
  43. #endif
  44. `;
  45. // Sideeffect
  46. ShaderStore.IncludesShadersStore[name] = shader;
  47. /** @internal */
  48. export const pbrBlockIridescence = { name, shader };
  49. //# sourceMappingURL=pbrBlockIridescence.js.map