可以用一张渐变图和一张噪声图,一个圆形的模型,通过透明测试制作效果。
Shader "Clip/Bo" { Properties { _MainTex ("Texture", 2D) = "" {} _MainColor("Main Color",Color) = (1,1,1,1) _NoiseMap("NoiseMap", 2D) = "" {} _Cutout("Cutout", Range(0.0,1.1)) = 0.0 _Speed("Speed", Vector) = (.34, .85, .92, 1) } SubShader { Tags { "RenderType"="Opaque" "DisableBatching"="True"} Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; half2 texcoord0 : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float4 uv : TEXCOORD0; }; sampler2D _MainTex; float4 _MainTex_ST; float _Cutout; float4 _Speed; sampler2D _NoiseMap; float4 _NoiseMap_ST; float4 _MainColor; //顶点Shader v2f vert (appdata v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv.xy = TRANSFORM_TEX(v.texcoord0, _MainTex); o.uv.zw = TRANSFORM_TEX(v.texcoord0, _NoiseMap); return o; } //片元Shader half4 frag (v2f i) : SV_Target { half gradient = tex2D(_MainTex, i.uv.xy + _Time.y * 0.1f * _Speed.xy).r * (1.0 - i.uv.y); half noise = 1.0 - tex2D(_NoiseMap, i.uv.zw + _Time.y * 0.1f * _Speed.zw).r; clip(gradient - noise - _Cutout); return _MainColor; } ENDCG } } }