#version 120 /** * Phong shader. * **Project Name:** MakeHuman * **Product Home Page:** http://www.makehuman.org/ * **Code Home Page:** https://bitbucket.org/MakeHuman/makehuman/ * **Authors:** Marc Flerackers, Jonas Hauquier * **Copyright(c):** MakeHuman Team 2001-2014 * **Licensing:** AGPL3 (see also http://www.makehuman.org/node/318) * **Coding Standards:** See http://www.makehuman.org/node/165 * * Abstract * -------- * * Standard per-pixel lighting shader. * Supports one light only. **/ varying vec3 normal, lightDir, halfVector; varying vec4 ambient_color, diffuse_color, specular_color, emissive_color; #ifdef DIFFUSE uniform sampler2D diffuseTexture; #endif #ifdef AOMAP uniform sampler2D aomapTexture; #endif void main (void) { #ifdef DIFFUSE // Get the texture color vec4 tex_color = texture2D(diffuseTexture, gl_TexCoord[0].st); #else vec4 tex_color = vec4(1.0, 1.0, 1.0, 1.0); #endif #ifdef AOMAP tex_color.rgb = tex_color.rgb * texture2D(aomapTexture, gl_TexCoord[0].st).rgb; #endif // Ambient * texture color vec4 final_color = ambient_color * tex_color; vec3 N = normalize(normal); vec3 L = normalize(lightDir); float NdotL = max(dot(N, L), 0.0); if(NdotL > 0.0) { // Diffuse * texture color final_color += diffuse_color * NdotL * tex_color; // Specular vec3 H = normalize(halfVector); float NdotH = max(dot(N, H), 0.0); float shininess = specular_color.a * 255.0; float specular = pow(NdotH, shininess); final_color.rgb += specular_color.rgb * specular; } // Make sure we use the alpha from the texture // otherwise the eyelashes and eyebrows are not tranparent final_color.a = tex_color.a; final_color.rgb += emissive_color.rgb; gl_FragColor = final_color; }