Fix water shader with HDR 2D

This commit is contained in:
Dylan Sarrazyn
2024-05-14 12:28:26 +02:00
committed by BimDav
parent 73f2db5919
commit e70be1dd04
3 changed files with 21 additions and 8 deletions
+1 -1
View File
@@ -76,5 +76,5 @@ locale/translation_remaps={}
[rendering]
viewport/hdr_2d=true
textures/vram_compression/import_etc2_astc=true
viewport/hdr_2d=true
@@ -4,9 +4,9 @@
[resource]
shader = ExtResource("1_3btqb")
shader_parameter/WATER_COL = Color(0.352941, 0.713726, 0.67451, 1)
shader_parameter/WATER2_COL = Color(0.329412, 0.670588, 0.619608, 1)
shader_parameter/FOAM_COL = Color(0.65098, 0.882353, 0.847059, 1)
shader_parameter/WATER_COL = Color(0.3479, 0.71, 0.667755, 1)
shader_parameter/WATER2_COL = Color(0.3283, 0.67, 0.618745, 1)
shader_parameter/FOAM_COL = Color(0.6512, 0.88, 0.84568, 1)
shader_parameter/distortion_speed = 0.75
shader_parameter/tile = Vector2(0.4, 0.4)
shader_parameter/offset = Vector2(0, 0)
+17 -4
View File
@@ -13,6 +13,19 @@ const float TWOPI = 6.283185307;
const float SIXPI = 18.84955592;
float linearToSRGB(float input) {
if(input < 0.040449907){
return input/12.92;
}else{
return pow(((input+0.055)/1.055),2.4);
}
}
vec3 correctHDR(vec3 targetColor) {
vec3 convertedColor = vec3(linearToSRGB(targetColor.r),linearToSRGB(targetColor.g),linearToSRGB(targetColor.b));
return convertedColor;
}
float circ(vec2 pos, vec2 c, float s)
{
c = abs(pos - c);
@@ -114,7 +127,7 @@ vec3 water(vec2 uv, vec3 cdir, float iTime)
uv += a * h;
h = sin(0.841471 * uv.x - 0.540302 * uv.y + iTime);
uv += a * h;
// Texture distortion
float d1 = mod(uv.x + uv.y, TWOPI);
float d2 = mod((uv.x + uv.y + 0.25) * 1.3, SIXPI);
@@ -124,9 +137,9 @@ vec3 water(vec2 uv, vec3 cdir, float iTime)
sin(d1) * 0.15 + sin(d2) * 0.05,
cos(d1) * 0.15 + cos(d2) * 0.05
);
vec3 ret = mix(WATER_COL.rgb, WATER2_COL.rgb, waterlayer(uv + dist.xy));
ret = mix(ret, FOAM_COL.rgb, waterlayer(vec2(1.0) - uv - dist.yx));
vec3 ret = mix(correctHDR(WATER_COL.rgb), correctHDR(WATER2_COL.rgb), waterlayer(uv + dist.xy));
ret = mix(ret, correctHDR(FOAM_COL.rgb), waterlayer(vec2(1.0) - uv - dist.yx));
return ret;
}