hch
1 天以前 45ad1dadba57b9f55b7cb89457e5c6420d321ed2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Shader "DynamicShadowProjector/Blit/Downsample" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
    }
 
    CGINCLUDE
    #include "Downsample.cginc"
    ENDCG
 
    SubShader {
        ZTest Always Cull Off ZWrite Off
        Fog { Mode Off }
        // pass 0: downsample
        Pass {
            CGPROGRAM
            #pragma vertex vert_downsample
            #pragma fragment frag_downsample
            ENDCG
        }
        // pass 1: downsample with shadow color
        Pass {
            CGPROGRAM
            #pragma vertex vert_downsample
            #pragma fragment frag_downsample_withShadowColor
            ENDCG
        }
        // pass 2: blit
        Pass {
            CGPROGRAM
            #pragma vertex vert_blit
            #pragma fragment frag_blit
            ENDCG
        }
        // pass 3: blit with shadow color
        Pass {
            CGPROGRAM
            #pragma vertex vert_blit
            #pragma fragment frag_blit_withShadowColor
            ENDCG
        }
        // pass 4: downsample with blur
        Pass {
            CGPROGRAM
            #pragma vertex vert_blit
            #pragma fragment frag_downsample_with_blur
            ENDCG
        }
        // pass 5: downsample with blur for mipmap
        Pass {
            CGPROGRAM
            #pragma vertex vert_blit
            #pragma fragment frag_downsample_with_blur_lod
            #pragma target 3.0
            fixed4 frag_downsample_with_blur_lod(v2f_blit i) : COLOR
            {
                fixed4 uv;
                uv.xy = i.uv0 + _Offset0.xy;
                uv.zw = 0;
                fixed4 c0 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset1.xy;
                fixed4 c1 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset2.xy;
                fixed4 c2 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset3.xy;
                fixed4 c3 = tex2Dlod(_MainTex, uv);
 
                uv.xy = i.uv0 + _Offset0.xw;
                fixed4 color = _Weight.x * c0;
                c0 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset1.xw;
                color += _Weight.y * c1;
                c1 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset2.xw;
                color += _Weight.z * c2;
                c2 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset3.xw;
                color += _Weight.w * c3;
                c3 = tex2Dlod(_MainTex, uv);
 
                uv.xy = i.uv0 + _Offset0.zy;
                color += _Weight.x * c0;
                c0 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset1.zy;
                color += _Weight.y * c1;
                c1 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset2.zy;
                color += _Weight.z * c2;
                c2 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset3.zy;
                color += _Weight.w * c3;
                c3 = tex2Dlod(_MainTex, uv);
 
                uv.xy = i.uv0 + _Offset0.zw;
                color += _Weight.x * c0;
                c0 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset1.zw;
                color += _Weight.y * c1;
                c1 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset2.zw;
                color += _Weight.z * c2;
                c2 = tex2Dlod(_MainTex, uv);
                uv.xy = i.uv0 + _Offset3.zw;
                color += _Weight.w * c3;
                c3 = tex2Dlod(_MainTex, uv);
 
                color += _Weight.x * c0;
                color += _Weight.y * c1;
                color += _Weight.z * c2;
                color += _Weight.w * c3;
 
                return color;
            }
            ENDCG
        }
    }
    Fallback "Hidden/DynamicShadowProjector/Blit/DownsampleFallback"
}