• ようこそゲストさん!

conmuachieu123さんの日記

(SNS全体・外部に公開(Web全体に公開))

2016年
05月06日
13:07 conmuachieu123さん

【西川善司のモバイルテックアラカルト】第17回: GDC2016で見た、新世代グラフィックスAPI「Vulkan」の実力

  • その他
3月にサンフランシスコで行われたゲーム開発者会議(GDC:Game Developer Conference)では、さまざまなスマートフォンに関連した先端グラフィックス技術の展示か行われました。今回と次回は、そのあたりの話題をお届けしようと思います。

マビノギ RMT

グラフィックス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」を公開していたのでした。

GDC2016のNVIDIAブース

デモはWindowsベースのものも展示されていた。内容は同じ
デモ自体は約5万匹もの大量の魚の群れを描画するというシンプルな内容です。膨大な数の魚を描画するにあたっては、そのための膨大な量の描画コマンドをCPU側で構築してGPUに発行します。
OpenGLでは、ひとかたまりの描画コマンドができあがってからGPUに発行していく感じになるので、発行される描画コマンドと描画コマンドとの間に無意味な空白の時間(アイドル時間)が介在してしまいます。
Vulkanでは、描画コマンドの構築をマルチコアCPUを駆使して同時多発的に実践し、その発行自体も、GPUがそれまで取り組んでいた描画が終わった次の瞬間に間髪入れず発動させるのでGPUに暇となる隙を与えないのです。
SHIELD TABLET K1で実際に動作している様子。「Draw Using GLES3 AEP」がOpenGLで動作させるモードで、描画がかなりもっさりとするのがわかる。ここをチェックオフするとVulkanモードとなり、動きはかなりスムーズになる
上の映像は、実際に会場でボクが撮影してきたモノですが、これを見てもらうと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公式プレイ動画
THE MEMORY OF ELDURIMは、Liminal Gamesというアメリカの小規模ゲームスタジオが開発したオープンワールド型RPGで、作風としてはいわゆる「ファンタジーもの」に分類されるタイプになります。
なぜ、「日本人であるボクに声を掛けたの?」と聞くと、開発チームの彼らは日本のゲームのファンで、特にダークファンタジーRPGの名作として知られる『DARK SOULS』シリーズの大ファンで、彼らの作品が日本人の感性に合うかに見てもらいたかった……との返答。
  • 総アクセス数(1,528)
  • 拍手拍手(0)
  • お気に入りお気に入り(0)