WebGL本では、光と物体の色をかけ合わせたものを環境光として、最終的にgl_FragColorにIa+Id+Isを渡していたが、
threeではlightをすべて足したものを元の色と掛け合わせたものを渡している。考え方が異なるので混乱しないように。
拡散反射
vec3 lightDirection = normalize(lightPosition);
vec3 light = vec3(0.0);
light += lightColor * lightIntensity * max(dot(normal, lightDirection), 0.0);
鏡面反射
vec3 lightReflection = reflect(-lightDirection, normal);
float specular = pow(max(-dot(lightReflection, viewDirection), 0.0), shininess);