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 四 没有声明…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
【VLNs篇】07:NavRL—在动态环境中学习安全飞行
项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战,克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
