slim 1 extensions ptakun { extensions ptakun alpha { template shadingcomponent ShaveGoldmanSpec { parameter color Kd { description {No description} label {Kd} detail varying default {1 1 1} subtype slider } parameter float intensity { description {No description} label {intensity} detail varying default 1 subtype slider range {0 1} } parameter float shinyness { description {No description} label {shinyness} detail varying default 10 subtype slider range {0 20} } parameter color result { access output display hidden } RSLFunction { void alphaShaveGoldmanSpec ( color Kd; float intensity; float shinyness; output color result; ) { vector T; float vt, vt2, lt, lt2; vector clr; vector opac; T = normalize(dPdv); vt = (normalize(I).(T)); vt2 = sqrt(1-vt*vt); color spec=0; varying float nonspec = 0; illuminance(P) { lightsource("__nonspecular", nonspec); lt = (normalize(L).T); lt2 = sqrt(1 - lt*lt); spec += pow(clamp(lt2*vt2 - lt*vt, 0, 1), shinyness)*(1-nonspec)*Cl * Kd*intensity*Cl; } result = spec; } } } } }