Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 039e81ad authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Support weather effects parallax in Magic Portrait" into main

parents 71d501e3 b092dbb3
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+1 −0
Original line number Diff line number Diff line
/weathereffects/graphics/build/
+8 −9
Original line number Diff line number Diff line
@@ -20,15 +20,13 @@ uniform shader fog;
uniform shader clouds;
uniform half2 fogSize;
uniform half2 cloudsSize;
uniform float2 uvOffsetFgd;
uniform float2 uvScaleFgd;
uniform float2 uvOffsetBgd;
uniform float2 uvScaleBgd;
uniform half4 time;
uniform half screenAspectRatio;
uniform half2 screenSize;
uniform half pixelDensity;
uniform half intensity;
uniform mat3 transformMatrixFgd;
uniform mat3 transformMatrixBgd;

#include "shaders/constants.agsl"
#include "shaders/utils.agsl"
@@ -37,9 +35,6 @@ uniform half intensity;
const vec3 fogColor = vec3(0.20);

vec4 main(float2 fragCoord) {
    float2 uv = fragCoord / screenSize;
    uv.y /= screenAspectRatio;

    vec2 timeForeground = vec2(time.x, time.y);
    vec2 timeBackground = vec2(time.z, time.w);

@@ -52,12 +47,16 @@ vec4 main(float2 fragCoord) {
     * - fgdFogFar (layer 1) / fgdFogClose (layer 2)
     */

    float2 fgdCoord = transformPoint(transformMatrixFgd, fragCoord);
    float2 bgdCoord = transformPoint(transformMatrixBgd, fragCoord);
    float2 uv = bgdCoord / screenSize;
    uv.y /= screenAspectRatio;
    // Load foreground and blend it with constant solid fog color.
    vec4 fgd = foreground.eval(fragCoord * uvScaleFgd + uvOffsetFgd);
    vec4 fgd = foreground.eval(fgdCoord);
    fgd.rgb = mix(fgd.rgb, fogColor, 0.15 * intensity * fgd.a);

    // Load background and blend it with constant solid fog color.
    vec4 bgd = background.eval(fragCoord * uvScaleBgd + uvOffsetBgd);
    vec4 bgd = background.eval(bgdCoord);
    bgd.rgb = mix(bgd.rgb, fogColor, 0.32 * intensity * bgd.a);

    /* Add first layer: background. */
+8 −10
Original line number Diff line number Diff line
@@ -17,15 +17,13 @@
uniform shader foreground;
uniform shader background;
uniform shader outlineBuffer;
uniform float2 uvOffsetFgd;
uniform float2 uvScaleFgd;
uniform float2 uvOffsetBgd;
uniform float2 uvScaleBgd;
uniform float time;
uniform float screenAspectRatio;
uniform float gridScale;
uniform float2 screenSize;
uniform half intensity;
uniform mat3 transformMatrixFgd;
uniform mat3 transformMatrixBgd;

#include "shaders/constants.agsl"
#include "shaders/utils.agsl"
@@ -57,7 +55,7 @@ vec3 drawSplashes(vec2 uv, vec2 fragCoord, vec3 color) {
    vec2 pixUv = cellUv;
    pixUv.x *= -1;
    vec2 pixDistance = screenSize * pixUv / gridSize;
    float2 uvTextureFgd = (fragCoord + pixDistance) * uvScaleFgd + uvOffsetFgd;
    float2 uvTextureFgd =  transformPoint(transformMatrixFgd, fragCoord + pixDistance);

    float outline = step(0.1, outlineBuffer.eval(uvTextureFgd).r);
    if (outline < 0.1) {
@@ -81,11 +79,11 @@ vec3 drawSplashes(vec2 uv, vec2 fragCoord, vec3 color) {
}

vec4 main(float2 fragCoord) {
    float2 uv = fragCoord / screenSize;

    // Adjusts the UVs to have the expected rect of the image.
    float2 uvTextureFgd = fragCoord * uvScaleFgd + uvOffsetFgd;
    float2 uvTextureBgd = fragCoord * uvScaleBgd + uvOffsetBgd;
    // Apply transform matrix to fragCoord
    float2 uvTextureFgd = transformPoint(transformMatrixFgd, fragCoord);
    float2 uvTextureBgd = transformPoint(transformMatrixBgd, fragCoord);
    // Calculate uv for snow based on transformed coordinates
    float2 uv = uvTextureFgd / screenSize;

    vec4 colorForeground = foreground.eval(uvTextureFgd);
    vec4 color = background.eval(uvTextureBgd);
+11 −11
Original line number Diff line number Diff line
@@ -18,14 +18,12 @@ uniform shader foreground;
uniform shader background;
uniform shader accumulatedSnow;
uniform shader noise;
uniform float2 uvOffsetFgd;
uniform float2 uvScaleFgd;
uniform float2 uvOffsetBgd;
uniform float2 uvScaleBgd;
uniform float2 gridSize;
uniform float time;
uniform float screenAspectRatio;
uniform float2 screenSize;
uniform mat3 transformMatrixFgd;
uniform mat3 transformMatrixBgd;

#include "shaders/constants.agsl"
#include "shaders/utils.agsl"
@@ -42,9 +40,6 @@ const float midSnowLayerIndex = 3;
const float closestSnowLayerIndex = 0;

vec4 main(float2 fragCoord) {
    float2 uv = fragCoord / screenSize;
    float2 uvAdjusted = vec2(uv.x, uv.y / screenAspectRatio);

    /**
     * The effect is consisted of 2 image textures (foreground and background) + 10 layers of
     * snow + 1 layer of snow accumulation. Below describes the rendering order (back to front):
@@ -55,11 +50,16 @@ vec4 main(float2 fragCoord) {
     * 5. Foreground snow layers (from mid layer to closest layer)
     */

    // Adjusts the UVs to have the expected rect of the image.
    float2 adjustedUvForeground = fragCoord * uvScaleFgd + uvOffsetFgd;
    vec4 colorForeground = foreground.eval(adjustedUvForeground);
    vec4 colorBackground = background.eval(fragCoord * uvScaleBgd + uvOffsetBgd);
    // Apply transform matrix to fragCoord
    float2 adjustedUvForeground = transformPoint(transformMatrixFgd, fragCoord);
    float2 adjustedUvBackground = transformPoint(transformMatrixBgd, fragCoord);

    // Calculate uv for snow based on transformed coordinates
    float2 uv = adjustedUvBackground / screenSize;
    float2 uvAdjusted = vec2(uv.x, uv.y / screenAspectRatio);

    vec4 colorForeground = foreground.eval(adjustedUvForeground);
    vec4 colorBackground = background.eval(adjustedUvBackground);
    // 1. Draw background.
    vec4 color = colorBackground;

+11 −7
Original line number Diff line number Diff line
@@ -16,14 +16,13 @@

uniform shader foreground;
uniform shader background;
uniform float2 uvOffsetFgd;
uniform float2 uvScaleFgd;
uniform float2 uvOffsetBgd;
uniform float2 uvScaleBgd;
uniform float screenAspectRatio;
uniform float2 screenSize;
uniform float time;
uniform float intensity;
uniform mat3 transformMatrixFgd;
uniform mat3 transformMatrixBgd;


#include "shaders/constants.agsl"
#include "shaders/utils.agsl"
@@ -32,11 +31,16 @@ uniform float intensity;
#include "shaders/lens_flare.agsl"

vec4 main(float2 fragCoord) {
    float2 uv = fragCoord / screenSize;
    // Apply transform matrix to fragCoord
    float2 adjustedUvForeground = transformPoint(transformMatrixFgd, fragCoord);
    float2 adjustedUvBackground = transformPoint(transformMatrixBgd, fragCoord);


    float2 uv = adjustedUvBackground / screenSize;
    uv.y /= screenAspectRatio;

    vec4 colorForeground = foreground.eval(fragCoord * uvScaleFgd + uvOffsetFgd);
    vec4 color = background.eval(fragCoord * uvScaleBgd + uvOffsetBgd);
    vec4 colorForeground = foreground.eval(adjustedUvForeground);
    vec4 color = background.eval(adjustedUvBackground);

    // TODO(b/347299395): to add flare and sun effect background

Loading