Unity全局雾效

1、全局雾效是什么

全局雾效(Global Fog)是一种视觉效果,用于在3D场景中模拟大气中的雾气对远处物体的遮挡

它通过在场景中加入雾的效果,使得距离摄像机较远的物体看起来逐渐被雾气覆盖,从而创造出一种朦胧、模糊的视觉效果。

Unity当中本身就存在一个全局雾效功能,可以在Window--->Rendering--->Lighting窗口中的Environment 环境页签中进行开启

其中,雾的计算模式有三种,它们分别是

  • Linear(线性)

Linear(线性)计算公式:f = (end - |d|) / (end -- start)

d代表里摄像机的距离

start代表雾开始的距离(可控)

end代表雾最强时的距离(可控)

这里的距离都是相对于摄像机的

  • Exponential(指数)

Exponential(指数)计算公式:f = 1 -- e^(−density∗|d|)

d代表里摄像机的距离

e是自然对数的底约等于2.71828;

density代表雾的浓度(可控)

这里的距离都是相对于摄像机的

  • Exponential Squared(指数的平方)

Exponential Squared(指数的平方)的计算公式:f = 1 -- e^(−(density−|d|)²)

它们都是用来计算雾的混合因子 f 的,有了混合因子,会用雾的颜色和物体本来的颜色进行混合计算:最终的颜色 = (1-f)* 物体的颜色 + f * 雾的颜色
也就是说得到的混合因子越大,雾的颜色占比越大,表现效果就是雾越浓
混合因子越小,物体本来的颜色占比越大,表现效果就是雾越淡

Unity自带的全局雾效的实现原理,是场景上每个物体进行渲染时,根据物体与摄像机的距离计算雾的影响,并将雾的效果直接应用到物体的材质上 (具体如何计算,取决你选择的计算模式)

需要注意的是:
如果想要让物体响应Unity自带的全局雾效,我们需要在对应物体的Shader中加入相关的CG代码。

关键的几句CG代码是(创建顶点片元着色器时自带):

  1. 编译指令 #pragma multi_compile_fog
  2. 内置文件 #include "UnityCG.cginc"
  3. v2f结构体中加入用于计算雾效坐标信息(通常是计算深度信息)的宏 UNITY_FOG_COORDS(数字),后面的数字和阴影中的宏一样,前面有几个纹理坐标语义,这里就写几
  4. 顶点着色器中加入用于计算雾效数据的宏 UNITY_TRANSFER_FOG( v2f结构体, v2f结构体.顶点 );
  5. 片元着色器中加入用于应用雾效的宏 UNITY_APPLY_FOG(v2f结构体.fogCoord, 颜色);
相关推荐
yi碗汤园1 分钟前
C#实现对UI元素的拖拽
开发语言·ui·unity·c#
jtymyxmz23 分钟前
《Unity Shader》11.3.2 广告牌技术
unity·游戏引擎
jtymyxmz2 小时前
《Unity Shader》11.3.1 流动的河流
unity·游戏引擎
jtymyxmz5 小时前
《Unity Shader》11.3.1 续 流动的水流的阴影
unity·游戏引擎
世洋Blog5 小时前
Unity性能优化-2d游戏的DrawCall
游戏·unity·面试·性能优化·游戏引擎
jtymyxmz5 小时前
《Unity Shader》11.2.2 滚动的背景
unity·游戏引擎
Tatalaluola5 小时前
Unity使用EPPlus读取写入表格
unity·c#·游戏引擎·excel
呆呆敲代码的小Y5 小时前
【Unity 实用工具篇】 | Unity中的软遮罩组件 SoftMaskForUGUI 快速上手使用
游戏·unity·游戏引擎·免费游戏·遮罩·软遮罩·softmask
B0URNE15 小时前
【Unity基础详解】(11)Unity核心:输入系统
unity·游戏引擎
世洋Blog17 小时前
Unity开发微信小游戏-减少WASM包体大小
unity·游戏引擎·wasm·微信小游戏