URP学习之八--Postprocess

关于URP的Postprocess我们需要有个了解,以前在内置管线,对于后处理我们一般自己写或者用PostprocessStack,现在URP已经将postprocess集成到URP中,我们一起来学习下吧~

首先需要创建一个Volume,然后创建VolumeProfile,点击AddOverride,选中Bloom,如下:

 于是Bloom效果就出来了,如此简单~

 我们看一下目前后期支持的效果:

 

还有就是刚才加的Bloom。 我们大致看下这些功能~

我们首先看会影响到ColorGradingLut的后处理:

var stack = VolumeManager.instance.stack;
            var channelMixer              = stack.GetComponent<ChannelMixer>();
            var colorAdjustments          = stack.GetComponent<ColorAdjustments>();
            var curves                    = stack.GetComponent<ColorCurves>();
            var liftGammaGain             = stack.GetComponent<LiftGammaGain>();
            var shadowsMidtonesHighlights = stack.GetComponent<ShadowsMidtonesHighlights>();
            var splitToning               = stack.GetComponent<SplitToning>();
            var tonemapping               = stack.GetComponent<Tonemapping>();
            var whiteBalance              = stack.GetComponent<WhiteBalance>();

在ColorGradingLutPass中我们可以看到以上几种后处理都会影响到LUT,只不过影响方式不同。

比如ChannelMixer的影响方式如下:

            colorLinear = float3(
                dot(colorLinear, _ChannelMixerRed.xyz),
                dot(colorLinear, _ChannelMixerGreen.xyz),
                dot(colorLinear, _ChannelMixerBlue.xyz)
            );

具体每种处理如何影响最后的LUT可以参考LutBuilderHdr.shader和LutBuilderLdr.shader。

然后剩下的后处理基本上都在PostProcessPass和UberPost.shader中了。我们同样可以看到这个Pass进行哪些后处理:

        // Builtin effects settings
        DepthOfField m_DepthOfField;
        MotionBlur m_MotionBlur;
        PaniniProjection m_PaniniProjection;
        Bloom m_Bloom;
        LensDistortion m_LensDistortion;
        ChromaticAberration m_ChromaticAberration;
        Vignette m_Vignette;
        ColorLookup m_ColorLookup;
        ColorAdjustments m_ColorAdjustments;
        Tonemapping m_Tonemapping;
        FilmGrain m_FilmGrain;

每一种处理都被Volume包装,作为一个VolumeComponent,然后在URP的PostprocessPass中取到参数传到UberPost.shader中,所以如果我们要扩展的话,至少要写一个VolumeComponent,而且还要修改URP的后处理Pass,并且还要改Ubershader,这种耦合性的修改如非必要,还不不要操作的好。只能说现在对于后处理不是不能扩展,只不过像上述方法这样扩展倒不如说是在修改URP代码。我们可以考虑其他方式,比如自己通过RenderFeatures写一个Pass,Pass执行自己的Shader,Pass的C#脚本只调用Volume中我们自己扩展的后处理项。这样我们在不修改源代码的情况下扩展要安全的多。

还有点需要了解的是现在Postprocess包含在Volume这个系统中,Volume其实还可以做很多其他的东西,而且有了Volume我们非常好做局部区域的后处理,不同区域后处理的插值等等操作,好用的不行~

本来是想将所有后处理项挨个过一遍,后来想想学习URP的小伙伴这点知识还是知道的,显得我有点啰嗦。过源码一篇文章又不够,就当过了个流程吧(哈哈哈~~)笔者又在偷懒

原文地址:https://www.cnblogs.com/shenyibo/p/12559775.html