URP | 后處理-景深和散景模糊

目的
景深是什么?主要的表現(xiàn)效果是什么?
實(shí)現(xiàn)方法是什么? 需要注意都有那些點(diǎn)。
景深和散景的區(qū)別是什么?
使用 Unlty 2022.1
景深原理
景深表現(xiàn)效果
景深一般在攝影中比較常見,簡單理解就是要拍清楚的主清楚,其余背景是模糊的效果。

UE4 中的景深

示意圖

我們可以看到在攝影過程是控制深度來渲染物體。
我們?cè)阡秩具^程也是控制深度來渲染景深。
計(jì)算過程
獲取渲染深度圖
對(duì)深度圖進(jìn)行控制調(diào)整顯示的深度位置。
分開近景和遠(yuǎn)近計(jì)算,我們希望不在景深的里的物體進(jìn)行模糊。
使用后處理來對(duì)畫面進(jìn)行處理。
景深實(shí)現(xiàn) | Depth Of Field
高斯景深 | Gaussian
這種模式近似相機(jī)的效果,但不完全模仿他們。它有一個(gè)有限的模糊半徑和只做遠(yuǎn)場模糊。這種模式是速度最快的,也是低端平臺(tái)的最佳模式。
URP | Depth 深度 - 嗶哩嗶哩 (bilibili.com)
計(jì)算深度
獲取深度
怎么控制獲取的深度范圍,

我們可以使用攝像機(jī)這兩個(gè)數(shù)值查看渲染的深度位置。
效果

這樣我們就獲取到了物體到攝像機(jī)的距離。
注意:深度和攝像機(jī)Far有關(guān)系,這個(gè)效果默認(rèn)是1000。

景深權(quán)重
我們景深的效果 中間清楚,前后模糊的效果。
類似

我們就需要深度 (白-黑-白) 的關(guān)系,
白色模糊
黑色清楚
Shader
定義兩個(gè)變量,一個(gè)變量控制我們 視角的焦點(diǎn) ,一個(gè)變量控制我們的強(qiáng)度
變量

使用另一種方法獲取深度,Unity函數(shù)
我們前使用二次函數(shù),限制在0-1范圍

增加兩個(gè)變量控制 一個(gè)是焦點(diǎn)大小的 一個(gè)是 白色黑色對(duì)比度

效果

我們需要兩個(gè)變量,
把這個(gè)計(jì)算過程合并成一個(gè)函數(shù),方便我們調(diào)用。

全代碼
計(jì)算深度的就算完成,我們還需要控制模糊效果,黑色不模糊,白色模糊。

高斯模糊
我們獲取深度控制焦點(diǎn)已經(jīng)實(shí)現(xiàn),接下來實(shí)現(xiàn)模糊效果,
URP | 后處理-模糊算法總結(jié) - 嗶哩嗶哩 (bilibili.com)
我們?cè)趧?chuàng)建一個(gè)片元著色器來處理模糊,
這個(gè)片元著色器才是輸出的效果,

上面那個(gè)是我們輸出查看深度值的,這才是輸出查看模糊值。

全代碼
注意:前調(diào)整好流程,在調(diào)整效果。

Volume
效果

這次新增加兩個(gè)功能
屬性太多分割,

增加自己的組件路徑


RendererFeature
這里增加降采樣模糊,雖然有這個(gè)功能但是不推薦開啟。
完成



散景模糊 | Bokeh
大佬
高品質(zhì)后處理:十種圖像模糊算法的總結(jié)與實(shí)現(xiàn) - 知乎
散景(Bokeh)亦稱焦外成像,是一個(gè)攝影名詞,一般表示在景深較淺的攝影成像中,落在景深以外的畫面,會(huì)有逐漸產(chǎn)生松散模糊的效果。散景效果有可能因?yàn)閿z影技巧或光圈孔形狀的不同,而產(chǎn)生各有差異的效果。例如鏡頭本身的光圈葉片數(shù)不同(所形成的光圈孔形狀不同),會(huì)讓圓形散景呈現(xiàn)不同的多角形變化。此外,反射式鏡頭焦外的散景,會(huì)呈現(xiàn)獨(dú)有的甜甜圈形狀。

散景(Bokeh)在攝影學(xué)中被稱為焦外成像,而在光學(xué)上被稱為Circle of Confusion, CoC(彌散圓/散光圈/散射圓盤 ),即下圖橙色I(xiàn)mage Plane 中的藍(lán)色C所示區(qū)域。由于不同的物距(物體到鏡頭的距離)投影到鏡頭所形成的焦點(diǎn)不同,但I(xiàn)mage Plane 只能放在某個(gè)點(diǎn)上,所以就形成了Circle of Confusion, CoC(彌散圓)。



理解 整體表現(xiàn)是在模糊的背景有光斑效果

Shader
核心代碼 使用圓形散景為例, 采用Golden進(jìn)行散景模糊(Bokeh Blur)算法的實(shí)現(xiàn)
即對(duì)于每一次迭代,讓采樣uv旋轉(zhuǎn)一個(gè)角度,經(jīng)過足夠次數(shù)的迭代后,眾多以圓形分散開來的點(diǎn),將一起組成合適的Bokeh形狀。

這個(gè)函數(shù)就得到了,主要是計(jì)算模糊的效果。
我們還需要計(jì)算深度,根據(jù)不同深度使用模糊,和我們的上面類似,
不同的區(qū)別是這次黑白過度快速,硬一點(diǎn),景深模糊我們希望黑白過度線性。
深度計(jì)算我們處理一下,分成前半部分和后部分,單獨(dú)可以控制這倆部分的顏色。
在使用 Lerp 融合 前面是原圖,后面是散射效果,使用
白色模糊 ?黑色不模糊
深度

效果

Shader全代碼

Volume
Volume 組件和RendererFeature ?都使用景深組件,我們定義 枚舉來控制顯示那個(gè)屬性,
注意:這里沒有學(xué)會(huì)Volume 組件使用Eume顯示不同屬性。
效果

設(shè)置Bokeh類型,Broke屬性起作用。

RendererFeature
URP | 后處理-模糊算法總結(jié) - 嗶哩嗶哩 (bilibili.com)
URP | 后處理-自定義后處理 - 嗶哩嗶哩 (bilibili.com)
這里大部分和上面一樣,主要區(qū)別是不同枚舉類的使用判斷執(zhí)行不同效果。
定義2個(gè)函數(shù),輸入需要的數(shù)據(jù)

定義一個(gè)大的Render 渲染
根據(jù)不同的類型執(zhí)行不同的函數(shù),
全代碼
效果

總結(jié)
景深模糊,簡單理解就是獲取深度控制深度形成V型,進(jìn)行模糊的效果,
漸變平滑過度,線性。

散景模糊,過度快速,對(duì)比強(qiáng),

