用語
グラフィックス API
ゲームやアプリケーション等のプログラムが PC やゲーム機などのハードウェア(物理的なデバイス)に対して描画指示を出す際に使用するルールや命令の集まりをグラフィックス API といい、ハードウェア毎に異なるプログラムを書く必要が無くなる等のメリットがある。
グラフィックス API | 主な対応 OS |
DirectX(ダイレクトエックス) | Windows |
OpenGL(オープンジーエル) | クロスプラットフォーム(Windows/Mac/Linux 等) |
Vulkan(ヴァルカン) | クロスプラットフォーム(OpenGL の後継) |
Metal(メタル) | Apple 製 OS(MacOS/iOS 等) |
RHI(Render Hardware Interface)
グラフィックス API は「ハードウェア毎に異なるプログラムを書く必要を無くす」という役割であったが、ゲーム開発者がグラフィックス API 毎に異なるプログラムを書くのもまたコストがかかる。
そこで各グラフィックス API 毎に異なるプログラムを書く必要を無くし、更に抽象化した物が RHI(Render Hardware Interface)である。
RHI を使用する事で、ゲーム開発者は 1 つのプログラムを書くだけで各グラフィックス API で同様の挙動をさせる事が出来る。
仮に新たなグラフィックス API に対応させる事になった場合でも、RHI の内部を編集するだけで良く、RHI 利用者側のプログラムを変える必要は無い。
コンピュータープログラミングにおける抽象化とは、複雑なソフトウェアシステムにおいて、複雑さを軽減し、また効率的な設計と実装を可能にする方法です。これはシステムの技術的な複雑さを、API の背後に隠します。
Abstraction (抽象化)
並列レンダリング(Parallel Rendering)
通常、CPU(PC の頭脳)がゲーム内のプログラムや計算などを行っている間、GPU(PC の描画担当)は何も出来ず、CPU の作業が終わると初めて GPU は描画処理を行う。
しかし、最近の CPU はマルチコアプロセッサ(複数の作業を同時に行える CPU)が主流になっており、グラフィックス API も非同期処理を行えるようになったため、CPU の作業が終わるまで GPU が待つといった事は無くなりつつある。
基本的に、CPU は描画コマンド(GPU への命令)を生成してコマンドキュー(描画コマンドを貯めておく場所)に貯めておき、コマンドキューに描画コマンドを置いた後は別の処理を行い、GPU は適切なタイミングでコマンドキューから描画コマンドを取り出してそれを実行する。
上記の一連の流れを並列レンダリング(Parallel Rendering)といい、パフォーマンスの向上や高品質なグラフィックス等を期待できる。
非同期処理とは、あるタスクを実行をしている際に、他のタスクが別の処理を実行できる方式のことをいいます。
非同期処理について🥴