Crysisまにあブログ2

個人的なまとめ記事(っぽいもの)を書きます

Oculus Link & Air Linkのビットレートおよびコーデックによる画質の違い(更新2023年4月23日)

ここでは有線LinkをLink、Air LinkをAir Linkと表記しています

 

ビットレート以外の設定はレンダリング解像度 5408x2736、リフレッシュレート 80Hz、エンコード解像度 3664、曲率 Low、Link Sharpening 有効、H264におけるNumslicesは5です(Air LinkでH264を使う方法と、各設定の解説はこちらの記事をご覧ください)。

ブラウザをフルスクリーンにし、別々のタブで各画像を開き、画像の表示サイズをウィンドウサイズではなく実サイズにしてからタブを切り替えて比較すると良いです(そうしないとVR内で見るよりも遥かに小さい状態なので比較になりません)。

Link (H264) 200Mbps

Air Link (H264) 200Mbps

Air Link (H265) 200Mbps

同じビットレートではH265のほうが劣化が少ないです。

Link (H264) 300Mbps

Air Link (H264) 300Mbps

H264ですが、ビットレートの違いによりH265の200Mbpsより少し良くなっています。

Link (H264) 500Mbps

Air Link (H264) 500Mbps

ノイズやボケが大きく低減され、細部まで描写されます。

Link (H264) 900Mbps

大半のシーンでは500Mbps以上にしてもほとんど違いは見られなくなります。今回の比較で用いているシーンは画質の維持が難しいものなので一応違いは見られます。

 

その他参考画像

Half-Life2 VR

H265 200Mbps https://i.imgur.com/GhWG3Cu.png

H264 350Mbps https://i.imgur.com/8ziIw5c.png

H264 500Mbps https://i.imgur.com/K0KeLPz.png

Half-Life2 Episode2 VR

H265 200Mbps https://i.imgur.com/CYPgbFN.png

H264 350Mbps  https://i.imgur.com/4TXELXZ.png

H264 500Mbps https://i.imgur.com/nRhjCrF.png

 

VR内で見た時、低ビットレートではノイズやモヤが動きますし、視点の移動や動きに対する耐性もないですから、実際に生じる差は画像よりも大きくなります。

※画質の劣化の大小は設定の違いだけではなく、どういった映像かが大きく影響します。映像の複雑さ(グラフィックの高度さ、ではない)、動きの多さ、色合い、色の使われ方などなど。シンプルな映像であれば差は出にくくなります。

モンスターハンターオンラインのスクリーンショット

とっくにサービス終了しているモンスターハンターオンラインですが、撮りためたスクショがあるので掲載する価値がありそう?なものだけ。ちょっとずつ増やしていきます、たぶん。

モンスターハンターオンライン

imgur.com

Quest2 Oculus Link & Air Link 画質設定解説(更新23年11月27日)

Oculus Link、現Quest Linkの設定について最新情報をまとめています。

 

現在用いているバージョン

Oculus PCアプリ v60.0.0.109.352(PTC版)

本体ファームウェア v60.0.0.107.366 (PTC版)

※PTC版とは公開テストチャンネル版、所謂ベータ版です。PCアプリはいつでも正式版⇔PTC版で切り替え出来ますが、本体ファームウェアは1度更新すると基本的に初期化しない限り前のバージョンには戻せなくなるので注意が必要です。

 

ここでは有線LinkをLink、Air LinkをAir Linkと表記しています

 

重要情報

PCアプリ v24くらいから報告があり、しかし長いこと未解決だった、Linkにおいて映像の下4分の1くらいが白くなったりピンクになったりする現象ですが、非常に有効な解決法が見つかりました。詳細はこちら

 

LinkおよびAir Linkの画質は大きく分けて6つの設定で決まっています。レンダリング解像度、エンコード解像度、リフレッシュレート、曲率、ビットレート、Link Sharpeningです。設定の変更はOculus PCアプリとデバッグツール(Oculus/Support/oculus-diagnoticsにあるOculusDebugTool.exe)で行います。

 

  • レンダリング解像度
  • エンコード解像度
  • リフレッシュレート
  • 曲率
  • ビットレート
    • Linkの場合
    • Air Linkの場合
  • Link Sharpening
  • その他の設定
    • Pixels Per Display Pixel Override
    • Video Codec
    • Sliced Encoding
    • Dynamic Bitrate Max
    • Dynamic Bitrate Offset(Mbps)
    • Fov Tangent Multiplier
    • Filtering Mode
  • SteamVRの強制的な動的レンダリング解像度を無効化する
  • Air Linkを500Mbpsで使えるようにする方法
  • 映像の下4分の1くらいが白くなったりピンクになったりする現象の解決策

 

レンダリング解像度

レンダリング解像度は映像の元解像度または基準解像度です。この設定はPCアプリのデバイス設定→機器(機器を選択)→グラフィック設定にあります。推奨解像度(倍率x1.0の解像度)はリフレッシュレートとPC環境によって変わりますが、PCアプリ内で設定可能な最大解像度は5408x2736と決まっています。

もっと上げたい場合は後述のPixels Per Display Pixel Override、または各ゲームの設定やSteamVRの設定を使用してください。ゲームによっては高い方にも低い方にも勝手に変わってしまうものもあります。

 

エンコード解像度

エンコード解像度は出力解像度で、この値が高ければ高いほど元映像の再現性が高くなります。デバッグツールのEncode Resolution Widthで設定します。

初期値は0(自動設定)で、実際の値は3664(Quest2のパネル解像度と同じ値)…と決まっていれば良いのですが、3664は自動設定における最大値でありPCスペック等で低くなることがあるようです(以前はLinkが3664、Air Linkが2880と方式で違っていることもありました)。任意の数値を入力すれば、その値か、それに近い値になります。起動可能な最大値は4032~4064です。

変更を保存するには数値を入力しツールバーのServiceからRestart Oculus Serviceを選択して再起動してください。

 

MetaのAksoy氏によれば、レンダリング解像度が5408x2736、エンコード解像度が3664あるとQuest2のパネルに対して1:1になるそうです。実のところ3664にしても内部で3680にされるので厳密にはパネルと一致することはありません。レンダリング解像度もエンコード解像度もパフォーマンスに影響する(エンコード解像度は主にVRAM使用量に影響する)ので、ご自分が丁度良いと思うバランスを見つけてください。

 

リフレッシュレート

この設定はPCアプリのデバイス設定→機器(機器を選択)→グラフィック設定にあります。理論的にはリフレッシュレートが低い方が映像の劣化は小さく、高い方が劣化は大きくなりますが、実際の違いはあまりありません。

 

曲率

視野の正面と周囲に割り当てるピクセル数のバランスの設定です。デバッグツールのDistortion Curvatureで設定します。Default、Low、Highの3つがありますがDefaultとHighは同じです。DefaultとHighでは正面よりも周囲の解像度が重視されます。Lowにすると周囲よりも正面の解像度が重視されます。元々視野の端に行くほど見づらくなりますから、基本Lowで良いです。

変更を保存するにはツールバーのServiceからRestart Oculus Serviceを選択し、再起動します。

デバッグツールの説明ではHighのほうが正面の解像度が重視されるとありますが、実際はLowが正面重視です。説明が完全に間違っているというわけではなく、実はLowを選択すると内部ではHighになっているようです。要するに設定の項目名が間違っているんですね。

 

ビットレート

映像のビットレートです。基本的にはこの数値が大きいほど映像の劣化(圧縮によるノイズ、ボケ、滲み、潰れなど)が減ります。こちらの記事ビットレートによる画質差を比較しています。

Linkの場合

LinkのビットレートデバッグツールのEncode Bitrate(Mbps)で設定します。初期値は0となっており、実際のビットレートは最大で200Mbps前後です。公式でサポートしている最大値は500です。数字をコピペすることで500以上の数値を入力することが出来、起動可能な最大値は960です。またUSB2接続では300くらいが不具合の出ない限度です)。

数字を入力しEnterキーを押すだけでリアルタイムで変更が反映され、保存もされます。もし反映されない場合はツールバーのServiceからRestart Oculus Serviceを選択して再起動してみてください。

Air Linkの場合

Air Linkのビットレートは基本的にAir Link内でDashメニュー左端のOculus Air Linkボタンを押すと出てくる設定画面で設定します。ビットレートの設定値はあくまで最大値であり、たとえ固定ビットレートでネットワークに余裕がある状態でも設定値のビットレートで動くわけではなく、実際にはだいぶ変動します(実ビットレートはタスクマネージャで確認出来ます)。ダイナミックビットレートは動作が安定しやすいですがビットレートを大きく下げることがあります。固定ビットレートは相対的に高いビットレートが維持されますが、不安定になる恐れがあります。

設定画面上で設定可能な最大ビットレートは200Mbpsです。デバッグツールにあるEncode Bitrate(Mbps)、後述のDynamic Bitrate Max、Dynamic Bitrate Offsetを使えば200Mbps以上に出来ます。また、使用するコーデックをH265からH264に変えると実用可能な上限ビットレートが遥かに上がります。詳細はこちら

Air Linkにおいて現状AMDグラフィックカードでは設定をいくら上げても実ビットレートは最大100Mbpsかもしれません(v53と最新のドライバで100Mbps制限がなくなったという情報があります。AMDユーザの方はタスクマネージャで実ビットレートの確認をお願いします)。


※Linkのためにビットレートを非常に高い値にしていると当然ながらAir Linkでは正常に動かなくなる恐れがあります。LinkとAir Linkの両方を使う方は注意してください。

 

映像を鮮明化します。デバッグツールのLink Sharpeningで設定します。v55以降ではDisabled、Normal、Qualityの3つがあり、Normalは従来のもの(Link Sharpening+)で、QualityはQualcomm Super Resolutionを用います。映像全体の鮮明さはNormalが最も高く、Qualityはエッジはシャープになりますが、それ以外の部分は無効時とそれほど変わらずだいぶぼやけて見えるかも… 逆にNormalが鮮明すぎると感じる方には良いかもしれません。この設定はリアルタイムで適用・保存出来ます。

 

その他の設定

Pixels Per Display Pixel Override

デバッグツールにあるPixels Per Display Pixel Overrideという設定でもレンダリング解像度を変更できます。これはPCアプリで設定された解像度に対して縦横何倍にするか、という設定です。初期値は0で、これは1倍です。1.1と入力すれば、縦も横も1.1倍の解像度になります。

リアルタイムで変更が適用できるかはゲームによって異なります。SteamVRではリアルタイムに変更することは出来ません。また、この設定は完全には保存されません(アプリの再起動などを行うと戻ってしまう)。

ややこしくなるのでPCアプリで設定可能な最大解像度5408x2736を超えるレンダリング解像度にしたいとき初めて使うようにした方が良いです(そもそも使う機会はほとんどないと思いますが…)。

Video Codec

v54でデバッグツールにVideo Codecの設定が追加されました。それまでもレジストリエディタを使うことでコーデックを変更出来ましたが、デバッグツールに設定はありませんでした。Default、H264、H265がありますが、DefaultではLinkでH264になり、Air LinkでH265になります。常に特定のコーデックを使いたい場合はH264かH265を選択してください。

選択するだけで設定は保存されます(リアルタイムでは適用されません)。

同じビットレートではH265のほうが画質は良いですが、本体側の処理能力が追い付かず実用可能なビットレートは200Mbps台に留まります。グラフィックカードwifi環境にもよりますが、H264ではLinkであれば800Mbps以上、Air Linkでも500Mbps近くまで実用可能になります。そこまで高いビットレートを出せずとも、300MbpsでH265の200Mbpsの画質を上回ります。またH264のほうが遅延が小さくなります。

Sliced Encoding

v54でデバッグツールにSliced Encodingの設定が追加されました。これはSliced Encodingのオンオフの設定です(厳密には5分割でSliced Encodingをするか、そもそも使わないかの設定)。Default、ON、OFFがあり、Defaultは有線の時にSliced Encodingを使い、Air Linkでは使いません。ONだと常にSliced Encodingを使い、OFFだと使わなくなります。Sliced Encodingを使った方がレイテンシーが小さくなる傾向にあります。

Dynamic Bitrate Max

デバッグツールにあるDynamic Bitrate MaxはAir Linkのダイナミックビットレートの最大値の設定です。これを使えば上限を200Mbps以上にしてダイナミックビットレートを使うことが出来ます。

数字を入力しEnterキーを押すだけでリアルタイムで変更が反映され、保存もされます。もし反映されない場合はツールバーのServiceからRestart Oculus Serviceを選択して再起動してみてください。

Dynamic Bitrate Offset(Mbps)

デバッグツールにあるDynamic Bitrate Offset(Mbps)は現在のAir Linkのダイナミックビットレートの設定に対し、どれだけ数字を上積みするかの設定(オフセットの分だけ上限が加算される)ですが、これを使うと何故かダイナミックビットレートではなく固定ビットレートと同じような状態になります。しかし固定ビットレートだけを使う時よりも安定するような気がします。

数字を入力しEnterキーを押すだけでリアルタイムで変更が反映され、保存もされます。もし反映されない場合はツールバーのServiceからRestart Oculus Serviceを選択して再起動してみてください。

Fov Tangent Multiplier

デバッグツールにあるFov Tangent Multiplierは本来ミラーリング映像の視野角を大きくするためのものですが、逆に小さくすることで視野角を犠牲にする代わりにGPU負荷の低下(フレームレートの向上)、VRAM使用量の低下、画質の向上(エンコードによる劣化の低減)と、いろいろな効果を得られます。

設定は水平方向(Horizontal)と垂直方向(Vertical)に分かれており、どちらも初期値は0(実際の値は1)です。小さくすればするほど映像の範囲が狭まっていきます。以下は同じシーンでGPU使用率、VRAM使用量の変化を比較したものです。

0,0(初期値):GPU使用率 65% / VRAM使用量 6.1GB

0.9,0.9:GPU使用率 56% / VRAM使用量 5.6GB

0.8,0.8:GPU使用率 46% / VRAM使用量 5.1GB

水平と垂直の値を同じにする必要はありません。少し下げるだけなら元々見えないところが削れるだけなので下げたほうが得と言えます。この設定は完全には保存されません(アプリの再起動などを行うと戻ってしまう)。一部のゲームではリアルタイムに変更を適用出来ますが、そのようなゲームでは上記の効果に加えて映像の詳細度を上げる効果も得られます。

Filtering Mode

デバッグツールの下の方にあるLayer Propertiesの各レイヤー設定の中にあります。DefaultとForce Normal、Force High Qualityがありますが、DefaultとForce Normalは同じものです。Layer 0のFiltering ModeをForce High Qualityにすると映像の外周部の解像度低下が抑制されます(比較画像→DefaultHigh Quality)。意識して見ることがなければあまり意味はないと思いますが、画質が向上することは確かです。いつでもリアルタイムに変更が適用されますが、設定は保存されません。

 

SteamVRの強制的な動的レンダリング解像度を無効化する

SteamVRのホームと、ごく一部のSteamVRのゲーム(最もプレイする人が多いであろうHalf-Life: Alyxがそうです)は動的レンダリング解像度を使用しています。GPUに余力があれば自動的に解像度が上がり、余力がなければ下がるため、設定した解像度とは異なる解像度で動作します。カスタム解像度であってもです。また、これにより動作が不安定になる場合があります。

無効化するには各ゲームのプロパティの起動オプションに以下を記述する必要があります。

+vr_fidelity_level_auto 0 +vr_fidelity_level 3

SteamVRホームでは無効化出来ません。

 

Air Linkを500Mbpsで使えるようにする方法

ビットレートを大幅に上げるにはAir Linkで使うコーデックをH264にする必要があります。PCアプリがv53以前であれば、レジストリエディタでHKEY_CURRENT_USER\SOFTWARE\Oculus\RemoteHeadsetにDWARD(32bit)値でHEVCという名前の項目を作成し、値を0にしてください。PCアプリがv54以降であればデバッグツールのVideo CodecをH264にします。

H264にするとデコード負荷が大幅に減り(遅延も減る)、ビットレートを大幅に伸ばすことが出来ます。300MbpsくらいでH265の200Mbps以上の画質になります。環境が良好であれば500Mbpsも行けます。

もちろんビットレートを上げすぎるとフレームレートが不安定になったり遅延が激増したりするので注意してください。リフレッシュレートも注意です。下の項目で説明していますが、Sliced Encondigの分割数が多いほうが安定するかもしれません

通常のH265のAir Linkで全然ビットレートが出ない、遅延が酷いという方はこの方法でH264にすると大きく改善するかもしれません(改善したという報告があります)

 

映像の下4分の1くらいが白くなったりピンクになったりする現象の解決策

解決策は2つあります。

1つ目はエンコード解像度を下げること。エンコード解像度を高くしている方は下げると直るかもしれません。

2つ目は、Sliced Encodingを使わないか、分割数を減らすことです(この白帯現象はH264でSliced Encodingを使っているときに起きることが分かっています)。こちらの方法は極めて高い確率で直ります。Sliced Encodingを使わなくするには、デバッグツールのSliced Encodingの設定をOFFにすればいいです。もしOFFにして不安定になった場合はレジストリエディタでSliced Encodingの分割数を調整してみてください。

レジストリエディタで、HKEY_CURRENT_USER\SOFTWARE\Oculus\RemoteHeadsetにDWARD(32bit)値でnumslicesという名前の項目を作成します(既にあるなら新たに作る必要はありません)。値が0か1だとSliced Encodingは使われません。2以上にするとSliced Encodingが使われます。分割数が小さいほど白帯現象が発生する確率は低いと思われるので、1、2、3、4と試して白帯現象が起きず、かつ安定するところを探してください。H264におけるSliced Encodingの初期値は5です。6以上にしても問題はありません。

 

続きを読む