playcanvas
Version:
PlayCanvas WebGL game engine
167 lines (163 loc) • 6.53 kB
JavaScript
var lightFunctionLightPS = `
void evaluateLight{i}(
vec3 iridescenceFresnel
) {
vec3 lightColor = light{i}_color;
if (all(equal(lightColor, vec3(0.0)))) {
return;
}
dLightDirNormW = light{i}_direction;
dAtten = 1.0;
vec3 lightDirW = evalOmniLight(light{i}_position);
dLightDirNormW = normalize(lightDirW);
vec3 cookieAttenuation = getCookie2DXform(light{i}_cookie, light{i}_shadowMatrix, light{i}_cookieIntensity, light{i}_cookieMatrix, light{i}_cookieOffset).{LIGHT{i}COOKIE_CHANNEL};
vec3 cookieAttenuation = getCookie2D(light{i}_cookie, light{i}_shadowMatrix, light{i}_cookieIntensity).{LIGHT{i}COOKIE_CHANNEL};
vec3 cookieAttenuation = getCookie2DClipXform(light{i}_cookie, light{i}_shadowMatrix, light{i}_cookieIntensity, light{i}_cookieMatrix, light{i}_cookieOffset).{LIGHT{i}COOKIE_CHANNEL};
vec3 cookieAttenuation = getCookie2DClip(light{i}_cookie, light{i}_shadowMatrix, light{i}_cookieIntensity).{LIGHT{i}COOKIE_CHANNEL};
vec3 cookieAttenuation = getCookieCube(light{i}_cookie, light{i}_shadowMatrix, light{i}_cookieIntensity).{LIGHT{i}COOKIE_CHANNEL};
lightColor *= cookieAttenuation;
dAtten = getFalloffLinear(light{i}_radius, lightDirW);
dAtten = getFalloffInvSquared(light{i}_radius, lightDirW);
dAtten = getFalloffWindow(light{i}_radius, lightDirW);
dAtten *= getSpotEffect(light{i}_direction, light{i}_innerConeAngle, light{i}_outerConeAngle, dLightDirNormW);
if (dAtten < 0.00001) {
return;
}
calcRectLightValues(light{i}_position, light{i}_halfWidth, light{i}_halfHeight);
calcDiskLightValues(light{i}_position, light{i}_halfWidth, light{i}_halfHeight);
calcSphereLightValues(light{i}_position, light{i}_halfWidth, light{i}_halfHeight);
float attenDiffuse = getLightDiffuse(litArgs_worldNormal, dViewDirW, dLightDirNormW);
float attenDiffuse = getRectLightDiffuse(litArgs_worldNormal, dViewDirW, lightDirW, dLightDirNormW) * 16.0;
float attenDiffuse = getDiskLightDiffuse(litArgs_worldNormal, dViewDirW, lightDirW, dLightDirNormW) * 16.0;
float attenDiffuse = getSphereLightDiffuse(litArgs_worldNormal, dViewDirW, lightDirW, dLightDirNormW) * 16.0;
dAtten *= getLightDiffuse(litArgs_worldNormal, vec3(0.0), dLightDirNormW);
float shadow = getShadow{i}(vec3(0.0));
float shadow = getShadow{i}(lightDirW);
shadow = mix(1.0, shadow, light{i}_shadowIntensity);
dAtten *= shadow;
dShadowCatcher *= shadow;
dDiffuseLight += ((attenDiffuse * dAtten) * lightColor) * (1.0 - dLTCSpecFres);
dDiffuseLight += (attenDiffuse * dAtten) * lightColor;
dDiffuseLight += (dAtten * lightColor) * (1.0 - litArgs_specularity);
dDiffuseLight += dAtten * lightColor;
ccSpecularLight += ccLTCSpecFres * getRectLightSpecular(litArgs_clearcoat_worldNormal, dViewDirW) * dAtten * lightColor;
ccSpecularLight += ccLTCSpecFres * getDiskLightSpecular(litArgs_clearcoat_worldNormal, dViewDirW) * dAtten * lightColor;
ccSpecularLight += ccLTCSpecFres * getSphereLightSpecular(litArgs_clearcoat_worldNormal, dViewDirW) * dAtten * lightColor;
dSpecularLight += dLTCSpecFres * getRectLightSpecular(litArgs_worldNormal, dViewDirW) * dAtten * lightColor;
dSpecularLight += dLTCSpecFres * getDiskLightSpecular(litArgs_worldNormal, dViewDirW) * dAtten * lightColor;
dSpecularLight += dLTCSpecFres * getSphereLightSpecular(litArgs_worldNormal, dViewDirW) * dAtten * lightColor;
vec3 halfDirW = normalize(-dLightDirNormW + dViewDirW);
vec3 lightspecularCC = getLightSpecular(halfDirW, ccReflDirW, litArgs_clearcoat_worldNormal, dViewDirW, dLightDirNormW, litArgs_clearcoat_gloss, dTBN) * dAtten * lightColor;
lightspecularCC *= getFresnelCC(dot(dViewDirW, halfDirW));
ccSpecularLight += lightspecularCC;
sSpecularLight += getLightSpecularSheen(halfDirW, litArgs_worldNormal, dViewDirW, dLightDirNormW, litArgs_sheen_gloss) * dAtten * lightColor;
vec3 lightSpecular = getLightSpecular(halfDirW, dReflDirW, litArgs_worldNormal, dViewDirW, dLightDirNormW, litArgs_gloss, dTBN) * dAtten * lightColor;
lightSpecular *= getFresnel(dot(dViewDirW, halfDirW), litArgs_gloss, litArgs_specularity, iridescenceFresnel, litArgs_iridescence_intensity);
lightSpecular *= getFresnel(dot(dViewDirW, halfDirW), litArgs_gloss, litArgs_specularity);
lightSpecular *= litArgs_specularity;
dSpecularLight += lightSpecular;
}
`;
export { lightFunctionLightPS as default };