QuestでSteamVRのPCアプリを楽しめます。この記事ではALVRのチューニングの考え方と設定例を紹介します。初期設定や基本的な使い方はこちらの記事を参照して下さい。VRのゲームを動かす(Riftcat/ALVR/VirtualDesktop)OculusQuestでSteam(SteamVR)のアプリを動かせるようになったのでその方法を紹介します。GoがSteamVRを動かしているPCと高速な通信が行えることが前提になります。PCとの通信は無線で行いますから、高速な通信を行うためには無線通信に使うアクセスポイントが特に重要です。Goが対応している無線規格は一番新しいものは802.11acです。性能を引き出すためには802.11ac対応のアクセスポイントが必須要件になります。一口に802.11ac対応のアクセスポイントと言っても同時使用出来るアンテナの数に合わせて、最大通信速度が433Mbps,866Mbps,1300Mbpsのものがあります。Goは866Mbpsの2×2に対応していますので、なるべく866Mbps以上に対応するものを選ぶようにして下さい。アクセスポイントのLAN端子が1000BaseT(ギガビットイーサネット)に対応している事も重要です。100BaseTXだと、アクセスポイントとPCの間の通信がボトルネックになり、せっかくの802.11acの速度が生かせません。筆者が実際に使っていて十分な性能が引き出せているのは以下の製品です。MU-MIMOと呼ばれる端末が多数つながったときにも性能が低下しない機能を持っているため、ALVRと他機器の併用時にも安定した速度を得ることができています。TP-LINKはあまり聞き慣れないかもしれませんが、世界トップシェアのメーカーで、動作も国産メーカーよりも安定しているのでは無いかと思います。他の製品を選ぶ場合は、同等の性能のもの選ぶと安心です。アクセスポイントの性能は無線規格や有線ポートの速度以外にも、パケットの解析・転送処理を行うための計算能力も重要になってきます。Thread)ですから、このあたりの性能を基準にしてみて下さい。アンテナの数は3本以上あるものが良いでしょう。866Mbpsの2×2ではアンテナを同時に2つ使いますが、アンテナダイバーシティ(通信に有利なアンテナを状況に応じて選ぶ)機能を働かせるには、余分なアンテナが生きてきます。モバイルホットスポットは?PCに直接無線インタフェースを追加し、PC自体をアクセスポイントとして振る舞わせる方法もあります。この接続方法を選ぶメリットは、無線インタフェースがPCに直接つながっているため、通常であればPCと無線アクセスポイント間で生じる遅延を省けることです。PCとアクセスポイント間は1ms以下で通信できますから、これをメリットと取るかは微妙なところです。デメリットは、筐体サイズに限りがあるためアンテナが貧弱であることと、PCのノイズの影響を受けやすいことです。持ち運ぶノートPCであれば、アクセスポイントが不要であることは大きなメリットですが、そうで無いのであれば、無難にアクセスポイントを用意する方が良いと思います。アクセスポイントでは、設定で無線のチャンネルを変更することが出来ますが、特に理由が無ければデフォルトの設定にしておくことをオススメします。変更した、もしくは変更したかどうか覚えていない場合は、チャンネルをW52に設定しておくようにして下さい。(W52は5GHz帯のチャンネルです。)それ以外のチャンネルでは、時々DFSが働き、一定時間通信できなくなることがあります。DFSが発動するかどうかは、住んでいる地域と周辺環境に強く依存します。Selection)とは、気象レーダーや航空レーダーなどが優先されるチャンネル(W53とW56の一部)において義務づけられている、自動でチャンネルを変更するための仕組みです。これらのチャンネルで気象レーダーや航空レーダーが検知された場合、いかなる通信中であっても直ちに通信をやめて他のチャンネルに移動しなければいけません。このとき一時的に通信が出来なくなります。Webブラウジング等であれば、DFSが発動したことに気づく事はほとんど無いのですが、ALVRでは常にリアルタイムの通信を行っているため、通信が途絶えると致命的な影響があります。グラフィックスカードSteamVRのソフトを動かしますから、PCにはそのソフトを動かせるだけの高いグラフィックス処理能力が必要です。VRにおいてグラフィックスカードは一番重要な部品です。...https://vr-maniacs.com/entry/best-graphics-card-for-vr/さらに、ALVRはSteamVR作り出した映像を一旦H.264/H.265にエンコードして転送しますから、グラフィックスカードに搭載される動画エンコーダにも高い性能が求められます。ALVRはNVIDIAのNVEncとAMDのVCEの二種類のエンコーダに対応していますが、AMDのVCEはまだ実験的に対応されている段階であり、NVIDIAのNVEncが使える環境を用意するのが無難です。GPUの世代NVEncもグラフィックスカードの世代に応じて機能や性能が向上しています。大きな転換点になるのは、Maxwell第2世代のタイミングで、これ以降のグラフィックスカードを使うのが望ましいです。Pacal世代であればさらにエンコード出来る形式が増えています。1060等を使うのが良い、ということになります。NVEncの性能はGPUのクロックにある程度連動します。描画処理性能のように上位モデルとの性能に大きな差があるわけでは無いのですが、上位モデルの方がより速くエンコードできることも覚えておいて下さい。設定のチューニングに入る前に、まずは通信環境が良好であることを確認します。前述の802.111ac環境であれば、問題なく200Mbpsの速度かつ1%以下のパケットロス率で通信できるはずです。Bitrace:200Mbps」に設定を変更し、ある程度動きのあるSteamVRのソフトを動かしてみて下さい。Questのシステムv13で不具合が修正され、この設定は必要なくなりました。Questにはチャンネル幅が80MHzの時に通信が滞る問題があるため、アクセスポイント側でチャンネル幅を40Mhzに固定しておく方が無難です。先ほど紹介したTP-LINK製のアクセスポイントの場合、上部の「詳細設定」を選択してから左メニューの「ワイヤレス」→「ワイヤレス設定」を選んだ後に、右上の「5GHz」を選ぶと設定を変更することが出来ます。他のアクセスポイントにも、大抵は奥深くに設定する項目があるはずなので探してみて下さい。結果の確認と値の読み方30秒ぐらい通信させたら左端タブのServerで通信結果を確認します。各項目の意味は次のようになっています。Goに送信した総パケット(データの塊)の数。PacketRate1秒当たりに転送しているパケットの数。PacketsLostTotalTotalPacketsのうちロスト(無線エラーなどの要因で実際に届かなかった)した数。PacketsLostInSeconds1秒当たりのロストパケット数TotalSent転送した総バイト数。SentRate1秒当たりの転送バイト数。正常な場合は、設定した動画のビットレートに加えて後述するFecPercentageの分が上乗せされる。Goで表示されるまでにかかった時間。EncodeLatencyTotalLatencyのうち、1フレームのエンコードにかかった時間。SteamVRで表示されている絵が複雑であればあるほど時間が延びる。Go)より時間がかかると、描画がカク付くようになるEncodeLatencyMaxこれまでのエンコード処理の中で最大のEncodeLatency。Goに届くまで通信にかかった時間。通信速度が速ければ速いほど、動画のビットレートが低ければ低いほど小さくなる。Go側で動画データを受け取ってから、1フレーム分をデコードして絵になるまでの時間。Correction)データの割合。この割合が高ければ高いほど、パケットが失われても(PacketsLostInSecondsが高くても)前後のパケットから失われたパケットを復旧できる。余計にデータを送る分通信帯域を消費するため、値が増えるとTransportLatencyも微増する。FecFailureTotalFECによるパケットの復旧に失敗した回数。連続してパケットがロストすると失敗しやすい。1秒間の間に連続して失敗すると、FecPercentageが5%増える。Go側で表示しているフレームレート。この値がServerFPSより低い場合は、設定に何らかの問題がある。ServerFPSSteamVR側で描画しているフレームレート。Go)より低い場合は純粋にPCの性能が足りていない。FEC:送信データに冗長性を持たせることで、欠落したデータを前後のデータから回復させることが出来る仕組み。動画のストリーミングでは前のフレームからの差分データを送り続けているため、途中でデータが欠落すると、欠落した後の映像を作ることが出来なくなってしまう。そのような状況になるのを防ぐために、ALVRでは普段から回復用に余計にデータを送るようになっている。純粋な通信性能を調べる上で、まず注目すべきなのはSentRateとPacketsLostInSecondです。SentRateが205Mbpsを下回っているようだと、純粋にPCの性能や通信の帯域が足りていません。PacketsLostInSecondが常に増え続けているような状況だと、通信が安定していないと言えます。そのような場合はPCとアクセスポイントの接続、およびアクセスポイントの設定を確認して下さい。PacketsLostTotalの数と帯域について接続直後は大量の通信を行うため、PacketsLostTotalの値が一時的に増えることがありますがそれは問題ありません。あまりにもパケットがロストしてしまうとFECの回復に失敗し、それが原因でALVRがFecPercentageを自動で上げてしまう事があります。FecPercentageの初期値は5%ですが10%を超えるようなら、やはり通信の品質に問題がある状態と言えます。ビットレートが100Mbpsの設定で安定した通信ができて居るのであれば、ある程度は良い体験は得ることは出来ると思います。以下のことに注意して下さい。パケットロストが大量に発生してFECの回復に失敗した場合は、FecPercentageが増加し必要な通信帯域も増えるFECの回復に失敗した時には、復帰のためIフレーム(前のフレームの差分では無く全体の画像そのもの)の送信が発生するため、設定したビットレート以上の帯域を瞬間的に消費するつまりVideoで設定するビットレートは、限界ギリギリで設定するのでは無く50%ぐらいの余裕を持たせるべきです。FecPercentageが10%以下で維持できる限界のビットレートが100Mbpsぐらいだとすると、60~70Mbpsぐらいで利用するのが良いでしょう。通信速度は速ければ速いほどよいです。通信速度が速いと1フレームのデータを受け取るために必要な時間(=TransportLatency)が短くなります。理論上200Mbpsの時のTransportLatencyは100MbpsのTransportLatencyの半分です。パケットロスが発生したときにも、FECによる回復にかかる時間も短くなります。(ただし、前述の通りOculusシリーズやGearVRの最大通信速度は866Mbpsです。)チューニングにおける考え方ALVRを徹底的にチューニングしていくと、最後は画質と遅延のどちらを取るか?になります。言い換えると画質と遅延はトレードオフの関係にあります。遅延を追求すればほぼ違和感なくタイミング依存のゲームをプレイできますし、画質を追求すればPCと直接接続するVRプラットフォームと見間違うほどの映像を得ることができます。全体的に違和感を感じることは少ない設定です。75%DecodeLatencyの値は解像度に比例して大きくなるようで、Resolutionをこれぐらい下げないと、DecodeLatencyが14msを切りません。そのため解像度を泣く泣く下げています。TransportLatencyを削減するために、解像度に合わせてビットレートも下げています。ビットレートを下げているため、比較的遅めの通信環境でも問題なく使えます。(とはいえ、802.11acは必要です)Resolutionを50%にするとさらに遅延を抑えることが出来ますが、映像がかなり悪くなるので75%が限界と思います。遅延をさらに抑えたい場合は、さらにビットレートを抑えてTransportLatencyを下げる事になります。Goであれば60fpsなので、Resolutionは100%でもよいかもしれません。グラフィックスカードの性能によっては、画面がカクつくことがあります。AVCにしてみて下さい。画質重視設定パラメータ全てを画質に振り切った設定です。125%得られる描画結果はかなり綺麗で圧縮されていることがほとんど分かりません。Proと同レベルと言えます。その反面、SteamVRでの描画解像度は高くなりますから、必要となるPCの性能も高くなります。解像度を上げていますから、転送時間・デコード時間ともに長く、明らかな遅延が感じられます。TimeWarpが働くためあまり違和感は感じないのですが、前後を含む6DoFの移動となると、ぬるっと移動する形になり、かなり気持ちが悪いです。Timewarpについて知っておくOculusが開発した表示遅延を抑える第二世代のフレーム予測技術です。...https://vr-maniacs.com/entry/asynchronous-timewarp/このことから、座ってほぼ3DoFで利用するような場合に使える設定なのでは無いかと思います。Resolutionは100%でもそれなりに綺麗なのですが、SteamVRのメニュー画面などを表示したときに、線にジャギーが認識できるので、描画品質を求めるならResolutionを125%にした方が良いです。150%は、125%と画質差に比べ必要なビットレートやDecodeLatencyの増加が多いのでややバランスが悪いです。HEVC+Resolution125%の場合は、注意してみると画面中央付近で水平方向にひずみが感じられます。AVCにしてみて下さい。HEVCに比べて圧縮率は低いですが、複雑な映像で無ければ品質にそれほど差は感じられないと思います。最後にこの記事では高速な通信が行えていることを確認した上で、用途に合わせてどのように設定を変更するのが良いのかを紹介しました。そこまで使い込んでいるわけでは無いので、もっといい設定があったり、説明に間違いがあるかもしれません。その場合はTwitterやコメント欄で情報を頂けると幸いです。Quest+ALVRの体験をもう一段階上げるためには、DecodeLatencyを下げる最適化が鍵になりそうです。UHD(3840×2160)/60fpsの動画を余裕で再生する能力があるわけですから、本来はもう少し良好な結果が得られても良いはずです。一方で、そんな高解像度の映像を処理することはOculusのシステムは想定してなさそうですから、その辺りのシステムの最適化が進むのを期待するしか無いのかもしれません。何か改善が見られたら記事をアップデートしたいと思います。コメントをキャンセルメールアドレスが公開されることはありません。HMDはPCとDisplayPortで接続します。