experiments with fresnel and shadergraph
[WindSway-HDRP.git] / Library / PackageCache / com.unity.postprocessing@2.1.6 / PostProcessing / Shaders / Builtins / CopyStd.shader
blob7f2f4ec4f6669830541dbc2193fa091bbf3a1540
1 Shader "Hidden/PostProcessing/CopyStd"
3     //
4     // We need this shader for the very first RT blit using the internal CommandBuffer.Blit() method
5     // so it can handle AAResolve properly. We also need it to be separate because of VR and the
6     // need for a Properties block. If we were to add this block to the other Copy shader it would
7     // not allow us to manually bind _MainTex, thus breaking a few other things in the process...
8     //
10     Properties
11     {
12         _MainTex ("", 2D) = "white" {}
13     }
15     CGINCLUDE
17         struct Attributes
18         {
19             float4 vertex : POSITION;
20             float2 texcoord : TEXCOORD0;
21         };
23         struct Varyings
24         {
25             float4 vertex : SV_POSITION;
26             float2 texcoord : TEXCOORD0;
27         };
29         sampler2D _MainTex;
30         float4 _MainTex_ST;
32         Varyings Vert(Attributes v)
33         {
34             Varyings o;
35             o.vertex = float4(v.vertex.xy * 2.0 - 1.0, 0.0, 1.0);
36             o.texcoord = v.texcoord;
38             #if UNITY_UV_STARTS_AT_TOP
39             o.texcoord = o.texcoord * float2(1.0, -1.0) + float2(0.0, 1.0);
40             #endif
42             o.texcoord = o.texcoord * _MainTex_ST.xy + _MainTex_ST.zw; // We need this for VR
44             return o;
45         }
47         float4 Frag(Varyings i) : SV_Target
48         {
49             float4 color = tex2D(_MainTex, i.texcoord);
50             return color;
51         }
53         //>>> We don't want to include StdLib.hlsl in this file so let's copy/paste what we need
54         bool IsNan(float x)
55         {
56             return (x < 0.0 || x > 0.0 || x == 0.0) ? false : true;
57         }
59         bool AnyIsNan(float4 x)
60         {
61             return IsNan(x.x) || IsNan(x.y) || IsNan(x.z) || IsNan(x.w);
62         }
63         //<<<
65         float4 FragKillNaN(Varyings i) : SV_Target
66         {
67             float4 color = tex2D(_MainTex, i.texcoord);
69             if (AnyIsNan(color))
70             {
71                 color = (0.0).xxxx;
72             }
74             return color;
75         }
77     ENDCG
79     SubShader
80     {
81         Cull Off ZWrite Off ZTest Always
83         // 0 - Copy
84         Pass
85         {
86             CGPROGRAM
88                 #pragma vertex Vert
89                 #pragma fragment Frag
91             ENDCG
92         }
94         // 1 - Copy + NaN killer
95         Pass
96         {
97             CGPROGRAM
99                 #pragma vertex Vert
100                 #pragma fragment FragKillNaN
102             ENDCG
103         }
104     }