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


    一,Post Processing介绍

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

    Post Processing: 官方文档

    官方介绍效果展示:
    在这里插入图片描述

    使用后处理的效果:


    二,正常项目配置

    2.1 场景配置

    1. 下载Post Processing:在菜单栏找到Window -> Package Manager -> Post Processing:在这里插入图片描述

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

    3. 点击Porfile后面的New创建一个配置文件:
      在这里插入图片描述

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

    5. 点选All使用全部效果,并拖拽Instensity值查看效果,此时发现场景中并未发生改变。
      在这里插入图片描述

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

    7. 在场景中创建了一个Cube,看下效果:
      请添加图片描述


    2.2 集成步骤小结

    1. 下载【PostProcessing】插件
    2. 创建空物体,并添加【Post Process Volume】组件,勾选【isGlobal】
    3. 创建【Profile】配置文件,并赋值给2步中Volume组件
    4. 为2步骤中创建的空物体设置Layer层
    5. 选中主摄像机,添加【Post Process Layer】组件,并在组件上选择刚刚创建的层

    使用情况:通常我们在Camera上挂上一个Post Process Layer脚本用来控制后期效果。也可以挂载到空物体上,通过设置Trigger设置Camera来对相机起作用。Layer用来管理Post Process Volume
    在这里插入图片描述


    三,URP项目配置

    3.1 具体配置步骤

    1. 下载Universal RP 插件:

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

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

    4. 在Hierarchy界面,创建Global Volume:在这里插入图片描述

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

    6. 开启摄像机的Post Processing选项:
      在这里插入图片描述


    3.2 最终实现效果


    四,代码控制

    4.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);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    4.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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
  • 相关阅读:
    Spring Boot 如何配置 CORS 支持
    Python---类的定义和使用语法
    Python下非阻塞式读取键盘输入
    Javascript 中的堆、栈、引用和值指南
    计算机毕业设计node.js+Vue+Element驾校信息管理系统
    [附源码]SSM计算机毕业设计医院仪器设备管理系统JAVA
    Linux系统通过console口连接交换机
    影视解说短视频如何入门?先学会配音和选片,打好基础是关键
    icon免费网址
    在Windows中自动压缩备份文件和目录的脚本
  • 原文地址:https://blog.csdn.net/Czhenya/article/details/128191205