像素填充率-Fill rate
-
GPU每秒可以渲染到屏幕的像素數量。(估計公式:填充率 = 總像素數 x Shader復雜度 x Overdraw)
如果我們的游戲受到填充率的限制,那么說明我們的游戲每一幀輸出到屏幕的像素數量超過了GPU的承載限度。 -
要檢查是否是 填充率 導致的GPU瓶頸方式很簡單,
運行游戲,在Profiler窗口觀察GPU的效率
減小Game窗口的尺寸達到降低窗口分辨率的效果
再運行游戲,觀察GPU的效率,如果游戲的表現提升了,那么很可能就是填充率導致的問題。
Unity 最新的[官方文檔](Unity - Manual: Optimizations)也介紹了這個公式,並告訴大家一個評估是否填充率受限的方法:
game run faster if you decrease the display resolution? If yes, you are limited by fillrate. -
確定了是填充率導致的,我們可以通過以下幾個方面來進行優化:
片元着色器(Fragment Shader)是shader代碼塊中告訴GPU該如何逐像素渲染的部分,這部分代碼是由GPU來執行的,並且每一個像素都會被計算。復雜的片元着色器代碼常常是引起填充率問題的根源。
顯存帶寬-Memory bandwidth
-
顯存帶寬指的是GPU可以讀取和寫入的速率。
如果遇到顯存帶寬的問題,常常是由於我們使用了非常大的紋理以至於GPU無法快速的處理它。 -
如果檢查是否是顯存帶寬的問題,我們可以參考以下步驟:
運行游戲並關注GPU的性能情況
減少紋理的精度,並且可以在Quality Settings中進行相關設置。
再次運行游戲並且關注GPU的性能情況