{
	"name": "tiler_color",
	"node_position": {
		"x": 0,
		"y": 0
	},
	"parameters": {
		"offset": 0,
		"overlap": 2,
		"rotate": 0,
		"scale": 0,
		"select_inputs": 0,
		"tx": 4,
		"ty": 4
	},
	"shader_model": {
		"code": "",
		"global": "",
		"inputs": [
			{
				"default": "vec4(0.0)",
				"function": true,
				"label": "",
				"name": "in",
				"type": "rgba"
			},
			{
				"default": "1.0",
				"function": true,
				"label": "",
				"name": "mask",
				"type": "f"
			}
		],
		"instance": "vec4 tiler_$(name)(vec2 uv, vec2 tile, int overlap, vec2 _seed) {\n\tvec4 c = vec4(0.0);\n\tfor (int dx = -overlap; dx <= overlap; ++dx) {\n\t\tfor (int dy = -overlap; dy <= overlap; ++dy) {\n\t\t\tvec2 pos = fract((floor(uv*tile)+vec2(float(dx), float(dy))+vec2(0.5))/tile-vec2(0.5));\n\t\t\tvec2 seed = rand2(pos+_seed);\n\t\t\tpos = fract(pos+$offset*seed/tile);\n\t\t\tfloat mask = $mask(pos+vec2(0.5));\n\t\t\tif (mask > 0.01) {\n\t\t\t\tvec2 pv = fract(uv - pos)-vec2(0.5);\n\t\t\t\tseed = rand2(seed);\n\t\t\t\tfloat angle = (seed.x * 2.0 - 1.0) * $rotate;\n\t\t\t\tfloat ca = cos(angle);\n\t\t\t\tfloat sa = sin(angle);\n\t\t\t\tpv = vec2(ca*pv.x+sa*pv.y, -sa*pv.x+ca*pv.y);\n\t\t\t\tpv *= (seed.y-0.5)*2.0*$scale+1.0;\n\t\t\t\tpv += vec2(0.5);\n\t\t\t\t$select_inputs\n\t\t\t\tvec4 n = $in(pv);\n\t\t\t\tfloat na = n.a*mask;\n\t\t\t\tfloat a = (1.0-c.a)*(1.0*na);\n\t\t\t\tc = mix(c, n, na);\n\t\t\t}\n\t\t}\n\t}\n\treturn c;\n}",
		"name": "Color Tiler",
		"outputs": [
			{
				"rgba": "tiler_$(name)($uv, vec2($tx, $ty), int($overlap), vec2(float($seed)))",
				"type": "rgba"
			}
		],
		"parameters": [
			{
				"control": "None",
				"default": 4,
				"label": "Tile X",
				"max": 64,
				"min": 1,
				"name": "tx",
				"step": 1,
				"type": "float"
			},
			{
				"control": "None",
				"default": 4,
				"label": "Tile Y",
				"max": 64,
				"min": 1,
				"name": "ty",
				"step": 1,
				"type": "float"
			},
			{
				"control": "None",
				"default": 1,
				"label": "Overlap",
				"max": 5,
				"min": 0,
				"name": "overlap",
				"step": 1,
				"type": "float"
			},
			{
				"default": 0,
				"label": "Inputs",
				"name": "select_inputs",
				"type": "enum",
				"values": [
					{
						"name": "1",
						"value": " "
					},
					{
						"name": "4",
						"value": "pv = clamp(0.5*(pv+floor(rand2(seed)*2.0)), vec2(0.0), vec2(1.0));"
					},
					{
						"name": "16",
						"value": "pv = clamp(0.25*(pv+floor(rand2(seed)*4.0)), vec2(0.0), vec2(1.0));"
					}
				]
			},
			{
				"control": "None",
				"default": 0.5,
				"label": "Offset",
				"max": 1,
				"min": 0,
				"name": "offset",
				"step": 0.01,
				"type": "float"
			},
			{
				"control": "None",
				"default": 0,
				"label": "Rotate",
				"max": 180,
				"min": 0,
				"name": "rotate",
				"step": 0.1,
				"type": "float"
			},
			{
				"control": "None",
				"default": 0,
				"label": "Scale",
				"max": 1,
				"min": 0,
				"name": "scale",
				"step": 0.01,
				"type": "float"
			}
		]
	},
	"type": "shader"
}