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

@@ -2,30 +2,60 @@ extends Node2D
@export var render_width: int = 1920
@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 rng_seed: int = 10074
@onready var points: MultiMesh = $SubViewport/PointMesh.multimesh
@onready var view := $View
@onready var pass_viewport := $SubViewport
@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
const MAX_TEXTURES: int = 2
var _next_texture: 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():
populate_points()
RenderingServer.call_on_render_thread(_initialize_render.bind(render_width, render_height))
func _process(_delta: float) -> void:
_next_texture = (_next_texture + 1) % MAX_TEXTURES
RenderingServer.call_on_render_thread(
_render_process.bind(_next_texture, _frame_count, decay_factor)
)
RenderingServer.call_on_render_thread(_render_process.bind(_frame_count, decay_factor))
_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:
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)
func _render_process(__next_texture: int, frame_count: int, decay_factor: float) -> void:
func _render_process(frame_count: int) -> void:
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("sim_texture", pass_viewport.get_texture().get_rid())
# agent_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())
#trail_shader.set_shader_parameter("trail_texture", pass_viewport.get_texture().get_rid())
# point_shader.set_shader_parameter("sim_texture", pass2_viewport.get_texture().get_rid())