滄海桑田話存貯 內存/顯存發展編年史
顯存和內存的功能其實十分相似,內存服務于CPU,系統進程和常用資源都是暫存在內存中,因為速度帶寬快于其他存儲介質,可以最快的和CPU交換數據提高整機性能,顯存也一樣,不同的是它服務于GPU,而且比內存速度更快,一般來說,顯存中所存儲的數據主要由以下5部分組成:幀緩存(Frame buffer)、后臺緩存(Back buffer)、Z軸緩存(Z-buffer)、紋理數據和幾何數據。
簡單的說幀緩存里存放的就是我們實際將在屏幕上看到的內容,這部分的容量計算方式大致為:屏幕寬度方向上的像素數目×屏幕高度方向上的像素數目×每個像素所用的字節數量,也就是顯示分辨率的大小。
后臺緩存顧名思義,就是第2幀緩存。當屏幕上顯示出當前幀緩存的內容時,下一幀的顯示內容已經被存放在后臺緩存里了。而當后臺緩存的內容顯示時,幀緩存則寫入第3幅畫面……如此交替工作。因此,后臺緩存的計算方式與幀緩存完全相同。但是后臺緩存使用量可能會比幀緩存還要大,尤其是在游戲中FPS很高時!
Z軸緩存用來記錄像素到屏幕的距離,這樣當兩個顯示區域中的像素在屏幕上重疊時,如果新繪制的像素其Z值比Z值緩存中記錄的數據小,那么就不必重新繪制此像素。這可以減輕GPU的計算量。類似于幀緩存,Z軸緩存其容量計算公式為:屏幕寬度方向上的像素數目×屏幕高度方向上的像素數目×每個像素Z值緩存所用的字節數量。
紋理數據以及幾何數據因程序而異,涉及的方方面面非常復雜,無法定量計算。
● 顯存在游戲中的使用情況更加復雜:
以上幾項分析都是在沒有打開FSAA(全屏抗鋸齒)的情況下做的原理解析。實際上FSAA由于要進行多倍取樣,因此程序所需的顯存容量理論上將成倍增長。只有更高的顯存容量和傳輸位寬,才能夠滿足GPU的需要。另外,近幾年3D圖形技術發展迅猛,HDR、Tessellation、各種陰影渲染成了游戲必備,DX10/11這些新的特性將顯存的需求拉至頂峰!
總而言之,顯存容量決定存儲圖形數據信息的多少,構成顯存容量的幾大部分當中,幀緩沖數據和Z緩沖數據的大小在同一款游戲中一般是固定的,所占用的顯存容量并不是很多,而紋理數據大小占據了相當大的一部分,而且隨著渲染畫面的復雜程度和抗鋸齒多倍取樣等特效,GPU對顯存的需求會大幅波動!

▲ 12款游戲顯存占用率總結
測了一大堆游戲,筆者根據經驗談一談游戲對顯存的需求到底體現在哪,也順便揭露幾個誤區:
1. 像Crysis和FarCry2這種畫面很華麗的游戲,由于大量使用了高精度紋理貼圖,顯存消耗十分可觀,但開發商也會比較收斂的將顯存使用控制在高端顯卡的物理顯存容量范圍內,所以大部分游戲的顯存用量不會超過主流的1GB;
2. 像星際2這種屏幕內擁有大量物體,景物模型太多導致顯存用量大增。由于這些單位都是由玩家親手建造出來的,并不在開發商的控制范圍內,因此顯存消耗急劇膨脹。大容量顯存是必須的,通過我們的測試來看,GTX460 768MB玩星際2時,場景稍微復雜一點就會很卡(特效全開+AA),而1GB版本也會在多人大混戰時出現掉幀情況,所以擁有1GB+顯存的GTX470/480還有特殊版本的顯卡很適合追求完美畫質的星際2玩家。
3. 抗鋸齒毫無疑問是最消耗顯存的圖形技術。noAA和4xAA相比,在所有游戲中顯存使用量都會增加20%左右,大概是100MB-200MB甚至更多。
4. 理論上來說提高分辨率會多消耗一些顯存,但實際上并非絕對的,因為提高分辨率之后,由于游戲FPS的降低,顯存內的數據更新頻率放緩,使用量會有一定程度的減少,此消彼漲之后,其實顯存使用量不一定會增加。除非由于CPU的限制提高分辨率后FPS并沒有降低多少,或者分辨率增加好幾倍,那么就會消耗不少的顯存。
5. 本次測試最高分辨率定格在1920x1080,如果大家使用更高的2560x1600(分辨率是1080p的兩倍以上),或者是組建三屏(三倍分辨率)還有3D系統(雙倍運算量)的話,那么顯存消耗量就另當別論了。事實上2GB版本的顯卡正是為這些有特殊需要的用戶而定制的。

在過去的十幾年時間里,DirectX已經穩步成為微軟Windows平臺上進行游戲開發首選API。每一代DirectX都帶來對新的圖形硬件特性的支持,每次版本變更都能幫助游戲開發者們邁出驚人的一步,而從主流游戲內存占用測試來看,顯存512M已經越來越落伍了,很多游戲的流暢運行都需要768M乃至更高容量顯存的支持。當然顯存胃口超過1G顯存的游戲還是鳳毛麟角,作為普通消費者多花選擇些許預算選擇1G的產品絕對是物有所值,但是目前沒有必要為了一兩款游戲而去追求更大容量顯存。
關注我們


