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的小伙伴這點知識還是知道的,顯得我有點啰嗦。過源碼一篇文章又不夠,就當過了個流程吧(哈哈哈~~)筆者又在偷懶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM