Fw: [問題] 請教關於PS4性能到什麼程度

作者: cjcat2266 (CJ Cat)   2014-06-16 09:58:45
※ [本文轉錄自 PlayStation 看板 #1JdaymVn ]
作者: cjcat2266 (CJ Cat) 看板: PlayStation
標題: Re: [問題] 請教關於PS4性能到什麼程度
時間: Mon Jun 16 09:58:05 2014
再怎麼好的硬體,沒有好好撰寫的遊戲軟體搭配,也是白搭
高檔的硬體,也可以因為遊戲開發者的沒有好好優化
而展現低檔次的效能
PC的硬體組合五花八門
其實對PC遊戲開發者而言是很辛苦的
(就像Android手機對遊戲開發者一樣)
唯一能夠廣為人接受的方式
就是提供各種不同的遊戲設定
讓玩家調整出最適合自己PC的組態
暴風雪算是很有良心的了
不但針對各種視覺特效提供不同等級的設定
每個項目還有說明文字,告訴玩家各選項是針對什麼硬體做調整
他們大可像大部分的遊戲一樣
簡單提供Low, Medium, High三種Graphics Settings選項即可
如同bachelorwhc說的一樣
可以把遊戲主機當作人家幫你組好的套裝機
或許綜合性能沒有辦法比過頂尖的PC
但是由於硬體規格統一
遊戲開發者可以針對單一硬體組態而做出最佳的優化選擇
主機獨佔的遊戲更不用說
硬體固然重要
但是能夠發揮出的效能,完全取決於遊戲開發者
DirectX或OpenGL是為了減輕開發者的負擔
而設計出的高階圖像API
其中不乏針對硬體指令操作不當的防呆機制
例如還沒有綁定shader program就發出繪圖指令
DirectX會直接當機加上輸出錯誤訊息
OpenGL則是透過函式回傳錯誤代碼
高階圖像API到頭來還是需要把高階的函式呼叫
轉換成GPU懂的機器語言代碼串流,包成封包餵給GPU
對於開發者固然是方便
但是多了至少一層的抽象層,就是代表效能的損失
頑皮狗不用考慮跨平台,所以可以完全針對PS4的硬體做優化
GPU方面
不使用DirectX或OpenGL這種高階API
而直接生成GPU的機器語言代碼串流封包,餵給GPU
CPU方面
不像PC開發者,無法事先得知總共有幾個可用的CPU核心
PS4的CPU核心就是八個,兩個被OS佔去,所以遊戲可用的是六個
頑皮狗的做法是生成六個常駐thread
透過設定CPU核心親和力,一個thread綁定一個核心
這樣可以省去透過OS層來分配thread執行時間的效能損失
每一個thread不停地把工作序列裡面的工作提出來執行
這些thread不太會被OS從CPU核心上換掉(因為一個核心就是綁定一個thread)
所以不會有context switch的效能損失
記憶體方面
對DirectX或OpenGL有經驗的人應該知道
如果要建構vertex buffer或texture
需要在main memory先把資料建構好
然後透過高階API的函式呼叫,把資料複製到video memory
這個兩段式的寫入,其實是浪費時間,因為寫入資料是一模一樣的
PC硬體由於可以自行搭配,main memory和video memory通常是分開的
main memory就是大家平常簡稱的"記憶體"
video memory則是跟繪圖卡綁定的GPU專用記憶體
PS4是統一規格,所以沒有必要把main memory和video memory分開
總共的記憶體就是8GB,被OS用掉2.5GB,所以遊戲可以用5.5GB
這5.5GB是可以CPU和GPU共用的 (unified memory)
CPU建構好vertex buffer或texture之後
只要把指標傳給GPU,GPU就可以對這些資料做存取
不像一般PC需要把同樣的資料寫入兩次
PS4相關的硬體組態和其他軟體優化重點
可以參考頑皮狗的Jaon Gregory在XXI SINFO的演講
https://www.youtube.com/watch?v=f8XdvIO8JxE
bachelorwhc也提到了GI (Global Illumination)
我把我所知道的一些GI技術分享一下
如果有學過電腦圖學
一開始通常是教phong shading之類的渲染技術
這種渲染方式是所謂的Local Illumination
因為單一個表面,只考慮光源直接對它的照明,而忽略周圍環境的影響
所謂的Global Illumination就是把環境的影響也考慮進去
如影子、環境遮蔽、環景反射
說起來容易,但是要在即時運算的速度下運算正確的GI結果是不可能的
連offline render的GI都是用離散的光子模擬的了,更別說即時運算
所以遊戲開發者必須用其他方式,做出很像是GI的效果來"騙"玩家
影子基本是必備的GI效果
在low-poly的時代,還可以使用shadow volume這個技術
但是隨著現代遊戲模型面數的增加,shadow volume也失去了實用性
現在流行的技術是shadow map,比較不會因為模型面數而拖垮效能
然而缺點是影子的品質取決於shadow map的解析度
解析度過低的shadow map,就會讓玩家看出放大的影子像素
為了避免這個問題,要嘛提高shadow map的解析度
要嘛對影子進行柔化的後製處理
環境遮蔽(ambient occlusion,簡稱AO)則是另外一個AAA遊戲必備的GI效果
之前也說過了,用離散光子模擬太慢了
現在的主流技術是一開始由Crytech提出的SSAO (Screen-Space AO)
利用Z-buffer周邊像素的資訊
來近似每一個像素因環境遮蔽而失去的漫射光量
這是全螢幕的後製特效
所以跟場景上的物件數和面數沒有關係
至於環境反射,通常是用一個反射environment map來蒙混過去
拿The Last of Us做例子
大樓的窗戶和地上的積水所反射出來的環境並不是真正周遭的環境
而是一個是先準備好的environment map
由於有經過模糊處理,沒有仔細觀察是不會發現的
有些賽車遊戲為了要真的在車身上做出真實環境反射的效果
必須以車身為中心,額外對周圍全場景做多次渲染
效能消耗取決於周圍環境和模型的複雜度
額外的draw call也是很貴的
最近有一個流行的環境反射"騙術"
是使用含有normal資訊的render target、main render target和Z-buffer
取得每一個像素一次光反射於main render target上的"著彈點"
用這個顏色資訊來模擬一次光反射的效果
這個技術叫做Screen-Space Ray-Traced Reflection,簡稱SSRR
如同SSAO,此技術為全螢幕後製特效
跟場景上的物件數和面數沒有關係
缺點是有時候反光著彈點不在main render target上
這個時候就會出現資料缺乏而反光資訊不完整的瑕疵
但是通常SSRR的反光會做模糊處理,所以玩家不太會注意到
PC版的Assasin's Creed IV就有使用SSRR
嗯...其實我寫到後來也忘記我一開始的主題是什麼了
就當作是brain dump好了
以上
作者: viceversa56 (姊超猛)   2014-06-16 12:22:00
沒讀過電腦圖學,感覺裡面很多知識不錯,有空來研究
作者: Kendai (ShouldIStayOrShouldIGo)   2014-06-16 13:13:00
推 memory那段對我非常之重要
作者: Killercat (殺人貓™)   2014-06-16 13:48:00
kernel thread sync是個很大的麻煩就是...\
作者: art1 (人,原來不是人)   2014-06-16 14:01:00
推!
作者: humanfly (laguna@HEADSHOT)   2014-06-16 20:38:00
感謝分享 而且還是中文的XD
作者: a83a83cjcj (馬馬虎虎)   2014-06-16 22:40:00
這邊也推!
作者: a27417332 (等號卡比)   2014-06-17 12:10:00
明顯對電腦圖學和硬體架構有研究,厲害
作者: cowbaying (是在靠北喔)   2014-06-18 14:48:00
當初會放棄與IBM合作應該是因為AMD的APU能夠使用HSA我目前也在等AMD新一代的APU 以後AMD的顯卡跟APU應該會佔平行運算市場相當大的份額 因為比INTEL的PXI便宜太多PHI
作者: a27417332 (等號卡比)   2014-06-18 15:26:00
一部份也是cell不易開發吧我猜
作者: silveriii (多說無益)   2014-06-20 13:16:00
作者: freelancer (三十億人的世界)   2014-07-11 01:00:00
AMD的HSA還在喊喊喊的時, IBM 類HSA 的東西早就做完了不過IBM 願不願意放出來給Sony 用是另一回事

Links booklink

Contact Us: admin [ a t ] ucptt.com