Sunday, March 22, 2009

改做背景地圖的架構

在上次的 SceneNode 測試中,得出了一個結果,就是在 OGRE 中如果有很多 SceneNode 的話,速度便會快速地下降。後來我想想,我的 Ogng'3D 中的背景地圖的 Portal 處理,每個背景物件都使用了一個 SceneNode,這樣便用了很多 SceneNode 來定義 Sectors,就以那個「多 SceneNode 便慢下來」的情況下,我便決定重新去想想,如何改善現在的 Portal 地圖架構,改變處理方法來減少 SceneNode 使用量。

改動已有的系統需要不少工程,因為從 Load 入 Portal、載入每個背景物件的 3D 資料,以致測試 Portals / Sectors 的等等步驟都牽涉到。

在今天 ( 星期六 ),用了一整天的時間 ( 真的超過 12 個小時呢 ... ),從兩晚前草草訂下的計劃中,完成了改造。改造後的背景地圖仍以 Portals / Sectors 為主,在背景地圖組成方面就改了「 以 Material 來做組別 」,使用同一個 Material 的背景物件,都用同一個 SceneNode 及 Entity 組合起來,就是說 SceneNode 數量和 Material 數量掛勾,而每一個背景物件就是一個 SubEntity。因為在我設計的地圖的資料中,已有各個背景物件的資料,在測試 Portals / Sectors 方面的改動,只是在測試後,改變相關 SubEntity 的 Visible 值便可。

這樣使用 SceneNode 量便可以減少,從而可減少 OGRE 中的 Drawcall 數量,增加 Render 背景地圖的速度。希望這個改動工程真的有效吧,因為我還未有一個有很多背景物件做測試的地圖 ......。
A simple Portalized game scene

1 comment:

MiNg said...

加油啊!! 期待你 portal 測試的成果!!