![c6692a753f6dddbb107eba6472ae323c.png](https://i-blog.csdnimg.cn/blog_migrate/7d90da7f09b242206fc105d873d41c71.jpeg)
首先看一下最终实现的效果:
![b75735a6c7ec40ff7d799050780cb548.gif](https://i-blog.csdnimg.cn/blog_migrate/f0b512b3e0fe7290e4e97ba91669cb66.gif)
遮挡高亮是一种游戏很常见的效果,在被其他物体遮挡了之后,还能显示出角色的位置,还可以用来标记墙后面敌人的位置。
![7c1d7cc3016254a152e217f9d83f9adf.png](https://i-blog.csdnimg.cn/blog_migrate/86edeb37aa7d973abe789fc4360d5452.jpeg)
![a1823ba0a85b1d8dbde4b7ea65f5d0d0.png](https://i-blog.csdnimg.cn/blog_migrate/b8bc4b729788b7bcfe70d60a34e67bdc.jpeg)
我们来解析一下这个效果,首先我们需要一个单独的Pass来处理被遮挡的效果,这个Pass核心要点就是使用ZTest Greater,默认的ZTest 是LEqual(小于等于)则写入深度缓存,现在则变成了离的远的才会写入,就可以显示被遮挡的物体了。然后另一个Pass用来直接渲染我们的物体,可以为他加上光照等等的效果,我们下面来实现这个效果。
1 Setup
首先我们简单设置一下场景,新建shader和材质,新建一个胶囊体和一个立方体,把胶囊体插入到立方体的内部,有这么一个遮挡关系就行了。
![2896bef8aea04ba0e4af5ece9ca00e51.png](https://i-blog.csdnimg.cn/blog_migrate/b9b93ce53b49c7df8d17b7c10ed59d45.png)
2 Shader
首先我们将原始的Pass复制一次,还需要注意Pass的顺序,第一个Pass才是遮挡的效果
首先新建一个变量来控制遮挡的颜色
_OcclusionColor ("OcclusionColor", Color) = (1, 1, 0, 0)
</