unity光源自带的Halo效果

时间:2024-04-05 11:49:39

之前看过一个用来实现光晕效果的shader,但是这个shader似乎只适用于球状物,对于非球状物就不是很友好。效果如图1、图2所示。
unity光源自带的Halo效果
图1 用shader实现的光晕效果
unity光源自带的Halo效果
图2 光晕shader对非球状物体很不友好

今天发现unity中的光源居然自带halo效果(版本是2019.1.4f1),在inspector面板勾选Draw Halo即可,用它就可以来模拟光晕,效果还不错。如图3所示。

unity光源自带的Halo效果
图3 用Draw Halo来实现光晕效果

搭配standard shader中的emission,感觉贼好用。(如图4的不明物体所示)

unity光源自带的Halo效果
图4 Draw Halo和Emission配合使用的某不明物体

之前用的那个shader的实现原理似乎只是将纹理沿着模型方向伸展,然后再用一个类似于高光反射模型计算一下,得到的光晕并不是真正的光,所以暂时无法实现光照之间的交互(如阴影、反光等等)。这个halo就不一样了,由于它是跟光源捆绑在一起的,所以一般光源能实现的光照交互它基本上都有!如图5所示的反射效果。

unity光源自带的Halo效果
图5 看左边球体上的红色反光!

当然这个halo也不是没有缺点,比如说在模拟非球形的光晕时还是略僵硬。如图6所示。

unity光源自带的Halo效果
图6 用Draw Halo模拟非球状物体的光晕

图6中cube的scale分别是1、1、1,point light的range是2,必须要把point light的range拉得很大才会稍微好一点,比如说把它改为8。如图7所示。

unity光源自带的Halo效果
图7 将point light的range增加到8后的光晕效果(这光晕也太大了。。。)

以及我在思考,如果想给长条状物体加上一层光晕该怎么办。
虽然这种歪门邪道有这样那样的不足,但是,总之还算是给光晕特效的实现提供了一种除shader以外的新思路吧。