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)); 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, ambient), lite.multiplyColor(this.specular, specular))); color.a = pigment.a; return lite.fromStdColor(lite.saturateColor(color));