/** * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ #ifdef FLAT_SHADED #extension GL_OES_standard_derivatives : enable #endif precision highp float; // uniform vec3 lightPosition; uniform vec3 lightColor; uniform vec3 lightAmbient; uniform mat4 view; uniform float alpha; #ifndef FLAT_SHADED varying vec3 vNormal; #endif varying vec3 vViewPosition; #pragma glslify: import('./chunks/color-frag-params.glsl') #pragma glslify: attenuation = require(./utils/attenuation.glsl) #pragma glslify: calculateSpecular = require(./utils/phong-specular.glsl) #pragma glslify: calculateDiffuse = require(./utils/oren-nayar-diffuse.glsl) const float specularScale = 0.65; const float shininess = 100.0; const float roughness = 5.0; const float albedo = 0.95; void main() { // material color #pragma glslify: import('./chunks/color-assign-material.glsl') // determine surface to light direction // vec4 viewLightPosition = view * vec4(lightPosition, 1.0); // vec3 lightVector = viewLightPosition.xyz - vViewPosition; vec3 lightVector = vViewPosition; vec3 L = normalize(lightVector); // light direction vec3 V = normalize(vViewPosition); // eye direction // surface normal #ifdef FLAT_SHADED vec3 fdx = dFdx(vViewPosition); vec3 fdy = dFdy(vViewPosition); vec3 N = -normalize(cross(fdx, fdy)); #else vec3 N = -normalize(vNormal); #ifdef DOUBLE_SIDED N = N * (float(gl_FrontFacing) * 2.0 - 1.0); #endif #endif // compute our diffuse & specular terms float specular = calculateSpecular(L, V, N, shininess) * specularScale; vec3 diffuse = lightColor * calculateDiffuse(L, V, N, roughness, albedo); vec3 ambient = lightAmbient; // add the lighting vec3 finalColor = material * (diffuse + ambient) + specular; // gl_FragColor.rgb = N; // gl_FragColor.a = 1.0; // gl_FragColor.rgb = vec3(1.0, 0.0, 0.0); gl_FragColor.rgb = finalColor; gl_FragColor.a = alpha; }