在3D游戏中,地图上的各种物件会对模型照成遮挡。主要是在主角上 体验很不好。让被遮挡的部分有个透明边框显示出来,是个比较好的解决方案。
思路:要分成两个PASS来做,1个就是画出透明边框,另一个是正常的显示纹理。透明边框的PASS需要把在被遮挡时显示,这里需要对深度测试和深度写入做操作。当没被遮挡到时则正常显示模型。
上节做完边缘泛光刚好可以用上,稍微改造下就可以被边缘显示出来。
看图:
成品效果:
ZTest 默认是LEqual的 则是相对于摄像机在越靠前的物体优先渲染。则后面的物体会被前面的物体遮挡。而我们需要相反,半透明边框是要在被遮挡住的时候才被渲染,所以使用了Greater。
ZWrite 默认是 On 则默认做深度的写入,这里同理也要关掉。
代码:
Shader "JackyShader/maskShader"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_maskColor("MaskColor",Color) = (0,1,0)
}
SubShader
{
Tags { "RenderType"="Transparent" "Queue" = "Transp