Creator label在使用系統(tǒng)字體的時候沾鳄,引擎系統(tǒng)文本的實現(xiàn)是先將文本繪制到 Canvas慨飘,然后再生成圖片給 Label 組件使用。
文本緩存類型(Cache Mode)
屬性功能說明
NONE? ? ? ? ?默認(rèn)值译荞,Label 中的整段文本將生成一張位圖瓤的。
BITMAP? ? ? 選擇后,Label 中的整段文本仍將生成一張位圖圈膏,但是會盡量參與?動態(tài)合圖。只要滿足動態(tài)合圖的要求篙骡,就會和動態(tài)合圖中的其它 Sprite 或者? ? ? ? ? ? ? ? ? ? ? ? ? Label 合并 Draw Call稽坤。由于動態(tài)合圖會占用更多內(nèi)存,該模式只能用于文本不常更新的 Label糯俗。
? ??????????????????補(bǔ)充:和 NONE 模式一樣尿褪,BITMAP 模式會強(qiáng)制給每個 Label 組件生成一張位圖,不論文本內(nèi)容是否等同叶骨。如果場景中有大量相同文本的 ????????????????????Label茫多,建議使用 CHAR 模式以復(fù)用內(nèi)存空間。
CHAR?? ? ? ? ?原理類似 BMFont忽刽,Label 將以“字”為單位將文本緩存到全局共享的位圖中天揖,相同字體樣式和字號的每個字符將在全局共享一份緩存夺欲。能支持文本????的頻繁修改,對性能和內(nèi)存最友好今膊。不過目前該模式還存在如下限制些阅,我們將在后續(xù)的版本中進(jìn)行優(yōu)化:
????????????????1、該模式只能用于字體樣式和字號固定(通過記錄字體的 fontSize斑唬、fontFamily市埋、color、outline 為關(guān)鍵信息恕刘,以此進(jìn)行字符的重復(fù)使用缤谎,其他有使用特殊自定義文本格式的需要注意),并且不會頻繁出現(xiàn)巨量未使用過的字符的 Label褐着。這是為了節(jié)約緩存坷澡,因為全局共享的位圖尺寸為 20482048,只有場景切換時才會清除含蓉,一旦位圖被占滿后新出現(xiàn)的字符將無法渲染频敛。
????????????????2、不能參與動態(tài)合圖(同樣啟用 CHAR 模式的多個 Label 在渲染順序不被打斷的情況下仍然能合并 Draw Call)
????????????????3. 該模式在?*原生平臺上使用 FreeType 渲染馅扣。
對于 Label 組件斟赚,Src Blend Factor?常用的設(shè)置主要有兩種,包括?SRC_ALPHA?和?ONE
當(dāng)使用?SRC_ALPHA?模式時差油,可以通過頂點數(shù)據(jù)將透明度傳遞到 Shader 中拗军,然后在 Shader 中進(jìn)行像素透明度的計算,因此文本的透明度就不需要在繪制到 Canvas 時處理厌殉。在這種模式下食绿,Label 節(jié)點透明度變化時侈咕,就不需要頻繁的調(diào)用 updateRenderData 進(jìn)行 Canvas 的重新繪制公罕,可以減少 API 調(diào)用以及頻繁重繪造成的性能消耗。
當(dāng)使用?ONE?模式時耀销,文本圖片的透明度需要做預(yù)乘處理楼眷,所以在 Canvas 繪制時就需要進(jìn)行透明度的處理。在這種模式下熊尉,Label 的節(jié)點透明度變化時就需要頻繁的調(diào)用 updateRenderData罐柳,進(jìn)行文本內(nèi)容的重繪。
需要注意的是不同的混合模式狰住,會影響與其他節(jié)點的動態(tài)合批张吉,例如:
當(dāng)?Src Blend Factor?選擇?ONE?模式,Cache Mode?選擇?BITMAP?緩存模式催植,則使用的是?動態(tài)圖集肮蛹,可能會導(dǎo)致動態(tài)合批失效勺择。
若?Cache Mode?選擇?CHAR?緩存模式,Src Blend Factor?會默認(rèn)使用?SRC_ALPHA?模式伦忠,因為是全局共用同一張字符圖集省核,無法進(jìn)行不同的模式兼容。
對于?原生平臺昆码,在?SRC_ALPHA?模式下气忠,為了消除文本的黑邊問題,在文本圖片數(shù)據(jù)返回時赋咽,需要做反預(yù)乘處理旧噪。
對于使用大量文本節(jié)點或者使用?SHRINK?模式的大段文本內(nèi)容來說,做反預(yù)乘操作會有不少的性能消耗脓匿,開發(fā)者需要依據(jù)不同的使用場景以及文本內(nèi)容進(jìn)行合理的選擇舌菜,以便在不同的平臺能夠減少重繪帶來的性能消耗。具體的使用場景說明如下:
如果?Cache Mode?選擇?CHAR?緩存模式亦镶,只能使用?SRC_ALPHA日月。
如果只是發(fā)布?Web?平臺,推薦使用默認(rèn)的?SRC_ALPHA?模式缤骨。因為?ONE?模式下爱咬,透明度變化會造成頻繁的重繪。另外使用?BITMAP?緩存模式以及?CHAR?緩存模式也無法生效绊起。
如果需要發(fā)布?Native?平臺精拟,并且文本使用了?SHRINK?等會頻繁重繪的排版模式,界面創(chuàng)建時會因為文本頻繁的反預(yù)乘操作導(dǎo)致性能消耗比較明顯虱歪,可以選擇使用?ONE?模式避免反預(yù)乘帶來的卡頓蜂绎。