最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

從主機(jī)的世代演進(jìn)看渲染技術(shù)的發(fā)展

2018-06-23 22:47 作者:AICDG  | 我要投稿

       以前寫的專欄閱讀量都小的可憐啊,本來(lái)準(zhǔn)備寫個(gè)軟光柵和軟光線追蹤渲染器的教程,想想還是算了,也許B站專欄大家都是休閑的心態(tài)來(lái)看的,我也試著寫一篇更加科普向而不是技術(shù)向的文章,看看能否有所改變。

       最近一段時(shí)間惡補(bǔ)了一些圖形學(xué)的歷史,把 GPU gems 123 ,GPU pro 1234567 還有 GPU zen 中的render技術(shù)連貫的學(xué)習(xí)了一下。突然產(chǎn)生了這樣的想法,就是主機(jī)的世代演進(jìn),除了硬件機(jī)能大幅提高之外,渲染技術(shù)也有世代級(jí)別的進(jìn)化。大家對(duì)主機(jī)世代演進(jìn)已經(jīng)是非常熟悉了,而對(duì)圖形技術(shù)演進(jìn)應(yīng)該還是比較陌生的。這次我就帶著大家,隨著主機(jī)世代的演進(jìn),看圖形技術(shù)的發(fā)展。

世紀(jì)前 - 2D到3D的時(shí)代

       文章的主題是渲染技術(shù)的演進(jìn),主要是3D實(shí)時(shí)渲染技術(shù)的躍進(jìn)。但是為了完整性,還是記錄一下上個(gè)世紀(jì)主機(jī)的一些顯著圖形技術(shù)進(jìn)步。大家可以對(duì)號(hào)入座,想想有了這些技術(shù)之后,誕生了哪些或者說(shuō)哪類游戲。

  1. FC,MD,: 卷軸滾動(dòng)畫面(橫向/縱向卷軸)

  2. SFC: 實(shí)時(shí)縮放 (90年代初SEGA沒(méi)有立即出家用機(jī),而是出了光碟機(jī)版MD,后續(xù)又出了MD外掛32X)

  3. SS,PS1,N64: 光碟技術(shù)普及,3D CG技術(shù),早期3D渲染技術(shù)(二次方程紋理->幾何體光柵化)

  4. DC: 各向異性濾波,三線性插值

嚴(yán)格來(lái)說(shuō)DC屬于和ps2,NGC,xbox一個(gè)世代的主機(jī),但是其推出時(shí)間是1998年11月27日屬于世紀(jì)前。DC可以說(shuō)是一臺(tái)超越時(shí)代的主機(jī),各向異性濾波,三線性插值這樣的技術(shù)在實(shí)時(shí)渲染中大規(guī)模使用已經(jīng)是很久以后了,在98年就支持網(wǎng)絡(luò)對(duì)戰(zhàn)遠(yuǎn)見(jiàn)異常,而莎木對(duì)成熟的開(kāi)放世界和QTE系統(tǒng)設(shè)計(jì)無(wú)疑影響了后世眾多游戲的設(shè)計(jì)思路。而莎木對(duì)于人物的渲染,尤其是皮膚和眼睛的渲染,也是非常的贊。

PS2/Xbox - 可編程管線的世代

上上世代渲染方面最大的進(jìn)步,就是3D渲染技術(shù)從固定管線發(fā)展到了可編程渲染管線。本節(jié)完。

       好吧,如果這樣的話,那這節(jié)有點(diǎn)短。那就開(kāi)啟擴(kuò)展知識(shí)模式吧,極簡(jiǎn)單介紹一下PS2實(shí)現(xiàn)可編程管線的方式。而這就不得不提一下PS2的大殺器 - Emotion Engine。

       有人看到Emotion Engine,可能就和unity,unreal,cry engine這些游戲引擎混了,其實(shí)Emotion Engine并非游戲引擎,而是PS2的一個(gè)硬件模塊。

PS2 Emotion Engine
PS2 硬件架構(gòu)圖

       EE指整個(gè)PS2處理器和子系統(tǒng)的,也可以特指PS2的128位MIPS CPU。PS2還有兩個(gè)專用向量單元(Vector Unit),VU0和VU1。VU0和EE CPU直聯(lián),可以處理開(kāi)發(fā)者在C程序中編寫的特殊 inline Assembly code。VU1集成在GS(Graphics Synthesizer)內(nèi)部,VU1無(wú)法直接運(yùn)行用戶內(nèi)嵌代碼,需要用戶用匯編編寫程序,然后發(fā)送程序到VU1執(zhí)行。用不太恰當(dāng)?shù)膶?duì)比,VU0的開(kāi)發(fā)類似openGL,把文本格式的代碼傳送進(jìn)去運(yùn)行時(shí)轉(zhuǎn)譯,而VU1開(kāi)發(fā)類似DX,需要提前把程序變成二進(jìn)制格式,運(yùn)行時(shí)直接傳輸?shù)絧rogram memory運(yùn)行。

       可以說(shuō),VU0就是PS2的頂點(diǎn)著色單元,VU1就是像素著色單元,兩者直接的數(shù)據(jù)通過(guò)PS2的DMA(Direct Memory Access)傳輸。GS可以說(shuō)是PS2的renderer,光柵單元和紋理單元都在GS中。在GS處理完成后數(shù)據(jù)發(fā)送給GIF(Graphics Interface),完成圖像最終的顯示工作。

       PS2硬件各部分的詳細(xì)介紹可以去glampert的blog或者PS2的wiki上查看。

PS3/xbox360 - 延遲渲染的世代

       上個(gè)世代相比上上個(gè)世代,最大的特點(diǎn),就是畫面的突飛猛進(jìn)。得益于 HLSL/Cg 這樣的高級(jí)著色器語(yǔ)言流行,大家可以開(kāi)發(fā)更多跟高級(jí)的材質(zhì)和特效。眾多Pixal renderman時(shí)代積累的材質(zhì)也被移植到游戲中來(lái)。

       更加復(fù)雜的材質(zhì)帶來(lái)了幾個(gè)問(wèn)題:

  1. 隨著點(diǎn)光源增加,像素著色器負(fù)載成倍增加

  2. overdraw的代價(jià)極大(顯卡都是先渲染,然后才像素舍棄)

  3. 隨著材質(zhì)復(fù)雜程度和場(chǎng)景內(nèi)光源個(gè)數(shù)的變化,幀數(shù)劇烈波動(dòng)

總結(jié)一下,就是上世代最大的瓶頸,就是像素處理能力不足

       得益于RTT/FBO技術(shù)的成熟,以及上世代主機(jī)內(nèi)存的大幅度增加(PS3 256m內(nèi)存+256顯存,xbox360 512m共享內(nèi)存+10m超高速內(nèi)存,PS2 64m內(nèi)存+4m顯存+2m聲音專用內(nèi)存,Xbox 128m內(nèi)存),以及硬件支持貼圖的數(shù)量增加,延遲渲染被大規(guī)模使用了。

       overdraw最主要的情況,就是渲染了將要被舍棄的像素。而這以遮擋為最常見(jiàn)。那時(shí)候early-Z還不成熟,每個(gè)像素都是先渲染了,再深度測(cè)試。對(duì)于遮擋關(guān)系及其復(fù)雜的場(chǎng)景,overdraw就及其嚴(yán)重。處理這個(gè)情況,可以把渲染切分成兩個(gè)階段,第一個(gè)階段只有頂點(diǎn)處理和光柵化階段,不繪制材質(zhì),保存下來(lái)每個(gè)像素應(yīng)該進(jìn)行繪制的幾何信息,然后再第二個(gè)階段真正的進(jìn)行繪制。

       兩個(gè)階段就是兩個(gè)render pass。而在兩個(gè)render pass直接傳遞數(shù)據(jù),就要依靠RTT技術(shù)了,需要設(shè)計(jì)一個(gè)G-buffer,用來(lái)存儲(chǔ)場(chǎng)景的幾何體信息。

G-buffer

       對(duì)于場(chǎng)景中的光源,可以在渲染的幾何處理階段和材質(zhì)處理階段的中間,額外增加一個(gè)光源處理階段,用來(lái)記錄各個(gè)像素累計(jì)光源的情況。

延遲渲染管線(后處理可選)

       常見(jiàn)的延遲渲染就是這樣,總結(jié)一下延遲渲染的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  1. 支持眾多的動(dòng)態(tài)光源

  2. 提供穩(wěn)定的幀率

缺點(diǎn):

  1. 消耗巨量的顯存和顯存帶寬

  2. 對(duì)透明物體支持不佳

  3. 不支持硬件抗鋸齒

iPhone/android - 瓦片渲染

       移動(dòng)設(shè)備準(zhǔn)確來(lái)說(shuō)不是任何主機(jī)世代的一部分。但移動(dòng)設(shè)備的幾個(gè)特點(diǎn):低性能,超低帶寬,高分辨率。給渲染帶來(lái)了新的挑戰(zhàn)。解決這個(gè)問(wèn)題的方式,就是瓦片渲染。解決移動(dòng)平臺(tái)渲染的相關(guān)問(wèn)題的經(jīng)驗(yàn),直接影響了下個(gè)世代的圖形技術(shù),以及VR技術(shù)的發(fā)展。所以自然值得單開(kāi)一章。

       移動(dòng)平臺(tái)不使用傳統(tǒng)延遲渲染的原因:

  1. 移動(dòng)平臺(tái)顯存很小(支付不了龐大的G-buffer開(kāi)銷)

  2. 移動(dòng)平臺(tái)帶寬很小(而分辨率很高,全屏幕分辨率的G-buffer的帶寬開(kāi)銷更大)

  3. 移動(dòng)平臺(tái)像素處理能力也相對(duì)較弱(TAA這種軟抗鋸齒開(kāi)銷也很大)

       接下來(lái)以mali GPU為例介紹一下移動(dòng)平臺(tái)的TBDR技術(shù) 

目標(biāo):減少渲染期間所需的功耗巨大的外部?jī)?nèi)存訪問(wèn)

       不再以primitive為單位,執(zhí)行完頂點(diǎn)著色器后立刻執(zhí)行片段著色器。而是以rendertarget為單位,在一個(gè)rendertarget所有的頂點(diǎn)著色器執(zhí)行完畢后,再執(zhí)行片段著色器。執(zhí)行頂點(diǎn)著色器的過(guò)程中,GPU將屏幕分割為16x16的區(qū)塊,將訂單數(shù)據(jù)分散發(fā)送到每個(gè)工作集。片段著色器一次只處理一個(gè)區(qū)塊,計(jì)算完幾個(gè)區(qū)塊之后才訪問(wèn)下一個(gè)區(qū)塊。

優(yōu)點(diǎn):

  1. 工作集的所有訪問(wèn)都屬于本地訪問(wèn),速度快、功耗低(傳統(tǒng)模式需要占用的存儲(chǔ)巨大導(dǎo)致只能放于內(nèi)存之中)

  2. 區(qū)塊足夠小,我們實(shí)際上可以在區(qū)塊內(nèi)存中本地存儲(chǔ)足夠數(shù)量的樣本,實(shí)現(xiàn) 4 倍、8 倍和 16 倍多采樣抗鋸齒??商峁┵|(zhì)量高、開(kāi)銷很低的抗鋸齒

  3. 在每個(gè)區(qū)塊計(jì)算完成寫回內(nèi)存時(shí),因?yàn)閰^(qū)塊足夠小,可以通過(guò) CRC 檢查將塊的顏色與主內(nèi)存中的當(dāng)前數(shù)據(jù)進(jìn)行比較(這一過(guò)程叫做“事務(wù)消除”—)如果區(qū)塊內(nèi)容相同,則可完全跳過(guò)寫入,從而節(jié)省了 SoC 功耗

  4. 可以采用快速的無(wú)損壓縮方案(ARM 幀緩沖壓縮 (AFBC)),對(duì)逃過(guò)事務(wù)消除的區(qū)塊的顏色數(shù)據(jù)進(jìn)行壓縮,從而進(jìn)一步降低帶寬和功耗

  5. 大多數(shù)內(nèi)容擁有深度緩沖和模板緩沖,但幀渲染結(jié)束后就不必再保留其內(nèi)容。如果開(kāi)發(fā)人員告訴 Mali 驅(qū)動(dòng)程序不需要保留深度緩沖和模板緩沖(理想方式是通過(guò)調(diào)用 glDiscardFramebufferEXT (OpenGL ES 2.0) 或 glInvalidateFramebuffer (OpenGLES 3.0),雖然在某些情形中可由驅(qū)動(dòng)程序推斷),那么區(qū)塊的深度內(nèi)容和模板內(nèi)容也就徹底不用寫回到主內(nèi)存中。又大幅節(jié)省了帶寬和功耗

  6. 完全由驅(qū)動(dòng)實(shí)現(xiàn),對(duì)于開(kāi)發(fā)者來(lái)說(shuō)是透明的,開(kāi)發(fā)者只要當(dāng)做普通的前向渲染即可

缺點(diǎn):

       任何基于區(qū)塊的渲染方案的主要額外開(kāi)銷是從頂點(diǎn)著色器到片段著色器的中間構(gòu)建工作集的過(guò)程。幾何處理階段的輸出、各頂點(diǎn)可變數(shù)和區(qū)塊中間狀態(tài)必須寫出到主內(nèi)存,再由片段處理階段重新讀取

       powerVR的TBDR還有Adreno的flex render技術(shù)大同小異,三家中powerVR實(shí)現(xiàn)的最好,Adreno實(shí)現(xiàn)的最差。flex render主打自動(dòng)在前向渲染(TFR)和TBDR切換,但是實(shí)現(xiàn)的并不好,最近幾年貌似也不再提flex render這個(gè)詞了。

PS4/xbox one - Forward+

       終于到本世代了,本世代的最重要的一個(gè)點(diǎn),就是圖像分辨率,從720P,提升到了1080P(后續(xù)機(jī)型甚至提升到了4k),1080P相比720P,所要填充的像素變?yōu)榱?.25倍。對(duì)于顯存和顯存帶寬都提出了新的需求。

       接著聊一下硬件的發(fā)展,以xbox系為例,比較一下xbox 360和xbox one的差距

       可以看到,理論浮點(diǎn)能力是原來(lái)的5倍,但是內(nèi)存帶寬不過(guò)原來(lái)的3倍,內(nèi)存更是高達(dá)之前的8倍。

       在2012年,迪士尼詳細(xì)完整的闡述了BRDF模型,構(gòu)建了完整的PBR理論。這也給本世代的引擎提了一個(gè)新的要求,就是TA可以自由的編寫材質(zhì)shader,美術(shù)也可以更自由的調(diào)整材質(zhì)。而延遲渲染的材質(zhì)階段shader完全相同,美術(shù)人員的調(diào)節(jié)能力其實(shí)很小。

       基于以上的問(wèn)題,一直新型的渲染方式Forward+被提出了。F+渲染也分三個(gè)階段:

  1. Z prepass:提前寫一遍深度緩沖進(jìn)行剔除防止overdraw

  2. Light culling:保存影響該像素的光源信息

  3. Final shading:最終渲染,和傳統(tǒng)的前向渲染方式相同

F+管線

       F+的Light culling和Final shading兩個(gè)階段最重要的特征,就是 基于瓦片。

基于瓦片的光源剔除(藍(lán)色物體為圖元,橙色區(qū)域表示瓦片視錐,只有影響該區(qū)域的光源才被認(rèn)為可以影響該tile渲染結(jié)果的光源)
光源剔除結(jié)果(不同顏色表示該Tile受點(diǎn)光源影響的個(gè)數(shù))

       如同上文移動(dòng)端渲染中所說(shuō),基于瓦片進(jìn)行光源和圖元剔除之后,繪制壓力和帶寬需求已經(jīng)大大降低。因?yàn)橹斑M(jìn)行了z prepass,還能將被遮擋的圖元提前去除,進(jìn)一步降低了overdraw。

       F+渲染性能和延遲渲染的比較(數(shù)據(jù)來(lái)源于AMD)。

F+相比延遲渲染的性能提升

       F+渲染改進(jìn)了什么:

  1. 觀察最近10年NV顯卡其實(shí)就可以發(fā)現(xiàn),顯卡的像素性能提升了625倍,但是帶寬提升不足10倍。可以說(shuō),本世代相比上個(gè)世代,渲染性能(遍歷光源)損失不那么大,更多的drawCall不是問(wèn)題,相反,帶寬反而更瓶頸。

  2. 在每個(gè)瓦片內(nèi),采用前向渲染,這就帶來(lái)了兩個(gè)優(yōu)勢(shì),支持半透明物體,支持硬件抗鋸齒(MSAA)

  3. 支持更多的動(dòng)態(tài)光源(每個(gè)瓦片受影響的動(dòng)態(tài)光源都是culling過(guò)的)

  4. 材質(zhì)系統(tǒng)設(shè)計(jì)更為自由,一套系統(tǒng)可以同時(shí)支持PBR和NPR(只要想的話)

  5. 幾何無(wú)關(guān)的階段可以使用計(jì)算著色器,大幅度縮短管線長(zhǎng)度。并且瓦片直接可以并行(相比移動(dòng)平臺(tái)的TBDR)

  6. AMD在2012年的新圖形API mantle,為Sony和微軟設(shè)計(jì)多線程渲染接口提供了思路和原型。依靠多線程異步渲染,進(jìn)一步增加了drawCall的數(shù)量

動(dòng)態(tài)光源個(gè)數(shù)對(duì)F+/延遲渲染的性能影響

       F+渲染的歷史遺留問(wèn)題:仍然需要保存巨大的G-Buffer和light Buffer。就是說(shuō),F(xiàn)+渲染相比延遲渲染,著重解決了帶寬占用的問(wèn)題,但是顯存占用問(wèn)題依舊嚴(yán)重。(這也是移動(dòng)平臺(tái)遲遲不用F+的原因)

F+渲染的改進(jìn)。在GDC2016上,頑皮狗工作室展講解了《神秘海域4》的優(yōu)化細(xì)節(jié)。對(duì)于GPU來(lái)說(shuō),分支依舊是一個(gè)昂貴的操作(現(xiàn)在依舊可以簡(jiǎn)單的認(rèn)為,增加一個(gè)分支操作,GPU性能折半)。所以引擎就要保證每個(gè)tile盡可能少的切換渲染狀態(tài),每個(gè)材質(zhì)內(nèi)部也要盡可能減少分支語(yǔ)句。

展望:PS5/Xbox two

       今年E3大家都吃了不少餅,但是萬(wàn)眾期待的PS5和Xbox two缺雙雙缺席。其實(shí)我以前有個(gè)觀點(diǎn),就是如果渲染技術(shù)沒(méi)有重大突破的話,算不上次時(shí)代。PS4 pro/Xbox one x都是這樣,1080P到4K提升固然明顯,但是是暴力硬堆硬件堆出來(lái)的(PS4 pro整出的棋盤渲染算不上什么好點(diǎn)子,真的是不得已而為之)。所以我以前確實(shí)對(duì)PS5興趣不大,如果索尼真的還整個(gè)不向下兼容,不是就呵呵了。

       不過(guò),在今年的GDC大會(huì)上,微軟和NVIDIA聯(lián)合展示了實(shí)時(shí)光線追蹤技術(shù),可以說(shuō)給下個(gè)世代的主機(jī)和游戲,帶來(lái)了新的可能。光線追蹤對(duì)于實(shí)時(shí)渲染來(lái)說(shuō)可是顛覆性的,它吧以前實(shí)時(shí)渲染所用的光柵化那套完全放棄了。一直以來(lái),都是實(shí)時(shí)GI是圖形學(xué)的圣杯。但是想不到的是這個(gè)圣杯拿到的如此之快。

       在NV之后,AMD也不甘示弱,拿出了RadeonRay作為回應(yīng)(RadeonRay相比RTX/DXR要慢,現(xiàn)在主要是Unity用來(lái)加速烘焙)。如果再加上前幾年powerVR提出的openRL(causticGL,光線追蹤和光柵化的一個(gè)混合渲染方案)。我們完全可以猜測(cè)下一世代主機(jī)會(huì)搭載實(shí)時(shí)光線追蹤的機(jī)能,哪怕說(shuō)是類似openRL那樣的混合方案。

       希望下一世代主機(jī),能給我們帶來(lái)驚喜吧。

結(jié)語(yǔ)

       這篇文章個(gè)人摻雜了很多主觀看法。如果有錯(cuò)誤,懇請(qǐng)各位大牛斧正。也歡迎有興趣的人一起討論。畢竟一家之言,無(wú)論如何都是十分受限的。如果喜歡,也希望大家能幫忙分享和推薦。

從主機(jī)的世代演進(jìn)看渲染技術(shù)的發(fā)展的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
永善县| 湾仔区| 巢湖市| 镇沅| 平顺县| 四会市| 达尔| 武山县| 马公市| 松江区| 榕江县| 钟山县| 会昌县| 府谷县| 昌都县| 北流市| 临颍县| 武平县| 湘潭市| 汤原县| 蒙阴县| 昔阳县| 芦山县| 南通市| 神农架林区| 卓资县| 昌乐县| 河津市| 黄龙县| 浦江县| 巴林右旗| 德昌县| 兰溪市| 阿鲁科尔沁旗| 天等县| 九龙城区| 井冈山市| 顺义区| 石家庄市| 宜黄县| 六枝特区|