pex-renderer
Version:
Physically Based Renderer for Pex
32 lines (25 loc) • 825 B
JavaScript
module.exports = /* glsl */ `
struct PointLight {
vec3 position;
vec4 color;
float range;
bool castShadows;
};
uniform PointLight uPointLights[NUM_POINT_LIGHTS];
uniform samplerCube uPointLightShadowMaps[NUM_POINT_LIGHTS];
void EvaluatePointLight(inout PBRData data, PointLight light, samplerCube shadowMap) {
vec3 posToLight = light.position - data.positionWorld;
float illuminated = bool(light.castShadows) ? getPunctualShadow(shadowMap, posToLight) : 1.0;
if (illuminated > 0.0) {
float invSqrFalloff = 1.0 / pow(light.range, 2.0);
float attenuation = getDistanceAttenuation(posToLight, invSqrFalloff);
Light l;
l.l = normalize(posToLight);
l.color = light.color;
l.attenuation = attenuation;
getSurfaceShading(data, l, illuminated);
}
}
`