Unity中的后期处理:PostProcessing

“想要实现这个效果,让我们来编写一个Shader。。”
“Shader???”
相信绝大多数开发者都有看过那些炫酷的效果而跃跃欲试却又对Shader代码望而却步的经历,新版本的unity新增的PostProcessing组件,让许多人看到了希望,虽然效果数量有限,却对于开发来说有很大的收益。

安装PostProcessing

PostProcessing是unity内置的后期效果增强组件,可以在极短的时间内得到各种常用特效的效果,对于编写Shader的苦手(比如在下)来说,确实是个天大的福音了。第一次接触PostProcessing与实际开发中,效果确实惊艳到了,之后PostProcessing就成了游戏开发的必备组件==。PostProcessing可以在资源包管理器中直接安装得到。

01

新工程请在All中找到PostProcessing并点击右上角的install即可,我的已经安装完毕,所以界面有些不同,如果版本不一致没有资源包的话可以访问PostProcessing的Github页面: PostProcessing 按照说明将PostProcessing拖入工程文件夹就可以用了。附上官方效果对比:

使用前
使用后

这么看效果还是很明显的。虽然效果是在大型项目展示的,但是PostProcessing完全可以用在小型项目中构建各种各样出色的效果。

使用PostProcessing

  • PostProcessing Layer

首先我们需要在相机中添加一个Post-process Layer组件来渲染相机图像。

Post-process Layer

Trigger触发器默认是相机本身,如果有需要可以设置为其他物体,如挂载到角色上面,可以实现进入特定区域触发特效,这个后面再说。Layer是一个很重要也很容易忽略的角色,必须保证postprocessing volume所处层级与此项相同,一般来说建议设置专用层以提高渲染性能。其次的抗锯齿 延迟雾效等等看项目情况调整即可。

  • PostProcessing volume

postprocessingVolume

Volume分为全局和局部两种实现方式,全局只需选中Is Global选项。局部需要挂载Collider3D组(记得选中Is Trigger)件并取消Is Global选项,当PostProcessing Layer中的触发器(Trigger)进入Collider中就能看到效果了,可以实现洞穴等场景的变换特效。(切记把挂载PostProcessing Volume组件的物体Layer设置为PostProcessing Layer中的对应Layer)

Blend Distance用来实现特效的渐弱,使特效自然渐进的出场或退场。Weight影响权重,0完全不起作用,1效果全开。效果会在多个volume混合时根据这几个属性数值进行叠加。

profile就是特效的配置文件了,点击new即可创建新的特效配置,之后点击Add effect->Unity即可看到PostProcessing提供的11中特效。直接点击就可以再面板中看到相应的特效,展开即可进行编辑。

effect

All生效所有属性,None禁用所有属性,也可以只用其中的某些属性,选中相应的属性栏就可以了。
下面简单说一说这些特效,如果用到某个特效再细细分析。

Post-process特效

  • Ambient Occlusion 环境光遮罩:用来使像是世界中难以照射到光线的角落,交叉点等地方变暗。
  • Anti aliasing:抗锯齿:抗锯齿功能提供的算法可以是锯齿感明显的边缘更加平滑,虽然锯齿感减少,却会使物体变得模糊。
  • Auto Exposure 自动曝光:模拟人眼适应各种黑暗与光亮的效果,比如从黑暗的隧道出来时,人眼会有短暂时间的炫目。
  • Bloom 辉光:最常用的Post-process特效之一,效果和他的名字一样,提供图像从明亮边缘扩散的效果,Dirtiness可以模拟污渍和灰尘来衍生Bloom特效,在FPS游戏中常见这类效果。

screenshot-bloom

属性 功能
Intensity 辉光的强度
Threshold 过滤掉小于此光照强度的像素点,注: 该值以伽马空间表示
Soft Knee 在低于/高于阈值的渐变(0 =硬阈值,1 =软阈值)之间进行转换
Clamp 限制辉光像素的数量,该值以伽马空间表示
Diffusion 以与屏幕分辨率无关的方式改变遮蔽效果的程度
Anamorphic Ratio 通过垂直(在范围[-1,0]中)或水平(在范围[0,1]中)缩放辉光来模拟变形镜头的效果
Color 辉光的色调
Fast Mode 通过降低效果质量来提升表现
Texture 模拟污垢为镜片添加污迹或灰尘
Intensity 镜头污渍的数量
  • Chromatic Aberration 色差:在边界产生一些颜色条纹,模拟相机镜头为颜色没有汇聚的缺陷行为来增加艺术性的效果,可以用来模拟中毒特效。

screenshot-chroma

  • Color Grading 颜色分级:另一个经常用到的特效,用于校正镜头中的颜色与亮度,来实现电影或海报效果,可以理解为手机中的何种滤镜。需要一定的专业基础才能玩转,但是通过调整Tonemapping(色调映射)的mod可以快速实现一些效果。

screenshot-grading

  • Deferred Fog 延时雾效:雾是根据与相机的距离将颜色叠加到对象上的效果。 这用于模拟室外环境中的雾或雾,并且通常还用于在摄像机的远剪裁平面向前移动以提高性能时隐藏对象的剪裁。

screenshot-fog

  • Depth of Field 景深:常用特效之一,模拟相机镜头的对焦效果而产生模糊感。模糊不仅给出了关于物体距离的视觉提示,而且还引入了散景,这是令人愉悦的视觉伪像。

screenshot-dof

属性 功能
Focus Distance 对焦距离
Aperture 孔径比(称为f-stop或f-number)。值越小,景深越浅
Focal Length 镜头和胶片之间的距离。 值越大,景深越浅
Max Blur Size 散景滤镜的卷积核大小,决定散景的最大半径
  • Grain 颗粒效果:模拟老电影屏幕上的颗粒感,用于模拟老式显像设备。
  • Lens Distortion 镜头失真:此效果通过扭曲或不失真最终渲染图片来模拟镜头的形状。
  • screenshot-distortion

  • Motion Blur 运动模糊:“运动模糊”是一种常见的后处理效果,可以模拟当相机拍摄的对象移动得比相机的曝光时间快时图像的模糊。运动模糊用于在大多数类型的游戏中产生微妙的效果,但在一些类型中被夸大,例如赛车游戏。

screenshot-motionblur

  • Screen space Reflections 屏幕空间反射:屏幕空间反射是一种重用屏幕空间数据来计算反射的技术。 它通常用于产生更微妙的反射,例如在潮湿的地板表面或水坑中。

screenshot-ssr

  • Vignette 晕影:在摄影中,晕影是用于与中心相比朝向图像边缘变暗和/或去饱和的术语。经常用于艺术效果,例如将焦点绘制到图像的中心。

screenshot-vignette

以上只是对PostProcessing的一些简介,PostProcessing是个复杂的组件,要想搞清全部特效需要大量的实践与相关的专业知识,对于初学者或想要快速构建游戏效果的人来说,认识PostProcessing特效和添加特效只是最基本的一步。因为调整PostProcessing是个细致且漫长的过程,请务必在游戏开发接近尾声时再斟酌效果,调整参数。