diff --git a/data/shaders/IBL.frag b/data/shaders/IBL.frag index 9281ee09a..bd21f900a 100644 --- a/data/shaders/IBL.frag +++ b/data/shaders/IBL.frag @@ -29,23 +29,6 @@ float makeLinear(float f, float n, float z) return (2 * n) / (f + n - z * (f - n)); } -vec3 fastBlur(vec2 uv, float spread) -{ - vec4 sum = vec4(0.0); - float X = uv.x; - float Y = uv.y; - vec2 pixel = vec2(spread); - float biais = 1.0; - - sum += textureLod(albedo, vec2(X - 3.0 * pixel.x, Y), biais) * 0.03125; - sum += textureLod(albedo, vec2(X - 1.3333 * pixel.x, Y), biais) * 0.328125; - sum += textureLod(albedo, vec2(X, Y), biais) * 0.273438; - sum += textureLod(albedo, vec2(X + 1.3333 * pixel.x, Y), biais) * 0.328125; - sum += textureLod(albedo, vec2(X + 3.0 * pixel.x, Y), biais) * 0.03125; - - return sum.rgb; -} - vec3 CalcViewPositionFromDepth(in vec2 TexCoord, in sampler2D DepthMap) { // Combine UV & depth into XY & Z (NDC) @@ -62,12 +45,6 @@ vec3 CalcViewPositionFromDepth(in vec2 TexCoord, in sampler2D DepthMap) return ViewPosition.xyz / ViewPosition.w; } -float rand(vec2 co) -{ - return fract(sin(dot(co.xy,vec2(12.9898,78.233))) * 43758.5453); -} - - vec3 RayCast(vec3 dir, inout vec3 hitCoord, out float dDepth, in sampler2D DepthMap, in vec3 fallback, float spread) { dir *= 0.25f; @@ -86,10 +63,8 @@ vec3 RayCast(vec3 dir, inout vec3 hitCoord, out float dDepth, in sampler2D Depth { if ((projectedCoord.x > 0.0 && projectedCoord.x < 1.0) && (projectedCoord.y > 0.0 && projectedCoord.y < 1.0)) { - // Mix with fallback (black area should be dark anyway) - vec3 finalColor = textureLod(albedo, projectedCoord.xy, 1.0).rgb; - // FIXME, this is heavy, needs to be an option in the settings - //vec3 finalColor = fastBlur(projectedCoord.xy, spread); + // FIXME We need to generate mipmap to take into account the gloss map + vec3 finalColor = textureLod(albedo, projectedCoord.xy, spread).rgb; if ((finalColor.r + finalColor.g + finalColor.b) > 0.) { vec2 inside = (gl_FragCoord.xy / u_screen) - 0.5; @@ -112,11 +87,6 @@ vec3 RayCast(vec3 dir, inout vec3 hitCoord, out float dDepth, in sampler2D Depth return fallback; } -float rand2(vec2 co) -{ - return fract(sin(dot(co.xy,vec2(45.454545,5631.4))) * 43758.5453); -} - // Main =================================================================== void main(void) @@ -153,21 +123,15 @@ void main(void) View_Pos /= View_Pos.w; // Reflection vector - vec3 eyedir2 = eyedir; - eyedir2.y *= clamp(rand(uv), 0.01, 2.7); - vec3 normal2 = normal; - normal2.y = 0.5; //clamp(rand2(uv), 0.01, 2.7); vec3 reflected = normalize(reflect(eyedir, normal)); - vec3 reflected2 = normalize(reflect(eyedir2, normal2)); // Ray cast vec3 hitPos = View_Pos.xyz; float dDepth; float minRayStep = 100.0f; - vec3 outColor = RayCast(mix(reflected, reflected2, 1.0 - specval) * max(minRayStep, -View_Pos.z), - hitPos, dDepth, dtex, fallback, mix(0.001, 0.01, 1.0 - specval)); - + vec3 outColor = RayCast(reflected * max(minRayStep, -View_Pos.z), + hitPos, dDepth, dtex, fallback, 0.0); Spec = vec4(outColor.rgb, 1.0); #endif