Advertisement
dnnkeeper

Unity3d Overlay Shader

Oct 4th, 2013
468
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.86 KB | None | 0 0
  1. Shader "Custom/Overlay" {
  2.  
  3.     Properties {
  4.  
  5.         _OverlayTex ("Overlay (RGB)", 2D) = "white" {}
  6.  
  7.     }
  8.  
  9.    
  10.  
  11.     SubShader {
  12.  
  13.         Tags { "RenderType"="Transparent" "Queue"="Transparent+1000"}
  14.  
  15.         LOD 200
  16.  
  17.        
  18.  
  19.         GrabPass {}
  20.  
  21.        
  22.  
  23.         Pass {
  24.  
  25.             CGPROGRAM
  26. // Upgrade NOTE: excluded shader from DX11 and Xbox360; has structs without semantics (struct v2f members projPos)
  27. #pragma exclude_renderers d3d11 xbox360
  28.  
  29.            
  30.  
  31.             #pragma vertex vert
  32.  
  33.             #pragma fragment frag
  34.  
  35.            
  36.  
  37.             #include "UnityCG.cginc"
  38.  
  39.            
  40.  
  41.             sampler2D _GrabTexture;
  42.  
  43.             sampler2D _OverlayTex;
  44.  
  45.            
  46.  
  47.             struct appdata_t {
  48.  
  49.                 float4 vertex : POSITION;
  50.  
  51.                 float4 texcoord : TEXCOORD0;
  52.  
  53.             };
  54.  
  55.            
  56.  
  57.             struct v2f {
  58.  
  59.                 float4 vertex : POSITION;
  60.  
  61.                 float2 uv : TEXCOORD0;
  62.  
  63.                 float4 projPos : TEXCOORD1;
  64.  
  65.             };
  66.  
  67.            
  68.  
  69.             float4 _OverlayTex_ST;
  70.  
  71.            
  72.  
  73.             v2f vert( appdata_t v ){
  74.  
  75.                 v2f o;
  76.  
  77.                 o.vertex = mul( UNITY_MATRIX_MVP, v.vertex );
  78.  
  79.                 o.uv = TRANSFORM_TEX( v.texcoord, _OverlayTex );
  80.  
  81.                 o.projPos = ComputeGrabScreenPos( o.vertex );
  82.  
  83.                 return o;
  84.  
  85.             }
  86.  
  87.            
  88.  
  89.             half4 frag( v2f i ) : COLOR {
  90.  
  91.                 i.projPos /= i.projPos.w;
  92.  
  93.                 half4 base = tex2D( _GrabTexture, float2( i.projPos.xy ));
  94.  
  95.                 half4 overlay = tex2D( _OverlayTex, i.uv );
  96.  
  97.  
  98.  
  99.                 return lerp(   1 - 2 * (1 - base) * (1 - overlay),    2 * base * overlay,    step( base, 0.5 ));
  100.  
  101.             }
  102.  
  103.            
  104.  
  105.             ENDCG
  106.  
  107.         }
  108.  
  109.     }
  110.  
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement