最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

URP | 后處理-模糊算法總結(jié)

2022-10-29 17:43 作者:那個人真狗  | 我要投稿

內(nèi)容偏多?

目的

  • URP管線下怎么計算后期模糊效果。

  • 模糊算法的學(xué)習(xí)使用。

  • 都有那些模糊算法,都有哪些優(yōu)點。

模糊介紹

目前看到大佬總結(jié)的十種模糊的方式,實現(xiàn)經(jīng)常使用的幾種。

高品質(zhì)后處理:十種圖像模糊算法的總結(jié)與實現(xiàn) - 知乎 (zhihu.com)

主要模糊方式

  • 10種模糊方式對比

性能測試

不同模糊性能對比。

思路

URP后處理主要有4部分組成

主要是由3個文件組成,

  • Shader文件

  • Volume 腳本

    這個是暴露給后處理使用的腳本、

  • RenderFeature 腳本

    這個腳本主要包含 RenderFeature模塊和 ScriptableRenderPass模塊 倆部分。主要是處理渲染邏輯的。

Gaussian Blur | 高斯模糊

高斯模糊主要分為橫模糊和縱模糊,倆次模糊以后就可以得到結(jié)果了。

  • 對圖像處理的矩陣稱之為高斯核(Gaussian Kernel)

詳細 參考

高品質(zhì)后處理:十種圖像模糊算法的總結(jié)與實現(xiàn) - 知乎 (zhihu.com)


Shader處理

  • 創(chuàng)建一個Shader,在創(chuàng)建一個函數(shù)庫,命名Blur.hlsl

  • Shader內(nèi)導(dǎo)入函數(shù)庫就可以了,


  • 函數(shù)庫里增加計算


  • 定義我們的片元著色器(Gaussianfrag),

注意:因為我們要制作不同的模糊效果使用一個hlsl.函數(shù)庫,調(diào)用不同的片元著色器,執(zhí)行不同的效果。

擴展 卷積核是什么?

三分鐘徹底理解圖像高斯模糊 - 知乎 (zhihu.com)

卷積究竟卷了啥?——17分鐘了解什么是卷積_嗶哩嗶哩_bilibili

游戲 Bloom 實現(xiàn)方法 - 嗶哩嗶哩 (bilibili.com)


Volume

創(chuàng)建一個腳本在后處理里控制屬性

  • 后處理效果

后處理組件

RendererFeature 類

  • 創(chuàng)建一個腳本,命名 GaussianBlurRenderFeature

  • RenderFeature是處理渲染邏輯,設(shè)置Shader

  • 設(shè)置渲染事件

  • 同步渲染事件

  • 執(zhí)行函數(shù),傳入Volume,傳入Command

  • 渲染Render函數(shù),后處理邏輯。

公開設(shè)置

  • 外部可以設(shè)置渲染層級,指定Shader,

URP | 后處理-自定義后處理 - 嗶哩嗶哩 (bilibili.com)


  • 定義Pass我們創(chuàng)建的Pass 開始同步渲染方式。

PASS部分

渲染事件

我們開始處理Pass階段的渲染內(nèi)容,

  • 創(chuàng)建一個類, 創(chuàng)建構(gòu)造函數(shù)。


就是上面調(diào)用的構(gòu)造函數(shù)設(shè)置的層級和Shader

  • 我們現(xiàn)在定義一些變量,比如Shader的材質(zhì),控制模糊的變量等。

  • 我們回到到構(gòu)造函數(shù),判斷Shader是否為什么空,如果不為空創(chuàng)建一個材質(zhì)。

初始化渲染

  • 定義一個Setup函數(shù) ,初始化渲染目標(biāo)

回到RendererFeature 初始化

初始化完成,

執(zhí)行

  • 主要是判斷 材質(zhì),攝像機, 組件是否準(zhǔn)備好,準(zhǔn)備好執(zhí)行渲染。

注意:這里的 Render 函數(shù)還沒有定義

接下來定義渲染部分。

渲染

  • 渲染

執(zhí)行渲染渲染計算,

注意:GetTemporaryRT 是括號括號括號,這樣處理是為了看的清楚。

  • 計算完,傳入材質(zhì)

我們使用 BlurTimes 控制迭代次數(shù)。

擴展 Blit 函數(shù)的使用用法、

這個表示 后面是表示使用的Shader中第幾個Pass 。

Blit函數(shù)的使用

  • 官方函數(shù)介紹

最簡單的作用就是把一張紋理繪制到另一張紋理中,可以使用材質(zhì)對紋理進行處理。

效果

  • 處理效果

注意:迭代次數(shù)越多越費。


代碼

shader

hlsl

Volume

Feature

Box Blur | 方框模糊

  • Box模糊和 上面的 高斯模糊差不多,

  • 主要是他們的計算 高斯核不一樣。

注意:方框模型和高斯模糊都使用同樣的渲染管線就可以,只需要修改Shader就可以,他們指定不同的Shader就可以。

Shader

  • Shader階段需要注意的是,定義新的片元著色器,指定我們調(diào)用的函數(shù)庫的位置。

調(diào)用 Box Frag 片元著色器

hlsl

主要是定義一個新的 片元著色器,命名— Box Frag.


擴展 倆種模糊方式的對比效果。

  • 方框模糊

    Blur Times 6 ? ? ?Blur Range ?2 ? ? RT Down Sampling ? ?3

  • 高斯模糊

  • 第二步 實現(xiàn)同樣類似的模糊,看倆種模糊的算法對比。

    這是倆種差不多的模糊,

總結(jié):方框模糊比高斯模糊迭代次數(shù)少, 優(yōu)點就是比高斯模糊省。

Kawase Blur

Kawase Blur于Masaki Kawase 在GDC2003的分享《Frame Buffer Postprocessing Effects in DOUBLE-S.T.E.A.L (Wreckless)》中提出。

Kawase Blur最初用于Bloom后處理特效,但其可以推廣作為專門的模糊算法使用,且在模糊外觀表現(xiàn)上與高斯模糊非常接近。

Kawase Blur的思路是對距離當(dāng)前像素越來越遠的地方對四個角進行采樣,且在兩個大小相等的紋理之間進行乒乓式的blit。

創(chuàng)新點在于,采用了隨迭代次數(shù)移動的blur kernel,而不是類似高斯模糊,或box blur一樣從頭到尾固定的blur kernel。

優(yōu)點:Kawase Blur比經(jīng)過優(yōu)化的高斯模糊的性能約快1.5倍到3倍。

Shader

  • 我們前在blur.hlsl計算片元著色器

對像素斜四角像素進行采樣,然后取平均值。

注意:第一個是主像素的位置,剩下4個是4個點的像素。

Shader

RenderFeature 類

  • 我們前創(chuàng)建渲染流程

這個階段是把 destination的效果輸出到屏幕,降采樣和 模糊起作用了,我接下來處理核心代碼。

  • 創(chuàng)建2個RT 我們需要來回切換。

這個階段主要是注意,2個RT來回切換。

  • 在模糊迭代開始,材質(zhì)我們需要使用迭代次數(shù)來控制模糊次數(shù)

  • 來回Blit處理

  • 當(dāng)前迭代次數(shù),對每次模糊的半徑進行設(shè)置

  • 效果

  • 屬性數(shù)值

這樣迭代2次就有一個不錯的模糊效果。

KawaseBulrRenderFeature

Dual Kawase Blur ?| 雙重模糊

上面這些模糊算法我們可以看出,一旦模糊距離增大,必須得加大迭代次數(shù)來消除方格感。

Dual Blur 是利用降采樣和升采樣,解決方格感,還有Dual Blur方式在頂點著色器階段對UV進偏移。這樣可以減少計算量。

  • 一個降采樣,一個升采樣。

Shader

Shader部分,我們是使用倆個Pass完成,

為了帶來更好的性能表現(xiàn),可以將uv的偏移放在Vert Shader中進行,而Fragment Shader中基本上僅進行采樣即可。

DualKawaseBlur.hlsl

  • 需要重新定義頂點結(jié)構(gòu)體,



我們準(zhǔn)備倆個輸出結(jié)構(gòu)體,一個降采樣,一個升采樣。

  • 降采樣 ? ? ?第一個UV 一個是定義 5 的數(shù)組

  • 升采樣 ? ? 第二個UV需要定義8個的 數(shù)組。

降采樣

  • 頂點著色器是對UV進行偏移。

升采樣

  • 頂點著色器


Shader部分

定義2個Pass

RendererFeature 類

因為我們都是使用的一個 Volume,所以我們調(diào)用同一個 組件,

這里只是 設(shè)置好渲染內(nèi)容,

我們要定義 Pass 設(shè)置渲染邏輯


Pass

Render

這個部分是我們的算法核心,

  • 渲染效果

全代碼


擴展 RT是什么?

URP源碼學(xué)習(xí)(七)一些細節(jié)和理解 - 知乎 (zhihu.com)

首先rt是一張?zhí)厥赓N圖,這張貼圖對應(yīng)的是GPU上的FrameBuffer.

FrameBuffer 緩存區(qū)儲存2種緩存

  • 顏色緩存,

  • 深度緩存

到這里4種模糊算法算完事,

擴展:怎么查看Frame Debug

  • 我們看到渲染結(jié)果,

  • 這個是原圖要輸出的顯示效果,

  • 這個是沒有增加后處理的原圖備份。

  • 這些是計算模糊的過程階段圖。

  • 最后輸出到屏幕處理結(jié)果圖。

總結(jié)

  • 高速模糊最簡單,Box模型也只是在Shader階段進行處理,最復(fù)雜的是 Dual 和Kawase 模糊方式, 相對Dual 性能更好。

  • 從細節(jié)梳理了后處理渲染流程,創(chuàng)建成模板,好維護處理。

  • 對RT的類整理學(xué)習(xí),經(jīng)常使用的類型

    • Blit 函數(shù)

      一個紋理復(fù)制到另一個紋理。

  • GetTemporaryRT

    設(shè)置RT的屬性

  • RenderTargetIdentifier

    臨時紋理的一些屬性

  • RenderTextureDescriptor

    RT的一個類包含RT的所有屬性

    資料

    URP Gaussian/Box/Kawase/Dual Blur 實現(xiàn) - 知乎 (zhihu.com)

    Unity URP DualKawaseBlur TA (tajourney.games)

    高品質(zhì)后處理:十種圖像模糊算法的總結(jié)與實現(xiàn) - 知乎 (zhihu.com)

    【Free Bird/URP教學(xué)】7.URP后處理--高斯模糊 - 知乎 (zhihu.com)

    【Unity ShaderGraph UI模糊特效教程】_嗶哩嗶哩_bilibili


    URP | 后處理-模糊算法總結(jié)的評論 (共 條)

    分享到微博請遵守國家法律
    乌恰县| 柯坪县| 洛隆县| 龙口市| 普宁市| 阜阳市| 驻马店市| 长武县| 万荣县| 沙河市| 滨州市| 高雄县| 保定市| 四平市| 镇江市| 望都县| 喀喇沁旗| 讷河市| 同江市| 福建省| 莱阳市| 革吉县| 尼玛县| 博兴县| 抚顺市| 瓦房店市| 垣曲县| 乌拉特后旗| 牙克石市| 白沙| 德昌县| 舞阳县| 宜阳县| 建平县| 珲春市| 防城港市| 栾川县| 惠安县| 镇沅| 新宁县| 龙井市|