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