Shader "Hidden/LinearMaterial" { Properties { _MainTex( "Texture", any ) = "" {} _BackGround( "Back", 2D) = "white" {} } SubShader { Lighting Off Blend SrcAlpha OneMinusSrcAlpha Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" sampler2D _MainTex; uniform float4 _MainTex_ST; float4 _Mask; uniform float4x4 unity_GUIClipTextureMatrix; sampler2D _GUIClipTexture; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 texcoord : TEXCOORD0; float2 clipUV : TEXCOORD1; }; v2f vert( appdata_t v ) { v2f o; o.vertex = UnityObjectToClipPos( v.vertex ); o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex ); float3 eyePos = UnityObjectToViewPos( v.vertex ); o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) ); return o; } fixed4 frag( v2f i ) : SV_Target { float4 c = tex2D( _MainTex, i.texcoord ); c.rgb *= _Mask.rgb; c.a = tex2D( _GUIClipTexture, i.clipUV ).a; return c; } ENDCG } Pass { // sphere preview = true, alpha mask = false CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" sampler2D _MainTex; uniform float4 _MainTex_ST; float _InvertedZoom; float4 _Mask; uniform float4x4 unity_GUIClipTextureMatrix; sampler2D _GUIClipTexture; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 texcoord : TEXCOORD0; float2 clipUV : TEXCOORD1; }; v2f vert( appdata_t v ) { v2f o; o.vertex = UnityObjectToClipPos( v.vertex ); o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex ); float3 eyePos = UnityObjectToViewPos( v.vertex ); o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) ); return o; } fixed4 frag( v2f i ) : SV_Target { float2 p = 2 * i.texcoord - 1; float r = sqrt( dot( p,p ) ); float alpha = saturate( ( 1 - r )*( 45 * _InvertedZoom + 5 ) ); float4 c = tex2D( _MainTex, i.texcoord ); c.rgb *= _Mask.rgb; c.rgb *= alpha; c.a = tex2D( _GUIClipTexture, i.clipUV ).a; return c; } ENDCG } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" sampler2D _MainTex; sampler2D _BackGround; uniform float4 _MainTex_ST; uniform float4 _BackGround_ST; float _InvertedZoom; float4 _Mask; uniform float4x4 unity_GUIClipTextureMatrix; sampler2D _GUIClipTexture; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 texcoord : TEXCOORD0; float2 clipUV : TEXCOORD1; }; v2f vert( appdata_t v ) { v2f o; o.vertex = UnityObjectToClipPos( v.vertex ); o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex ); float3 eyePos = UnityObjectToViewPos( v.vertex ); o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) ); return o; } fixed4 frag( v2f i ) : SV_Target { float3 back = tex2D( _BackGround, ( i.texcoord * 2 - 1 ) * _InvertedZoom).b; float4 c = tex2D( _MainTex, i.texcoord ); c.rgb *= _Mask.rgb; c.rgb = lerp( back, c.rgb, c.a ); c.a = tex2D( _GUIClipTexture, i.clipUV ).a; return c; } ENDCG } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #include "UnityCG.cginc" sampler2D _MainTex; sampler2D _BackGround; uniform float4 _MainTex_ST; uniform float4 _BackGround_ST; float _InvertedZoom; float4 _Mask; uniform float4x4 unity_GUIClipTextureMatrix; sampler2D _GUIClipTexture; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; float2 texcoord : TEXCOORD0; float2 clipUV : TEXCOORD1; }; v2f vert( appdata_t v ) { v2f o; o.vertex = UnityObjectToClipPos( v.vertex ); o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex ); float3 eyePos = UnityObjectToViewPos( v.vertex ); o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) ); return o; } fixed4 frag( v2f i ) : SV_Target { float2 p = 2 * i.texcoord - 1; float3 back = tex2D( _BackGround, p * _InvertedZoom).b; float r = sqrt( dot( p,p ) ); float alpha = saturate( ( 1 - r )*( 45 * _InvertedZoom + 5 ) ); float4 c = 0; c = tex2D( _MainTex, i.texcoord ); c.rgb *= _Mask.rgb; c.rgb = lerp( back, c.rgb, c.a * alpha); c.a = tex2D( _GUIClipTexture, i.clipUV ).a; return c; } ENDCG } } Fallback Off }