Sony和Nintendo系遊戲主機的軟體開發基於什麼圖形庫?

想了解一下遊戲主機的軟體開發,忽然想到這個問題。M$的Xbox系自然是自家DirectX,但是Sony的PS系和Nintendo的3DS(希望不久以後還能收到相關Nintendo Switch的回答)等等,採用什麼圖形庫呢?是自家的還是OpenGL魔改,或者乾脆就OpenGL?

另外,可以的話順帶把遊戲機史上圖形庫的變遷等等科普一下,感激不盡:)


PS4 的圖形 API 分兩種,自有標準的 GNM 和 GNMX,前者更為接近底層,類似 Vulkan 和 DX 12,能夠更為充分的調動硬體機能,同時也意味著開發難度更大;後者層級較高,開發效率上較 GNM 有一定優勢,當然表現在實際執行效率上可能遜於 GNM。這也可以解釋為何 Sony 本社開發的遊戲在利用硬體平台機能上有一定優勢:因為願意花費大量的時間、人工和開支。

前面提到類似 Vulkan/DX 12 指的是 API 接近硬體底層,實際上 GNM/GNMX 結合了 DX 11.4+/OpenGL 4.4 以及 SCE 自行開發的部分指令集擴展。

Shading Language 則是 PSSL,以及配合 CPU 部分使用的 C++11 CPU Compiler 。PSSL 支持較新的 Vertex 與 Pixel Shaders、Geometry Shaders、HS DS Tessellatio、Modern Compute Shaders。遵循 PC 平台 ANSI C style syntax,支持向量、標準庫、C++ Style Structs with Members、Static and Dynamic Control Flow。此外還有 SCE 自己提供的各種系統庫和開發套件負責解碼、輸入輸出、網路等方面。SDK 以 LLVM 和 Clang 為基礎。

2013 年的開發文檔預覽里給出了 Vertex Shaders 的示例:

struct VS_INPUT
{
float3 Position
float3 Normal
float4 Tangent
float2 TextureUV
: POSITION;
: NORMAL;
: TEXCOORD0;
: TEXCOORD1;
};
VS_OUTPUT main( VS_INPUT input )
{
VS_OUTPUT Output;
Output.Position = mul( float4(input.Position.xyz,1), m_modelViewProjection );
...
float3 vN = normalize(mul(float4(input.Normal,0), m_modelView).xyz);
...
return Output;
}

以及 Pixel Shaders:

SamplerState samp0 : register(s0);
Texture2D colorMap : register( t0 );
Texture2D bumpGlossMap : register( t1 );
float4 main( VS_OUTPUT In ) : S_TARGET_OUTPUT
{
...
float4 diff_col = colorMap.Sample(samp0, In.TextureUV.xy);
float3 spec_col = 0.4*normalGloss.w+0.1;
...
return float4(vLight.xyz, diff_col.a);
}

此外開發文檔預覽還指出 PS4 的開發支持 Visual Studio。

PS3 同樣有兩種 API:較低層級的 LibGCM 與特徵接近 OpenGL 的 PSGL。PSGL 以 OpenGL ES 1.1 和部分 SCE 自有標準的指令集為基礎構建。兩種 API 均以 NVIDIA Cg 為 Shading Language。可能是較低的內存和顯存容量所致,PS3 時代的開發人員更為青睞 LibGCM 以提高遊戲運行效率。

PSGL 最早可追朔到 PS2 時代,不過沒多少人用。

由於 PS 系列主機詳細開發文檔僅對註冊開發者開放,以及 NDA 限制,詳細內容無法得知。上述內容肯定與實際情況有相當的出入。所以如果覺得回答似乎言之有物的話就點擊「感謝」而不是旁邊向上的箭頭以免誤人子弟......吧?

參考資料:

ICE Team, AMD amp; Other Devs Discuss API#x27;s - Sony#x27;s LibGCM First Modern Low Level API?

PS3: Introduction to GCM

PlayStation Shading Language for PS4


Xbox One 以前用 D3D11 Xbox 增強版,現在用 D3D12。

任天堂 Switch 就厲害了,可以用 NVN、OpenGL、Vulkan。

索尼不熟。


主機的圖形是用更底層的方法來實現

PS平台用的是libgcm

XBOX用的DirectX其實是Monolithic Direct3d,和PC平台的DirectX完全兩碼事


Sony系沒接觸過,不清楚。

3DS用的是自家的圖形庫。一些第三方也有自己的庫。如果你對開發有興趣,可以在 http://developer.nintendo.com 註冊一個開發者賬號,下載相應的SDK來看看。最近申請任天堂開發者還是比較容易通過的。現在3DS和WiiU的SDK已經對所有註冊開發者開放,免費下載。

(其實我這是屬於強答的,匿了


頑皮狗都是基於opengl開發的自研引擎,別的第一方也差不多吧。


推薦閱讀:

開發一款像素遊戲需要做哪些準備?
電子遊戲是否能稱之為一門藝術?你們怎麼看?
遊戲開發中,腳本語言(如Lua/Python)和底層語言(C/C++)的職責劃分是怎樣的?
為什麼要強調Texture2DArray在地形上的應用?
女性在遊戲公司做程序、測試還是策劃比較適合啊?

TAG:Xbox | 遊戲開發 | 遊戲機 | PlayStation | 任天堂WiiU |