本日はGPUの負荷処理を勉強していきます。
昨日[SRPBatcher]に関して勉強した際にふと普段使用しているグラフィックスAPIに関して気になって今回はグラフィックスAPIに関して調べて勉強していきます。
GraphicsAPIとは?
[GraphicsAPI]は各エンジンレイヤーがGPU上で提供されている処理にアクセスするためのAPI群を指します。
[GraphicsAPI]があることで異なる種のGPUでほぼ同一の共通化されたコードを直接GPUに入力せずに使用できるといったメリットがあります。
[GraphicsAPI]にはOpenGL ES、DirectXなどいくつかの種類がありますが、どのAPIを使用するかはデバイスのOSに依存しています。例えばDirectXはWindowsOS専用、MetalはiOS専用、しかしOpenGLなどcrossプラットフォームなAPIも存在します。)
この中でよりGPUのハードウェアに近い処理を行うAPIを[低レベルAPI]と呼び、よりコア部分のアクセスができるためパフォーマンス面を含め高度な処理ができます。
〇DirectX
DirectXはMicrosoft社によって開発、Windows10専用として提供されているAPI群です。
UnityのShaderなどで用いられる[HLSL]はDirectXで動くシェーディング言語になります。
DirectXは1996年に登場しWindows 95で初めて導入されました。DirectXが導入されることにより開発者は低レベル(低レイヤー)のハードウェアにアクセスすることができるようになり、細かい描画などグラフィックの根幹となる部分を調整できるようになりました。
DirectX登場以前はメーカーごとに違うハードウェアそれぞれに対応するように膨大な分岐処理が求められることになっていましたが、システム(ゲーム)とビデオカード(ハードウェア、のちのGPU)の間の通信を行い、最適に処理を行うものがDirectXです。
現在の最新のバージョンは12で、DirectX 9以降でジオメトリシェーダーを使用できるようになりました。
また最新のバージョンであるDirectX12では低レベルAPIとして知られており、これはよりハードウェアの低階層での処理を行えることを指します。
つまりより高速な処理が期待できます。
〇OpenGL
[OpenGL]はクロノスグループによって開発されたクロスプラットフォームなオープン規格のAPIです。Windows、Andoroidどちらでも使用できます。
[Oculus Quest]では[OpenGL]もしくは後述の[Vulkan]が使用できます。
クロスプラットフォームで使用できるという点で広く使用されるAPIです。
〇Vulkan
[Vulkan]は[OpenGL]と比較してDirectX12同様低レベルのAPIであることが挙げられ現時点でOpenGL同様もしくはそれ以上の処理が期待されています。
MSのDirectX12に対抗して出現しており、Vulkanはハードウェアの詳細な制御を可能とするローレベルAPIである一方、従来のOpenGLはCPU-GPU間の同期などの煩雑な処理を自動で行なってくれる上位層のAPIとして、今後もメンテナンスおよびアップデートが継続されます。
Unityで使用する場合現時点では試験的先行導入で、いくつかの問題点もあるようです。
〇その他の参考ドキュメント
今回はグラフィックスAPIに関してざっとですが勉強しました。
HoloLensでは普段DirectX11を使用しているためDirect12の機能も使用できるか見ていきたいと思います。