initial setup

This commit is contained in:
2025-08-03 01:39:59 +03:00
parent 82916425c8
commit b10deff5e0
10 changed files with 113 additions and 19 deletions

View File

@@ -30,4 +30,6 @@ folder_colors={
[rendering]
renderer/rendering_method="gl_compatibility"
renderer/rendering_method.mobile="gl_compatibility"
environment/defaults/default_clear_color=Color(0.0605303, 0.0605304, 0.0605303, 1)

View File

@@ -0,0 +1,8 @@
shader_type canvas_item;
uniform sampler2D sim_texture;
void fragment() {
vec3 c = texture(sim_texture, UV).rgb;
COLOR = vec4(c, 1.0);
}

11
shaders/dissolve.gdshader Normal file
View File

@@ -0,0 +1,11 @@
shader_type canvas_item;
uniform sampler2D sim_texture;
uniform float decay_factor;
void fragment() {
float c = texture(sim_texture, UV).r;
c = c * decay_factor;
COLOR = vec4(c, c, c, 1.0);
}

View File

@@ -0,0 +1 @@
uid://bj3v35wyy32la

View File

@@ -1,8 +0,0 @@
shader_type canvas_item;
void fragment() {
vec3 c1 = vec3(0.0, 0.4, 0.4);
vec3 c2 = vec3(0.4, 0.0, 0.4);
vec3 cout = mix(c1, c2, UV.x);
COLOR = vec4(cout, 1.0);
}

View File

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

View File

@@ -1,12 +1,58 @@
extends Node2D
@onready var view := $View
@onready var trail_shader: ShaderMaterial = $SubViewport/Pass1.material
@export var render_width: int = 1920
@export var render_height: int = 1080
@export var decay_factor: float = 0.95
@onready var view := $View
@onready var pass_viewport := $SubViewport
@onready var pass2_viewport := $SubViewport2
@onready var agent_shader: ShaderMaterial = $SubViewport/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 view_texture: Texture2DRD = null
func _ready():
pass
RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height))
func _process(_delta: float) -> void:
pass
next_texture = (next_texture + 1) % MAX_TEXTURES
RenderingServer.call_on_render_thread(
_render_process.bind(next_texture, frame_count, decay_factor)
)
frame_count = frame_count + 1
# Below is for rendering
var rd: RenderingDevice = null
var sim_texture: Texture2D = null
func _create_initial_sim_texture(width: int, height: int) -> ImageTexture:
var sim_image := Image.create_empty(width, height, false, Image.FORMAT_RGBF)
sim_texture = ImageTexture.create_from_image(sim_image)
return sim_texture
func _initialize_render(width: int, height: int) -> void:
rd = RenderingServer.get_rendering_device()
trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid())
trail_shader.set_shader_parameter("decay_factor", decay_factor)
func _render_process(next_texture: int, frame_count: int, decay_factor: float) -> void:
if frame_count > 0:
agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())
trail_shader.set_shader_parameter("decay_factor", decay_factor)
trail_shader.set_shader_parameter("sim_texture", pass_viewport.get_texture().get_rid())
# agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())

View File

@@ -1,20 +1,39 @@
[gd_scene load_steps=7 format=3 uid="uid://0q5qa7yiya83"]
[gd_scene load_steps=12 format=3 uid="uid://0q5qa7yiya83"]
[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/trail_shader.gdshader" id="3_vkm4v"]
[ext_resource type="Shader" uid="uid://cwt4a55lblykn" path="res://shaders/agent_shader.gdshader" id="2_pxe3a"]
[ext_resource type="Shader" uid="uid://bj3v35wyy32la" path="res://shaders/dissolve.gdshader" id="3_s6nlv"]
[sub_resource type="QuadMesh" id="QuadMesh_h0wwo"]
size = Vector2(1920, 1080)
[sub_resource type="ViewportTexture" id="ViewportTexture_s6nlv"]
viewport_path = NodePath("SubViewport")
viewport_path = NodePath("SubViewport2")
[sub_resource type="FastNoiseLite" id="FastNoiseLite_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("3_vkm4v")
shader = ExtResource("2_pxe3a")
shader_parameter/sim_texture = SubResource("NoiseTexture2D_g2c28")
[sub_resource type="QuadMesh" id="QuadMesh_s6nlv"]
size = Vector2(1920, 1080)
[sub_resource type="Texture2DRD" id="Texture2DRD_s6nlv"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_g2c28"]
shader = ExtResource("3_s6nlv")
shader_parameter/sim_texture = SubResource("Texture2DRD_s6nlv")
shader_parameter/decay_factor = 0.95
[node name="SlimeSimulation" type="Node2D"]
script = ExtResource("1_s6nlv")
@@ -24,13 +43,27 @@ mesh = SubResource("QuadMesh_h0wwo")
texture = SubResource("ViewportTexture_s6nlv")
[node name="SubViewport" type="SubViewport" parent="."]
disable_3d = true
transparent_bg = true
handle_input_locally = false
snap_2d_vertices_to_pixel = true
size = Vector2i(1920, 1080)
render_target_update_mode = 4
[node name="Pass1" type="MeshInstance2D" parent="SubViewport"]
[node name="Pass" type="MeshInstance2D" parent="SubViewport"]
material = SubResource("ShaderMaterial_evymn")
position = Vector2(960, 540)
mesh = SubResource("QuadMesh_s6nlv")
[node name="SubViewport2" type="SubViewport" parent="."]
disable_3d = true
transparent_bg = true
handle_input_locally = false
snap_2d_vertices_to_pixel = true
size = Vector2i(1920, 1080)
render_target_update_mode = 4
[node name="Pass" type="MeshInstance2D" parent="SubViewport2"]
material = SubResource("ShaderMaterial_g2c28")
position = Vector2(960, 540)
mesh = SubResource("QuadMesh_s6nlv")

View File

@@ -1,4 +1,5 @@
shader_type canvas_item;
uniform sampler2D trail_tex;
void fragment() {