UnityShader之假体积光

1.什么是体积光?

体积光就是白天在你昏暗的房间里打开窗户,一道光顺着窗口照到你的房间。就像这个样子:

“volume lighting”的图片搜索结果

2.体积光如何实现?

常见的体积光实现方法往往会用到深度缓冲和阴影贴图。

比如我通过基本光照公式计算好场景中的阴影区域,那么我就知道光线可以打到阴影以外的任何位置。由于光线会随着距离不断衰减,那么利用深度缓冲我们就可以让体积光看起来更真实。那么我就可以通过后处理方式在非阴影区域混合一个白雾效果,再利用深度缓冲控制雾的强弱,那么最终效果看起来就是上图那样。

3.假体积光

由于体积光的实现会消耗大量的gpu资源,很多设备无法承受这个开销,特别是手机。所以有人用了一些tricky的手法,用相对简单的计算实现近似的体积光效果。这种方法就叫做假体积光。

下面我提供一个假体积光算法:

把FVLController.cs绑在摄像机上就可以运行了。在运行过程中你会发现一些瑕疵,对这就是假体积光,希望有大神能把近似做成完美。

下面放两张效果图

Leave a Reply

Your email address will not be published. Required fields are marked *