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 四 没有声明…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
