1.在Window窗口中找到Lighting打开Settings
2.找到Fog选择,上图包含了一些设置:雾的颜色,模拟雾采用的方法,雾的浓度(只在采用指数方法时有用),受雾影响的距离起点和终点(只在采用线性方法时有效)。
1)、Linear 即线性可配参数Start、End两个距离,雾效从Start开始越接近End越浓,到达End时达到最大浓度,End之后也为最大浓度
2)、Exponential 指数性可配参数Density,雾的浓度,浓度越大雾越大
3)、Exponential Squared 可配参数Density,越大表示雾越浓
3.当我们开启全局雾效果的时候。3中雾采用的方法,个人觉得Linear (线性)和Exponential这2个效果比较好
利用脚本动态实现雾效果:
主要有以下参数:
--开启雾效
RenderSettings.fog = true;
--雾效颜色
RenderSettings.fogColor = Color.red;
--Linear有效
RenderSettings.fogStartDistance = 1;
RenderSettings.fogEndDistance = 3;
--Exponential Exponential Squared 有效
RenderSettings.fogDensity = 8;
1.首先,我们需要在Properties块中添加雾效的几个设置参数:
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
_Ramp ("Ramp Texture", 2D) = "white" {}
_Tooniness ("Tooniness", Range(0.1,20)) = 4
_Outline ("Outline", Range(0,1)) = 0.1
_FogColor("Fog Color", Color) = (1, 0, 0, 0)
_FogIntensity("Fog Intensity", float) = 0.1
_FogStart("Fog Start", float) = 0
_FogEnd("Fog End", float) = 300
}
2.下面是添加模拟雾效的函数
float4 SimulateFog(float4 pos, float4 col)
{
pos.w = 0.0;
float dist = length(pos);
// float dist = pos.z;
// Linear
// float fogFactor = (_FogEnd - abs(dist)) / (_FogEnd - _FogStart);
// fogFactor = clamp(fogFactor, 0.0, 1.0);
// Exponential
// float fogFactor = exp(-abs(_FogIntensity * dist));
// fogFactor = clamp(fogFactor, 0.0, 1.0);
// Exp2
float fogFactor = exp(-(_FogIntensity * dist) * (_FogIntensity * dist));
fogFactor = clamp(fogFactor, 0.0, 1.0);
float3 afterFog = mix(_FogColor.rgb, col.rgb, fogFactor);
return float4(afterFog, col.a);
}
解释:有了上面的公式,这个函数很好理解。值得说明的是,函数参数pos是指在view space中顶点的位置,因为只有在这个坐标系中,摄像机的位置总是位于原点。在计算距离摄像机远近时,我们有两种可选方式:一种直接使用pos.z得到近似值,一种是使用真正距离摄像机的距离,即计算xyz平方和后开根号的结果。第二种方法由于使用了计算根号这种操作,因此在性能上略微比第一种查一点,但效果也更真实。