htc viveのヘッドセットのパネル解像度は1080×1200ドットを2枚という構成だが、SteamVRのスーパーサンプリングの値を変更することで内部解像度を向上させ、パネル上での見た目を鮮明・高精細化する事ができる。本記事では概要と効果、最後に変更方法をメモしておく。
スーパーサンプリングとは
スーパーサンプリングはRenderResolution(描画解像度)を定義するオプションで、この値を変更する事でパネルに描画する前段階の内部解像度を変更する事ができる。
htc VIVEでは非公式ではあるが、後述するSteamVR.vrsettngsのオプション数値を変更する事により、パネルに表示される前の内部でレンダリングする解像度を上げる事できる。強引にヘッドセットのレンズパネルに表示されるイメージの「見た目」の品質の向上を図るものである。
CG全般で古くからモアレが発生する際などで用いられていたスーパーサンプリングアンチエイリアス(SSAA)などがあるが、viveのスーパーサンプリング(RendarTagetMultiplier)値はNVIDIAのグラフィックボードの機能Dynamic Super Resolution(DSR)に近いだろうか。(DSRはレンダリング解像度を実際のディスプレイの何倍で行うかを指定する)
追記
2017年6月9日のStamVRのアップデートによってスーパーサンプリングの値の扱いが変更になった模様。変更にあわせて当記事も修正している。この変更によって、スーパーサンプリング値は以下のように扱いが変わる。
例:旧仕様 2.0 → 新仕様 4.0
新仕様のスーパーサンプリング値と内部解像度
仕様変更によって、Supersampling(RendarTagetMultiplier)の片目辺りの内部解像度の値は以下のようになっている。
描画解像度を上げると非常に重い
尚、描画解像度を向上させる様なアプローチ方法はGPUに対しての描画負荷が非常に高い。PS4のタイトル郡が1920×1080で30FPSギリギリという所を踏まえると、90FPSを維持する必要があるVRで、通常より高解像度でレンダリングする手法がいかにヘビーな手法か分かる。実際4Kの3840×2160の解像度はモダンなゲームにおいて、ハイエンドグラフィックボードでも60FPSは維持できていない。描画品質を落としたり、軽いタイトルでようやく60FPS安定といったレベルだ。
*980ti SLI程度の環境ではウィッチャー3等のタイトルでは4Kは未だスペック不足というくらい解像度が及ぼす影響は大きい。画質オプションを下げてようやく60FPS維持といったレベルである。
想定してない挙動になる可能性も
steamVR.vrsettngsで強制的に内部解像度を変更すると、ソフトによってはタイトル内部で高解像度化された状態で想定外の負荷処理が加わってしまう疑惑もある。この値変更は抜け道的なアプローチであり、多くのソフト側は全く考慮しない。
負荷が高まると優先順位的にライトやシャドウの品質やAO等の処理、各アニメーションの更新頻度(個々のアニメーション内部のフレーム数)などが低下し、高解像度化されているが描画やアニメーション品質が通常より劣った状態になる可能性もある。
更に既にフレーム低下時にプレイヤーに知覚させないようにフレームレートを誤魔化す技術も備えてるため、一見正しく動いてる用に見えても、実は内部でFPSが低下しているという事もある。
この様に非常に重い処理を加え、一定のトレードオフも発生する可能性があるという事を留意しつつ、値を変更する必要がありそうだ。
効果・比較
あくまで内部解像度を向上させて表示させる手法なので、実際のヘッドセットのパネル解像度を超えて我々の目に飛び込んでくる事はない。高解像度でレンダリングしたものをhtc VIVE相当の2060*1080ドット相当の解像度に落とし込まれる。
下記取得イメージが完璧に一致した保証はないが、概ねレンズを通した見た目と差異はないように調整キャプチャした。あくまで比較イメージである事を前提に掲載しておく。
スーパーサンプリング: 0.5
さすがに荒い。デフォルト値より低い状態なので、現在保有しているグラフィックボードがVRレディ未満の場合に値を下げる際に利用できそうである。とはいえ、ただでさえレンズのボヤけ具合が気になる現在のヘッドセットで内部解像度まで下げてしまうと、VRの体験品質も下がるレベル。ここまで妥協するのであればRX480などの安価なVRレディGPUに新調した方が良いだろう。
スーパーサンプリング: 1.0
1.0はデフォルト値だろうか。基本はオプション値は記載しないほうが確実なので、デフォルトに戻すときは記述自体削除しておいたほうが良いだろう。思わぬトラブルが発生しかねない。ボケてるという程ではないが、アンチエイリアスが効いてるな・・というレベルでは知覚できる。
スーパーサンプリング: 4.0
1.0と比較するとフォントが鮮明に表示されている事が確認できる。ビットマップレベルのテクスチャーレベルに落とし込まれてるデータ部分は差異はないが、ポリゴンのエッジやフォントの解像感は明らかに向上してる事が知覚できる。
スーパーサンプリング: 0.5
さすがに全体的にぼやけており、テクスチャですら画面あたりの解像度に足りてない状態だ。既存のVRタイトルでも最低値は0.65なので、ここまでヒドイ状態でプレイしてるユーザーはいないと思われるが、VRレディ未満のスペックでプレイしてるユーザーはこれに近い状態である可能性が高い。
スーパーサンプリング: 1.0
0.5と比較するとテクスチャも本来の解像度を保ている事がわかる。ポリゴンのエッジディティールも高精細だ。
スーパーサンプリング: 4.0
テクスチャなどは、1.0近辺でリソースデータを表示するには十分の解像度があったようだが、2.0にすると更にディティールは向上している。ポリゴンのエッジやノーマルマップによる凹凸の変化、それに反応する環境光の振る舞いなどは1.0と比較して細かく描写されてる様にも見える。
ヘッドセットの状態とルームスケールの位置を完全に一致させる事が難しいため、十分な比較イメージではないが、細かいポリゴンディティールを見ると差異が確認できる。
変更方法
追記:簡単に変更出来るようになった。
ユーザーが作成したアプリケーションで変更する方法もあるのだが、今後のアップデート等でSteamVR事態が不安定化した際にブラックボックス化してしまい、原因が分からなくなる危険性もある。ここでは手動で変更する方法を記載しておく。尚、「steamvr.vrsettings」が壊れるとSteamVRが起動しなくなる。ファイルのバックアップを確保しておいた方が良いだろう。
1:ファイルを探す
以下のフォルダにアクセスし、Steamvr.vrsetthingsというファイルを探す。(デフォルトインストール時のパス)
C:\Program Files (x86)\Steam\config
2:ファイルをメモ帳で開く
右クリック>プログラムから開くを選択
メモ帳を選択する。勿論常用してるテキストエディタがあればそちらの方が良い。
3:編集する
テキストの中身を確認すると呪文ような英語が列挙されてる事が確認できる。SteamVRで変更したオプションの値はここに格納されている。そのため、人によって若干の記述の差異はある。
記述位置は「”Steamvr”:{ }」範囲内なら、どの行でも良いのだが、事例として以下の選択範囲で示した場所にテキストを追記する
記述例
renderTagetMultipilierの記述の前行最後に「,」がある事に注意
"steamvr" : { "allowReprojection" : true, "background" : "C:\\Program Files (x86)\\Steam\\steamapps\\common\\SteamVR\\\\resources\\backgrounds\\photo.JPG", "basestationPowerManagement" : true, "playAreaColor" : "#FFFFFF00", "showMirrorView" : true, "renderTargetMultiplier": 2 },
GTX1080ユーザー専用のアプローチ方法
筆者の手元にはGTX980tiOC とRadeonR9 nanoの環境があるが、どちらも実用レベルには達しなかった。グラフィックオプションをタイトル毎に細かく調整できるなら、なんとか使えそうではあるが、描画クオリティを下げると本末転倒の気もする。Pascal世代のハイエンドでなければ実用的でない様だ。軽量なタイトルでは効果がありそうだが、値をタイトル毎に検証し、詰めていくのは現実的ではないためデフォルトに戻してしまった。
今のところはGTX1080ユーザー専用の高画質化アプローチ方法といった所だろう。現状GTX1080をフル活用するようなVive対応タイトルがないので、比較的軽いタイトルでパワーを持て余してる状態であれば、活用できるのかもしれない。
関連記事
内部解像度4.0時の動作を計測した記事
簡単な設定方法
ゲーム毎に個別で内部解像度を変更する方法
http://indiegame-japan.com/blog/2018/04/27/post-4217/