@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
158 lines • 6.61 kB
JavaScript
// Do not edit.
import { ShaderStore } from "../../Engines/shaderStore.js";
const name = "pbrBlockReflectivity";
const shader = `struct reflectivityOutParams
{float microSurface;float roughness;float diffuseRoughness;float reflectanceF0;vec3 reflectanceF90;vec3 colorReflectanceF0;vec3 colorReflectanceF90;
vec3 surfaceAlbedo;float metallic;float specularWeight;vec3 dielectricColorF0;
vec3 ambientOcclusionColor;
vec4 surfaceMetallicColorMap;
vec3 metallicF0;
vec4 surfaceReflectivityColorMap;
};
reflectivityOutParams reflectivityBlock(
in vec4 reflectivityColor
,in vec3 surfaceAlbedo
,in vec4 metallicReflectanceFactors
,in float baseDiffuseRoughness
,in float baseDiffuseRoughnessTexture
,in vec2 baseDiffuseRoughnessInfos
,in vec3 reflectivityInfos
,in vec4 surfaceMetallicOrReflectivityColorMap
,in vec3 ambientOcclusionColorIn
,in vec4 microSurfaceTexel
,in vec4 detailColor
,in vec4 vDetailInfos
)
{reflectivityOutParams outParams;float microSurface=reflectivityColor.a;vec3 surfaceReflectivityColor=reflectivityColor.rgb;
vec2 metallicRoughness=surfaceReflectivityColor.rg;float ior=surfaceReflectivityColor.b;
outParams.surfaceMetallicColorMap=surfaceMetallicOrReflectivityColorMap;
vec3 aoStoreInMetalMap=vec3(surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r,surfaceMetallicOrReflectivityColorMap.r);outParams.ambientOcclusionColor=mix(ambientOcclusionColorIn,aoStoreInMetalMap,reflectivityInfos.z);
metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.b;
metallicRoughness.r*=surfaceMetallicOrReflectivityColorMap.r;
metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.a;
metallicRoughness.g*=surfaceMetallicOrReflectivityColorMap.g;
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));
metallicRoughness.g*=microSurfaceTexel.r;
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;
outParams.metallicF0=vec3(dielectricF0)*surfaceReflectivityColor;
outParams.surfaceAlbedo=baseColor.rgb*(vec3(1.0)-vec3(dielectricF0)*surfaceReflectivityColor)*(1.0-outParams.metallic);
outParams.surfaceAlbedo=baseColor.rgb;
{vec3 reflectivityColor=mix(dielectricF0*surfaceReflectivityColor,baseColor.rgb,outParams.metallic);outParams.reflectanceF0=max(reflectivityColor.r,max(reflectivityColor.g,reflectivityColor.b));}
float maxF0=max(surfaceReflectivityColor.r,max(surfaceReflectivityColor.g,surfaceReflectivityColor.b));outParams.reflectanceF0=mix(dielectricF0*maxF0,1.0,outParams.metallic);
outParams.reflectanceF0=mix(dielectricF0,1.0,outParams.metallic);
outParams.reflectanceF90=vec3(outParams.specularWeight);float f90Scale=1.0;
float f90Scale=clamp(2.0*(ior-1.0),0.0,1.0);outParams.reflectanceF90=vec3(mix(outParams.specularWeight*f90Scale,1.0,outParams.metallic));
outParams.dielectricColorF0=vec3(dielectricF0*surfaceReflectivityColor);vec3 metallicColorF0=baseColor.rgb;outParams.colorReflectanceF0=mix(outParams.dielectricColorF0,metallicColorF0,outParams.metallic);
vec3 dielectricColorF90=surfaceReflectivityColor*vec3(outParams.specularWeight)*vec3(f90Scale);
vec3 dielectricColorF90=vec3(outParams.specularWeight*f90Scale);
vec3 conductorColorF90=surfaceReflectivityColor;
vec3 conductorColorF90=outParams.reflectanceF90;
vec3 conductorColorF90=vec3(1.0);
outParams.colorReflectanceF90=mix(dielectricColorF90,conductorColorF90,outParams.metallic);
surfaceReflectivityColor*=surfaceMetallicOrReflectivityColorMap.rgb;
outParams.surfaceReflectivityColorMap=surfaceMetallicOrReflectivityColorMap;
microSurface*=surfaceMetallicOrReflectivityColorMap.a;microSurface*=reflectivityInfos.z;
microSurface*=computeDefaultMicroSurface(microSurface,surfaceReflectivityColor);
microSurface*=microSurfaceTexel.r;
outParams.colorReflectanceF0=surfaceReflectivityColor;outParams.reflectanceF0=max(surfaceReflectivityColor.r,max(surfaceReflectivityColor.g,surfaceReflectivityColor.b));outParams.reflectanceF90=vec3(1.0);
outParams.colorReflectanceF90=surfaceReflectivityColor;
outParams.colorReflectanceF90=vec3(1.0);
microSurface=saturate(microSurface);float roughness=1.-microSurface;float diffuseRoughness=baseDiffuseRoughness;
diffuseRoughness*=baseDiffuseRoughnessTexture*baseDiffuseRoughnessInfos.y;
outParams.microSurface=microSurface;outParams.roughness=roughness;outParams.diffuseRoughness=diffuseRoughness;return outParams;}
`;
// Sideeffect
if (!ShaderStore.IncludesShadersStore[name]) {
ShaderStore.IncludesShadersStore[name] = shader;
}
/** @internal */
export const pbrBlockReflectivity = { name, shader };
//# sourceMappingURL=pbrBlockReflectivity.js.map