第626回 でも紹介したように、現在ではUbuntu上で数多くのWindows用ゲームが動作するようになっています。第626回が公開された頃はベータ版の扱いであったProtonも、最近のSteamクライアントではデフォルトで有効化されており、設定をいじる必要すらありません[1] 。そんなわけで今年のゴールデンウィークは家に引き籠って、Steamの積みゲーを崩すぞと意気込んでいる方もいるのではないでしょうか。
「ゲーミングPC」といったハイスペックなPCが存在することからも解るように、ゲームというのは現在のPC上で動かすコンテンツの中でも、PCのリソースを多く要求する部類に属します。特に最新のタイトルを4K解像度の最高画質で遊ぼうと思ったら、10万円を軽く越えるようなグラフィックボードが必要となることも珍しくありません。
ゲームがどれだけ快適に遊べるかの指標のひとつが「FPS」や「フレームレート」と呼ばれる数値です。FPSは「Frame Per Second」の略で、単位時間あたりに表示できるフレームの数を表しています。数値が大きくなるほど滑らかなヌルヌル描画となり、数値が小さくなるとカクカクとした、いわゆるコマ落ち状態となると思っておけばよいでしょう。
一般的な60Hzのディスプレイを使用しているのであれば、それと同じ60FPSに近い値をキープするのがひとつの目安です。これよりも大きくフレームレートが落ちると、ゲーム体験は著しく低下してしまいます。もしもフレームレートの低下が発生する場合は、画質を犠牲にしてでも、フレームレートを確保する方がよいでしょう。これはゲーム側の設定で解像度を下げたり、テクスチャの品質を落とすことで調整するのが一般的です。
図1 ELDENRINGのグラフィック設定。細かいカスタマイズも可能だが、画質とフレームレートの落とし所を探るのはなかなか難しい
図2 低スペックPCで分不相応な画質、解像度の設定を行うと、無慈悲に足切りされることもある
ですが最適な設定を探るには、当然ですが現在のフレームレートを可視化できなければ始まりません。そこで今回は、UbuntuでSteamタイトルのFPSを計測する方法を紹介します。
Steamビルトインのフレームレート表示機能
Steamには現在のフレームレートを表示する機能が用意されています。Steamクライアントを起動したら、メニューから「Steam」 →「 設定」 →「 ゲーム中」を開きます。「 ゲーム中のフレームレート表示」はデフォルトで「オフ」に設定されていますので、ここをフレームレートを表示させたいお好みの位置に変更してください。「 OK」をクリックしてからゲームを起動すると、設定した位置にフレームレートが小さく表示されるようになります。本当にシンプルな表示ですが、フレームレートの低下が発生していないかのチェックには役立ちます。
図3 Steamのフレームレート表示を有効化する
図4 実際のゲーム画面。画面の左上隅に小さくフレームレートが表示されるようになった
OpenGLのゲームでフレームレートを表示させる
OpenGLを利用しているアプリでは、環境変数「GALLIUM_HUD
」に表示させたい項目を指定することで、現在値と値の変化のグラフをオーバーレイ表示させることが可能です。
mesa-utilsパッケージをインストールしてから、フレームレートとフレームタイムを表示させてglxgearsを実行する例
$ sudo apt install mesa-utils
$ GALLIUM_HUD=fps,frametime glxgears
図5 glxgearsコマンドに現在のフレームレートとフレームタイムをオーバーレイ表示させた例。フレームレートの変化がグラフで表示されるため、フレームレートの一時的な低下なども把握しやすくなる
OpenGLを利用したSteamのタイトルでこの機能を利用するには、タイトルごとに起動設定を変更するのが手軽です。ライブラリから設定したいタイトルを右クリックして「プロパティ」を表示します。「 一般」タブの「起動オプション」に、以下の内容を入力してください。
ゲーム画面にフレームレートとフレームタイムを表示させる起動オプション
GALLIUM_HUD=fps,frametime %command%
図6 GALLIUM_HUDを設定し、フレームレートとフレームタイムをゲーム「Factorio」に表示させてみた
環境変数GALLIUM_HUD
に「help」を設定して実行すると、コンソールにヘルプが表示されます。より詳しい設定内容を知りたい場合は参考にしてください。
GALLIUM_HUD
のヘルプを表示する
$ GALLIUM_HUD=help glxgears
DXVKのフレームレート表示機能
Direct3Dを用いているWindows専用タイトルは、API変換レイヤーを通し、クロスプラットフォームの3DグラフィックAPIであるVulkanに変換することで、Linux上で実行されています。こうしたタイトルでは、環境変数「DXVK_HUD
」に項目を指定することで、フレームレートをはじめとした様々な情報をオーバーレイ表示させることができます。前述のOpenGLの例と同様に、ゲームのプロパティから起動オプションを以下のように設定してください。
起動オプションでDXVK_HUD=1
を設定する
DXVK_HUD=1 %command%
図7 デバイス情報とフレームレートが表示された状態。なおDXVK_HUD=full
とすると、すべての情報を表示できる
設定できる項目など、詳しくはDXVK HUDのドキュメント を参照してください。
MangoHudのインストール
フレームレートの低下が発生していないかのチェック程度であれば、これらの方法でも十分でしょう。ですがフレームレートの変化をもっと詳細に記録したり、それこそグラフィックボードのベンチマークを取りたいような場合は、ログの記録が可能な計測アプリを使うと便利です。Ubuntuで動作するフレームレート計測アプリとしては、MangoHud があります。
MangoHudはUbuntuのリポジトリにパッケージがあり、APTでインストールすることも可能です。しかし筆者が試したところ、Ubuntu 22.04 LTSではパッケージからインストールしたバージョンは動作しなかったため、以下の手順でGitHubのソースからビルドしました。
$ git clone https://github.com/flightlessmango/MangoHud.git
$ cd MangoHud
$ ./build.sh build
$ ./build.sh install
MangoHudの設定
前述の手順でビルドとインストールを行うと、「 /usr/share/doc/mangohud/MangoHud.conf.example
」に設定ファイルのサンプルがインストールされます。これをホームディレクトリ以下に、「 ~/.config/MangoHud/MangoHud.conf
」としてコピーします。
MangoHudの設定ファイルの用意
$ mkdir -p ~/.config/MangoHud
$ cp /usr/share/doc/mangohud/MangoHud.conf.example ~/.config/MangoHud/MangoHud.conf
基本的にはデフォルトの設定のままで動作するのですが、後述するログファイルの記録のため、output_folder
の設定だけは行っておきましょう。「 ~/.config/MangoHud/MangoHud.conf
」をテキストエディタで開き、コメントアウトされている「output_folder
」の行のコメントを解除(行頭の#
を削除)します。そしてディレクトリのパスを自分のホームディレクトリに合わせて書き換えてください。
ログを出力するディレクトリを設定する
# output_folder=/home/<USERNAME>/mangologs
↓
output_folder=/home/mizuno/mangologs
ホームディレクトリ以下に「mangologs」ディレクトリを作成しておきましょう。
$ mkdir ~/mangologs
Steamのゲーム画面にMangoHudを表示するには、起動オプションを以下のように変更します。なおMangoHudは、OpenGL/Vulkanの両方に対応しています。
mangohudを表示させる起動オプション
mangohud %command%
フレームレートを計測する
前述の起動オプションを設定した上でゲームを起動すると、画面左上にMangoHudが表示されます。
図8 MangoHudをゲーム画面に表示した状態。GPU使用率、CPU使用率、フレームレート、フレームタイム等が表示される。なお右Shift +F12 キーを押すと、HUDのオーバーレイ表示をON/OFFできる
ゲームをプレイ中に、キーボードの左Shift +F2 キーを押してください。フレームレートの記録が開始されます。そして再度同じキーを押すことで、記録を終了します。
図9 左Shift +F2 キーを押すと、HUDに記録中を表す赤い●アイコンが表示され、ログの記録が開始される。なおこの画面は第711回 でも紹介した原稿執筆用の省スペースPCで撮影しているため、画質を落としてもまさかの20FPSである
ログは先ほどMangoHud.conf
ファイルで指定したパスに、「 ゲームタイトル_記録日時.csv」という名前のCSVファイルとして出力されています。LibreOffice Calcで開いてみたのが以下の画像です。詳細な情報が時系列に記録されているため、スプレッドシートの機能を使えば、平均値を計算したり、最小値を見つけたりといった処理も簡単です。
図10 CSVにはフレームレート、フレームタイム、CPU使用率、GPU使用率、CPU温度といった情報が、時系列に記録されている
また自分で集計するのが面倒だというのであれば、同じディレクトリ内に出力されているサマリーを見るのがよいでしょう。「 ゲームタイトル_記録日時_summary.csv
」というファイルには、以下の項目がまとめられています。
0.1% Min FPS(下位0.1%のFPSの平均値)
1% Min FPS(下位1%のFPSの平均値)
97% Percentile FPS(97パーセンタイル値)
Average FPS(FPSの平均値)
GPU Load(GPU負荷)
CPU Load(CPU負荷)
ゲームによっては画面暗転時やロード時など、瞬間的にフレームレートが低下、あるいは向上することがあります。そのため単純に最大/最小FPSや平均値を参照してしまうと、こうしたスパイクに引っぱられ、実際のゲーム中のFPSとは、大きく乖離した値が出てきてしまうこともあります。
そこでベンチマークではパーセンタイル値を使い、「 全体のxx%がこの値をクリアしている」といった見かたをすることが一般的となっています。MangoHudはサマリに97パーセンタイル値を表示します。この値が60FPS付近であれば、( 一瞬のスパイクではなく)通常のゲームプレイにおいて、最大で60FPSに近いフレームレートが出せていると考えてよいでしょう。
また0.1%と1%は、記録されたFPSをソートし、最低値から数えて全体の0.1%/1%に含まれる値の平均値です[2] 。そのためこれらの値が高ければ、ゲーム全体を通じて極端にFPSが低下していないと言ってよいでしょう。
[2] ここが0.1/1パーセンタイル値ではない点に注意してください。本来であれば1パーセンタイルを表示し、「 全体の99%がxxFPS以上を達成できている」とするのが理想なのですが、サマリの出力項目はソースコードにハードコーディングされているため変更できません。なお計測終了時にHUDに表示される項目は、設定ファイルのbenchmark_percentiles
でカスタマイズできます。任意のパーセンタイル値を画面に表示させたい場合は、こちらを変更してみてください。
MangoHudを利用すれば、グラフィック設定をカスタマイズして自分なりの落とし所を探ることはもちろん、ゲームごとにグラフィックボードのベンチマークを取ることも簡単です。たまにはゲームを遊んでみたいけど、ゲームのためだけに高いグラボを買うのはちょっと……という方も多いでしょう。ですがフレームレートを参考にゲーム設定を見直してみると、普段使いのPCでも、意外とそこそこゲームが動いてしまうかもしれませんよ。
なお筆者はなんともならなかったので、RTX 3070を購入しました。