playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
48 lines (39 loc) • 1.25 kB
JavaScript
var aoSpecOcc_default = (
/* glsl */
`
uniform float material_occludeSpecularIntensity;
void occludeSpecular(float gloss, float ao, vec3 worldNormal, vec3 viewDir) {
float specOcc = mix(1.0, ao, material_occludeSpecularIntensity);
float specOcc = ao;
// approximated specular occlusion from AO
// http://research.tri-ace.com/Data/cedec2011_RealtimePBR_Implementation_e.pptx
float specPow = exp2(gloss * 11.0);
float specOcc = saturate(pow(dot(worldNormal, viewDir) + ao, 0.01 * specPow) - 1.0 + ao);
specOcc = mix(1.0, specOcc, material_occludeSpecularIntensity);
dSpecularLight *= specOcc;
dReflection *= specOcc;
sSpecularLight *= specOcc;
sReflection *= specOcc;
}
`
);
export {
aoSpecOcc_default as default
};