最近帮一个制作独立游戏的朋友做一个shader效果。
对方要求:透明,边缘发光,内部也有散光。可以组合,组合碰撞区域不能有明显的边界。
于是开始编写shader效果。
1.用了传统的视向量和法向量的dot来算。这里有个问题,对于圆这种比较圆润的模型效果不错,但是对于那种有棱有角的东西就显得不好看了。而且如果两个物体,边界的接壤也也会很明显的体现出来。
2.不行啊,于是继续想,用一个pass顶点按照法向量的方向进行探出,然后进行前面剔除,然后用另一个pass正常渲染前面剔除背面,然后来算,但是想了想这样也不行啊,边缘接壤部分无缝对接实现不了啊
3.有大佬提议用CommandBuffer,研究了一下,发现真的也许可行,开始搞,以前没有做过屏幕后处理,七窍通了六窍,一窍不通,搜集了一大堆资料。
1.外部轮廓 :先将需要做处理的物体进行染上纯色,然后进行高斯模糊,接着用高斯模糊后的颜色和最开始的纯色颜色进行想简,得到轮廓。
2.无缝:将CommandBuffer插在所有物体渲染好了之后进行调用。这样缝就没了~
3.内部散光:之前的高斯模糊我们执行了4遍,我们用第4编的效果去减去第3遍的效果。
最后完成:
![](https://img.haomeiwen.com/i15224005/92fa75f8120f7a11.png)
妈耶,本来快做好了,又提出了一大堆要求。描边不能锯齿,描边需要接受深度(也就是被阻挡。)搞完之后的效果。
![](https://img.haomeiwen.com/i15224005/68a956226156f67b.gif)
网友评论