2

I'm trying to understand how do I use the output of one pass in the other so that I can use several different passes. I'm just a step ahead of a pure newbie. I'm most probably doing something totally senseless.

Here is a minimal code :

Shader "Unlit/GaussianBlur"
{
    Properties
    {
        _MainTex("Texture", 2D) = "white" {}
    }
        SubShader
        {
            Tags { "RenderType" = "Transparent" }
            Blend SrcAlpha OneMinusSrcAlpha
            LOD 100

            Pass
            {
                CGPROGRAM


                #pragma vertex vert
                #pragma fragment frag
                // make fog work
                #pragma multi_compile_fog

                #include "UnityCG.cginc"

                struct appdata
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };

                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    UNITY_FOG_COORDS(1)
                    float4 vertex : SV_POSITION;
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                float4 _MainTex_TexelSize;

                v2f vert(appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    UNITY_TRANSFER_FOG(o,o.vertex);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {

                    
                    // apply fog
                    UNITY_APPLY_FOG(i.fogCoord, col);
                    return float4(1.0,0.0,0.0,1.0);

                }
                ENDCG
            }

            Pass
            {
                CGPROGRAM


                #pragma vertex vert
                #pragma fragment frag
                // make fog work
                #pragma multi_compile_fog

                #include "UnityCG.cginc"

                struct appdata
                {
                    float4 vertex : POSITION;
                    float2 uv : TEXCOORD0;
                };

                struct v2f
                {
                    float2 uv : TEXCOORD0;
                    UNITY_FOG_COORDS(1)
                    float4 vertex : SV_POSITION;
                };

                sampler2D _MainTex;
                float4 _MainTex_ST;
                float4 _MainTex_TexelSize;

                v2f vert(appdata v)
                {
                    v2f o;
                    o.vertex = UnityObjectToClipPos(v.vertex);
                    o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                    UNITY_TRANSFER_FOG(o,o.vertex);
                    return o;
                }

                fixed4 frag(v2f i) : SV_Target
                {

                    
                    // apply fog
                    UNITY_APPLY_FOG(i.fogCoord, col);
                    return  tex2D(_MainTex, i.uv);

                }
                ENDCG
            }
        }
}

So what I'm trying in the above code is first pass should return red color and second pass should take the pass of first one and directly output it. (for the sake of understanding the logic behind this multipass) But it doesn't work the way I assume it would. What am I missing?

ozan deniz
  • 45
  • 5

0 Answers0