LinearPreviews.shader 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. Shader "Hidden/LinearMaterial"
  2. {
  3. Properties
  4. {
  5. _MainTex( "Texture", any ) = "" {}
  6. _BackGround( "Back", 2D) = "white" {}
  7. }
  8. SubShader
  9. {
  10. Lighting Off
  11. Blend SrcAlpha OneMinusSrcAlpha
  12. Cull Off
  13. ZWrite Off
  14. ZTest Always
  15. CGINCLUDE
  16. uniform float4x4 unity_GUIClipTextureMatrix;
  17. sampler2D _GUIClipTexture;
  18. Texture2D _MainTex;
  19. SamplerState sampler_MainTex;
  20. uniform float4 _MainTex_ST;
  21. SamplerState my_linear_clamp_sampler;
  22. uniform bool _ManualTex2SRGB;
  23. ENDCG
  24. Pass {
  25. CGPROGRAM
  26. #pragma vertex vert
  27. #pragma fragment frag
  28. #pragma target 2.0
  29. #include "UnityCG.cginc"
  30. float4 _Mask;
  31. struct appdata_t {
  32. float4 vertex : POSITION;
  33. float2 texcoord : TEXCOORD0;
  34. };
  35. struct v2f {
  36. float4 vertex : SV_POSITION;
  37. float2 texcoord : TEXCOORD0;
  38. float2 clipUV : TEXCOORD1;
  39. };
  40. v2f vert( appdata_t v )
  41. {
  42. v2f o;
  43. o.vertex = UnityObjectToClipPos( v.vertex );
  44. o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex );
  45. float3 eyePos = UnityObjectToViewPos( v.vertex );
  46. o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) );
  47. return o;
  48. }
  49. float4 frag( v2f i ) : SV_Target
  50. {
  51. float4 c = _MainTex.Sample( my_linear_clamp_sampler, i.texcoord );
  52. if (_ManualTex2SRGB) c.rgb = LinearToGammaSpace(c.rgb);
  53. c.rgb *= _Mask.rgb;
  54. c.a = tex2D( _GUIClipTexture, i.clipUV ).a;
  55. return c;
  56. }
  57. ENDCG
  58. }
  59. Pass { // sphere preview = true, alpha mask = false
  60. CGPROGRAM
  61. #pragma vertex vert
  62. #pragma fragment frag
  63. #pragma target 2.0
  64. #include "UnityCG.cginc"
  65. float _InvertedZoom;
  66. float4 _Mask;
  67. struct appdata_t {
  68. float4 vertex : POSITION;
  69. float2 texcoord : TEXCOORD0;
  70. };
  71. struct v2f {
  72. float4 vertex : SV_POSITION;
  73. float2 texcoord : TEXCOORD0;
  74. float2 clipUV : TEXCOORD1;
  75. };
  76. v2f vert( appdata_t v )
  77. {
  78. v2f o;
  79. o.vertex = UnityObjectToClipPos( v.vertex );
  80. o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex );
  81. float3 eyePos = UnityObjectToViewPos( v.vertex );
  82. o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) );
  83. return o;
  84. }
  85. float4 frag( v2f i ) : SV_Target
  86. {
  87. float2 p = 2 * i.texcoord - 1;
  88. float r = sqrt( dot( p,p ) );
  89. float alpha = saturate( ( 1 - r )*( 45 * _InvertedZoom + 5 ) );
  90. float4 c = _MainTex.Sample( sampler_MainTex, i.texcoord );
  91. if (_ManualTex2SRGB) c.rgb = LinearToGammaSpace(c.rgb);
  92. c.rgb *= _Mask.rgb;
  93. c.rgb *= alpha;
  94. c.a = tex2D( _GUIClipTexture, i.clipUV ).a;
  95. return c;
  96. }
  97. ENDCG
  98. }
  99. Pass {
  100. CGPROGRAM
  101. #pragma vertex vert
  102. #pragma fragment frag
  103. #pragma target 2.0
  104. #include "UnityCG.cginc"
  105. sampler2D _BackGround;
  106. uniform float4 _BackGround_ST;
  107. float _InvertedZoom;
  108. float4 _Mask;
  109. struct appdata_t {
  110. float4 vertex : POSITION;
  111. float2 texcoord : TEXCOORD0;
  112. };
  113. struct v2f {
  114. float4 vertex : SV_POSITION;
  115. float2 texcoord : TEXCOORD0;
  116. float2 clipUV : TEXCOORD1;
  117. };
  118. v2f vert( appdata_t v )
  119. {
  120. v2f o;
  121. o.vertex = UnityObjectToClipPos( v.vertex );
  122. o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex );
  123. float3 eyePos = UnityObjectToViewPos( v.vertex );
  124. o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) );
  125. return o;
  126. }
  127. float4 frag( v2f i ) : SV_Target
  128. {
  129. float3 back = tex2D( _BackGround, ( i.texcoord * 2 - 1 ) * _InvertedZoom).b;
  130. float4 c = _MainTex.Sample( sampler_MainTex, i.texcoord );
  131. if (_ManualTex2SRGB) c.rgb = LinearToGammaSpace(c.rgb);
  132. c.rgb *= _Mask.rgb;
  133. c.rgb = lerp( back, c.rgb, c.a );
  134. c.a = tex2D( _GUIClipTexture, i.clipUV ).a;
  135. return c;
  136. }
  137. ENDCG
  138. }
  139. Pass {
  140. CGPROGRAM
  141. #pragma vertex vert
  142. #pragma fragment frag
  143. #pragma target 2.0
  144. #include "UnityCG.cginc"
  145. sampler2D _BackGround;
  146. uniform float4 _BackGround_ST;
  147. float _InvertedZoom;
  148. float4 _Mask;
  149. struct appdata_t {
  150. float4 vertex : POSITION;
  151. float2 texcoord : TEXCOORD0;
  152. };
  153. struct v2f {
  154. float4 vertex : SV_POSITION;
  155. float2 texcoord : TEXCOORD0;
  156. float2 clipUV : TEXCOORD1;
  157. };
  158. v2f vert( appdata_t v )
  159. {
  160. v2f o;
  161. o.vertex = UnityObjectToClipPos( v.vertex );
  162. o.texcoord = TRANSFORM_TEX( v.texcoord.xy, _MainTex );
  163. float3 eyePos = UnityObjectToViewPos( v.vertex );
  164. o.clipUV = mul( unity_GUIClipTextureMatrix, float4( eyePos.xy, 0, 1.0 ) );
  165. return o;
  166. }
  167. float4 frag( v2f i ) : SV_Target
  168. {
  169. float2 p = 2 * i.texcoord - 1;
  170. float3 back = tex2D( _BackGround, p * _InvertedZoom).b;
  171. float r = sqrt( dot( p,p ) );
  172. float alpha = saturate( ( 1 - r )*( 45 * _InvertedZoom + 5 ) );
  173. float4 c = 0;
  174. c = _MainTex.Sample( sampler_MainTex, i.texcoord );
  175. if (_ManualTex2SRGB) c.rgb = LinearToGammaSpace(c.rgb);
  176. c.rgb *= _Mask.rgb;
  177. c.rgb = lerp( back, c.rgb, c.a * alpha);
  178. c.a = tex2D( _GUIClipTexture, i.clipUV ).a;
  179. return c;
  180. }
  181. ENDCG
  182. }
  183. }
  184. Fallback Off
  185. }