Unity 后处理(Post-Processing) -- (1)概览

news/2024/7/8 1:23:14

        在Unity中,后处理(Post-Processing)是在相机所捕捉的图像上应用一些特殊效果的过程,后处理会让图像视觉效果更好(前提是做的好)。

        这些效果的范围有非常细微的颜色调整,也包括整体的美术风格的大修,可以让场景看起来更加真实或风格化,或者只是变得更好看。

         本专题所使用的案例资源包在这里下载:

https://connect-prd-cdn.unity.com/20230208/02f068b4-43ff-4008-96e5-ef1d41135fe5/CreativeCore_Postprocessing_2021.3LTS.zip

        下载后解压缩,然后用Unity Hub打开这个本地工程,打开本地工程的方法参考:

        Project setup processes - Unity Le​​​​​​arn 

什么是后处理?

        我们都会用手机拍照,但很多时候我们拍的原始的相片都打不到我们想要的效果。比如照片可能亮度不够,颜色不饱和或者对比度不好等。对于这种情况,我们可以在照片拍出来后对其进行调整,让照片看起来更加好看,这个过程就是后处理。

        来看一个例子,原图如下:

        下面的图片是对其加了不同滤镜后的效果:

         在Unity中,我们也可以做类似的处理。在相机将图像渲染出来后,我们可以进行更多处理来让图像变得更好看。

评估视觉风格(Visual Style)和视觉保真度(Visual Fidelity)

        我们进行后处理有两个主要的原因:达成想要的视觉风格以及确保视觉保真度。

视觉风格

        视觉风格是指项目所呈现的风格化的观感。

        下面有两种不同视觉风格的例子,观察这两个场景并试着回答如下问题:

  •         你会如何描述这两个场景的视觉风格?
  •         为了达成场景的视觉风格,你认为这两个场景的图像进行了哪些编辑(后处理)?

        以下信息仅供参考:

  •         第一副图是暗黑未来风格。为了达成这种风格,画面颜色比较暗,场景是朦胧的,但也有非常明亮闪烁的灯光。
  •         第二幅图是轻快明亮的卡通风格。为了达成这种风格,所有颜色都很生动,背景做了模糊化处理。

视觉保真度

        视觉保真度是指场景对它所想要表现的世界的还原有多精准。如果使用物理世界中的相机和Unity中的虚拟相机,要想捕捉到环境的优美之处,是比较困难的。

        这样说可能有点抽象,我们以拍照片为例。我们应该都碰到过这种情况,到一个风景如画的地方旅游时,我们掏出手机拍了一张照片,但拍出来的照片和我们看到的景色有差距。要么由于相机设置问题导致画面看起来太亮或太暗,要么相机的颜色还原不够精准导致画面不够鲜明。有些问题可以通过后处理来修正。

        以下是一个场景在进行后处理前后的对比图,尝试回答以下问题:

  •         这两幅图有什么特别不同之处?
  •         这个不同之处是如何改进视觉保真的?

        以下信息仅供参考:

  •         右图颜色更加生动(对比观察棚屋的橙色)。场景的部分区域亮度变得较小,这样就能让我们看清楚黄色沙滩和云的形状。
  •         在真实世界中,我们的眼睛会自动适应强光,使得我们能够看到细节。右图更加接近于人眼对这个场景的感知。        

后处理和性能之间的平衡

        视觉风格和保真度都很重要,但通过后处理方式来达成这两个目标并非免费的午餐。由于这些图片是实时地被渲染和处理,每种添加的效果都会对处理器造成性能影响。虽然理想情况下,我们恨不得把所有可用的效果都加上,但我们必须在性能和视觉效果上进行权衡。

打开后处理工程项目并运行

        1. 在Unity Editor中,项目窗口中找到并打开Scenes目录下的TutorialScene_PostProcessing。

        2. 点击运行,然后用W、A、S、D键在场景中进行移动,看看效果。

在一个全局Volume上启用后处理

        前面提到说,后处理是在一个相机已经抓到的图像上进行处理。这意味着后处理可以按照每个相机为基础来进行应用。我们先确保Main Camera启用后处理。

        1. 在Hierarchy窗口中选择Main Camera,然后在其Inspector面板里的Camera组件中,选择Rendering折叠菜单里的Post Processing复选框,启用后处理。

        为了实际应用这些新的效果,我们需要添加一个叫做体积(Volume)的东西到场景中。一个Volume指定了场景中的某个特定区域。当相机处于这个Volume中时,后处理会影响到相机渲染的画面。 

        2. 在Hierarchy中,点击右键,选择Volume->Global Volume,将这个游戏物体重命名为更加形象的名字比如“PostProcessing Global Volume”。

        目前还没有发生任何事情。这是因为我们还需要应用一个后处理配置文件(post-processing Profile)到Volume里。这个Profile定义了有哪些效果要应用到Volume里。后面我们会从零开始创建这个Profile,目前我们使用官方教程中的示例Profile即可。

        3. 在Volume组件中,使用物体选择器选择PostProcessingProfile_Sample文件。

        当选完这个文件后,看看场景是否有发生较大的变化。

简单了解一下后处理Profile

         以下两张图是未使用后处理和使用了后处理之后的效果对比图,观察并回答以下问题:

  •         这两幅图具体差异是什么?
  •         这些差异对整体视觉风格有什么影响?

        以下信息仅供参考:

        当后处理启用时:

  •                 角落中红色和浅蓝色盒子看起来在发光。
  •                 所有阴影都更暗了,和环境其他部分形成了更强的对比。
  •                 所有颜色都更加鲜艳了。

        这个后处理Profile给场景一种更加有趣和卡通化的风格。这和下图中的波普艺术的效果是类似的。

关于后处理的一点提示信息

        由于后处理应用于已经被渲染好的一副图像上,它要求光照、材质或相机要按照一定方式来创建,以便允许产生特定的效果。

        举例来说,如果一个材质并没有事先被设置为发光(使用发光材质),我们不可能通过后处理来让它有发光的效果。

探索:试着玩一下后处理Profile

        我们会注意到,当我们为Volume组件选择了示例Profile之后,有一些新的模块出现在了它的下方。

        我们首先可以尝试对所勾选的一些模块进行不勾选和勾选,对比一下效果。

        然后尝试调整一下每个模块中的各个子属性,看看效果。

        关于这些模块的详细说明,如果想深入了解,可以参考一下官方文档:

        Effect List | Universal RP | 7.1.8


http://lihuaxi.xjx100.cn/news/1082194.html

相关文章

VS Code C++ 输出窗口中文乱码问题解决

VS Code C 输出窗口中文乱码问题解决 系统cmd终端乱码 的情况:原因解决方法:(仅针对cmd终端输出的情况)方法一:更改代码文件的编码方法二 :更改cmd默认终端的编码方式 系统cmd终端乱码 的情况: …

开心消消乐

给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1,矩阵示例如: 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0,规则如下: 当点击一个 1 时,该 1 被反转为 0&am…

《使用深度神经网络对光电容积脉搏图进行归一化,以进行个体和群体比较》阅读笔记

目录 一、论文摘要 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一…

C#基础 (类型转换_隐式转换)

什么是类型转换 类型转换就是不同变量类型之间的相互转换 隐式转换的基本规则——>不同类型之间自动转换 大范围装小范围 相同大类型之间的转换 有符号 long——>int——>short——>sbyte 可以用大范围装小范围的类型(隐式转换) 不能够用小范…

【三十天精通Vue 3】第二十一天 Vue 3的安全性详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 中的安全问题1.1 前端安全问题概述1.2 Vue 3 中的安…

javascript中find(), filter(), some(), every(), map()等方法介绍

1、find() find() 用于找出第一个符合条件的数组成员。它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该成员。如果没有符合条件的成员,则返回undefined。 find()方法的回调…

代码随想录_回溯_leetcode 491 46

leetcode 491. 递增子序列 491. 递增子序列 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以…

算法记录 | Day45 动态规划

70.爬楼梯 (进阶) 改为:一步一个台阶,两个台阶,三个台阶,…,直到 m个台阶。问有多少种不同的方法可以爬到楼顶呢? 1阶,2阶,… m阶就是物品,楼顶…