オススメ機能
Twitter
お気に入り
記事履歴
ランキング
お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
DX12,Vulkan&UWP対応のフレームレート計測ツール「PresentMonLauncher」が登場。さっそく使ってみた
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2016/08/08 00:00

テストレポート

DX12,Vulkan&UWP対応のフレームレート計測ツール「PresentMonLauncher」が登場。さっそく使ってみた

 Windows 10に実装されたDirectX 12(※厳密にはDirect3D 12だが,慣例に従ってDirectX 12と表記する)や,OpenGLを策定する規格化団体Khronos Groupが策定したVulkanといった新世代の3DグラフィックスAPIは,DirectX 11(Direct3D 11)に代表される従来の3DグラフィックスAPIと比べて,オーバーヘッドが少ないと言われている。

 いずれも,発表当初は対応タイトルが皆無だったが,DirectX 12対応のPCゲームは,AMDの熱いプッシュを受けたタイトルとして知られる「Ashes of the Singularity」を皮切りに,少しずつ増えてきた。また,Vulkanのほうも,リブート版の「DOOM」がいち早く対応したほか(関連記事),「Dota 2」がβサポートを開始していたりと,状況は変わりつつある。

リブート版DOOMは,アップデートでVulkanに対応した
ベンチマーク

長年にわたって,Windowsにおける標準的なフレームレート計測ツールとして役立ってきたFraps。しかし,DirectX 12やVulkanでは機能しない
ベンチマーク
 新しいAPIを活用して,GPUの性能を最大限に活かせるPCゲームが増えるのは,ゲーマーにとって歓迎すべきことだろう。
 ただ,それらPCゲームを使ってベンチマークテストを行いたいという一部の人々――もちろん4Gamerも含む――にとっては,悩ましい面もある。なぜかというと,これまでPCゲームのフレームレート計測ツールとして標準的に使われていた「Fraps」では,DirectX 12やVulkan対応ゲームのフレームレートを計測できないからだ。

 Frapsを初めとする従来のフレームレート計測ツールは,Direct 3DのDrawCall(ドローコール)をフック(≒横取り)して,描画タイミングを調べることでフレームレートを計測している。その仕組みについては,NVIDIAが開発したフレームレート計測ツール「Frame Capture Analysis Tool」(略称:FCAT)の解説記事が詳しいので,興味のある人は参照してほしい。
 しかしDirectX 12では,DrawCallを含めた3Dグラフィックスの描画APIが一新となったため,従来型のDirect3Dに依存したFrapsのようなツールでは,フレームレートを計測できない。Vulkan対応アプリケーションで計測が行えないのも,同じ理由である。

 また,「Frapsなどからフレームレート計測を行えない」アプリケーションとしては,もう1つ,Universal Windows Platform準拠のもの(以下,UWPアプリ)もある。UWPアプリの場合は,セキュリティ上の理由からAPIのフックが許されていない。つまり,DrawCallのフック自体が不可能なので,フレームレートを計測できないのだ。

 この「DirectX 12&Vulkan対応アプリケーションとUWPアプリでフレームレートを計測できない問題」は,ベンチマーカーを悩ませてきた。
 たとえばNVIDIAは,前述の(導入に多額のコストがかかる)FCATを使うよう,テスターに推奨していたりするくらいなのだが,今回,この問題を抜本的に解決するかもしれないツールが出てきた。なので紹介してみようというのが,本稿の主旨である。


Intelが開発したフレームレート計測ツール「PresentMon」と,それを使いやすくした「PresentMonLauncher」


 そもそもの話をしておくと,「DirectX 12&Vulkan対応アプリケーションとUWPアプリでフレームレートを計測できない問題」へ対策できるツールがなかったわけではない。具体例の1つはIntelのゲーム開発者支援サービス「GameTechDev」から登場したオープンソースソフトウェア「PresentMon」で,ソースコードは,プロジェクト共有サービス「GitHub」上で公開中だ。

GitHubのPresentMon公開ページ(英語)


 PresentMonは,Windows 10に組み込まれているイベントトレース(Event Tracing for Windows,以下 ETW)機能を使って,3Dグラフィックスの描画タイミングをトレースする。APIのフックといった,乱暴なやり方ではなく,Windows 10における正規の方法で描画タイミングをトレースするため,DirectX 12やVulkan,UWPにも対応可能だ。
 ただし,DirectX 9.0c以前の3Dグラフィックス描画はETWからトレースできないという制限もあったりはする。

 ちなみにPresentMonは本来,ゲームのフレームレートを計測するためのソフトウェアではない。DirectX 12 APIを用いてレンダリングされた画像を表示する「Present」メソッドの呼び出し間隔や,Presentメソッドの処理時間といった細かなデータを,CSV形式のテキストファイルに出力してくれるという,開発者向けツールである。
 そのCSVファイルを集計して,必要なデータだけを抜き出せば,ドロップしたフレーム数や各フレームの表示時間(フレームタイム)といったデータを得られるので,フレームレート計測ツール的にも使えるというわけだ。

 しかし,PresentMonはコマンドラインプログラムなので,開発者でもない,単なるゲーマーには使いにくい。とくに,計測を行う対象となるプログラムのプロセスID,つまりゲームのプロセスIDをコマンド引数で指定する必要があるのは,端的に述べて面倒だ。開発者向けという仕様上,それはそれで悪くないのだが,「ちょっとフレームレートを計測してみたい」という用途だとなかなか難儀する。

GitHubのPresentMonLauncher配布ページ
ベンチマーク
 ……と,壮大な前置きを経て紹介するのは,今回,そんなPresentMonをゲーマーのような一般PCユーザーでも利用できるようにと有志が開発した「PresenMonLauncher」である。
 名称から想像できる人もいると思うが,これは必要なパラメータをPresentMonに渡して起動するためのランチャーで,これまたGitHub上で公開中だ。

GitHubのPresentMonLauncher配布ページ(英語)


 一般ユーザーが使えるレベルにまで操作を簡単にしたといっても,もともとがゲーマー向けベンチマークツールではないため,使い方は面倒な点もある。なので今回はまず,インストールの流れを,以下のとおり,簡単に紹介しておこう。


1.Githubから「PresentMonLauncher.exe」をダウンロード

 上で示したリンクからGitHubへ行き,「PresentMonLauncher.exe」をクリック。遷移したページで[Download]ボタンをクリックすると,PresentMonLauncher.exeをダウンロードできる。
 ちなみにこの実行ファイルはインストーラで,PresentMon本体も含んでいる。

[Download]ボタンは矢印の先にある
ベンチマーク


2.PresentMonLauncher.exeを実行

 PresentMonLauncher.exeを実行する。通常ならWindowsのセキュリティ警告を経て,インストーラが起動するはずだ。

インストーラが起動した状態

 あとは画面の指示に従って,[Next]ボタンをクリックしていけばいい。

ライセンスの確認。「I agree with the above term and conditions」のチェックボックスをチェックして,[Next]ボタンを押す

 なお,デフォルトのインストール先は「C:¥PresentMonLancer¥」なのだが,これは変更しないほうがいいようだ。

変えると面倒が増えるので,インストール先はデフォルトのままが無難だ


PresentMonLauncherを実行してみる


 インストールが完了すると,デスクトップにPresentMonLauncherのショートカットが作成されるはずだ。それをダブルクリックすると,ランチャーのメインウインドウが開く。
 はっきり言って非常に分かりにくいUIなのだが,ざっくり言えば,左上にある「Select the process you want to capture:」という一覧欄から,テスト対象となるゲームのプロセスを選択して,[Run PresentMon]ボタンをクリックすれば計測を行える。

PresentMonLauncherのメインウインドウ。ひとまずプロセスは選択せず先に進む
ベンチマーク

 プロセス一覧の下には,「Simple」「No CSV Output」「Scroll Toggle」というチェックボックスがあるが,これらはいずれも,ベンチマーク用途で使うことはない。
 PresentMonLauncherは,テスト後に自動で平均フレームレートを算出してくれる機能を持っているのだが,Simpleにチェックを入れると,一部のカラムを省略したシンプルなCSVファイルを出力することになり,結果,平均フレームレートを算出してくれなくなる。
 No CSV OutputはCSVファイルが出力されないので論外。また,Scroll Toggleは,キーボードの[Scroll Lock]キーが押されている間だけ計測を行う機能を有効化するものだが,「[Scroll Lock]キーを計測スタートのトグルにする」といったことはできないので,やはりこれもチェックしないほうがいいだろう。

 では,ベンチマークを計測するときにはどうしたらいいか。
 PresentMonLauncherでは,計測時間を秒数で指定することになり,そのとき使うのが,3連チェックボックスの右隣にある,「Delay(s)」「Time(s)」の入力ボックスだ。

ベンチマーク
 前者は計測開始までの遅延時間,後者は計測時間を指定するもので,たとえば,[Run PresentMon]ボタンを押して10秒後から60秒間のテストを行いたい場合,Delay(s)に「10」,Time(s)に「60」と入力することになる。

 以上の設定を行ったら,DirectX 12もしくはVulkanに対応したゲーム,あるいはUWPアプリ版ゲームを起動する。ゲームの起動後,フレームレートを計測したいシーンまで進め,その時点で[Alt]+[Tab]キーを押すか,タスクバーからアイコンをクリックするかしてタスク切り替えを行い,PresentMonLauncherをアクティブにしよう。

 PresentMonLauncherで「Select the process you wan to capture:」の右隣にある[Refresh List]ボタンを押すと,プロセスリストが最新の状態に更新されるので,一覧からゲームのプロセスを見つけ出し,それにチェックを入れる。
 下に示したのは,今回のテストに用いたVulkan版DOOMのプロセスを探して,実際にチェックを入れたところだ。

Vulkan版DOOMは,「DOOMx64vK」というプロセス名だった。今回はこれにチェックを入れる。なお,プロセス名はたいていの場合ゲーム名だと思うが,UWPアプリだとそうでもない可能性があるので,事前にタスクマネージャの「プロセス」タブおよび「詳細」から,ゲームアプリケーションのプロセス名を確認しておくといいだろう
ベンチマーク

 これでテスト準備は完了だ。前述のとおり,[Run PresentMon]ボタンを押す。この時点でセキュリティ警告が出ると思うが,実行を許可しよう。
 すると,PresentMonのコマンドウインドウが開くので,それを確認したらゲームに戻ろう。Delay(s)に設定した時間が経過したあたりで,フレームレートを計測したいゲームのプレイを始め,Time(s)で指定した時間だけプレイし続ければいい。

計測中,ゲームの裏ではコマンドウインドウでPresentMonが動作し,フレームレートを計測している。計測中にこのコマンドウインドウをアクティブにすると計測が止まってしまうので,このウインドウには触るべからず
ベンチマーク

 ちなみに計測中,Frapsのような「計測中であることを示すオーバーレイ表示」は一切出てこない。なので,本当に計測が進んでいるか不安になることもあるだろうが,これはもう信じて進むしかないだろう。
 上の画像キャプションでも触れたが,計測中にタスク切り替えを行ってコマンドウインドウをアクティブにすると計測が止まってしまうので,そういうことはしないようにしてほしい。ちなみに上のスクリーンショットだと,スクリーンショットを撮るために[Alt]+[Tab]キーを押したため,「STALE」という表示が出て,計測が止まっている。

 計測が終わったら,タスク切り替えを行うか,ゲームを終了するかしてPresentMonLauncherに戻り,[View Min/Max/AVG FPS]ボタンを押す。すると,PresentMonが保存したCSVファイルの一覧が表示される。
 そこで結果を知りたいCSVファイルを選ぶと,ダイアログ右側に「Min FPS」(最小フレームレート),「Max FPS」(最大フレームレート),「Av.FPS」(平均フレームレート)という3つの数値が表示されるはずだ。

テストごとに保存された合計8個のCSVファイルのうち,最後から2番めに実行したDOOM(DOOMx64vK)を選んだところ。ウインドウの右下部に,最小および最大,平均フレームレート算出結果が表示される
ベンチマーク

 以上,PresentMonLauncherを使えば,DirectX 12やVulkanベースのゲームや,UWPアプリとして提供されているゲームであっても,フレームレートを計測できるようになる。
 計測の開始&終了タイミングを時間でしか指定できず,トグルスイッチを利用できないとか,本当に計測されているかどうか,計測中に確認する術(すべ)がないとか,Frapsと比べると使い勝手はよろしくないのだが,これはもともとが開発者向けツールなので,やむを得ないところだろう。

 4Gamerで今後,PresentMonLauncherを恒常的に利用するかどうかは,これからの検証次第だが,すでに述べたとおり,CSVファイルには,フレームレート以外にもかなりのデータが記録されているので,これらを活用できれば便利ではないかという予感はある。いずれ正式採用となれば,CSVファイルの中身についてはあらためて紹介したい。
 ともあれ,DirectX12やVulkan対応タイトル,あるいはUWPアプリのフレームレートをさくっと知りたいときにPresentMonLancherは有用なので,興味のある人はぜひ試してほしいと思う。

GitHubのPresentMonLauncher配布ページ(英語)

  • 関連タイトル:

    ベンチマーク

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
トピックス
スペシャルコンテンツ
注目記事ランキング
集計:04月20日〜04月21日