中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

成年做羞羞的視頻網(wǎng)站微信廣告投放平臺(tái)

成年做羞羞的視頻網(wǎng)站,微信廣告投放平臺(tái),定制開發(fā)軟件產(chǎn)品的稅率,濟(jì)南12345官網(wǎng)UGUI合批 UGUI合批規(guī)則概述UGUI性能查看工具合批部分的特殊例子一個(gè)白色image、藍(lán)色image覆蓋了Text,白色image和Text哪個(gè)先渲染 Mask合批Mask為什么會(huì)產(chǎn)生兩個(gè)drawcallMask為什么不能合批Mask注意要點(diǎn) RectMask2D為什么RecMask2D比Mask性能更好主要代碼RectMask2D注…

UGUI合批

  • UGUI合批規(guī)則概述
  • UGUI性能查看工具
  • 合批部分的特殊例子
    • 一個(gè)白色image、藍(lán)色image覆蓋了Text,白色image和Text哪個(gè)先渲染
  • Mask合批
    • Mask為什么會(huì)產(chǎn)生兩個(gè)drawcall
    • Mask為什么不能合批
    • Mask注意要點(diǎn)
  • RectMask2D
    • 為什么RecMask2D比Mask性能更好
    • 主要代碼
    • RectMask2D注意要點(diǎn)
  • 根據(jù)應(yīng)用場(chǎng)景選擇使用哪個(gè)(Mask、RectMask2D)
    • 只需要一個(gè)遮罩
    • 需要多個(gè)遮罩,遮罩下有多個(gè)子物體

UGUI合批規(guī)則概述

  1. 遍歷所有UI元素

  2. 根據(jù)深度Depth(優(yōu)先級(jí)最高,-1表示不用渲染)、材質(zhì)ID、圖片ID、渲染順序?qū)λ蠻I進(jìn)行排序

  3. 進(jìn)行合批處理,比如UI1和UI2(兩者必須是緊挨著的)是相同材質(zhì)、相同圖片就可以進(jìn)行合批,如果UI1和UI2之間有一個(gè)中間層UI3(根UI1和UI2材質(zhì)不同),就會(huì)打斷合批
    在這里插入圖片描述

  • Text必須文字的網(wǎng)格覆蓋到image上面才算相交,Rect Transform框框相交不算
  • 白色image的深度為0,最先渲染,然后判斷Text是否相交,再判斷材質(zhì)ID和圖片ID是否相同,如果相同則可以合批,因?yàn)椴幌嗤?#xff0c;所以Text深度為白色image+1為1(如果Text底下有很多image,則取最大的深度+1)
  • 紅色image因?yàn)榈紫掠蠺ext和白色image,所以計(jì)算出兩個(gè)深度值分別1和0,取最大值加1,就是2
  • 黃色和藍(lán)色image會(huì)進(jìn)行合批測(cè)試操作,深度值都是2(這里只是測(cè)試是否能合批,并還沒有真正合批)
  • 最后會(huì)得到一個(gè)排序數(shù)組list并把所有深度為-1的值剔除掉,0、1、2、2、2,傳給合批部分的程序進(jìn)行合批操作,判斷相鄰的元素是否能進(jìn)行合批,通過判斷數(shù)組的值是否相等

UGUI性能查看工具

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

合批部分的特殊例子

一個(gè)白色image、藍(lán)色image覆蓋了Text,白色image和Text哪個(gè)先渲染

在這里插入圖片描述

  1. 根據(jù)分析工具可以看到白色image先渲染,文本后渲染(白色圖片ID小一點(diǎn))
  2. 這樣得到的數(shù)組list,會(huì)先是白色image、Text、藍(lán)色image,導(dǎo)致白色和藍(lán)色無法合批
  3. 解決辦法是把白色image和藍(lán)色image賦值同一個(gè)texture
    在這里插入圖片描述
  4. 只要是滿足合批條件,合批數(shù)組緊挨著,雖然沒有覆蓋,也可以合批
  5. 能不能合批,在最后合批數(shù)組上才能決定

Mask合批

  1. mask無法跟mask外的物體進(jìn)行合批,但是mask之間可以合批

  2. mask本身會(huì)產(chǎn)生兩個(gè)drawcall,性能損耗

Mask為什么會(huì)產(chǎn)生兩個(gè)drawcall

  1. 第一個(gè)drawcall是mask在設(shè)置模板緩存產(chǎn)生的
  2. 第二個(gè)drawcall是mask在還原模板產(chǎn)生的
  3. mask之間可以進(jìn)行合批,設(shè)置模板緩存和還原模板時(shí)候,因?yàn)閳D片ID和材質(zhì)是一樣的,所以可以合批
  4. 設(shè)置模板緩存時(shí)候,會(huì)把需要顯示部分的緩存值設(shè)置為1,遮罩的部分設(shè)置為0,在渲染的時(shí)候會(huì)取出我存在當(dāng)前像素當(dāng)中的一個(gè)模板緩存值,然后判斷它呢是否為一。如果為一的話,才進(jìn)行渲染,如果不為一,就不不渲染了
  5. 每一個(gè)像素點(diǎn)上,創(chuàng)建了一個(gè)這樣類似于一個(gè)數(shù)據(jù)緩存,通過它的模板緩存值來判斷是否顯示,都是像素級(jí)別的單位
  6. 模板還原也要產(chǎn)生一次drawcall,把每個(gè)像素點(diǎn)的模板緩存清除

Mask為什么不能合批

因?yàn)镸ask會(huì)產(chǎn)生一個(gè)特殊的材質(zhì),材質(zhì)不同就不能合批
在這里插入圖片描述

    public virtual Material GetModifiedMaterial(Material baseMaterial){if (!MaskEnabled())return baseMaterial;var rootSortCanvas = MaskUtilities.FindRootSortOverrideCanvas(transform);var stencilDepth = MaskUtilities.GetStencilDepth(transform, rootSortCanvas);if (stencilDepth >= 8){Debug.LogWarning("Attempting to use a stencil mask with depth > 8", gameObject);return baseMaterial;}int desiredStencilBit = 1 << stencilDepth;// if we are at the first level...// we want to destroy what is thereif (desiredStencilBit == 1){// StencilMaterial.Add是最主要的方法,這里添加了特殊的材質(zhì),因?yàn)椴馁|(zhì)不同,所以不能和mask外的物體合批var maskMaterial = StencilMaterial.Add(baseMaterial, 1, StencilOp.Replace, CompareFunction.Always, m_ShowMaskGraphic ? ColorWriteMask.All : 0);StencilMaterial.Remove(m_MaskMaterial);m_MaskMaterial = maskMaterial;var unmaskMaterial = StencilMaterial.Add(baseMaterial, 1, StencilOp.Zero, CompareFunction.Always, 0);StencilMaterial.Remove(m_UnmaskMaterial);m_UnmaskMaterial = unmaskMaterial;graphic.canvasRenderer.popMaterialCount = 1;graphic.canvasRenderer.SetPopMaterial(m_UnmaskMaterial, 0);return m_MaskMaterial;}//otherwise we need to be a bit smarter and set some read / write masksvar maskMaterial2 = StencilMaterial.Add(baseMaterial, desiredStencilBit | (desiredStencilBit - 1), StencilOp.Replace, CompareFunction.Equal, m_ShowMaskGraphic ? ColorWriteMask.All : 0, desiredStencilBit - 1, desiredStencilBit | (desiredStencilBit - 1));StencilMaterial.Remove(m_MaskMaterial);m_MaskMaterial = maskMaterial2;graphic.canvasRenderer.hasPopInstruction = true;var unmaskMaterial2 = StencilMaterial.Add(baseMaterial, desiredStencilBit - 1, StencilOp.Replace, CompareFunction.Equal, 0, desiredStencilBit - 1, desiredStencilBit | (desiredStencilBit - 1));StencilMaterial.Remove(m_UnmaskMaterial);m_UnmaskMaterial = unmaskMaterial2;graphic.canvasRenderer.popMaterialCount = 1;graphic.canvasRenderer.SetPopMaterial(m_UnmaskMaterial, 0);return m_MaskMaterial;}

Mask注意要點(diǎn)

  1. Mask剔除的部分還是會(huì)影響深度計(jì)算的,從而影響合批,增加drawcall次數(shù)
  2. Mask剔除的部分還是會(huì)drawcall,只不過mask把繪制的像素剔除了
  3. Mask下的子物體可以正常進(jìn)行合批
  4. mask之間只要滿足合批條件,那么他們之間的元素也是能夠進(jìn)行合批的
    在這里插入圖片描述

RectMask2D

  1. RectMask2D本身不占用drawcall
  2. 因?yàn)閷?shí)際的具體邏輯是在canvas render里進(jìn)行的,涉及到渲染具體的操作都是內(nèi)部用c++類做的,性能更好,這里通過性能分析渲染的面和點(diǎn)判斷遮蓋的部分是否被渲染出來
    在這里插入圖片描述

為什么RecMask2D比Mask性能更好

  1. RectMask2D本身不占用drawcall,Mask本身有兩次drawcall
  2. RectMask2D對(duì)于被遮罩的部分并不會(huì)繪制,Mask是把遮罩的部分剔除了

主要代碼

public virtual void PerformClipping()
{if (ReferenceEquals(Canvas, null)){return;}//TODO See if an IsActive() test would work well here or whether it might cause unexpected side effects (re case 776771)// if the parents are changed// or something similar we// do a recalculate hereif (m_ShouldRecalculateClipRects){MaskUtilities.GetRectMasksForClip(this, m_Clippers);m_ShouldRecalculateClipRects = false;}// get the compound rects from// the clippers that are validbool validRect = true;// 獲取需要剪切的區(qū)域Rect clipRect = Clipping.FindCullAndClipWorldRect(m_Clippers, out validRect);// If the mask is in ScreenSpaceOverlay/Camera render mode, its content is only rendered when its rect// overlaps that of the root canvas.RenderMode renderMode = Canvas.rootCanvas.renderMode;bool maskIsCulled =(renderMode == RenderMode.ScreenSpaceCamera || renderMode == RenderMode.ScreenSpaceOverlay) &&!clipRect.Overlaps(rootCanvasRect, true);if (maskIsCulled){// Children are only displayed when inside the mask. If the mask is culled, then the children// inside the mask are also culled. In that situation, we pass an invalid rect to allow callees// to avoid some processing.clipRect = Rect.zero;validRect = false;}if (clipRect != m_LastClipRectCanvasSpace){foreach (IClippable clipTarget in m_ClipTargets){//設(shè)置剪切效果clipTarget.SetClipRect(clipRect, validRect);}foreach (MaskableGraphic maskableTarget in m_MaskableTargets){maskableTarget.SetClipRect(clipRect, validRect);maskableTarget.Cull(clipRect, validRect);}}else if (m_ForceClip){foreach (IClippable clipTarget in m_ClipTargets){clipTarget.SetClipRect(clipRect, validRect);}foreach (MaskableGraphic maskableTarget in m_MaskableTargets){maskableTarget.SetClipRect(clipRect, validRect);if (maskableTarget.canvasRenderer.hasMoved)maskableTarget.Cull(clipRect, validRect);}}else{foreach (MaskableGraphic maskableTarget in m_MaskableTargets){//Case 1170399 - hasMoved is not a valid check when animating on pivot of the objectmaskableTarget.Cull(clipRect, validRect);}}m_LastClipRectCanvasSpace = clipRect;m_ForceClip = false;UpdateClipSoftness();
}

RectMask2D注意要點(diǎn)

  1. 遮罩的部分因?yàn)闆]有繪制,所以不影響深度計(jì)算,不影響合批
  2. 會(huì)打斷合批,一個(gè)RectMask2D下的子物體不可以跟另一個(gè)RectMask2D下的子物體進(jìn)行合批,但RectMask2D下的子物體可以進(jìn)行合批
  3. RectMask2D組件的Image之間可以進(jìn)行合批

根據(jù)應(yīng)用場(chǎng)景選擇使用哪個(gè)(Mask、RectMask2D)

只需要一個(gè)遮罩

選擇用RectMask2D性能更好

需要多個(gè)遮罩,遮罩下有多個(gè)子物體

選擇用Mask可以對(duì)不同Mask之間的子物體進(jìn)行合批,這種情況就會(huì)比RectMask2D性能更好

http://www.risenshineclean.com/news/53215.html

相關(guān)文章:

  • 麗水市建設(shè)工程招標(biāo)網(wǎng)站百度官方客服
  • 平谷住房和城鄉(xiāng)建設(shè)委員會(huì)網(wǎng)站微信朋友圈產(chǎn)品推廣語(yǔ)
  • 做項(xiàng)目的編程網(wǎng)站seo關(guān)鍵詞推廣公司
  • 企業(yè)門戶網(wǎng)站開發(fā)代碼簡(jiǎn)單網(wǎng)站建設(shè)優(yōu)化推廣
  • 金湖網(wǎng)站建設(shè)搜索引擎排行榜
  • 河南省村鎮(zhèn)建設(shè)處網(wǎng)站南寧seo推廣公司
  • 自己做的網(wǎng)站根目錄哪里找到網(wǎng)絡(luò)推廣seo怎么弄
  • 網(wǎng)站建設(shè)案例咨詢2023年5月最新疫情
  • 北京設(shè)計(jì)機(jī)構(gòu)合肥關(guān)鍵詞優(yōu)化平臺(tái)
  • 元氏縣城有做網(wǎng)站廣告的嗎五合一網(wǎng)站建設(shè)
  • 贛州網(wǎng)站制作找哪家好seo技術(shù)培訓(xùn)廣東
  • wordpress怎么使用新浪ajax網(wǎng)絡(luò)優(yōu)化軟件有哪些
  • h5做的網(wǎng)站如何連接數(shù)據(jù)庫(kù)如何創(chuàng)建一個(gè)網(wǎng)頁(yè)
  • 公司網(wǎng)站建設(shè)制作全包廣東病毒感染最新消息
  • 綠色做環(huán)保網(wǎng)站的好處外貿(mào)seo優(yōu)化
  • 抄襲網(wǎng)站后臺(tái)會(huì)侵權(quán)嗎瀏覽器打開網(wǎng)站
  • 網(wǎng)站建設(shè)的策劃灰色關(guān)鍵詞排名代做
  • 江西semseo設(shè)置是什么
  • 專業(yè)網(wǎng)站建設(shè)公司興田德潤(rùn)簡(jiǎn)介百度上做優(yōu)化一年多少錢
  • 建設(shè)網(wǎng)站物業(yè)經(jīng)理上崗證陳俊華2022年適合小學(xué)生的新聞
  • 賭博網(wǎng)站開發(fā)人員犯法嗎一個(gè)公司可以做幾個(gè)百度推廣
  • 網(wǎng)站搭建類型推廣平臺(tái)收費(fèi)標(biāo)準(zhǔn)
  • 制作網(wǎng)站的登錄界面怎么做網(wǎng)站seo排名優(yōu)化價(jià)格
  • 電子商務(wù)主要干嘛seo怎么發(fā)布外鏈
  • 哪個(gè)設(shè)計(jì)網(wǎng)站做兼職好百度推廣賬戶登陸
  • 關(guān)于手機(jī)市場(chǎng)營(yíng)銷的論文采集站seo賺錢輔導(dǎo)班
  • 做門戶網(wǎng)站賺錢嗎深圳營(yíng)銷策劃公司十強(qiáng)
  • 規(guī)模以上工業(yè)企業(yè)如何認(rèn)定成都seo網(wǎng)絡(luò)優(yōu)化公司
  • 全面的手機(jī)網(wǎng)站建設(shè)推廣營(yíng)銷軟件app
  • 有用node.js做的網(wǎng)站嗎哪家培訓(xùn)機(jī)構(gòu)學(xué)校好