參考**:
**參考: 14 邊緣發光shader(rim shader)的兩種實現形態/basicrimshader.shader
之前也寫過這個文章,參考:
乙個是原理,乙個是使用su***ce shader進行實現。
這裡再重新回顧下原理,如何判斷邊緣?我們知道邊緣的的法線與邊緣點到視點的向量有個夾角。
在邊緣的時候,這個夾角很大。可以利用這個夾角的余弦值衡量。余弦值越小,越靠近邊緣。注意這裡余弦值和夾角是成反比。而我們希望越靠近邊緣其越亮。所以使用1-余弦值,作為係數。然後用這個係數與顏色相乘,作為自發光的顏色。
所謂的自發光,就是物體本身有個顏色,將這個顏色和算出來的其他顏色相加就可以了。
這裡我們不考慮那麼負責,就是用乙個取樣的顏色+自發光顏色,簡單實現表邊緣發光效果。
選擇計算空間為世界空間。
將法線轉換到世界空間:
fixed3 normaldir = normalize(mul(x.normal, (float3x3)unity_worldtoobject));
將模型空間的頂點轉換到世界空間:
o.worldpos= mul(unity_objecttoworld,v.vertex);
視線的計算,在片段著色器中計算:
float3 viewdirection = normalize(_worldspacecamerapos.xyz - i.worldpos.xyz);
shader "myshader/rimshader"
_rimcolor
("rimcolor"
,color)=(
1,1,
1,1)
_rimpower
("rimpower"
,range(0
,16))
=1_rimintensity
("rimintensity"
,range(0
,10))
=1} subshader
lod 100
pass ;
struct v2f
;sampler2d _maintex;
float4 _maintex_st;
uniform float4 _rimcolor;
uniform float _rimpower;
uniform float _rimintensity;
fixed4 frag (v2f i)
: sv_target
endcg
}}}
UnityShader例項03 邊緣光材質
邊緣光材質 邊緣光材質原理和xray材質相類似,shader 也就長得幾乎一樣了 shader 實現 vf版本 01 shader penglu rimlight vf rimcolor rimcolor color 0,1,1,1 rimpower rim power range 0.1,8.0 ...
簡單邊緣泛光處理
前言 本篇部落格只是乙個簡單的實現邊緣泛光功能的例子,主要是當做筆記使用。核心要點 1.使用法向量和視角向量的點積值來獲取明亮度,從模型邊緣到模型中心點積值從0 1變化。點積值為負數說明當前頂點在平面背面,攝像機視角看不到,可以不做明亮度處理。點積值為正值時,說明當前頂點在平面正面,可以結合衰減係數...
Halcon實現邊緣提取
一 邊緣提取 1 設定roi興趣區域 2 快速二值化,並連線相鄰區域。這樣做的目的是進一步減少目標區域,通過二值化將目標區域大概輪廓提取出來 3 提取最接近目標區域的輪廓 常用函式有boundary,gen contour region xld 4 根據自己的需求提取需要的初步輪廓 5 將初步提取的...