當前位置: 華文問答 > 遊戲

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

2017-02-04遊戲

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 & Other Devs Discuss API's - Sony's LibGCM First Modern Low Level API?

PS3: Introduction to GCM

PlayStation Shading Language for PS4