pbrHelperFunctions.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // Do not edit.
  2. import { ShaderStore } from "../../Engines/shaderStore.js";
  3. const name = "pbrHelperFunctions";
  4. const shader = `#define MINIMUMVARIANCE 0.0005
  5. float convertRoughnessToAverageSlope(float roughness)
  6. {return square(roughness)+MINIMUMVARIANCE;}
  7. float fresnelGrazingReflectance(float reflectance0) {float reflectance90=saturate(reflectance0*25.0);return reflectance90;}
  8. vec2 getAARoughnessFactors(vec3 normalVector) {
  9. #ifdef SPECULARAA
  10. 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);
  11. #else
  12. return vec2(0.);
  13. #endif
  14. }
  15. #ifdef ANISOTROPIC
  16. #ifdef ANISOTROPIC_LEGACY
  17. 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);}
  18. vec3 getAnisotropicBentNormals(const vec3 T,const vec3 B,const vec3 N,const vec3 V,float anisotropy,float roughness) {vec3 anisotropicFrameDirection=anisotropy>=0.0 ? B : T;vec3 anisotropicFrameTangent=cross(normalize(anisotropicFrameDirection),V);vec3 anisotropicFrameNormal=cross(anisotropicFrameTangent,anisotropicFrameDirection);vec3 anisotropicNormal=normalize(mix(N,anisotropicFrameNormal,abs(anisotropy)));return anisotropicNormal;}
  19. #else
  20. 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);}
  21. 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;}
  22. #endif
  23. #endif
  24. #if defined(CLEARCOAT) || defined(SS_REFRACTION)
  25. vec3 cocaLambert(vec3 alpha,float distance) {return exp(-alpha*distance);}
  26. vec3 cocaLambert(float NdotVRefract,float NdotLRefract,vec3 alpha,float thickness) {return cocaLambert(alpha,(thickness*((NdotLRefract+NdotVRefract)/(NdotLRefract*NdotVRefract))));}
  27. vec3 computeColorAtDistanceInMedia(vec3 color,float distance) {return -log(color)/distance;}
  28. vec3 computeClearCoatAbsorption(float NdotVRefract,float NdotLRefract,vec3 clearCoatColor,float clearCoatThickness,float clearCoatIntensity) {vec3 clearCoatAbsorption=mix(vec3(1.0),
  29. cocaLambert(NdotVRefract,NdotLRefract,clearCoatColor,clearCoatThickness),
  30. clearCoatIntensity);return clearCoatAbsorption;}
  31. #endif
  32. #ifdef MICROSURFACEAUTOMATIC
  33. float computeDefaultMicroSurface(float microSurface,vec3 reflectivityColor)
  34. {const float kReflectivityNoAlphaWorkflow_SmoothnessMax=0.95;float reflectivityLuminance=getLuminance(reflectivityColor);float reflectivityLuma=sqrt(reflectivityLuminance);microSurface=reflectivityLuma*kReflectivityNoAlphaWorkflow_SmoothnessMax;return microSurface;}
  35. #endif
  36. `;
  37. // Sideeffect
  38. ShaderStore.IncludesShadersStore[name] = shader;
  39. /** @internal */
  40. export const pbrHelperFunctions = { name, shader };
  41. //# sourceMappingURL=pbrHelperFunctions.js.map