2013年1月15日 星期二

關於最近在處理行動平台上Pixel Shader的效能問題…

最近行動平台紛紛流行起高解析度與視網模技術,雖然提高了解析度,但有些硬體卻沒相對提升Pixel Shader的Core能力,導致有發生了相同的Pixel Shader程式碼在Ipad2上比New Ipad執行效能還要好的狀況,這讓小弟非常的不高興(因為小弟就是買了New Ipad這個過渡時期的產品…),於是踏上了研究相關應對做法之路…

經過實驗後,整理出相關的解決方法…
  1. 拆成多次Pass,降低在一個Pass下Pixel Shader的複雜度:
    經實驗證明,可以有效提升效能,不過在某些情況下有限。
  2. 應用Render to texture的方式,來降低Pixel Shader所處理的次數,並用Project Textue的方式貼在最後的Final Mesh上:
    經實驗證明,可以大幅提升效能(小弟的水在NewIpad上,FPS就可以從20提升到60以上),這種做法與平台的解析度無關。
以下是相關影片:



夢想還在持續中…

6 則留言:

  1. 版主您好,小弟最近剛起步要摸索ORGE3D,看到大大經歷豐富,有個問題想請教您,ORGE3D有辦法做Interlace Stereoscopic嗎?不知道版主有沒有玩過,如有玩過是否能分享一下心得或者有sample code能分享

    回覆刪除
  2. 喔!你提到的是類似像3DS的3D畫面那種處理嗎?我自己沒有接觸過,
    你可以看看以下的文章:
    http://www.ogre3d.org/forums/viewtopic.php?p=299502
    http://www.ipcsit.com/vol24/33-ICICA2012-A0080.pdf
    希望對你有幫助。

    回覆刪除
    回覆
    1. 版主您好,對對~~我需要的就像是 那短篇論文的效果,那篇沒有提到方法,還是很感謝版主~~

      小弟目前卡在SkeletalAnimation,小弟看官方的sample然後依照sample寫到新的ORGE專案,人物出現了但不會動作,就不知道為什麼不會產生動作,能不能請版主幫小弟看一下問題出在哪裡

      小弟非常感謝版主

      刪除
    2. 動作不會出現,會不會是你沒有去撥放他呀!人物load進來後,要自己從Entity把AnimationStateSet抓出來,然後將你要的AnimationState從AnimationStateSet裡(傳入參數為名字)抓出來,之後再將其將狀態設為起動(setEnabled(EN_TRUE)),應該就可以了。如果還是不行,可能是你的skeleton不存在,或著是Mesh裡所記錄的檔名及路徑不對,或著是骨架跟Mesh不匹配,希望對你有幫助。

      刪除
  3. 我搞定了~~謝謝板大~~要先設定AnimationState為Sneak,在Load skeleton檔案,最後在指向回去給Animation,這樣人物就會動了,果然基本功還是要先打好~~

    有個問題是假設我的魚骨架是用IK~~那OGRE有支援IK嗎?

    回覆刪除
    回覆
    1. 沒有,IK是屬於物理引擎的議題,Ogre只是一個Render Eegine.

      刪除