グラフィックスAPI「Vulkan」ってなに?
パソコンでもスマホでも、画面にCG(グラフィックス)を表示させるためには、GPU(グラフィックスプロセッサ)をプログラムしてやる必要があります。
そうしたGPUのプログラムにあたって、ソフトウェアとハードウェアとしてのGPUの間に入る中間ソフトウェア層がAPI(Application Programming Interface)です。
グラフィックスAPIには、マイクロソフトのDirectX(Direct3D)やKhronosのOpenGLといったものがあります。これらの名前は聞いたことくらいはあるかもしれません。
こうしたグラフィックスAPIは、ゲームなどのアプリケーションからは、必要なパラメータを引数に与えて関数のような感じで呼び出すことで、GPUを効率よくプログラムすることができます。
DirectXやOpenGLは、1990年代から存在する歴史あるAPIなのですが、だからこそ、当時のメーカーごとに異なるGPUアーキテクチャの違いを吸収したり、各GPUごとに搭載された特異機能を活用するための機能増築を繰り返すなどして、いうなれば鈍重なモノになってしまいました。
また、APIの基本設計構造が古いことから、昨今のマルチコアCPUのメリットをうまく活用することも難しく、GPUはとっくに処理を終えているのに、CPUで実践されるべき「次の描画指示の組み立て」が間に合わず、GPUが暇になる瞬間が頻発するようなことも起こるようになってきたのです。
そこで業界では、GPUをより効率よくプログラムするために、グラフィックスAPIの基本設計を刷新しようとする動きが起こったのです。
これに最初に手を付けたのが、RADEONを擁するAMDの独自グラフィックスAPIの「MANTLE」でした。その後、マイクロソフトはDirectX12を発表、さらに続いてKhronosは、Vulkanを発表したのです。
なお、Vulkanは、AMDのMANTLEがベースとして設計されたといわれています。
DirectXはマイクロソフトが開発したものなので、Windowsプラットフォームに向けたモノです。一方のVulkanは、特定のメーカーやOSにとらわれないオープンスタンダードなAPIなので、これからのスマートフォンやタブレットに採用されていくことが確実視されています。
NVIDIAは新世代スマホ向けグラフィックスAPI「Vulkan」の実動デモを公開
実際、GDC2016の展示会場のNVIDIAブースでは、TEGRA K1ベースのタブレット「SHILED TABLET K1」上で動作するVulkan活用デモ「Vulkan Threaded Rendering」を公開していたのでした。
デモ自体は約5万匹もの大量の魚の群れを描画するというシンプルな内容です。膨大な数の魚を描画するにあたっては、そのための膨大な量の描画コマンドをCPU側で構築してGPUに発行します。
OpenGLでは、ひとかたまりの描画コマンドができあがってからGPUに発行していく感じになるので、発行される描画コマンドと描画コマンドとの間に無意味な空白の時間(アイドル時間)が介在してしまいます。
Vulkanでは、描画コマンドの構築をマルチコアCPUを駆使して同時多発的に実践し、その発行自体も、GPUがそれまで取り組んでいた描画が終わった次の瞬間に間髪入れず発動させるのでGPUに暇となる隙を与えないのです。
上の映像は、実際に会場でボクが撮影してきたモノですが、これを見てもらうとOpenGLとVulkanとでは、魚の動きのスムーズさが全然違うことに気が付くでしょう。
同じGPUが搭載されているタブレットで、同じ数の魚(同じGPU負荷のグラフィックス)を描画させて、APIが違うだけでこれだけパフォーマンスが異なることには驚かされますよね。
映像の後半で、「Fish per Draw Call」というスライダーをいじっているのが見えるでしょうか。
「Draw Call」は、概念的には「ひとかたまりの描画コマンド」と思ってください。なので「Fish per Draw Call」は「ひとかたまりの描画コマンドあたりに何匹の魚を含めるか」という感じの意味で捉えてください。
OpenGLモードでは、この値を大きく(このデモでは最大100)した方が、発行される描画コマンドと描画コマンドとの間の無意味なアイドル時間を低減させることにつながるため、若干パフォーマンスが向上するのが見てとれます。
さらにその後、Vulkanモードで同じくスライダーをいじっていますが、「ひとかたまりの描画コマンドあたりの魚の数」には無関係に、高いパフォーマンスを発揮していますよね。
これは描画コマンドの構築をマルチコアCPUを駆使して同時多発的に実践しているので、GPUがアイドル状態になる前にすぐに次の描画コマンドが発行されるため、この「ひとかたまりの描画コマンドあたりの魚の数」に無関係にハイパフォーマンスが維持されるのです。
現在も多くのスマホゲームのプログラミングで活用されているOpenGL(ES)では、「ひとかたまりの描画コマンド」の構築サイズを、システム全体のパフォーマンスを吟味して最適化したりチューニングしたりしないと、最大のパフォーマンスが発揮しづらかったのですが、Vulkanであればそうしたチューニングをせずとも常にほぼ最大のパフォーマンスが得られるというわけです。
現在、このNVIDIAのVulkanデモ「Vulkan Threaded Rendering」は、NVIDIAのVulkan開発者向けサイトにて最近になって公開されたので、興味のある人はぜひダウンロードして、自身でその効果の具合を体験してみてください。
ファンタジーRPG『THE MEMORY OF ELDURIM』を知ってますか?
GDC2016の展示会場を歩いていたところ、「お前は日本人か?」と呼び止められ、「そうだ」と答えると、「これを見て行ってくれ」と強引にブースに引き込まれてしまって見せられたのがこちらの『THE MEMORY OF ELDURIM』という作品です。
THE MEMORY OF ELDURIMは、Liminal Gamesというアメリカの小規模ゲームスタジオが開発したオープンワールド型RPGで、作風としてはいわゆる「ファンタジーもの」に分類されるタイプになります。
なぜ、「日本人であるボクに声を掛けたの?」と聞くと、開発チームの彼らは日本のゲームのファンで、特にダークファンタジーRPGの名作として知られる『DARK SOULS』シリーズの大ファンで、彼らの作品が日本人の感性に合うかに見てもらいたかった……との返答。
実際にプレイしてみると、ゲーム内容的には、さまざまなクエストをこなしつつ、エリアを支配する巨大なボスを撃ち倒して、次なるエリアを切り拓いていくようなゲームメカニクスとなっていました。
戦闘システムはアクション性が高く、このあたりにDARK SOULSの影響を感じます。グラフィックスのテイストは日本でも人気の高い「The Elder Scrolls」シリーズっぽさも感じます。
総じて、日本人のファンタジーRPGファンには受け入れてもらえそうな手応えは感じます。
上で「小規模ゲームスタジオ」という表現をしましたが、なんとこの作品、わずか5人で開発しているそうで、いわゆるインディーゲームと呼ばれるジャンルになります。
わずか5人のチームで、これだけのはハイクオリティのRPGが制作できたのには「ゲームエンジンのおかげ」だったと彼らはいいます。
ちなみに、彼らがTHE MEMORY OF ELDURIMの開発に使用したゲームエンジンは、ドイツのCRYTEKが開発した「CRY ENGINE」です。なるほど、グラフィックス表現には定評のあるゲームエンジンというわけです。
このTHE MEMORY OF ELDURIMは、2014年からSteamにて1,980円で発売していますが、実は今もシナリオはDLCの形で拡張が続いています。
一度購入すれば、将来リリースされるDLCもすべて無料で入手できるシステムとなっているとのことですので、RPG好きはチェックしてみてください。
※プレゼントの応募受付は終了しました。
The Memory of Eldurim TM and Liminal Games TM are registered trademarks of Liminal Games, Inc. All rights reserved.