Tex2Distort1.shader 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2. Shader "LK/Transparent/Tex2Distort1"
  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. _UVRotateSpeed ("UVRotateSpeed", Float) = 0
  10. _AddTex ("Add Tex", 2D) = "white" {}
  11. _HeatTime ("Heat Time", range (-1,1)) = 0
  12. _ForceX ("Strength X", range (0,1)) = 0.1
  13. _ForceY ("Strength Y", range (0,1)) = 0.1
  14. [Enum(UnityEngine.Rendering.BlendOp)] _BlendOp ("Blend Op", float) = 0 //Add
  15. [Enum(UnityEngine.Rendering.BlendMode)] _BlendSrc ("Blend Src Factor", float) = 5 //SrcAlpha
  16. [Enum(UnityEngine.Rendering.BlendMode)] _BlendDst ("Blend Dst Factor", float) = 10 //OneMinusSrcAlpha
  17. [Enum(UnityEngine.Rendering.CullMode)] _CullMode ("Cull Mode", float) = 2 //Back
  18. [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("Z Test", float) = 4 //LessEqual
  19. [Enum(Off, 0, On, 1)] _ZWrite("Z Write", float) = 0 //Off
  20. }
  21. CGINCLUDE
  22. ENDCG
  23. SubShader
  24. {
  25. Tags { "Queue" = "Transparent" "IgnoreProjector"="True"}
  26. Pass
  27. {
  28. Tags { "LIGHTMODE"="Always" }
  29. Lighting Off
  30. Fog { Mode Off }
  31. BlendOp [_BlendOp]
  32. Blend [_BlendSrc] [_BlendDst]
  33. Cull [_CullMode]
  34. ZTest [_ZTest]
  35. ZWrite [_ZWrite]
  36. CGPROGRAM
  37. #include "UnityCG.cginc"
  38. #pragma vertex vert
  39. #pragma fragment frag
  40. #pragma fragmentoption ARB_precision_hint_fastest
  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. inline float2 Calculate_UVAnim(float2 uv, float uSpeed, float vSpeed)
  68. {
  69. float time = _Time.z;
  70. float absUOffsetSpeed = abs(uSpeed);
  71. float absVOffsetSpeed = abs(vSpeed);
  72. if (absUOffsetSpeed > 0)
  73. {
  74. uv.x += frac(time * uSpeed);
  75. }
  76. if (absVOffsetSpeed > 0)
  77. {
  78. uv.y += frac(time * vSpeed);
  79. }
  80. return uv;
  81. }
  82. inline float2 Calculate_UVRotate(float2 uv, float uvRotateSpeed)
  83. {
  84. const half TWO_PI = 3.14159 * 2;
  85. const half2 VEC_CENTER = half2(0.5h, 0.5h);
  86. float time = _Time.z;
  87. float absUVRotSpeed = abs(uvRotateSpeed);
  88. half2 finaluv = uv;
  89. if (absUVRotSpeed > 0)
  90. {
  91. finaluv -= VEC_CENTER;
  92. half rotation = TWO_PI * frac(time * uvRotateSpeed);
  93. half sin_rot = sin(rotation);
  94. half cos_rot = cos(rotation);
  95. finaluv = half2(
  96. finaluv.x * cos_rot - finaluv.y * sin_rot,
  97. finaluv.x * sin_rot + finaluv.y * cos_rot);
  98. finaluv += VEC_CENTER;
  99. }
  100. uv = finaluv;
  101. return uv;
  102. }
  103. inline float2 Calculate_NoiseFromTex(float2 uv, sampler2D addTex)
  104. {
  105. float4 time = _Time;
  106. half offsetColor1 = tex2D(addTex, uv + frac(time.xz * _HeatTime));
  107. half offsetColor2 = tex2D(addTex, uv + frac(time.yx * _HeatTime));
  108. uv.x += (offsetColor1 - 0.5h) * _ForceX;
  109. uv.y += (offsetColor2 - 0.5h) * _ForceY;
  110. return uv;
  111. }
  112. v2f vert(appdata i)
  113. {
  114. v2f o;
  115. o.color = i.color * _Color;
  116. o.pos = UnityObjectToClipPos(i.vertex);
  117. o.uv = TRANSFORM_TEX(i.uv, _MainTex);
  118. //main tex uv rotate
  119. o.uv = Calculate_UVRotate(o.uv, _UVRotateSpeed);
  120. //Add tex uv stay
  121. return o;
  122. }
  123. fixed4 frag(v2f i) : COLOR0
  124. {
  125. fixed4 color = i.color * _Intensity;
  126. //noise effect
  127. i.uv = Calculate_NoiseFromTex(i.uv, _AddTex);
  128. fixed4 mainColor = tex2D(_MainTex, i.uv);
  129. color *= mainColor;
  130. return color;
  131. }
  132. ENDCG
  133. }
  134. }
  135. //Fallback "VertexLit"
  136. }