如何處理OpenGL中VBO頻繁更改資料的問題?

時間 2021-05-11 11:41:48

1樓:zxx43

寫了一篇教程關於如何科學地合併drawcall 應該是可以解決這個問題 https://

zhuanlan /p/10

4279952

2樓:liujing7256

你思路對,VBO資料頻繁更新造成資料抖動。一般來說,為減少實體繪製次數和OpenGL 狀態切換,我們一般對顯示屬性(一般可以看成材質)一樣的實體幾何資料進行合併,但合併也講究方法,更新頻率少的實體劃歸為一類,材質相近的合成一組,比如靜態場景,背景;動態的實體分為一類,材質一致的合成一組。而不是一股腦的不分靜態、動態實體渲染屬性一直的都打包成乙個VBO。

VBO 數量盡可能少當然是好事,但不能只講究少,不講究靈活性,其實VBO數量控制在一定合理範圍內,比如一兩千內效能都是不錯的。原則是:渲染資料不變的實體盡量合成一組,資料動態變化的按一定粒度材質一致的合成一組,不是VBO越大越好, 比如只對「碎片化」(幾何圖元幾百個。。。

)實體的VBO 進行合併,大的就不要合併了,方便實體資料進行更新。VBO總使用量不要太多,比如過萬就不好了,需要優化。減少渲染狀態切換,引擎層面對實體按材質做好排序,分組的話,問題不大。

引擎層面考慮實體剔除,比如視錐體剔除或其它剔除策略也能提速不少。

不知你為何要用儲存裝置座標系下的座標?減少GPU矩陣計算?完全沒有必要。

3樓:柏莎

可以試試經典的動靜分離的思想。不能一刀切,要對所有的物體進行分組,經常動的在一組,不經常動的在一組。

至於DC還是動態合批,3D的unity是有標準的,比如900頂點以下才能動態合批,而且如果shader複雜,那麼這個頂點限制可能會變到300以下。

你的是2D遊戲,正常來講是可以做到完全動態合批的,不過動靜分離還是要做的哦。

4樓:kinrongzk

相當於batch,可以先變換到world space,再batch。之後更新view和projection matrix就行了

5樓:dodoleon

一般沒什麼關係,blend sharp也需要實時更新VBO的。但你的問題裡面,矩陣變換這個事情應該拿到GPU做,不應該在CPU做。

如何處理交易中的假突破?

steven 你要先定義什麼是真突破什麼是假突破。你認為的假突破,可能別人看來是真突破。所以問這個問題的人還沒搞懂交易並不是是與非的遊戲 叢林鳥 它山之石可以攻玉!銀行培訓員工辨別假鈔,不會拿一堆各種假鈔來學習,只學習辨別真鈔的幾個特徵!真正的突破一去不回頭,那麼好了,你還要期待那種一波三折的突破嗎...

如何處理職場中的越級匯報?

大飛哥聊職場 你在國企工作,分管領導可以這樣直接說的話,我覺得你就不要猶豫了,沒準你的機會來了,該怎麼匯報就怎麼匯報吧,國企是工作環境還是非常嚴謹,大家都很謹慎,既然可以直接說出來,讓你找他匯報,那你就要好好努力的去抓住這次機會去做溝通。如果換到普通的民營企業,這類事情出現,處理起來要複雜得多,因為...

如何處理戀愛中的年齡問題?

如果對方並不是出於其他目的而跟你有這樣的溝通,從這樣的情況上來看,他的態度是負責任的。我堅信愛情不會有年齡的限制,因此我建議題主多給自己和彼此信心。任何一段感情都會有堅持下去的困難,找準自己在這段感情中的角色很重要。而在我看來,你們之間的或多或少的代溝問題,仍然是需要互相積極解決的點。 高鑑 愛情是...