slim 1 extensions ptakun { extensions ptakun alpha { template shadingcomponent ShaveKajiya { parameter float Ka { description {No description} label {Ka} detail varying default 1 subtype slider range {0 1 0.05} } parameter float Kd { description {No description} label {Kd} detail varying default .6 subtype slider range {0 1 0.05} } parameter float Ks { description {No description} label {Ks} detail varying default .35 subtype slider range {0 1 0.05} } parameter float roughness { description {No description} label {roughness} detail varying default .1 subtype slider range {0 1 0.05} } parameter color hairroot { description {No description} label {hairroot} detail varying default {1 1 1} } parameter color hairtip { description {No description} label {hairtip} detail varying default {1 1 1} } parameter color specularcolor { description {No description} label {specularcolor} detail varying default {1 1 1} } parameter float start_spec { description {No description} label {start_spec} detail varying default 0 subtype slider range {0 1.0} } parameter float end_spec { description {No description} label {end_spec} detail varying default 1 subtype slider range {0 1} } parameter float spec_size_fade { description {No description} label {spec_size_fade} detail varying default 0 subtype slider range {0 0.5} } parameter color result { access output display hidden } RSLFunction { void alphaShaveKajiya ( float Ka; float Kd; float Ks; float roughness; color hairroot; color hairtip; color specularcolor; float start_spec; float end_spec; float spec_size_fade; output color result; ) { vector T = normalize (dPdv); vector V = -normalize(I); color Cspec = 0, Cdiff = 0; float cosang; float Kspec; varying float nonspec = 0; varying float nondiff = 0; Kspec = min( smoothstep( start_spec, start_spec + spec_size_fade, v), 1 - smoothstep( end_spec, end_spec - spec_size_fade, v ) ); illuminance (P) { lightsource("__nondiffuse", nondiff); lightsource("__nonspecular", nonspec); cosang = cos (abs (acos (T.normalize(L)) - acos (-T.V))); Cspec += Cl *(1-nonspec)* v * pow (cosang, 1/roughness); Cdiff += Cl * v*(1-nondiff);} result = Oi * (mix(hairroot,hairtip,v) * (Ka*ambient() + Kd*Cdiff) + (Ks * Cspec * specularcolor*Kspec)); } } } } }