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

一,Post Processing介绍

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

Post Processing: 官方文档

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

使用后处理的效果:
Unity 之 Post Processing后处理不同项目配置(URP项目配置)

二,正常项目配置

2.1 场景配置

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

  2. 创建空物体命名为PostProcess,新建并设置Layer:PP;为其添加组件Post-process Volume,添加后勾选Is Global 将其设置为全局。
    Unity 之 Post Processing后处理不同项目配置(URP项目配置)

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

  4. 添加一个Vignetee边角压暗特效看看效果:
    Unity 之 Post Processing后处理不同项目配置(URP项目配置)

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

  6. 摄像机配置:将主摄像机的Layer也设置为:PP。然后添加Post-process Layer,也将面板上的Layer设置为PP
    Unity 之 Post Processing后处理不同项目配置(URP项目配置)

  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 插件:
    Unity 之 Post Processing后处理不同项目配置(URP项目配置)

  2. 创建渲染管线配置文件Unity 之 Post Processing后处理不同项目配置(URP项目配置)

  3. 将2步骤创建的配置,设置到Project Setting -> Graphics -> Scriptable Render Pipeline Settings:
    Unity 之 Post Processing后处理不同项目配置(URP项目配置)

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

  5. 设置Volume的Profile,点击右侧的New新创建一个配置文件,并为其赋值
    Unity 之 Post Processing后处理不同项目配置(URP项目配置)

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

3.2 最终实现效果

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

四,代码控制

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);
        }
    }
}

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);
    }
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年2月25日 下午8:13
下一篇 2023年2月25日 下午8:14

相关推荐