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

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

URP | 后處理-描邊

2022-12-24 22:25 作者:那個人真狗  | 我要投稿

內(nèi)容偏多

使用軟件 Unity 2021.3.15 后處理實現(xiàn)描邊效果

目的

  • 后處理實現(xiàn)描邊效果

  • 這樣做有什么需要注意的地方

效果

深度描邊

Renderer Feature

我們準備一個默認的 Renderer Feature 在只需要把Shader渲染出來就可以

管線準備


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

Shader

上面定好后處理管線了,那我們開始制作Shader, 核心算法是在Shader中。

提供默認Shader模板

為了計算輪廓,計算相鄰像素進行采樣比較兩個像素的值,如果數(shù)值不同,就判斷是邊緣繪制一條線。

  • 使用深度計算我們的邊緣,在深度緩存中以X形狀進行采樣,

    定義我們的渲染儲存大小 _MainTex_TexelSize,_Scale

我們首先計算兩個值,然后.這兩個值將隨著增加而遞增 1。通過以這種方式縮放UV,我們能夠一次僅增加一個像素的邊緣寬度 - 實現(xiàn)最大可能的粒度 - 同時仍然保持坐標的中心。




擴展_MainTex_TexelSize和_MainTex_ST 的區(qū)別?

  • _MainTex_TexelSize 是貼圖 _MainTex 的像素尺寸大小,值: Vector4(1 / width, 1 / height, width, height)

    half2 offs = _MainTex_TexelSize.xy * half2(1,0) * ?_BlurSize;

  • _MainTex_ST 是貼圖_MainTex的tiling和offset的四元數(shù)

    _MainTex_ST.xy 是tiling的值

    _MainTex_ST.zw 是offset的值

    // Transforms 2D UV by scale/bias property #define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)

注意:這里前到 后處理和管線中增加 控制 Scale 屬性

  • 后處理

  • 管線中增加控制Shader

  • 這樣后續(xù)才能顯示正確

采樣深度

URP | Depth 深度 - 嗶哩嗶哩 (bilibili.com)

使用我們計算出來的UV對深度進行采樣。

  • 增加深度

  • 因為我們是4個方向,所以使用4個方向采樣深度。

  • 我們輸出一個深度查看一下效果,

  • 效果

  • 使用減法來比較像素之間的不同深度。

由于差值可以是正數(shù)或負數(shù),因此我們在返回結(jié)果之前取其絕對值。由于附近深度值之間的差異可能非常?。ㄒ虼撕茈y在屏幕上看到),我們將差異乘以 100 以使其更容易看到。

  • 效果

這個是檢測邊緣的一半,depthFiniteDifference1 是另一半。

  • 我們現(xiàn)在需要把這倆個合并成一個,

  • 效果

  • 我們看到表面還是有很多灰色區(qū)域,我們希望是只有黑和白。

  • 增加一個變量控制,黑白

  • 到后處理中增加控制變量的方法,

  • 并且增加到 Render里

  • 效果

  • 出現(xiàn)大面積的白色區(qū)域,這些區(qū)域不是我想要的,我們對表面深度進行調(diào)整。

  • 效果

使用深度法線

我們要獲取深度法線,我們在管線中增加一個SSAO ,SSAO自帶深度法線

  • SSAO

使用深度法線來繪制,不是深度,我們最后把兩者結(jié)合起來,

  • Shader中增加法線深度

  • 使用同樣的方法調(diào)用

我們前輸出看一下深度法線是否起作用,

  • 效果

顯示這樣的效果就是正確的,如果是黑色的還是沒有獲取到深度法線。


  • 現(xiàn)在輸出 edgeNormal 法線計算的邊緣

我們可以看到法線產(chǎn)生了一些新的邊緣,原來的邊緣效果有一些消失了,

  • 我們把這倆種方法結(jié)合起來。

  • 效果


  • 我們看到平面有時候一片白色的區(qū)域

  • 可以調(diào)大 深度處理來處理,但是會出現(xiàn)法線邊緣不完整的情況。

為什么出現(xiàn)白色邊緣?

白色區(qū)域

表面的斜率越大,相鄰像素深度之間的差異就越大。沿著這些表面的這種大深度增量導致我們的算法檢測它們上的“邊緣”

為了實現(xiàn)這一點,我們需要每個表面的法線,以及從相機到表面的視角方向。

我們計算視角方向,

  • 我們使用發(fā)法線深度是在屏幕空間中,所以我們攝像機視角方向也需要在屏幕空間才可以計算,

  • 我們需要視角空間轉(zhuǎn)換到屏幕空間,我們需要反向投影矩陣。

  • 后處理腳本中我們計算視角方向

  • Shader中獲取后處理傳入的View

  • 我們Shader計算屏幕空間中的視角方向。

  • 片元著色器階段來處理計算法線和視角關(guān)系

  • 我們在合并輸出,一個是邊緣的顏色,一個原圖顏色。

注意:記得在Volume增加顏色控制。

  • 效果

Volume

后處理組件,我們在后處理組件中定義我們剛剛Shader中創(chuàng)建的變量屬性,

  • 效果

代碼

Shader

Render

Volume


總結(jié)

  • 實現(xiàn)后處理描邊,比較復雜的地方是在Shader階段,需要的數(shù)據(jù)很對,主要是獲取深度和深度法線的計算方式,

    • 深度獲取記得開始管線


  • 深度法線,我們使用SSAO系統(tǒng)給我們提供好的,

  • 計算視角,需要把視角方向轉(zhuǎn)換到屏幕空間進行計算,那一部分比較復雜,主要是 一個是處理UV,一個是處理使用頂點轉(zhuǎn)換到屏幕空間。

資料

卡通渲染之描邊技術(shù)的實現(xiàn)(URP) - 知乎 (zhihu.com)

URP/LWRP Shader實現(xiàn)描邊效果_danad的博客-CSDN博客_urp 描邊

Unity Outline Shader Tutorial - Roystan


URP | 后處理-描邊的評論 (共 條)

分享到微博請遵守國家法律
肇州县| 图片| 许昌县| 通山县| 肇州县| 江陵县| 天祝| 伊川县| 理塘县| 咸阳市| 澳门| 平南县| 丰镇市| 乌拉特后旗| 萨嘎县| 晋中市| 清水县| 石阡县| 吉首市| 临汾市| 长海县| 建水县| 稷山县| 桂阳县| 洛浦县| 福安市| 论坛| 荔浦县| 锡林郭勒盟| 凤台县| 体育| 万源市| 珲春市| 潜江市| 新绛县| 信宜市| 格尔木市| 京山县| 桦甸市| 三台县| 环江|