墙后透视效果

master
chendian 2 years ago
parent 45436078a0
commit 60577cd2d5

@ -1,10 +1,8 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://c8r7kifl8faqr"] [gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://c8r7kifl8faqr"]
[ext_resource type="Shader" path="res://render/shader/character.gdshader" id="1_ja5hr"] [ext_resource type="Shader" path="res://render/shader/character_silhouette.gdshader" id="2_camhu"]
[resource] [resource]
render_priority = 0 render_priority = 0
shader = ExtResource("1_ja5hr") shader = ExtResource("2_camhu")
shader_parameter/flash_white = null shader_parameter/color = null
shader_parameter/deformation_dir = Vector2(1, 0)
shader_parameter/deformation_rate = 0.0

@ -0,0 +1,10 @@
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://s5gf3b66luh8"]
[ext_resource type="Shader" path="res://render/shader/character.gdshader" id="1_1ay5b"]
[resource]
render_priority = 1
shader = ExtResource("1_1ay5b")
shader_parameter/flash_white = null
shader_parameter/deformation_dir = Vector2(1, 0)
shader_parameter/deformation_rate = 0.0

@ -9,12 +9,12 @@ uniform float deformation_rate = 0;
void vertex() { void vertex() {
if (length(deformation_dir)>0.0){ if (length(deformation_dir)>0.0){
vec2 dir_center = VERTEX.xy; vec2 dir_center = VERTEX.xy;
vec2 dir = normalize(deformation_dir.yx); vec2 dir = normalize(deformation_dir.yx);
vec2 dir1 = dir * deformation_rate; vec2 dir1 = dir * deformation_rate;
vec2 dir2 = cross(vec3(0, 0, 1), vec3(dir, 0)).xy * deformation_rate; vec2 dir2 = cross(vec3(0, 0, 1), vec3(dir, 0)).xy * deformation_rate;
vec2 offset1 = -dot(dir1, dir_center) * dir1; vec2 offset1 = -dot(dir1, dir_center) * dir1;
vec2 offset2 = dot(dir2, dir_center) * dir2; vec2 offset2 = dot(dir2, dir_center) * dir2;
VERTEX.xy += offset1 + offset2; VERTEX.xy += offset1 + offset2;
} }
} }

@ -0,0 +1,27 @@
shader_type spatial;
render_mode depth_draw_opaque,unshaded,depth_test_disabled;
uniform sampler2D tex : source_color,filter_nearest;
uniform vec4 color:source_color;
uniform vec2 deformation_dir = vec2(1, 0);
uniform float deformation_rate = 0;
void vertex() {
if (length(deformation_dir)>0.0){
vec2 dir_center = VERTEX.xy;
vec2 dir = normalize(deformation_dir.yx);
vec2 dir1 = dir * deformation_rate;
vec2 dir2 = cross(vec3(0, 0, 1), vec3(dir, 0)).xy * deformation_rate;
vec2 offset1 = -dot(dir1, dir_center) * dir1;
vec2 offset2 = dot(dir2, dir_center) * dir2;
VERTEX.xy += offset1 + offset2;
}
}
void fragment() {
vec4 col = texture(tex, UV);
if(col.a<0.5){discard;}
ALBEDO = color.rgb;
ALPHA = 1.0;
}

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 366 B

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 134 B

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 B

After

Width:  |  Height:  |  Size: 131 B

@ -41,8 +41,9 @@ func init_after():
set_status("mp_sub_max",cfg.mp.mp_sub_max) set_status("mp_sub_max",cfg.mp.mp_sub_max)
set_status("mp_sub",0) set_status("mp_sub",0)
func set_material(material:ShaderMaterial): func set_material(material:ShaderMaterial,material_sub:ShaderMaterial):
view.material_override = material view.material_override = material
view.material_override.next_pass = material_sub
func is_on_stair()->bool: func is_on_stair()->bool:
if velocity.x > 0: if velocity.x > 0:

@ -149,16 +149,21 @@ func _on_animation_finished():
update_trans(true) update_trans(true)
func update_material(): func update_material():
var material = material_override as ShaderMaterial var material = material_override.next_pass as ShaderMaterial
var material2 = material_override as ShaderMaterial
material.set_shader_parameter("flash_white",status.flash_white_rate) material.set_shader_parameter("flash_white",status.flash_white_rate)
material.set_shader_parameter("deformation_dir",status.deformation_dir) material.set_shader_parameter("deformation_dir",status.deformation_dir)
material2.set_shader_parameter("deformation_dir",status.deformation_dir)
material.set_shader_parameter("deformation_rate",status.deformation_rate*0.4) material.set_shader_parameter("deformation_rate",status.deformation_rate*0.4)
material2.set_shader_parameter("deformation_rate",status.deformation_rate*0.4)
call_deferred("refresh_texture") call_deferred("refresh_texture")
func refresh_texture(): func refresh_texture():
var material = material_override as ShaderMaterial var material = material_override as ShaderMaterial
var material2 = material_override.next_pass as ShaderMaterial
var tex = sprite_frames.get_frame_texture(animation,frame) var tex = sprite_frames.get_frame_texture(animation,frame)
material.set_shader_parameter("tex",tex) material.set_shader_parameter("tex",tex)
material2.set_shader_parameter("tex",tex)
func clone(target:AnimatedSprite3D): func clone(target:AnimatedSprite3D):
target.sprite_frames = sprite_frames target.sprite_frames = sprite_frames

@ -35,7 +35,7 @@ func create_character(cfg:CharacterCfg,team:Enum.ETeam,pos:Vector3):
character_idx += 1 character_idx += 1
character_map[character_idx]=character character_map[character_idx]=character
character.init(character_idx,cfg,team) character.init(character_idx,cfg,team)
character.set_material(ResourceManager.material_character.duplicate()) character.set_material(ResourceManager.material_character.duplicate(),ResourceManager.material_character_sub.duplicate())
character.set_pos(pos) character.set_pos(pos)
SignalManager.character_create.emit(character_idx,team,character.ui_pos()) SignalManager.character_create.emit(character_idx,team,character.ui_pos())
if cfg.type == Enum.ECharacterType.Player:player_id = character_idx if cfg.type == Enum.ECharacterType.Player:player_id = character_idx

@ -6,6 +6,7 @@ var scene_monster = load("res://scene/character/monster.tscn")
#==material== #==material==
var material_character = load("res://render/material/character.tres") var material_character = load("res://render/material/character.tres")
var material_character_sub = load("res://render/material/character_sub.tres")
#==effect== #==effect==
var particle_hit_normal = load("res://scene/effect/particle/particle_hit_normal.tscn") var particle_hit_normal = load("res://scene/effect/particle/particle_hit_normal.tscn")

Loading…
Cancel
Save