ハードウェアの仕組みから学ぶVulkanグラフィックスプログラミング

ゲームエンジンの裏で活躍するグラフィックスAPI

Vulkan実践入門 グラフィックスの基礎からレイトレーシング、メッシュシェーダーまでは、GPUを制御する次世代のグラフィックスAPIであるVulkanを解説する書籍です。

現在ではUnityやUnreal Engineに代表されるゲームエンジンが普及し、誰もが少ない手数で見栄えの良い描画結果を得ることができるようになりました。エンジンが用意するインターフェイスの中で、レイトレーシングなど先進的なグラフィックス機能にアクセスすることも容易です。

これらのゲームエンジンの内部では、DirectXやOpenGL、VulkanといったグラフィックスAPIを利用して映像を作成しています。私たちが普段このような低レイヤーの仕組みを意識せずに済むのは自然なことです。しかしゲームエンジンを使用せずに高度なグラフィックス表現を利用する場合や、ゲームエンジンそのものの開発に携わる場合、低レイヤーグラフィックスAPIの知識が欠かせません。本書で解説するVulkanはOpenGLの後継として登場したグラフィックスAPIで、開発者がGPUをより細かく制御することで、従来以上にGPUの性能を引き出すことが可能です。

また、Windowsを前提とするDirectXとは異なり、VulkanはWindows/Linux/Androidのほか変換レイヤーを通じてmacOS/iOSにも対応しているマルチプラットフォーム対応のAPIとなっています。

GPUの構造を知り、直接操作するプログラミングをはじめる

そもそもGPUが独特なハードウェアです。私たちは日頃からプログラミングを行うCPUについて、ある程度直感的に理解しています。プログラムカウンタがカウントアップされるごとにCPU・メモリ・外部記憶が協調してプログラムが進行する様子を、頭の片隅に置きながらソフトウェアを開発することができます。

一方で、GPUの動作についてはブラックボックスになっている方も多いのではないでしょうか。多くのコアを備え、大量のVRAMを抱え、グラフィックスなどCPUでは効率の悪い演算を引き受けていることは知識として知っていても、自分のプログラミングで直接GPUを動作させたことがある人はどれほどいるでしょうか。

GPUとプログラミングに関連して、直近の話題で欠かせないのはやはりAIでしょう。ハイエンドクラスのグラフィックボードを何枚も束ねて稼働させるファームを目にすることもあります。なぜ「グラフィックス」と冠するハードウェアがAIに活用されるのでしょうか? この疑問を解消するには、GPUの仕組みについて避けては通れません。

GPUはCPUとはまったく異なる構造を持つ、独立・非同期の演算装置です。本書ではまず、かつては「ビデオチップ」などと呼ばれていたGPUの祖先が、いかにして現在のアーキテクチャに変容してきたかを解説しています。そしてGPUの構造の変化によって効率の良い処理が変わったことが、OpenGLからVulkanへの進化を引き起こしたといえます。本書ではVulkanを用いて多くのプログラミングを行いますが、その過程でGPUの構造の理解を深めることができます。

Vulkanの特徴をソースコードから実感する

本書で学べるGPUグラフィックスプログラミングについて、より具体的に紹介します。本書のサンプルコードは以下のWebページで公開されています。

本書の前半で作成するのは基本的なウィンドウとポリゴンやモデルの表示です。第3章で扱う1枚のポリゴンを表示するプログラムはSources/samples/triangleディレクトリに収められています図1⁠。一見非常に基礎的に見えるこのデモであっても、このディレクトリだけで300行以上、前章までに解説して分離したものを含めると2,000行以上ものソースコードと約120ページの紙幅を割いて、ようやく表示することができます。VulkanはかつてのOpenGLがハードウェア抽象化を目指すことで次第に行き詰まったこととは対照的に、プログラマーが対象ハードウェアの操作を明示することを志向するAPIと言えます。多くの責務をアプリケーション層に委ねたこの長大なソースコードを代償として、VulkanはGPUの性能を最大限に引き出すことができるのです。

図1

本書の到達点は、息を呑むクオリティのゲームや実用的な3Dグラフィックスアプリケーションではありません。基本的な描画や計算処理に終始することに驚く方もあるかもしれません。しかしこの実直な手法こそが、高度なグラフィックスを用いる幅広いアプリケーションを支えています。グラフィックスプログラミング入門の1冊目として、またVulkanの実践リファレンスとして役立つ書籍です。

プロフィール

向井浩太郎(むかいこうたろう)

株式会社技術評論社 第5編集部。
CSS組版やTeXに取り組んでいる。

𝕏: @u1f992
GitHub: u1f992