Skip to content

About

unity 后处理雾效与体积光

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

🌫️ Unity URP — 深度雾效与体积光

3 个文件 · 三层雾 Screen Blend 叠加 · Raymarch 丁达尔光柱 · 40+ 参数 · 拖入即用

为任意 URP 项目添加距离雾、高度沉积雾、3D 噪波流云和真实体积光效果

深度雾效效果图


📁 文件清单

仅 3 个独立文件,无外部依赖,放入项目即可工作

VolumeFog/
├── DepthFog.shader            HLSL 核心 · 三层雾 + 体积光 Raymarch
├── DepthFogVolume.cs          Volume 面板 · 40+ 可调参数
└── DepthFogFeature.cs         Feature + Pass · URP 入口 + 渲染执行

Textures/
├── Fog3DNoise.asset           Texture3D 噪波贴图(128³,大块云,推荐)
└── BuleNoise64.asset          Texture3D 噪波贴图(64³,轻量版,性能优先)

VolumeFog效果图.png            效果截图
VolumeFog技术文档.md           完整技术文档
README.md                      本文件

🎬 效果概览

四层系统

┌────────────────────────────────────────────┐
│  ③ 噪波流云    3D 纹理掏孔 → 云块感          │
│  ② 高度雾      低洼沉积 → 山谷雾气            │
│  ① 距离雾      Linear / Exp / Exp2 衰减      │
├────────────────────────────────────────────┤
│  三层通过 Screen Blend 物理叠加,互不干扰     │
├────────────────────────────────────────────┤
│  ④ 太阳散射    高光耀斑 + Raymarch 丁达尔     │
│  ⑤ 天空盒接管  无限远天空染上雾色             │
└────────────────────────────────────────────┘

核心技巧

🏷️ 特性 🛠️ 实现 💡 亮点
三层独立叠加 距离雾 / 高度雾 / 噪波雾分别计算 Screen Blend 物理合成,亮度不溢出
Exp² 距离衰减 1 - exp(-(d·ρ)²) 近处通透、远处骤浓,最接近现实
3D 噪波流云 Texture3D 采样 + 湍流域畸变 云块掏孔、随风飘动、距离淡出
体积光 Raymarch 沿视线步进采样阴影贴图 HG 相位函数 + 消光系数,真实丁达尔
蓝噪声 Dither 步进起点打散 消除 Raymarch 条纹 Banding

🚀 使用指南

① 导入文件

将 VolumeFog/ 和 Textures/ 两个文件夹整体拷贝到 Unity 项目的 Assets/ 目录下(最终路径为 Assets/VolumeFog/ + Assets/Textures/)。

② 配置 Renderer Feature

步骤 操作
a 在 Project 中找到 URP Renderer 资产(Assets/Settings/ 下)
b Inspector → Add Renderer Feature → 选 Depth Fog Feature
c 把 DepthFog.shader 拖入 Feature 的 m_FogShader 字段

③ 挂载 Volume

步骤 操作
a Hierarchy 右键 → Volume → Global Volume
b Volume 面板 → Add Override → 搜 Depth Fog Pro
c 勾选 ☑️ isEnabled → 效果即时生效 ✅

④ 配置噪波贴图(可选,云块质感用)

需要"云块掏孔"效果时配置,不需要可跳过:

  1. 将 Textures/ 文件夹放入项目 Assets/ 目录(连同 VolumeFog/)
  2. Volume → Depth Fog Pro 组件 → 找到 ③ 噪波流云 分类
  3. 勾选 useNoise 开关
  4. 把 3D 噪波贴图拖入 noiseTexture 字段(两个可选,见下表)
  5. 调 noiseContrast(拉到 3~5 云块边界更锐利)
贴图 分辨率 大小 特性 适合
Fog3DNoise.asset 128³ 16MB 低频大块噪波 大团云块、推荐首选
BuleNoise64.asset 64³ 2MB 高频均匀噪波 性能敏感场景、移动端

两张 Texture3D 均已随仓库附带,无需自备。64³ 采样更快、内存更小,但云块偏细碎;128³ 云块更大气。

⑤ 关键参数速调

想调出 调整方式
整体雾色 fogColor(建议清晨偏暖/黄昏偏冷,勿纯白)
雾浓不浓 fogDensity(0.05~0.15 最敏感区间)
近景干净 startFogDistance(主角周围起雾距离)
山谷沉积雾 useHeightFog + height + heightPow
云块质感 useNoise + 拖入 Fog3DNoise.asset + noiseContrast(3~5)
丁达尔光柱 useVolumetric + anisotropyG(清晨林间建议 0.75)
📐 展开全部 40+ 参数默认值
# 分类 参数 默认值
0 全局 isEnabled ❌
fogColor 雾底色 (0.5, 0.6, 0.7)
1 距离雾 useDistanceFog ✔️
fogParameter 衰减公式 Exp²
startFogDistance -17
endFogDistance 181.7
fogDensity 浓度 0.098
useRadialDistance ✔️
distanceFogOffset 0.1
2 高度雾 useHeightFog ✔️
height 基准海平面 12
heightPow 爬坡衰减 4
heightDensity 浓度 0.25
3 噪波流云 useNoise ❌
noiseTexture (Texture3D) 空
noiseContrast 对比度 1
noiseIntensity 1
noiseScale 云块大小 (0.3, 0.3, 0.3)
noiseOffset 风速 (0.08, 0.01, 0.08)
noiseDistortionStrength 0.5
noiseDistortionScale (0.1, 0.1, 0.1)
turbulenceSpeed 扰动 (0.016, 0.002, 0.016)
noiseDistanceEnd 86
noiseEndHardness 2.79
4 天空盒 useSkyboxFog ✔️
skyboxFogOffset -0.11
skyboxFogHardness 0.65
skyboxFogIntensity 1
skyboxFill 0
5 太阳体积光 useSunLight ✔️
useSunColor ✔️
sunColor (1, 0.9, 0.7)
sunPower 高光锐度 6
sunIntensity 高光强度 0.5
energyLoss 能量守恒 0
useVolumetric 体积光 ❌
volumetricSteps 步数 12
anisotropyG 各向异性 0.75
scatteringIntensity 散射 1.5
extinction 消光 0.05
volumetricMaxDistance 50

🧩 各文件做什么

📄 文件 🎯 职责 ✏️ 什么时候改
DepthFog.shader GPU 端:三层雾 + 太阳散射 + 体积光 Raymarch 新增/修改雾效算法
DepthFogVolume.cs Volume 面板 40+ 参数定义 新增参数 / 改默认值
DepthFogFeature.cs 内含 DepthFogPass + DepthFogFeature 改执行时机 / 关键字开关

⚙️ 环境

项目 要求
Unity 2022.3 LTS+
管线 Universal Render Pipeline (URP)
平台 全平台(噪波云需 Texture3D 支持)
依赖 深度纹理(Render Feature 自动开启)

❓ 常见问题

Q: 加了 Feature 但画面没变化?

检查:① Volume 的 isEnabled 是否勾选 ② Feature 的 Shader 字段是否拖入 ③ 相机是否允许深度纹理。

Q: 体积光开了很卡?

把 volumetricSteps 从 12 降到 6~8,volumetricMaxDistance 从 50 降到 30。体积光是 4 层里最吃性能的,按需开启。

Q: 噪波云块发马赛克?

调高 noiseDistanceEnd(让噪波在更远处才退化)或 noiseEndHardness。马赛克来自 3D 纹理在远处分辨率不足。

Q: 雾太假没有立体感?

打开 useNoise 掏孔 + 调高 noiseContrast(3~5),让云块边界锐利;再开 useVolumetric 拉丁达尔光柱。

Q: 天空被雾糊死了?

skyboxFill 默认 0 是柔和过渡,拉到 1 才会完全糊死。若已糊死请调低 skyboxFogIntensity。

About

unity 后处理雾效与体积光

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages