PathShader.shader 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. Shader "Custom/ParticleUnlitLocalYGradient"
  2. {
  3. Properties
  4. {
  5. _Color1 ("Color 1", Color) = (1, 1, 1, 1)
  6. _Color2 ("Color 2", Color) = (0, 0, 0, 1)
  7. _GradientRange ("Gradient Range", Vector) = (0, 1, 0, 0)
  8. }
  9. SubShader
  10. {
  11. Tags { "Queue" = "Overlay" }
  12. Pass
  13. {
  14. CGPROGRAM
  15. #pragma vertex vert
  16. #pragma fragment frag
  17. #pragma exclude_renderers gles xbox360 ps3
  18. struct appdata_t
  19. {
  20. float4 vertex : POSITION;
  21. float4 color : COLOR;
  22. };
  23. struct v2f
  24. {
  25. float4 pos : POSITION;
  26. float4 color : COLOR;
  27. float localY : TEXCOORD0;
  28. };
  29. float4 _Color1;
  30. float4 _Color2;
  31. float4 _GradientRange; // xy 是范围的最小值和最大值
  32. v2f vert (appdata_t v)
  33. {
  34. v2f o;
  35. o.pos = UnityObjectToClipPos(v.vertex);
  36. o.color = v.color;
  37. // 将模型空间的 Y 坐标传递到片段着色器
  38. o.localY = v.vertex.y;
  39. return o;
  40. }
  41. fixed4 frag (v2f i) : SV_Target
  42. {
  43. // 计算渐变的值
  44. float gradient = (i.localY - _GradientRange.x) / (_GradientRange.y - _GradientRange.x);
  45. gradient = clamp(gradient, 0.0, 1.0); // 确保渐变值在 0 到 1 之间
  46. // 线性插值两种颜色
  47. fixed4 interpolatedColor = lerp(_Color1, _Color2, gradient);
  48. return interpolatedColor * i.color;
  49. }
  50. ENDCG
  51. }
  52. }
  53. FallBack "Diffuse"
  54. }