pull/50/head
Valentin Stark 3 years ago
parent 511fa17011
commit 28779c4385
  1. 19
      world/game.tscn
  2. 21
      world/materials/outilne_1.tres
  3. 57
      world/materials/outilne_2.tres
  4. 0
      world/materials/outline.tres
  5. BIN
      world/materials/world2.material

@ -1,7 +1,7 @@
[gd_scene load_steps=13 format=2] [gd_scene load_steps=14 format=2]
[ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1] [ext_resource path="res://ui/ui.tscn" type="PackedScene" id=1]
[ext_resource path="res://world/materials/world2.material" type="Material" id=2] [ext_resource path="res://world/materials/outline.tres" type="Shader" id=2]
[ext_resource path="res://world/World3d.gd" type="Script" id=4] [ext_resource path="res://world/World3d.gd" type="Script" id=4]
[ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5] [ext_resource path="res://utils/camera/CamBase.tscn" type="PackedScene" id=5]
@ -151,6 +151,14 @@ shader_param/noise2 = SubResource( 7 )
[sub_resource type="QuadMesh" id=8] [sub_resource type="QuadMesh" id=8]
size = Vector2( 2, 2 ) size = Vector2( 2, 2 )
[sub_resource type="ShaderMaterial" id=9]
shader = ExtResource( 2 )
shader_param/outline_mode = 3
shader_param/outline_intensity = 0.1
shader_param/_round = true
shader_param/outline_bias = 0.0
shader_param/outline_color = Color( 0, 0, 0, 1 )
[node name="Game" type="Node"] [node name="Game" type="Node"]
[node name="UI" parent="." instance=ExtResource( 1 )] [node name="UI" parent="." instance=ExtResource( 1 )]
@ -186,14 +194,11 @@ transform = Transform( 0.971628, 0.168947, -0.16552, 0, 0.699825, 0.714314, 0.23
light_energy = 0.1 light_energy = 0.1
shadow_enabled = true shadow_enabled = true
[node name="Spatial" type="Spatial" parent="World3d"] [node name="Outline" type="MeshInstance" parent="World3d"]
[node name="MeshInstance" type="MeshInstance" parent="World3d/Spatial"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 6.29265, 7.41201, 29.3021 ) transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 6.29265, 7.41201, 29.3021 )
extra_cull_margin = 3653.19 extra_cull_margin = 3653.19
mesh = SubResource( 8 ) mesh = SubResource( 8 )
skeleton = NodePath("../..") material/0 = SubResource( 9 )
material/0 = ExtResource( 2 )
[connection signal="map_clicked" from="UI/Map" to="World3d/CamBase/Camera" method="_on_Map_map_clicked"] [connection signal="map_clicked" from="UI/Map" to="World3d/CamBase/Camera" method="_on_Map_map_clicked"]
[connection signal="camera_moved" from="World3d/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"] [connection signal="camera_moved" from="World3d/CamBase/Camera" to="UI/Map/Cursor" method="_on_Camera_camera_moved"]

@ -1,21 +0,0 @@
[gd_resource type="Shader" format=2]
[resource]
code = "// Edge-Detection Shader Pass 1
// Here we simply pass the vertex normals to the albedo
// so we can access it through the SCREEN_TEXTURE in our Shader Pass 2
// LICENSE: MIT
shader_type spatial;
render_mode blend_mix,depth_draw_opaque,cull_back,diffuse_toon,specular_disabled,shadows_disabled;
varying vec3 world_normal;
void vertex() {
world_normal = NORMAL;
}
void fragment() {
ALBEDO = world_normal.rgb;
}
"

@ -1,57 +0,0 @@
[gd_resource type="Shader" format=2]
[resource]
code = "// Edge-Detection Shader Pass 2
// Here's our fully lit and shaded model,
// but through the SCREEN_TEXTURE, we also have the world normals
// of all the visible parts of our model that the first pass gives us.
// LICENSE: MIT
shader_type spatial;
render_mode blend_mix,depth_draw_alpha_prepass,cull_back,diffuse_lambert,specular_disabled;
uniform vec4 albedo : hint_color;
uniform sampler2D texture_albedo : hint_albedo;
uniform float specular;
uniform float metallic;
uniform float roughness : hint_range(0,1);
uniform float edge_strength : hint_range(0,1) = 0.2;
uniform vec4 edge_color : hint_color = vec4(0.5, 0.5, 0.5, 1.0);
// essentially a cheap \"lightness\" function
// returns the average of red, green and blue color channels
float vec3_avg(vec3 color) {
return (color.r + color.g + color.b) / 3.0;
}
// transform a pixel coordinate to screen UV
vec2 pixel_to_screen_uv(vec2 viewport_size, vec2 pixel) {
return vec2(pixel.x / viewport_size.x, pixel.y / viewport_size.y);
}
void fragment() {
vec4 albedo_tex = texture(texture_albedo, UV);
vec2 iuv = vec2(SCREEN_UV.x * VIEWPORT_SIZE.x, SCREEN_UV.y * VIEWPORT_SIZE.y);
vec3 neighbour_left = texture(SCREEN_TEXTURE, pixel_to_screen_uv(VIEWPORT_SIZE, iuv + vec2(0, 0))).rgb;
vec3 neighbour_right = texture(SCREEN_TEXTURE, pixel_to_screen_uv(VIEWPORT_SIZE, iuv + vec2(0.5, 0))).rgb;
vec3 neighbour_top = texture(SCREEN_TEXTURE, pixel_to_screen_uv(VIEWPORT_SIZE, iuv + vec2(0, 0.0))).rgb;
vec3 neighbour_bottom = texture(SCREEN_TEXTURE, pixel_to_screen_uv(VIEWPORT_SIZE, iuv + vec2(0, 0.5))).rgb;
ALBEDO = albedo.rgb * texture(texture_albedo, UV).rgb;
// compare normals: if they differ, we draw an edge
// by mixing in the edge_color, by edge_strength amount
// feel free to try other ways to mix, such as multiply for more textured objects.
if (abs(vec3_avg(neighbour_left) - vec3_avg(neighbour_right)) > 0.0) {
ALBEDO = mix(ALBEDO, edge_color.rgb, edge_strength);
}else if (abs(vec3_avg(neighbour_top) - vec3_avg(neighbour_bottom)) > 0.0) {
ALBEDO = mix(ALBEDO, edge_color.rgb, edge_strength);
}
METALLIC = metallic;
ROUGHNESS = roughness;
SPECULAR = specular;
}
"

Binary file not shown.
Loading…
Cancel
Save