Ogre渲染優化心得(五) -- 用硬件蒙皮代替軟件蒙皮,用GPU代替CPU

骨骼動畫的計算,是比較費時的,因爲數據量大.

這部分數據,用CPU計算,就是軟件蒙皮,用GPU去計算,就硬件蒙皮

 

1.軟件蒙皮

 

Ogre本身已經實現了軟件蒙皮,默認情況下就是軟件蒙皮,計算的代碼在void Entity::updateAnimation(void)

 

2.硬件蒙皮

 

需要用shader,把計算放到GPU裏面去處理,而shader的代碼,也不用自己去寫,Ogre本身例子就帶有一個支持2個權重的頂點程序,

因爲一個頂點最多綁定4個骨頭,最多4個權重,所以頂點也稍微麻煩,要4種情況都實現,那麼,配置頂點程序就應該在代碼裏面動態添加,而不是寫在.material裏面.

更好的是用火炬之光的硬件蒙皮,有一套完整的實現,

 

我們需要硬件蒙皮麼?答案是現在的每個3D遊戲,都應該有.

天龍和火炬之光都用到了硬件蒙皮,因爲他能大大地提高運行速度,

而火炬之光,唯一用到的shader程序,就硬件蒙皮,然後就找不到其他任何shader程序了.

所以,硬件蒙皮應該算是最重要的shader程序,效率啊.

 

我們用Ogre本身的例子來測試速度

 

 

 

 

6個人,132和198的fps,差距還是不小,

 

 

//////////////////////////////////////////////////////////////////////////////////////

另外,如果用了shader程序,那麼我前面提到的XRAY的實現方法就要改了

 

因爲前面的方法是針對固定渲染管線的,我是禁止渲染狀態改變的方法來實現的,如果有shader程序,禁止了就不行

 

不過可以採用另外的方法,就是等pass的屬性設置到渲染狀態以後,我再更改渲染狀態,在哪改?在SubEntity中重寫下面的函數,

就可以在渲染前任意更改了

  virtual bool preRender(SceneManager* sm, RenderSystem* rsys)
                { (void)sm; (void)rsys; return true; }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章