ShaderOne的体积雾
ShaderOne 是Unity商店的一个shader资源,作者期望把所有的渲染特性集合到一个shader上去,所以起个名字叫 ShaderOne。
本人其实比较反对这种 All In One 的shader,因为变种实在太多,优化起来比较蛋疼,不过作为一个学习资料还是挺好的。
今天我们来看一下他的 体积雾 的实现,先上截图:
核心代码
说到体积雾,大家的第一个印象就是费。
没错了,指望 ShaderOne 的 体积雾 能在手机上跑得飞起是有点强人所难的,因为计算涉及到 射线步进 和 3d纹理采样。
不过如果射线数设置的不那么高,高端手机还是可以一战的,文章的最后会给出一个测试。
在介绍 体积雾 之前,我们先看一下 ShaderOne 提供的全部雾效类型,应用雾效的入口代码如下:
inline void FogApply ( inout SOLightingData i_sold, in v2f i )
{
#ifdef SO_GD_BASE_PASS
#ifdef SO_GD_FOG_SOLID
FogApplySolid ( i_sold, i );
#endif
#ifdef SO_GD_FOG_VOLUMETRIC
FogApplyVolumetric ( i_sold, i );
#endif
#ifdef SO_GD_FOG_VOLUMETRIC_3D
FogApplyVolumetric3D ( i_sold, i );
#endif
#endif
}
可以看到 ShaderOne 提