improve lighting
This commit is contained in:
parent
401f9dbe34
commit
995bc4c42f
4 changed files with 70 additions and 46 deletions
|
@ -20,11 +20,13 @@ uniform vec3 specular;
|
|||
uniform float max_vert_dist;
|
||||
uniform float max_cam_dist;
|
||||
uniform float light_factor;
|
||||
uniform vec3 dir_direction;
|
||||
uniform vec3 dir_ambient;
|
||||
uniform vec3 block_ambient;
|
||||
uniform vec3 sun_direction;
|
||||
uniform vec3 sun_ambient;
|
||||
uniform vec3 moon_direction;
|
||||
uniform vec3 moon_ambient;
|
||||
uniform int n_lights;
|
||||
uniform bool sky_light;
|
||||
uniform bool moon_light;
|
||||
uniform light_block {
|
||||
light_t lights[MAX_LIGHTS];
|
||||
};
|
||||
|
@ -42,14 +44,14 @@ vec4 pcf_sample(sampler2D stex, vec2 pos) {
|
|||
}
|
||||
*/
|
||||
|
||||
vec3 calc_dir_light(vec3 norm, vec3 dir, vec3 rgb) {
|
||||
vec3 ldir = normalize(-dir_direction);
|
||||
vec3 calc_dir_light(vec3 norm, vec3 dir, vec3 rgb, vec3 direction, vec3 color) {
|
||||
vec3 ldir = normalize(-direction);
|
||||
float diff = max(dot(norm, ldir), 0.0);
|
||||
vec3 rdir = reflect(-ldir, norm);
|
||||
float spec = pow(max(dot(dir, rdir), 0.0), shine);
|
||||
vec3 ambient = dir_ambient * rgb + clamp(vec3(0.0), 0.0, 1.0);
|
||||
vec3 diffuse = dir_ambient * 0.125 * diff * rgb;
|
||||
vec3 specular = dir_ambient * 1.25 * spec * specular * rgb;
|
||||
vec3 ambient = color * rgb + clamp(vec3(0.0), 0.0, 1.0);
|
||||
vec3 diffuse = color * 0.125 * diff * rgb;
|
||||
vec3 specular = color * 1.25 * spec * specular * rgb;
|
||||
return (ambient + diffuse + specular);
|
||||
}
|
||||
|
||||
|
@ -75,17 +77,14 @@ void main() {
|
|||
vec3 dir = normalize(cam_pos - vertex);
|
||||
vec4 texel = texture(tex, tex_coord);
|
||||
float sky = sky_light ? vertex.y < 0.0 ? 0.0 : (vertex.y < 64.0 ? vertex.y / 64.0 : 1.0) : 1.0;
|
||||
// float block = clamp(0.03125 + lm_coord.x * 256.0, 0.0, 1.0);
|
||||
// vec3 lm = block * block_ambient;
|
||||
vec3 rgb = texel.rgb; // * brightness;
|
||||
vec3 result = rgb * light_color.rgb + calc_dir_light(norm, dir, rgb * sky * (1.0 - light_color.a * 0.5));
|
||||
// int l = 0;
|
||||
vec3 rgb = texel.rgb;
|
||||
vec3 direct = rgb * sky * (1.0 - light_color.a * 0.5);
|
||||
vec3 result = rgb * light_color.rgb + calc_dir_light(norm, dir, direct, sun_direction, sun_ambient);
|
||||
if(moon_light)
|
||||
result += calc_dir_light(norm, dir, direct, moon_direction, moon_ambient);
|
||||
for(int z = 0; z < n_lights; z++) {
|
||||
// if(lights[z].enabled) {
|
||||
if(distance(vertex, lights[z].position.xyz) <= max_vert_dist && distance(cam_pos, lights[z].position.xyz) <= max_cam_dist)
|
||||
result += calc_point_light(lights[z], norm, dir, rgb);
|
||||
// l++;
|
||||
// }
|
||||
}
|
||||
FragColor = vec4(result, texel.a);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue