surface bulb( float Ks = 1.0, Ka = 0.1, Kd = 0.3, Ksilh = 0.05, roughness = 0.1, silhrough = 0.55; color specularcolor = 1) { normal Nf = faceforward(normalize(N), I); vector i = -normalize(I); Oi = Os; //diffuse lighting color dc = Ks*diffuse(Nf); float df = (comp(dc,0.0) + comp(dc,1.0) + comp(dc,2.0))/3.0; Ci = Kd*0.4; if(df > 0.12) Ci = Kd*0.4; if(df > 0.2) Ci = Kd; //specular highlight color sc = Ks*specular(Nf, i, roughness); float sf = (comp(sc,0.0) + comp(sc,1.0) + comp(sc,2.0))/3.0; if(sf > 0.12) Ci = Ks*0.4; if(sf > 0.2) Ci = Ks; // outline if(i.Nf < 0.3) { Ci = Ci*0; Oi = 1; } }