Loading weathereffects/assets/shaders/fog_effect.agsl +0 −8 Original line number Diff line number Diff line Loading @@ -46,14 +46,6 @@ float fbm (vec3 st, vec2 time) { return result; } vec3 normalBlendWithWhiteSrc(vec3 b, float o) { return b * (1. - o) + o; } vec3 normalBlend(vec3 b, vec3 f, float o) { return b * (1. - o) + f * o; } vec4 main(float2 fragCoord) { float2 uv = fragCoord / screenSize; uv.y /= screenAspectRatio; Loading weathereffects/assets/shaders/rain_effect.agsl +1 −1 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ vec4 main(float2 fragCoord) { color.rgb = mix(color.rgb, highlightColor.rgb, rainVisibility * rain.dropMask); // Add the foreground. Any effect from here will be in front of the subject. color.rgb = mix(color.rgb, colorForeground.rgb, colorForeground.a); color.rgb = normalBlend(color.rgb, colorForeground.rgb, colorForeground.a); // Generate rain in front of the subject (bigger and faster). rain = generateRain( Loading weathereffects/assets/shaders/snow.agsl +4 −2 Original line number Diff line number Diff line Loading @@ -44,7 +44,8 @@ Snow generateSnow( in float layerNumber ) { /* Grid. */ float depth = 1. + layerNumber * 0.3; // Increase the last number to make each layer more separate from the previous one. float depth = 1. + layerNumber * 0.35; float speedAdj = 1. + layerNumber * 0.15; float layerR = idGenerator(layerNumber); snowGridSize *= depth; Loading Loading @@ -83,7 +84,8 @@ Snow generateSnow( // Horizontal movement: Wiggle. float wiggleSpeed = 3.0; float wiggleAmp = 0.8; // Adjust wiggle based on layer number (0 = closer to screen => we want less movement). float wiggleAmp = 0.4 + 0.4 * smoothstep(0.5, 2.5, layerNumber); // Define the start based on the cell id. float horizontalStartAmp = 0.5; // Add the wiggle (equation decided by testing in Grapher). Loading weathereffects/assets/shaders/snow_effect.agsl +16 −15 Original line number Diff line number Diff line Loading @@ -17,8 +17,10 @@ uniform shader foreground; uniform shader background; uniform shader blurredBackground; uniform float2 uvOffsets; uniform float uvScale; uniform float2 uvOffsetFgd; uniform float2 uvScaleFgd; uniform float2 uvOffsetBgd; uniform float2 uvScaleBgd; uniform float time; uniform float screenAspectRatio; uniform float2 screenSize; Loading @@ -34,7 +36,7 @@ const vec4 snowColor = vec4(vec3(0.9), 1.); const vec4 glassTint = vec4(vec3(0.8), 1.); // gray // snow opacity (how visible it is). const float snowOpacity = 0.8; const float snowOpacity = 1.4; // how frosted the glass is. const float frostedGlassIntensity = 0.07; Loading @@ -42,22 +44,21 @@ const float frostedGlassIntensity = 0.07; vec4 main(float2 fragCoord) { float2 uv = fragCoord / screenSize; // Adjusts the UVs to have the expected rect of the image. float2 uvTexture = fragCoord * uvScale + uvOffsets; vec4 colorForeground = foreground.eval(uvTexture); vec4 colorForeground = foreground.eval(fragCoord * uvScaleFgd + uvOffsetFgd); vec4 colorBackground = background.eval(fragCoord * uvScaleBgd + uvOffsetBgd); vec4 color = vec4(0., 0., 0., 1.); // Add some slight tint to the frosted glass. // Get color of the background texture. color.rgb = mix(background.eval(uvTexture).rgb, glassTint.rgb, frostedGlassIntensity); color.rgb = mix(colorBackground.rgb, glassTint.rgb, frostedGlassIntensity); for (float i = 9.; i > 2.; i--) { // Generate snow behind the subject. Snow snow = generateSnow( /* uvNorm = */ uv, /* fragment aspect ratio = */ screenAspectRatio, /* time = */ time * 1.25, /* Grid size = */ vec2(3.0, 2.0), uv, screenAspectRatio, time * 1.25, /* Grid size = */ vec2(2.1, 1.4), /* layer number = */ i); color.rgb = mix(color.rgb, snowColor.rgb, snowOpacity * snow.flakeMask); Loading @@ -69,10 +70,10 @@ vec4 main(float2 fragCoord) { for (float i = 2.; i >= 0.; i--) { // Generate snow behind the subject. Snow snow = generateSnow( /* uvNorm = */ uv, /* fragment aspect ratio = */ screenAspectRatio, /* time = */ time * 1.25, /* Grid size = */ vec2(3.0, 2.0), uv, screenAspectRatio, time * 1.25, /* Grid size = */ vec2(2.1, 1.4), /* layer number = */ i); color.rgb = mix(color.rgb, snowColor.rgb, snowOpacity * snow.flakeMask); Loading weathereffects/assets/shaders/utils.agsl +18 −0 Original line number Diff line number Diff line Loading @@ -44,3 +44,21 @@ float wiggle(float time, float wiggleSpeed) { return sin(wiggleSpeed * time + 0.5 * sin(wiggleSpeed * 5. * time)) * sin(wiggleSpeed * time) - 0.5; } /* * This is the normal blend mode in which the foreground is painted on top of the background based * on the foreground opacity. * * @param b the background color. * @param f the foreground color. * @param o the mask or the foreground alpha. * * Note: this blending function expects the foreground to have premultiplied alpha. */ vec3 normalBlend(vec3 b, vec3 f, float o) { return b * (1. - o) + f; } vec3 normalBlendWithWhiteSrc(vec3 b, float o) { return b * (1. - o) + o; } Loading
weathereffects/assets/shaders/fog_effect.agsl +0 −8 Original line number Diff line number Diff line Loading @@ -46,14 +46,6 @@ float fbm (vec3 st, vec2 time) { return result; } vec3 normalBlendWithWhiteSrc(vec3 b, float o) { return b * (1. - o) + o; } vec3 normalBlend(vec3 b, vec3 f, float o) { return b * (1. - o) + f * o; } vec4 main(float2 fragCoord) { float2 uv = fragCoord / screenSize; uv.y /= screenAspectRatio; Loading
weathereffects/assets/shaders/rain_effect.agsl +1 −1 Original line number Diff line number Diff line Loading @@ -144,7 +144,7 @@ vec4 main(float2 fragCoord) { color.rgb = mix(color.rgb, highlightColor.rgb, rainVisibility * rain.dropMask); // Add the foreground. Any effect from here will be in front of the subject. color.rgb = mix(color.rgb, colorForeground.rgb, colorForeground.a); color.rgb = normalBlend(color.rgb, colorForeground.rgb, colorForeground.a); // Generate rain in front of the subject (bigger and faster). rain = generateRain( Loading
weathereffects/assets/shaders/snow.agsl +4 −2 Original line number Diff line number Diff line Loading @@ -44,7 +44,8 @@ Snow generateSnow( in float layerNumber ) { /* Grid. */ float depth = 1. + layerNumber * 0.3; // Increase the last number to make each layer more separate from the previous one. float depth = 1. + layerNumber * 0.35; float speedAdj = 1. + layerNumber * 0.15; float layerR = idGenerator(layerNumber); snowGridSize *= depth; Loading Loading @@ -83,7 +84,8 @@ Snow generateSnow( // Horizontal movement: Wiggle. float wiggleSpeed = 3.0; float wiggleAmp = 0.8; // Adjust wiggle based on layer number (0 = closer to screen => we want less movement). float wiggleAmp = 0.4 + 0.4 * smoothstep(0.5, 2.5, layerNumber); // Define the start based on the cell id. float horizontalStartAmp = 0.5; // Add the wiggle (equation decided by testing in Grapher). Loading
weathereffects/assets/shaders/snow_effect.agsl +16 −15 Original line number Diff line number Diff line Loading @@ -17,8 +17,10 @@ uniform shader foreground; uniform shader background; uniform shader blurredBackground; uniform float2 uvOffsets; uniform float uvScale; uniform float2 uvOffsetFgd; uniform float2 uvScaleFgd; uniform float2 uvOffsetBgd; uniform float2 uvScaleBgd; uniform float time; uniform float screenAspectRatio; uniform float2 screenSize; Loading @@ -34,7 +36,7 @@ const vec4 snowColor = vec4(vec3(0.9), 1.); const vec4 glassTint = vec4(vec3(0.8), 1.); // gray // snow opacity (how visible it is). const float snowOpacity = 0.8; const float snowOpacity = 1.4; // how frosted the glass is. const float frostedGlassIntensity = 0.07; Loading @@ -42,22 +44,21 @@ const float frostedGlassIntensity = 0.07; vec4 main(float2 fragCoord) { float2 uv = fragCoord / screenSize; // Adjusts the UVs to have the expected rect of the image. float2 uvTexture = fragCoord * uvScale + uvOffsets; vec4 colorForeground = foreground.eval(uvTexture); vec4 colorForeground = foreground.eval(fragCoord * uvScaleFgd + uvOffsetFgd); vec4 colorBackground = background.eval(fragCoord * uvScaleBgd + uvOffsetBgd); vec4 color = vec4(0., 0., 0., 1.); // Add some slight tint to the frosted glass. // Get color of the background texture. color.rgb = mix(background.eval(uvTexture).rgb, glassTint.rgb, frostedGlassIntensity); color.rgb = mix(colorBackground.rgb, glassTint.rgb, frostedGlassIntensity); for (float i = 9.; i > 2.; i--) { // Generate snow behind the subject. Snow snow = generateSnow( /* uvNorm = */ uv, /* fragment aspect ratio = */ screenAspectRatio, /* time = */ time * 1.25, /* Grid size = */ vec2(3.0, 2.0), uv, screenAspectRatio, time * 1.25, /* Grid size = */ vec2(2.1, 1.4), /* layer number = */ i); color.rgb = mix(color.rgb, snowColor.rgb, snowOpacity * snow.flakeMask); Loading @@ -69,10 +70,10 @@ vec4 main(float2 fragCoord) { for (float i = 2.; i >= 0.; i--) { // Generate snow behind the subject. Snow snow = generateSnow( /* uvNorm = */ uv, /* fragment aspect ratio = */ screenAspectRatio, /* time = */ time * 1.25, /* Grid size = */ vec2(3.0, 2.0), uv, screenAspectRatio, time * 1.25, /* Grid size = */ vec2(2.1, 1.4), /* layer number = */ i); color.rgb = mix(color.rgb, snowColor.rgb, snowOpacity * snow.flakeMask); Loading
weathereffects/assets/shaders/utils.agsl +18 −0 Original line number Diff line number Diff line Loading @@ -44,3 +44,21 @@ float wiggle(float time, float wiggleSpeed) { return sin(wiggleSpeed * time + 0.5 * sin(wiggleSpeed * 5. * time)) * sin(wiggleSpeed * time) - 0.5; } /* * This is the normal blend mode in which the foreground is painted on top of the background based * on the foreground opacity. * * @param b the background color. * @param f the foreground color. * @param o the mask or the foreground alpha. * * Note: this blending function expects the foreground to have premultiplied alpha. */ vec3 normalBlend(vec3 b, vec3 f, float o) { return b * (1. - o) + f; } vec3 normalBlendWithWhiteSrc(vec3 b, float o) { return b * (1. - o) + o; }