@webviz/subsurface-viewer
Version:
3D visualization component for subsurface reservoir data
59 lines (49 loc) • 2.37 kB
JavaScript
// luma.gl
// SPDX-License-Identifier: MIT
// Copyright (c) vis.gl contributors
export const PHONG_VS = /* glsl */ `\
uniform phongMaterialUniforms {
uniform float ambient;
uniform float diffuse;
uniform float shininess;
uniform vec3 specularColor;
} material;
`;
export const PHONG_FS = /* glsl */ `\
uniform phongMaterialUniforms {
uniform float ambient;
uniform float diffuse;
uniform float shininess;
uniform vec3 specularColor;
} material;
// Note modified for two sided lighing.
vec3 lighting_getLightColor(vec3 surfaceColor, vec3 light_direction, vec3 view_direction, vec3 normal_worldspace, vec3 color) {
vec3 halfway_direction = normalize(light_direction + view_direction);
float lambertian = abs(dot(light_direction, normal_worldspace));
float specular_angle = abs(dot(normal_worldspace, halfway_direction));
float specular = pow(specular_angle, material.shininess);
return (lambertian * material.diffuse * surfaceColor + specular * material.specularColor) * color;
}
vec3 lighting_getLightColor(vec3 surfaceColor, vec3 cameraPosition, vec3 position_worldspace, vec3 normal_worldspace) {
vec3 lightColor = surfaceColor;
if (lighting.enabled == 0) {
return lightColor;
}
vec3 view_direction = normalize(cameraPosition - position_worldspace);
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, view_direction, normal_worldspace, pointLight.color / light_attenuation);
}
int totalLights = min(MAX_LIGHTS, lighting.pointLightCount + lighting.directionalLightCount);
for (int i = lighting.pointLightCount; i < totalLights; i++) {
DirectionalLight directionalLight = lighting_getDirectionalLight(i);
lightColor += lighting_getLightColor(surfaceColor, -directionalLight.direction, view_direction, normal_worldspace, directionalLight.color);
}
return lightColor;
}
`;
//# sourceMappingURL=phong-shaders-glsl.js.map