写点什么

Unity 之 Post Processing 后处理不同项目配置(UPR 项目配置)

作者:陈言必行
  • 2023-04-15
    辽宁
  • 本文字数:1914 字

    阅读完需:约 6 分钟

Unity 之 Post Processing后处理不同项目配置(UPR项目配置)

一,Post Processing 介绍

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

Post Processing: 官方文档

官方介绍效果展示:


使用后处理的效果:



二,正常项目配置

2.1 场景配置

  1. 下载 Post Processing:在菜单栏找到Window -> Package Manager -> Post Processing:


  1. 创建空物体命名为PostProcess,新建并设置 Layer:PP;为其添加组件Post-process Volume,添加后勾选Is Global 将其设置为全局。


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


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


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


请继续往下看 ↓↓↓


2.2 摄像机配置

将主摄像机的 Layer 也设置为:PP。然后添加Post-process Layer,也将面板上的 Layer 设置为 PP


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



2.3 集成步骤小结

  1. 下载【PostProcessing】插件

  2. 创建空物体,并添加【Post Process Volume】组件,勾选【isGlobal】

  3. 创建【Profile】配置文件,并赋值给 2 步中 Volume 组件

  4. 为 2 步骤中创建的空物体设置 Layer 层

  5. 选中主摄像机,添加【Post Process Layer】组件,并在组件上选择刚刚创建的层


三,UPR 项目配置

3.1 具体配置步骤

  1. 下载 Universal RP 插件:


  1. 创建渲染管线配置文件


  1. 将 2 步骤创建的配置,设置到 Project Setting -> Graphics -> Scriptable Render Pipeline Settings:


  1. 在 Hierarchy 界面,创建 Global Volume:


  1. 设置 Volume 的 Profile,点击右侧的 New 新创建一个配置文件,并为其赋值


  1. 开启摄像机的 Post Processing 选项:



3.2 最终实现效果



三,代码控制

3.1 代码获取组件

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


using UnityEngine;using UnityEngine.Rendering.PostProcessing;
public class PostProcessingProfile : MonoBehaviour{        // 后处理的配置容器    private PostProcessVolume _volume;    // 根据Inspector面板上的组件创建对应类型变量    private Vignette _vignette;        void Start()    {        // 获取容器        _volume = GetComponent<PostProcessVolume>();        // 获取此容器下添加的组件        _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);        }    }}
复制代码



3.2 代码创建组件

使用代码动态创建组件

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>();        _vignette.enabled.Override(true);                // 创建组件        _colorGrading = ScriptableObject.CreateInstance<ColorGrading>();        _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);    }}
复制代码


发布于: 2023-04-15阅读数: 18
用户头像

陈言必行

关注

公号:开发同学留步 2019-03-12 加入

我是一个从事Unity游戏开发攻城狮,InfoQ&阿里云签约博主,CSDN博客专家,U3D论坛版主,6年开发经验,助你日常不加班。⽂章皆为从零到⼀的⼊⻔级教程,也有很多⼯作中遇到的问题解析。

评论

发布
暂无评论
Unity 之 Post Processing后处理不同项目配置(UPR项目配置)_Unity_陈言必行_InfoQ写作社区