Ogre渲染最佳化心得(五) — 用硬體蒙皮代替軟體蒙皮,用GPU代替CPU

來源:互聯網
上載者:User

骨骼動畫的計算,是比較費時的,因為資料量大.

這部分資料,用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; }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.