PS4pro所謂棋盤渲染到底是什麼概念?

為什麼pro可以做到4K 60幀,而哪怕gtx1080跑4k解析度也有點勉強?所謂棋盤渲染到底是什麼技術,和真4K區別在哪裡呢


寫在前面:
必須先說明本回答從其視覺原理出發而對技術細節未有描寫,希望大家看了回答能對棋盤格渲染這個概念有個直觀的了解。據知乎用戶YT IM和大薩比的回答透露,PS4pro的插值方式也許在棋盤格渲染基礎上保留了更多的3D信息來更好地優化渲染圖像,達到更佳的視覺效果。

正文:
並非PS4pro獨有,其他遊戲,例如彩虹六號圍攻在PC上的渲染技術也使用了棋盤格渲染Checkerboard Rendering Technique)可以在畫面選項中開啟:

這裡的「頁框交錯過濾」就是這個技術。而TXAA其實就是結合了反鋸齒的頁框交錯過濾,開TXAA 2X已經能達到欺騙肉眼的效果了。

那麼這個棋盤格渲染到底是怎麼回事?
這是一種把低解析度插值成高解析度的一種畫面拉伸技術。
首先要注意:很多人會混淆插值和拉伸,但嚴格來說它們不是同一個概念,我們先把它們理理清楚。
光柵圖像(點陣圖)拉伸畫面(Upsampling),意味著需要更多的像素去填充增大的空間。
這就是插值(Interpolation)
圖像處理早期,插值的方式就是簡單地用鄰近像素填充拉伸後的畫面(Neighbors Interpolation)
例如電子遊戲早期時代,大部分遊戲輸出到隔行掃描CRT上是只有半場圖像的,就像這樣:

放大後

而實際渲染的畫面大小是這樣的:

一幀實際渲染像素其實是320*240,在電視上拉伸成640*480大小的畫面(近似比方,實際MD的輸出是320*224)
如果在逐行掃描電視上,就會拉伸成這樣:

也就是把每個像素在水平和垂直方向上拉伸了一倍。這是直接拉伸(Nearest Neighbor)的概念。
而進階的插值處理,需要在像素之間用它們的中間色插補,相比拉伸直接複製相鄰像素,這類插值有個計算過程。而計算中間色的方法有很多,這就形成了多種插值方式。
做個模擬,是這樣的
水平拉伸,垂直方向線性插值(Linear Interpolation):

水平和垂直方向都插值(雙線性插值 Bilinear Interpolation):

(想像一下黑色部分由相鄰像素間生成中間值像素插補)
這個插值其實就是電腦模擬器上才有的柔化過濾的功能,看起來比直接拉伸稍微柔和一些。在當時的遊戲主機上是沒有這個處理的,因為:
一是在CRT電視上觀察,基本沒有區別。
二是插值是為了更保真地再現三維實體映射成二維點陣圖前的畫面,這在像素時代沒有意義。

HD分割線
------------------------------------------------------------
到了HD時代,在有限的硬體資源和無限的感官要求越來越難以調和的矛盾下,插值的作用就體現出來了,還是拿圖說明(手機用戶請點開看大圖)
原圖(488*540):

為了節省資源,更快地渲染,採用抽線渲染映射成了244*540的畫面:

直接拉伸(Nearest Neighbor),鋸齒真難受:

水平方向線性插值(Linear Interpolation),注意地磚邊緣,鋸齒弱了,但是雕塑還是很不爽:

怎麼辦呢?看來硬體不行原生解析度上不去靠投機取巧還真沒辦法?

別急,看看這個:

這張圖從垂直方向和水平方向都間隔地抽去像素,實際渲染像素總量也是減少一半。

直接拉伸看看
試試水平拉伸:

垂直部分邊緣出現間隔鋸齒。

試試垂直拉伸:

水平部分邊緣出現間隔鋸齒,但也比抽線方案強多了(這已經接近彩虹六號圍攻的頁框交錯過濾技術)。

然後看看在所有相鄰像素之間取中間色值,插值的效果:

怎麼樣,儘管還是有部分瑕疵,但是視覺效果怎麼說都舒服多了吧;
放大對比:

黑色部分像素由相鄰四個像素的平均色值生成插補
為了方便理解我採用了一個像素佔一個棋盤格的方式插補,在實際的圖形渲染技術中還有佔1/4棋盤格等其他交替插補方式,視覺原理是一致的。

它的優點已經很清楚了,缺點就是在對比過於強烈的邊緣會出現交錯雜點,所以盡量要與反鋸齒技術配合避免強烈的邊緣。
拿ARMA3來舉例(需要點大圖看細節)

未經反鋸齒處理的情況
原圖:

50%棋盤格抽取:

插值:

在邊緣處鋸齒更明顯了。

經過反鋸齒處理的情況
原圖:

50%棋盤格抽取:

插值:

差別小了,細看瑕疵都在對比強烈的物體高光邊緣處。

這就是所謂的棋盤格渲染Checkerboard Rendering Technique)的奧妙。
而且例圖本身解析度不高,要是在客廳坐沙發上看4k電視,這種插值法是很難看出瑕疵的;
要知道這可比直接渲染要少了一半的像素值啊,而簡單的插值運算本身對資源消耗是可以忽略不計的。
也就是說可能帶來大量的幀數提升!畢竟60幀才是起碼的正義。

------
2016/9/29補充更新題外知識點
在棋盤格插值渲染之外我們常用的除了線性插值(Linear Interpolation)、雙線性插值(Bilinear Interpolation)和三線性插值(Trilinear Interpolation)外還有雙立方插值(Bicubic Interpolation)
它們也通常出現在3D遊戲的貼圖處理領域,稱為貼圖過濾。
這是50%的雙立方插值(Bicubic Interpolation):

很熟悉的朦朧感吧,它的計算會比較慢一些。其實雙立方插值就是目前主流圖片處理軟體縮放圖片的默認處理方式。

------
例圖是 MD 上的 Final Fight CD
以及 Carlo Scarpa 設計的 CANOVA SCULPTURE GALLERY 擴建工程
和ARMA3

所有插值效果圖片都是本人手工用PS算出來的(計算機處理會有更多的優化方式,原理大同小異,也從側面說明插值演算法非常省資源)

商用平台轉載需本人同意,論壇轉載保留作者出處即可。
(完)


知道實現細節的表示目前答案包括高票答案,龔大的答案都不對,鑒於NDA,不能回答具體細節。我這裡只能指出回答的漏洞。
首先高票答案給出了彩虹六號的渲染方法,但後來的解釋根本沒還原其理論。我看了GDC彩虹六號的文檔,只能說高票回答把其引言部分總結了一下,正題都沒進。另外通篇回答連checkerboard都沒提到。僅僅是介紹了一下圖像差值的演算法,這些演算法早就有了,為什麼以前沒有人提過?差值放大羅馬之子里有,最近的守望先鋒也有,動態解析度更是隨處可見,為什麼他們沒有像sony這麼吹噓?也沒能上GDC發表?
再有,就算是sony的差值演算法多麼高超,那直接硬體輸出就行了,像電視一樣,為什麼還要開發者特殊對應?
巫師3的團隊已經表示要加緊開發新作,沒時間對應4k。可以理解。sony的checkerboard並不是加一個差值演算法就ok的事。
最後,至於這個4k的真偽就仁者見仁了,我只能說在pro上的4k雖然沒有原生4k聽起來漂亮,但整個渲染管線(非差值)是真實的計算了4k的像素點。


首先要明確一個觀點:PS4 Pro目前有不少遊戲都是「假4K」

這個所謂的「假」,指的是說遊戲里顯卡直出的圖像,和最終顯示在電視上的圖像,是不一樣大的。

那麼,之所以最終還是4K輸出的,就到了你說的後一個問題「上採樣」 or 「重構」

你說的那個,英文叫做 checkerboard rendering

為什麼叫棋盤?
是因為如今的圖像格式就是按照像棋盤一樣的排布去構成的,就如下圖所示

為了簡單說明這個問題,我從 (PS4 Pro, checkerboard rendering) 借用一下這張圖

這裡首先要說一點:索尼並沒有很詳細的去介紹Pro所使用到的4K圖像渲染技術。
所以不一定實際情況就真的是和網上大多數人所推斷的那樣

(1)一般要輸出一幅圖像(frame),GPU是會渲染出所有的像素值來的

(2)而你渲染的工作量,則直接決定了遊戲可能達到的幀數。
這樣就相對好理解了吧:Pro機能固定的情況下,對於同一個遊戲而言,如果它要渲染的圖像尺寸越大,那麼最終輸出幀數就會越小

(3)那麼最直接的辦法就是去「減小渲染工作量」。

(4)這樣的話就可以採用上圖所示的這種棋盤格渲染的方案。
這個方案,是只渲染圖像中紅色的像素點。

而綠色的部分,不進行渲染,而是直接通過紅色的像素進行重構

這裡就可以利用一些視頻壓縮裡面的傳統處理方法去重構圖像。

要注意一點:未被渲染的像素點,必須要用它周圍的像素點去進行重構

這裡主要的依據在於:圖像的空間連續性

舉個簡單的例子來說:當你把一張圖片放大像素變成一個一個方塊的時候,你是很容易看到絕大多數相鄰的像素,它們的顏色都是相近的,在沒有任何信號雜訊的情況下,除非是一些物體的邊緣以及文理複雜的高頻信號區域,不然的話,相鄰像素之間的變化都是比較平緩的

那麼,依據上面這樣的結論,我們就可以對像素進行重構了

具體的處理方式可能會非常非常多,我具體也不知道Pro用的是哪一種

但是大體的邏輯還是有相通之處的
參考這篇GDC的文章:
http://alex.vlachos.com/graphics/Alex_Vlachos_Advanced_VR_Rendering_Performance_GDC2016.pdf

我畫個簡單的圖來說一下

上面9個字母,我們假設代表了9個像素,這樣構成了一個3-by-3的正方形。

那麼,我們如果是想要重構E的話,可以比如說拿B和D來重構,或者拿B和F來重構,或者是拿C和G來重構

如果是拿B和D的話,也就是2鄰域的重構(2 neighbors)
如果是拿C和G的話,也就是對角線的重構(diagonal)

具體重構方式根據實際情況自己設置
然後,則是更加關鍵的一步:加權

如第二幅圖所示的,當你通過鄰域去重構出了像素之後。
其實對於重構出來的E來說,A~I 它們的貢獻並不是一樣的。有的貢獻大,有的貢獻小

所以,你需要給每個像素,再乘以一個權重係數。這樣最終重構出來的E才是我們想要的。

(5)相比於全像素的渲染。重構一個像素只需要對它周圍的像素值做一個非常簡單的線性計算(E=w_1*B+w_2*D),這樣一來,就可以極大減小計算負擔,而且又因為重構的像素點互相之間不會影響,所以也可以很好的使用並行化計算去進行處理


但是,即便減小了計算負擔,也不代表就毫無負擔了。如果是一張4K的圖像,假設沒幀只渲染了50%,那麼你依然要重構50%,也就是2*1080p的像素數量。並且「渲染50%的時間+重構50%的時間」需要在33ms之內完成

(6)要注意一下,其實這種方法,只是因為機能不夠而採取的一種技巧。
如果當PS4 Pro的機能非常強大的時候,就不需要這種手段了,就可以直接執行全像素渲染了

(7)對於PC遊戲而言。因為你插什麼卡就給你什麼體驗。
顯卡廠商遊戲廠商沒那個義務絞盡腦汁去給你優化

並且,對於顯卡廠商來說,他巴不得你覺得自己顯卡不夠用了,想要換新的

所以,PC遊戲基本沒有必要用這種形式去強行上4K
你要是覺得GTX1080都不夠,那NV會很高興啊,你可以繼續去買Titan XP啊。

#####
上面只是基於空間信息的一種重構,其實也有研究了基於時域的重構的。這裡就不深入了

總之,目前來說:PS4 Pro確實是假4K,不是原生的4K畫面


幾個高票回答都說漏了一點。PS4的Checkerboard和彩虹六號還是有區別的,PS4 Pro可以在輸出低解析度的color buffer同時生成全解析度(也就是4K)的深度等信息(這裡的「等」信息很重要,但官方既然保密我也就不多說了)輔助upsampling,做得好的話跟原生4K幾乎看不出區別的,並非簡單的插值而已。
個人認為類似的功能在PC上可以用多個pass來模擬,但效果如何我還沒試過。


詳細解析在 @一疼 的答案里。

我就簡單一句話,渲染個小的解析度,拉大到4K。但這麼說很沒技術含量對不對,1990年就有了對不對。改個名字叫棋盤格渲染就能瞬間高大上對不對。

然而說到拉伸,其實索尼有業界最好的拉伸演算法,叫4K X-Reality PRO。在4k電視里用,我家那台75寸的就是,可以把1080p拉伸到4k,同時邊緣尖銳度比bilinear/bicubic的更好。同樣的演算法也可以放到ps4甚至手機。


dota2的渲染質量應該不是棋盤交錯,棋盤交錯本身也不僅僅是拉伸.


彩虹六號:圍攻的方法應該是和PS4pro方案最為接近的, @一疼的回答中有提及。

在主機上,彩虹六號的輸出解析度是1080P,實際渲染解析度為960*540+2xMSAA,在此基礎上插值後再結合Temporal AA復用多幀數據,進一步減輕checkboard rendering所帶來的artifact。最終效果很棒,在接近發售媒體發布評測前基本沒有人注意到使用這一方法的區別。

詳細介紹見 GDC Vault - Rendering "Rainbow Six

Eurogamer的評測
Face-Off: Rainbow Six Siege ? Eurogamer.net


Sakura那是不懂來搗亂的,這裡點名批評,幾位大神都已經把技術細節說得很清楚,我在這裡補充一下,棋盤效果還有一個好處,明顯降低物體邊緣的閃爍感,這比其他任何反鋸齒技術都更有價值,僅僅是拉伸畫面的話,不會這麼流行。等我先去找找截圖和視頻然後再詳細說明。


視頻拉伸技術,就是把低清晰度畫面差值變成高清晰,但是細節肯定不如真4k多,應該和1080p差別不大


其實就是使直覺看起來會感覺比簡單拉伸的畫面更柔和一點的奇技淫巧而已,和抗鋸齒的作用類似,作用就是用後期障眼法處理讓眼睛不會那麼難受,真實的畫面細節還是原生渲染的那麼多。

就像現代FC模擬器一般都有類似的差值功能,能夠讓FC遊戲的畫面看起來有類似HD的效果。但是假的終究是假的,線條和色塊再「清晰」你也不可能看到比爾或蘭斯的面部五官,因為本來就沒有渲染的東西你怎麼可能讓他憑空出現呢?

當然這種技術本身還是不錯的,將來很可能就跟抗鋸齒等技術一樣重要。就像一個盲人戴上假眼或者眼罩肯定會比直接裸露兩個大黑洞好看點。只是我們要知道這並非神秘的黑科技,就是一種欺騙眼睛的騙術而已。


推薦閱讀:

在標準的色庫里可以表現「銀色」嗎?
既然可以用拼音打字,當初為什麼推廣五筆?
該怎麼在別人裝弱的時候擺正自己的心態?
如何下載網頁上的視頻?

TAG:遊戲開發 | 計算機 | 顯卡 | 家用遊戲機 | PlayStation4 |