Add initial painting
This commit is contained in:
parent
f740d83dcc
commit
515cc3e0fb
17 changed files with 514 additions and 3 deletions
10
main.tscn
10
main.tscn
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=19 format=3 uid="uid://dt4nq0nkmjiit"]
|
[gd_scene load_steps=20 format=3 uid="uid://dt4nq0nkmjiit"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://b5tcsve1oo5ht" path="res://game_manager.gd" id="1_ig7tw"]
|
[ext_resource type="Script" uid="uid://b5tcsve1oo5ht" path="res://game_manager.gd" id="1_ig7tw"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cvqsf1nlfqwpr" path="res://assets/background/background.png" id="1_lquwl"]
|
[ext_resource type="Texture2D" uid="uid://cvqsf1nlfqwpr" path="res://assets/background/background.png" id="1_lquwl"]
|
||||||
|
|
@ -9,7 +9,8 @@
|
||||||
[ext_resource type="PackedScene" uid="uid://c1acpop6amvcl" path="res://audience_manager.tscn" id="6_272bh"]
|
[ext_resource type="PackedScene" uid="uid://c1acpop6amvcl" path="res://audience_manager.tscn" id="6_272bh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b8key4hjaldui" path="res://turn_manager.tscn" id="7_272bh"]
|
[ext_resource type="PackedScene" uid="uid://b8key4hjaldui" path="res://turn_manager.tscn" id="7_272bh"]
|
||||||
[ext_resource type="Texture2D" uid="uid://d2142cf22t1lv" path="res://assets/buttons/button1.png" id="9_2cqfq"]
|
[ext_resource type="Texture2D" uid="uid://d2142cf22t1lv" path="res://assets/buttons/button1.png" id="9_2cqfq"]
|
||||||
[ext_resource type="Script" uid="uid://bg1vk1o2eq3fg" path="res://bark_buttons.gd" id="9_yaehf"]
|
[ext_resource type="PackedScene" uid="uid://donkfeu1x888o" path="res://paintings/painting.tscn" id="9_kek77"]
|
||||||
|
[ext_resource type="Script" path="res://bark_buttons.gd" id="9_yaehf"]
|
||||||
[ext_resource type="Texture2D" uid="uid://ut655l8y8xmi" path="res://assets/buttons/button1pressed.png" id="10_yaehf"]
|
[ext_resource type="Texture2D" uid="uid://ut655l8y8xmi" path="res://assets/buttons/button1pressed.png" id="10_yaehf"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c0iad21xtnjdd" path="res://assets/buttons/button3.png" id="11_074og"]
|
[ext_resource type="Texture2D" uid="uid://c0iad21xtnjdd" path="res://assets/buttons/button3.png" id="11_074og"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dx4dadmb37khl" path="res://assets/buttons/button3pressed.png" id="12_cegan"]
|
[ext_resource type="Texture2D" uid="uid://dx4dadmb37khl" path="res://assets/buttons/button3pressed.png" id="12_cegan"]
|
||||||
|
|
@ -22,7 +23,7 @@
|
||||||
default_font = ExtResource("2_5vw27")
|
default_font = ExtResource("2_5vw27")
|
||||||
default_font_size = 12
|
default_font_size = 12
|
||||||
|
|
||||||
[node name="Node2D" type="Node2D"]
|
[node name="Main" type="Node"]
|
||||||
|
|
||||||
[node name="Background" type="Sprite2D" parent="."]
|
[node name="Background" type="Sprite2D" parent="."]
|
||||||
position = Vector2(640, 360)
|
position = Vector2(640, 360)
|
||||||
|
|
@ -38,6 +39,9 @@ texture = ExtResource("2_7mycd")
|
||||||
position = Vector2(640, 360)
|
position = Vector2(640, 360)
|
||||||
texture = ExtResource("3_272bh")
|
texture = ExtResource("3_272bh")
|
||||||
|
|
||||||
|
[node name="Painting" parent="." instance=ExtResource("9_kek77")]
|
||||||
|
position = Vector2(1075, 130)
|
||||||
|
|
||||||
[node name="GameManager" type="Node2D" parent="." node_paths=PackedStringArray("audience_manager", "desk", "turn_manager", "current_bid_display")]
|
[node name="GameManager" type="Node2D" parent="." node_paths=PackedStringArray("audience_manager", "desk", "turn_manager", "current_bid_display")]
|
||||||
script = ExtResource("1_ig7tw")
|
script = ExtResource("1_ig7tw")
|
||||||
audience_manager = NodePath("../AudienceManager")
|
audience_manager = NodePath("../AudienceManager")
|
||||||
|
|
|
||||||
21
paintings/.clang-format
Normal file
21
paintings/.clang-format
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
BasedOnStyle: LLVM
|
||||||
|
AlignAfterOpenBracket: DontAlign
|
||||||
|
AlignOperands: DontAlign
|
||||||
|
AlignTrailingComments:
|
||||||
|
# Kind: Never
|
||||||
|
# OverEmptyLines: 0
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: Inline
|
||||||
|
BreakConstructorInitializers: AfterColon
|
||||||
|
ColumnLimit: 0
|
||||||
|
ContinuationIndentWidth: 8
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentWidth: 4
|
||||||
|
InsertBraces: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||||
|
RemoveSemicolon: true
|
||||||
|
SpacesInLineCommentPrefix:
|
||||||
|
# Minimum: 0 # We want a minimum of 1 for comments, but allow 0 for disabled code.
|
||||||
|
# Maximum: -1
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Always
|
||||||
67
paintings/fractal.gd
Normal file
67
paintings/fractal.gd
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
@tool
|
||||||
|
extends ColorRect
|
||||||
|
|
||||||
|
|
||||||
|
@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize
|
||||||
|
|
||||||
|
|
||||||
|
@export var smoothing := true:
|
||||||
|
set(x): material.set_shader_parameter('smoothing', x)
|
||||||
|
get(): return material.get_shader_parameter('smoothing')
|
||||||
|
|
||||||
|
@export var use_color_gradient := false:
|
||||||
|
set(x): material.set_shader_parameter('use_color_gradient', x)
|
||||||
|
get(): return material.get_shader_parameter('use_color_gradient')
|
||||||
|
|
||||||
|
@export var gradient_start := Color(.18, 0, .45):
|
||||||
|
set(x): material.set_shader_parameter('gradient_start', x)
|
||||||
|
get(): return material.get_shader_parameter('gradient_start')
|
||||||
|
|
||||||
|
@export var gradient_end := Color.YELLOW:
|
||||||
|
set(x): material.set_shader_parameter('gradient_end', x)
|
||||||
|
get(): return material.get_shader_parameter('gradient_end')
|
||||||
|
|
||||||
|
@export var gradient_accent := Color.YELLOW:
|
||||||
|
set(x): material.set_shader_parameter('gradient_accent', x)
|
||||||
|
get(): return material.get_shader_parameter('gradient_accent')
|
||||||
|
|
||||||
|
@export var fractal_scale := 0.5:
|
||||||
|
set(x): material.set_shader_parameter('scale', x)
|
||||||
|
get(): return material.get_shader_parameter('scale')
|
||||||
|
|
||||||
|
@export var fractal_seed := Vector2(-0.529, 0.136):
|
||||||
|
set(x): material.set_shader_parameter('seed', x)
|
||||||
|
get(): return material.get_shader_parameter('seed')
|
||||||
|
|
||||||
|
@export var fractal_power := 3:
|
||||||
|
set(x): material.set_shader_parameter('power', x)
|
||||||
|
get(): return material.get_shader_parameter('power')
|
||||||
|
|
||||||
|
@export var fractal_escape := 1.0:
|
||||||
|
set(x): material.set_shader_parameter('escape', x)
|
||||||
|
get(): return material.get_shader_parameter('escape')
|
||||||
|
|
||||||
|
|
||||||
|
func _on_resized() -> void:
|
||||||
|
material.set_shader_parameter('aspect_ratio', size.aspect())
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
_on_resized()
|
||||||
|
|
||||||
|
|
||||||
|
func randomize(rng_seed := randi()) -> void:
|
||||||
|
var rng := RandomNumberGenerator.new()
|
||||||
|
rng.seed = rng_seed
|
||||||
|
fractal_power = rng.randi_range(2, 5)
|
||||||
|
fractal_escape = rng.randi_range(1, 4)
|
||||||
|
#fractal_scale = randf_range(0.5, 0.5 * size.aspect()) - 0.1
|
||||||
|
match fractal_power:
|
||||||
|
5: fractal_seed = Vector2(rng.randf_range(-0.7, -0.6), rng.randf_range(-0.1, 0.1))
|
||||||
|
4: fractal_seed = Vector2(rng.randf_range(-1.2, -1), rng.randf_range(-0.2, 0.2))
|
||||||
|
3: fractal_seed = Vector2(rng.randf_range(0.45, 0.7), rng.randf_range(-0.7, 0.7))
|
||||||
|
2: match fractal_escape:
|
||||||
|
1.0: fractal_seed = Vector2(rng.randf_range(-0.9, -0.8), rng.randf_range(0, 0))
|
||||||
|
2.0: fractal_seed = Vector2(rng.randf_range(-1.8, -1.), rng.randf_range(0, 0))
|
||||||
|
_: fractal_seed = Vector2.RIGHT.rotated(randf_range(0, TAU)) * Vector2(0.6, 1)
|
||||||
|
_: fractal_seed = Vector2(rng.randf_range(-1, 1), rng.randf_range(-1, 1))
|
||||||
1
paintings/fractal.gd.uid
Normal file
1
paintings/fractal.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://bnmc3t0wxeayv
|
||||||
148
paintings/fractal.gdshader
Normal file
148
paintings/fractal.gdshader
Normal file
|
|
@ -0,0 +1,148 @@
|
||||||
|
// Original code is MIT licensed by Cory Petkovsek
|
||||||
|
// https://github.com/TokisanGames/godot-fractal-art
|
||||||
|
|
||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
uniform bool smoothing = true;
|
||||||
|
uniform bool use_color_gradient = false;
|
||||||
|
uniform vec4 gradient_start : source_color = vec4(0.18, 0., 0.45, 1.);
|
||||||
|
uniform vec4 gradient_end : source_color = vec4(1., 1., 0., 1.);
|
||||||
|
uniform vec4 gradient_accent : source_color = vec4(1., 1., 0., 1.);
|
||||||
|
uniform float accent_position = 0.65;
|
||||||
|
uniform float accent_width = 0.34;
|
||||||
|
uniform float red_frequency = 1.6615;
|
||||||
|
uniform float green_frequency = 1.246;
|
||||||
|
uniform float blue_frequency = 0.831;
|
||||||
|
uniform float red_phase = 6.3;
|
||||||
|
uniform float green_phase = 6.3;
|
||||||
|
uniform float blue_phase = 6.3;
|
||||||
|
|
||||||
|
uniform highp float scale = 0.5;
|
||||||
|
uniform highp vec2 position = vec2(0, 0);
|
||||||
|
uniform float aspect_ratio = 1.33333;
|
||||||
|
|
||||||
|
uniform highp vec2 seed = vec2(-0.794084, 0.136444);
|
||||||
|
uniform int power = 2;
|
||||||
|
uniform float iterations = 50.0;
|
||||||
|
uniform float escape = 4.0;
|
||||||
|
|
||||||
|
// Convert from rectangular to polar
|
||||||
|
highp vec2 c_pol(highp vec2 c) {
|
||||||
|
highp float radius = length(c);
|
||||||
|
highp float theta = atan(c.y, c.x);
|
||||||
|
return vec2(radius, theta);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert from rectangular to Polar
|
||||||
|
highp vec2 c_rec(highp vec2 c) {
|
||||||
|
highp float radius = abs(c.x);
|
||||||
|
highp float theta = c.y;
|
||||||
|
highp float a = radius * cos(theta);
|
||||||
|
highp float b = radius * sin(theta);
|
||||||
|
return vec2(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate base ^ exponent
|
||||||
|
highp vec2 c_pow(highp vec2 base, highp float ex) {
|
||||||
|
highp vec2 b = c_pol(base);
|
||||||
|
return c_rec(vec2(pow(b.x, ex), b.y * ex));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 alpha_blend(vec4 top, vec4 bot) {
|
||||||
|
return vec4(top.r * top.a + bot.r * bot.a * (1. - top.a),
|
||||||
|
top.g * top.a + bot.g * bot.a * (1. - top.a),
|
||||||
|
top.b * top.a + bot.b * bot.a * (1. - top.a),
|
||||||
|
1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec4 getColor(float i) {
|
||||||
|
if (use_color_gradient) {
|
||||||
|
// Create gradient
|
||||||
|
vec4 ramp = mix(gradient_start, gradient_end, i);
|
||||||
|
|
||||||
|
// gaussian formula ae^( -(x-b)^2 / 2c^2 )
|
||||||
|
// a = curve's peak = 1.0
|
||||||
|
// b = center of peak position
|
||||||
|
// c = standard deviation which controls width of bell
|
||||||
|
|
||||||
|
float gaussianx = exp(-((i - accent_position) * (i - accent_position)) / (2. * accent_width * accent_width));
|
||||||
|
vec4 accent = vec4(gradient_accent.r * gaussianx,
|
||||||
|
gradient_accent.g * gaussianx,
|
||||||
|
gradient_accent.b * gaussianx,
|
||||||
|
gaussianx);
|
||||||
|
|
||||||
|
return alpha_blend(accent, ramp);
|
||||||
|
} else {
|
||||||
|
/* Sin/Cos creates a smooth wave between 1 and -1, offset from each other.
|
||||||
|
* You can have 4 evenly distributed offsets from sin, cos, -sin, -cos
|
||||||
|
* (sin(x) +1) / 2 -> changes the wave to go between 0 and 1 with the same frequency, +2../4 will go from 0.5 and 1.0
|
||||||
|
* Calculate full cycles with: sin(cycles*6.5*i) or (sin(cycles*5.4*i)+1.0)/2.0 or (cos(cycles*3.8*i)+1.0)/2.0
|
||||||
|
*/
|
||||||
|
return vec4((sin(red_frequency * 6.5 * i + red_phase) + 1.0) / 2.0,
|
||||||
|
(sin(green_frequency * 6.5 * i + green_phase) + 1.0) / 2.0,
|
||||||
|
(sin(blue_frequency * 6.5 * i + blue_phase) + 1.0) / 2.0,
|
||||||
|
1.);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 random(vec2 uv) {
|
||||||
|
return vec2(fract(sin(dot(uv.xy,
|
||||||
|
vec2(12.9898,78.233))) * 43758.5453123));
|
||||||
|
}
|
||||||
|
|
||||||
|
vec2 voronoi(vec2 uv, float columns, float rows) {
|
||||||
|
vec2 index_uv = floor(vec2(uv.x * columns, uv.y * rows));
|
||||||
|
vec2 fract_uv = fract(vec2(uv.x * columns, uv.y * rows));
|
||||||
|
|
||||||
|
float minimum_dist = 1.0;
|
||||||
|
vec2 minimum_point;
|
||||||
|
|
||||||
|
for (int y= -1; y <= 1; y++) {
|
||||||
|
for (int x= -1; x <= 1; x++) {
|
||||||
|
vec2 neighbor = vec2(float(x),float(y));
|
||||||
|
vec2 point = random(index_uv + neighbor);
|
||||||
|
|
||||||
|
vec2 diff = neighbor + point - fract_uv;
|
||||||
|
float dist = length(diff);
|
||||||
|
|
||||||
|
if(dist < minimum_dist) {
|
||||||
|
minimum_dist = dist;
|
||||||
|
minimum_point = point;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return minimum_point;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
float i = 0.0;
|
||||||
|
|
||||||
|
highp vec2 c = seed;
|
||||||
|
|
||||||
|
highp vec2 z;
|
||||||
|
z.x = aspect_ratio * (UV.x - 0.5) / scale - position.x;
|
||||||
|
z.y = (UV.y - 0.5) / scale + position.y;
|
||||||
|
|
||||||
|
if (power == 2) {
|
||||||
|
while (i < iterations && length(z) <= escape) {
|
||||||
|
z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c; // 20fps
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (i < iterations && length(z) <= escape) {
|
||||||
|
z = c_pow(z, float(power)) + c; // 6-7fps
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i >= iterations) {
|
||||||
|
float r = voronoi(UV + seed, 10.0, 5.0).r;
|
||||||
|
COLOR = getColor(r);
|
||||||
|
} else {
|
||||||
|
if (smoothing && power > 1) {
|
||||||
|
i -= log(log(length(z))) / log(float(power));
|
||||||
|
}
|
||||||
|
COLOR = getColor(i / iterations);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
paintings/fractal.gdshader.uid
Normal file
1
paintings/fractal.gdshader.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://b8yiyjkjgvful
|
||||||
41
paintings/fractal.tscn
Normal file
41
paintings/fractal.tscn
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
[gd_scene load_steps=4 format=3 uid="uid://bx4upo2n66wke"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" uid="uid://b8yiyjkjgvful" path="res://paintings/fractal.gdshader" id="1_4re67"]
|
||||||
|
[ext_resource type="Script" uid="uid://bnmc3t0wxeayv" path="res://paintings/fractal.gd" id="2_o3htp"]
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_o3htp"]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
shader = ExtResource("1_4re67")
|
||||||
|
shader_parameter/smoothing = false
|
||||||
|
shader_parameter/use_color_gradient = false
|
||||||
|
shader_parameter/gradient_start = Color(0.18, 0, 0.45, 1)
|
||||||
|
shader_parameter/gradient_end = Color(1, 1, 0, 1)
|
||||||
|
shader_parameter/gradient_accent = Color(1, 1, 0, 1)
|
||||||
|
shader_parameter/accent_position = 0.65
|
||||||
|
shader_parameter/accent_width = 0.34
|
||||||
|
shader_parameter/red_frequency = 1.6615
|
||||||
|
shader_parameter/green_frequency = 1.246
|
||||||
|
shader_parameter/blue_frequency = 0.831
|
||||||
|
shader_parameter/red_phase = 6.3
|
||||||
|
shader_parameter/green_phase = 6.3
|
||||||
|
shader_parameter/blue_phase = 6.3
|
||||||
|
shader_parameter/scale = 0.5
|
||||||
|
shader_parameter/position = Vector2(0, 0)
|
||||||
|
shader_parameter/aspect_ratio = 1.3333334
|
||||||
|
shader_parameter/seed = Vector2(0.17868738, -0.9546245)
|
||||||
|
shader_parameter/power = 2
|
||||||
|
shader_parameter/iterations = 10.0
|
||||||
|
shader_parameter/escape = 3.0
|
||||||
|
|
||||||
|
[node name="Fractal" type="ColorRect"]
|
||||||
|
material = SubResource("ShaderMaterial_o3htp")
|
||||||
|
custom_minimum_size = Vector2(32, 24)
|
||||||
|
offset_right = 320.0
|
||||||
|
offset_bottom = 240.0
|
||||||
|
script = ExtResource("2_o3htp")
|
||||||
|
smoothing = false
|
||||||
|
fractal_seed = Vector2(0.17868738, -0.9546245)
|
||||||
|
fractal_power = 2
|
||||||
|
fractal_escape = 3.0
|
||||||
|
|
||||||
|
[connection signal="resized" from="." to="." method="_on_resized"]
|
||||||
BIN
paintings/frame.png
Normal file
BIN
paintings/frame.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
40
paintings/frame.png.import
Normal file
40
paintings/frame.png.import
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://b142kv367vbw7"
|
||||||
|
path="res://.godot/imported/frame.png-e1682da613f441ce461363027e19aee4.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://paintings/frame.png"
|
||||||
|
dest_files=["res://.godot/imported/frame.png-e1682da613f441ce461363027e19aee4.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/uastc_level=0
|
||||||
|
compress/rdo_quality_loss=0.0
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/channel_remap/red=0
|
||||||
|
process/channel_remap/green=1
|
||||||
|
process/channel_remap/blue=2
|
||||||
|
process/channel_remap/alpha=3
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
80
paintings/noise.gd
Normal file
80
paintings/noise.gd
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
@tool
|
||||||
|
extends ColorRect
|
||||||
|
|
||||||
|
|
||||||
|
@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize
|
||||||
|
|
||||||
|
|
||||||
|
@export var noise: FastNoiseLite:
|
||||||
|
set(x):
|
||||||
|
if noise: noise.changed.disconnect(_changed_noise)
|
||||||
|
noise = x
|
||||||
|
if noise: noise.changed.connect(_changed_noise)
|
||||||
|
|
||||||
|
@export var steps := 12:
|
||||||
|
set(x): material.set_shader_parameter('steps', x)
|
||||||
|
get(): return material.get_shader_parameter('steps')
|
||||||
|
|
||||||
|
@export var gradient_start := Color(.18, 0, .45):
|
||||||
|
set(x): material.set_shader_parameter('gradient_start', x)
|
||||||
|
get(): return material.get_shader_parameter('gradient_start')
|
||||||
|
|
||||||
|
@export var gradient_end := Color.YELLOW:
|
||||||
|
set(x): material.set_shader_parameter('gradient_end', x)
|
||||||
|
get(): return material.get_shader_parameter('gradient_end')
|
||||||
|
|
||||||
|
@export var rng_seed := 0:
|
||||||
|
set(x):
|
||||||
|
rng_seed = x
|
||||||
|
_regenerate()
|
||||||
|
|
||||||
|
|
||||||
|
var _noise_texture := NoiseTexture2D.new():
|
||||||
|
set(x):
|
||||||
|
_noise_texture = x
|
||||||
|
_changed_noise()
|
||||||
|
|
||||||
|
|
||||||
|
func _changed_noise() -> void:
|
||||||
|
_noise_texture.noise = noise
|
||||||
|
material.set_shader_parameter('noise', _noise_texture)
|
||||||
|
|
||||||
|
|
||||||
|
func _resized() -> void:
|
||||||
|
_noise_texture.width = ceili(size.x)
|
||||||
|
_noise_texture.height = ceili(size.y)
|
||||||
|
_changed_noise()
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
_resized()
|
||||||
|
resized.connect(_resized)
|
||||||
|
|
||||||
|
|
||||||
|
func _regenerate() -> void:
|
||||||
|
var rng := RandomNumberGenerator.new()
|
||||||
|
rng.seed = rng_seed
|
||||||
|
noise.fractal_type = rng.randi_range(0, 3) as FastNoiseLite.FractalType
|
||||||
|
match noise.fractal_type:
|
||||||
|
3: noise.fractal_octaves = 2
|
||||||
|
2: noise.fractal_octaves = 3
|
||||||
|
_: noise.fractal_octaves = 5
|
||||||
|
noise.frequency = rng.randf_range(0.002, 0.004)
|
||||||
|
noise.seed = rng.seed
|
||||||
|
match rng.randi_range(1, 5):
|
||||||
|
1: steps = 2
|
||||||
|
2: steps = 5
|
||||||
|
3: steps = 12
|
||||||
|
4: steps = 24
|
||||||
|
5: steps = 128
|
||||||
|
var lighter := rng.randf_range(0.4, 0.8)
|
||||||
|
var darker := rng.randf_range(0.2, 0.6)
|
||||||
|
var color1 := Color.from_ok_hsl(rng.randf(), rng.randf() * 0.8 + 0.2, lighter)
|
||||||
|
var color2 := Color.from_ok_hsl(rng.randf(), rng.randf(), lighter - darker)
|
||||||
|
match rng.randi_range(1, 2):
|
||||||
|
1: gradient_start = color1; gradient_end = color2
|
||||||
|
_: gradient_start = color2; gradient_end = color1
|
||||||
|
|
||||||
|
|
||||||
|
func randomize() -> void:
|
||||||
|
rng_seed = randi()
|
||||||
1
paintings/noise.gd.uid
Normal file
1
paintings/noise.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://2jt34o1v7gbo
|
||||||
11
paintings/noise.gdshader
Normal file
11
paintings/noise.gdshader
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
uniform sampler2D noise;
|
||||||
|
uniform float steps = 8.0;
|
||||||
|
uniform vec4 gradient_start : source_color = vec4(0.18, 0., 0.45, 1.);
|
||||||
|
uniform vec4 gradient_end : source_color = vec4(1., 1., 0., 1.);
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
float r = round(texture(noise, UV).r * steps) / steps;
|
||||||
|
COLOR = mix(gradient_start, gradient_end, r);
|
||||||
|
}
|
||||||
1
paintings/noise.gdshader.uid
Normal file
1
paintings/noise.gdshader.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://b6jkek1qotcnf
|
||||||
35
paintings/noise.tscn
Normal file
35
paintings/noise.tscn
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
[gd_scene load_steps=6 format=3 uid="uid://bjpharjtpysre"]
|
||||||
|
|
||||||
|
[ext_resource type="Shader" uid="uid://b6jkek1qotcnf" path="res://paintings/noise.gdshader" id="1_2lnyf"]
|
||||||
|
[ext_resource type="Script" uid="uid://2jt34o1v7gbo" path="res://paintings/noise.gd" id="1_o4civ"]
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_o4civ"]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
seed = 1
|
||||||
|
frequency = 0.0028707401
|
||||||
|
offset = Vector3(1460.7504, 943.2602, 0)
|
||||||
|
fractal_type = 2
|
||||||
|
fractal_octaves = 3
|
||||||
|
|
||||||
|
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_2lnyf"]
|
||||||
|
width = 320
|
||||||
|
height = 240
|
||||||
|
noise = SubResource("FastNoiseLite_o4civ")
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id="ShaderMaterial_0uljq"]
|
||||||
|
shader = ExtResource("1_2lnyf")
|
||||||
|
shader_parameter/noise = SubResource("NoiseTexture2D_2lnyf")
|
||||||
|
shader_parameter/steps = 8.0
|
||||||
|
shader_parameter/gradient_start = Color(0.56780183, 0.45513594, 0.630845, 1)
|
||||||
|
shader_parameter/gradient_end = Color(0.5222837, 0.45749915, 0.35617962, 1)
|
||||||
|
|
||||||
|
[node name="Noise" type="ColorRect"]
|
||||||
|
material = SubResource("ShaderMaterial_0uljq")
|
||||||
|
custom_minimum_size = Vector2(32, 24)
|
||||||
|
offset_right = 320.0
|
||||||
|
offset_bottom = 240.0
|
||||||
|
script = ExtResource("1_o4civ")
|
||||||
|
noise = SubResource("FastNoiseLite_o4civ")
|
||||||
|
steps = 8
|
||||||
|
gradient_start = Color(0.56780183, 0.45513594, 0.630845, 1)
|
||||||
|
gradient_end = Color(0.5222837, 0.45749915, 0.35617962, 1)
|
||||||
10
paintings/painting.gd
Normal file
10
paintings/painting.gd
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
@tool
|
||||||
|
extends Node2D
|
||||||
|
class_name Painting
|
||||||
|
|
||||||
|
|
||||||
|
@export_tool_button('Randomize', 'RandomNumberGenerator') var randomize_action = randomize
|
||||||
|
|
||||||
|
|
||||||
|
func randomize(rng_seed := randi()) -> void:
|
||||||
|
%Noise.rng_seed = rng_seed
|
||||||
1
paintings/painting.gd.uid
Normal file
1
paintings/painting.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
uid://tqu2ms43fhis
|
||||||
49
paintings/painting.tscn
Normal file
49
paintings/painting.tscn
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
[gd_scene load_steps=5 format=3 uid="uid://donkfeu1x888o"]
|
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://b142kv367vbw7" path="res://paintings/frame.png" id="1_6chac"]
|
||||||
|
[ext_resource type="Script" uid="uid://tqu2ms43fhis" path="res://paintings/painting.gd" id="1_465no"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bjpharjtpysre" path="res://paintings/noise.tscn" id="2_oqt1c"]
|
||||||
|
|
||||||
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_465no"]
|
||||||
|
resource_local_to_scene = true
|
||||||
|
seed = 1262753571
|
||||||
|
frequency = 0.0024024888
|
||||||
|
offset = Vector3(1460.7504, 943.2602, 0)
|
||||||
|
fractal_type = 0
|
||||||
|
|
||||||
|
[node name="Painting" type="Node2D"]
|
||||||
|
texture_filter = 1
|
||||||
|
script = ExtResource("1_465no")
|
||||||
|
|
||||||
|
[node name="Frame" type="Sprite2D" parent="."]
|
||||||
|
texture = ExtResource("1_6chac")
|
||||||
|
|
||||||
|
[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
|
||||||
|
offset_left = -146.0
|
||||||
|
offset_top = -91.0
|
||||||
|
offset_right = 146.0
|
||||||
|
offset_bottom = 91.0
|
||||||
|
stretch = true
|
||||||
|
stretch_shrink = 4
|
||||||
|
|
||||||
|
[node name="SubViewport" type="SubViewport" parent="SubViewportContainer"]
|
||||||
|
handle_input_locally = false
|
||||||
|
size = Vector2i(73, 45)
|
||||||
|
size_2d_override = Vector2i(480, 360)
|
||||||
|
size_2d_override_stretch = true
|
||||||
|
render_target_update_mode = 4
|
||||||
|
|
||||||
|
[node name="Noise" parent="SubViewportContainer/SubViewport" instance=ExtResource("2_oqt1c")]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_right = 0.0
|
||||||
|
offset_bottom = 0.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
noise = SubResource("FastNoiseLite_465no")
|
||||||
|
steps = 5
|
||||||
|
gradient_start = Color(0.31606108, 0.20250309, 0.17190823, 1)
|
||||||
|
gradient_end = Color(0.48729545, 0.5426228, 0.2567169, 1)
|
||||||
|
rng_seed = 1262753571
|
||||||
Loading…
Add table
Reference in a new issue