<?xml version="1.0" encoding="utf-8"?>
<scenedata>
	<material>
		<name>tiled_marble_RC1</name>
		<phong>
		<shared_shader_info>
				<param>
					<real>
						<name>MortarWidth</name>
						<description>MortarWidth</description>
						<min>-0</min>
						<max>1</max>
						<value>0.02</value>
					</real>
				</param>
				<param>
					<real>
						<name>TilesX</name>
						<description>TilesX</description>
						<min>1</min>
						<max>256</max>
						<value>8</value>
					</real>
				</param>
				<param>
					<real>
						<name>TilesY</name>
						<description>TilesY</description>
						<min>1</min>
						<max>256</max>
						<value>8</value>
					</real>
				</param>
				<param>
					<real>
						<name>TilesHeight</name>
						<description>TilesHeight</description>
						<min>-1</min>
						<max>1</max>
						<value>-0</value>
					</real>
				</param>
				<param>
					<real>
						<name>MortarDepth</name>
						<description>MortarDepth</description>
						<min>-1</min>
						<max>1</max>
						<value>-0.01</value>
					</real>
				</param>
				<shader><![CDATA[]]></shader>
		</shared_shader_info>
			<diffuse_albedo>
				<shader>
						<param>
							<colour3>
								<name>BaseColor</name>
								<description>BaseColor</description>
								<value>0.5668097138404846 0.5859729647636414 0.5989418029785156</value>
							</colour3>
						</param>
						<param>
							<colour3>
								<name>MortarColor</name>
								<description>MortarColor</description>
								<value>0.7082977890968323 0.7592995762825012 0.6387794613838196</value>
							</colour3>
						</param>
						<param>
							<colour3>
								<name>VeinColor</name>
								<description>VeinColor</description>
								<value>0.07805658876895905 0.04614884406328201 0.03994717076420784</value>
							</colour3>
						</param>
						<param>
							<real>
								<name>VeinWidth</name>
								<description>VeinWidth</description>
								<min>-0</min>
								<max>1</max>
								<value>0.04</value>
							</real>
						</param>
						<param>
							<real>
								<name>Diffusion</name>
								<description>Diffusion</description>
								<min>-0</min>
								<max>1</max>
								<value>0.18</value>
							</real>
						</param>
						<param>
							<int>
								<name>SoftVein</name>
								<description>SoftVein</description>
								<min>0</min>
								<max>1</max>
								<value>0</value>
							</int>
						</param>
						<param>
							<real>
								<name>Scale1</name>
								<description>Scale1</description>
								<min>-0</min>
								<max>50</max>
								<value>9</value>
							</real>
						</param>
						<param>
							<real>
								<name>Scale2</name>
								<description>Scale2</description>
								<min>-0</min>
								<max>50</max>
								<value>13</value>
							</real>
						</param>
						<param>
							<real>
								<name>Scale3</name>
								<description>Scale3</description>
								<min>-0</min>
								<max>50</max>
								<value>17</value>
							</real>
						</param>
						<param>
							<int>
								<name>Detail</name>
								<description>Detail</description>
								<min>-3</min>
								<max>3</max>
								<value>3</value>
							</int>
						</param>
						<param>
							<real>
								<name>Shift</name>
								<description>Shift</description>
								<min>-5</min>
								<max>5</max>
								<value>-1.5</value>
							</real>
						</param>
						<shader><![CDATA[
#################################

def gridX() bool:

let	half = paramMortarWidth() / 2.0
	dotX = fract(dot(vec2(paramTilesX(), 0.0), getTexCoords(0)))

in	lt(	dotX, half	)
||	gt(	( dotX ), 1.0 - (half)	)

#################################

def sinX() real :
let
periodX = fract(
			paramTilesX() * texi() + paramMortarWidth() / 2.0
		) / paramMortarWidth() * 3.14159265

in
	-sin( periodX )

#################################

def gridY() bool:
let half = paramMortarWidth() / 2.0
	dotY = fract(dot(vec2(0.0, paramTilesY()), getTexCoords(0)))

in	lt(	dotY, half	)
||	gt(	( dotY ), 1.0 - (half)	)

#################################

def sinY() real :
let
periodY = fract(
			paramTilesY() * texj() + paramMortarWidth() / 2.0
		) / paramMortarWidth() * 3.14159265

in
	-sin( periodY ) 

#################################

def grid() bool:
gridX()||gridY()

#################################

def boolToReal(bool switch) real:
if(switch, 1.0, 0.0)

#################################

def addvec2(vec2 v1, vec2 v2) vec2:
vec2(v1.x+v2.x, v1.y+v2.y)

#################################

def addToVec2(vec2 vec, real sum) vec2:
vec2( vec.x + sum, vec.y + sum )

#################################

def marble() real :

let

gn = gridNoise(vec2(texi() * paramTilesX(), texj() * paramTilesY()))
coords = addToVec2(tex(), gn * paramShift())
paramVeinWidth = paramVeinWidth()
paramDetail = paramDetail()

a = abs(fbm(coords*paramScale1(),4 + paramDetail))
b = abs(fbm(coords*paramScale2(),6 + paramDetail))
c = abs(fbm(coords*paramScale3(),8 + paramDetail))
d = max(max(a, b), c)

shape = d * (1.0 + paramVeinWidth) - paramVeinWidth
absShape = abs(shape)
diff = pow(absShape, paramDiffusion())

in

	if(paramSoftVein()==1||shape>0.0,
		diff,
		absShape
	)

#################################

def marbleColor() vec3 : 

	lerp
	(
		paramVeinColor(),
		paramBaseColor(),
		marble()
	)
	
#################################

#def discretizeVec2(vec2 v2, real tilesX, real tilesY, real offsetX, real offsetY) vec2: ###	vec2(		floor(v2.x * tilesX) / tilesX,		floor(v2.y * tilesY) / tilesY	) + vec2(offsetX, offsetY)

#################################

def eval(vec3 pos) vec3 : ###
	if(
		grid(),
		paramMortarColor(),
		marbleColor()
	)]]></shader>
				</shader>
			</diffuse_albedo>
			<exponent>
				<shader>
						<shader><![CDATA[
						
	#	modify this block in exponent, bump, albedo
	#	def paramGLOBAL_TilesX() real : 4.0
	#	def paramGLOBAL_TilesY() real : 4.0
	#	def paramGLOBAL_MortarWidth() real :  0.1
	#	end custom bloc
			
		def eval(vec3 pos) real : 
		if(
			lt(
				min(
					fract(dot(vec2(paramTilesX(), 0.0), tex())),
					fract(dot(vec2(0.0, paramTilesY()), tex()))
				),
				paramMortarWidth() / 2.0
			)
		||	gt(
				max(
					fract(dot(vec2(paramTilesX(), 0.0), tex())),
					fract(dot(vec2(0.0, paramTilesY()), tex()))
				),
				1.0 - (paramMortarWidth() / 2.0)
			),
			(fbm(tex() * 100.0, 8) * 0.5 + 0.5) * 0.25 + 3.0,		# mortar
			(fbm(tex() * 25.0, 12) * 0.5 + 0.5) * 360.0 + 1150.0	# marble
		)
							
						]]></shader>
				</shader>
			</exponent>
			<bump>
				<shader>
						<shader><![CDATA[
def pi() real : 3.14159265358979323846264338327950288419716939937
						
		#	BUMP: CEMENT
		
def cementBump() real :
	(max(
		abs(noise(tex()*3000.)),
		 0.5
	) + abs(fbm(tex()*3000.,4))/40.) /800.	# 1m/800 = 1.25mm
	
#	BUMP: GRID


def gridX() bool: ###

let half = paramMortarWidth() / 2.0
	dotX = fract(dot(vec2(paramTilesX(), 0.0), getTexCoords(0)))

in	lt(	dotX, half	)
||	gt(	( dotX ), 1.0 - (half)	)


def sinX() real : ###
let
periodX = fract(
			paramTilesX() * texi() + paramMortarWidth() / 2.0
		) / paramMortarWidth() * 3.14159265

in
	-sin( periodX )


def gridY() bool: ###
let half = paramMortarWidth() / 2.0
	dotY = fract(dot(vec2(0.0, paramTilesY()), getTexCoords(0)))

in	lt(	dotY, half	)
||	gt(	( dotY ), 1.0 - (half)	)


def sinY() real : ###
let
periodY = fract(
			paramTilesY() * texj() + paramMortarWidth() / 2.0
		) / paramMortarWidth() * 3.14159265

in
	-sin( periodY ) 


def grid() bool: ###
gridX()||gridY()


def boolToReal(bool switch) real: ###
if(switch, 1.0, 0.0)


def bump() real : ###
			if(	grid(),
#				cementBump(),
				min(sinX() * boolToReal(gridX()), sinY() * boolToReal(gridY())) * -paramMortarDepth(),# - cementBump(),
				paramTilesHeight() #tiles bump, current value rather fits a displacement shader
			)
			
		
		def eval() real :
bump() * 0.005

						]]></shader>
				</shader>
			</bump>
			<displacement>
				<shader>
						<shader><![CDATA[
def pi() real : 3.14159265358979323846264338327950288419716939937
						
		#	BUMP: CEMENT
		
def cementBump() real :
	(max(
		abs(noise(tex()*3000.)),
		 0.5
	) + abs(fbm(tex()*3000.,4))/40.) /800.	# 1m/800 = 1.25mm
	
#	BUMP: GRID


def gridX() bool: ###

let half = paramMortarWidth() / 2.0
	dotX = fract(dot(vec2(paramTilesX(), 0.0), getTexCoords(0)))

in	lt(	dotX, half	)
||	gt(	( dotX ), 1.0 - (half)	)


def sinX() real : ###
let
periodX = fract(
			paramTilesX() * texi() + paramMortarWidth() / 2.0
		) / paramMortarWidth() * 3.14159265

in
	-sin( periodX )


def gridY() bool: ###
let half = paramMortarWidth() / 2.0
	dotY = fract(dot(vec2(0.0, paramTilesY()), getTexCoords(0)))

in	lt(	dotY, half	)
||	gt(	( dotY ), 1.0 - (half)	)


def sinY() real : ###
let
periodY = fract(
			paramTilesY() * texj() + paramMortarWidth() / 2.0
		) / paramMortarWidth() * 3.14159265

in
	-sin( periodY ) 


def grid() bool: ###
gridX()||gridY()


def boolToReal(bool switch) real: ###
if(switch, 1.0, 0.0)


def bump() real : ###
			if(	grid(),
#				cementBump(),
				min(sinX() * boolToReal(gridX()), sinY() * boolToReal(gridY())) * -paramMortarDepth(),# - cementBump(),
				paramTilesHeight() #tiles bump, current value rather fits a displacement shader
			)
			
		
		def eval() real :
bump() * 0.005]]></shader>
				</shader>
			</displacement>
			<layer>0</layer>
			<fresnel_scale>1</fresnel_scale>
			<ior>1.52</ior>
			<nk_data></nk_data>
		</phong>
	</material>
</scenedata>
