From 6929c597b175ab02d9e9921a3d59c0dc1f400939 Mon Sep 17 00:00:00 2001 From: chendian <-> Date: Thu, 15 Feb 2024 06:32:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=B3=E5=A5=97=20=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E6=94=BB=E5=87=BB=E7=89=B9=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- render/shader/effect_slash.gdshader | 22 ++++--- render/shader/trail.gdshader | 10 +-- .../texture/particle/gradient/gradient1.png | Bin 0 -> 106 bytes .../particle/gradient/gradient1.png.import | 34 ++++++++++ .../texture/particle/gradient/gradient2.png | Bin 0 -> 103 bytes .../particle/gradient/gradient2.png.import | 34 ++++++++++ render/texture/particle/mask/mask10.png | Bin 0 -> 21784 bytes .../texture/particle/mask/mask10.png.import | 34 ++++++++++ scene/effect/particle/_particle_fist1.tscn | 59 ++++++++---------- scene/effect/particle/_particle_slash1.tscn | 57 +++++++++++++---- .../effect/particle/hero01_fist_attack01.tscn | 6 ++ .../effect/particle/hero01_fist_attack02.tscn | 9 +++ .../effect/particle/hero01_fist_attack03.tscn | 6 ++ .../effect/particle/hero01_fist_attack04.tscn | 9 +++ .../effect/particle/hero01_fist_attack05.tscn | 6 ++ scene/effect/particle/particle_hit_sharp.tscn | 18 +++--- 16 files changed, 237 insertions(+), 67 deletions(-) create mode 100644 render/texture/particle/gradient/gradient1.png create mode 100644 render/texture/particle/gradient/gradient1.png.import create mode 100644 render/texture/particle/gradient/gradient2.png create mode 100644 render/texture/particle/gradient/gradient2.png.import create mode 100644 render/texture/particle/mask/mask10.png create mode 100644 render/texture/particle/mask/mask10.png.import create mode 100644 scene/effect/particle/hero01_fist_attack01.tscn create mode 100644 scene/effect/particle/hero01_fist_attack02.tscn create mode 100644 scene/effect/particle/hero01_fist_attack03.tscn create mode 100644 scene/effect/particle/hero01_fist_attack04.tscn create mode 100644 scene/effect/particle/hero01_fist_attack05.tscn diff --git a/render/shader/effect_slash.gdshader b/render/shader/effect_slash.gdshader index b39a034..cc44e42 100644 --- a/render/shader/effect_slash.gdshader +++ b/render/shader/effect_slash.gdshader @@ -1,24 +1,26 @@ shader_type spatial; -render_mode blend_add,unshaded,depth_test_disabled; +render_mode blend_add,unshaded,depth_test_disabled,cull_disabled; uniform sampler2D tex_main : source_color; uniform sampler2D tex_noise : source_color; uniform sampler2D tex_mask : source_color; uniform sampler2D tex_mask2 : source_color; +uniform sampler2D tex_gradient : source_color; uniform sampler2D screenTexture : hint_screen_texture; void fragment() { vec4 col_main = texture(tex_main, UV); vec4 col_noise = texture(tex_noise, UV - 0.5 * vec2(mod(TIME, 2.0) - 1.0, 0)); vec4 col_mask = texture(tex_mask, UV); - vec4 col = col_mask * COLOR * 1.0 + (col_noise + col_main) * COLOR; + vec4 col = (col_noise + col_main) * col_mask; + col = texture(tex_gradient, vec2(clamp(col.r,0.0,1.0),0.5)); - vec4 col_mask2 = texture(tex_mask2, UV); - float noiseValueX = col_noise.r; - float noiseValueY = col_noise.r; - vec2 noiseDistort = vec2(noiseValueX, noiseValueY) * 0.1 * col_mask2.r; - vec3 distortedScreenTexture = vec3(texture(screenTexture, SCREEN_UV + noiseDistort).rgb); - - ALBEDO = (distortedScreenTexture *4.0 + col.rgb * col_mask.r) * COLOR.rgb; - ALPHA = col_mask2.r * COLOR.a; + //vec4 col_mask2 = texture(tex_mask2, UV); + //float noiseValueX = col_noise.r; + //float noiseValueY = col_noise.r; + //vec2 noiseDistort = vec2(noiseValueX, noiseValueY) * 0.1 * col_mask2.r; + //vec3 distortedScreenTexture = vec3(texture(screenTexture, SCREEN_UV + noiseDistort).rgb); + // + ALBEDO = col.rgb; + ALPHA = col_mask.r * COLOR.a; } diff --git a/render/shader/trail.gdshader b/render/shader/trail.gdshader index 53d34e3..8848c25 100644 --- a/render/shader/trail.gdshader +++ b/render/shader/trail.gdshader @@ -1,10 +1,12 @@ shader_type spatial; -render_mode blend_add,unshaded,particle_trails; +render_mode blend_add,unshaded,depth_test_disabled,particle_trails; uniform sampler2D tex_main : source_color; +uniform sampler2D tex_gradient : source_color; void fragment() { - vec4 col = texture(tex_main, UV); - ALBEDO = COLOR.rgb * col.r; - ALPHA = COLOR.a * col.r; + vec3 col_main = texture(tex_main, UV).rgb; + vec3 col = texture(tex_gradient, vec2(COLOR.a,0.5)).rgb; + ALBEDO = col; + ALPHA = COLOR.a * col_main.r; } diff --git a/render/texture/particle/gradient/gradient1.png b/render/texture/particle/gradient/gradient1.png new file mode 100644 index 0000000000000000000000000000000000000000..21fc52c1136ae6d393ed420f458feed009828707 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWaf*Z7ofy`glX(f`sCc?KhH%VG z-g5ure|u&jfk`P2jC*u=Bo0JM1@o|#+$=nu$jq>%ocZY8n$zAu^$eb_elF{r5}E)k Ci5-Rj literal 0 HcmV?d00001 diff --git a/render/texture/particle/gradient/gradient1.png.import b/render/texture/particle/gradient/gradient1.png.import new file mode 100644 index 0000000..2ce8cea --- /dev/null +++ b/render/texture/particle/gradient/gradient1.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://4cxxxxdbbugc" +path="res://.godot/imported/gradient1.png-f19c45b656f2518720edce64a2769fa3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://render/texture/particle/gradient/gradient1.png" +dest_files=["res://.godot/imported/gradient1.png-f19c45b656f2518720edce64a2769fa3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=0 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=false +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/render/texture/particle/gradient/gradient2.png b/render/texture/particle/gradient/gradient2.png new file mode 100644 index 0000000000000000000000000000000000000000..8462bbf0ae2f8da9e8ca51c4c2e5a9497f982382 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^3P8-r!3HGvcdbbWaf*Z7ofy`glX(f`D0;d$hH%VG zzO&-ghxv@0Ct6P$2{0ucJZAB9$(C4-SMF>KxsRE9ncwOq0u?iOy85}Sb4q9e034kj A3;+NC literal 0 HcmV?d00001 diff --git a/render/texture/particle/gradient/gradient2.png.import b/render/texture/particle/gradient/gradient2.png.import new file mode 100644 index 0000000..81a9ef7 --- /dev/null +++ b/render/texture/particle/gradient/gradient2.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dg6i5l05y3vww" +path="res://.godot/imported/gradient2.png-5a51d3e7af9abeb7e83ff1726fda8194.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://render/texture/particle/gradient/gradient2.png" +dest_files=["res://.godot/imported/gradient2.png-5a51d3e7af9abeb7e83ff1726fda8194.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=0 +compress/normal_map=2 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=false +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/render/texture/particle/mask/mask10.png b/render/texture/particle/mask/mask10.png new file mode 100644 index 0000000000000000000000000000000000000000..e1d298dc08ca8cb6510e657079fd99b8f642b4da GIT binary patch literal 21784 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