后期处理是指在摄影机绘制场景之后但在屏幕上渲染场景之前出现的全屏图像处理效果的通用术语。后期处理可以大大提高产品的视觉效果,只需很少的设置时间。
Post Processing: 官方文档
官方介绍效果展示:

使用后处理的效果:

下载Post Processing:在菜单栏找到Window -> Package Manager -> Post Processing:
创建空物体命名为PostProcess,新建并设置Layer:PP;为其添加组件Post-process Volume,添加后勾选Is Global 将其设置为全局。

点击Porfile后面的New创建一个配置文件:

添加一个Vignetee边角压暗特效看看效果:

点选All使用全部效果,并拖拽Instensity值查看效果,此时发现场景中并未发生改变。

请继续往下看 ↓↓↓
将主摄像机的Layer也设置为:PP。然后添加Post-process Layer,也将面板上的Layer设置为PP

在场景中创建了一个Cube,看下效果:

下载Universal RP 插件:

创建渲染管线配置文件
将2步骤创建的配置,设置到Project Setting -> Graphics -> Scriptable Render Pipeline Settings:

在Hierarchy界面,创建Global Volume:
设置Volume的Profile,点击右侧的New新创建一个配置文件,并为其赋值

开启摄像机的Post Processing选项:


以获取边角压暗效果组件为例:

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;public class PostProcessingProfile : MonoBehaviour
{ // 后处理的配置容器private PostProcessVolume _volume;// 根据Inspector面板上的组件创建对应类型变量private Vignette _vignette;void Start(){// 获取容器_volume = GetComponent();// 获取此容器下添加的组件_volume.profile.TryGetSettings(out _vignette);}void Update(){if (Input.GetKeyDown(KeyCode.A)){_vignette.intensity.Override(1);}if (Input.GetKeyDown(KeyCode.S)){_vignette.intensity.Override(0);}}
}
使用代码动态创建组件
using System;
using UnityEngine;
using UnityEngine.Rendering.PostProcessing;public class PostProcessingProfile : MonoBehaviour
{// 后处理的配置容器private PostProcessVolume _volume;// 根据Inspector面板上的组件创建对应类型变量private Vignette _vignette;private ColorGrading _colorGrading;void Start(){// 创建效果组件 _vignette = ScriptableObject.CreateInstance();_vignette.enabled.Override(true);// 创建组件_colorGrading = ScriptableObject.CreateInstance();_colorGrading.enabled.Override(true);// 创建容器// 容器放置层, 容器优先级, 容器的效果列表_volume = PostProcessManager.instance.QuickVolume(gameObject.layer, 1, _vignette, _colorGrading);}void Update(){if (Input.GetKeyDown(KeyCode.A)){_vignette.intensity.Override(1);}if (Input.GetKeyDown(KeyCode.S)){_vignette.intensity.Override(0);}}private void OnDestroy(){// _volume:销毁指定容器, 销毁附加的配置文件, 效果游戏对象RuntimeUtilities.DestroyVolume(_volume, true, true);}
}
下一篇:嵌入式编程别忽略了C语言的标准