一、创建空物体,添加组件:Post-process Volume。

  1. 新建一个profile
  2. Add effect添加需要的效果。
  3. 将这个对象的Layer设置为特定的层,这里我命名为Post-process。

unity后处理没效果 unity后处理插件_配置文件

Volume可以控制具体的效果、作用范围

unity后处理没效果 unity后处理插件_配置文件_02

为Volume设置Layer、触发的范围

  • 局部效果需要再添加一个3D collider,比如Box Collider。当Camera进入Collider,便可以看到添加的画面效果。

二、在Camera上添加组件:Post-process Layer

  1. 设置trigger。点后面的This按钮即可。
  2. 设置Layer,设置为Post-process

unity后处理没效果 unity后处理插件_游戏引擎_03

  • Trigger:设置某个对象的 Transform 用作特效的触发器。
  • 这个 Transform 控制混合功能,Unity 默认将 Camera 分配给Trigger。也可以使用其他游戏对象来控制混合功能。
  • 例如,在一个top-down game中,或许用玩家角色 GameObject 来驱动混合更加合适,而不是相机 Transform。
  • 当此字段设置为 None 时,将禁用该层的局部Volume(全局Volume正常工作)。
  • Layer:这里Layer不是指要对哪些层进行渲染,而是选择volume所在的Layer,只有这些Layer上的Volume的效果会被渲染。
  •  top-down Game :Eastward

 一些Effect:

unity后处理没效果 unity后处理插件_unity_04

unity后处理没效果 unity后处理插件_unity_05

unity后处理没效果 unity后处理插件_游戏引擎_06

unity后处理没效果 unity后处理插件_ide_07

调色相关——Color Grading 的一些功能:

原始画面: 

unity后处理没效果 unity后处理插件_unity_08

 更高饱和度: Hue Vs Sat

unity后处理没效果 unity后处理插件_unity_09

改变色相:Hue Vs Hue

unity后处理没效果 unity后处理插件_游戏引擎_10

去色/保留:Hue Vs Sat

unity后处理没效果 unity后处理插件_unity_11

颜色替换 

用于颜色替换的初始图片:


unity后处理没效果 unity后处理插件_ide_12

look up texture - 查找纹理 (LUT) 

  1. 在Ps里,将画面调色至满意的效果
  2. 将应用的效果叠加在这张初始LUT
  3. 保存修改后的LUT,放进Unity中。
  4. 将Lookup Texture指定为该LUT,即可对画面进行颜色替换。

unity后处理没效果 unity后处理插件_配置文件_13

  

代码部分: 

using UnityEngine.Rendering.PostProcessing;

创建新Volume:

[
 public PostProcessVolume QuickVolume(int layer, float priority, params PostProcessEffectSettings[] settings)
 ]

示例:动态创建一个Bloom。并在Update中控制其亮度变化。

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class Test : MonoBehaviour
{
    PostProcessVolume m_Volume;
    Bloom m_bloom;
    float startValue = 12.68f;

    void Start()
    {
        // Create an instance of a Bloom
        m_bloom = ScriptableObject.CreateInstance<Bloom>();
        m_bloom.enabled.Override(true);
        m_bloom.intensity.Override(startValue);
        // Use the QuickVolume method to create a volume with a priority of 100, and assign the bloom to this volume
        m_Volume = PostProcessManager.instance.QuickVolume(gameObject.layer, 100f, m_bloom);
    }
    void Update()
    {
        // Change intensity using a sinus curve
        m_bloom.intensity.value = startValue + Mathf.Sin(Time.realtimeSinceStartup)*6f;
    }
    void OnDestroy()
    {
        RuntimeUtilities.DestroyVolume(m_Volume, true);
    }
}

这段代码创建一个新的Bloom效果并将其分配给新生成的Volume。然后,在每一帧改变泛光的强度。为避免内存泄漏,请在不再需要时销毁Volume和附加的Profile。

配置文件编辑

您也可以手动编辑一个或多个Volume使用的现有配置文件(profile)。为此,您可以使用PostProcessVolume. 每个字段的效果略有不同:

  • 直接修改shared profile:
  • 类字段名称:sharedProfile
  • 将会更改应用到使用相同配置文件的所有Volume
  • 修改了asset——退出播放模式时不会重置
  • 请求一个shared profile的克隆,仅用于此Volume:
  • 类字段名称:profile
  • 将更改应用到指定的Volume
  • 退出播放模式时重置
  • 当您不再需要配置文件时,您必须手动销毁它

PostProcessProfile包含以下实用方法:

实用方法

描述

T AddSettings()

为profile创建、添加且返回一个T类型的新effect。如果已经存在则抛出异常

PostProcessEffectSettings AddSettings(PostProcessEffectSettings effect)

将您创建的effect添加到profile,并返回该effect。

void RemoveSettings()

从profile中删除effect。如果不存在则抛出异常。

bool TryGetSettings(out T outSetting)

从profile中获取effect。如果找到profile,则返回 true,反之返回 false

/PostProcessing/Runtime/PostProcessProfile.cs您可以在源文件中找到更多方法。

重要提示:必须销毁任何手动创建的 profile 或 effect 。

补充说明

如果需要在运行中实例化PostProcessLayer,必须将PostProcessResources文件绑定到它。

AddComponent之后,调用PostProcessLayer 的Init(),将PostProcessResources


unity后处理没效果 unity后处理插件_unity后处理没效果_14

Resource在哪里?在PostProcessLayer脚本的导入设置中,点击这一栏即可定位到它!

例:

var postProcessLayer = gameObject.AddComponent<PostProcessLayer>();
postProcessLayer.Init(resources);