Hi, could you explain to me this bit of shader?

i am trying basics of shaders, and i thought to myself that distort some glass might not be that hard.
so i was about to find something to study,…
found this one, i don’t want full explanation, but i would like to know how that fallback optimization works, it’s at the very bottom of this shader, if i add that subshader in the category scope it almost without fps drop, if i don’t copy it to the scope, it halves my fps if stacked behind each other.
what does that “optimization” subshader does?

EDIT: No, if i add that to the scope the distortion dissappears…

Shader "FX/Glass/Stained BumpDistort" {
Properties {
    _BumpAmt  ("Distortion", range (0,4096)) = 10
    _MainTex ("Tint Color (RGB)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
}

Category {

    // We must be transparent, so other objects are drawn before this one.
    Tags { "Queue"="Transparent" "RenderType"="Opaque" }

    ////////////////////////////////////////////////////
    //   Fallback for older cards and Unity non-Pro   //
    //   Added here gives almost no fps loss.          //
    ////////////////////////////////////////////////////

    SubShader {

        // This pass grabs the screen behind the object into a texture.
        // We can access the result in the next pass as _GrabTexture
        GrabPass {                       
            Name "BASE"
            Tags { "LightMode" = "Always" }
         }
    
         // Main pass: Take the texture grabbed above and use the bumpmap to perturb it
         // on to the screen
        Pass {
            Name "BASE"
            Tags { "LightMode" = "Always" }
       
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"

struct appdata_t {
    float4 vertex : POSITION;
    float2 texcoord: TEXCOORD0;
};

struct v2f {
    float4 vertex : POSITION;
    float4 uvgrab : TEXCOORD0;
    float2 uvbump : TEXCOORD1;
    float2 uvmain : TEXCOORD2;
};

float _BumpAmt;
float4 _BumpMap_ST;
float4 _MainTex_ST;

v2f vert (appdata_t v)
{
    v2f o;
    o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
    #if UNITY_UV_STARTS_AT_TOP
    float scale = -1.0;
    #else
    float scale = 1.0;
    #endif
    o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5;
    o.uvgrab.zw = o.vertex.zw;
    o.uvbump = TRANSFORM_TEX( v.texcoord, _BumpMap );
    o.uvmain = TRANSFORM_TEX( v.texcoord, _MainTex );
    return o;
}

sampler2D _GrabTexture;
float4 _GrabTexture_TexelSize;
sampler2D _BumpMap;
sampler2D _MainTex;

half4 frag( v2f i ) : COLOR
{
    // calculate perturbed coordinates
    half2 bump = UnpackNormal(tex2D( _BumpMap, i.uvbump )).rg; // we could optimize this by just reading the x & y without reconstructing the Z
    float2 offset = bump * _BumpAmt * _GrabTexture_TexelSize.xy;
    i.uvgrab.xy = offset * i.uvgrab.z + i.uvgrab.xy;
 
    half4 col = tex2Dproj( _GrabTexture, UNITY_PROJ_COORD(i.uvgrab));
    half4 tint = tex2D( _MainTex, i.uvmain );
    return col * tint;
}
ENDCG
        }
    }

    // ------------------------------------------------------------------
    // Fallback for older cards and Unity non-Pro
 
    SubShader {
        Blend DstColor Zero
        Pass {
            Name "BASE"
            SetTexture [_MainTex] {    combine texture }
        }
    }
}

}

And if would not be too much time consuming for you, what could be some cool few-liners to add? (cheap in performance) : - )

The fallback shader is a basic multiply shader with no distortion. It’s what Unity will use if the current platform doesn’t support using a grab pass.