You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.0 KiB
Plaintext
65 lines
2.0 KiB
Plaintext
shader_type spatial;
|
|
uniform bool is_link = false;
|
|
uniform bool is_focus_from = false;
|
|
uniform bool is_focus_to = false;
|
|
uniform vec3 focus_min_from = vec3(0,0,0);
|
|
uniform vec3 focus_max_from = vec3(0,0,0);
|
|
uniform vec3 focus_min_to = vec3(0,0,0);
|
|
uniform vec3 focus_max_to = vec3(0,0,0);
|
|
uniform float focus_rate = 1.0;
|
|
uniform bool is_target = false;
|
|
uniform vec3 target_position = vec3(0, 1.28, 1);
|
|
varying vec3 world_position;
|
|
|
|
uniform vec2 pixel_size = vec2(0.02, 0.02);
|
|
|
|
void vertex()
|
|
{
|
|
world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
|
}
|
|
|
|
bool is_in_focus(vec3 f_min,vec3 f_max){
|
|
if(world_position.x<f_min.x||world_position.x>f_max.x){return false;}
|
|
if(world_position.z>f_max.z){return false;}
|
|
if(world_position.y>f_max.y && world_position.z>f_min.z){return false;}
|
|
return true;
|
|
}
|
|
|
|
void fragment() {
|
|
if(!is_link){
|
|
if(is_focus_from || is_focus_to){
|
|
bool is_in_focus_from = is_in_focus(focus_min_from,focus_max_from);
|
|
bool is_in_focus_to = is_in_focus(focus_min_to,focus_max_to);
|
|
if(is_in_focus_from&&is_in_focus_to){
|
|
//ALPHA = 1.0;
|
|
}
|
|
else if(is_focus_to&&is_in_focus_to){
|
|
//ALPHA = focus_rate;
|
|
//ALPHA = 1.0;
|
|
}
|
|
else if(is_focus_from&&is_in_focus_from){
|
|
//ALPHA = 1.0 - focus_rate;
|
|
discard;
|
|
}else{
|
|
discard;
|
|
}
|
|
}
|
|
}
|
|
|
|
vec3 c = COLOR.rgb;
|
|
float brightness = 1.0;
|
|
if(is_target){
|
|
float offset_y = abs(floor((world_position.y-target_position.y) / 0.02) * 0.02);
|
|
offset_y = max(0.0,offset_y-0.64);
|
|
float rate = clamp(1.0-offset_y/4.48,0.0,1.0);
|
|
brightness = rate;
|
|
}else{
|
|
brightness = 1.0;
|
|
}
|
|
vec3 world_normal = (INV_VIEW_MATRIX * vec4(NORMAL, 0.0)).xyz;
|
|
if(world_normal.y<0.1){
|
|
brightness = brightness*0.6;
|
|
}
|
|
c.rgb = mix(vec3(0.0), c.rgb, brightness);
|
|
ALBEDO = c.rgb;
|
|
} |