playcanvas
Version:
PlayCanvas WebGL game engine
4 lines (2 loc) • 1.26 kB
JavaScript
var aoSpecOccPS = "\n\n#if LIT_OCCLUDE_SPECULAR != NONE\n #ifdef LIT_OCCLUDE_SPECULAR_FLOAT\n uniform float material_occludeSpecularIntensity;\n #endif\n#endif\n\nvoid occludeSpecular(float gloss, float ao, vec3 worldNormal, vec3 viewDir) {\n\n #if LIT_OCCLUDE_SPECULAR == AO\n #ifdef LIT_OCCLUDE_SPECULAR_FLOAT\n float specOcc = mix(1.0, ao, material_occludeSpecularIntensity);\n #else\n float specOcc = ao;\n #endif\n #endif\n\n #if LIT_OCCLUDE_SPECULAR == GLOSSDEPENDENT\n\n // approximated specular occlusion from AO\n // http://research.tri-ace.com/Data/cedec2011_RealtimePBR_Implementation_e.pptx\n float specPow = exp2(gloss * 11.0);\n float specOcc = saturate(pow(dot(worldNormal, viewDir) + ao, 0.01*specPow) - 1.0 + ao);\n\n #ifdef LIT_OCCLUDE_SPECULAR_FLOAT\n specOcc = mix(1.0, specOcc, material_occludeSpecularIntensity);\n #endif\n #endif\n\n #if LIT_OCCLUDE_SPECULAR != NONE\n dSpecularLight *= specOcc;\n dReflection *= specOcc;\n\n #ifdef LIT_SHEEN\n sSpecularLight *= specOcc;\n sReflection *= specOcc;\n #endif\n #endif\n}\n";
export { aoSpecOccPS as default };