Unity中实现羽化功能的shader
发表于2018-04-17
本篇文章和大家分享下如何用shader实现羽化效果,羽化就是使你选定范围的图边缘达到朦胧的效果。羽化值越大,朦胧范围越宽,羽化值越小,朦胧范围越窄。
GLSL->ShaderLab,原GLSL代码来自http://blog.csdn.net/panda1234lee/article/details/52199296,
由于shaderLab的一些特性,shaderLab代码显得要简洁很多。
代码如下:
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Custom/eclosion" { Properties { _MainTex ("Main Tex", 2D) = "white" {} _Diff("Diff", Range(0, 1)) = 0.5 } SubShader { Pass { Tags { "LightMode"="ForwardBase" } CGPROGRAM #pragma vertex vert #pragma fragment frag fixed4 _Color; sampler2D _MainTex; float4 _MainTex_ST; float _Diff; struct a2v { float4 vertex : POSITION; float4 texcoord : TEXCOORD0; }; struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD1; }; v2f vert(a2v v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = v.texcoord.xy * _MainTex_ST.xy + _MainTex_ST.zw; return o; } fixed4 frag(v2f i) : SV_Target { fixed3 srcColor = tex2D(_MainTex, i.uv).rgb; float dx = i.uv.x - 0.5; float dy = i.uv.y - 0.5; float dstSq = pow(dx, 2.0) + pow(dy, 2.0); float v = (dstSq / _Diff); float r = clamp(srcColor.r + v, 0.0, 1.0); float g = clamp(srcColor.g + v, 0.0, 1.0); float b = clamp(srcColor.b + v, 0.0, 1.0); return fixed4(r,g,b,1.0); } ENDCG } } FallBack "Specular" }
来自:https://blog.csdn.net/rickshaozhiheng/article/details/73155554