透明度测试得到的效果很极端,要么完全透明,要么完全不透明。得到的效果像是在一个不透明物体上挖了一个洞。而且得到结果的边缘往往参差不齐,会有锯齿。所以一般为了得到更加柔滑的透明效果,就需要使用透明度混合。
透明度测试——双面渲染透明效果
Shader "Test/8-3"{
Properties{
_Color("Color",Color)=(1,1,1,1)
_MainTex("MainTex",2D)="white"{
}
_Cutoff("Alpha Cutoff",Range(0,1))=0.5//调整透明度测试时使用的阈值
}
SubShader{
//设置渲染队列,透明度测试渲染队列是AlphaTest
Tags{
"Queue"="AlphaTest" "IgnoreProjector"="True" "RenderType"="TransparentCutout"}
Pass{
Tags{
"LightMode"="ForwardBase"}
Cull Off //双面透明效果关键代码,关闭剔除功能
CGPROGRAM
#include "Lighting.cginc"
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
sampler2D _MainTex;
float4 _MainTex_ST;
fixed _Cutoff;
struct a2v{
float4 vertex:POSITION;
float3 normal:NORMAL;
float4 texcoord:TEXCOORD0;
};
struct v2f{
float4 pos:SV_POSITION;
float3 worldNormal:TEXCOORD0;
float3 worldPos:TEXCOORD1;
float2 uv:TEXCOORD2;
};
v2f vert(a2v v){
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);
o.worldNormal