<?xml version="1.0" encoding="utf-8"?>
<scenedata>
	<material>
		<name>Material</name>
		<diffuse>
			<albedo>
				<shader>
						<shader><![CDATA[def mypos() vec2:
	getTexCoords(0)*10.

def tile(vec2 mypos) vec2:
	vec2(
		floor(doti(mypos)), 
		floor(dotj(mypos))      )

def node(vec2 tile) vec2:
	tile + vec2 ( noise(tile*1.456169584),  noise(tile*1.65465165) )

	
def if(bool cond, vec2 rtrue, vec2 rfalse) vec2:
	vec2(
		if( cond, doti(rtrue), doti(rfalse)	),
		if(	cond, dotj(rtrue), dotj(rfalse) )
	)
	

def closest(vec2 tile_a, vec2 tile_b, vec2 xy) vec2:
	if(	lt ( length(node(tile_a) - xy), length(node(tile_b) - xy) ),
			tile_a,
			tile_b)
	
		
def voronoi(vec2 curtile, vec2 xy) vec2:
	closest(
	closest(
	closest(
	closest(
	closest(
	closest(
	closest( 
	closest( curtile, curtile + vec2(1.,0.) , xy )
	,  curtile + vec2(1.,1.), xy )
	,  curtile + vec2(0.,1.), xy )
	,  curtile + vec2( -1. ,1.), xy )
	,  curtile + vec2( -1. ,0.), xy )
	,  curtile + vec2( -1., -1.), xy )
	,  curtile + vec2( 0., -1. ), xy )
	,  curtile + vec2( 1., -1. ), xy )

	
def min3(real a, real b, real c) real:
	min(a,min(b,c))
	
	
def slope( vec2 bm, vec2 ab ) real:
		( dot( bm , ab ) / length( ab ) ) + (0.5 * length(ab))


		
def crn ( real a, real b ) real :
	0.5 * ( a + b - sqrt ( (a - b) * (a - b) + 0.05 ) )


def pyra(vec2 curtile, vec2 xy) real:
	crn(
		crn(
			min(
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2(  1. ,  0.) ) ),
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2( -1. ,  0.) ) )  
				),

			min(
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2(  0. ,  1.) ) ),
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2(  0. , -1.) ) )  
				)
			),
		
		crn(	
			min(
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2( -1. , -1. ) ) ),
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2(  1. ,  1. ) ) )  
				),

			min(
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2( -1. ,  1. ) ) ),
				slope( xy - node( curtile ) , node ( curtile ) - node ( curtile + vec2(  1. , -1. ) ) )  
				)
			) 
		)

def shape( real x ) real :
	sqrt(  clamp(x,0.0,1.0) * ( 2. -  clamp( x ,0.0 ,1.0 ) ) )

def stone() real:
	shape(3.0 * pyra(voronoi(tile(mypos()), mypos()), mypos())) * 0.001

def eval(vec3 pos) vec3:
	vec3(if(lt(0,stone()),0.0,1.0))]]></shader>
				</shader>
			</albedo>
			<random_triangle_colours>false</random_triangle_colours>
			<layer>0</layer>
		</diffuse>
	</material>
</scenedata>
