initial setup
This commit is contained in:
@@ -30,4 +30,6 @@ folder_colors={
|
|||||||
|
|
||||||
[rendering]
|
[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)
|
environment/defaults/default_clear_color=Color(0.0605303, 0.0605304, 0.0605303, 1)
|
||||||
|
|||||||
8
shaders/agent_shader.gdshader
Normal file
8
shaders/agent_shader.gdshader
Normal 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
11
shaders/dissolve.gdshader
Normal 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);
|
||||||
|
}
|
||||||
1
shaders/dissolve.gdshader.uid
Normal file
1
shaders/dissolve.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bj3v35wyy32la
|
||||||
@@ -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);
|
|
||||||
}
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
uniform sampler2D view_texture;
|
uniform sampler2D sim_texture;
|
||||||
|
|
||||||
void fragment() {
|
void fragment() {
|
||||||
vec3 v = texture(view_texture, UV).rgb;
|
vec3 v = texture(view_texture, UV).rgb;
|
||||||
|
|||||||
@@ -1,12 +1,58 @@
|
|||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
@onready var view := $View
|
@export var render_width: int = 1920
|
||||||
@onready var trail_shader: ShaderMaterial = $SubViewport/Pass1.material
|
@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():
|
func _ready():
|
||||||
pass
|
RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height))
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
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())
|
||||||
|
|||||||
@@ -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="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"]
|
[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("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"]
|
[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"]
|
[sub_resource type="QuadMesh" id="QuadMesh_s6nlv"]
|
||||||
size = Vector2(1920, 1080)
|
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"]
|
[node name="SlimeSimulation" type="Node2D"]
|
||||||
script = ExtResource("1_s6nlv")
|
script = ExtResource("1_s6nlv")
|
||||||
|
|
||||||
@@ -24,13 +43,27 @@ mesh = SubResource("QuadMesh_h0wwo")
|
|||||||
texture = SubResource("ViewportTexture_s6nlv")
|
texture = SubResource("ViewportTexture_s6nlv")
|
||||||
|
|
||||||
[node name="SubViewport" type="SubViewport" parent="."]
|
[node name="SubViewport" type="SubViewport" parent="."]
|
||||||
|
disable_3d = true
|
||||||
transparent_bg = true
|
transparent_bg = true
|
||||||
handle_input_locally = false
|
handle_input_locally = false
|
||||||
snap_2d_vertices_to_pixel = true
|
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="Pass1" type="MeshInstance2D" parent="SubViewport"]
|
[node name="Pass" type="MeshInstance2D" parent="SubViewport"]
|
||||||
material = SubResource("ShaderMaterial_evymn")
|
material = SubResource("ShaderMaterial_evymn")
|
||||||
position = Vector2(960, 540)
|
position = Vector2(960, 540)
|
||||||
mesh = SubResource("QuadMesh_s6nlv")
|
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")
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
uniform sampler2D trail_tex;
|
uniform sampler2D trail_tex;
|
||||||
|
|
||||||
void fragment() {
|
void fragment() {
|
||||||
|
|||||||
Reference in New Issue
Block a user