unity ugui自定義Text字型描邊優化效能

2021-09-13 08:58:38 字數 2239 閱讀 2295

在unity的ugui的用於text描邊的元件outline中,其中的實現是將字型copy出幾份往外放置形成背景黑邊,隨之帶來的是效能的高消耗。如果是一兩個text描邊還好,如果同屏有大量text在使用其在描邊時,其效能消耗提高十分明顯,甚至直接影響到了遊戲fps。

因此,同屏text描邊多時有必要優化一下,因此寫乙個可以實現text描邊的shader。

一樣的道理,shader中有2個pass,但多個text在使用其描邊時,unity會自動進行批處理,所以整體上只會多出乙個drawcall,相比ugui內建的outline元件,此shader效能提公升巨大,效果明顯!

//第乙個pass,實現text內容背景顏色,並向外擴大_outlinewidth

pass

;struct v2f

; sampler2d _maintex;

uniform float4 _maintex_st;

uniform float4 _maintex_texelsize;

uniform fixed4 _color;

uniform fixed4 _outlinecolor;

v2f vert

//確定每個畫素周圍8個畫素的座標。

static

const float2 dirlist[9]

=;//謀取dirlist第dirindex個方位的透明度值。

float

getdirposalpha

(float index, float2 xy)

;//對於每個畫素,傳入片元引數v2f i ,獲取次畫素周圍和自身的共9個畫素進行透明度疊加。

//那麼得出的結果就是非透明的區域被放大了,形成了黑邊。

float

getshadowalpha

(float2 xy)

//由於渲染text內容時,text字上沒有被渲染的區域是透明的,也就是透明度a值是0,

//所以只要將有內容的區域往外透明度為0的區域擴充套件一些畫素將就能夠形成描邊效果。

fixed4 frag

(v2f i)

: sv_target

endcg

}//第二個pass,常規渲染text內容。

pass

;struct v2f

; sampler2d _maintex;

uniform float4 _maintex_st;

uniform float4 _maintex_texelsize;

uniform fixed4 _color;

v2f vert

fixed4 frag

(v2f i)

: sv_target

endcg}}}

C 自定義MessageBox 按鈕的Text

using system using system.drawing using system.runtime.interopservices using system.text using system.windows.forms namespace sphinx.utils public stat...

android開發之自定義帶邊框的TextView

自定義帶邊框的textview activity package cn.class3g.activity import android.content.context import android.graphics.canvas import android.graphics.paint impor...

自定義 如何自定義協議

何為自定義協議,其實是相對標準協議來說的,這裡主要針對的是應用層協議 常見的標準的應用層協議如http ftp smtp等,如果我們在網路通訊的過程中不去使用這些標準協議,那就需要自定義協議,比如我們常用的rpc框架 dubbo,thrift 分布式快取 redis,memcached 等都是自定義...