62 lines
1.7 KiB
GLSL
62 lines
1.7 KiB
GLSL
#version 460
|
|
in vec2 TexCoord;
|
|
in vec4 WldPos;
|
|
in vec3 Normal;
|
|
|
|
in mat3 TBN;
|
|
|
|
layout(location = 0) out vec4 FragColor;
|
|
layout(location = 1) out int ObjId;
|
|
layout(location = 2) out vec4 WorldPos;
|
|
uniform sampler2D TextureSampler;
|
|
uniform sampler2D NormalMapSampler;
|
|
uniform sampler2D EmmissionMapSampler;
|
|
uniform sampler2D SpecularMapSampler;
|
|
uniform sampler2D TeamcolorMap;
|
|
uniform sampler2D ShadowMapSampler;
|
|
uniform int ObjIdIn;
|
|
uniform vec4 ObjColor;
|
|
uniform vec3 LightDirection;
|
|
uniform vec3 CameraPosition;
|
|
uniform vec3 CamFwdDir;
|
|
uniform int TeamId;
|
|
|
|
vec4 TeamIdColors[3] = vec4[3](vec4(0.41568628f, 0.74901962f, 0.04705882f, 1.00000000f ),
|
|
vec4(1.00000000f, 0.89999998f, 0.00000000f, 1.00000000f ),
|
|
vec4(0.55000001f, 0.05000000f, 0.50000000f, 1.00000000f ));
|
|
|
|
float calcMissing(vec3 normal){
|
|
return abs(sqrt(1-(normal.x*normal.x+normal.y*normal.y)));
|
|
}
|
|
|
|
vec4 transition(vec4 v1,vec4 v2,float val){
|
|
return v1 * val + v2 * (1-val);
|
|
}
|
|
|
|
void main(){
|
|
|
|
vec3 CamDir = normalize(CameraPosition - WldPos.xyz);
|
|
|
|
vec3 normal = vec3(texture(NormalMapSampler, TexCoord));
|
|
|
|
normal = normal * 2.0 - 1.0;
|
|
|
|
normal.y = -normal.y;
|
|
|
|
normal.z = calcMissing(normal);
|
|
|
|
normal = normalize(TBN * normal);
|
|
|
|
ObjId = ObjIdIn;
|
|
WorldPos = vec4(WldPos.xyz,1);
|
|
//if(WldPos.w == 0) WorldPos=vec4(WldPos.xyz,1);
|
|
vec4 textel = texture(TextureSampler,TexCoord);
|
|
if(textel.a < 0.3) discard;
|
|
//textel.a = (CamPos.z / CamPos.w) / 100;
|
|
vec4 col = textel * ObjColor;
|
|
|
|
FragColor = vec4(col.rgb * min(0.35 + dot(CamDir,normal),1),col.a);
|
|
|
|
FragColor *= transition(TeamIdColors[TeamId],vec4(1,1,1,1), texture(TeamcolorMap, TexCoord).a);
|
|
//FragColor = vec4(1,1,1,1);
|
|
}
|