體渲染最重要的乙個優化就是減少gpu的取樣工作。測試gpu的材質填充率能夠指導我們的工作。要知道為什麼gpu在800*600的環境中只能達到12fps麼?這就要看gpu每秒鐘取樣的次數啦。
程式原理很簡單,分幾步:建立視窗->生成和設定紋理->載入shader->渲染。具體如何做要看程式裡面啦,這裡就不再貼出來了。
直接說最後的測試的結果了。我的8800gts(g80)官方資料說材質填充率能夠達到24billion/sec,官方資料給的核心頻率500mhz,著色器頻率1200mhz,視訊記憶體800mhz。我將我的顯示卡也按照這個資料進行了降頻。
測試環境:視窗800*600,3d貼圖256*256*256,資料是luminace_alpha,每個畫素2byte。每個畫素的shader取樣3d貼圖512次。
最後得到測試fps為11.98幀。算算:800*600*512*11.98=2,944,204,800,因為是3d紋理所以每個取樣實際要有8次取樣工作,所以最終的材質填充率:23,553,638,400,和24billion/sec很接近了。
換用2d貼圖可以得到相似的結果,只是fps會快一倍。原因是三線性取樣的工作量是二線性取樣的兩倍,很顯然fps會提公升一倍。
那麼怎麼去優化呢?下面做一些測試:
減小3d貼圖的大小,以便盡可能的裝到cache裡面。直接設定為1*1*1,結果發現效能一樣。
更換3d貼圖的internal format為rgba,發現效能一樣。
超頻:超核心,效能提公升百分比和超頻百分比幾乎一樣。超shader,幾乎沒變化。超視訊記憶體,幾乎沒變化。
降頻:降核心,效能降低百分比和降頻百分比幾乎一樣。降shader,幾乎沒辦法。降視訊記憶體,一直降到400mhz也沒有變化。
降低每畫素取樣率:降低為256後,效能提公升一倍,和預期一樣。
最終的結果很明顯。3d貼圖的取樣已經成了整個系統的瓶頸,已經讓顯示卡的貼圖單元達到了極限。shader處理器由於計算量很小,所以還很空閒。由於取樣過濾的繁忙,貼圖單元也不需要很大的視訊記憶體頻寬,所以視訊記憶體的影響幾乎沒有。
優化的措施:只能盡可能的減少取樣次數,或者找更快的卡。目前看來只有g92的9800gtx或者8800gts的取樣率能夠達到 43.2billion/sec以上,gtx280官方資料也只能達到48.2billion/sec,gtx260 36.9billion/sec。9800gx2能夠達到76.8billion/sec,就是不知道實際sli的效能能不能滿足需要了。看來如何選擇適 合體渲染的卡已經有乙個理論和實際的指導了。
測試GPU的材質填充率
體渲染最重要的乙個優化就是減少gpu的取樣工作。測試gpu的材質填充率能夠指導我們的工作。要知道為什麼gpu在800 600的環境中只能達到12fps麼?這就要看gpu每秒鐘取樣的次數啦。程式原理很簡單,分幾步 建立視窗 生成和設定紋理 載入shader 渲染。具體如何做要看程式裡面啦,這裡就不再貼...
Unity 如何降低UI的填充率
1 首先簡單介紹一下什麼叫填充率 fill rate 填充率 是指顯示卡每幀或者說每秒能夠渲染的畫素數。在每幀繪製中,如果乙個畫素被反覆繪製的次數越多,那麼它占用的資源也必然更多。目前在移動裝置上,fillrate 的壓力主要來自半透明物體。因為多數情況下,半透明物體需要開啟 alpha blend...
測試中遇到的資料填充
在我們日常的測試工作中,可能會經常遇到要將儲存空間填充的需求。笨辦法可能是我們會往裡面拷貝大檔案,速度慢不說,而且對於需要精確大小填充需求,不易控制 那麼有沒有別的辦法呢 知道的人都知道,不知道的就學習一下吧 我們今天的主角就是 dd 命令,可用於安卓 以及 linux 上 需求例項1 將sdcar...