source: [view]
if(typeof finish == "string"){ finish = lite.finish[finish]; }
pigment = lite.toStdColor(pigment);
normal = lite.faceforward(lite.normalize(normal), this.incident);
var v = lite.scale(-1, this.incident), specular, color,
ambient = lite.scaleColor(finish.Ka, this.ambient),
shadow = lite.saturate(-4 * lite.dot(normal, this.incident)),
diffuse = lite.scaleColor(shadow * finish.Kd, lite.diffuse(normal, this.lights));
if("phong" in finish){
specular = lite.scaleColor(shadow * finish.Ks * finish.phong, lite.phong(normal, v, finish.phong_size, this.lights));
}else{
specular = lite.scaleColor(shadow * finish.Ks, lite.specular(normal, v, finish.roughness, this.lights));
}
color = lite.scaleColor(pigment.a, lite.addColor(lite.multiplyColor(pigment, lite.addColor(ambient, diffuse)), lite.multiplyColor(this.specular, specular)));
color.a = pigment.a;
return lite.fromStdColor(lite.saturateColor(color));