diff --git a/game/addons/mat_maker_gd/nodes/common/commons.gd b/game/addons/mat_maker_gd/nodes/common/commons.gd index 62ae317a..633167a7 100644 --- a/game/addons/mat_maker_gd/nodes/common/commons.gd +++ b/game/addons/mat_maker_gd/nodes/common/commons.gd @@ -18,7 +18,6 @@ enum CombinerType { POW } - static func clampv3(v : Vector3, mi : Vector3, ma : Vector3) -> Vector3: v.x = clamp(v.x, mi.x, ma.x) v.y = clamp(v.y, mi.y, ma.y) @@ -201,63 +200,12 @@ static func transform(uv : Vector2, translate : Vector2, rotate : float, scale : else: return clampv2(rv, Vector2(0, 0), Vector2(1, 1)); - static func color_dots(uv : Vector2, size : float, pseed : int) -> Vector3: var seed2 : Vector2 = rand2(Vector2(float(pseed), 1.0 - float(pseed))); uv /= size; var point_pos : Vector2 = floorv2(uv) + Vector2(0.5, 0.5); return rand3(seed2 + point_pos); -static func perlin(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> float: - var seed2 : Vector2 = rand2(Vector2(float(pseed), 1.0-float(pseed))); - var rv : float = 0.0; - var coef : float = 1.0; - var acc : float = 0.0; - - for i in range(iterations): - var step : Vector2 = Vector2(1, 1) / size; - var xy : Vector2 = floorv2(uv * size); - var f0 : float = rand(seed2 + modv2(xy, size)); - var f1 : float = rand(seed2 + modv2(xy + Vector2(1.0, 0.0), size)); - var f2 : float = rand(seed2 + modv2(xy + Vector2(0.0, 1.0), size)); - var f3 : float = rand(seed2 + modv2(xy + Vector2(1.0, 1.0), size)); - - var mixval : Vector2 = smoothstepv2(0.0, 1.0, fractv2(uv * size)); - - rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y); - acc += coef; - size *= 2.0; - coef *= persistence; - - - return rv / acc; - -static func perlin_color(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Vector3: - var seed2 : Vector2 = rand2(Vector2(float(pseed), 1.0 - float(pseed))); - var rv : Vector3 = Vector3(); - var coef : float = 1.0; - var acc : float = 0.0; - - for i in range(iterations): - var step : Vector2 = Vector2(1, 1) / size; - var xy : Vector2 = floorv2(uv * size); - - var f0 : Vector3 = rand3(seed2 + modv2(xy, size)); - var f1 : Vector3 = rand3(seed2 + modv2(xy + Vector2(1.0, 0.0), size)); - var f2 : Vector3 = rand3(seed2 + modv2(xy + Vector2(0.0, 1.0), size)); - var f3 : Vector3 = rand3(seed2 + modv2(xy + Vector2(1.0, 1.0), size)); - - var mixval : Vector2 = smoothstepv2(0.0, 1.0, fractv2(uv * size)); - - rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y); - - acc += coef; - size *= 2.0; - coef *= persistence; - - return rv / acc; - - static func beehive_dist(p : Vector2) -> float: var s : Vector2 = Vector2(1.0, 1.73205080757); diff --git a/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd b/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd new file mode 100644 index 00000000..6a92b281 --- /dev/null +++ b/game/addons/mat_maker_gd/nodes/common/noise_perlin.gd @@ -0,0 +1,52 @@ +extends Reference + +const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") + +static func perlin(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> float: + var seed2 : Vector2 = Commons.rand2(Vector2(float(pseed), 1.0-float(pseed))); + var rv : float = 0.0; + var coef : float = 1.0; + var acc : float = 0.0; + + for i in range(iterations): + var step : Vector2 = Vector2(1, 1) / size; + var xy : Vector2 = Commons.floorv2(uv * size); + var f0 : float = Commons.rand(seed2 + Commons.modv2(xy, size)); + var f1 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(1.0, 0.0), size)); + var f2 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(0.0, 1.0), size)); + var f3 : float = Commons.rand(seed2 + Commons.modv2(xy + Vector2(1.0, 1.0), size)); + + var mixval : Vector2 = Commons.smoothstepv2(0.0, 1.0, Commons.fractv2(uv * size)); + + rv += coef * lerp(lerp(f0, f1, mixval.x), lerp(f2, f3, mixval.x), mixval.y); + acc += coef; + size *= 2.0; + coef *= persistence; + + return rv / acc; + +static func perlinc(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int) -> Color: + var f : float = perlin(uv, size, iterations, persistence, pseed) + + return Color(f, f, f, 1) + +static func perlin_warp_1(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int, translate : Vector2, rotate : float, size2 : Vector2) -> Color: + var f : float = perlin(uv, size2, iterations, persistence, pseed) + var vt : Vector2 = Commons.transform(uv, Vector2(translate.x*(2.0*f-1.0), translate.y*(2.0*f-1.0)), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true) + var ff : float = perlin(vt, size2, iterations, persistence, pseed) + + return Color(ff, ff, ff, 1) + +static func perlin_warp_2(uv : Vector2, size : Vector2, iterations : int, persistence : float, pseed : int, translate : Vector2, rotate : float, size2 : Vector2) -> Color: + var f = perlin(uv, size2, iterations, persistence, pseed) + var vt : Vector2 = Commons.transform(uv, Vector2(translate.x*(2.0*f-1.0), translate.y*(2.0*f-1.0)), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true) + var ff : float = perlin(vt, size2, iterations, persistence, pseed) + + var rgba : Vector3 = Vector3(ff, ff, ff) + + var tf : Vector2 = Commons.transform(uv, Vector2(translate.x * (2.0 * (rgba.dot(Vector3(1, 1, 1) / 3.0) - 1.0)), translate.y*(2.0*(rgba.dot(Vector3(1, 1, 1) /3.0)-1.0))), rotate*0.01745329251*(2.0*1.0-1.0), Vector2(size.x*(2.0*1.0-1.0), size.y*(2.0*1.0-1.0)), true) + + var fff : float = perlin(tf, size2, iterations, persistence, pseed); + + return Color(fff, fff, fff, 1) + diff --git a/game/addons/mat_maker_gd/nodes/noise/perlin.gd b/game/addons/mat_maker_gd/nodes/noise/perlin.gd index 45694188..59737bf3 100644 --- a/game/addons/mat_maker_gd/nodes/noise/perlin.gd +++ b/game/addons/mat_maker_gd/nodes/noise/perlin.gd @@ -1,7 +1,7 @@ tool extends TextureRect -var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var NoisePerlin = preload("res://addons/mat_maker_gd/nodes/common/noise_perlin.gd") var image : Image var tex : ImageTexture @@ -39,7 +39,7 @@ func gen() -> void: # var f : float = pattern(v, 4, 4, CombinerType.MULTIPLY, CombinerAxisType.SINE, CombinerAxisType.SINE) - var col : Color = sinewave(v) + var col : Color = perlin(v) # var col : Color = beehive_2_col(v) # var col : Color = beehive_3_col(v) @@ -57,11 +57,9 @@ var p_o12297_scale_y = 4.000000000; var p_o12297_iterations = 3.000000000; var p_o12297_persistence = 0.500000000; -func sinewave(uv : Vector2) -> Color: - - var f : float = Commons.perlin(((uv)), Vector2(p_o12297_scale_x, p_o12297_scale_y), int(p_o12297_iterations), p_o12297_persistence, seed_o12297); - - return Color(f, f, f, 1) +func perlin(uv : Vector2) -> Color: + var a = NoisePerlin.perlinc(uv, Vector2(p_o12297_scale_x, p_o12297_scale_y), int(p_o12297_iterations), p_o12297_persistence, seed_o12297) + return a func reffg(): return false diff --git a/game/addons/mat_maker_gd/nodes/noise/perlin_warp1.gd b/game/addons/mat_maker_gd/nodes/noise/perlin_warp1.gd index ab5a5e0e..c1ef9aac 100644 --- a/game/addons/mat_maker_gd/nodes/noise/perlin_warp1.gd +++ b/game/addons/mat_maker_gd/nodes/noise/perlin_warp1.gd @@ -2,6 +2,7 @@ tool extends TextureRect var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var NoisePerlin = preload("res://addons/mat_maker_gd/nodes/common/noise_perlin.gd") var image : Image var tex : ImageTexture @@ -40,7 +41,7 @@ func gen() -> void: # var f : float = pattern(v, 4, 4, CombinerType.MULTIPLY, CombinerAxisType.SINE, CombinerAxisType.SINE) - var col : Color = sinewave(v) + var col : Color = perlin_warp_1(v) # var col : Color = beehive_2_col(v) # var col : Color = beehive_3_col(v) @@ -63,11 +64,8 @@ var p_o41836_scale_y = 4.000000000; var p_o41836_iterations = 3.000000000; var p_o41836_persistence = 0.500000000; -func sinewave(uv : Vector2) -> Color: - var f : float = Commons.perlin((((uv))), Vector2(p_o41836_scale_x, p_o41836_scale_y), int(p_o41836_iterations), p_o41836_persistence, seed_o41836); - var ff : float = Commons.perlin((Commons.transform(((uv)), Vector2(p_o41835_translate_x*(2.0*f-1.0), p_o41835_translate_y*(2.0*f-1.0)), p_o41835_rotate*0.01745329251*(2.0*1.0-1.0), Vector2(p_o41835_scale_x*(2.0*1.0-1.0), p_o41835_scale_y*(2.0*1.0-1.0)), true)), Vector2(p_o41836_scale_x, p_o41836_scale_y), int(p_o41836_iterations), p_o41836_persistence, seed_o41836); - - return Color(ff, ff, ff, 1) +func perlin_warp_1(uv : Vector2) -> Color: + return NoisePerlin.perlin_warp_1(uv, Vector2(p_o41835_scale_x, p_o41835_scale_y), int(p_o41836_iterations), p_o41836_persistence, seed_o41836, Vector2(p_o41835_translate_x, p_o41835_translate_y), p_o41835_rotate, Vector2(p_o41836_scale_x, p_o41836_scale_y)) func reffg(): return false diff --git a/game/addons/mat_maker_gd/nodes/noise/perlin_warp2.gd b/game/addons/mat_maker_gd/nodes/noise/perlin_warp2.gd index 945dfaf7..cb45b946 100644 --- a/game/addons/mat_maker_gd/nodes/noise/perlin_warp2.gd +++ b/game/addons/mat_maker_gd/nodes/noise/perlin_warp2.gd @@ -2,6 +2,7 @@ tool extends TextureRect var Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd") +var NoisePerlin = preload("res://addons/mat_maker_gd/nodes/common/noise_perlin.gd") var image : Image var tex : ImageTexture @@ -40,7 +41,7 @@ func gen() -> void: # var f : float = pattern(v, 4, 4, CombinerType.MULTIPLY, CombinerAxisType.SINE, CombinerAxisType.SINE) - var col : Color = sinewave(v) + var col : Color = perlin_warp_2(v) # var col : Color = beehive_2_col(v) # var col : Color = beehive_3_col(v) @@ -68,17 +69,9 @@ var p_o56040_scale_y = 4.000000000; var p_o56040_iterations = 3.000000000; var p_o56040_persistence = 0.500000000; -func sinewave(uv : Vector2) -> Color: - var f = Commons.perlin(((((uv)))), Vector2(p_o56040_scale_x, p_o56040_scale_y), int(p_o56040_iterations), p_o56040_persistence, seed_o56040); - var ff : float = Commons.perlin((Commons.transform((((uv))), Vector2(p_o56039_translate_x*(2.0*f-1.0), p_o56039_translate_y*(2.0*f-1.0)), p_o56039_rotate*0.01745329251*(2.0*1.0-1.0), Vector2(p_o56039_scale_x*(2.0*1.0-1.0), p_o56039_scale_y*(2.0*1.0-1.0)), true)), Vector2(p_o56040_scale_x, p_o56040_scale_y), int(p_o56040_iterations), p_o56040_persistence, seed_o56040); - - var o56039_0_1_rgba : Vector3 = Vector3(ff, ff, ff) - - var tf : Vector2 = Commons.transform(uv, Vector2(p_o56044_translate_x * (2.0 * (o56039_0_1_rgba.dot(Vector3(1, 1, 1) / 3.0) - 1.0)), p_o56044_translate_y*(2.0*( o56039_0_1_rgba.dot(Vector3(1, 1, 1) /3.0)-1.0))), p_o56044_rotate*0.01745329251*(2.0*1.0-1.0), Vector2(p_o56044_scale_x*(2.0*1.0-1.0), p_o56044_scale_y*(2.0*1.0-1.0)), true) +func perlin_warp_2(uv : Vector2) -> Color: + return NoisePerlin.perlin_warp_2(uv, Vector2(p_o56044_scale_x, p_o56044_scale_y), int(p_o56040_iterations), p_o56040_persistence, seed_o56040, Vector2(p_o56044_translate_x, p_o56044_translate_y), p_o56044_rotate, Vector2(p_o56040_scale_x, p_o56040_scale_y)) - var fff : float = Commons.perlin(tf, Vector2(p_o56040_scale_x, p_o56040_scale_y), int(p_o56040_iterations), p_o56040_persistence, seed_o56040); - - return Color(fff, fff, fff, 1) func reffg(): return false