WebGL優化的技巧--持續更新中

Webgl性能瓶頸,圖形繪製是異步的流水線繪製以及瀏覽器的本身的缺陷。嘗試優化的方法如下:

  • 找到性能瓶頸,嘗試降低CPU或者GPU的時鐘頻率去測試哪個效率低
  • 紋理受限,可以採取 減少canvas的長寬或者使用低分辨率的紋理測試;webgl 紋理綁定伸展和收縮效果時,gl.NEAREST 是最快的但會產生塊狀效果,gl.LINER因爲是取平均值,會產生模糊
  • 將Mip映射應用於紋理貼圖
  • 處理webgl丟失上下文的問題
  • 不要經常切換program,在切換program和在着色器中使用if else語句都需要進行考量

高級shader優化,基本思路是找到性能瓶頸,嘗試降低CPU或者GPU的時鐘頻率去測試哪個效率低:

  • 避免在頂點數組數據中使用常量
  • 在webgl中,使用drawElements()的gl.TRIANGLE_STRIP 結合退化三角形 比使用drawArrays()的gl.TRIANGLE方式節省內存,並且減少使用drawArrays和drawElements的次數
  • 頂點組織順序按照數組排序,不要使用亂序,因爲難以命中緩存
  • 減少使用drawArrays和drawElements的次數
  • 避免繪製時從GPU讀回數據或狀態,例如,gl.getError() gl.readPixels(), 影響流水線的實現
  • 用webgl inspector找出冗餘的調用,因爲webgl是的狀態是跨幀持續的,減少使用改變webgl狀態的方法。比如gl.enable(XXX),只執行一次就行了

模型優化:

  • 用細節層次簡化模型(LOD技術)

其他新的怪異想法:

  • 利用WebAssembly技術,提高Web應用程序的性能;
  • 利用OffscreenCanvas+Web Worker方案,OffscreenCanvas是另外一個作爲幕後計算的Canvas與幕前顯示的Canvas做頻繁替換

 

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