You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
913 B
41 lines
913 B
struct Fog
|
|
{
|
|
int mode;
|
|
float density;
|
|
float start_dist;
|
|
float max_dist;
|
|
vec3 color;
|
|
};
|
|
|
|
uniform Fog fog;
|
|
|
|
const int FM_NONE = 0;
|
|
const int FM_LINEAR = 1;
|
|
const int FM_EXPONENTIAL = 2;
|
|
const int FM_EXPONENTIAL_SQRD = 3;
|
|
|
|
vec4 apply_fog(vec4 color)
|
|
{
|
|
vec4 final_color = color;
|
|
if(fog.mode != FM_NONE)
|
|
{
|
|
float fog_factor;
|
|
float dist_from_eye = abs(length(vertex - camera_pos));
|
|
if(fog.mode == FM_LINEAR)
|
|
{
|
|
fog_factor = (fog.max_dist - dist_from_eye) / (fog.max_dist - fog.start_dist);
|
|
}
|
|
else if(fog.mode == FM_EXPONENTIAL)
|
|
{
|
|
fog_factor = exp(fog.density * -dist_from_eye);
|
|
}
|
|
else if(fog.mode == FM_EXPONENTIAL_SQRD)
|
|
{
|
|
fog_factor = exp(-pow(fog.density * dist_from_eye, 2));
|
|
}
|
|
fog_factor = clamp(fog_factor, 0.0, 1.0);
|
|
final_color = mix(vec4(fog.color, 1.0), color, fog_factor);
|
|
}
|
|
return final_color;
|
|
}
|
|
|
|
|