Unity Shader-小肥猪轻功(径向模糊)
发表于2020-07-22
我们经常可以看到游戏赛车游戏里面,当向前加速的时候,四周空气模糊,并且气流向四周扩散,有种空气被排开的感觉。
还有就是《天涯明月刀》在做轻功的时候,也是那么一种效果。
没错,那个就是用到了径向模糊。
今天我就做个,小肥猪轻功,先上效果图:
原理其实是这样的:
你看画面,空气是围绕着中间散开的,想到啥图形可以表现这种效果吗,
Bingou,那就是圆。
所以,我们只要定个焦点(或者中心点_FocusPos),然后其他图像上的点,对应算下向量,即:
Dir =FocusPos - CurPos;
(CurPos为当前的点, 对应shader函数frag里面,就是i.uv.xy)
然后沿着这些方向Dir,隔一段距离取几个像素,混合起来,就可以看起来像是有径向模糊的效果了:
到这里就好了吗,不是的,很多网上的文章大概就写到这里,但是其实效果没有那么好,因为焦点上的东西,一定程度上也会被模糊掉了,所以这时候,我们焦点附近的,我们就要少一点模糊。这时候我们我们就要用上我们伟大的step函数了:
OK,判断了是否大于一定距离的,我们就把上面col * isFarAway,就少采样,少模糊了。
对了,对了,如果你追求性能极致,然后当你使用该方法调出效果后,你可以把for循环改掉,直接硬编码会更快~
--End--