超載
2021年6月22日,AMD正式解禁了FSR技術,這個于6月初在COMPUTEX上發(fā)布的新技術能夠讓顯卡游戲性能大幅提升,4K分辨率下最多提升200%。AMD表示,F(xiàn)SR是一項開源的跨平臺技術,旨在提高游戲幀率的同時,保證高品質、高分辨率的游戲體驗。FSR技術內置四檔模式——Ultra Quality模式、Quality模式、Balanced模式以及Performance模式,玩家可以根據(jù)自身需求來調整圖像質量和性能之間的平衡。
FSR技術對新顯卡還是老顯卡都很友好——不僅針對AMDRadeon RX 5000和Radeon RX 6000系列顯卡(包括移動版)進行了特別優(yōu)化,同時還可支持AMD Radeon RX 500系列顯卡、Radeon RX 480/470/460顯卡、Radeon RX Vega系列顯卡、所有配備了Radeon顯卡的AMD銳龍?zhí)幚砥?。更令人感到意外的是FSR技術開源,支持NVIDIA顯卡(部分)!這可比NVIDIA的DLSS技術聽起來“便宜多了”——畢竟DLSS技術是NVIDIA顯卡專屬的產物。
目前已經(jīng)有超過40個游戲廠商(或游戲引擎)確定支持FSR技術用以提升游戲運行幀率,而且后續(xù)將源源不斷提升游戲支持數(shù)量。包括后續(xù)的諸多游戲大作,都將提供對FSR技術的支持。
聽起來是不是神乎其技?在這個顯卡洛陽紙貴,如此緊俏的時機,F(xiàn)SR技術仿佛成了一道曙光,讓玩家可以用比較便宜甚至老舊的顯卡,實現(xiàn)暢玩大作的夢想。不過,你知道它是如何實現(xiàn)的、游戲又為什么會如此“費”顯卡嗎?這一切,我們不妨從3D圖形是如何生成的說開去……
早年的“3D”,實際上不過是CPU運算而來,比如《半條命》和《雷神之錘 2》在內的很多游戲,內部包含一個軟件渲染器,讓它沒有3D顯卡也可以正常運行。而今的3D圖形則需要顯卡本身進行大部分的運算,游戲中根本沒有軟件渲染器這個設計了。
3D圖形怎么產生的?
那么,3D圖形究竟是如何呈現(xiàn)在我們眼前的呢?準確地說,這應該被稱之為“3D實時渲染”。3D是相對而言的,1D其實就是指定位在一個線條中的位置,需要一個定位軸X軸,如A到B點為500個像素,這個線條就可以稱之為1D;相對的2D就復雜多了,它是一個平面,需要X、Y兩個軸的坐標來實現(xiàn),這樣的“面”稱之為2D;接下來自然就是3D了,3D在2D的基礎上多了一個維度,從定位軸上看,除了X、Y軸之外多了一個Z軸,用于表明它的維度。3D實時渲染,其實就是即時對X、Y、Z軸標明的數(shù)據(jù)進行圖形化渲染,把坐標點、坐標點之上的信息計算出來。
1990年代初的時候,3D圖形的渲染還處于“靜止”狀態(tài)——簡單說就是需要一幀一幀地進行渲染“繪畫”圖形,然后將每一幀其“連接”起來形成動態(tài)畫面,這樣做出來的內容,最多就是應用到電影、動畫上,根本不可能運用到需要實時動態(tài)展示的游戲中來。
那么3D畫面的即時渲染都需要做什么呢?這要從兩個方面說。先是3D圖形的制作,我們看到的3D圖形畫面,實際上都是一個框架的點(X、Y、Z軸)+無數(shù)線條勾勒而成,早期的3D游戲幾乎都是“大方塊”就很好地表明了這點。比如著名的3D游戲《VR戰(zhàn)士2》、《極品飛車2特別版》這兩個“真3D”游戲,以今天的眼光看不過是一堆大方塊而已。
那么如何計算這些點、面、線呢?以往這些主要節(jié)點的運算功能,都是依靠CPU來進行的,那時候的3D顯卡,準確說法應被稱為“3D加速卡”,游戲只是把繁雜但是“海量”的重復工作交付給3D加速卡,重要工作還是由CPU計算。當然,這對CPU本身也是有要求的,199 0年代中期開始的IntelPentium MMX、AMD K6-2這些具有多媒體指令集的CPU才能更高效地完成這些工作。
它們的協(xié)同流程基本是這樣的:運行游戲后,游戲的軟件渲染API 對CPU發(fā)出工作“要求”:給我計算這個人物的X、Y、Z軸,因為是實時渲染,CPU就必須不斷進行演算。計算完畢,把這些“半成品”交給顯卡,包括貼圖的信息(比如哪里要貼什么樣的圖,顏色又是什么)等等。這些內容會依據(jù)API接口來對接到顯卡上,比如3 D F X 顯卡的Glide API,(那個時代還沒有DirectX API和OpenGL API),由3D加速卡進行輔助運算,最終輸出到顯示器上,呈現(xiàn)給我們一個完整的動態(tài)3D畫面。
且不說因為性能、技術水平的落差,光是這樣的計算方式,CPU的工作極為繁重不說,3D加速卡所能應對的事情也極為有限,游戲3D即時渲染的畫面也不可能太過“精良”。于是人們就開始想辦法:我們能不能讓顯卡負責絕大部分的3D畫面即時渲染工作呢?
于是GPU(Graphics ProcessingU n i t)誕生了—— 帶有硬件T & L 單元的NVIDIA GeForce 256就是典型代表。不同于軟件渲染器,帶有硬件T&L單元的GPU不執(zhí)行具體指令但是可以進行大批量重復、枯燥的運算,而CPU每次執(zhí)行指令要重新編程,適合靈活運算。
此后,CPU不再進行渲染只負責“調度”,而顯卡則負責具體工作,就像流水線作業(yè)一樣,效率變得高了許多。隨后不久,微軟就發(fā)布了應用在Windows系列系統(tǒng)的開放API——Direct 3D(Direct X的子集前身) 、Khronos發(fā)布了可以運行于Windows、Unix、Linux(包括基于此的Ubuntu、Macintosh、iOS、Android)在內任何系統(tǒng)的開源API——Open GL。這些API都用自家的規(guī)則算法,將靜態(tài)渲染效果以更高效呈現(xiàn)在3D即時渲染中。
其具體流程是用戶啟動應用程序(軟件),程序命令CPU從系統(tǒng)調用系統(tǒng)內置的某些通用運行庫、運行游戲所需資源并將這些加載到內存、顯存,隨后呈現(xiàn)游戲的圖形用戶界面(GUI)。當加載達到一定完成度,CPU開始指揮GPU,按照API預先設定好的處理方式進行預渲染,渲染完成度達到100%即可進入游戲的實際渲染畫面。
3D圖形的實時渲染聽起來流程很簡單,實際上對系統(tǒng)硬件的性能消耗十分恐怖。即便是諸如《VR戰(zhàn)士2》、《極品飛車2特別版》這類3D“初期”產物,它們的多邊形也是數(shù)以萬計為單位,時至今日,每一幀畫面包含的多邊形高達數(shù)百萬個之多!注意,這還是每一幀而已哦!
正如筆者所言,當3D實時渲染的需求與日俱增之時,硬件也在不斷進步。前文所述的“帶有硬件T& L單元的NVIDIAGeForce 256”就是一個標志性產物。所謂的T&L單元,全稱是Transform & lighting,是指坐標轉換和光源。T&L引擎主要是用來進行復雜的坐標處理以及光源映像的運算,讓使用者更能感受到物體真實的光影顯現(xiàn)。過去,在沒有T&L引擎的平臺上,大部分坐標處理的工作及光影特效都是由CPU執(zhí)行,但因占用太多的CPU計算的時間,而造成整體畫面的不流暢。因此一旦使用T&L引擎,將可以大大的減輕CPU處理3D時的負荷,并且使CPU能夠有更多的資源來處理更炫的3D特效,提供更好的視覺效果,所以此時繪圖芯片在3D圖形計算能力上已經(jīng)凌駕于CPU之上了。
然而這還不夠,隨著性能需求的大幅度提升,T&L單元設計也不足以應對了。這是因為圖形處理生成多邊形的過程中需要加上許多附加運算任務,比如頂點上的紋理信息、散光和映射光源下的顏色表現(xiàn)等等,有了這些就可以實現(xiàn)更多的圖形效果,也就是可以讓人看起來更為真實的畫面。為了解決這個問題,2001年微軟發(fā)布的DirectX8提出了Shader Model(渲染單元模式),Shader也由此誕生。本質上Shader是一段能夠針對3D圖像進行操作并被GPU所執(zhí)行的圖形渲染指令集。通過這些指令集,開發(fā)人員就能獲得大部分想要的3D圖形效果。在一個3D場景中,一般包含多個Shader,這些Shader中有的負責對3D對象頂點進行處理,有的負責對3D對象的像素進行處理。所以最早版本的Shader Model 1.0中,根據(jù)操作對象的不同分別Vertex Shader(頂點著色器/頂點單元,VS)和Pixel Shader(像素著色器/像素單元,PS)。
相比T&L實現(xiàn)的固定的坐標和光影轉換,VS和PS擁有更大的靈活性,使得GPU在硬件上實現(xiàn)了頂點和像素的可編程(雖然當時的可編程特性與現(xiàn)在相比不值一提),反映在圖形特效上就是出現(xiàn)了動態(tài)的光影效果,游戲玩家們第一次見到了更加逼真的水面特效。
不過,這種設計也是有缺陷的——頂點渲染和像素渲染各自獨立進行,而且一旦當架構確定下來,VS和PS的比例就會固定,這是無論如何也無法更改的。這會造成一個問題,許多3D渲染場景中,遇到高負載幾何計算需求的時候,VS處理壓力大增,而PS單元工作較少被“閑置”;反之,遇到高負載像素計算需求的時候,PS處理壓力增大,而VS又處于閑置狀態(tài)。
于是,微軟在DirectX 10中提出了統(tǒng)一渲染構架的概念。統(tǒng)一渲染架構(Unified Shader)是相對于分離式渲染架構而言的,其頂點著色器和像素著色器被合二為一,成為流處理器,避免了傳統(tǒng)GPU架構中PS和VS資源分配不合理的現(xiàn)象,也使得GPU的利用率更高。統(tǒng)一渲染架構的概念一直沿用至今,一般來說統(tǒng)一渲染架構的數(shù)量越多,GPU的3D實時渲染執(zhí)行能力就越強,所以統(tǒng)一渲染架構的數(shù)量也就成了判斷顯卡性能的一個重要標準。
當然,顯卡要渲染的3D畫面絕對不是只有3D圖形本身,我們自然是希望看到的“越來越真實”,這就需要顯卡對很多物體、材質進行渲染,運算越多細節(jié)還原就越真實,當然,硬件性能消耗也就越大。比如單單是貼圖材質這件事,其所需要的資源就十分恐怖。
現(xiàn)實世界存在大量細節(jié)紋理,我們都需要在游戲中模擬還原,細節(jié)貼圖可以依附在任何貼圖上以增強游戲材質的質感。比如說一件衣服,如果只是單純的衣服外形肯定會覺得畫面好假,但是如果我們把衣服的細節(jié)都展示出來,包括編織的紋理,無疑效果就更加真實了。
再比如各種光影效果,如果沒有模擬光影效果,如金屬的反光、水面的倒影、布料對于光影的反射等等。尤其是近年來“光影追蹤”技術的推出,更是讓3D實時渲染畫面看起來更為真實——光源不僅僅是單一反射,它的漫反射也至關重要,畢竟現(xiàn)實世界中光的反射十分復雜,這也迫使硬件產品不斷推陳出新。使用了光影追蹤技術的游戲光源反射會更為真實,不再是單一的折射,但是它帶來的系統(tǒng)性能消耗也是前所未有的,即便是當今的頂級顯卡,也不敢妄言可以滿幀率4K全特效運行。
我們一直在說,3D實時渲染出來的畫面是三維的多邊形的組合,既然是多邊形,它就必然會存在邊緣——這個邊緣無論多么細致,你總能發(fā)現(xiàn)那些鋒利的邊角,尤其是在較低分辨率的設置時更為明顯。于是,為了“消除”這些鋒利的邊角,讓圖形看起來更為精美,抗鋸齒技術誕生了。
經(jīng)歷了不同時代的抗鋸齒技術,2014年前后,NVIDIA和AMD分別推出了各自的抗鋸齒新技術DSR、VSR。雖然NVIDIA的DSR(Dynamic Super Resolution,動態(tài)超級分辨率)與AMD的VSR(VirtualSuper Resolution,超級視覺分辨率)的名字不一樣,但都是在分辨率上做文章,原理也都差不多。DSR和VSR的實現(xiàn)方式都是在開啟之后,利用驅動“騙過”系統(tǒng)和游戲,讓它們認為你得屏幕可以輸出4K分辨率,在選擇4K分辨率之后,游戲就會以4K分辨率模式工作,GPU內部以4K分辨率對圖像進行渲染,最后再以動態(tài)縮放的方式將圖像縮放到1080P分辨率上輸出到顯示器進行顯示。由于是以4K方式渲染再縮放的,渲染精度得到了提升,縮放后也能帶來更加精細的效果。
不過,這兩項技術實際上算是一種“超采樣”的方式,也就是說它實際的渲染運算量遠遠高于實際應用的分辨率,對系統(tǒng)性能的需求非常大。
顯而易見,這兩項技術的存在還是著重于提升畫面質量為主,總結起來,顯卡的負擔“越發(fā)沉重”,游戲顯卡似乎只有高端產品才能滿足真正的使用需求,盡管我們有些許的“技巧”去優(yōu)化幀率,但無論如何都趕不上游戲對系統(tǒng)新能需求的提升步伐,這就不是普通用戶依靠“優(yōu)化”可以改善的,只能在技術端有所改變才行。
在NVIDIA推出GeForce RTX顯卡的時候,除了大名鼎鼎的“光追技術”之外,還有一個技術備受關注——DLSS,DLSS全稱為 Deep Learning Super Sampling(深度學習超級采樣)。由 GeForce RTX GPU上的專用 AI 處理器Tensor Core提供支持,是一個經(jīng)過改進的全新深度學習神經(jīng)網(wǎng)絡,能夠在提高幀數(shù)的同時生成精美、清晰的游戲圖像。
它的工作原理是利用NVIDIA神經(jīng)圖形框架NGX,在超級計算機中以極低的幀率和每像素64個樣本對數(shù)萬張高分辨率的精美圖像進行離線渲染,訓練出一個深度神經(jīng)網(wǎng)絡。基于無數(shù)個小時的訓練所獲得的數(shù)據(jù),網(wǎng)絡就可以將分辨率較低的圖像作為輸入,構建高分辨率的精美圖像。
簡單說,它需要首先對游戲畫面進行采樣,在NVIDIA的服務器上使用4K或者8K超高清分辨率處理,然后降回到游戲分辨率,結合玩家實際場景來提升畫質,同時運行幀率也十分可觀。而且,這個過程顯卡是具備自我學習能力的,也就是說可以更“精妙”的去處理渲染需求。注意,它的基本思路其實和DSR沒有太多區(qū)別,只是實現(xiàn)的方法有了變化。
不過,DLSS的開啟要求十分苛刻,首先是必須具備光追技術的顯卡,也就是GeForce RTX系列產品方可,其次游戲必須提供給NVIDIA實驗室中進行AI學習,常常還得開啟光追或超高分辨率這種高負載模式才會出現(xiàn)DLSS選項。
AMD的FSR技術就要“友善”多了,比如前文提及的不僅支持自家多代顯卡,還能夠支持NVIDIA的部分顯卡產品。詳細的FSR技術就不過多解釋,最直白的理解在于,AMD的FSR技術通過插值的方法,將采樣后的內容通過填補空白像素的方法插值渲染,這樣可以大幅度提升運行幀率的同時盡量保證畫面的細節(jié)還原(當然還是有明顯損失的)。
不過,AMD的FSR技術不同于NVIDIA的DLSS,后者可以通過AI技術進行深度自我學習、優(yōu)化,F(xiàn)SR不具備這個能力,所以它只能“另辟蹊徑”——依靠CPU的單指令流多數(shù)據(jù)流單元(SIMD單元)進行輔助計算,也就是說,在支持FSR技術的游戲中,開啟FSR技術獲得更高幀率的前提是:CPU性能要足夠好。
當然,鑒于現(xiàn)在顯卡價格的昂貴程度,把部分壓力釋放到CPU上是無疑另外一種選擇——從歷史的長河來看,CPU和GPU的搭配組合一直就是相輔相成的,追求更快、更好的游戲運行效果,CPU和GPU上的開銷總要有所付出。