Unity 后处理(Post-Processing) -- (2)创建后处理配置文件
通过前面一小节,我们初步认识了后处理是什么,在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件(post-processing profile)。
一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配置。后处理配置文件对于项目整体的视觉风格和感觉有着非常大的影响。我们来看一个实际的例子感受一下后处理的威力。

选择一种视觉风格
在添加任何视觉效果到场景前,请先选择一种你想要实现的视觉风格。看看以下几种不同视觉风格类型的例子,尝试解读以下每张图是哪些东西造就了整体美术风格。
例如,对于“老西部片”例子:
- 整个场景是棕色调
- 图片有颗粒质感
- 阴影非常暗,阴影区域内的细节很难看清
老西部片(Old western)

类似于1966年电影《The Good, the Bad, and the Ugly 》
明快色彩(Bright and colorful)

类似于2003年电影《Finding Nemo》
反乌托邦绿(Dystopian green)

类似于1999年电影《The Matrix》
暗黑(Dark and gritty)

类似于2013年电影《Man of Steel》
选择一种美术风格
以上四种风格,请任意选择一种作为你想做出来的效果。如果以上几种风格没有一种符合你的胃口,你也可以尝试自行选择其他类型的风格。
创建一个新的后处理配置文件
1. 在Hierarchy中选中Postprocessing Global Volume物体,在其Inspector面板的Volume组件中,选择New来创建一个新的profile。

这会自动创建并分配一个新的空白profile,重置场景的外观为默认状态。

2. 在Volume组件中,点击profile的名字,在Project窗口中会自动定位并高亮出这个文件。

3. 重命名这个文件,命名方式自定,建议取名为类似“PostProcessing - bright and colorful” 的方式。然后将它移动到有意义的目录中,比如Settings目录。
增加辉光(Bloom)效果
Bloom是什么?
Bloom是后处理效果中最流行的一种,无论我们选择哪种视觉风格,它都可以起到帮助。
在真实世界中,当相机拍摄到一些非常明亮的灯光时,会呈现出一种光源周围出现闪亮的效果。


在Uniyt中,Bloom效果会模拟这种行为,可以传达出光源非常明亮的信息。
添加Bloom到场景中
1. 在Hierarchy中选中Global Volume物体(名字为PostProcessing Global Volume或者是你自定义的名字,后文中统一用Global Volume物体代替)
2. 在其Inspector中的Volume组件里,选择Add Override,然后选择Post-processing -> Bloom。
“Override”的意思是我们的选择会覆盖(改变)当前场景的渲染方式。选择后,会出现一个新的Bloom组件,下面带有一些属性,这些属性默认是禁用的。

3. 启用Threshold和Intensity属性,然后将Intensity值增加到1.0。我们会看到场景里会有闪光的效果出现,主要是红色的盒子,浅蓝色盒子以及在深蓝色盒子后的亮点处。

我们可以尝试勾选Bloom组件名字旁边的复选框来启用和禁用Bloom效果做对比。
4. 我们可以尝试进一步调整一下Bloom组件的其他属性来对比看看效果。关于Bloom的详细描述,可以参考这里:
Bloom | Universal RP | 7.1.8https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/post-processing-bloom.html
应用色调映射(Tonemapping)
色调映射对于让我们的场景在屏幕上看起来达到最佳效果来说,是一个非常重要的特性。要搞清楚色调映射之前,我们先要理解HDR是什么。
关于色调映射,也可以看看这篇文章:
色调映射(Tone Mapping)_沧海一升的博客-CSDN博客色调映射(Tone Mapping),即压缩其动态范围至输出设备的动态范围以下,使高动态范围HDR图像能够适应低动态范围LDR显示器。https://blog.csdn.net/qq_21842097/article/details/121035017
HDR是什么?
HDR是高动态范围(High Dynamic Range)的缩写,如果它被启用,则在场景中会有更宽的亮度值(brightness or luminosity)。
举例来说,在普通的LDR(Low Dynamic Range)情况下,假设我们可能展示出的最大亮度值是1.0。但使用HDR的情况下,我们可以展示出的最大亮度值是1.5(或更高)。

没有HDR的话,高于LDR最大亮度值的时候,显示出来的效果都是一样的(超过最大值1.0)。

实际上,是HDR让Bloom效果生效了,因为HDR能够处理对于普通范围来说的“过于明亮”的光。

显示HDR的问题
尽管我们能够将我们场景中的一个物体的亮度调成和太阳一样明亮,但有个问题,普通的屏幕根本没有能力显示出这种亮度。
因此,当有限制的屏幕硬件尝试去呈现出非常明亮的物体时,它会到达屏幕亮度的物理极限,整块区域会变得发白,将其中的细节全部都丢掉了。

这看起来并不理想,并且它也并非是我们在真实生活中所感知的样子。这时我们就需要色调映射了。
什么是色调映射
色调映射将哪些极端的亮度值重新映射到了一个较低的值,这样会让原本被丢失的细节恢复出来。

我们可以从上面的对比图看出色调映射恢复了多少细节。
如果以上的所有东西对你来说有点混乱,没关系。最重要的事情是我们要知道,如果我们正在使用HDR,特别是如果正在使用Bloom的话,我们要应用色调映射来确保超级明亮的地方看起来仍然还OK。
将Tonemapping添加到场景中
1. 在Hierarchy中选中Global Volume物体。
2. 在Volume组件的底部,选择Add Override,然后选择Post-Processing -> Tonemapping(也可以在选择Add Override之后, 通过搜索框搜索)。
3. 在新建的Tonemapping组件中,启用Mode属性,在下拉框中选择Neutral或ACES(觉得哪种好看就选哪种)。

Neutral和ACES(Academy Color Encoding System)只是两种不同的执行色调映射操作的方法,它们的效果略有不同。我们可以从场景中的红色盒子的效果看出,ACES在本场景中效果更佳。
我们来看一个简化版的Neutra
l和ACES效果对比图。

做一些校色处理(Color Grading)
什么是校色(Color Grading)?
校色是为了达成一种视觉效果,调整场景里的颜色的过程,对于项目的整体视觉感知有重大影响。
根据环境中的颜色的亮度和范围不同,我们的项目可以传达出恐怖、科幻、艺术或儿童向的氛围。
在传媒行业中,有一些专职人员(比如调色师),他们的全部工作就是校色。接下来我们所接触的只是这个非常复杂的艺术和科学的毛皮,但我们可以从中学到Unity中这项工作大概会如何进行。
添加Color Grading到场景中
1. 在Volume组件中,添加Color Adjustments模块。关于这个模块的详细说明,可以参考这里:
https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/Post-Processing-Color-Adjustments.html#:~:text=To%20add%20Color%20Adjustments%20to,any%20Camera%20this%20Volume%20affects.
2. 使用Color Adjustments属性,尝试调整到你想要实现的效果。
以下是一些小的指导,可能会起到点帮助。
Bright and colorful

- 增加对比度(contrast)和饱和度(saturation)
- Neutrual色调映射
Old western

- 增加曝光(exposure)
- 减少对比(contrast)和饱和度(saturation)
- 增加一个黄色滤镜(yellow color filter)
- Neutral色调映射
Dystopian green

- 降低饱和度(saturation)
- 增加一个绿色滤镜(green color filter)
- ACES色调映射
- 增加Bloom
Dark and gritty

- 增加对比度(contrast)
- 增加一个蓝色滤镜(blue color filter)
- ACES色调映射
3. 在Volume组件中,增加Lift,Gamma,Gain模块,然后通过它们下方的复选框启用它们。

这个东西叫做三向颜色校准器(three-way color corrector):
- Lift - 场景中的暗色调
- Gamma - 中间色调
- Gain - 明亮高光
4. 尝试调整一下每个滑动条看看效果。

在上面的例子中,Lift(暗色调)被降低,使得阴影更加黑暗和戏剧化,Gamma被提高,因此画面不会太暗。
大部分情况下,基本的Color Adjustments已经足够了,但如果我们想要精确地呈现出脑海中的样子,三向颜色校准会非常有用。
如果可以,你还可以尝试一下其它和颜色相关的效果,比如:
white balance
White Balance | Universal RP | 7.1.8https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/Post-Processing-White-Balance.html split toning
Split Toning | Universal RP | 7.1.8https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/Post-Processing-Split-Toning.html color curves
Color Curves | Universal RP | 7.1.8https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/Post-Processing-Color-Curves.html
尝试看看其他的后处理效果
接下来我们来看看另外一些比较有用的效果,完整的列表和说明,请参考官方文档:
Effect List | Universal RP | 7.1.8https://docs.unity3d.com/Packages/com.unity.render-pipelines.universal@7.1/manual/EffectList.html
景深(Depth of Field)
Depth of Field会让特定距离的物体保持清晰,更远或更近的物体模糊。这个效果对性能影响较大,需要谨慎使用。

胶片颗粒(Film Grain)
胶片颗粒模仿了老电影中看到的颗粒感。这个效果能够让画面看起来有年代感。

渐晕(晕映,Vignette)
渐晕效果模拟出了真实镜头下图像外边界的晕影效果。这个效果也可以用来让某个东西看起来比较古老,或者让观看者目光聚焦在屏幕中央。

还有其他一些效果比如Lens Distortion(透镜畸变),Motion Blur(运动模糊),Chromatic Abberation(色差)等。感兴趣的都可以去试试看。
相关文章:
Unity 后处理(Post-Processing) -- (2)创建后处理配置文件
通过前面一小节,我们初步认识了后处理是什么,在Unity中简单的试了试后处理的效果。本节我们来创建一个我们自己的后处理配置文件(post-processing profile)。 一个后处理配置文件包含了一系列为了达到特定视觉效果的后处理效果的配…...
BI 商业智能和报表,傻傻分不清楚?一文给你讲透
我们经常所听到的大数据、商业智能BI、数据分析、数据挖掘等我们都统称为数据信息化。数据信息化可以帮助企业全面的了解企业的经营管理,从经验驱动到数据驱动,降低情绪、心理等主观影响,形成以数据为基础的业务决策支撑,提高决策…...
CSS布局基础(传统布局小结)
传统布局小结 传统布局方式标准流浮动流定位伪类元素CSS应用对象应用到自身应用到其他元素 传统布局方式 传统布局采用 标准流 浮动流 定位的方式实现布局效果,也就是通常所说的 DIV CSS 布局。 标准流 标准流中的元素在 页面默认的 维度,块级元素…...
【五一创作】Qt quick基础1(包含基本元素Text Image Rectangle的使用)
Qt quick基础1(包含基本元素Text Image Rectangle的使用) 目录 Qt quick基础1(包含基本元素Text Image Rectangle的使用)前言qt中有直接设计ui的拖拽式的widget,为什么还需要Qtquick?QML语言Qt 版本创建一个Qt quick项…...
LVS+Keepalived 高可用群集部署
一、LVSKeepalived 高可用群集 在这个高度信息化的 IT 时代,企业的生产系统、业务运营、销售和支持,以及日常管理等环节越来越依赖于计算机信息和服务,对高可用(HA)技术的应用需求不断提高,以便提供持续的…...
小黑子—Java从入门到入土过程:第八章
Java零基础入门8.0 Java系列第八章1. 双列集合 Map1.1 Map 集合中常见的API1.2 Map 集合的遍历方式1.2 - I 第一种遍历方式:键找值KeySet 方法1.2 - II 第二种遍历方式:键值对 entrySet 方法1.2 - III 第三种遍历方式:lambda表达式 1.3 HashM…...
innodb_flush_log_at_trx_commit 和 sync_binlog 参数解析
这两个参数和MySQL的一致性以及性能相关,默认配置大多数情况下不是最优的。一般来说,互联网线上系统的配置: innodb_flush_log_at_trx_commit —— 0 sync_binlog —— 1000 一、innodb_flush_log_at_trx_commit 事务提交刷盘时机 如果我…...
hd debug - DAPLink的资料
文章目录 DAPLink的资料概述笔记库迁出的技巧END DAPLink的资料 概述 查资料时, 看到有DAPLink的资料, 记录一下. 笔记 DAPLink项目分为软件和硬件2部分, 不在一个库中. 总览 : https://daplink.io/ 这个页面上说了软件和硬件项目的库地址. 软件库地址 : https://github.…...
Android adb常用50条命令
1. adb devices - 列出所有连接的 Android 设备及模拟器 2. adb shell - 启动 Android 设备或模拟器的 shell 终端 3. adb install - 安装 APK 文件 4. adb uninstall - 卸载 APK 文件 5. adb logcat - 查看日志输出信息,用于调试应用 6. adb push - 将文件推送到 Andro…...
【无人车】无人驾驶地面车辆避障研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
Visual Studio高效调试手段与调试技巧总结
目录 1、对0xCCCCCCCC、0xCDCDCDCD和0xFEEEFEEE等常见异常值的辨识度 2、在Debug下遇到报错弹框,点击重试,查看函数调用堆栈...
Day37 Map集合
Map集合 Map集合是接口,interface Map <K , V> K:键的类型; V:值的类型 将键映射到值得对象;不能包含重复的键;每个键可以映射到最多一个值。例如:001 令狐冲 ; 002 岳不群 ; …...
是人就能学会的Spring源码教学-Spring的简单使用
是人就能学会的Spring源码教学-Spring的简单使用 Spring的最简单入门使用第一步 创建项目第二步 配置项目第三步 启动项目 Spring的最简单入门使用 各位道友且跟我一道来学习Spring的最简单的入门使用,为了方便和简单,我使用了Spring Boot项目ÿ…...
NOC大赛·核桃编程马拉松赛道知识点大纲(高年级及初中组)
NOC核桃编程马拉松知识点大纲(高年级及初中组) (一)基础语法 1.掌握运动积木的用法。 包括“移动 10 步”、“左/右转 X 度”、“面向 X 方向/鼠标指针/ 角色”、“移到 XY 坐标/鼠标/角色”、“X/Y 坐标的设定和增加”、 “滑行到 XY/鼠标/角色”等积木用法,详细如下。 1…...
第二十六章 Unity碰撞体Collision(上)
在游戏世界中,游戏物体之间的交互都是通过“碰撞接触”来进行交互的。例如,攻击怪物则是主角与怪物的碰撞,触发机关则是主角与机关的碰撞。在DirectX课程中,我们也大致介绍过有关碰撞检测的内容。游戏世界中的3D模型的形状是非常复…...
Qt Installer Framework使用教程:
步骤一: 下载并安装Qt Installer Framework工具 http://download.qt.io/official_releases/qt-installer-framework/ 将安装目录添加到环境变量,如安装D盘时D:\Qt\QtIFW-4.5.0\bin 步骤二: 将测试例子(如D:\Qt\QtIFW-4.5.0\…...
nodejs+vue+java农村信息化服务平台
用户的登录模块:用户登录本系统,对个人的信息等进行查询,操作可使用的功能。 用户注册模块:游客用户可以进行用户注册,系统会反馈是否注册成功。 添加管理员模块:向本系统中添加更多的管理人员,…...
代码随想录补打卡 62不同路径 63 不同路径2
代码如下 func uniquePaths(m int, n int) int { dp : make([][]int,m) //定义一个二维数组 for i : 0 ; i < m ; i { //遍历这个二维数组的每个元素,并将每个元素都定义为一个一维数组 dp[i] make([]int,n) //这样就生成了图中的一个二维网格 dp[i][0] …...
树的存储和遍历
文章目录 6.5 树与森林6.5.1 树的存储结构1. 双亲表示法(顺序存储结构)2 孩子链表表示法3 孩子兄弟表示法(二叉树表示法) 6.5.2 森林与二叉树的转换1 树转换成二叉树2 二叉树转换成树3 森林转换成二叉树4 二叉树转换成森林 6.5.3 树和森林的遍历1. 树的遍历2. 森林的遍历 6.6 赫…...
MySQL的ID用完了,怎么办?
目 录 一 首先首先分情况 二 自增ID 1 mysql 数据库创建一个自增键的表 2 导出表结构 3 重新创建 自增键是4294967295的表 4 查看表结构 5 异常测试 三 填充主键 1 首先创建一个test 表,主键不自增 2 插入主键最大值 3 再次插入主键最大值1 四 没有声明…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
