lunoland

Unity Shader with RectMask2D Clipping

Apr 25th, 2018
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.35 KB | None | 0 0
  1. Shader "Shader Forge/UiShine" {
  2. Properties {
  3. [PerRendererData]_MainTex ("MainTex", 2D) = "white" {}
  4. _Color ("Color", Color) = (1,1,1,1)
  5. _ShineTex ("ShineTex", 2D) = "white" {}
  6. _time ("time", Range(0, 1)) = 0
  7. [HideInInspector]_Cutoff ("Alpha cutoff", Range(0,1)) = 0.5
  8. [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0
  9. _Stencil ("Stencil ID", Float) = 0
  10. _StencilReadMask ("Stencil Read Mask", Float) = 255
  11. _StencilWriteMask ("Stencil Write Mask", Float) = 255
  12. _StencilComp ("Stencil Comparison", Float) = 8
  13. _StencilOp ("Stencil Operation", Float) = 0
  14. _StencilOpFail ("Stencil Fail Operation", Float) = 0
  15. _StencilOpZFail ("Stencil Z-Fail Operation", Float) = 0
  16. }
  17. SubShader {
  18. Tags {
  19. "IgnoreProjector"="True"
  20. "Queue"="Transparent"
  21. "RenderType"="Transparent"
  22. "CanUseSpriteAtlas"="True"
  23. "PreviewType"="Plane"
  24. }
  25. Pass {
  26. Name "FORWARD"
  27. Tags {
  28. "LightMode"="ForwardBase"
  29. }
  30. Blend One OneMinusSrcAlpha
  31. Cull Off
  32. ZWrite Off
  33.  
  34. CGPROGRAM
  35. #pragma vertex vert
  36. #pragma fragment frag
  37. #define UNITY_PASS_FORWARDBASE
  38. #pragma multi_compile _ PIXELSNAP_ON
  39. #include "UnityCG.cginc"
  40. #include "UnityUI.cginc"
  41. #pragma multi_compile_fwdbase
  42. #pragma only_renderers d3d9 d3d11 glcore gles gles3 metal n3ds wiiu
  43. #pragma target 3.0
  44. uniform sampler2D _MainTex; uniform float4 _MainTex_ST;
  45. uniform float4 _Color;
  46. uniform sampler2D _ShineTex; uniform float4 _ShineTex_ST;
  47. uniform float _time;
  48. float4 _ClipRect;
  49.  
  50. struct VertexInput {
  51. float4 vertex : POSITION;
  52. float2 texcoord0 : TEXCOORD0;
  53. float4 vertexColor : COLOR;
  54. };
  55. struct VertexOutput {
  56. float4 pos : SV_POSITION;
  57. float2 uv0 : TEXCOORD0;
  58. float4 vertexColor : COLOR;
  59. float4 projPos : TEXCOORD1;
  60. float4 worldPos : TEXCOORD2;
  61. };
  62. VertexOutput vert (VertexInput v) {
  63. VertexOutput o = (VertexOutput)0;
  64. o.uv0 = v.texcoord0;
  65. o.vertexColor = v.vertexColor;
  66. o.pos = UnityObjectToClipPos(v.vertex);
  67. #ifdef PIXELSNAP_ON
  68. o.pos = UnityPixelSnap(o.pos);
  69. #endif
  70. o.projPos = ComputeScreenPos(o.pos);
  71. COMPUTE_EYEDEPTH(o.projPos.z);
  72.  
  73. o.worldPos = v.vertex;
  74.  
  75. return o;
  76. }
  77. float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
  78. float isFrontFace = ( facing >= 0 ? 1 : 0 );
  79. float faceSign = ( facing >= 0 ? 1 : -1 );
  80. float2 sceneUVs = (i.projPos.xy / i.projPos.w);
  81. ////// Lighting:
  82. ////// Emissive:
  83. float2 node_1790 = (sceneUVs.rg+_time*float2(1,0));
  84. float4 _ShineTex_var = tex2D(_ShineTex,TRANSFORM_TEX(node_1790, _ShineTex));
  85. float4 _MainTex_var = tex2D(_MainTex,TRANSFORM_TEX(i.uv0, _MainTex));
  86. float node_603 = (_MainTex_var.a*i.vertexColor.a); // A
  87. float3 emissive = (((_ShineTex_var.rgb*i.vertexColor.rgb*_Color.a)+(_MainTex_var.rgb*(i.vertexColor.rgb*_Color.rgb)))*node_603);
  88. float3 finalColor = emissive;
  89. return fixed4(finalColor, node_603 * UnityGet2DClipping(i.worldPos.xy, _ClipRect));
  90. }
  91. ENDCG
  92. }
  93. Pass {
  94. Name "ShadowCaster"
  95. Tags {
  96. "LightMode"="ShadowCaster"
  97. }
  98. Offset 1, 1
  99. Cull Off
  100.  
  101. CGPROGRAM
  102. #pragma vertex vert
  103. #pragma fragment frag
  104. #define UNITY_PASS_SHADOWCASTER
  105. #pragma multi_compile _ PIXELSNAP_ON
  106. #include "UnityCG.cginc"
  107. #include "Lighting.cginc"
  108. #pragma fragmentoption ARB_precision_hint_fastest
  109. #pragma multi_compile_shadowcaster
  110. #pragma only_renderers d3d9 d3d11 glcore gles gles3 metal n3ds wiiu
  111. #pragma target 3.0
  112. struct VertexInput {
  113. float4 vertex : POSITION;
  114. };
  115. struct VertexOutput {
  116. V2F_SHADOW_CASTER;
  117. };
  118. VertexOutput vert (VertexInput v) {
  119. VertexOutput o = (VertexOutput)0;
  120. o.pos = UnityObjectToClipPos( v.vertex );
  121. #ifdef PIXELSNAP_ON
  122. o.pos = UnityPixelSnap(o.pos);
  123. #endif
  124. TRANSFER_SHADOW_CASTER(o)
  125. return o;
  126. }
  127. float4 frag(VertexOutput i, float facing : VFACE) : COLOR {
  128. float isFrontFace = ( facing >= 0 ? 1 : 0 );
  129. float faceSign = ( facing >= 0 ? 1 : -1 );
  130. SHADOW_CASTER_FRAGMENT(i)
  131. }
  132. ENDCG
  133. }
  134. }
  135. FallBack "Diffuse"
  136. CustomEditor "ShaderForgeMaterialInspector"
  137. }
Advertisement
Add Comment
Please, Sign In to add comment