Fixed platform shader

This commit is contained in:
2026-06-12 01:20:45 +03:00
parent 0c7e0f7c74
commit e72e17f7ca
12 changed files with 92 additions and 84 deletions
+1 -1
View File
@@ -23,7 +23,7 @@
[ext_resource type="PackedScene" uid="uid://cb0w6mt8g4mer" path="res://game/characters/enemies/gray_cultist.tscn" id="18_blgb8"]
[ext_resource type="PackedScene" uid="uid://cutjutvd8dqqc" path="res://game/characters/enemies/black_cultist.tscn" id="19_ohfy3"]
[ext_resource type="PackedScene" uid="uid://bv2gahb4wxgb1" path="res://game/characters/enemies/white_cultist.tscn" id="20_rt0xo"]
[ext_resource type="PackedScene" uid="uid://wpkj48bqyuy2" path="res://game/platform/abstract_colored_platform.tscn" id="24_h1708"]
[ext_resource type="PackedScene" uid="uid://wpkj48bqyuy2" path="res://game/platform/abstract_color_platform.tscn" id="24_h1708"]
[node name="TestLevel" unique_id=600627332 instance=ExtResource("1_15okj")]
script = ExtResource("2_a2sw7")
+13
View File
@@ -0,0 +1,13 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://bkmfkjkwnquil"]
[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="1_p23e2"]
[resource]
shader = ExtResource("1_p23e2")
shader_parameter/black_color = Color(0, 0, 0, 1)
shader_parameter/white_color = Color(1, 1, 1, 1)
shader_parameter/switch_colors = false
shader_parameter/threshold = 0.5
shader_parameter/speed = 1.0000000475
shader_parameter/intensity = 1.0
shader_parameter/scale = 5.0000002375
+13
View File
@@ -0,0 +1,13 @@
[gd_resource type="ShaderMaterial" format=3 uid="uid://2hd2pw5cgn1r"]
[ext_resource type="Shader" uid="uid://lqq1mg6l1qqe" path="res://game/shaders/black_n_white.gdshader" id="1_rnyyp"]
[resource]
shader = ExtResource("1_rnyyp")
shader_parameter/black_color = Color(0, 0, 0, 1)
shader_parameter/white_color = Color(1, 1, 1, 1)
shader_parameter/switch_colors = false
shader_parameter/threshold = 0.5
shader_parameter/speed = 1.0000000475
shader_parameter/intensity = 0.50000002375
shader_parameter/scale = 5.0000002375
@@ -1,5 +1,5 @@
@tool
class_name AbstractColoredPlatform
class_name AbstractColorPlatform
extends AbstractPlatform
@@ -1,18 +1,18 @@
[gd_scene format=3 uid="uid://wpkj48bqyuy2"]
[ext_resource type="PackedScene" uid="uid://guvijso3k6eq" path="res://game/platform/abstract_platform.tscn" id="1_8ogjv"]
[ext_resource type="Script" uid="uid://6hn6ncbqe6cn" path="res://game/platform/abstract_colored_platform.gd" id="2_3iy2o"]
[ext_resource type="Shader" uid="uid://d4hm3vjx1rhsf" path="res://game/shaders/platform.gdshader" id="2_jpqbs"]
[ext_resource type="Texture2D" uid="uid://cpcuokqv8u2xa" path="res://images/level/platform.png" id="3_3iy2o"]
[ext_resource type="Material" uid="uid://d2o2o1w8kb51g" path="res://game/materials/walls_white.tres" id="3_6pvc3"]
[ext_resource type="PackedScene" uid="uid://5qlocc0yu8ug" path="res://game/collision_switcher.tscn" id="5_3iy2o"]
[ext_resource type="PackedScene" uid="uid://guvijso3k6eq" path="res://game/platform/abstract_platform.tscn" id="1_ovkrd"]
[ext_resource type="Script" uid="uid://6hn6ncbqe6cn" path="res://game/platform/abstract_color_platform.gd" id="2_vbsvi"]
[ext_resource type="Material" uid="uid://bkmfkjkwnquil" path="res://game/materials/platform_color.tres" id="3_pbfpg"]
[ext_resource type="Shader" uid="uid://d4hm3vjx1rhsf" path="res://game/shaders/platform.gdshader" id="4_cdhfe"]
[ext_resource type="Texture2D" uid="uid://cpcuokqv8u2xa" path="res://images/level/platform.png" id="5_uk0x1"]
[ext_resource type="PackedScene" uid="uid://5qlocc0yu8ug" path="res://game/collision_switcher.tscn" id="6_mk014"]
[sub_resource type="ViewportTexture" id="ViewportTexture_majud"]
[sub_resource type="ViewportTexture" id="ViewportTexture_ovkrd"]
viewport_path = NodePath("SubViewport")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_gfbtg"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_vbsvi"]
resource_local_to_scene = true
shader = ExtResource("2_jpqbs")
shader = ExtResource("4_cdhfe")
shader_parameter/black_color = Color(0, 0, 0, 1)
shader_parameter/white_color = Color(1, 1, 1, 1)
shader_parameter/switch_colors = false
@@ -22,26 +22,26 @@ shader_parameter/intensity = 1.0
shader_parameter/scale = 20.0
shader_parameter/tile_size = 8.0
shader_parameter/platform_width = 24.0
shader_parameter/atlas = ExtResource("3_3iy2o")
shader_parameter/seed = 0.23701711
shader_parameter/atlas = ExtResource("5_uk0x1")
shader_parameter/seed = 0.12241629
[sub_resource type="RectangleShape2D" id="RectangleShape2D_2p7w0"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pbfpg"]
resource_local_to_scene = true
size = Vector2(16, 7)
[node name="AbstractColoredPlatform" unique_id=137546339 instance=ExtResource("1_8ogjv")]
[node name="AbstractColorPlatform" unique_id=137546339 instance=ExtResource("1_ovkrd")]
collision_layer = 32
script = ExtResource("2_3iy2o")
script = ExtResource("2_vbsvi")
[node name="Sprite2D" parent="." index="0" unique_id=264863796]
material = ExtResource("3_6pvc3")
texture = SubResource("ViewportTexture_majud")
material = ExtResource("3_pbfpg")
texture = SubResource("ViewportTexture_ovkrd")
[node name="PlatformRect" parent="SubViewport" parent_id_path=PackedInt32Array(226200089) index="0" unique_id=794315918]
material = SubResource("ShaderMaterial_gfbtg")
material = SubResource("ShaderMaterial_vbsvi")
[node name="CollisionShape2D" parent="." index="2" unique_id=175449124]
shape = SubResource("RectangleShape2D_2p7w0")
shape = SubResource("RectangleShape2D_pbfpg")
[node name="CollisionSwitcher" parent="." index="3" unique_id=542648449 node_paths=PackedStringArray("object") instance=ExtResource("5_3iy2o")]
[node name="CollisionSwitcher" parent="." index="3" unique_id=542648449 node_paths=PackedStringArray("object") instance=ExtResource("6_mk014")]
object = NodePath("..")
+1 -1
View File
@@ -30,7 +30,7 @@ func _ready() -> void:
func rebuild_platform() -> void:
var shape := collision.shape as RectangleShape2D
shape.size = Vector2(platform_width, TILE_SIZE)
shape.size.x = platform_width
sub_viewport.size = Vector2(platform_width, TILE_SIZE)
platform_rect.size.x = platform_width
+2 -9
View File
@@ -1,7 +1,7 @@
[gd_scene format=3 uid="uid://guvijso3k6eq"]
[ext_resource type="Script" uid="uid://kjy0t56tgpxs" path="res://game/platform/abstract_platform.gd" id="1_426vp"]
[ext_resource type="Material" uid="uid://dojhoc6ljpt1a" path="res://game/materials/walls_gray.tres" id="2_2ivtb"]
[ext_resource type="Material" uid="uid://2hd2pw5cgn1r" path="res://game/materials/platform_gray.tres" id="2_2ivtb"]
[ext_resource type="Texture2D" uid="uid://cpcuokqv8u2xa" path="res://images/level/platform.png" id="2_31xwx"]
[ext_resource type="Shader" uid="uid://d4hm3vjx1rhsf" path="res://game/shaders/platform.gdshader" id="2_jsq8n"]
@@ -11,17 +11,10 @@ viewport_path = NodePath("SubViewport")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_2ivtb"]
resource_local_to_scene = true
shader = ExtResource("2_jsq8n")
shader_parameter/black_color = Color(0, 0, 0, 1)
shader_parameter/white_color = Color(1, 1, 1, 1)
shader_parameter/switch_colors = false
shader_parameter/threshold = 0.5
shader_parameter/speed = 0.5
shader_parameter/intensity = 1.0
shader_parameter/scale = 20.0
shader_parameter/tile_size = 8.0
shader_parameter/platform_width = 24.0
shader_parameter/atlas = ExtResource("2_31xwx")
shader_parameter/seed = 0.7482483
shader_parameter/seed = 0.1415489
[sub_resource type="RectangleShape2D" id="RectangleShape2D_jsq8n"]
resource_local_to_scene = true
+42 -2
View File
@@ -1,7 +1,47 @@
shader_type canvas_item;
#include "get_black_n_white.gdshaderinc"
uniform vec4 black_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform vec4 white_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
uniform bool switch_colors = false;
uniform float threshold : hint_range(0.0, 1.0) = 0.5;
uniform float speed : hint_range(0.0, 10.0) = 0.5;
uniform float intensity : hint_range(0.0, 1.0) = 1.0;
uniform float scale : hint_range(0.0, 100.0) = 20.0;
vec2 random(vec2 uv){
uv = vec2( dot(uv, vec2(127.1,311.7) ),
dot(uv, vec2(269.5,183.3) ) );
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
}
float noise(vec2 uv) {
vec2 uv_index = floor(uv);
vec2 uv_fract = fract(uv);
vec2 blur = smoothstep(0.0, 1.0, uv_fract);
return mix( mix( dot( random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ),
dot( random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x),
mix( dot( random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ),
dot( random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) + 0.5;
}
void fragment() {
COLOR = get_black_and_white(COLOR, UV, TIME);
if (COLOR.a > 0.01) {
vec2 noise_uv = UV * vec2(1.0, TEXTURE_PIXEL_SIZE.x / TEXTURE_PIXEL_SIZE.y);
float l = dot(COLOR.rgb, vec3(0.2126, 0.7152, 0.0722));
bool is_black = l < threshold;
if (switch_colors) {
is_black = !is_black;
}
if (intensity < 1.0) {
vec2 coord = noise_uv * scale + TIME * speed;
if (noise(coord) > intensity) {
is_black = !is_black;
}
}
COLOR = is_black ? black_color : white_color;
}
}
@@ -1,47 +0,0 @@
uniform vec4 black_color : source_color = vec4(0.0, 0.0, 0.0, 1.0);
uniform vec4 white_color : source_color = vec4(1.0, 1.0, 1.0, 1.0);
uniform bool switch_colors = false;
uniform float threshold : hint_range(0.0, 1.0) = 0.5;
uniform float speed : hint_range(0.0, 10.0) = 0.5;
uniform float intensity : hint_range(0.0, 1.0) = 1.0;
uniform float scale : hint_range(0.0, 100.0) = 20.0;
vec2 random(vec2 uv){
uv = vec2( dot(uv, vec2(127.1,311.7) ),
dot(uv, vec2(269.5,183.3) ) );
return -1.0 + 2.0 * fract(sin(uv) * 43758.5453123);
}
float noise(vec2 uv) {
vec2 uv_index = floor(uv);
vec2 uv_fract = fract(uv);
vec2 blur = smoothstep(0.0, 1.0, uv_fract);
return mix( mix( dot( random(uv_index + vec2(0.0,0.0) ), uv_fract - vec2(0.0,0.0) ),
dot( random(uv_index + vec2(1.0,0.0) ), uv_fract - vec2(1.0,0.0) ), blur.x),
mix( dot( random(uv_index + vec2(0.0,1.0) ), uv_fract - vec2(0.0,1.0) ),
dot( random(uv_index + vec2(1.0,1.0) ), uv_fract - vec2(1.0,1.0) ), blur.x), blur.y) + 0.5;
}
vec4 get_black_and_white(vec4 color, vec2 uv, float time) {
if (color.a < 0.01) return color;
float l = dot(color.rgb, vec3(0.2126, 0.7152, 0.0722));
bool is_black = l < threshold;
if (switch_colors) {
is_black = !is_black;
}
if (intensity < 1.0) {
vec2 coord = uv * scale + time * speed;
if (noise(coord) > intensity) {
is_black = !is_black;
}
}
if (is_black) {
return black_color;
}
return white_color;
}
@@ -1 +0,0 @@
uid://bvklme5ww0g2f
-3
View File
@@ -1,7 +1,5 @@
shader_type canvas_item;
#include "get_black_n_white.gdshaderinc"
uniform float tile_size = 8.0;
uniform float platform_width = 24.0;
uniform sampler2D atlas : filter_nearest;
@@ -37,5 +35,4 @@ void fragment() {
vec2 atlas_size = vec2(textureSize(atlas, 0));
vec2 atlas_uv = atlas_pixel / atlas_size;
COLOR = texture(atlas, atlas_uv);
COLOR = get_black_and_white(COLOR, UV, TIME);
}