#version 420 core #include #define LIGHTING_TYPE (LIGHTING_TYPE_TRANSMISSION | LIGHTING_TYPE_REFLECTION) #define LIGHTING_REFLECTION_KIND LIGHTING_REFLECTION_KIND_SPECULAR #if (FLUID_MODE == FLUID_MODE_CHEAP) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_IMPORTANCE #elif (FLUID_MODE == FLUID_MODE_SHINY) #define LIGHTING_TRANSPORT_MODE LIGHTING_TRANSPORT_MODE_RADIANCE #endif #define LIGHTING_DISTRIBUTION_SCHEME LIGHTING_DISTRIBUTION_SCHEME_MICROFACET #define LIGHTING_DISTRIBUTION LIGHTING_DISTRIBUTION_BECKMANN #include // Note: The sampler uniform is declared here because it differs for MSAA #include #include #include layout(set = 1, binding = 0) uniform texture2D t_src_color; layout(set = 1, binding = 1) uniform sampler s_src_color; layout(set = 1, binding = 2) uniform texture2D t_src_depth; layout(set = 1, binding = 3) uniform sampler s_src_depth; layout(location = 0) in vec2 uv; layout (std140, set = 1, binding = 4) uniform u_locals { mat4 proj_mat_inv; mat4 view_mat_inv; }; layout(location = 0) out vec4 tgt_color; vec3 wpos_at(vec2 uv) { float buf_depth = texture(sampler2D(t_src_depth, s_src_depth), uv).x; mat4 inv = view_mat_inv * proj_mat_inv;//inverse(all_mat); vec4 clip_space = vec4((uv * 2.0 - 1.0) * vec2(1, -1), buf_depth, 1.0); vec4 view_space = inv * clip_space; view_space /= view_space.w; if (buf_depth == 0.0) { vec3 direction = normalize(view_space.xyz); return direction.xyz * 524288.0625 + cam_pos.xyz; } else { return view_space.xyz; } } void main() { vec4 color = texture(sampler2D(t_src_color, s_src_color), uv); // Apply clouds #if (CLOUD_MODE != CLOUD_MODE_NONE) vec3 wpos = wpos_at(uv); float dist = distance(wpos, cam_pos.xyz); vec3 dir = (wpos - cam_pos.xyz) / dist; color.rgb = get_cloud_color(color.rgb, dir, cam_pos.xyz, time_of_day.x, dist, 1.0); #endif tgt_color = vec4(color.rgb, 1); }