螢幕後處理 邊緣檢測

2021-10-09 12:29:20 字數 1581 閱讀 9879

如上圖所示,使用卷積核,計算螢幕影象每個點的畫素和當前點周圍的畫素,進行卷積操作,可以得到梯度值。主要演算法如下:

for

(int it=

0;it<

9; it++);

half edge =1-

abs(edgex)

-abs

(edgey)

;//計算最後的梯度值

如果當前畫素左右色差大,說明處於邊緣的位置,根據上面演算法得到的梯度值也會較大。再根據梯度值,對邊緣色與原色進行插值,得到最終顏色值即可。

fixed4 withedgecolor =

lerp

( _edgecolor,

tex2d

( _maintex, i.uv[4]

), edge )

;//計算背景為原圖的顏色值

shader "custom/edgedetectiontest"

_edgeonly

("_edgeonly"

,float)

=1.0

_edgecolor

("_edgecolor"

, color)=(

0,0,

0,1)

_backcolor

("_backcolor"

,color)=(

1,1,

1,1)

} subshader

;//計算亮度值

fixed luminance (fixed4 color)

;//計算當前畫素的梯度值,做卷積操作

half sobel

(v2f i)

;const half gy[9]

=;half texcolor;

half edgex =0;

half edgey =0;

for(

int it=

0;it<

9; it++);

half edge =1-

abs(edgex)

-abs

(edgey)

;//計算最後的梯度值

return edge;};

v2f vert

;

fixed4 fragsobel

(v2f i)

: sv_target

; endcg

}}fallback off

}

螢幕後處理

void onrenderimage rendertexture src,rendertexture dest 螢幕後處理函式 graphics.blit src,dest,mat,pass 螢幕後處理 src當前螢幕紋理 graphics.drawmesh amesh,vector3.zero,q...

Unity Shader 螢幕後效果 邊緣檢測

關於螢幕後效果的控制類詳細見之前寫的另一篇部落格 這篇主要是基於之前的控制類,實現另一種常見的螢幕後效果 邊緣檢測。概念和原理部分 首先,我們需要知道在圖形學中經常處理畫素的一種操作 卷積。卷積操作的實質在於,對於影象中的每個畫素與其周圍的畫素進行的重新融合計算行為,以得到不同的畫素處理效果,例如銳...

螢幕後處理 運動模糊(通過畫素速度)

在相機上掛指令碼,獲得引數 模糊程度 前乙個視角投影矩陣 當前視角投影矩陣的逆矩陣,傳遞給到shader中 shader中,先對深度紋理取樣,得到深度值。再通過之前傳遞的矩陣,得到世界空間中,當前幀改點所在位置與前一幀改點所在位置。再根據這兩個點,求得速度值 也就是上一步求得的兩個點的中心點 使用傳...