【原神】Android版のAPIをOpenGLからVulkanに変更して動作させた結果…

Android

いつぞやのコメントで”Android版の原神はOpenGLで動作しているらしい”と教えてもらい、私自身もあまり気にしてなかったので異なるグラフィックAPIでの動作が気になり、軽く検証したので記事にまとめます。

原神のAPIをVulkanに変更する

Android版の原神はOpenGLと一応Vulkanでの動作をサポートしており、基本的にはOpenGLが使われています。

日本でこのことについて触れている情報は残念ながら多分…無いです。英語でも多くはありません。

【見つけたもの】

”GI Tuner for Genshin”を使い、手動でVulkanAPIに切り替えます。root権限は必須ではないみたいです。

Core構成は弄らず”Enable Vulkan(Unstable)”にチェックを入れ、設定を保存する項目をタップするとAndroidフォルダ内の”GenshinImpactフォルダ”が自動で開くので”このフォルダを使用”し、設定を保存します。

30秒もある長い広告を見る必要があります。あと、私は念のためにGI Tunerにroot権限を許可しておきました。

アプリ側で適用した設定が原神側に反映され、大抵の場合はVulkanでも問題なく起動します。

ゲームがクラッシュしたり、動作が安定せず何か異変が生じる場合は逆の手順で元の設定に戻して下さい。

1度設定するとGI Tunerで設定を上書きするまでAPIはVulkanのままです。継続的にVulkanAPIを有効化したい場合は特に何かする必要は無いです。ちなみにGLToolsを使った解像度のスケーリング(4K動作)とは併用不可です。

原神におけるOpenGLとVulkanAPIの違い

Windowsであればゲームで実行中のグラフィックAPIを調べるのは容易ですが、Androidだと恐らく簡単ではなく、私は方法をまだ見つけられていません。

幸い原神ではグラフィックAPIが異なる場合、描画に目に見えて影響する場合もあったのでOpenGL・Vulkanの見分けが何となくはつきます。

左:Vulkan/右:OpenGL

タニット露営地と聖顕殿の間だと如実で、自キャラから一定距離のオブジェクトに影響が生じています。

内部的に少し明るくなりジャギーも減るのか、自キャラの描画も変化するっぽいです。

左:Vulkan/右:OpenGL

少しだけOpenGLよりもVulkanで描画した方が綺麗に見えるかな…?っていう程度です。場所によっても影響の違いが軽微な場面も見られます。

フレームレートへの影響を測定

前置きと検証環境

描画に多少影響があるのが分かったところで、本題というか気になる部分のグラフィックAPIが違うことによる動作への影響を計測。

キッカケとも言えるSnapdragon 7+ Gen 2と8 Gen 1に加えて、今回はメイン機にしているPixel 6(Tensor)にも出張してもらって、この3機種のOpenGL・Vulkanでのフレームレート計測データ計6サンプルから軽く調べます。

検証環境は以下の通りです。フレームレートの計測にはいつも通りTakoStatsを使用。

テスト端末構成
端末POCO F4 GTRedmi Note 12 TurboPixel 6
OSAndroid 13
(Xiaomi.eu 14)
Android 13
(Xiaomi.eu 14)
Android 13
(TQ3A.230605.010)
SoCSnapdragon 8 Gen 1Snapdragon 7+ Gen 2Google Tensor
RAM8GB(LPDDR5)
ストレージ128GB(UFS 3.1)256GB(UFS 3.1)128GB(UFS 3.1)
備考動作制御:OS定格値
サーマルリミット:端末既定値
ゲームターボ側のGPU設定:通常(720p)

蛇足としてGeekbench 6(ストア版)における、Vulkan ScoreはTensor>Snapdragon 8 Gen 1≫Snapdragon 7+ Gen 2となっています。敢えてストア版を使用しブーストの有無を許容しています。

TensorのVulkan Scoreだけ異様に高くなるのは前々からです。Pixel 6 Pro(のTensor)がScore7000オーバーなので特段、Pixel 6がScore7240でもおかしいとは思いませんが…。後々触れるので頭の隅に置いておいて下さい。

計測結果

OpenGLのデータはK60 Proとの比較で既に計測済みのため、Snapdragonの2つはVulkanのみ。後述のグラフで比較します。計測内容はK60 Pro記事準拠で、スメール(千尋の砂漠)を最高画質60fps(720p)で30分間プレイ。

Vulkanでの結果はSnapdragon 8 Gen 1が平均54fps/最低(1%)で37.9fps、Snapdragon 7+ Gen 2が平均57.5fps/最低(1%)で47.5fpsでした。1フレーム辺りの消費電力は155mW、91mWで7+ Gen 2の方が優れています。

最大バッテリー温度はSnapdragon 8 Gen 1が49.3℃、7+ Gen 2が45.1℃でした。

Google Tensor(Pixel 6)はブログ内にて今までの計測データが無いため、OpenGL・Vulkan両方を計測しました。

左のVulkanで平均37.4fps/最低(1%)で20.4fps、右のOpenGLでは平均37.6fps/最低(1%)で19.6fpsでした。1フレーム辺りの消費電力は135mWと138mWで3mWしか違いが無く、誤差の範疇の値です。

改めて見ると、Tensor(Samsung 5nm)のワットパフォーマンスはSnapdragon 8 Gen 1よりはマシですが、水準としては888と大差なくあまり良くないですね…。

最大バッテリー温度はVulkanで40℃、OpenGLで38.4℃でした。どちらのグラフィックAPIでもGoogle側の厳格な温度管理によってCPU・GPU性能が抑えられ、Snapdragon2つより発熱は少ない結果になりました。

Google Tensorは、周波数を上げて一定値に達したら思いきり下げる強めの温度制御をしているため、チャートの通り温度・消費電力・周波数・フレームレートのどれもが不規則で安定しません。

前述したSnapdragon2つのOpenGLのデータと今回の計測データ、計6サンプルをグラフにまとめて比較するとこのようになります。

原神(720p)におけるフレームレートではOpenGL・Vulkanの違いは誤差の範疇で、Geekbench 6のVulkan Scoreとは正反対のTensor≪Snapdragon 8 Gen 1<Snapdragon 7+ Gen 2となりました。

OpenGLが振るわないだけで、VulkanならTensorでも多少パフォーマンスが改善されることを期待していましたが、根本的な原因は”Google Tensorそのもの”なので意味が無かったです。腐ってもMali-G78(MP20)なんですがね…。

バッテリー温度・1フレーム辺りの消費電力(ワットパフォーマンス)では、Tensorが誤差程度に留まる一方でSnapdragon(特に7+ Gen 2)の場合、OpenGLの方が消費電力が少なく温度も低い傾向が見られました。

これは一応、説明が可能でSnapdragon 7+ Gen 2(Adreno 725)をGPUベンチマークとしては不適切な、Geekbench 6のOpenGL・Vulkanで比較した場合もVulkan Scoreの方が高いため、性能が異なる≒消費電力の増加=温度上昇という、プロセッサーならではの事象に当てはめると腑に落ちる結果です。

Tensorの説明も可能で、ベンチマーク結果などではSnapdragon 870相当でも振るわない原因はExynosベース故に最適化不足もあり、Google側が発熱を懸念したのか厳格で強い温度制御をしているため、OpenGL・Vulkanの違いが誤差の範疇でしか現れず、消費電力や温度でも誤差程度しか出ないと説明がつきます。

もちろん私の少ない知識と足りない脳みそで、計測結果から分解して”逆説的に言えば”の域を出ませんが…。

今までExynosベースの最適化不足でポテンシャルはあるのに、性能が思ったように発揮できないだけと思っていましたが、Tensorの根本的なゲーム性能の悪さはGoogleの意向であるベンチなどを重視しない結果通りです。

後継のTensor G2でもPixel 7 Proと7aで、原神では1.5~2倍近く平均フレームレートで差がある結果が多いのも何となく納得がいきます。あとSnapdragon 8 Gen 1のように50℃近くまで温度上昇するよりかは、しっかりと熱くなりすぎず、電力効率では一応優れていたのでTensorを悪く言う気は無いです。

少し脱線しますが…やはりベンチマークは所詮ベンチマークでしかなく、実ゲームの性能は別物だと考えるべきで、特にGeekbench 6のGPUベンチマークはあくまで”性能の優劣をGeekbenchの結果同士で比較する”以外には使い物にならないと思います。GPU性能に限ればGFXや3DMarkの方がまだ参考になる。

あとがき

確かなのはSnapdragonの場合、誤差ですがOpenGLの方が最低フレームレート(1%)と電力面で優れており、OpenGLの方が全体的に動作も安定しているので、わざわざグラフィックAPIを変更する必要性は薄いということ。

またグラフィックに影響が見られるが、それを差し引いてもパフォーマンスが悪化する可能性があり、例えばもっと古いSoCを搭載したデバイスで、ベンチマークテストにおいてOpenGL・Vulkanの結果にとても差がある場合は海外の結果みたいに多少動作がマシになるかも…程度でしか無くTensorは救えなかったです。

何れにせよAndroid版の原神でグラフィックAPIの違いを気にする程の差はほぼ無いです。だからと言ってVulkanAPIで動作するベンチマークの結果や原神の動作が良いから、動作APIがOpenGLの他ゲームについても100%安定するなどと考えるべきでもないです。

また、これらの結果は私の計測データによる簡易的なものでしかないです。