所有的几何体都包含正面、背面,面的剔除基于大多数网格对象都是封闭的事实,因此不需要绘制背面。
面的剔除操作模式 | 说明 |
---|---|
Cull Back | 不绘制背向摄像机的面(默认) |
Cull Front | 不绘制面向摄像机的面 |
Cull Off | 关闭面的剔除操作 |
还有一种类似的,就是角色身上的披风,应该来说是个平面,但是想要两个面都绘制。。。应该不是用 Cull Off
用剔除操作实现描边效果
第一个 Pass ,沿法线挤压,稍大一点,剔除正面,然后就可以看到它的背面
第二个 Pass ,正常渲染,剔除背面,遮挡了上一个 Pass 的中间部分
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Custom/CullTest" {
SubShader
{
Pass
{
Cull Front
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct v2f
{
float4 pos:SV_POSITION;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos=v.vertex;
o.pos.xyz += v.normal*0.03;
o.pos=UnityObjectToClipPos(o.pos);
return o;
}
float4 frag(v2f i):Color
{
return float4(1,1,1,1);
}
ENDCG
}
pass
{
Cull Back
Lighting On
Material{ Diffuse(1,1,1,1) }
}
}
}