diff options
Diffstat (limited to 'client')
| -rw-r--r-- | client/map/tiles/portal.gdshader | 31 | ||||
| -rw-r--r-- | client/map/tiles/portal.tscn | 7 |
2 files changed, 18 insertions, 20 deletions
diff --git a/client/map/tiles/portal.gdshader b/client/map/tiles/portal.gdshader index a9dbd1e6..c5bc0be4 100644 --- a/client/map/tiles/portal.gdshader +++ b/client/map/tiles/portal.gdshader @@ -25,6 +25,7 @@ varying vec3 world_position; uniform float type : hint_range(-1.0, 1.0); uniform float size : hint_range(0.0, 2.0); +uniform vec3 glow : source_color; void vertex() { MODELVIEW_MATRIX = VIEW_MATRIX * mat4( @@ -37,25 +38,21 @@ void vertex() { world_camera = (inverse(MODELVIEW_MATRIX) * vec4(0, 0, 0, 1)).xyz; } +vec2 rv_to_screen(mat4 pm, vec3 rv) { + vec4 k = pm * vec4(rv*1000.0, 1.0); + k /= k.w; + return (k.xy + 1.) / 2.; +} + void fragment() { vec3 ray = world_camera / size; vec3 rv = normalize(world_position - world_camera); - vec3 em = vec3(0.); - bool hit = false; - - for (int i = 0; i < 100; i++) { - float st = length(ray) * 0.1; - ray += normalize(rv) * st; - if (length(ray) < 1.) { hit = true; break; } - rv += -normalize(ray) * -type / exp(dot(ray,ray)) * st; - em += st * smoothstep(1.5,1.2,length(ray)) * 0.2; - } - - vec4 k = PROJECTION_MATRIX * vec4(rv*1000.0, 1.0); - k /= k.w; - vec2 k2 = (k.xy + 1.) / 2.; - - vec3 col = hit ? vec3(type*0.5+0.5) : texture(screen_texture, k2).rgb; - col += vec3(0.3,0.0,1.0) * max(em - 0.1,0.); + + vec3 o = ray + length(ray)*rv; + float d = length(o) - 1.; + rv += o / (exp(d*2.)-1.) * type * 0.08; + vec2 screen = rv_to_screen(PROJECTION_MATRIX, rv); + vec3 col = d<0. ? vec3(type*0.5+0.5) : texture(screen_texture, screen).rgb; + col += glow * exp(d < 0. ? d*30. : d*-10.); ALBEDO = col; } diff --git a/client/map/tiles/portal.tscn b/client/map/tiles/portal.tscn index 372b97ea..1bad208b 100644 --- a/client/map/tiles/portal.tscn +++ b/client/map/tiles/portal.tscn @@ -10,13 +10,14 @@ size = Vector2(3, 3) resource_local_to_scene = true render_priority = 0 shader = ExtResource("1_aiexk") -shader_parameter/type = 4.75e-08 -shader_parameter/size = 0.2 +shader_parameter/type = -1.0 +shader_parameter/size = 0.2000000095 +shader_parameter/glow = Color(0.6156863, 0.003921569, 1, 1) [node name="Portal" type="Node3D"] script = ExtResource("1_h7xlp") [node name="Mesh" type="MeshInstance3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.7, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0022193193, 0.69999975, -0.0013526678) mesh = SubResource("QuadMesh_us4em") surface_material_override/0 = SubResource("ShaderMaterial_hvgsb") |