/*
 * TLd_cell1
 *
 * Simple displacement shader using Voronoi cell noise
 * Uses noises.h from ARMAN
 *
 * Tal Lancater 12/15/01
 *
 * History
 *   01/12/15  Created
 *
 */

#include "noises.h"

displacement TLd_cell1 (
        float Kvoro = 0;        /* desc {amount to displace. } */
	float voro_freq = 1;    /* desc {Feature size } */
	float voro_step = 0.05; /* desc {Step value size.  If the difference
				   between f2 and f1 is less then this value
				   then the result is 0. } */
	float voro_jitter = 0;  /* desc { Amount to perturb the voroni 
				   function } */
	string PSpace = "shader";  /* desc {Space to transform P for shading calculations } */
	float usePref = 0;   /* type switch */
	varying point __Pref = point (1000, 0, -1000); /* vis hidden */
   	output varying float VoroVal = 0; /* vis hidden */
)
{
	point objP = transform (PSpace, P);
	point noiseP = (usePref != 0)? transform (PSpace, __Pref): objP;
	normal Nn = ntransform (PSpace, N);
	Nn = normalize (Nn);

	float voro_f1 = 0, voro_f2 = 0;
	point voro_pos1 = 0, voro_pos2 = 0;

	voronoi_f1f2_3d (noiseP*voro_freq, voro_jitter, 
			 voro_f1, voro_pos1, voro_f2,
			 voro_pos2);

	float voro_dist = 1 - step (voro_step, voro_f2 - voro_f1);
#if 0
	if (acos(N.I) >= 90)
		voro_dist = 0;
#endif
	VoroVal = voro_dist;
	objP += Kvoro * voro_dist * Nn;

#pragma nolint 1
	P = transform (PSpace, "current", objP);
	N = calculatenormal (P);
}

