一个用于unity的简单的轮廓线效果笔记.
Shader "Level4/Outline/SimpleOutlineOnly" {
Properties {
_OutlineColor("Outline Color",color) = (0,0,0,0)
_Outline("Outline Width",float) = 0.01
}
CGINCLUDE
#include "UnityCG.cginc"
struct appdata_custom{
float4 vertex:POSITION;
float3 normal:NORMAL;
};
struct v2f{
float4 pos:POSITION;
float4 color:COLOR;
};
float4 _OutlineColor;
float _Outline;
/**
1 将法线变换到mvp空间.
2 将mvp法线的xy缩放_Outline后,加到消化过的顶点位置.
*/
v2f vert(appdata_custom i){
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,i.vertex);
float3 offset = mul((float3x3)UNITY_MATRIX_MVP,i.normal);
o.pos.xy += offset.xy * _Outline;
o.color = _OutlineColor;
return o;
}
float4 frag(v2f i):COLOR{
return i.color;
}
ENDCG
SubShader{
Tags{"Queue"="Transparent"}
Pass{
Name "outline"
Tags{"LightMode"="Always"}
Cull Front
Blend One OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
ENDCG
}
}
Fallback "Diffuse"
}
控制_OutLineColor(轮廓线颜色)
_OutLine(轮廓线宽度)
来实现动画