vec3 lightMorning=vec3(LIGHT_MR,LIGHT_MG,LIGHT_MB)*LIGHT_MI/255.;
vec3 lightDay=vec3(LIGHT_DR,LIGHT_DG,LIGHT_DB)*LIGHT_DI/255.;
vec3 lightEvening=vec3(LIGHT_ER,LIGHT_EG,LIGHT_EB)*LIGHT_EI/255.;
vec3 lightNight=vec3(LIGHT_NR,LIGHT_NG,LIGHT_NB)*LIGHT_NI*.3/255.;

vec3 ambientMorning=vec3(AMBIENT_MR,AMBIENT_MG,AMBIENT_MB)*AMBIENT_MI/255.;
vec3 ambientDay=vec3(AMBIENT_DR,AMBIENT_DG,AMBIENT_DB)*AMBIENT_DI/255.;
vec3 ambientEvening=vec3(AMBIENT_ER,AMBIENT_EG,AMBIENT_EB)*AMBIENT_EI/255.;
vec3 ambientNight=vec3(AMBIENT_NR,AMBIENT_NG,AMBIENT_NB)*AMBIENT_NI*.3/255.;

vec4 weatherRain= vec4(vec3(WEATHER_RR, WEATHER_RG, WEATHER_RB) / 255.0, 1.0) * WEATHER_RI;
vec4 weatherCold=vec4(vec3(WEATHER_CR,WEATHER_CG,WEATHER_CB)/255.,1.)*WEATHER_CI;
vec4 weatherDesert=vec4(vec3(WEATHER_DR,WEATHER_DG,WEATHER_DB)/255.,1.)*WEATHER_DI;
vec4 weatherBadlands=vec4(vec3(WEATHER_BR,WEATHER_BG,WEATHER_BB)/255.,1.)*WEATHER_BI;
vec4 weatherSwamp=vec4(vec3(WEATHER_SR,WEATHER_SG,WEATHER_SB)/255.,1.)*WEATHER_SI;
vec4 weatherMushroom=vec4(vec3(WEATHER_MR,WEATHER_MG,WEATHER_MB)/255.,1.)*WEATHER_MI;
vec4 weatherSavanna=vec4(vec3(WEATHER_VR,WEATHER_VG,WEATHER_VB)/255.,1.)*WEATHER_VI;

#ifdef WEATHER_PERBIOME
uniform float isDesert,isMesa,isCold,isSwamp,isMushroom,isSavanna;
float weatherWeight=isCold+isDesert+isMesa+isSwamp+isMushroom+isSavanna;

vec4 weatherCol=mix(
	weatherRain,
	(
		weatherCold*isCold+weatherDesert*isDesert+weatherBadlands*isMesa+
		weatherSwamp*isSwamp+weatherMushroom*isMushroom+weatherSavanna*isSavanna
	)/max(weatherWeight,.0001),
	weatherWeight
);
#else
vec4 weatherCol = vec4(vec3(WEATHER_RR, WEATHER_RG, WEATHER_RB) / 255.0, 1.0) * WEATHER_RI;
#endif

float mefade=1.-clamp(abs(timeAngle-.5)*8.-1.5,0.,1.);
float dfade=1.-timeBrightness;

vec3 CalcLightColor(vec3 morning,vec3 day,vec3 afternoon,vec3 night,vec3 weatherCol){
	vec3 me=mix(morning,afternoon,mefade);
	vec3 dayAll=mix(me,day,1.-dfade*sqrt(dfade));
	vec3 c=mix(night,dayAll,sunVisibility);
	c=mix(c,dot(c,vec3(.299,.587,.114))*weatherCol,rainStrength);
	return c*c;
}

vec3 lightCol=CalcLightColor(lightMorning,lightDay,lightEvening,lightNight,
weatherCol.rgb);
vec3 ambientCol=CalcLightColor(ambientMorning,ambientDay,ambientEvening,ambientNight,
weatherCol.rgb);