赞
踩
最近用Unity Shader实现了个圆环效果
Shader "Sprites/GridCircle" { Properties { _MainTex ("Texture", 2D) = "white" {} _InnerRadiuse("Inner Radius", Range(0,0.5)) = 0.1 _InnerSideRadiuse("Inner Side Radius", Range(0.001,0.5)) = 0.05 _OuterRadiuse("Outer Radius", Range(0,0.5)) = 0.2 _OuterSideRadiuse("Outer Side Radius", Range(0.001,0.5)) = 0.05 _InSideAlpha("In Side Alpha", Range(0,1)) = 0.2 _Color("Circle Color", color) = (1,1,1,1) } SubShader { Tags { "Queue" = "Transparent" "IgnoreProjector" = "True" "RenderType" = "Transparent+2" "PreviewType" = "Plane" "CanUseSpriteAtlas" = "True" } Blend SrcAlpha OneMinusSrcAlpha //半透混合模式 Pass { ZWrite Off ZTest Less CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; fixed _InnerRadiuse; fixed _InnerSideRadiuse; fixed _OuterRadiuse; fixed _OuterSideRadiuse; fixed _InSideAlpha; fixed4 _Color; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 col = tex2D(_MainTex, i.uv); col = col * _Color; fixed dis = distance(i.uv, fixed2(0.5, 0.5)); // 外环 fixed step0 = step(dis, _OuterRadiuse); col.a = lerp(1, step0 * _InSideAlpha, saturate(abs(dis - _OuterRadiuse) / _OuterSideRadiuse)); clip(col.a - 0.0001); // 内环 fixed step1 = step(_InnerRadiuse, dis); col.a = step1 * col.a + lerp(1, step1 * _InSideAlpha, saturate(abs(dis - _InnerRadiuse) / _InnerSideRadiuse)); clip(col.a - 0.0001); return col; } ENDCG } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。