zoukankan      html  css  js  c++  java
  • 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的小伙伴这点知识还是知道的,显得我有点啰嗦。过源码一篇文章又不够,就当过了个流程吧(哈哈哈~~)笔者又在偷懒

  • 相关阅读:
    洛谷 P2473 [SCOI2008]奖励关(状压dp+期望)
    洛谷P2051 [AHOI2009]中国象棋(dp)
    洛谷P2523 [HAOI2011]Problem c(计数dp)
    牛客Wannafly挑战赛26E 蚂蚁开会(树链剖分+线段树)
    POJ1149 PIGS
    CF802C Heidi and Library (hard)
    struts中请求数据自动封装
    struts 中数据处理的3中方式
    ajax第二天学习
    jstl标签
  • 原文地址:https://www.cnblogs.com/shenyibo/p/12559775.html
Copyright © 2011-2022 走看看