Unity 2D内描边Shader
一、前言
今天,我们来实现一个2D内描边的效果。内描边:即把边缘像素变成描边的颜色,占用原来的像素。
思路:我们可以在片元着色器实现此效果:当一个像素本身不是透明的(alpha>0),而且它上下左右4个像素的alpha值的乘积等于0,那么我们可以判定该像素处于边缘,让它变成描边颜色就可以。
二、Shader内容
2.1 初版Shader
Shader "Custom/2DInline"
{
Properties
{
_MainTex("MainTex",2D) = "white"{}
_InlineColor("InlineColor",Color) = (0,0,0,1)
_InlineWidth("InlineWidth",Range(0,10)) = 1
}
SubShader{
Tags { "Queue" = "Transparent" "RenderType" = "Transparent"}
Blend SrcAlpha OneMinusSrcAlpha
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f{
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _MainTex_TexelSize;
float4 _InlineColor;
float _InlineWidth;
v2f vert(appdata a){
v2f v;
v.pos = UnityObjectToClipPos(a.vertex);
v.uv = TRANSFORM_TEX(a.uv,_MainTex);