unity3d shader之浮雕效果

2021-06-28 16:06:50 字數 1586 閱讀 8168

浮雕就是對影象上的乙個畫素和它右下的那個畫素的色差的一種處理

非常容易,只需要乙個簡單的演算法

用fragment shader來實現

我們只看實現部分就好

在frag函式中

mc00mc = tex2d (_maintex, i.uv_maintex).rgb;

獲取當前點的顏色

mc11 = tex2d (_maintex, i.uv_maintex+fixed2(1,1)/_size).rgb;

獲取當前點右下角(偏移了(1,1)個單位)的點的顏色,

由於cg函式tex2dsize函式(獲取長寬的畫素數)在unity中不能用,我也不知道用什麼函式來替代它,就弄了個外部變數_size方便調節

如果有什麼函式能代替tex2dsize函式各位看官一定要告訴我

diffs = abs( mc00mc - mc11);

diffs為亮點顏色差

max0 = diffs.r>diffs.g?diffs.r:diffs.g;

max0 = max0>diffs.b?max0:diffs.b;

求出色差中rgb的最大值設為色差數

gray = clamp(max0+0.4 , 0, 1);

灰度值其實就是這個色差數

c = float4(gray.***,1)*_color;

最終顏色

效果如下:

全部**如下:

shader "custom/test" 

_size("size", range(1,2048)) = 256//size

_color("main color",color)=(1,1,1,1)

} subshader

cull off

cgprogram

#pragma vertex vert

#pragma fragment frag

#include "unitycg.cginc"

float4 _color;

float _size;

sampler2d _maintex;

float4 _maintex_st;

struct v2f ;

v2f o;

o.pos=mul(unity_matrix_mvp,v.vertex);

o.uv_maintex = transform_tex(v.texcoord,_maintex);

return o;

} float4 frag(v2f i):color

endcg

}//} }

-----------------by wolf96

Unity3D Shader系列之圓環

效果如下。很簡單,核心 就下面這兩句。原理就是通過計算當前uv與中心的距離是否在內環 innerradius 和外圓 outerradius 之間,若是,則將透明度置為1,若不是,則將透明度置為0。fixed dis distance in.texcoord,fixed2 0.5 0.5 color...

Unity3d Shader 運動模糊

攝影常用的一招就是延時攝影,以使運動的物體產生運動模糊。攝影技巧為 1,三角架固定相機 2,調長 時間 3,物件有運動物體和靜止物體參照 用了延時攝影,會產生藝術感,見下圖 2015年1月 拍攝於上海陸家嘴 遊戲方面可喜的是unity3d也可以實現類似效果,先看效果圖 第一張為無運動模糊 第二張為有...

Unity3D Shader 入門學習

unity3d 的所有渲染工作離不開著色器.shader 著色器其實是一小段程式,它負責將輸入的mesh網格.以指定的方式和輸入的貼圖或者顏色等組合作用.然後輸出.繪圖單元可以依據這個輸出來將影象繪製到螢幕上 輸入的貼圖或顏色等,加上對應的shader,以及對shader的特定引數設定,將這些內容 ...