Tex.shader 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2. Shader "LK/Transparent/Tex"
  3. {
  4. Properties
  5. {
  6. _Color ("Main Color", Color) = (1,1,1,1)
  7. _Intensity ("Intensity", float) = 1
  8. _MainTex ("Main Tex", 2D) = "white" {}
  9. _USpeed ("USpeed", Float) = 0
  10. _VSpeed ("VSpeed", Float) = 0
  11. [Enum(UnityEngine.Rendering.BlendOp)] _BlendOp ("Blend Op", float) = 0 //Add
  12. [Enum(UnityEngine.Rendering.BlendMode)] _BlendSrc ("Blend Src Factor", float) = 5 //SrcAlpha
  13. [Enum(UnityEngine.Rendering.BlendMode)] _BlendDst ("Blend Dst Factor", float) = 10 //OneMinusSrcAlpha
  14. [Enum(UnityEngine.Rendering.CullMode)] _CullMode ("Cull Mode", float) = 2 //Back
  15. [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("Z Test", float) = 4 //LessEqual
  16. [Enum(Off, 0, On, 1)] _ZWrite("Z Write", float) = 0 //Off
  17. _AdditiveAlpha("_AdditiveAlpha",Float) = 0
  18. [KeywordEnum(None,UV)] _Option("Option",Int) = 0
  19. }
  20. CGINCLUDE
  21. ENDCG
  22. SubShader
  23. {
  24. Tags { "Queue" = "Transparent" "IgnoreProjector"="True"}
  25. Pass
  26. {
  27. Tags { "LIGHTMODE"="Always" }
  28. Lighting Off
  29. Fog { Mode Off }
  30. BlendOp [_BlendOp]
  31. Blend [_BlendSrc] [_BlendDst]
  32. Cull [_CullMode]
  33. ZTest [_ZTest]
  34. ZWrite [_ZWrite]
  35. CGPROGRAM
  36. #include "UnityCG.cginc"
  37. #pragma vertex vert
  38. #pragma fragment frag
  39. #pragma fragmentoption ARB_precision_hint_fastest
  40. #pragma shader_feature __ _OPTION_UV
  41. struct appdata
  42. {
  43. float4 vertex : POSITION;
  44. float2 uv : TEXCOORD0;
  45. fixed4 color : COLOR;
  46. };
  47. struct v2f
  48. {
  49. float4 pos : SV_POSITION;
  50. float2 uv : TEXCOORD0;
  51. fixed4 color : COLOR;
  52. };
  53. float4 _Color;
  54. float _Intensity;
  55. sampler2D _MainTex;
  56. float4 _MainTex_ST;
  57. sampler2D _AddTex;
  58. float4 _AddTex_ST;
  59. float _UVRotateSpeed;
  60. float _USpeed;
  61. float _VSpeed;
  62. float _USpeed1;
  63. float _VSpeed1;
  64. half _ForceX;
  65. half _ForceY;
  66. float _HeatTime;
  67. float _AdditiveAlpha;
  68. inline float2 Calculate_UVAnim(float2 uv, float uSpeed, float vSpeed)
  69. {
  70. float time = _Time.z;
  71. float absUOffsetSpeed = abs(uSpeed);
  72. float absVOffsetSpeed = abs(vSpeed);
  73. if (absUOffsetSpeed > 0)
  74. {
  75. uv.x += frac(time * uSpeed);
  76. }
  77. if (absVOffsetSpeed > 0)
  78. {
  79. uv.y += frac(time * vSpeed);
  80. }
  81. return uv;
  82. }
  83. inline float2 Calculate_UVRotate(float2 uv, float uvRotateSpeed)
  84. {
  85. const half TWO_PI = 3.14159 * 2;
  86. const half2 VEC_CENTER = half2(0.5h, 0.5h);
  87. float time = _Time.z;
  88. float absUVRotSpeed = abs(uvRotateSpeed);
  89. half2 finaluv = uv;
  90. if (absUVRotSpeed > 0)
  91. {
  92. finaluv -= VEC_CENTER;
  93. half rotation = TWO_PI * frac(time * uvRotateSpeed);
  94. half sin_rot = sin(rotation);
  95. half cos_rot = cos(rotation);
  96. finaluv = half2(
  97. finaluv.x * cos_rot - finaluv.y * sin_rot,
  98. finaluv.x * sin_rot + finaluv.y * cos_rot);
  99. finaluv += VEC_CENTER;
  100. }
  101. uv = finaluv;
  102. return uv;
  103. }
  104. inline float2 Calculate_NoiseFromTex(float2 uv, sampler2D addTex)
  105. {
  106. float4 time = _Time;
  107. half offsetColor1 = tex2D(addTex, uv + frac(time.xz * _HeatTime));
  108. half offsetColor2 = tex2D(addTex, uv + frac(time.yx * _HeatTime));
  109. uv.x += (offsetColor1 - 0.5h) * _ForceX;
  110. uv.y += (offsetColor2 - 0.5h) * _ForceY;
  111. return uv;
  112. }
  113. v2f vert(appdata i)
  114. {
  115. v2f o;
  116. o.color = i.color * _Color;
  117. o.pos = UnityObjectToClipPos(i.vertex);
  118. o.uv = TRANSFORM_TEX(i.uv, _MainTex);
  119. #if _OPTION_UV
  120. //main tex uv offset
  121. o.uv = Calculate_UVAnim(o.uv, _USpeed, _VSpeed);
  122. #endif
  123. return o;
  124. }
  125. fixed4 frag(v2f i) : COLOR0
  126. {
  127. fixed4 color = i.color * _Intensity;
  128. color *= tex2D(_MainTex, i.uv);
  129. #if _OPTION_UV
  130. color.a += _AdditiveAlpha;
  131. #endif
  132. return color;
  133. }
  134. ENDCG
  135. }
  136. }
  137. //Fallback "VertexLit"
  138. }