#version 330 core uniform sampler2D tex; uniform float mesh_alpha; uniform vec3 sun_direction; uniform vec3 sky_color; in vec3 surface_normal; in vec2 frag_tex_coord; in float frag_ambient_occlusion; in float depth; out vec4 color; void main() { float brightness = dot(normalize(surface_normal), normalize(-sun_direction)); vec3 diffuse = vec3(max(brightness, 0.3)); vec4 texture_color = texture(tex, frag_tex_coord); if (texture_color.a < 0.5) { discard; } float ao = 1 - frag_ambient_occlusion / 2; vec3 opaque_color = diffuse * texture_color.xyz * ao; opaque_color = mix(sky_color, opaque_color, 1 - depth); color = vec4(opaque_color, mesh_alpha); }