第22.1節(jié) 性能篇-合并幾何體

天下武功卒茬,唯快不破

最近網(wǎng)友問了關(guān)于點(diǎn)云岔乔、傾斜攝影數(shù)據(jù)的性能優(yōu)化問題酥筝。本來想刀槍劍戟、斧鉞勾叉給弄了雏门,但是后來想性能其實(shí)是個(gè)系統(tǒng)問題嘿歌,要在第22節(jié)分成數(shù)小節(jié)扎扎實(shí)實(shí)的講一講。

鳴謝

非常感謝王銳王大神的cookbook茁影,我準(zhǔn)備主要參考它里面關(guān)于性能的一章宙帝。也就是第8章。本節(jié)講述性能優(yōu)化的最基本的手段:合并幾何體募闲。

本節(jié)資源

本文集包括本節(jié)所有資源包括模型代碼都在此下載步脓,按節(jié)的序號(hào)有文件或文件夾:
注意:務(wù)必使用瀏覽器打開:
鏈接:https://pan.baidu.com/s/13gwJLwo_LbRnN3Bl2NXXXw
提取碼:xrf5

使用方法:注釋掉第32行的宏MERGE_GEOMETRY你會(huì)得到優(yōu)化前后的結(jié)果

理論知識(shí)

OSG最終繪制的都是osg::Geometry,然后Geometry會(huì)存放在Node里。比如我們要繪制10條線靴患,那么我們有兩種方法仍侥,一種方法是定義10個(gè)Geometry,每個(gè)Geometry定義兩個(gè)頂點(diǎn)繪制1條線鸳君。另一個(gè)方法是我們定義1個(gè)Geometry访圃,里面放20個(gè)頂點(diǎn),一次性繪制10條線相嵌。這兩種方法的性能差異很大腿时。

方法一因?yàn)槎x了10個(gè)Geometry,那么CPU端就會(huì)做Event饭宾、Cull批糟、Update、Draw都會(huì)針對(duì)10個(gè)結(jié)點(diǎn)來做看铆,很花性能徽鼎。GPU也會(huì)接受10次來自CPU端的數(shù)據(jù),之間通信也會(huì)增加弹惦,GPU端的繪制工作量也會(huì)增加變緩否淤。如下是cookbook8,繪制了300x300=90000個(gè)Geometry棠隐。每個(gè)Geometry只有4個(gè)頂點(diǎn)時(shí)的數(shù)據(jù)繪制效率:


0.PNG

我們可以看到幀率只有2.46幀石抡,筆者用的是DEBUG模式。顯卡是GTX1650Ti助泽,顯存4G啰扛。從圖中可以看到大量的時(shí)間花在了cull和draw上。尤其是cull嗡贺,因?yàn)榻Y(jié)點(diǎn)數(shù)量多了隐解,哪怕只以視錐體做揀選cull的時(shí)間就會(huì)很長。

而方法二是只定義1個(gè)Geometry诫睬,壓入了300x300x4=36萬個(gè)頂點(diǎn)煞茫,也是90000個(gè)四邊形,一個(gè)四邊形是4個(gè)頂點(diǎn)摄凡。繪制的結(jié)果是一模一樣的续徽,但是其性能就會(huì)大幅提升:


1.PNG

可以看到,因?yàn)橹挥幸粋€(gè)結(jié)點(diǎn)架谎,沒有什么好揀選的炸宵,于是cull的時(shí)間大幅縮短。Draw和GPU的時(shí)間也均有優(yōu)化谷扣。

總之來說土全,將多個(gè)Geometry合并成一個(gè)Geometry幾乎是業(yè)界普遍認(rèn)為最簡單捎琐、最有效、最普遍裹匙、最應(yīng)該使用的優(yōu)化方法瑞凑。也就是我們追究求的就是CPU盡量少次多量的向GPU提交數(shù)據(jù)。

OSG中的合并工具

OSG有個(gè)類叫做osgUtil::Optimizer概页,大家打開后就發(fā)現(xiàn)里面有好多的優(yōu)化都在里面籽御,其中就有:MERGE_GEOMETRY,當(dāng)我們使用如下語句時(shí)惰匙,正常的就會(huì)將結(jié)點(diǎn)的Geometry進(jìn)行合并:

    osgUtil::Optimizer optimizer;
    optimizer.optimize(loadedModel.get());

看其內(nèi)部使用了一個(gè)工具類的方法叫做:

        MergeGeometryVisitor mgv(this);
        mgv.setTargetMaximumNumberOfVertices(10000);
        node->accept(mgv);

它的思想也很簡單技掏,先把Group給一級(jí)一級(jí)合,然后多個(gè)Geometry合成一樣项鬼。能合并的PrimitiveSet也者合并哑梳。

osgUtil::Optimizer只能進(jìn)行一些通用的合并。我們理解了思想之后就可以手動(dòng)的或者自己針對(duì)自己的場景寫個(gè)性化的工具绘盟,以免不想合的被合了鸠真,想合的合不了。

代碼解析

這一節(jié)的代碼實(shí)在是有點(diǎn)簡單龄毡,沒有什么好解析的吠卷,可以從網(wǎng)盤上自己下載下來看看就明白了本節(jié)所描述的觀點(diǎn)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沦零,一起剝皮案震驚了整個(gè)濱河市祭隔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蠢终,老刑警劉巖序攘,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寻拂,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丈牢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門祭钉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人己沛,你說我怎么就攤上這事慌核。” “怎么了申尼?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵垮卓,是天一觀的道長。 經(jīng)常有香客問我师幕,道長粟按,這世上最難降的妖魔是什么诬滩? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮灭将,結(jié)果婚禮上疼鸟,老公的妹妹穿的比我還像新娘。我一直安慰自己庙曙,他們只是感情好空镜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捌朴,像睡著了一般吴攒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上砂蔽,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天舶斧,我揣著相機(jī)與錄音,去河邊找鬼察皇。 笑死茴厉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的什荣。 我是一名探鬼主播矾缓,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稻爬!你這毒婦竟也來了嗜闻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤桅锄,失蹤者是張志新(化名)和其女友劉穎琉雳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體友瘤,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翠肘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辫秧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片束倍。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖盟戏,靈堂內(nèi)的尸體忽然破棺而出绪妹,到底是詐尸還是另有隱情,我是刑警寧澤柿究,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布邮旷,位于F島的核電站,受9級(jí)特大地震影響蝇摸,放射性物質(zhì)發(fā)生泄漏婶肩。R本人自食惡果不足惜办陷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狡孔。 院中可真熱鬧懂诗,春花似錦、人聲如沸苗膝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辱揭。三九已至离唐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間问窃,已是汗流浹背亥鬓。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留域庇,地道東北人嵌戈。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像听皿,于是被迫代替她去往敵國和親熟呛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344