#version 300 es precision highp float; uniform float u_main_shine; uniform float u_other_shine; uniform sampler2D u_texture; uniform vec4 u_color; uniform vec4 u_light_diffuse; uniform vec4 u_light_specular; uniform float u_shadow_black; in float _type; in float _flag; in float _cmd; in float _off; in float _time; in vec2 _tex; in vec3 _nor; in vec3 _v1; in vec3 _v2; in vec4 _back; out vec4 color; void main() { vec4 tex = texture(u_texture, _tex); if (_flag == 0.0) color = texture(u_texture, _tex); else if (_flag < 10.0) { float d = _flag * 0.08; color = vec4(vec3(0,0,0),(0.4-d)) * u_shadow_black; } else { float shine1A = 60.0 * u_main_shine; float shine2A = 30.0 * u_main_shine; float shine1B = 20.0 * u_other_shine; float shine2B = 10.0 * u_other_shine; vec3 v1 = _type == 1.0 ? vec3(0,-1.2,1) : _v1; float k1 = max(dot(normalize(_nor),normalize(- v1)), 0.0); float k2 = max(dot(normalize(_nor),normalize(-_v2)), 0.0); float dif1 = min(max(k1*(_type==1.0?1.2:2.4), 0.40), 0.60); float dif2 = min(max(k2*(_type==1.0?0.6:1.2), 0.40), 0.60); float spc1 = min(pow(k1,_type==1.0?shine1A:shine1B)*(_type==1.0?10.0:0.5), _type==1.0?0.2:0.3); float spc2 = min(pow(k2,_type==1.0?shine2A:shine2B)*(_type==1.0?15.0:0.5), _type==1.0?0.2:0.1); float dif = min(dif1+dif2, _type==1.0?0.85:0.80); float spc = min(spc1+spc2, _type==1.0?0.25:0.20); if (_type == 1.0) color = tex*u_light_diffuse*dif + vec4(1,1,1,1)*spc1 + _back*spc2; else if (_type == 2.0) { if (_cmd == 0.0) { vec4 c = u_color.r+u_color.g+u_color.b > 0.01 ? u_color : tex; color = c*dif + u_light_specular*spc; } else if (_time == 0.0) { if (_cmd == 1.0) color = (tex*0.5+u_color*0.5)*dif + u_light_specular*spc; else color = tex*dif + u_light_specular*spc; } else { vec4 c; float d = mod(abs(_cmd), 2.0); vec4 tex_ = tex*0.5 + u_color*0.5; float t = _cmd > 0.0 ? (d==1.0?_time:1.0-_time) : (d==1.0?1.0-_time:_time); if (t > _off+0.2) c = d==1.0 ? tex_ : tex; else if (t > _off) { float k = d==1.0 ? 0.5-(_off+0.2-t)/0.4 : (_off+0.2-t)/0.4; c = u_color*k + tex*(1.0-k); } else c = d==1.0 ? tex : tex_; color = c*dif + u_light_specular*spc; } } color.a = 1.0; } }