noise, but noghint working

This commit is contained in:
2025-08-03 21:40:35 +03:00
parent 761a1b63f4
commit 62a680e260
7 changed files with 106 additions and 62 deletions

View File

@@ -1,17 +0,0 @@
shader_type canvas_item;
// Snippets of code drawn from https://gist.github.com/Bleuje/1e497df4505ca24c39ab3930a95700b3
uniform sampler2D sim_texture;
float gn(in vec2 coordinate, in float seed){
return fract(tan(distance(coordinate*(seed+0.118446744073709551614), vec2(0.118446744073709551614, 0.314159265358979323846264)))*0.141421356237309504880169);
}
void fragment() {
vec3 orig = texture(sim_texture, UV).rgb;
float agent = orig.r;
float trail = orig.g;
COLOR = vec4(agent, trail, orig.b, 1.0);
}

View File

@@ -1,20 +1,21 @@
shader_type canvas_item; shader_type canvas_item;
uniform sampler2D sim_texture; uniform sampler2D trail_texture;
uniform float decay_factor; uniform float decay_factor;
void fragment() { void fragment() {
vec3 orig = texture(sim_texture, UV).rgb; vec3 orig = texture(trail_texture, UV).rgb;
float trail = texture(sim_texture, UV).g; float trail = orig.r;
float sum = 0.0; float sum = 0.0;
for(int i=-1;i<=1;i++) { for(float i=-1.0;i<=1.5;i++) {
for(int j=-1;j<=1;j++) { for(float j=-1.0;j<=1.5;j++) {
sum += texture(sim_texture, UV).g; vec2 offset = vec2(i,j);
sum += texture(trail_texture, UV + vec2(i,j)).g;
} }
} }
trail = sum / 9.0; trail = sum / 9.0;
trail = trail * decay_factor; trail = trail * decay_factor;
COLOR = vec4(orig.r, trail, orig.b, 1.0); COLOR = vec4(trail, orig.g, orig.b, 1.0);
} }

View File

@@ -0,0 +1,38 @@
shader_type canvas_item;
uniform sampler2D point_texture;
uniform sampler2D trail_texture;
uniform ivec2 point_texture_size;
uniform ivec2 canvas_size;
uniform float point_speed;
// Snippets of code drawn from https://gist.github.com/Bleuje/1e497df4505ca24c39ab3930a95700b3
float gn(in vec2 coordinate, in float seed){
return fract(tan(distance(coordinate*(seed+0.118446744073709551614), vec2(0.118446744073709551614, 0.314159265358979323846264)))*0.141421356237309504880169);
}
float trail_at_pos(vec2 uv) {
return texture(trail_texture, uv).r;
}
void vertex() {
int id = VERTEX_ID;
int x = id % point_texture_size.x;
int y = id / point_texture_size.x;
// This feels dumb
vec2 uv = vec2(float(x), float(y));
vec4 point_data = texture(point_texture, uv);
vec2 pos = point_data.xy;
pos += vec2(5000.0, 5000.0);
float angle = point_data.z;
VERTEX = pos/vec2(canvas_size);
//COLOR = vec4(pos, angle, point_data.z)
COLOR=vec4(1, 1, 1, 1);
}
void fragment() {
}

View File

@@ -1,6 +1,6 @@
shader_type canvas_item; shader_type canvas_item;
uniform sampler2D sim_texture; uniform sampler2D view_texture;
void fragment() { void fragment() {
vec3 v = texture(view_texture, UV).rgb; vec3 v = texture(view_texture, UV).rgb;

View File

@@ -2,30 +2,60 @@ extends Node2D
@export var render_width: int = 1920 @export var render_width: int = 1920
@export var render_height: int = 1080 @export var render_height: int = 1080
@export var point_count: int = 1024 * 1024
@export var point_texture_width: int = 1024
var point_texture_height: int:
get():
@warning_ignore("integer_division")
return point_count / point_texture_width
@export var point_speed: float = 2.0
@export var decay_factor: float = 0.95 @export var decay_factor: float = 0.95
@export var rng_seed: int = 10074
@onready var points: MultiMesh = $SubViewport/PointMesh.multimesh
@onready var view := $View @onready var view := $View
@onready var pass_viewport := $SubViewport @onready var pass_viewport := $SubViewport
@onready var pass2_viewport := $SubViewport2 @onready var pass2_viewport := $SubViewport2
@onready var agent_shader: ShaderMaterial = $SubViewport/Pass.material @onready var point_shader: ShaderMaterial = $SubViewport/PointMesh.material
@onready var trail_shader: ShaderMaterial = $SubViewport2/Pass.material @onready var trail_shader: ShaderMaterial = $SubViewport2/Pass.material
const MAX_TEXTURES: int = 2
var _next_texture: int = 0
var _frame_count: int = 0 var _frame_count: int = 0
var point_texture: ImageTexture = null
func populate_points() -> void:
var rng = RandomNumberGenerator.new()
rng.seed = rng_seed
points.instance_count = point_count
var point_data_image: Image = Image.create_empty(point_texture_width, point_texture_height, false, Image.FORMAT_RGBAF)
for i in point_count:
var pos: Vector2 = Vector2(
rng.randf_range(0, render_width), rng.randf_range(0, render_height)
)
var angle: float = rng.randf_range(0, TAU)
var x = i % point_texture_width
@warning_ignore("integer_division")
var y = i / point_texture_width
point_data_image.set_pixel(x, y, Color(pos.x, pos.y, angle, 1.0))
# Lets keep original positions at 0 instead of doing the below
var t: Transform2D = Transform2D(0, pos)
points.set_instance_transform_2d(i, t)
point_texture = ImageTexture.create_from_image(point_data_image)
point_shader.set_shader_parameter("point_texture", point_texture)
point_shader.set_shader_parameter("point_texture_size", Vector2(point_texture_width, point_texture_height))
point_shader.set_shader_parameter("canvas_size", Vector2(1920, 1080))
point_shader.set_shader_parameter("point_speed", point_speed)
func _ready(): func _ready():
populate_points()
RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height)) RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height))
func _process(_delta: float) -> void: func _process(_delta: float) -> void:
_next_texture = (_next_texture + 1) % MAX_TEXTURES RenderingServer.call_on_render_thread(_render_process.bind(_frame_count, decay_factor))
RenderingServer.call_on_render_thread(
_render_process.bind(_next_texture, _frame_count, decay_factor)
)
_frame_count = _frame_count + 1 _frame_count = _frame_count + 1
@@ -45,14 +75,14 @@ func _create_initial_sim_texture(width: int, height: int) -> ImageTexture:
func _initialize_render(_width: int, _height: int) -> void: func _initialize_render(_width: int, _height: int) -> void:
rd = RenderingServer.get_rendering_device() rd = RenderingServer.get_rendering_device()
trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid()) trail_shader.set_shader_parameter("trail_texture", pass_viewport.get_texture().get_rid())
trail_shader.set_shader_parameter("decay_factor", decay_factor) trail_shader.set_shader_parameter("decay_factor", decay_factor)
func _render_process(__next_texture: int, frame_count: int, decay_factor: float) -> void: func _render_process(frame_count: int) -> void:
if frame_count > 0: if frame_count > 0:
agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid()) point_shader.set_shader_parameter("trail_texture", pass2_viewport.get_texture().get_rid())
trail_shader.set_shader_parameter("decay_factor", decay_factor) trail_shader.set_shader_parameter("decay_factor", decay_factor)
trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid()) #trail_shader.set_shader_parameter("trail_texture", pass_viewport.get_texture().get_rid())
# agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid()) # point_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())

View File

@@ -1,39 +1,33 @@
[gd_scene load_steps=12 format=3 uid="uid://0q5qa7yiya83"] [gd_scene load_steps=11 format=3 uid="uid://0q5qa7yiya83"]
[ext_resource type="Script" uid="uid://c6et88s5hp5c7" path="res://slime_simulation.gd" id="1_s6nlv"] [ext_resource type="Script" uid="uid://c6et88s5hp5c7" path="res://slime_simulation.gd" id="1_s6nlv"]
[ext_resource type="Shader" uid="uid://cwt4a55lblykn" path="res://shaders/agent_shader.gdshader" id="2_pxe3a"] [ext_resource type="Shader" uid="uid://cwt4a55lblykn" path="res://shaders/point_shader.gdshader" id="2_pxe3a"]
[ext_resource type="Shader" uid="uid://bj3v35wyy32la" path="res://shaders/dissolve.gdshader" id="3_s6nlv"] [ext_resource type="Shader" uid="uid://bj3v35wyy32la" path="res://shaders/dissolve.gdshader" id="3_s6nlv"]
[sub_resource type="QuadMesh" id="QuadMesh_h0wwo"] [sub_resource type="QuadMesh" id="QuadMesh_h0wwo"]
size = Vector2(1920, 1080) size = Vector2(1920, 1080)
[sub_resource type="ViewportTexture" id="ViewportTexture_s6nlv"] [sub_resource type="ViewportTexture" id="ViewportTexture_s6nlv"]
viewport_path = NodePath("SubViewport2") viewport_path = NodePath("SubViewport")
[sub_resource type="FastNoiseLite" id="FastNoiseLite_s6nlv"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_s6nlv"]
offset = Vector3(97.54, 0, 0)
fractal_octaves = 2
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_g2c28"]
width = 1920
height = 1080
generate_mipmaps = false
noise = SubResource("FastNoiseLite_s6nlv")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_evymn"]
shader = ExtResource("2_pxe3a") shader = ExtResource("2_pxe3a")
shader_parameter/sim_texture = SubResource("NoiseTexture2D_g2c28") shader_parameter/point_texture_size = Vector2i(0, 0)
shader_parameter/canvas_size = Vector2i(0, 0)
shader_parameter/point_speed = 0.0
[sub_resource type="QuadMesh" id="QuadMesh_s6nlv"] [sub_resource type="PointMesh" id="PointMesh_g2c28"]
size = Vector2(1920, 1080)
[sub_resource type="Texture2DRD" id="Texture2DRD_s6nlv"] [sub_resource type="MultiMesh" id="MultiMesh_vkm4v"]
mesh = SubResource("PointMesh_g2c28")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_g2c28"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_g2c28"]
shader = ExtResource("3_s6nlv") shader = ExtResource("3_s6nlv")
shader_parameter/sim_texture = SubResource("Texture2DRD_s6nlv")
shader_parameter/decay_factor = 0.99 shader_parameter/decay_factor = 0.99
[sub_resource type="QuadMesh" id="QuadMesh_s6nlv"]
size = Vector2(1920, 1080)
[node name="SlimeSimulation" type="Node2D"] [node name="SlimeSimulation" type="Node2D"]
script = ExtResource("1_s6nlv") script = ExtResource("1_s6nlv")
@@ -46,14 +40,12 @@ texture = SubResource("ViewportTexture_s6nlv")
disable_3d = true disable_3d = true
transparent_bg = true transparent_bg = true
handle_input_locally = false handle_input_locally = false
snap_2d_vertices_to_pixel = true
size = Vector2i(1920, 1080) size = Vector2i(1920, 1080)
render_target_update_mode = 4 render_target_update_mode = 4
[node name="Pass" type="MeshInstance2D" parent="SubViewport"] [node name="PointMesh" type="MultiMeshInstance2D" parent="SubViewport"]
material = SubResource("ShaderMaterial_evymn") material = SubResource("ShaderMaterial_s6nlv")
position = Vector2(960, 540) multimesh = SubResource("MultiMesh_vkm4v")
mesh = SubResource("QuadMesh_s6nlv")
[node name="SubViewport2" type="SubViewport" parent="."] [node name="SubViewport2" type="SubViewport" parent="."]
disable_3d = true disable_3d = true