Ogre中的批次渲染技術 Batching

2021-04-22 18:23:26 字數 1165 閱讀 4598

不管在什麼引擎中

渲染操作都是乙個非常耗費系統資源的過程,乙個物體要渲染到螢幕上就必須要經過一次渲染操作,假如場景中有幾萬棵相同的樹,那麼系統也會執行幾萬次的渲染操作,這樣程式效率會非常慢,如果能將這些具有相同渲染狀態的樹,用一次渲染操作都畫出來,那麼效率就會提公升好幾倍。

ogre

引擎所提供的

ogre::staticgeometry

類,就是實現批次渲染的操作。如果一些物體載入場景後就不打算在進行旋轉,縮放,移動等操作的話,那麼就可以以靜態幾何體的型別載入場景。

但是批次渲染也並不是在所有情況下效率都高的,如果場景中有幾萬棵樹,但是攝像機的視角中假如某角度只能看見一棵樹,那麼

ogre

也會將幾萬棵樹一起渲染出來,這樣反而效率不如有視椎裁剪功能的場景結點物體,這種情況下

ogre

也提供了乙個解決方案,那就是把所有靜態幾何體劃分區域,進行分區域批次渲染,如果某些區域是攝像機看不到的地方,那麼

ogre

就不會渲染它,這樣可以保證在任何視角下,系統都有穩定的渲染效率。

具體劃分方法是首先在場景中設定乙個區域劃分原點,這個原點就是將要向四周劃分區域的中心,然後設定每乙個區域的體積xyz,然後新增物體,最後呼叫build()方法,ogre會自動為所有物體劃分渲染區域。

具體**:

ogre::staticgeometry* m_pstaticgeometry=null;

m_pstaticgeometry = m_pscenemgr->createstaticgeometry("dims/staticgeometry");//建立靜態幾何體

m_pstaticgeometry->setregiondimensions(vector3(1000,1000,1000)); //設定分塊批次渲染的尺寸

m_pstaticgeometry->setorigin(vector3(500,500,500));              //設定批次渲染分塊的原點位置

//將若干個物體新增到靜態幾何體中,注意這裡同一mesh的物體只需要傳入同乙個實體的指標即可

m_pstaticgeometry->addentity(pentobject, position, orientation, scale);

//劃分靜態幾何體的批次渲染區域

m_pstaticgeometry->build();

Ogre中的批次渲染技術 Batching

不管在什麼引擎中渲染操作都是乙個非常耗費系統資源的過程,乙個物體要渲染到螢幕上就必須要經過一次渲染操作,假如場景中有幾萬棵相同的樹,那麼系統也會執行幾萬次的渲染操作,這樣程式效率會非常慢,如果能將這些具有相同渲染狀態的樹,用一次渲染操作都畫出來,那麼效率就會提公升好幾倍。ogre引擎所提供的ogre...

Ogre的渲染優化心得

做商業網路遊戲的話,效率是乙個不可避免的話題,為了留更多的空間給客戶端的邏輯,那麼渲染模組就應該盡量高效.小弟只 一下ogre的渲染優化,以大家熟悉的天龍八部為例.以網上流傳版本的天龍 來看,ogre和cegui部分的渲染都有嚴重的效能問題,ogre 地形的實現,乙個tile,只按材質做了批次優化,...

OGRE找不到渲染裝置的問題

幾經折騰,全靜態連線執行時的靜態庫方式 和全動態連線執行時的動態庫方式都編到能執行。但啟動時發現沒有找到渲染裝置 我沒有讓他彈出自己選擇配置的對話方塊,自己的程式幫他配置的 仔細一看ogre的文件,乖乖。root類的建構函式有三個預設引數 root const string pluginfilena...