【Unity Shader】 Fog
一、介绍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相关推荐
- 【Unity Shader】(六) ------ 复杂的光照(上)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- 【Unity Shader】用Cubemap实现天空盒和环境映射
1 关于Cubemap Cubemap在实时渲染中有很多应用,最常见的就是实现天空盒(Skybox)和环境映射(Environment Mapping). 2 实现天空盒 2.1 实现原理 天空盒不陌 ...
- 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 【Unity Shader】Unity中利用GrabPass实现玻璃效果
<入门精要>中模拟玻璃是用了Unity里的一个特殊的Pass来实现的,这个Pass就是GrabPass,比起上一篇博客实现镜子的方法,这个方法我认为相对复杂,因此在实现之前需要对GrabP ...
- 【Unity Shader】实现透明度测试和透明度混合
本篇开始将进行<入门精要>初级篇最后一部分的学习,完成透明效果的学习. 1 Unity中实现透明效果的方法 一个像素的RGBA参数中的最后一项A指的就是透明度Alpha.在之前的实践中,一 ...
- 【Unity Shader】屏幕后处理3.0:均值模糊和高斯模糊
发现之前学习记录的太过详细,导致整理的过程占用太长的时间了,这篇之后博客重要的是掌握实现过程,关于基础的理论会更多的放上别人写得更好的文章. 参考:[Unity Shader编程]之十五 屏幕高斯模糊 ...
- 【Unity Shader】Unity Chan的卡通材质
写在前面 时隔两个月我终于来更新博客了,之前一直在学东西,做一些项目,感觉没什么可以分享的就一直没写.本来之前打算写云彩渲染或是Compute Shader的,觉得时间比较长所以打算先写个简单的. 今 ...
- 【unity shader】高级光照 --- 薄膜干涉
-光照模型是shader编程的核心与基础. 一般的光照模型–不管是lambert还是phong–其实都是对现实光照的模拟. 但是现实中的光照效果要复杂得多.但就光的反射而言, 薄膜干涉就是一种非常常见 ...
- 【Unity Shader】Special Effects(一)UI特效的动画播放器
更新日期:2021年8月16日. Github源码:[点我获取源码] 索引 [系列简介] [SpecialEffects 模块简介] [UI特效的动画播放器] 下载SpecialEffects模块 使 ...
最新文章
- R语言使用compareGroups包绘制分组患者基线信息表实战:基于survival包lung数据集
- 如何构建一个安全的人工智能世界?
- Fiddler 抓包高级进阶篇-天罗地网抓包大法
- CSP认证201712-1	最小差值[C++题解]:遍历
- java学习笔记7--抽象类与抽象方法
- java hashmap value_Java HashMap values() 方法
- 网络多人游戏架构与编程 电子书_Java互联网架构-高性能网络编程必备技能IO与NIO阻塞分析...
- Java高并发编程详解系列-线程池原理自定义线程池
- 2019款新iPhone发布时间曝光:依旧9月12日亮相?
- google bookmarks的书签分类的技术
- Go -- go语言指针
- erp系统包括哪些模块
- 测试人员如何做好需求分析
- 【神经网络解耦】基于matlab的神经网络解耦系统仿真
- 支付宝接口调用出现INVALID_PARAMETER错误,订单信息无法识别
- Linux线程性能分析和CPU亲和力
- tkinter:Toplevel
- python获取股票历史数据
- Apple Watch已出现在巴黎柯莱特时尚店橱窗
- 蓝牙定位技术大全:蓝牙室内定位技术解决方案--新导智能
热门文章
- IEC 60601-2-36:2014 Medical electrical equipment - Part 2-36:Particular requirements for the basic
- 游戏广告变现指南4-如何衡量广告变现效果
- HTML5——新增可拖动
- 人性的劣根 — 如何战胜另一个你
- [RK3399][Android7.1]修改系统配置同时输出Speaker和USB音频
- Eviews简记——时间序列建模
- Thinkpad X270上用U深度优盘还原安装win7无法启动
- 出现ClassNotFoundException问题
- 浅谈安科瑞电力智能运维在高速铁路电力系统的应用分析
- VS2003版本Json格式文件的解析