UNPKG

pex-renderer

Version:

Physically Based Renderer for Pex

32 lines (25 loc) 825 B
module.exports = /* glsl */ ` #if NUM_POINT_LIGHTS > 0 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); } } #endif `