OpenCompositeでOculusRift/Rift Sの性能を向上させる
OculusRift/Rift S/Oculus Linkを使う場合に限りOpenCompositeを使うとSteamVRで動作するアプリの性能を向上させることが出来ます。この記事ではその方法を紹介します。
OpenCompositeの対象である「SteamVRで動作する」とは?
Oculusストアで購入したアプリはOculusが提供するランタイムシステムで動作します。これはLibOVRと呼ばれています。
一方、Steamで購入したアプリは、Oculusシリーズに対応と明記されていたとしても、SteamVRと呼ばれるシステムを使って動作します。
一部Steamで購入してもLibOVRでの動作に対応しているアプリもありますが、その場合も何も指定しなければSteamVRで動作します。
今回性能を向上させるのは、こういった選択もできずSteamVRのみに対応したアプリが対象になります。
OpenCompositeはどんな仕組みで性能を向上させているのか?
OpenCompositeはSteamVR向けのAPI呼び出しをLibOVRに直接転送することで性能向上を実現します。
OculusRift/Rift SでSteamVRアプリを動作させる場合、SteamVR向けのOculusドライバで動作しますが、LibOVRでアプリを動かした場合と動作がやや異なります。このSteamVRはVIVEや他のプラットフォームも想定した設計になっているため、CPUの負荷が余計増えてしまうようです。OpenCompositeを使うことで、この余計な部分をスキップして直接LibOVRの機能を呼び出すことで、この余計な負荷を低減させることができます。
Reviveと呼ばれる似たようなソフトがありますが、これはOculus専用、つまりLibOVRにのみ対応しているアプリについて、LibOVRのAPI呼び出しをSteamVRに転送しており、OpenCompositeと逆の動作をします。
OpenCompositeを使った場合の他のメリットは?
一つ目はSteamVRのインストールすら全く不要になる事です。これによりSteamのインストールや面倒なルームセットアップが全く不要になります。
二つ目はSteamVRの起動を待たずに済むため、起動が速くなります。OculusシリーズでSteamVRのタイトルを起動させるときには、まずOculus Homeを起動してから、次にSteamVRが起動する、というようにまどろっこしいことになっていましたが、この流れが改善されます。
OpenCompositeを使った場合のデメリットは?
まだ全てのSteamVRの機能に対応しているわけでは無いため、一部動作しないソフトがあります。ドキュメントで言及されていたり、ネットで情報が見つかる代表的な対応アプリは以下の物があります。
代表的な対応アプリ
- Skyrim VR
- Fallout 4 VR
- VTOL VR
- PAYDAY 2 VR
- RACEROOM RACING EXPERENCE
また、Oculus Touchの3Dモデルが無いため、一部のゲームでは独自のモデル(手など)を使った表示になります。
OpenCompositeの効果はどれぐらいか?
前述の対応ソフトの中でもSkyrim VRとFallout 4 VRは要求する性能が厳しく、通常の状態ではGeForce1070/2070クラスの性能が必要ですが、OpenCompositeを使うと1060/2060クラスでも問題なく動作するようになったという報告があります。
つまりグラフィックスカードを1ランク上げたぐらいの効果があるようです。(※私の環境では高スペックを要求するタイトルが無いので、そこまで効果を実感できては居ませんが、多少は性能が向上している気がします。)
OpenCompositeの利用方法
システム全体に適用する場合
- OpenCompositeのサイトからOpenComposite Launcherのzipファイルを入手し適当な場所に展開します。
- 起動すると以下のようなウィンドウが表示されるのでSwitch to OpenCompositeを選びます。
これでSteamVRを使うタイトルがOpenCompositeを使ってOculusのネイティブアプリと同じように動作するようになりました。元に戻す場合はSwitch to SteamVRを選ぶだけです。
アプリごとに適用する場合
- OpenCompositeのサイトからDLLをダウンロードします。
- 対象のアプリのフォルダを開きopenvr_api.dllを探します。
- openvr_api.dllを見つけたら、適当なファイル名に名前を変更し、1. でダウンロードしたDLLに置き換えます。
- 32bitと64bitがありますので、対象アプリにあわせて適切な物を選ぶ必要があります。
- アプリを起動したときにタスクマネージャの表示を見れば32bit/64bitを見分けることが出来ますが、両方試してうまくいった方を使うのが手っ取り早いです
OpenCompositeの詳細設定
OpenCompositeは、起動時にopencomposite.iniという名前のファイルを検索します。まず、openvr_api.dllと同じフォルダを探し、見つからない場合はワーキングディレクトリ(通常EXEと同じフォルダ)を検索します。ファイルが見つからない場合はデフォルト値が使用されます。
opencomposite.iniは設定ファイルで、いくつかのオプションを指定できます。これらはname=valueの形式で記述され、;または#で始まる行はコメントになります。オプション名は大文字と小文字が区別されます。無効な値が設定された場合、アプリは起動してすぐにクラッシュします。名前、等号、値の間の空白は無視されます。
設定可能なオプション
- enableAudio – ブール値、デフォルトは有効です。OpenCompositeがゲームのオーディオをRift組み込みオーディオにリダイレクトするかを指定します。つまり、Windowsのデフォルトのオーディオデバイスを設定する必要はありません。これは常に動作するとは限らず、クラッシュの原因になることもあります。詳細は後述します。
- renderCustomHands – ブール値、既定値は有効です。OpenCompositeでカスタムの手をレンダリングするかを指定します。もし嫌なら、これを無効にしてください。一部のゲーム(スカイリムのように)には、バックアップモデルが代わりに使われます。
- handColour – 色、デフォルト#4c4c4c。OpenCompositeで描画される手のカラーを指定します。適切なテクスチャがないためです。
- supersampleRatio:浮動小数点、デフォルトは1.0です。使用されているスーパーサンプルの比率です。これはSteamVRに入力するものと似ています。SteamVRでの値が145%の場合、ここで指定する値は1.45です。たとえば、SteamVRで80%の場合0.8です。数値を大きくすると、表示品質が向上しますが、パフォーマンスが低下します。
- haptics – boolean、デフォルトで有効。タッチコントローラへの触覚フィードバックを有効にするかを指定します。
- admitUnknownProps – ブール値、既定は無効です。トラッキングされているデバイスのプロパティを要求されたときに認識できない場合、OpenCompositeはエラーを無視してゲームを続行しします。これを有効にすると、深刻で検出が困難な副作用が発生する可能性があります。もしこのような状況が発生した場合は、私たちに問題を報告して修正する機会を下さい。しかし、一部の(非常に少ない)ゲーム(Vivecraft)は、すべてのプロパティを照会します。このような場合は、このオプションを有効にする必要があります。
- forceConnectedTouch – ブール値、デフォルトは有効です。これを有効にすると、ゲームは常にTouchコントローラが接続されていることを通知されます。そうでなくてもです。これにより、ゲームの開始時にスリープ状態であった場合でも、コントローラは確実に機能します。ゲームパッドを使っていて、コントローラが接続を認識して欲しくないゲームの場合は、このオプションを無効にします。課題25参照。
- logGetTrackedProperty – ブール値、デフォルトは無効です。アプリケーションがトラッキングデバイスに関する情報を要求したときに、ログ情報を出力します。たとえば、HMDやTouchコントローラなどです。一部のゲームでは、これによりフレームごとにログエントリが生成されるため、パフォーマンスが低下し、ログをぐちゃぐちゃにしてしまします。これはトラブルシューティングに役立つ可能性があり、configオプションが存在する前はデフォルトで有効になっていました。一般的に、この(または、トラブルシューティング中に何をしているかを把握している)を有効にするように指示されていない限り、これを有効にする必要はありません。
最後に
SteamVRで購入しOculusランタイムネイティブ動作に対応していないアプリを、Oculusネイティブであるかのように動作させるOpenCompositeを紹介しました。
SteamVRは外乱にも弱く、画面がカク付いてしまうことが何かとあったり起動も遅いという問題がありましたが、この症状も軽減させることが出来ます。OculusRift/Rift Sを使う場合には是非とも抑えておきたいソフトウェアです。
筆者の環境ではパフォーマンスの向上が実感できる機会は限定的でしたが、起動が速くなる点については明らかな差がありますので、これだけのために導入する価値はあると思います。
また、知識のあるOculusユーザは、SteamVRで同じソフトが販売されていたとしても、Oculusネイティブ対応が欲しいがためにOculusストアで敢えて買う、みたいなこともありましたが、今後はこういった悩みを持たずに済みそうです。
おそらく今後発表されるOculus Linkを使った際にも活躍するのでは無いかと思います。
ディスカッション
コメント一覧
オキュラスcv1をウィンドウズ8.1(haswell+grtx1070)上で使っております。
かなり無理目の、opencompositeを使用しても更に重い処理をなんとか楽しみたいと思っています。
supersampleRatioで0.7を指定する他に、なにかできることはあるでしょうか。
steamVRですと解像度を下げることができるようですが、オキュラスHOMEなどでも何処かでそれができたらとおもうのですが。
とにかく、軽さ優先に全部振った状態で使いたいのです。
OculusTrayToolなどで変更できるsupersampleRatioはsteamVRにおける解像度と全く同じ意味の設定です。なのでグラフィックス性能が足りていないのであれば、適切な対処で他に効果的な方法は思いつかないです。(OpenCompositeはどちらかというとCPUの方を軽くする効果があります。)
快適さを上げようとすると、あとは目的のアプリに応じて何が足りてないかを見ていくしかないと思います。
少し関係があるとすれば、Windows 8.1をWindows10に更新してみるのもよいかもしれません。DirectXが新しくなっているので、アプリによっては効果があります。
https://vr-maniacs.com/entry/why-windows10-for-vr/