### One solution Use an odd number in your power function (or some other function that keeps the sign of your previous specular intensity): light_specular_intensity = pow(light_specular_intensity, 9.0); light_specular_intensity = pow(light_specular_intensity, 7.0); There may be other ways to perform the math such that you may still use an even power. ### The problem Your power function is (mathemtically) creating a phantom light behind the ball, and that's the reflection you're seeing along the edge. For clarity, I've added some parenthesis to this line: world_reflec = 2 * ( dot(vertex_to_light, normalize(world_normal.xyz)) * normalize(world_normal) ) - vertex_to_light; //reflection of vertex_to_light When the camera aligns with the light, for the pixels on the edge, `dot(vertex_to_light, world.normal.xyz)` will yield nearly zero. So the value of `world_reflec` will be rough equal to `-1 * vertex_to_light`. And because `vertex_to_eye` and `vertex_to_light` are nearly equal, that means that this line: light_specular_intensity = dot(normalize(vertex_to_eye), normalize(world_reflec)); ...will yield a value of `light_specular_intensity` of almost `-1`. And then this line: // (light_diffuse_intensity > 0) == true light_specular_intensity = pow(light_specular_intensity, 8.0); ...will strip off the negative and give you a value near `1`. That causes specular illumination.