

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));
		}
} } } }
