unity5.6.x雾的使用

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;



Fog实现的内部原理(针对面试提问)

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平方和后开根号的结果。第二种方法由于使用了计算根号这种操作,因此在性能上略微比第一种查一点,但效果也更真实。





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值