導言:
近年來3D圖形技術的發展勢頭非常迅猛,軟件方麵遊戲的畫麵和逼真度有了長足進步,硬件方麵顯卡的更新換代越來越頻繁。但始終存在這樣一個現象,無論顯卡的性能翻多少倍,遊戲玩家們總感覺還是不夠強大,GPU龐大的運算能力到底被誰吃掉了呢?
答案很簡單,遊戲為了提高畫麵質量、更加接近於真實世界,使用了諸多先進的圖形技術,特效的“濫用”大幅提升了遊戲畫麵水平,但也抵消掉了GPU性能的增長。
那麼最新的圖形技術到底能給遊戲帶來多少的畫麵改進,對於顯卡的需求會有多誇張呢?今天筆者就將主流遊戲中使用最廣泛的技術提取出來,對其原理和需求進行詳細的分析,以饗讀者。(圖01)
圖01
其實很多最先進的遊戲高級圖形技術都包括在了新版本的DirectX API當中,或者說是通過DirectX中的Shader Model新指令集來實現。但這些東西並不容易理解,也不夠直觀,所以本文反其道而行之,通過肉眼可以看得出來的差別來分析DirectX版本更新對於圖形技術的改進到底有多大。
3D遊戲圖形技術之一—運動模糊(Motion Blur)(圖02)
圖02
#p#e#
● 遊戲中為什麼需要模糊處理?清晰一點不是更好嗎?
首先請大家思考一個問題:為什麼每秒24幀的速度對於電影來說已經足以獲得很流暢的視覺效果,而對於遊戲來說卻會顯得磕磕碰碰呢?
原因很簡單,攝像機在工作的時候並非一幀一幀絕對靜止的拍攝,它所攝下的每一幀圖像已經包含了1/24秒以內的所有視覺信息,包括物體在這1/24秒內的位移。如果在看電影的時候按下暫停鍵,我們所得到的並不是一幅清晰的靜止畫麵,而是一張模糊的圖像,問題就出在這裏!
傳統的電腦3D圖像做不到這一點,遊戲裏的每一幀就是一幅靜止畫麵,如果你在運動的過程中截一張圖片下來,得到的肯定是一幅清晰的靜態圖。(圖03)
圖03
所以,運動模糊技術的目的有二:一是增強快速移動場景的真實感,二是在FPS並不高的時候讓遊戲顯得不是很卡。運動模糊技術並不是在兩幀之間插入更多的位移信息,而是將當前幀同前一幀混合在一起所獲得的一種效果。
● 基於DX10技術的運動模糊更真實
之前已經有很多DX9遊戲采用了運動模糊技術,效果最顯著、最誇張的非《極品飛車》係列莫屬,很多玩家表示不太適應這種效果,原因就在於打開特效之後畫麵模糊的太誇張了,時間一長容易頭暈——顯然,這不是我們想要的運動模糊!(圖04)
圖04
傳統的運動模糊技術,遊戲隻是簡單虛化了環境,而對高速運動的物體則僅僅保留運行軌跡而已,這樣的前景和背景融合在一起自然效果很差,完全就是拖影和殘影,影響視覺體驗。(圖05)
圖05
而在DX10模式下,有了全新的幾何著色技術,這樣就可以使用流處理器資源來計算運動物體的幾何坐標變換,然後配合高精度的頂點紋理拾取技術,達到了完美監控整個運動過程的目的。如此一來進行模糊處理的話,就杜絕了不分青紅皂白的現象——該模糊的依然模糊,該清晰的照樣清晰!
#p#e#
3D遊戲圖形技術之二—景深(Depth of Field)(圖06)
圖06
● 為什麼要加入景深—模擬鏡頭和人眼的視覺效果
使用單反數碼相機拍照的朋友應該知道,大光圈鏡頭所帶來的背景虛化效果非常好,能夠凸出人物和景物,主次分明。其實人眼在注意觀察物體時,也會將焦距拉近,主體清晰可見但遠景一片模糊,這就是通常所說的景深效果。(圖07)
圖07
3D遊戲為了模擬真實,更接近鏡頭/人眼的成像原理,也將景深引入渲染過程之中。由於3D遊戲隻是將圖像投影在了平麵的顯示器上,不會有深度,因此想要實現景深效果必須在圖像輸出之前就進行預處理,把遊戲主角以外的遠景全部虛化。
● DX10帶來更好的景深處理
DX9時代,是通過投機取巧的方式來實現景深效果的,它自動判定距離,將遠處景物的紋理、陰影、光照等特效全麵縮水,然後再輔以模糊處理,而隻對近景做正常渲染輸出,這樣就會讓玩家注意到主角而忽視遠景。(圖08)
圖08
而DX10則沒有任何的偷工減料,它通過幾何著色器,將深度帖圖中的紋理信息按照距離拆分到緩衝,然後分為幾個不同的視角進行渲染,最後合成完整的圖像。因此最終實現的景深效果在特效方麵不會有任何縮水,遠景完全符合正常的虛化模式,如果仔細觀察的話,光影等細節依然得到保留。
#p#e#
● DX11帶來更快的景深處理
DX10的景深處理能夠實現近乎完美的景深效果,但通過不同視覺渲染的方法還是不夠靈活,而且會大大增加GPU後端處理(光柵單元)的負擔,產生負載不均的情況,導致性能損失較大。(圖09)
圖09
而DX11則通過DirectCompute中新增的Gather4數據采集指令,使得計算著色器能夠以四倍的紋理采集速度,幫助減少GPU紋理單元和光柵單元的負擔,從而在進行景深處理時消除了瓶頸,提升渲染效率。
3D遊戲圖形技術之三—環境光遮蔽(Ambient Occlusion)(圖10)
圖10
● 光柵化渲染的極限—環境光遮蔽
在GPU和CPU有能力進行實時光線追蹤(Ray Tracing,按照真實世界光線投射原理反向渲染的技術)之前,環境光遮蔽是當今光柵化渲染模式中最好、最高效的替代方案。環境光遮蔽通過計算光線在物體上的折射、衍射、散射和吸收,在受影響位置上渲染出適當的陰影,進一步豐富標準光照渲染器的效果。(圖11)
圖11
屏幕空間環境光遮蔽(Screen Space Ambient Occlusion,SSAO)是AO的一個變種,它通過對屏幕內進行簡單的空間劃分,然後進行計算。
SSAO的工作原理是:通過采樣象素周圍的信息,進行簡單的深度值對比來計算物體身上環境光照無法到達的範圍,從而可以近似的表現出物體身上在環境光照下產生的輪廓陰影。雖然隻是模擬實現,但確實能增強場景的層次感,讓畫麵更細膩,讓場景細節更加明顯。
#p#e#
● DX10.1大大提升SSAO效率
SSAO可以利用“逐象素場景深度計算”技術計算得出的深度值直接參與運算,也可以利用DX10.1當中的Gather4函數實現更快速紋理采樣及過濾。DX10模式下開啟SSAO性能損失非常大,因此SSAO技術多出現在DX10.1遊戲中。通過實際測試來看,DX10.1顯卡在DX10.1模式下(如果該遊戲支持的話)的性能相比DX10會提升20%-30%之多,從而使得SSAO成為真正實用的技術,而不再是花瓶。(圖12)
圖12
● DX11帶來更高清晰度的HDAO
在DX11中,SSAO被進一步升級至HDAO(高清晰),因為DX11中的Gather4函數更加強大,它可針對特定的顏色分別采樣,自動識別能做陰影映射的值,從而實現更快更好的陰影過濾。HDAO和SSAO都能向下兼容舊硬件,但運行速度會打折扣。
換句話說,DX11和DX10.1是在改進算法、優化性能的基礎上,使得顯卡有能力渲染出更複雜、更完美的特效,而DX10雖然在也能達到同樣的畫麵效果,但速度會很慢,實用性不大。(圖13)
圖13
3D遊戲圖形技術之四—鑲嵌細分曲麵(Tessellation)(圖14)
圖14
● 媲美電影CG畫質—鑲嵌式細分曲麵技術
遊戲和電影CG動畫,其實都是由計算機渲染出來的,那為什麼畫質差別那麼大呢?這是因為CG動畫的模型要比3D遊戲複雜成千上萬倍,所以CG也要成千上萬倍與電腦的性能才能渲染出來,而且還無法實現實時渲染。
3D遊戲考慮到家用電腦的機能,模型不可能設計得太複雜,否則就不具備可玩性。但為了讓遊戲變得更加逼真、達到更高畫質,太簡單的模型的確拿不出手,那麼有什麼方法既能大幅提升模型複雜度、又不至於給顯卡造成太大負擔呢?Tessellation技術就是為此而生的。(圖15)
圖15
簡單來說,Tessellation是一種能夠在圖形芯片內部自動創造頂點,使模型細化,從而獲得更好畫麵效果的技術。Tessellation能自動創造出數百倍與原始模型的頂點,這些不是虛擬的頂點,而是實實在在的頂點,效果是等同於建模的時候直接設計出來的。(圖16)
圖16
除了大幅提升模型細節和畫質外,Tessellation最吸引程序員的地方就是:他們無需手動設計上百萬個三角形的複雜模型,隻需簡單勾繪一個輪廓,剩下的就可以交給Tessellation技術自動鑲嵌,大大提高開發效率;而且簡單的模型在GPU處理時也能大幅節約顯存開銷,同時大幅提升渲染速度!
#p#e#
● Tessellation的妙用
Tessellation技術的原理很簡單,就是把簡單的模型智能的鑲嵌成為複雜模型,使得遊戲中的景物變得更加細膩真實。實際上除此之外Tessellation還能實現一些令人意想不到的功效。(圖17)
圖17
DX11代表作《DiRT2》就大量使用了Tessellation技術,它用Tessellation構建了動態水麵、動態布料旗幟和觀眾人物模型,其中加強人物模型不難理解,而動態水麵和布料效果足以媲美物理加速,讓人驚訝不已!
Tessellation(細分曲麵)水麵效果對比(圖18)
圖18
Tessellation(細分曲麵)布料效果對比(圖19)
圖19
雖然XBOX360和ATI的全線DX10顯卡都支持Tessellation技術,但支持Tessellation遊戲並不多,隨著DX11將Tessellation作為一項重要技術納入API規範之後,未來DX11遊戲都將會支持這一技術,但由於DX11中的Tessellation和DX10/DX9版本有很大的區別,因此並不會向下兼容,Tessellation隻能通過DX11顯卡在DX11遊戲中才能實現。
#p#e#
3D遊戲圖形技術之五—物理效果(PhysX)(圖20)
圖20
● 動態逼真—物理效果的實現
3D遊戲中“物理”指的是什麼呢?簡言之就是模擬真實世界中的物理定律,使得運動物體產生一些複雜的交互性幹涉,從而改變形狀、軌跡或狀態的一種技術。比如:流體(水、煙、霧)、碰撞、變形、爆炸、毀壞、布料、碎片……物理技術雖然屬於圖形技術的一種,但所涉及到的運算並非是圖形渲染,而是大量的並行計算,等結果算出來之後才會進行後續的渲染操作。(圖21)
圖21
這裏為什麼要強調GPU物理加速呢,因為CPU物理加速其實早就進入實際應用階段,但由於CPU性能有限(或者說CPU並不擅長做物理運算),大多數遊戲僅采用了少許簡單的物理效果作為點綴,未能給玩家帶來視覺上的震撼力,也就容易被大家所忽視。比如《半條命2》係列遊戲都使用了物理技術,在擊穿木板或爆炸時會有一定的破壞效果,但如果不特別指出的話您可能注意不到。(圖22)
圖22
● 物理引擎並不是隻有PhysX一種,但隻有PhysX支持GPU加速
除了CPU外,還有專用的PPU(即物理加速卡)來進行物理運算,但隨著GPU進入DX10時代,並行架構的流處理器擁有比PPU和CPU更強大的浮點運算能力,GPU物理加速技術被提上日程。
終於,在NVIDIA收購Ageia公司之後,通過CUDA技術將PhysX物理引擎重新編譯了一遍,使得GeForce 8以上的N卡都能夠支持物理運算,通過大量的測試來看,即便是低端N卡的物理加速能力也要比專用的物理加速卡強,CPU跟它根本不是一個級別。
就拿最近比較熱門的《蝙蝠俠:阿卡姆瘋人院》這款遊戲來說,是否開啟PhysX有著天壤之別,PhysX能夠讓蝙蝠俠的披風更拉風、地洞中的霧氣在人經過時產生互動、地麵上的碎片和紙屑在打鬥過程中飛舞、地板磚桌椅牆壁都有可能被打碎、布料和旗幟隨風而動……(圖23)
圖23
物理引擎也不是隻有PhysX一種,已經被Intel收購的Havok也提供了很不錯的物理解決方案,但目前支持GPU加速的還隻有PhysX這一種,由於GPU擁有很強的運算能力,因此PhysX引擎所實現的物理效果最為出色,但對顯卡的要求也很高。
開啟PhysX之後是十分消耗資源的,GTS250以下級別的顯卡性能損失特別大,最好是能安裝一塊額外的顯卡做專門的物理加速運算,而GTX260+以上級別的顯卡則可以同時處理圖形渲染和物理加速運算,能夠保證不低於30幀的速度。至於A卡則不支持PhysX加速,強行開啟的話隻能使用CPU進行運算,效率自然非常低下,不過使用A卡做渲染N卡做物理加速也是個臨時解決方案。
#p#e#
3D遊戲圖形技術之六—高動態範圍光照(HDR)(圖24)
圖24
● 大名鼎鼎的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。(圖25)
圖25
不過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壓縮模式進行壓縮的前後效果對比圖。其中左邊的圖像為原始圖像,中間的是在壓縮過程中損失的一些細節,而右邊的就是壓縮後的圖像。可以看出,從畫質上來看幾乎沒有損失(肉眼看不出),但是卻可以大幅度降低顯存的占用。(圖26)
圖26
經過了DX9C、DX10和DX11三代API,HDR技術在神不知鬼不覺的情況下被兩次“縮水”之後,才真正走向成熟,由此可見好的圖形技術不光是要效果出色,更重要的是擁有高效率和實用性,才能被更多的遊戲所接受,被更多的顯卡所支持。
#p#e#
3D遊戲圖形技術之七—視差貼圖(Parallax Mapping)(圖27)
圖27
● 傳統紋理貼圖的弊端
紋理貼圖大家都明白,就是往建好的3D模型上“貼”一些二維的畫麵,讓人物顯得更真實一些,比如常見的磚牆、凹凸不平的地麵等,這些如果全部用三角形來實現的話,那麼模型就會非常複雜,GPU將會不堪重負,但如果用“一張已經畫好磚紋的紙”貼上去的話,那麼渲染起來就會輕鬆好多。
但是這麼做也有很大的缺點,貼圖畢竟是2D的,如果在遊戲中換個角度看的話,很容易就會發現牆麵沒有任何立體感,磚紋看上去非常假!為了讓2D貼圖看上去也有3D立體效果,就誕生了多種貼圖技術,比如凹凸貼圖、法線貼圖、位移貼圖、視察映射貼圖等。
● 凹凸貼圖
凹凸貼圖技術簡單說起來是一種在3D場景中模擬粗糙表麵的技術,將帶有深度變化的凹凸材質貼圖賦予3D物體,經過光線渲染處理後,這個物體的表麵就會呈現出凹凸不平的感覺,而無需改變物體的幾何結構或增加額外的點麵。
例如,把一張碎石的貼圖賦予一個平麵,經過處理後這個平麵就會變成一片鋪滿碎石、高低不平的荒原。當然,使用凹凸貼圖產生的凹凸效果其光影的方向角度是不會改變的,而且不可能產生物理上的起伏效果。(圖28)
圖28
凹凸貼圖在今天看來已經是老的不能再老的一種技術了,雖然能夠獲得凹凸的效果,但是凹凸的程度非常受限製,基本上隻能做出一些簡單的浮雕效果來。這種技術通常用在一些觀察視角變化很小的情況上,例如地麵,牆壁,遠處的一些模型等等,如果角度稍微一大,你就會發現那些凹坑其實是根本不存在的。
● 法線貼圖
法線貼圖就是把一個表麵的凹凸情況用每個點的法線向量記錄下來,在貼圖的時候根據法線貼圖做光影的變換,從而實現凹凸效果。
法線貼圖比起凹凸貼圖而言,能夠實現的效果更好了,相對的就是運算量更大了,需要大量的紋理材質,每個象素的光照情況都需要計算這個點的法線向量和光照情況的夾角計算該點的亮度和顏色。為了節約GPU資源,ATI曾開發了3DC+紋理壓縮技術,這對於法線貼圖有莫大的幫助。
當然,法線貼圖技術同樣不是完美的,它也有著自己的不足,凹凸貼圖沒有能夠解決的切向效果問題肯定是仍然不能夠得到解決。此外,就是法線貼圖技術不能夠解決更大的凹凸情況的效果。大家如果去觀察的話,法線貼圖效果能實現的通常是一些內凹或者外凸不是很嚴重的表麵效果。
#p#e#
● 視差映射貼圖
為了解決法線貼圖在處理較深內凹之時不能夠達到的弊端,誕生了新的視差映射貼圖技術。該技術其實稱之為視差遮蔽貼圖似乎更容易理解一些,因為它會對紋理的坐標做變換,一些凸出的紋理會遮蔽到其他的紋理,這樣就會看起來具備更好的凹凸的感覺了。(圖29)
圖29
正如我們在上圖看到的情況一樣,地麵上石塊的凹凸感覺非常好,前麵的石塊已經對後麵的石塊進行了局部的遮蔽。雖然這個Demo中的磚塊依然很假,但磚塊之間凹凸的效果已經得到了完美體現,非常遺憾的是,沒有任何一款DX9遊戲使用過這種視差貼圖技術。
● 直到DX10時代才大量使用視差映射貼圖技術
視差貼圖技術的實現原理,其實和法線貼圖是一樣的,都是根據法線貼圖進行的處理,所以我們可以把它當作是法線貼圖的一種衍生技術。視差貼圖技術的實現是和硬件沒有必然聯係的,這個技術概念的誕生其實也非常早,隻是未能得到大量使用,這是因為視差貼圖技術的運算量要比法線貼圖大了不少,原來的顯示芯片因為性能有限基本都運行不了。(圖30)
圖30
#p#e#
最早使用視差映射貼圖技術的遊戲叫做《狂野西部》,首批DX10遊戲之一,DX9版本不支持。由於DX10顯卡都采用了統一渲染架構,可以方便的集中利用Shader資源,來渲染出複雜的特效。再加上有全新的幾何著色器輔助,因此特效的運用方麵可以更加靈活,遊戲開發商可以很容易的自定義一些特效渲染方式,所以將先進的技術都安置在DX10模式之中也是無可厚非。
遊戲中所使用的圖形技術動輒數以百計,即便是像3DMark這樣簡短的測試程序中,也包含了數十項先進的、甚至是獨創的渲染技術,有些技術甚至連一個像樣的名字都沒有,而真正能得到廣泛使用、被3D遊戲愛好這所熟知的技術,確實是屈指可數。
Crysis的畫麵之所以如此完美,是因為幾乎所有的高級圖形技術它都有所使用。(圖31)
圖31
所以,本文隻是有選擇性的介紹了一些知名的、肉眼看得出差別、能明顯提升遊戲畫質的圖形技術,其實在這些風光無限技術的背後,還有很多默默無聞的、用以提升渲染效率的輔助技術。(圖32)
圖32
而且,這些圖形技術也不是一朝一夕就能得到程序員的青睞、並獲得遊戲玩家的認可,比如HDR技術時至今日依然存在兼容性問題、動態模糊和景深經過三代API的改良效果才令人滿意、Tessellation技術更是經過六代七年的發展才修成正果!
每一代圖形API的更新,一方麵是加入新的特效、讓畫麵變得更完美,另一方麵是通過新的指令提升運算效率。顯卡進入DX10時代後,畫麵已經達到了巔峰,很難再有較大的突破,因此後續的DX10.1和DX11都主要是為了優化算法,使得遊戲運行更加流暢,也有利於遊戲開發者使用更多、更強的圖形技術,營造出更逼真的3D畫麵!
上一篇 製作材質貼圖的10個訣竅介紹
下一篇 次世代遊戲貼圖的概念和製作
熱門課程
專業講師指導 快速擺脫技能困惑相關文章
多種教程 總有一個適合自己專業問題谘詢
你擔心的問題,火星幫你解答提供優質的UE設計師培訓,涵蓋全麵和實戰的設計課程,包括UI/UX設計,交互設計等,由行業專家親自授課。火星時代教育,您提升設......
3DMax遊戲建模培訓 - 將你的华体会hth体育app在线登录 夢想變為現實
火星時代教育專門提供3DMax遊戲建模培訓,讓你的华体会hth体育app在线登录 夢想變為現實。
本文詳細介紹了3DMax建模及相關培訓機構的知識,挑選好的3DMax建模培訓機構是步入這個行業的關鍵一步,在火星時代教育,您可......
火星無基礎建模培訓可以幫助無基礎的學員理解模型的概念,並提供實戰項目和專業講解,為您打開航天行業的大門。
通過火星網頁UI設計課程,您將理解到UI設計的基本概念、火星網頁UI設計中的高級技巧以及其在火星時代的應用。火星時代為你提供專......
探索室內表現的重要性和絕佳的培訓學校——火星時代教育,讓您的設計理念飛翔。
1. 打開微信掃一掃,掃描左側二維碼
2. 添加老師微信,馬上領取免費課程資源
同學您好!