Post Processing Stack V2 安装和使用02

 

在实际开发中,屏幕后期效果常常需要动态创建,而且参数会随时间变化。下面我就来研究怎么在Post Processing Stack中怎么动态创建后期处理效果。

本文资源可以通过这里链接访问:https://man_man.coding.net/p/PostProcessStackExample/git

1 首先是要在摄像机上创建Post-process Layer组件,和上一篇提到的相同,这里不再赘述。

2 我们提供了一种QuickVolume方法来快速生成场景中的Volumn。

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

前两个参数是不言自明的。最后一个参数是一个数组或一个你想在这个Volumn中覆盖的效果列表。

安装一个新的效果是相当直接的。例如,创建一个Vignette效果,并覆盖它的启用和强度字段。

var vignette = ScriptableObject.CreateInstance<Vignette>();
vignette.enabled.Override(true);
vignette.intensity.Override(1f);

 现在我们来看看一个稍微复杂一点的效果。我们想完全从脚本中创建一个脉动的光斑效果。

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;

public class VignettePulse : MonoBehaviour
{
    PostProcessVolume m_Volume;
    Vignette m_Vignette;

    void Start()
    {
        m_Vignette = ScriptableObject.CreateInstance<Vignette>();
        m_Vignette.enabled.Override(true);
        m_Vignette.intensity.Override(1f);

        m_Volume = PostProcessManager.instance.QuickVolume(gameObject.layer, 100f, m_Vignette);
    }

    void Update()
    {
        m_Vignette.intensity.value = Mathf.Sin(Time.realtimeSinceStartup);
    }

    void OnDestroy()
    {
        RuntimeUtilities.DestroyVolume(m_Volume, true, true);
    }
}

 

这段代码创建一个新的虚影,并将其分配给一个新生成的Volumn,优先级为100。然后,在每一帧中,它使用正弦曲线来改变vignette的强度。

重要的是。当你不再需要时,不要忘记销毁Volumn和附加的配置文件。

Fading Volumes

基于距离的Volumn混合对于大多数关卡设计的使用情况来说是很好的,但是偶尔你会想根据游戏事件触发一个淡入和/或淡出效果。你可以在上一节中描述的Update方法中手动完成,或者你也可以使用一个Tweening库来为你完成所有的工作。其中有几个是Unity免费提供的,比如DOTween、iTween或LeanTween。

让我们在这个例子中使用DOTween。我们不会详细介绍它(它已经有一个很好的文档),但这应该能让你入门。

using UnityEngine;
using UnityEngine.Rendering.PostProcessing;
using DG.Tweening;

public class VignettePulse : MonoBehaviour
{
    void Start()
    {
        var vignette = ScriptableObject.CreateInstance<Vignette>();
        vignette.enabled.Override(true);
        vignette.intensity.Override(1f);

        var volume = PostProcessManager.instance.QuickVolume(gameObject.layer, 100f, vignette);
        volume.weight = 0f;

        DOTween.Sequence()
            .Append(DOTween.To(() => volume.weight, x => volume.weight = x, 1f, 1f))
            .AppendInterval(1f)
            .Append(DOTween.To(() => volume.weight, x => volume.weight = x, 0f, 1f))
            .OnComplete(() =>
            {
                RuntimeUtilities.DestroyVolume(volume, true, true);
                Destroy(this);
            });
    }
}

在这个例子中,和上一个例子一样,我们生成了一个带vignette的快速Volumn。我们把它的weight属性设置为0,因为我们不希望它有任何贡献。

然后,我们使用DOTween的排序功能来串联一组tweening事件:淡入,暂停一秒钟,淡出,最后销毁Volumn和组件本身。

当然,你也可以对单个效果属性进行调节,而不是对整个Volumn进行调节。


补充说明:
如果你需要在运行时实例化PostProcessLayer,你需要确保资源被正确绑定到它。在组件被添加后,不要忘记调用Init()作为参数引用PostProcessResources文件。

 

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

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值