// luma.gl // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors export const LAMBERT_VS = /* glsl */ `\ layout(std140) uniform lambertMaterialUniforms { uniform bool unlit; uniform float ambient; uniform float diffuse; } material; `; export const LAMBERT_FS = /* glsl */ `\ layout(std140) uniform lambertMaterialUniforms { uniform bool unlit; uniform float ambient; uniform float diffuse; } material; vec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 normal_worldspace, vec3 color) { float lambertian = max(dot(light_direction, normal_worldspace), 0.0); return lambertian * material.diffuse * surfaceColor * color; } vec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) { vec3 lightColor = surfaceColor; if (material.unlit) { return surfaceColor; } if (lighting.enabled == 0) { return lightColor; } lightColor = material.ambient * surfaceColor * lighting.ambientColor; for (int i = 0; i < lighting.pointLightCount; i++) { PointLight pointLight = lighting_getPointLight(i); vec3 light_position_worldspace = pointLight.position; vec3 light_direction = normalize(light_position_worldspace - position_worldspace); float light_attenuation = getPointLightAttenuation(pointLight, distance(light_position_worldspace, position_worldspace)); lightColor += lighting_getLightColor(surfaceColor, light_direction, normal_worldspace, pointLight.color / light_attenuation); } for (int i = 0; i < lighting.spotLightCount; i++) { SpotLight spotLight = lighting_getSpotLight(i); vec3 light_position_worldspace = spotLight.position; vec3 light_direction = normalize(light_position_worldspace - position_worldspace); float light_attenuation = getSpotLightAttenuation(spotLight, position_worldspace); lightColor += lighting_getLightColor(surfaceColor, light_direction, normal_worldspace, spotLight.color / light_attenuation); } for (int i = 0; i < lighting.directionalLightCount; i++) { DirectionalLight directionalLight = lighting_getDirectionalLight(i); lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, normal_worldspace, directionalLight.color); } return lightColor; } `;