Material Database

View Source

<?xml version="1.0" encoding="utf-8"?>
<scenedata>
	<medium>
		<name>letchee_medium</name>
		<precedence>2</precedence>
		<basic>
			<ior>1.52</ior>
			<cauchy_b_coeff>0.004</cauchy_b_coeff>
			<absorption_coefficient_spectrum>
				<uniform>
					<value>0</value>
				</uniform>
			</absorption_coefficient_spectrum>
		</basic>
	</medium>
	<material>
		<name>letchee</name>
		<diffuse>
			<albedo>
				<shader>
					<shader>
            <![CDATA[def mypos() vec2:
	(getTexCoords(0) + 
		vec2(
			fbm( getTexCoords(0)*14.561984 , 5),
			fbm( getTexCoords(0)*26.964191 , 5 )
		) * 0.01
	)*35.

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.005 ) )


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 :
	x

def stone() real:
	pyra(voronoi_(tile(mypos()), mypos()), mypos())

def eval(vec3 pos) vec3:
	lerp(vec3(0.78,0.70,0.25),vec3(0.78,0.26,0.24),stone()*1.5 + 0.1 )]]>
          </shader>
        </shader>
      </albedo>
      <bump>
        <shader>
          <shader>
            <![CDATA[def mypos() vec2:
	(getTexCoords(0) + 
		vec2(
			noise(getTexCoords(0)*14.561984 ),
			noise(getTexCoords(0)*26.964191 )
		) * 0.01
	)*35.

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.005 ) )


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 :
	x

def stone() real:
	pyra(voronoi_(tile(mypos()), mypos()), mypos()) 

def eval() real:
	stone()* 0.003]]></shader>
				</shader>
			</bump>
			<random_triangle_colours>false</random_triangle_colours>
			<layer>0</layer>
		</diffuse>
	</material>

</scenedata>

-->