shader入門精要讀書筆記30 邊緣檢測

2021-10-04 07:23:41 字數 1903 閱讀 2020

一、邊緣檢測理論

邊緣檢測是一種描邊效果實現的方法,原理是通過檢測運算元對影象進行卷積。

卷積核就是乙個正方形的網格結構。在對某個畫素進行卷積時,我們會把卷積核的中心放在該畫素上,依次計算核中的每個元素值和每個畫素的畫素值的乘積,再把所有的相加,得到的結果就是該位置的新畫素值。

這樣的過程可以實現很多效果,例如影象模糊、邊緣檢測等。

常見的邊緣檢測運算元(卷積核):

以上別熬是的是兩個方向的卷積核。

每個位置對應相乘累加後,再把gx、gy相加,得到g,g越大,說明越可能是邊緣。

二、實現

攝像機指令碼**:

using unityengine;

using system.collections;

public

class

edgedetection

:posteffectsbase}[

range

(0.0f

,1.0f)]

public

float edgesonly =

0.0f

;//邊緣線強度 為0時邊緣會疊加在原渲染影象上,為1只顯示邊緣

public

color edgecolor = color.black;

//邊緣線顏色

public

color backgroundcolor = color.white;

//背景顏色

void onrenderimage (

rendertexture src,

rendertexture dest)

else

}}

shader**:

shader "unity shaders book/chapter 12/edge detection"

//接收輸入的渲染紋理

_edgeonly (

"edge only"

, float)

=1.0

_edgecolor (

"edge color"

, color)=(

0,0,

0,1)

_backgroundcolor (

"background color"

, color)=(

1,1,

1,1)

} subshader

;

v2f vert

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)

;//使用1減去水平方向和豎直方向梯度值的絕對值,得到edge。edge越**明這個位置越可能是乙個邊緣點

//其實也就是edgex和edgey的絕對值的和,用1剪掉是為了得到反向的值

return edge;

}

fixed4 fragsobel

(v2f i)

: sv_target

endcg

}}fallback off

}

以上具體解釋見**注釋。

Shader入門精要讀書筆記3

笛卡爾座標系 標準正交基 左 右手座標系 點 向量 向量的運算 點積叉積 矩陣 矩陣的運算 矩陣變換 線性變換 縮放 旋轉 仿射變換 合併了線性變換和平移變換 齊次座標 縮放矩陣 旋轉矩陣 zxy 平移矩陣 依次 座標空間 父空間 子空間 模型空間 物件空間 世界空間 觀察空間 相機空間 裁剪空間 ...

Shader入門精要讀書筆記4

unity版本號和環境 建立場景,shader 材質 球體 簡單shader中每一行 的作用 使用語義 例如sv position 作為輸入輸出 sv position sv target 頂點 片元著色器輸出 結構體的引入,並用於著色器間資訊傳遞 頂點著色器插值後送給片元著色器 propertie...

Shader入門精要讀書筆記5

漸入佳境 光照 光源 方向,輻射度 吸收 散射 散射 折射 投射 反射 高光反射 specular 反射 漫反射 diffuse 折射 吸收 反射 出射度 輻射度 光照模型 brdf 標準光照模型 亦可稱為phong光照模型 blinn phong光照模型 標準光照模型 4部分 以下總結均基於此模型...