/* polkadot.sl - polkadot shader by Everett Staley */
surface
polkadot (float Ka=.8,Kd=.8,rough=.35,skale=4,size=.82,soft=.015;)

{
    color specolor,Cc;
    color polka=color(.35,.54,.9);
    color dot=color(.97,.97,.85);
    float test1=abs(sin(t*PI*skale)*sin(s*PI*skale));
    float test2=abs(sin(t*PI*skale)*cos(s*PI*skale));

    if (t*skale/2size)
		{specolor=1;Cc=dot;}  /*dot*/
	    else {specolor=mix(0,1,(1/soft)*(test1-(size-soft)));
		  Cc=mix(polka,dot,(1/soft)*(test1-(size-soft)));}
	}

    else

	{if (test2<(size-soft)) /*row2*/

		{specolor=0;Cc=polka;} /*polka*/
	    else if (test2>size)
		{specolor=1;Cc=dot;} /*dot*/
	    else {specolor=mix(0,1,(1/soft)*(test2-(size-soft)));
		  Cc=mix(polka,dot,(1/soft)*(test2-(size-soft)));}
	}

    normal Nf = faceforward (normalize(N),I);
    Ci=Cc*(Ka*ambient()+Kd*diffuse(Nf))+specolor*specular(Nf,-normalize(I),rough);
    Oi=Os;Ci*=Oi;
}