@@ -293,17 +293,18 @@ void main()
293293 #ifdef FLAG_TEAMCOLOR
294294 vec4 teamMask = vec4(0.0, 0.0, 0.0, 0.0);
295295 teamMask = texture(sMiscmap, vec3(texCoord, float(sMiscmapIndex)));
296- vec3 base = base_color - vec3(0.5);
297- vec3 stripe = stripe_color - vec3(0.5);
298- vec3 team_color = (base * teamMask.x) + (stripe * teamMask.y);
299- vec3 team_color_glow = (base * teamMask.b) + (stripe * teamMask.a);
296+ //For team colors applied to a diffuse or spec map, we assume that the base color of the diffuse
297+ //at this point is vec3(0.5). To get accurate results, we subtract 0.5 from the team colors
298+ vec3 team_color = ((base_color - vec3(0.5)) * teamMask.x) + ((stripe_color - vec3(0.5)) * teamMask.y);
299+ vec3 team_color_glow = (base_color * teamMask.b) + (stripe_color * teamMask.a);
300+
300301 #ifdef FLAG_HDR
301302 team_color = pow(team_color, vec3(SRGB_GAMMA));
302303 team_color_glow = pow(team_color_glow, vec3(SRGB_GAMMA)) * GLOW_MAP_SRGB_MULTIPLIER;
303304 #endif
304305
305- baseColor.rgb += team_color;
306- baseColor.rgb = max(baseColor.rgb, vec3(0.0));
306+ baseColor.rgb += team_color;
307+ baseColor.rgb = max(baseColor.rgb, vec3(0.0)); // We need to make sure that nothing here ever goes negative
307308 specColor.rgb += team_color;
308309 specColor.rgb = max(specColor.rgb, vec3(0.03));
309310 #endif
@@ -357,7 +358,7 @@ void main()
357358 #ifdef FLAG_MISC_MAP
358359 #ifdef FLAG_TEAMCOLOR
359360 float glowColorLuminance = dot(glowColor, vec3(0.299, 0.587, 0.114));
360- glowColor = team_glow_enabled ? mix(team_color_glow, glowColor, clamp(glowColorLuminance - teamMask.b - teamMask.a, 0.0, 1.0)) : glowColor;
361+ glowColor = team_glow_enabled ? mix(max( team_color_glow, vec3(0.0)) , glowColor, clamp(glowColorLuminance - teamMask.b - teamMask.a, 0.0, 1.0)) : glowColor;
361362 #endif
362363 #endif
363364 emissiveColor.rgb += glowColor * GLOW_MAP_INTENSITY;
0 commit comments