FlowOverlay.shader 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. Shader "Custom/FlowOverlay"
  2. {
  3. Properties
  4. {
  5. _BaseMap("Base Map", 2D) = "white" {}
  6. _FlowTex("Flow Texture", 2D) = "white" {}
  7. _FlowColor("Flow Color", Color) = (1,0.5,0,1)
  8. _FlowSpeed("Flow Speed", Float) = 1.0
  9. _FlowAngle("Flow Angle", Float) = 0.0
  10. _Tiling("Flow Tiling", Vector) = (1,1,0,0)
  11. _FlowStrength("Flow Strength", Float) = 1.0
  12. }
  13. SubShader
  14. {
  15. Tags { "RenderType" = "Opaque" }
  16. LOD 200
  17. Pass
  18. {
  19. CGPROGRAM
  20. #pragma vertex vert
  21. #pragma fragment frag
  22. #include "UnityCG.cginc"
  23. sampler2D _BaseMap;
  24. sampler2D _FlowTex;
  25. float4 _FlowColor;
  26. float _FlowSpeed;
  27. float _FlowAngle;
  28. float4 _Tiling;
  29. float _FlowStrength;
  30. struct appdata
  31. {
  32. float4 vertex : POSITION;
  33. float2 uv : TEXCOORD0;
  34. };
  35. struct v2f
  36. {
  37. float2 uv : TEXCOORD0;
  38. float2 uvFlow : TEXCOORD1;
  39. float4 vertex : SV_POSITION;
  40. };
  41. float2 RotateUV(float2 uv, float angleDeg, float2 pivot)
  42. {
  43. float angleRad = radians(angleDeg);
  44. float s = sin(angleRad);
  45. float c = cos(angleRad);
  46. uv -= pivot;
  47. float2 rotatedUV = float2(uv.x * c - uv.y * s, uv.x * s + uv.y * c);
  48. return rotatedUV + pivot;
  49. }
  50. v2f vert(appdata v)
  51. {
  52. v2f o;
  53. o.vertex = UnityObjectToClipPos(v.vertex);
  54. // 原贴图UV
  55. o.uv = v.uv;
  56. // 电流贴图UV:先缩放,再旋转
  57. float2 uvScaled = v.uv * _Tiling.xy;
  58. float2 uvRotated = RotateUV(uvScaled, _FlowAngle, 0.5);
  59. o.uvFlow = uvRotated + float2(_Time.y * _FlowSpeed, 0);
  60. return o;
  61. }
  62. fixed4 frag(v2f i) : SV_Target
  63. {
  64. fixed4 baseCol = tex2D(_BaseMap, i.uv);
  65. fixed4 flowTex = tex2D(_FlowTex, i.uvFlow);
  66. fixed4 flowColor = flowTex * _FlowColor * _FlowStrength;
  67. fixed4 finalColor = baseCol + flowColor;
  68. return finalColor;
  69. }
  70. ENDCG
  71. }
  72. }
  73. }