一些游戲用到的渲染技術


DirectX不直觀,教您認識游戲圖形技術


 

 

    泡泡網顯卡頻道2月19日 近年來3D圖形技術的發展勢頭非常迅猛,軟件方面游戲的畫面和逼真度有了長足進步,硬件方面顯卡的更新換代越來越頻繁。但始終存在這樣一個現象,無論顯卡的性能翻多少倍,游戲玩家們總感覺還是不夠強大,GPU龐大的運算能力到底被誰吃掉了呢?

    答案很簡單,游戲為了提高畫面質量、更加接近於真實世界,使用了諸多先進的圖形技術,特效的“濫用”大幅提升了游戲畫面水平,但也抵消掉了GPU性能的增長。

    那么最新的圖形技術到底能給游戲帶來多少的畫面改進,對於顯卡的需求會有多誇張呢?今天筆者就將主流游戲中使用最廣泛的技術提取出來,對其原理和需求進行詳細的分析,以饗讀者。

    其實很多最先進的游戲高級圖形技術都包括在了新版本的DirectX API當中,或者說是通過DirectX中的Shader Model新指令集來實現。但這些東西並不容易理解,也不夠直觀,所以本文反其道而行之,通過肉眼可以看得出來的差別來分析DirectX版本更新對於圖形技術的改進到底有多大?

 

運動模糊(Motion Blur)


 

 

● 游戲中為什么需要模糊處理?清晰一點不是更好嗎?

    首先請大家思考一個問題:為什么每秒24幀的速度對於電影來說已經足以獲得很流暢的視覺效果,而對於游戲來說卻會顯得磕磕碰碰呢?

    原因很簡單,攝像機在工作的時候並非一幀一幀絕對靜止的拍攝,它所攝下的每一幀圖像已經包含了1/24秒以內的所有視覺信息,包括物體在這1/24秒內的位移。如果在看電影的時候按下暫停鍵,我們所得到的並不是一幅清晰的靜止畫面,而是一張模糊的圖像,問題就出在這里!

    傳統的電腦3D圖像做不到這一點,游戲里的每一幀就是一幅靜止畫面,如果你在運動的過程中截一張圖片下來,得到的肯定是一幅清晰的靜態圖。


很多游戲中都有運動模糊的選項

    所以,運動模糊技術的目的有二:一是增強快速移動場景的真實感,二是在FPS並不高的時候讓游戲顯得不是很卡。運動模糊技術並不是在兩幀之間插入更多的位移信息,而是將當前幀同前一幀混合在一起所獲得的一種效果。

 

● 基於DX10技術的運動模糊更真實

    之前已經有很多DX9游戲采用了運動模糊技術,效果最顯著、最誇張的非《極品飛車》系列莫屬,很多玩家表示不太適應這種效果,原因就在於打開特效之后畫面模糊的太誇張了,時間一長容易頭暈——顯然,這不是我們想要的運動模糊!

 

    傳統的運動模糊技術,游戲只是簡單虛化了環境,而對高速運動的物體則僅僅保留運行軌跡而已,這樣的前景和背景融合在一起自然效果很差,完全就是拖影和殘影,影響視覺體驗。

 

    而在DX10模式下,有了全新的幾何着色技術,這樣就可以使用流處理器資源來計算運動物體的幾何坐標變換,然后配合高精度的頂點紋理拾取技術,達到了完美監控整個運動過程的目的。如此一來進行模糊處理的話,就杜絕了不分青紅皂白的現象——該模糊的依然模糊,該清晰的照樣清晰!

● 代表游戲:《失落星球》、《孤島危機》、《戰爭機器》、《生化危機5》

 

景深(Depth of Field


 

 

● 為什么要加入景深——模擬鏡頭和人眼的視覺效果

    使用單反數碼相機拍照的朋友應該知道,大光圈鏡頭所帶來的背景虛化效果非常好,能夠凸出人物和景物,主次分明。其實人眼在注意觀察物體時,也會將焦距拉近,主體清晰可見但遠景一片模糊,這就是通常所說的景深效果。


大多數游戲都有景深選項

    3D游戲為了模擬真實,更接近鏡頭/人眼的成像原理,也將景深引入渲染過程之中。由於3D游戲只是將圖像投影在了平面的顯示器上,不會有深度,因此想要實現景深效果必須在圖像輸出之前就進行預處理,把游戲主角以外的遠景全部虛化。

● DX10帶來更好的景深處理

    DX9時代,是通過投機取巧的方式來實現景深效果的,它自動判定距離,將遠處景物的紋理、陰影、光照等特效全面縮水,然后再輔以模糊處理,而只對近景做正常渲染輸出,這樣就會讓玩家注意到主角而忽視遠景。

    而DX10則沒有任何的偷工減料,它通過幾何着色器,將深度帖圖中的紋理信息按照距離拆分到緩沖,然后分為幾個不同的視角進行渲染,最后合成完整的圖像。因此最終實現的景深效果在特效方面不會有任何縮水,遠景完全符合正常的虛化模式,如果仔細觀察的話,光影等細節依然得到保留。

● DX11帶來更快的景深處理

    DX10的景深處理能夠實現近乎完美的景深效果,但通過不同視覺渲染的方法還是不夠靈活,而且會大大增加GPU后端處理(光柵單元)的負擔,產生負載不均的情況,導致性能損失較大。

    而DX11則通過DirectCompute中新增的Gather4數據采集指令,使得計算着色器能夠以四倍的紋理采集速度,幫助減少GPU紋理單元和光柵單元的負擔,從而在進行景深處理時消除了瓶頸,提升渲染效率。

● 代表游戲:《古墓麗影》、《失落星球》、《孤島危機》、《潛行者》、《戰爭機器》

 

環境光遮蔽(Ambient Occlusion)


 

 

● 光柵化渲染的極限——環境光遮蔽

    在GPU和CPU有能力進行實時光線追蹤(Ray Tracing,按照真實世界光線投射原理反向渲染的技術)之前,環境光遮蔽是當今光柵化渲染模式中最好、最高效的替代方案。環境光遮蔽通過計算光線在物體上的折射、衍射、散射和吸收,在受影響位置上渲染出適當的陰影,進一步豐富標准光照渲染器的效果。


一些游戲支持多種環境光遮蔽模式

 

    屏幕空間環境光遮蔽(Screen Space Ambient Occlusion,SSAO)是AO的一個變種,它通過對屏幕內進行簡單的空間划分,然后進行計算。SSAO的工作原理是:通過采樣象素周圍的信息,進行簡單的深度值對比來計算物體身上環境光照無法到達的范圍,從而可以近似地表現出物體身上在環境光照下產生的輪廓陰影。雖然只是模擬實現,但確實能增強場景的層次感,讓畫面更細膩,讓場景細節更加明顯。

● DX10.1大大提升SSAO效率

 

    SSAO可以利用“逐象素場景深度計算”技術計算得出的深度值直接參與運算,也可以利用DX10.1當中的Gather4函數實現更快速紋理采樣及過濾。DX10模式下開啟SSAO性能損失非常大,因此SSAO技術多出現在DX10.1游戲中。通過實際測試來看,DX10.1顯卡在DX10.1模式下(如果該游戲支持的話)的性能相比DX10會提升20%-30%之多,從而使得SSAO成為真正實用的技術,而不再是花瓶。

● DX11帶來更高清晰度的HDAO

    在DX11中,SSAO被進一步升級至HDAO(高清晰),因為DX11中的Gather4函數更加強大,它可針對特定的顏色分別采樣,能自動識別能做陰影映射的值,從而實現更快更好的陰影過濾。HDAO和SSAO都能向下兼容舊硬件,但運行速度會打折扣。換句話說,DX11和DX10.1是在改進算法、優化性能的基礎上,使得顯卡有能力渲染出更復雜、更完美的特效,而DX10雖然在也能達到同樣的畫面效果,但速度會很慢,實用性不大。

 代表游戲:《孤島危機》、《潛行者》、《火爆狂飆》、《鷹擊長空》、《帝國:全面戰爭》、《塵埃2》

 

鑲嵌細分曲面(Tessellation)


 

 

● 媲美電影CG畫質——鑲嵌式細分曲面技術

    游戲和電影CG動畫,其實都是由計算機渲染出來的,那為什么畫質差別那么大呢?這是因為CG動畫的模型要比3D游戲復雜成千上萬倍,所以CG也要成千上萬倍與電腦的性能才能渲染出來,而且還無法實現實時渲染。

    3D游戲考慮到家用電腦的機能,模型不可能設計得太復雜,否則就不具備可玩性。但為了讓游戲變得更加逼真、達到更高畫質,太簡單的模型的確拿不出手,那么有什么方法既能大幅提升模型復雜度、又不至於給顯卡造成太大負擔呢?Tessellation技術就是為此而生的。

    簡單來說,Tessellation是一種能夠在圖形芯片內部自動創造頂點,使模型細化,從而獲得更好畫面效果的技術。Tessellation能自動創造出數百倍與原始模型的頂點,這些不是虛擬的頂點,而是實實在在的頂點,效果是等同於建模的時候直接設計出來的。


實現相同的模型細節,Tessellation顯然比直接建模更快更高效

    除了大幅提升模型細節和畫質外,Tessellation最吸引程序員的地方就是:他們無需手動設計上百萬個三角形的復雜模型,只需簡單勾繪一個輪廓,剩下的就可以交給Tessellation技術自動鑲嵌,大大提高開發效率;而且簡單的模型在GPU處理時也能大幅節約顯存開銷,同時大幅提升渲染速度!

● Tessellation的妙用

    Tessellation技術的原理很簡單,就是把簡單的模型智能的鑲嵌成為復雜模型,使得游戲中的景物變得更加細膩真實。實際上除此之外Tessellation還能實現一些令人意想不到的功效:

    DX11代表作《DiRT2》就大量使用了Tessellation技術,它用Tessellation構建了動態水面、動態布料旗幟和觀眾人物模型,其中加強人物模型不難理解,而動態水面和布料效果足以媲美物理加速,讓人驚訝不已!

    Tessellation(細分曲面)水面效果對比


DX11模式


DX9模式

    Tessellation(細分曲面)布料效果對比


DX11


DX9

    雖然XBOX360和ATI的全線DX10顯卡都支持Tessellation技術,但支持Tessellation游戲並不多,隨着DX11將Tessellation作為一項重要技術納入API規范之后,未來DX11游戲都將會支持這一技術,但由於DX11中的Tessellation和DX10/DX9版本有很大的區別,因此並不會向下兼容,Tessellation只能通過DX11顯卡在DX11游戲中才能實現。

 代表游戲:《潛行者:普里皮亞季的呼喚》、《科林麥克雷:塵埃2》、《異形大戰鐵血戰士》(即將發布)

 

物理效果(PhysX)


 

 

● 動態逼真——物理效果的實現

    3D游戲中“物理”指的是什么呢?簡言之就是模擬真實世界中的物理定律,使得運動物體產生一些復雜的交互性干涉,從而改變形狀、軌跡或狀態的一種技術。比如:流體(水、煙、霧)、碰撞、變形、爆炸、毀壞、布料、碎片……物理技術雖然屬於圖形技術的一種,但所涉及到的運算並非是圖形渲染,而是大量的並行計算,等結果算出來之后才會進行后續的渲染操作。

ATI演示GPU物理加速 X19XT=物理卡×9
3D游戲中一些典型的物理應用

    這里為什么要強調GPU物理加速呢,因為CPU物理加速其實早就進入實際應用階段,但由於CPU性能有限(或者說CPU並不擅長做物理運算),大多數游戲僅采用了少許簡單的物理效果作為點綴,未能給玩家帶來視覺上的震撼力,也就容易被大家所忽視。比如《半條命2》系列游戲都使用了物理技術,在擊穿木板或爆炸時會有一定的破壞效果,但如果不特別指出的話您可能注意不到。


Crysis爆炸時的物理效果不錯(CPU加速),但在場景毀壞與交互方面略有不足

● 物理引擎並不是只有PhysX一種,但只有PhysX支持GPU加速

    除了CPU外,還有專用的PPU(即物理加速卡)來進行物理運算,但隨着GPU進入DX10時代,並行架構的流處理器擁有比PPU和CPU更強大的浮點運算能力,GPU物理加速技術被提上日程。終於,在NVIDIA收購Ageia公司之后,通過CUDA技術將PhysX物理引擎重新編譯了一遍,使得GeForce 8以上的N卡都能夠支持物理運算,通過大量的測試來看,即便是低端N卡的物理加速能力也要比專用的物理加速卡強,CPU跟它根本不是一個級別。

    就拿最近比較熱門的《蝙蝠俠:阿卡姆瘋人院》這款游戲來說,是否開啟PhysX有着天壤之別,PhysX能夠讓蝙蝠俠的披風更拉風、地洞中的霧氣在人經過時產生互動、地面上的碎片和紙屑在打斗過程中飛舞、地板磚桌椅牆壁都有可能被打碎、布料和旗幟隨風而動……

 

    物理引擎也不是只有PhysX一種,已經被Intel收購的Havok也提供了很不錯的物理解決方案,但目前支持GPU加速的還只有PhysX這一種,由於GPU擁有很強的運算能力,因此PhysX引擎所實現的物理效果最為出色,但對顯卡的要求也很高。

    開啟PhysX之后是十分消耗資源的,GTS250以下級別的顯卡性能損失特別大,最好是能安裝一塊額外的顯卡做專門的物理加速運算,而GTX260+以上級別的顯卡則可以同時處理圖形渲染和物理加速運算,能夠保證不低於30幀的速度。至於A卡則不支持PhysX加速,強行開啟的話只能使用CPU進行運算,效率自然非常低下,不過使用A卡做渲染N卡做物理加速也是個臨時解決方案。

● 代表游戲:《虛幻競技場3》、《鏡之邊緣》、《雪域危機》、《蝙蝠俠:阿卡姆瘋人院》

 

高動態范圍光照(HDR)


 

 

● 大名鼎鼎的HDR技術再次縮水

 

    HDR(High Dynamic Range,高動態范圍光照)技術相信很多人並不陌生,想當年DX9C SM3.0面世時,正是憑借HDR技術一舉成名,HDR所帶來的絢麗光影效果給玩家極強的視覺震撼,但卻產生了很多負面效果,這些歷史遺留問題時至今日都沒有得到完美解決。

    幾乎所有的圖形技術都是隨着時間的推移來進一步增強效果,只有HDR被一而再再而三的“縮水”,這是為什么呢?

● DX9C時代HDR與AA水火不容

    HDR技術通過采用浮點格式的顏色代碼來為紋理、光照等計算提供極大的精度和顏色范圍(以前的紋理一般都是采用整數型的顏色格式)。盡管最后顯示到屏幕上還是每個顏色通道8位的整數格式,但是以前的材質、光照計算中紋理也是用每通道8位的格式來參與計算,所以在顯示到畫面之前,很多細節就在低精度的運算中丟失了。

    HDR效果雖然很美,但在DX9C模式下進行16位浮點(FP16)運算時,會占用到原本屬於多重采樣抗鋸齒(MSAA)的緩沖區域,使得游戲開啟HDR后無法進行FSAA處理。當年的一大批DX9C游戲都是如此,比如《孤島驚魂》、《細胞分裂》、《虛幻3》引擎的全系列游戲。

● ATI X1000和XBOX360是個例外

    ATI的DX9C顯卡發布較晚,因此在設計之初就考慮到了HDR+AA的需要,整合了額外的緩存,只要通過游戲或者驅動重新指定另外的緩沖區,就能完美支持HDR+AA效果,所以X1000系列和XBOX360主機都能支持HDR+AA。

 

    不過ATI的HDR+AA方案並不是業界標准,還是有不少游戲無法同時開啟HDR和AA,通過驅動強行更改緩沖區的方式和一些游戲有兼容性問題,ATI官方都不認可這種做法。

● DX10時代,新增兩種HDR顏色格式

    為了解決困擾業界已久的HDR+AA問題,微軟在DX10當中加入了兩種新的HDR格式,對每個顏色通道16位浮點數的格式進行刪減,第一種是R11G11B10(紅色綠色各11位,藍色10位,總計32位),另一種是紅綠藍各9位共享5位指數(計算機中浮點數是尾數附加指數的形式來表示)。

    新增的兩種HDR格式都只有32位,而並非DX9C時代的48位(FP16x3),所以動態范圍精度有些下降,但好處就是新的HDR不會與MSAA搶占緩沖區,所消耗的顯存也大大減少,效率和兼容性提高,至於光影效果的縮水其實很難看出來。

● DX11時代,新增HDR紋理壓縮技術

    HDR除了不支持抗鋸齒外,還不支持紋理壓縮技術,因為HDR在設計之初的要求就是光照和紋理都必須保持高精度。隨着時代的發展,游戲的分辨率越來越高,紋理貼圖越來越精細,而紋理貼圖如果不經壓縮就放在顯存里面的話,容量是相當恐怖的,因此新一代的游戲顯存消耗成倍增加,這其中罪魁禍首其實還是HDR技術。

    為了解決這個顯存消耗大戶,在DX11當中又新增了一種專為HDR設計的紋理壓縮格式:BC6H,壓縮比高達6:1。

    上圖展示的是圖像通過BC6H壓縮模式進行壓縮的前后效果對比圖。其中左邊的圖像為原始圖像,中間的是在壓縮過程中損失的一些細節,而右邊的就是壓縮后的圖像。可以看出,從畫質上來看幾乎沒有損失(肉眼看不出),但是卻可以大幅度降低顯存的占用。

    經過了DX9C、DX10和DX11三代API,HDR技術在神不知鬼不覺的情況下被兩次“縮水”之后,才真正走向成熟,由此可見好的圖形技術不光是要效果出色,更重要的是擁有高效率和實用性,才能被更多的游戲所接受,被更多的顯卡所支持。

● 代表游戲:幾乎所有主流游戲都有使用HDR效果,時至今日依然有一些采用虛幻3引擎的游戲無法同時開啟HDR和AA,需要通過修改的方式實現

 

視差映射貼圖(Parallax Mapping)


 

 

● 傳統紋理貼圖的弊端

    紋理貼圖大家都明白,就是往建好的3D模型上“貼”一些二維的畫面,讓人物顯得更真實一些,比如常見的磚牆、凹凸不平的地面等,這些如果全部用三角形來實現的話,那么模型就會非常復雜,GPU將會不堪重負,但如果用“一張已經畫好磚紋的紙”貼上去的話,那么渲染起來就會輕松好多。

    但是這么做也有很大的缺點,貼圖畢竟是2D的,如果在游戲中換個角度看的話,很容易就會發現牆面沒有任何立體感,磚紋看上去非常假!為了讓2D貼圖看上去也有3D立體效果,就誕生了多種貼圖技術,比如凹凸貼圖、法線貼圖、位移貼圖、視察映射貼圖等。

● 凹凸貼圖

    凹凸貼圖技術簡單說起來是一種在3D場景中模擬粗糙表面的技術,將帶有深度變化的凹凸材質貼圖賦予3D物體,經過光線渲染處理后,這個物體的表面就會呈現出凹凸不平的感覺,而無需改變物體的幾何結構或增加額外的點面。例如,把一張碎石的貼圖賦予一個平面,經過處理后這個平面就會變成一片鋪滿碎石、高低不平的荒原。當然,使用凹凸貼圖產生的凹凸效果其光影的方向角度是不會改變的,而且不可能產生物理上的起伏效果。


凹凸貼圖的牆壁效果,注意看邊緣其實沒有任何凹槽

    凹凸貼圖在今天看來已經是老的不能再老的一種技術了,雖然能夠獲得凹凸的效果,但是凹凸的程度非常受限制,基本上只能做出一些簡單的浮雕效果來。這種技術通常用在一些觀察視角變化很小的情況上,例如地面,牆壁,遠處的一些模型等等,如果角度稍微一大,你就會發現那些凹坑其實是根本不存在的。

● 法線貼圖

    法線貼圖就是把一個表面的凹凸情況用每個點的法線向量記錄下來,在貼圖的時候根據法線貼圖做光影的變換,從而實現凹凸效果。

    法線貼圖比起凹凸貼圖而言,能夠實現的效果更好了,相對的就是運算量更大了,需要大量的紋理材質,每個象素的光照情況都需要計算這個點的法線向量和光照情況的夾角計算該點的亮度和顏色。為了節約GPU資源,ATI曾開發了3DC+紋理壓縮技術,這對於法線貼圖有莫大的幫助。

    當然,法線貼圖技術同樣不是完美的,它也有着自己的不足,凹凸貼圖沒有能夠解決的切向效果問題肯定是仍然不能夠得到解決。此外,就是法線貼圖技術不能夠解決解決更大的凹凸情況的效果。大家如果去觀察的話,法線貼圖效果能實現的通常是一些內凹或者外凸不是很嚴重的表面效果。

● 視差映射貼圖

    為了解決法線貼圖在處理較深內凹之時不能夠達到的弊端,誕生了新的視差映射貼圖技術。該技術其實稱之為視差遮蔽貼圖似乎更容易理解一些,因為它會對紋理的坐標做變換,一些凸出的紋理會遮蔽到其他的紋理,這樣就會看起來具備更好的凹凸的感覺了。

 


ATI X1000 Demo中就包含了視察映射技術

    正如我們在上圖看到的情況一樣,地面上的石塊的凹凸感覺非常好,前面的石塊已經對后面的石塊進行了局部的遮蔽。雖然這個Demo中的磚塊依然很假,但磚塊之間凹凸的效果已經得到了完美體現,非常遺憾的是,沒有任何一款DX9游戲使用過這種視差貼圖技術。

● 直到DX10時代才大量使用視差映射貼圖技術

    視差貼圖技術的實現原理,其實和法線貼圖是一樣的,都是根據法線貼圖進行的處理,所以我們可以把它當作是法線貼圖的一種衍生技術。視差貼圖技術的實現是和硬件沒有必然聯系的,這個技術概念的誕生其實也非常早,只是未能得到大量使用,這是因為視差貼圖技術的運算量要比法線貼圖大了不少,原來的顯示芯片因為性能有限基本都運行不了。

 


狂野西部DX10版本首次使用了視差映射貼圖


《孤島危機》中的石塊和地面都使用了視察映射貼圖

    最早使用視差映射貼圖技術的游戲叫做《狂野西部》,首批DX10游戲之一,DX9版本不支持。由於DX10顯卡都采用了統一渲染架構,可以方便的集中利用Shader資源,來渲染出復雜的特效。再加上有全新的幾何着色器輔助,因此特效的運用方面可以更加靈活,游戲開發商可以很容易的自定義一些特效渲染方式,所以將先進的技術都安置在DX10模式之中也是無可厚非。

● 代表游戲:《狂野西部》、《孤島危機》、《潛行者》

 

總結:游戲高級特效不勝枚舉


 

 

    游戲中所使用的圖形技術動輒數以百計,即便是像3DMark這樣簡短的測試程序中,也包含了數十項先進的、甚至是獨創的渲染技術,有些技術甚至連一個像樣的名字都沒有,而真正能得到廣泛使用、被3D游戲愛好這所熟知的技術,確實是屈指可數。


Crysis的畫面之所以如此完美,是因為幾乎所有的高級圖形技術它都有所使用

    所以,本文只是有選擇性的介紹了一些知名的、肉眼看得出差別、能明顯提升游戲畫質的圖形技術,其實在這些風光無限技術的背后,還有很多默默無聞的、用以提升渲染效率的輔助技術。


Tessellation技術的坎坷發展歷程

    而且,這些圖形技術也不是一朝一夕就能得到程序員的青睞、並獲得游戲玩家的認可,比如HDR技術時至今日依然存在兼容性問題、動態模糊和景深經過三代API的改良效果才令人滿意、Tessellation技術更是經過六代七年的發展才修成正果!

    每一代圖形API的革新,一方面是加入新的特效、讓畫面變得更完美,另一方面是通過新的指令提升運算效率。顯卡進入DX10時代后,畫面已經達到了巔峰,很難再有較大的突破,因此后續的DX10.1和DX11都主要是為了優化算法,使得游戲運行更加流暢,也有利於游戲開發者使用更多、更強的圖形技術,營造出更逼真的3D畫面!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM