60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|   | float random( vec2 uv )  | ||
|  | { | ||
|  |   return fract( sin( dot( uv.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453123 ); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | float worley( vec2 uv, float columns, float rows )  | ||
|  | { | ||
|  | 	 | ||
|  | 	vec2 index_uv = floor( vec2( uv.x * columns, uv.y * rows ) ); | ||
|  | 	vec2 fract_uv = fract( vec2( uv.x * columns, uv.y * rows ) ); | ||
|  | 	 | ||
|  | 	float minimum_dist = 1.0;   | ||
|  | 	 | ||
|  | 	for ( int y= -1; y <= 1; y++ )  | ||
|  |   { | ||
|  | 		for ( int x= -1; x <= 1; x++ )  | ||
|  |     { | ||
|  | 			vec2 neighbor = vec2( float( x ), float( y ) ); | ||
|  | 			vec2 point = random( index_uv + neighbor ); | ||
|  | 			 | ||
|  | 			vec2 diff = neighbor + point - fract_uv; | ||
|  | 			float dist = length (diff ); | ||
|  | 
 | ||
|  | 			minimum_dist = min( minimum_dist, dist ); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	 | ||
|  | 	return minimum_dist; | ||
|  | } | ||
|  | 
 | ||
|  | vec2 voronoi( vec2 uv, float columns, float rows )  | ||
|  | {	 | ||
|  | 	vec2 index_uv = floor( vec2( uv.x * columns, uv.y * rows ) ); | ||
|  | 	vec2 fract_uv = fract( vec2( uv.x * columns, uv.y * rows ) ); | ||
|  | 	 | ||
|  | 	float minimum_dist = 1.0;   | ||
|  | 	vec2 minimum_point; | ||
|  | 
 | ||
|  | 	for ( int y= -1; y <= 1; y++ )  | ||
|  |   { | ||
|  | 		for ( int x= -1; x <= 1; x++ )  | ||
|  |     { | ||
|  | 			vec2 neighbor = vec2( float( x ), float( y ) ); | ||
|  | 			vec2 point = random( index_uv + neighbor ); | ||
|  | 
 | ||
|  | 			vec2 diff = neighbor + point - fract_uv; | ||
|  | 			float dist = length( diff ); | ||
|  |    | ||
|  | 			if ( dist < minimum_dist ) | ||
|  |       { | ||
|  | 				minimum_dist = dist; | ||
|  | 				minimum_point = point; | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 
 | ||
|  | 	return minimum_point; | ||
|  | } |