Unity3D Shader系列之圓環

2021-10-10 13:34:40 字數 2199 閱讀 7821

效果如下。

很簡單,核心**就下面這兩句。原理就是通過計算當前uv與中心的距離是否在內環(_innerradius)和外圓(_outerradius)之間,若是,則將透明度置為1,若不是,則將透明度置為0。

fixed dis =

distance

(in.texcoord,

fixed2

(0.5

,0.5))

;color.a =

step

(_innerradius, dis)

*step

(dis, _outerradius)

;

**中沒有使用if…else…來判斷,而是使用了兩個step方法,這有助於提公升效能。

// 這段**沒有上面使用step的方式效率高

fixed dis =

distance

(in.texcoord,

fixed2

(0.5

,0.5))

;if(dis >= _innerradius && dis <= _outerradius)

else

至於為什麼step比if…else效率更高,可參考這兩篇文章。

《unity shader: 優化gpu**–用step()代替if else等條件語句》

《深入gpu硬體架構及執行機制》

完整**如下。

新建個材質,材質指定該shader,然後將材質球拖拽到image上面,效果就顯示出來了。

。shader "custom/ui/circle"

_color (

"tint"

, color)=(

1,1,

1,1)

_outerradius (

"outer radius"

,range(0

,0.5))

=0.5

_innerradius (

"inner radius"

,range(0

,0.5))

=0.2

_stencilcomp (

"stencil comparison"

, float)=8

_stencil (

"stencil id"

, float)=0

_stencilop (

"stencil operation"

, float)=0

_stencilwritemask (

"stencil write mask"

, float)

=255

_stencilreadmask (

"stencil read mask"

, float)

=255

_colormask (

"color mask"

, float)=15

[toggle

(unity_ui_alphaclip)

] _useuialphaclip (

"use alpha clip"

, float)=0

} subshader

stencil

cull

offlighting

offzwrite

off ztest [unity_guiztestmode]

blend

srcalpha

oneminussrcalpha

colormask [_colormask]

pass

;struct v2f

; sampler2d _maintex;

fixed4 _color;

fixed4 _texturesampleadd;

float4 _cliprect;

float4 _maintex_st;

fixed _outerradius;

fixed _innerradius;

v2f vert

fixed4 frag

(v2f in)

: sv_target

endcg

}}}

Unity3D Shader系列之幾何著色器基礎

最近一直在練習寫shader,發現用幾何著色器可以寫出特別酷炫的效果。於是去學習了一下,這裡做個總結以備查閱。幾何著色器位於渲染流水線的幾何階段,在頂點著色器與片元著色器之間。備註 於馮樂樂的 unity shader入門精要 p9 其在shader中是可選的,完全可程式設計的。頂點著色器是以頂點資...

Unity3d Shader 運動模糊

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

Unity3D Shader 入門學習

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