@luma.gl/shadertools
Version:
Shader module system for luma.gl
73 lines (63 loc) • 2.49 kB
JavaScript
// luma.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
export const LAMBERT_WGSL = /* wgsl */ `\
struct lambertMaterialUniforms {
unlit: u32,
ambient: f32,
diffuse: f32,
};
@group(3) @binding(auto) var<uniform> lambertMaterial : lambertMaterialUniforms;
fn lighting_getLightColor(surfaceColor: vec3<f32>, light_direction: vec3<f32>, normal_worldspace: vec3<f32>, color: vec3<f32>) -> vec3<f32> {
let lambertian: f32 = max(dot(light_direction, normal_worldspace), 0.0);
return lambertian * lambertMaterial.diffuse * surfaceColor * color;
}
fn lighting_getLightColor2(surfaceColor: vec3<f32>, cameraPosition: vec3<f32>, position_worldspace: vec3<f32>, normal_worldspace: vec3<f32>) -> vec3<f32> {
var lightColor: vec3<f32> = surfaceColor;
if (lambertMaterial.unlit != 0u) {
return surfaceColor;
}
if (lighting.enabled == 0) {
return lightColor;
}
lightColor = lambertMaterial.ambient * surfaceColor * lighting.ambientColor;
for (var i: i32 = 0; i < lighting.pointLightCount; i++) {
let pointLight: PointLight = lighting_getPointLight(i);
let light_position_worldspace: vec3<f32> = pointLight.position;
let light_direction: vec3<f32> = normalize(light_position_worldspace - position_worldspace);
let light_attenuation = getPointLightAttenuation(
pointLight,
distance(light_position_worldspace, position_worldspace)
);
lightColor += lighting_getLightColor(
surfaceColor,
light_direction,
normal_worldspace,
pointLight.color / light_attenuation
);
}
for (var i: i32 = 0; i < lighting.spotLightCount; i++) {
let spotLight: SpotLight = lighting_getSpotLight(i);
let light_position_worldspace: vec3<f32> = spotLight.position;
let light_direction: vec3<f32> = normalize(light_position_worldspace - position_worldspace);
let light_attenuation = getSpotLightAttenuation(spotLight, position_worldspace);
lightColor += lighting_getLightColor(
surfaceColor,
light_direction,
normal_worldspace,
spotLight.color / light_attenuation
);
}
for (var i: i32 = 0; i < lighting.directionalLightCount; i++) {
let directionalLight: DirectionalLight = lighting_getDirectionalLight(i);
lightColor += lighting_getLightColor(
surfaceColor,
-directionalLight.direction,
normal_worldspace,
directionalLight.color
);
}
return lightColor;
}
`;
//# sourceMappingURL=lambert-shaders-wgsl.js.map