法线外扩
Pass
{
Name"OutLine"
Cull Front
ZWrite On
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float4 PositionClip : SV_POSITION;
};
float _EdgeWidth;
float4 _EdgeColor;
v2f vert (appdata v)
{
v2f o;
float3 PositionView= UnityObjectToViewPos(v.vertex);
float3 NormalWS=UnityObjectToWorldNormal(v.normal);
float3 NormalView =normalize(mul((float3x3)UNITY_MATRIX_V, NormalWS));
PositionView += NormalView * _EdgeWidth*0.001;
o.PositionClip=mul(UNITY_MATRIX_P,float4(PositionView,1.0));
return o;
}
half4 frag (v2f i) : SV_Target
{
return _EdgeColor;
}
ENDCG
}
基于模版测试的法线外扩
Stencil
{
Ref 1
Comp Always
Pass Replace
}
Pass
{
Stencil
{
Ref 1
Comp NotEqual
}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float _EdgeWidth;
fixed4 _EdgeColor;
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert (a2v v)
{
v2f o;
float4 pos = mul(UNITY_MATRIX_MV, v.vertex);
float3 normal = mul((float3x3)UNITY_MATRIX_IT_MV, v.normal);
normal.z = -0.5;
pos = pos + float4(normalize(normal), 0) * _EdgeWidth*0.01;
o.pos = mul(UNITY_MATRIX_P, pos);
return o;
}
float4 frag(v2f i) : SV_Target
{
return float4(_EdgeColor.rgb, 1);
}
ENDCG
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)