双面渲染:
两个Pass,1.一个渲染正面,2.一个渲染背面
Pass{
Cull Back //关闭背面渲染(就是渲染正面)
。。。巴拉巴拉。。。
}
pass{
Cull front //关闭正面渲染(就是渲染背面)
。。。巴拉巴拉。。。
}
透明渲染:
透明度测试:
《unityshader入门精要》8.3
1.声明一个阈值,2.设置标签,3.在片元着色器中使用Clip函数
Properties {
_Cutoff ("Alpha Cutoff", Range(0, 1)) = 0.5
。。。巴拉巴拉。。。
}
SubShader {
Tags { "Queue"="AlphaTest" //设置渲染队列为透明度测试
"IgnoreProjector"="True" //不受到投影器(Project)的影响
"RenderType"="TransparentCutout" //把shader提前归入到组
}
Pass {
。。。巴拉巴拉。。。
fixed4 frag(v2f i) : SV_Target {
clip (texColor.a - _Cutoff);
。。。巴拉巴拉。。。
}
}
透明度混合:
《unityshader入门精要》8.4
1.声明一个控制透明的属性,2.添加标签,3.关闭深度写入,设置混合模式,4.设置透明通道返回值,
5.如果有自身遮挡,就多加一个Pass用来开启深度写入
Properties {
_AlphaScale ("Alpha Scale", Range(0, 1)) = 1
。。。巴拉巴拉。。。
}
SubShader {
Tags {"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
}
Pass{ ZWrite On //开启深度写入
ColorMask 0 //颜色遮罩,不输出颜色(RGBA0)
}
Pass {
Tags { "LightMode"="ForwardBase" }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
。。。巴拉巴拉。。。
fixed4 frag(v2f i) : SV_Target {
。。。巴拉巴拉。。。
return fixed4(ambient + diffuse, texColor.a * _AlphaScale);
}
}