Unity的Mesh合并(0)

前言

unity引擎中渲染代價(jià)的指標(biāo)是場(chǎng)景中網(wǎng)格(Mesh)的數(shù)量淮逻,對(duì)顯卡來(lái)說(shuō)渲染一個(gè)100面的物體和渲染一個(gè)1500面的物體幾乎是等價(jià)的,于是當(dāng)多個(gè)物體的材質(zhì)(Shader)相同時(shí),可以把他們的網(wǎng)格合并起來(lái)侵歇,然后共用一個(gè)材料(Material)來(lái)降低渲染的成本碍彭,達(dá)成優(yōu)化游戲體驗(yàn)的效果。

這里我們把對(duì)材料的共用模糊化了摸袁,其實(shí)這也是一個(gè)復(fù)雜的過(guò)程钥顽,后文中會(huì)詳細(xì)描述其原理和算法。



什么樣的物體可以合并靠汁?

場(chǎng)景中有那么多物體蜂大,在進(jìn)行合并之前闽铐,我們需要先確定哪些物體是可以合并在一起的?

1.shader相同的物體才可以合并

物體屬性面板

觀察物體的屬性面板奶浦,我們發(fā)現(xiàn)物體可能有不同的材料兄墅,這些材料會(huì)有不同的shader。shader是也是使用編程語(yǔ)言編寫(xiě)的由gpu處理的财喳,不同的shader渲染出的效果是不一樣的察迟。因?yàn)槲覀兒喜⑵饋?lái)的物體的網(wǎng)格是一個(gè)合并的網(wǎng)格,使用的是合并的材料耳高,每個(gè)材料只能有一個(gè)shader屬性扎瓶,這也就限制了我們要合并的物體的材料的shader必須要相同。


合并的物體


合并物體的網(wǎng)格
合并物體的材料

2.要合并的物體需要處于一定范圍內(nèi)

多個(gè)物體合并了之后泌枪,成為一個(gè)物體概荷,若這個(gè)物體的mesh分布在場(chǎng)景中的各個(gè)地方,無(wú)疑是對(duì)資源的一個(gè)浪費(fèi)碌燕。極端地來(lái)說(shuō)误证,若我們將一萬(wàn)個(gè)物體合并成了一個(gè),攝像機(jī)所看到了這一萬(wàn)個(gè)之中的一個(gè)修壕,其他九千九百九十九個(gè)雖然對(duì)玩家不可見(jiàn)愈捅,但因?yàn)槭峭粋€(gè)物體,所以也渲染了出來(lái)慈鸠,這樣的資源浪費(fèi)是無(wú)必要的蓝谨。

于是我們?cè)诤喜⒅皶?huì)將場(chǎng)景劃分為多個(gè)正方體,每個(gè)正方體內(nèi)的物體才能互相合并在一起青团,以此避免合并出來(lái)物體的mesh分散的情況譬巫。

3.物體的光照貼圖需要相同(lightmapindex屬性相同)




一個(gè)很General的算法


變量的數(shù)據(jù)結(jié)構(gòu)及意義

在此處先將mesh合并整個(gè)過(guò)程的大體算法描述出來(lái),細(xì)節(jié)部分在后篇展開(kāi)解釋督笆。

當(dāng)然在描述算法前芦昔,先說(shuō)明算法中用到的變量的數(shù)據(jù)結(jié)構(gòu)及其意義:

List<MeshFilter> AllMeshFiltersInScene : 場(chǎng)景中所有meshfilter的鏈表

List<MeshRender>?AllMeshRenderersInScene?: 場(chǎng)景中所有meshrenderer的鏈表

List<GameObject> AllGameobjectsInScene?: 場(chǎng)景中所有Gameobject的鏈表

Dictionary<Shader, Dictionary<Texture2d, List<int>> ShaderToTextures? : 場(chǎng)景中所有的Shader到其貼圖的映射(在合并之前,所有貼圖都是貼在材料之上的娃肿,這些材料有自己的Shader咕缎,就視為這個(gè)貼圖的Shader。只有Shader相同的貼圖才能打包到一個(gè)圖集中料扰,他們的mesh才能合并在一起)

List<List<Gameobjcet>> CubesOfGameobjects : 場(chǎng)景中的正方體數(shù)組锨阿,里面存著這個(gè)正方體里的物體

Dictionary<Gameobject, int> GameObjectToIndex : 建立物體到其索引的映射


算法

1.FindAllMeshesInScene : 找到場(chǎng)景中所有MeshFilter組件,存在AllMeshFiltersInScene记罚,據(jù)其還可以獲得帶這個(gè)組件的物體存在AllGameobjectsInScene?以及這個(gè)物體的其他有用組件如MeshRenderer存在AllMeshRenderersInScene

2.PackAllTexturesInScene && DividingTextures: 將場(chǎng)景內(nèi)所有的貼圖打包成若干個(gè)圖集(圖集,即是貼圖的集合壳嚎;如前所述桐智,Mesh合并之后多個(gè)物體成為一個(gè)物體末早,這個(gè)物體使用的是一個(gè)合并的Mesh,合并的材料说庭,這個(gè)合并的材料當(dāng)然就有一個(gè)合并的貼圖集合然磷,即為圖集)

3.DoCombine : 遍歷場(chǎng)景內(nèi)的每個(gè)正方體,對(duì)其內(nèi)的物體進(jìn)行合并條件判斷后刊驴,分組進(jìn)行合并

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末姿搜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捆憎,更是在濱河造成了極大的恐慌舅柜,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躲惰,死亡現(xiàn)場(chǎng)離奇詭異致份,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)础拨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)氮块,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诡宗,你說(shuō)我怎么就攤上這事滔蝉。” “怎么了塔沃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵蝠引,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我芳悲,道長(zhǎng)立肘,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任名扛,我火速辦了婚禮谅年,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肮韧。我一直安慰自己融蹂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布弄企。 她就那樣靜靜地躺著超燃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拘领。 梳的紋絲不亂的頭發(fā)上意乓,一...
    開(kāi)封第一講書(shū)人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音约素,去河邊找鬼届良。 笑死笆凌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的士葫。 我是一名探鬼主播乞而,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慢显!你這毒婦竟也來(lái)了爪模?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荚藻,失蹤者是張志新(化名)和其女友劉穎屋灌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鞋喇,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡声滥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侦香。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片落塑。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖罐韩,靈堂內(nèi)的尸體忽然破棺而出憾赁,到底是詐尸還是另有隱情,我是刑警寧澤散吵,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布龙考,位于F島的核電站,受9級(jí)特大地震影響矾睦,放射性物質(zhì)發(fā)生泄漏晦款。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一枚冗、第九天 我趴在偏房一處隱蔽的房頂上張望缓溅。 院中可真熱鬧,春花似錦赁温、人聲如沸坛怪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袜匿。三九已至,卻和暖如春稚疹,著一層夾襖步出監(jiān)牢的瞬間居灯,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穆壕,地道東北人待牵。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像喇勋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子偎行,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 原文地址 http://www.fx114.net/qa-75-172454.aspx 使用Profiler工具...
    IongX閱讀 5,870評(píng)論 1 11
  • 111. [動(dòng)畫(huà)系統(tǒng)]如何將其他類(lèi)型的動(dòng)畫(huà)轉(zhuǎn)換成關(guān)鍵幀動(dòng)畫(huà)川背? 動(dòng)畫(huà)->點(diǎn)緩存->關(guān)鍵幀 112. [動(dòng)畫(huà)]Unit...
    胤醚貔貅閱讀 13,065評(píng)論 3 90
  • 有一次,我問(wèn)老艾蛤袒,你怎么描述咱們的夫妻相處模式熄云?他沉思半晌來(lái)了一句擲地有聲的總結(jié):咱倆像是 a team。 我恍惚...
    弘曉隨喜閱讀 316評(píng)論 0 2
  • 今天讀村上的跑步妙真,里面有句話缴允,持之以恒,不亂節(jié)奏珍德。學(xué)英語(yǔ)的一大障礙就是很難長(zhǎng)期的保持相同的節(jié)奏练般。但那些不認(rèn)識(shí)的詞,...
    魚(yú)翅后花園閱讀 236評(píng)論 0 0
  • 雨霽出晴日锈候, 清風(fēng)云漾天薄料。 閑看古人賦, 黃葉落書(shū)前泵琳。
    飛飛_b4dc閱讀 283評(píng)論 2 7