涟漪效果

作者:追风剑情 发布于:2021-8-16 11:05 分类:Unity3d

一、工程截图

3333.png

2222.png

二、生成涟漪效果的Shader

  1. Shader "Custom/RiffleEffect"
  2. {
  3. Properties
  4. {
  5. _MainTex ("Texture", 2D) = "white" {}
  6. //涟漪环宽度
  7. _Width ("Width", Range(0.01, 0.1)) = 0.04
  8. //速度
  9. _Speed("Speed", Range(0.1, 2)) = 0.8
  10. }
  11. SubShader
  12. {
  13. Tags { "RenderType"="Opaque" }
  14. LOD 100
  15.  
  16. Pass
  17. {
  18. CGPROGRAM
  19. #pragma vertex vert
  20. #pragma fragment frag
  21. // make fog work
  22. #pragma multi_compile_fog
  23.  
  24. #include "UnityCG.cginc"
  25.  
  26. struct appdata
  27. {
  28. float4 vertex : POSITION;
  29. float2 uv : TEXCOORD0;
  30. };
  31.  
  32. struct v2f
  33. {
  34. float2 uv : TEXCOORD0;
  35. UNITY_FOG_COORDS(1)
  36. float4 vertex : SV_POSITION;
  37. };
  38.  
  39. sampler2D _MainTex;
  40. float4 _MainTex_ST;
  41. fixed _Width;
  42. fixed _Speed;
  43.  
  44. v2f vert (appdata v)
  45. {
  46. v2f o;
  47. o.vertex = UnityObjectToClipPos(v.vertex);
  48. o.uv = TRANSFORM_TEX(v.uv, _MainTex);
  49. UNITY_TRANSFER_FOG(o,o.vertex);
  50. return o;
  51. }
  52.  
  53. fixed4 frag(v2f i) : SV_Target
  54. {
  55. //图像中心点uv
  56. fixed2 center = fixed2(0.5, 0.5);
  57. //离中心点距离
  58. fixed dis = distance(i.uv, center);
  59. //将坐标原点移到center位置
  60. fixed2 cp = i.uv - center;
  61. //frac(x)取x的小数部分
  62. //f代表从中心向边缘的扩散距离
  63. //控制涟漪环向外扩散
  64. fixed f = frac(_Time.y * _Speed);
  65. //当前uv离中心点的距离
  66. //取值范围: [0, 0.5] * 2 -> [0, 1]
  67. fixed dis2 = dis * 2;
  68. //涟漪环宽度
  69. fixed rw = _Width;
  70. fixed dw = abs(dis2 - f);
  71. //对落在涟漪环内的uv做偏移
  72. if (dw < rw) {
  73. //w=[0,rw]
  74. fixed w = rw - dw;
  75. //衰减
  76. w *= (1 - f);
  77. //s=[0, PI/2]
  78. float s = w / rw * UNITY_HALF_PI;
  79. //sin(s)=[0, 1]
  80. cp *= abs(sin(s) * w + (1 - w));
  81. }
  82. //再将坐标原点移回图像左下角
  83. fixed2 uv = center + cp;
  84.  
  85. fixed4 col= tex2D(_MainTex, uv);
  86. return col;
  87. }
  88. ENDCG
  89. }
  90. }
  91. }

三、运行测试

11112.gif

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号