Oculus Rift
Oculus Rift は Oculus VR によって開発されているバーチャルリアリティヘッドマウントディスプレイです。
基本設定
ハードウェア
Oculus Rift のデバイスは HDMI によってセカンダリディスプレイとしてグラフィックカードに接続します。センサーとして使うには USB でも接続します。oculus-udevAUR パッケージが適当な udev ルールを設定します。
完全に利用するには input
と video
グループにユーザーを追加する必要があります。plugdev
グループは必要なくなりました (モードは 0666 に設定されます)。
SDK
パッケージ
公式の Oculus Rift SDK はAUR のパッケージ oculus-rift-sdkAUR からインストールすることができます。CMake ビルドの対応などの修正が加えられたバージョンは oculus-rift-sdk-jherico-gitAUR でインストールすることが可能です。
パッケージは X セッションが起動した時に oculusd
デーモンが実行されるように設定します。パッケージをインストールして X を再起動すれば自動的にバックグラウンドで実行されます。
公式のソースから
SDK は Oculus VR Developer Center で無料の登録をすれば入手できます。
SDK をコンパイルしてから WorldDemo を実行して確認してください:
$ tar zxvf ovr_sdk_linux_4.0.3.tar.gz $ cd OculusSDK $ make $ ./Samples/OculusWorldDemo/Release/OculusWorldDemo_x86_64_Release
ビデオモード
Rift を適切に機能させるには、特定のビデオモードを使う必要があります。特に、リフレッシュレートが低い通常のモニタと同じビデオモードを使っている場合、ゲームのリフレッシュレートも低くなってしまいます。
Rift をプライマリモニタにしないと、同期が正しく動作しません。
xrandrift
AUR にある riftutilities-gitAUR[リンク切れ: アーカイブ: aur-mirror] というパッケージには xrandrift
という名のスクリプトが含まれています。このスクリプトは xrandr
を使って Rift を使うのに適したビデオモードを (引数に合わせて) 判断します。さらに、現在のビデオモードを記録して、プログラムが終了した後にスイッチバックします。
(対応しているアプリケーションで) 遅延をできるだけ減らすには、以下のようにプログラムを実行してください:
$ xrandrift OculusWorldDemo
Team Fortress 2 などの Source のゲームの場合 (プロパティの起動オプションで設定します):
$ xrandrift -e -p %command% -freq 75
60Hz で動作するゲームの場合:
$ xrandrift -s -p OculusWorldDemo
手動で xrandr を使う
Say our primary monitor is DVI-I-2, and DVI-I-3 is the Rift, and that 1152x864 is the highest mode that supports 75Hz. To use this:
xrandr --output DVI-I-3 --primary --rotate left --mode 1080x1920 --rate 75 --auto --output DVI-I-2 --mode 1152x864 --rate 75 --auto --same-as DVI-I-3 --scale-from 1920x1080
Although the Rift SDK reccomends not rotating the secondary display, not doing so seems to cause issues with a number of programs. This command will set the primary monitor to have a scaled version of the entire display. If you prefer panning, change --scale-from
to --panning
.
xrandr --output DVI-I-3 --primary --rotate left --mode 1080x1920 --rate 60 --auto --output DVI-I-2 --mode 1920x1080 --rate 60 --auto --same-as DVI-I-3 --scale-from 1920x1080
The above video modes can have some havoc on your display if you simply use xrandr --auto, as it'll still try to scale something. Use this to return to one monitor:
xrandr --output DVI-I-2 --primary --auto --rotate normal --panning 1920x1080 --scale 1x1 --output DVI-I-3 --off
動作するアプリケーション
Rift と Linux が問題なく動作するアプリは今のところひと握りです。その中には AUR に存在するものもあります。
Dolphin VR (Gamecube エミュレータ)
dolphin-emu-vr-gitAUR はゲームキューブのエミュレータです。パッチを適用することで完全なヘッドトラッキングのステレオスコープレンダリングを行うことができ、さらに VR でゲームを上手く動作させるためのカスタマイズも多数施されています (例えば、カリング処理を無効化して世界全体を見渡せるようにしています)。
Oculus-wine-wrapper
oculus-wine-wrapper-gitAUR は Wine を動かす時に SDK の Linux 版と Windows 版の違いをうめるためのユーティリティです。Wine アプリケーションが使用できる共有メモリコンテキストを作成して、アプリからネイティブの Oculus SDK にアクセスできるようにします。wineprefix に SDK をインストールする必要はありません。
Unity ゲーム (wine)
Unity を使用しているゲームの性能を最大限発揮するには、-force-opengl
で強制的に OpenGL モードにするのが最適です。しかしながら、wine にパッチをあてないとこのモードを使うことはできません [1]。wine-unity3d-gitAUR パッケージを使うことでゲームをネイティブの OpenGL で動作させることが可能になります。残念ながら頻繁にビデオモードなどの設定が変わってしまうので、画面設定が必要になります。さらに、ネイティブの OpenGL なので、nvidia の __GL_THREADED_OPTIMIZATIONS は適用されません。コマンドは以下のようになります:
env __GL_THREADED_OPTIMIZATIONS=1 oculus-wine-wrapper UnityGame.exe -screen-height 1080 -screen-width 1920 -popupwindow -force-opengl
Minecrift (Minecraft VR)
Linux サポートはメインラインに入りましたが、Linux サポートを完全に機能させるアップデートはまだリリースされていません。最新の JRift (ネイティブの java rift ランタイム) ビルドで既存のバージョンの Minecraft を動作させる方法は こちら に書かれています。
さらに、JRE7 よりも JRE8 の方がパフォーマンスが上がるという報告が多数上げられています。
JanusVR
JanusVR は 3D のウェブサイトを探検できるアプリケーションです。AUR のパッケージが存在します: janus-vr-browser-binAUR[リンク切れ: アーカイブ: aur-mirror]。
JanusVR のコードがアップデートされても AUR パッケージは自動的にアップデートされません。その場合はパッケージを再ビルドしてください。
トラブルシューティング
DK2 カメラによってカーネルログが埋まってしまう
カーネルログに以下のようなメッセージが大量に表示される場合:
xhci_hcd 0000:04:00.0: WARN Successful completion on short TX: needs XHCI_TRUST_TX_LENGTH quirk?
USB 3.0/Hybrid 2.0/3.0 端子で Oculus DK2 Camera に何らかの問題が起こっています。USB 2.0 端子に接続してみてください。
サスペンド/復帰後にカメラの挙動がおかしい
サスペンド・復帰してから Rift を使用すると、カメラが位置トラッキングデータをよこさなくなって、VR プログラムが位置トラッキングできなくなることがあります。`ovrd` プロセスを終了しようとすると、ロックアップして親プロセス (ウィンドウマネージャ) が終了するまでゾンビプロセスになります。復帰後に、DK2 カメラを一度抜いてから再度接続することで問題は解決します。
古いアプリケーションで読み込みが遅延する
何らかの理由で、ovrd の 0.4.4 以下を使用するようにコンパイルされたアプリケーションで ovrd
の 0.5.0 以上を使用すると読み込みが遅延します。古いアプリケーションを使用すると、まるで泳いでいるかのような表示になってしまいます。古いバージョンの SDK をインストールすることで解決します。