unity 相机后期处理

Translation by miccall (转载请注明出处)

导语

俗话说,场景搭的好,50%靠材质,50%靠特效。当然,这是建立在物品摆放+打光基本没问题的基础之上。这篇文章就来讲讲特效这些东西。

Quick Start 快速开始

为了最大限度的发挥效果 ,建议您使用Linear + HDR。虽然他仍然可以在Gamma + LDR中使用,但是效果不会很好。

首先 ,在您导入该资产包后 ,您要向应用后处理的摄像机 添加一个 Post Process Layer 组件

来看一些重要的设置 :

  • Trigger: 在默认情况下,主摄像机将被赋值到这里。这是将驱动音量混合功能 (volume blending feature )的 transform。在某些情况下,您可能需要使用相机以外的transform ,例如,对于 上帝视角 的游戏,您需要 pleyer 角色来驱动动画 而不是相机 。

  • Layer: 要考虑 mask 层的 volume blending 。它允许您进行卷过滤 (volume filtering ),特别适用于优化卷遍历。您应该始终将您的卷放在专用图层中( custom layers),而不是默认的卷,以获得最佳性能。默认情况下,它设置为 Nothing 使用时记得更改它,否则本地卷将不会有任何影响。

  • Anti-aliasing: 设置本相机的抗锯齿方法。

  • Stop NaN Propagation: 将杀死任何无效/ NaN像素,并在应用后处理之前将其替换为黑色。

这个 Rendering Features 部分保留与相机相关的照明效果,如延迟雾(Deferred Fog),环境遮挡(Ambient Occlusion)或屏幕空间反射(Screen-space reflections)。

Post-process Volume 后期处理集

后期处理在此框架中的工作方式是使用本地和全局Volume。它允许您给每个Volume一个优先级和一组效果的覆盖,以自动混合场景中的后处理设置。
例如,您可以在全局设置一个轻微的晕影效果,但是当玩家进入洞穴时,您只会覆盖 intensity 小的设置,使其更强大,同时保持其余的设置不变。

Post Process Volume 组件可以添加到任何游戏对象上,也包括相机本身。但是,通常为每个 Volume 创建一个专用对象。我们从创建一个全局的 Post Process Volume 开始。创建一个空的游戏对象并添加该组件。
不要忘记将相机组件中 Post Process Layer 所使用的图层 设置为 该组件可见的layer层 。

默认情况下它是完全空的。从那里我们可以做两种类型的Volume:

  • Global: 全局卷没有任何边界,他将被应用于整个场景。你当然可以在你的场景中使用其中几个。

  • Local: 本地卷需要一个与之相关联的碰撞器或触发器组件来定义其边界。任何类型的3D碰撞器都可以工作,从立方体到复杂的凸形网格,但是我们建议您尽可能使用简单的碰撞器,因为网格可能花费相当昂贵。本地卷也可以有一个 Blend Distance 属性 ,来表示从混合开始的 volume 表面的 外部距离 。

我们希望使用全局设置 (global volume) , 所以要勾选 Is Global.

Weight 可以用来减少全球设置的占用比重,0没有任何效果到1是全部效果。

Priority 字段定义堆栈中的 volume 顺序。这个数字越高,质量越高。

我们还需要为此卷创建配置文件(或重新使用现有的配置文件)。我们通过点击 New 按钮创建一个。它将创建一个项目中的资产文件。要编辑他的内容,您可以选择此资产,也可以转到volume 检查器面板 ,并将其复制以便于访问。一旦配置文件被分配,您将看到一个新的按钮出现 Clone 。这将复制当前分配的配置文件,并自动将其设置在volume上。当您想要创建相同配置文件的快速变体时,这可以很方便(尽管如果可能,您应该真正使用覆盖系统)。

我们现在可以开始向堆栈添加效果覆盖。

每个字段在其左侧都有一个覆盖复选框,您需要切换要为此卷覆盖的设置,然后才能对其进行编辑。您可以使用左上角的小 AllNone 快捷方式快速切换所有打开或关闭它们。

左上角的 On/Off 切换用于覆盖效果本身的活动状态。

最后,您可以右键单击并执行标题来显示快速菜单。

从那里,您可以开始添加具有各种优先级的本地卷,并将距离与场景混合,并查看所有这些卷自动进行混合。

常见效果预设

1. Anti-Aliasing (抗锯齿)

  • 抗锯齿是用来减少锯齿状的 - 类似阶梯的线应该是平滑的。在游戏渲染中,由于分辨率的问题,渲染就会把巨大的数据减缩到符合分辨率,就会以较少的数据代替,中间部分就会出现的失真现象,类似于锯齿样的效果。

也可以看看英伟达官方的解释 :

http://v.youku.com/4903b4e0-f504-4057-aafd-a14bd4c30489

SSAA (超级采样) 《地铁归来》《最后的曙光》
MSAA (多重采样) 《GTA 5》
CSAA (覆盖采样) 《科南时代》
CFAA (可编程过滤)
FXAA (快速近似) 《刺客信条枭雄》
TXAA (时间)
MFAA (多帧采样)

等。我们推荐使用的下面几种AA

  • 一. FXAA (Fast Approximate Anti-Aliasing)
    快速近似抗锯齿,一个非常高效,质量高 的方法,可以在每个平台上快速运行,完全兼容各种不同的显卡。

  • 二. TAA (Temporal Anti-Aliasing)
    时间抗锯齿,业界说可以达到电影级别的更高质量,但是付出的是的桌面级显卡和控制台平台(不支持移动平台) 《巫师3》(xbox版)

英伟达官方给出了一个使用效果的4K截图的对比图 点击进入

  • 三. SMAA (Subpixel Morphological Anti-Aliasing)
    子像素形态学反锯齿 , 效果好,仅次于TXAA,资源占用低,速度快,性价比高. 《看门狗》

2. Ambient Occlusion(环境光遮蔽)

  • 环境光遮蔽,增加光源照射在表面上增加阴影感,可以解决或改善漏光、飘和阴影不实等问题,让物体更加立体。在现实生活中,这些区域往往会阻挡或遮挡环境光,因此它们显得更暗。如果不使用AO,物体看起来会较为平面不真实。

  • 要注意的是,这种效果可能相当消耗资源,特别是当物体非常接近相机时。 因此,建议始终启用 Downsampling,有利于低半径设置。网上给出测评,降低了大概4-8个fps 。

  • 当使用延迟渲染路径时,可以将环境遮挡直接渲染到环境G缓冲区,以便在照明通过期间由Unity考虑。这时要注意,设置要求相机启用HDR。

  • 当使用前向渲染路径时,可能会遇到深度信息精度方面的一些质量问题。您可以通过切换 High Precision 来克服这些问题,但只有在实际需要时才能实现,因为它会降低性能。

3. Screen Space Reflection (屏幕空间反射)

  • 这个特效是给场景的物体添加反射,用特效取代实际的渲染,而获得廉价但是效果十分不错的反射效果。目前有非常高的性能代价,并且有一些质量问题。SSR需要使用延迟渲染路径。

4. Depth of Field 景深

该效果模拟相机镜头的属性。 在现实生活中,相机只能在特定的距离处锐化对象物体 (俗称焦距); 距离相机更近或更远的物体将会有点偏离焦点,变得模糊。 景深模糊的效果不仅给出了物体距离的视觉提示,还引入了散景。
Kernel Size 指定散景滤波器的卷积核大小,他确定一个最大散景半径,也会影响性能(内核越大,需要GPU时间越长)。

5. Motion Blur(运动模糊)

这个效果模拟了一个事实,即大多数相机系统的光线随着时间的推移而累积(而不是仅仅取出离散的快照)。因此,快速的相机或物体运动将产生模糊的图像。

一般来说,您只能使用 Shutter Speed Simulation 快门速度模拟 设置。 多框架混合 Multiple Frame Blending 可以像老式运动模糊效果那样进行帧累积,主要用于赛车游戏或“醉酒效果”中的高速效果。 两个功能可以同时激活。

Sample Count 会对性能产生负面影响。
Shutter Speed Simulation 在移动平台上不可用。

6.Eye Adaptation 眼适应

该效果根据其包含的亮度范围来动态地调整图像的曝光。调整在一段时间内逐渐进行,所以当黑暗的隧道出现时,玩家可以被明亮的户外灯轻轻地炫耀。同样地,当从明亮的场景移动到黑暗的场景时,“眼睛”需要一些时间来调整。

在内部,这种效果在每个帧上产生直方图,并对其进行滤波以找到平均亮度值。

这些Histogram Log Min/Max 值用于以日志单位设置可用的直方图范围。范围越大,其精度越低。默认值在大多数情况下应该正常工作,但是如果您使用的是非常黑暗的场景,则可能需要将这两个值都放在更暗的区域上。

使用Filter范围来排除图像中最暗和最亮的部分。为了计算平均亮度,您通常不希望非常暗和非常亮的像素对结果贡献太多。价值以百分比表示。

Min/Max Luminance 值将计算出的平均亮度钳制到给定的范围内。

调整Exposure Compensation(也称为Key Value)调整亮度偏移。

您还可以设置Adaptation Type到Fixed,如果你不需要眼睛适应效果,它会像自动曝光设置。

此效果需要计算着色器支持。

使用眼睛适应调试视图更容易调整。

video

7.Bloom
是来自亮源(如闪光)的光似乎泄漏到周围物体中的光学效应。这是一个非常独特的效果,可以对场景产生很大的影响,可能会建议一个神奇或梦幻般的环境,特别是与HDR渲染结合使用时。另一方面,给定适当的设置,也可以使用这种效果来增强照片写实感。在非常明亮的物体上发光是在电影和摄影中观察到的常见现象,其中亮度值差异很大。

使用适当暴露的HDR场景,Threshold应设置为~1只将具有值的像素1泄漏到周围的对象中。在LDR中工作时,您可能希望删除此值,否则效果将不可见。

Anti Flicker通过预先在图像上运行附加的滤镜来减少闪烁的噪音。这将影响性能,并且在启用时间抗锯齿时应禁用此功能。

您还可以添加一个Dirt Texture模拟脏镜头效果并影响光线如何衍射。你会发现一组样品透镜污垢纹理/PostProcessing/Textures/Lens Dirt/。

这种效果在LDR中起作用,但是要获得良好,平滑和大的半径模糊,您需要确保使用HDR相机。强烈建议使用线性色彩空间,以获得良好的效果。

8.Color Grading

这种效果提供了基于行业标准和电影业知名软件的完全实时HDR色彩分级管道。内部处理在ACES色彩空间中完成,以获得最佳效果。

几种效果模式选用 :
None : 不做任何效果调整,应在LDR工作时使用。
Neutral : 仅对范围重新映射,对色彩和饱和度的影响最小,通常是广泛的颜色分级的一个很好的起点。
Filmic (ACES) : 使用参考ACES输出设备变换曲线的近似来获得更多的电影外观。 因此,它比Neutral更加对比,并且对实际的色彩和饱和度有影响

大多数其他设置是一目了然的的和艺术家调制的。 轨迹球(Trackballs )通常在具有HDR数据的日志中工作得更好,但线性控制也易于使用,因为它们倾向于在LDR中做出更好的反应。

提示:您可以右键点击轨迹球重设。

除了标准的R,G,B和亮度(Y)曲线,您还可以访问一组Versus曲线(二次色彩校正工具)
Hue VS Hue 根据输出色调(Y轴)移动输入色调(X轴)
Hue VS Sat 根据输入色调(X轴)调整饱和度(Y轴)
Sat VS Sat 根据输入饱和度(X轴)调整饱和度(Y轴)。
Lum VS Sat 根据输入亮度(X轴)调整饱和度(Y轴)

以下是曲线编辑器的快速备忘录:
[Del] or [Backspace] 删除所选的键。
[Ctrl] 断开 a tangent handle.
[Shift] 对齐 tangent handles.
[Double click] 在鼠标位置创建一个关键曲线。
[Alt] + [Double click] 在给定的时间在曲线上创建一个键。


9.User Lut

Lut代表查找纹理。这是在后期效果中执行颜色分级的优化方法。将使用原始图像颜色作为用于寻址查找纹理的向量来执行查找。

使用此效果可以让您在Photoshop,Gimp,Paint.NET 或任何其他图形编辑程序中进行所有颜色调整,并将结果应用于Unity非常简单。

例子:

- 拍摄您的游戏的屏幕截图(在Play 模式),并将其导入到您的图形编辑程序(PhotoShop 或者其他 )。
- 应用所需的所有颜色调整。 记住,每个像素的颜色不能依赖于其他像素(例如,模糊或锐化将不起作用)。
- 一旦你对结果满意,在你的图形编辑程序中打开一个中性Lut的副本。
- 执行与Lut的屏幕截图相同的调整步骤,或者如果您使用调整层以非破坏性的方式进行复制。
- 保存Lut并将其放入配置文件中的Lut字段。

根据您需要的精度和目标平台(优选移动设备上的较小尺寸),可以使用/ PostProcessing / Textures / LUT中的中性线。
这种效应在色调映射后应用于LDR。

10.Chromatic Aberration

滤镜模拟屏幕边缘和拐角处的快速折射色差。看起来很酷,不应该过度使用。

如果光谱纹理 ( Spectral Texture ) 未设置,则会自动为您生成。一组采样光谱纹理可用于/ PostProcessing / Textures / Spectral LUTs /。它们是用于定制色差颜色的查找纹理。
性能取决于强度值 Intensity (越高,渲染速度越慢,因为需要更多样品来渲染平滑色差)。

11.Grain

这种效果为渲染添加了一层薄薄的纹理,以模拟“电影”噪音。
您可以使用亮度贡献(Luminance Contribution)来控制基于场景亮度的噪声响应曲线。如果您不需要彩色噪音,您可以取消选中Colored ,因为它会使效果更快。


12.vignette

此效果会在图像的边缘和角落引入变暗。这通常用于通过相机镜头模拟视图,但也可用于创建抽象效果。
如果您需要标准的镜头式小插件,请使用Round 模式。Classic 和 Masked 是针对更多的艺术晕影。
请注意,应用Vignette之前确保 tonemapping开启 。


13.Debug Views

在配置文件检查器的顶部有一个调试视图的折叠,这些允许调试特定效果和像深度,法线,运动矢量(Depth, Normals, Motion Vectors)等各种传递。

14.Monitors

为了帮助艺术家控制场景的整体外观和风格,配置文件带有一套行业标准的显示器。 您可以在inspector的预览区域找到它们。 与inspector 中的任何其他预览区域一样,您可以通过点击它来显示/隐藏它,并通过右键单击它的标题将其取消停靠。

每个显示器可以在play模式下启用,通过点击标题栏中的play 图标进行实时更新。 请注意,这可能会极大地影响编辑器中场景的性能,因此请谨慎使用。

此功能仅在 compute-shader enabled 的平台上可用


15.Histogram

一个标准的gamma直方图,类似于普通图形编辑软件中的一个。 直方图说明了通过绘制每个颜色强度级别的像素数量来分析图像中的像素。 它可以帮助您确定图像是否正确曝光。


16.Waveform

该显示器在渲染中显示亮度信息的全部范围。 图的横轴对应于渲染(从左到右),垂直轴是亮度。 您可以将其视为改进的直方图,每个图像的一列垂直直方图。


17.Parade

游行监视器类似于波形,它只能将图像分成红色,绿色和蓝色。

例如,如果在一个特定通道中存在明显的偏移,并确保镜头中的对象和元素应该是黑色,或者白色是真正的黑色或真正的白色,那么在查看图像中的整体RGB平衡是有用的。 真正的黑色,白色(或灰色的东西)将在所有渠道中具有相同的价值。


18.Vectorscope

该显示器测量图像中的色调(标记为黄色,红色,品红色,蓝色,青色和绿色)和饱和度的整体范围。 测量是相对于范围的中心。

帧中更饱和的颜色使图形的这些部分朝向边缘延伸,而较少饱和的颜色保持更接近于表示绝对零饱和度的矢量图的中心。 通过判断“矢量图”图形中有多少部分以不同的角度出现,您可以看到图像中有多少色调。 此外,通过判断“矢量图”中间相对于绝对中心的中心位置,您可以了解图像中是否存在颜色不平衡。 如果“矢量图”图形偏离中心,则倾斜的方向可以让您知道渲染中有一个色调(色调)。

注意 :
以下功能不能在VR中使用
Temporal Anti-aliasing
Motion Blur
Screen Space Reflections
由于Uber着色器中的关键字组合数量,较慢的计算机上的“第一次构建”时间可能需要长达15分钟。