一、介绍Fog

Fog,即雾化。本质是离屏幕越远的物体,就越趋向某种颜色。通常是远处,即离屏幕远的地方,趋向于白色或浅灰色。

二、Unity 灯光的Fog选项

1. Color

雾的颜色

2. Mode
  • 线性(Linear):

    其中dmax和dmin分别表示受雾影响的起点和终点。

  • 一次指数(Exponential):

    d表示雾的浓度,e=2.7182818

  • 二次指数(Exponential Squared):

    d表示雾的浓度,e=2.7182818

从图像上可以看出二次指数的上升速度是最快的,其次是一次指数,最后是线性。体现在Fog上,就是二次指数变化的更快一些。

三、 自定义Shader实现Fog

Unity Lighting中设置的是全局雾效,如果我们只想要其中几个物体具有雾效,就需要自己写shader了。
自定义shader实现雾化效果(线性)

Shader "Hidden/Fog"
{Properties{_MainTex ("Texture", 2D) = "white" {}_FogStart("Fog StartPos", Float) = 1.0_FogEnd("Fog EndPos", Float) = 100.0_FogColor("Fog Color", Color) = (1,0,0,1)}SubShader{// No culling or depthCull Off ZWrite Off ZTest AlwaysPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;float2 uv : TEXCOORD0;};struct v2f{float2 uv : TEXCOORD0;float4 vertex : SV_POSITION;float fogData : TEXCOORD1;};float _FogStart;float _FogEnd;fixed4 _FogColor;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);o.uv = v.uv;// 计算物体到相机的距离。UnityObjectToViewPos:顶点到相机位置的向量;length():求向量的长度float z = length(UnityObjectToViewPos(v.vertex).xyz);// 计算雾化系数o.fogData = (_FogEnd - z)/(_FogEnd - _FogStart);return o;}sampler2D _MainTex;fixed4 frag (v2f i) : SV_Target{fixed4 col = tex2D(_MainTex, i.uv);// 插值得到雾化后的颜色return lerp(_FogColor,col,i.fogData);return col;}ENDCG}}
}

参考

【Unity Shaders】Unity里的雾效模拟
【风宇冲】Unity3D教程宝典之Shader篇:第十讲 雾化

【Unity Shader】 Fog相关推荐

  1. 【Unity Shader】(六) ------ 复杂的光照(上)

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题.              [Unity Sha ...

  2. 【Unity Shader】用Cubemap实现天空盒和环境映射

    1 关于Cubemap Cubemap在实时渲染中有很多应用,最常见的就是实现天空盒(Skybox)和环境映射(Environment Mapping). 2 实现天空盒 2.1 实现原理 天空盒不陌 ...

  3. 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  4. 【Unity Shader】Unity中利用GrabPass实现玻璃效果

    <入门精要>中模拟玻璃是用了Unity里的一个特殊的Pass来实现的,这个Pass就是GrabPass,比起上一篇博客实现镜子的方法,这个方法我认为相对复杂,因此在实现之前需要对GrabP ...

  5. 【Unity Shader】实现透明度测试和透明度混合

    本篇开始将进行<入门精要>初级篇最后一部分的学习,完成透明效果的学习. 1 Unity中实现透明效果的方法 一个像素的RGBA参数中的最后一项A指的就是透明度Alpha.在之前的实践中,一 ...

  6. 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊

    发现之前学习记录的太过详细,导致整理的过程占用太长的时间了,这篇之后博客重要的是掌握实现过程,关于基础的理论会更多的放上别人写得更好的文章. 参考:[Unity Shader编程]之十五 屏幕高斯模糊 ...

  7. 【Unity Shader】Unity Chan的卡通材质

    写在前面 时隔两个月我终于来更新博客了,之前一直在学东西,做一些项目,感觉没什么可以分享的就一直没写.本来之前打算写云彩渲染或是Compute Shader的,觉得时间比较长所以打算先写个简单的. 今 ...

  8. 【unity shader】高级光照 --- 薄膜干涉

    -光照模型是shader编程的核心与基础. 一般的光照模型–不管是lambert还是phong–其实都是对现实光照的模拟. 但是现实中的光照效果要复杂得多.但就光的反射而言, 薄膜干涉就是一种非常常见 ...

  9. 【Unity Shader】Special Effects(一)UI特效的动画播放器

    更新日期:2021年8月16日. Github源码:[点我获取源码] 索引 [系列简介] [SpecialEffects 模块简介] [UI特效的动画播放器] 下载SpecialEffects模块 使 ...

最新文章

  1. R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集
  2. 如何构建一个安全的人工智能世界?
  3. Fiddler 抓包高级进阶篇-天罗地网抓包大法
  4. CSP认证201712-1 最小差值[C++题解]:遍历
  5. java学习笔记7--抽象类与抽象方法
  6. java hashmap value_Java HashMap values() 方法
  7. 网络多人游戏架构与编程 电子书_Java互联网架构-高性能网络编程必备技能IO与NIO阻塞分析...
  8. Java高并发编程详解系列-线程池原理自定义线程池
  9. 2019款新iPhone发布时间曝光:依旧9月12日亮相?
  10. google bookmarks的书签分类的技术
  11. Go -- go语言指针
  12. erp系统包括哪些模块
  13. 测试人员如何做好需求分析
  14. 【神经网络解耦】基于matlab的神经网络解耦系统仿真
  15. 支付宝接口调用出现INVALID_PARAMETER错误,订单信息无法识别
  16. Linux线程性能分析和CPU亲和力
  17. tkinter:Toplevel
  18. python获取股票历史数据
  19. Apple Watch已出现在巴黎柯莱特时尚店橱窗
  20. 蓝牙定位技术大全:蓝牙室内定位技术解决方案--新导智能

热门文章

  1. IEC 60601-2-36:2014 Medical electrical equipment - Part 2-36:Particular requirements for the basic
  2. 游戏广告变现指南4-如何衡量广告变现效果
  3. HTML5——新增可拖动
  4. 人性的劣根 — 如何战胜另一个你
  5. [RK3399][Android7.1]修改系统配置同时输出Speaker和USB音频
  6. Eviews简记——时间序列建模
  7. Thinkpad X270上用U深度优盘还原安装win7无法启动
  8. 出现ClassNotFoundException问题
  9. 浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析
  10. VS2003版本Json格式文件的解析