HTC VIVEの適切なスーパーサンプリングを調べてみる
SteamVRにはスーパーサンプリングという機能があります。スーパーサンプリングとは画面(HMDのパネル)の解像度以上の解像度で描画することで綺麗に見えるようになるという機能です。
設定画面で変更可能
以前は設定ファイルを直接書き換えないといけなかったのですがいつの頃からか設定画面で変更できるようになりました。
赤枠一番下の行の”Current 2.0x”の2.0が現在の設定値です。
ただでさえVRは2画面描画しないといけないのにその上高い解像度で描画するので当然ながらPCに負荷がかかります。綺麗になるのはいいのですが負荷がかかるとフレームレートが落ちてカクつき、VR酔いにもつながります。画質とフレームレートのバランスが重要です。
今まで何にも考えてなかった
VIVEを買ってしばらくしてからだったと思いますが、スーパーサンプリングで数値を増やすと画像が綺麗になる!と聞いて早速試してみました。で、本当に綺麗になったのでそれ以来ずっと2.0(今でいう4.0)にしてました。1080だしこれくらい大丈夫だろうと思ってたんですが…
先日ふとこちらのサイトが目に入りました。
その中にこんなタイトルがあって
内部解像度「4.0」の常用に迫れるか?GTX1080TIのゲーム・VR性能
えっ?1800で4.0で常用してたけど…
フレームタイミングを見ることでどのくらいの負荷がかかっているのか調べられるので見てみました。いやーとんでもなかったです…
ちなみにこんなグラフです。
上段はCPUの負荷、下段はGPUの負荷です。それぞれのグラフの上部の薄緑の部分がアイドル、何もしてない余裕の部分です。これがなくなるといっぱいいっぱいということです。
まずは状況を調べてみる
フレームタイミングを表示させる
まずはHMD内にフレームタイミングを表示させます。設定画面の”パフォーマンス”で設定します。
”フレームタイミングを表示”というボタンを押すとモニタにグラフが表示されます。
さらにグラフの下に”ヘッドセットに表示”というチェックボックスがあるのでチェックを入れます。するとHMD内にも表示されるようになります。
VIVEのコントローラにくっついて表示されます。
これでフレームタイミングが見えるようになりました。このアイドル部分がなくなるとヤバいという訳ですね。つまり全てが縦軸のメモリが11以内でないとだめです。なのでこのうす緑の部分がギリギリあるくらいを目指していこうと思います。
再投影
ちなみに負荷が高まってもSteamVRには”インターリーブ再投影”と”非同期再投影”というフレームレートを上げる(ごまかす?)機能があるので11を超えたところで即座に問題になるという訳ではないですが、今回は実験もかねて2つの機能には頼らない方向でオプション2つともチェックを外して行いました。
調査方法
なお、ゲーム内のグラフィックのオプションの違いでも当然フレームレートは変わってきます。スーパーサンプリング値と合わせると膨大な組み合わせになってしまいとても全部調べるのは無理です。
今回はゲーム内ではまずグラフィックオプションを最低にしてからスーパーサンプリング値で余裕がある値にしたあとゲーム内のグラフィックオプションをあげるというやり方で調べました。スーパーサンプリング値は1.0~2.0まで0.5ずつ、と結構大雑把に変えてます。実際にプレイするときはもっと細かく突き詰めた方がいいかもしれません。
全部のゲームを調べるのは大変なのでいくつかかいつまんで見てみました。まだ少ないですが随時追加していこうと思います。ちなみにバンドル買いまくってたらVRソフトが200本超えてた…
フレームレートはGEFORCE EXPERIENCEのオプションで表示させました。HMD内には表示されないのでHMDをずらしてモニタで目視で確認の数値ですのでご了承ください。
Assetto Corsa
コースや自分のいる場所によって当然結果は違ってきますがMonzaのスタート地点で調べました。
まずはグラフィックオプションを最低にしました。
SS2.0
さすがにはみ出てますね。頭を振るとカクカクです。2.0ですらこれなのに今まで4.0でプレイしていたとは…
フレームレートは思ったよりかはよくてスタート地点では80後半をキープしてました。SoloでMonzaを1周してみましたが他の車がいないせいもあるとは思いますがレース中の方が負荷が低く90キープしてることも多かったです。悪いところで70後半くらいでした。
SS1.5
さっきよりかはましだけどグラフィック最低でもこんなに負荷があるとは。こちらも頭を振るとカクカクです。
フレームレートはもちろんSS2.0よりもよくスタート地点では90、レース中も80を切ることはなかったです。
SS1.0
おお、だいぶ落ち着きました。これ採用ですかね。
フレームレートはスタート地点では90、レース中もほぼ90でたまに89、悪い時で88でした。
これをベースにグラフィックオプションを設定していきます。4つの要素をそれぞれ1つだけ上げました。
ゲーム中はちょこちょことグラフが11をはみ出てますが体感では特に問題なくスムーズに動きました。しかしモニタに比べるとかなり画質を落とさないと駄目ですね。各オプション1つ上げただけですがギリギリです。
フレームレートはほぼ90、ただオプション上げる前に比べると89に落ちる回数は多かった感じがします。
Project Cars
グラフィックのオプションを最低にします。
こちらはAzure Circuitのスタート地点で調べました。スタート地点ですべての車が行ってしまった後です。
SS2.0
まずは2.0です。
当然のごとく11は切れてません。
フレームレートはスタート地点で45、レース中はよくて50後半で大体40後半から50前半が多かったです。
SS1.5
こちらもちと厳しいですね。
フレームレートはスタート地点で60前後、レース中は60後半から70前半が多い印象でした。たまに80を越えました。
SS1.0
AssettoCorsaではこれで行けましたが…
まだ…かな。
フレームレートはスタート地点で60前後、レース中は89が多かった印象です。たまに80前半、悪い時で70台でした。
SS0.6
最低値の0.6でも試してみました。
う~ん、AssettoCorsaの1.5と同じようなグラフですね。でもこれ以上は下げれません。
ただゲーム中は結構低いんですよね。単独走だったのもあるかもしれませんが。
フレームレートはスタート地点で80後半、ほぼ90~80後半でした。まれに70台に落ちることもありました。
AssettoCorsaと比較するとコースが違うので不公平ではありますが、Project Carsは負荷高い印象です。SS0.6でも90をコンスタントにはキープできなかったので..グラフィックオプションは上げるとつらそうですね。
あと印象的なのがCPUの負荷です。こちらもAssettoCorsaに比べると高いです。物理演算頑張ってるんでしょうか?
Euro Truck Simulator2
グラフィックのオプションは細かく調節できるのですが項目数が多いので”Simple Setting”で”低”を選択しました。
なおフレームレートはうまく表示されず(常に188固定)今回は考慮してません。
SS2.0
いきなりなんですけど負荷低すぎ!
もう採用です。グラフィックのオプションをUltraにしてみましたが、全然いけますね。
これは逆にSSを上げてみましょう。
SS3.0
グラフィックはUltraのままSSを3.0にしてみました。
まあ当然先ほどよりかは負荷が上がりました。
グラフィックをUltra→高に下げてみます。
いけるかも。
かなり負荷が低いですね、このゲーム。ただ不思議なことに負荷の低さの割にはカクつきを感じます。作りの問題なのでしょうか?
The Solus Project
今のところVRゲームで一番のお気に入りです。知らない惑星に1人ポツンといる感がたまりません。スタートしてすぐの場所で検証しました。
グラフィックのオプションをすべて最低にしました。
見にくいですが一番上のResolution Scaleは70%です。この値はかなり画質に影響があって70%だと文字を読むのがきつい感じです。
こちらもフレームレートが表示されなかったので考慮してません。
SS2.0
おお、いきなり行けそうですね。グラフィックを上げてみます。
まずはResolution Scaleを100%にして他のオプションは1段階増やし、Anti-Aliasingをオンにしました。
まだ行けそうですね。Resolution Scaleを150%にしてみました。
これはちょっときついです。140%にしてみます。
これならいいかも。ただ周りにある物によってかなり負荷が変わるのでもうちょっと下げといたほうが無難かも。ちょくちょくカクつきは感じました。
CALL OF THE STARSEED THE GALLERY EP1
最近セールで購入して、そろそろプレイしようかなと思ってたゲームです。
まずはグラフィックオプションですが、いっぱいあるのでプリセット使うことにします。Lowを選びました。
スタート地点の洞窟から1歩外に出たところで測定しました。
SS2.0
お、いきなりオーケーですね。画質をMediumに上げます。
まだ行けそうですね。最高のHighにします。
大丈夫ですね。優秀です。実際プレイしても問題ありませんでした。フレームレートはほぼ90固定でした。
SS2.0で十分綺麗だったので今回はこれ以上はSSを上げてませんが、もう少し上げても大丈夫そうですね。
The Solus Projectもでしたがレースゲームみたいに常に画面全体が高速で動いているわけではないので負荷も低いんでしょうね。
感想
ちゃんと見ておくべきだった
今までかなり負荷かけてたんですね…いや、我ながら鈍感でした。もっと早く調べていれば余計なVR酔いも防げてたかもしれません…今回やってみるとやはり動きはスムーズです。今後は新しいVRゲーム買ったらまずは最適なスーパーサンプリングを調べ、遊ぶときはその値でプレイするようにします。
あとゲームの作りによってもかなり変わりますね。最適化されてないところもあるんでしょう。今後開発者が慣れてきて最適化が進めばよくなるとは思います。
再投影
今回は実験もかねて2つの再投影をオフで試してみました。普通にプレイするときは少なくとも非同期再投影はオンにするでしょうから今回より若干上の設定でも大丈夫と思います。実際非同期再投影をオンにすると全然違います。効果絶大です。今度非同期再投影がどの程度よくしてくれるのか調べてみようと思います。
ただインターリーブ再投影はフレームレートが45まで落ちてしまうのでできれば頼りたくないですね。最後の保険という感じです。可能な限り非同期再投影で90fpsを切らないところを目指したいです。
たまにしょうがなく処理落ちするくらいならいいですが、常に処理落ちだとやはりつらいと思います。意識的にはフレーム落ちを感じてなかったとしても知らず知らずのうちに影響を受けてVR酔いに繋がってた可能性もあります。
さらなる高解像度は厳しい?
しかし現状でこれだとVRのパネルの解像度を上げてなおかつその解像度を活用できるのはまだまだ先になりそうですね。すさまじく速いグラフィックボードが手の届く値段で販売されるか視線追跡で見てないところをぼかすといったような何らかの支援がないと厳しいでしょうね。ゲームに関しては。