spoonedit/res/Shaders/FlatForwardPass.fsh
2024-12-21 17:09:23 +01:00

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);
}