ロボットと趣味と自堕落と

ロボットの事なんか一言も書いてない

Oculus Rift DK1でのプレゼン接続方法について

どうもこんにちは。
11/29、30に東京の目黒で第三回Oculus GameJam in Japanに参加してきました。
僕はプログラム苦手マンなので、今回はまともにスクリプト書いておりませんが、なかなか良い感じのゲームが出来たのではないかと思います.
(成果物を参照出来る何かが無いので詳しいゲーム内容とかについてはとりあえず割愛)

そんなOcuJamもゲームジャムなので、要所要所で参加者に自分たちのチームが作っているゲームを紹介したり進捗報告したりする必要があります。
ところが、実際に各自が作ったゲームのプレイ画面を見せながらプレゼンしようとすると、何故かOculus側に表示がされなかったり、トラッキングが出来なかったりなどで上手く行かなかったチームが割りといた気がします。*1
そこで今回はこの上手く行かなかった表示に対して解決策になるかもしれないアイディアについて述べたいと思います。
参加チームのほとんどがDK2でのアプリ開発で、DK1を使ってるのは僕らだけだったので、正確な問題の切り分けや、DK1/DK2での原因の違いなどはハッキリとわかりませんが、とりあえずDK1ゲームをプレゼンする方法として自分なりの解決策を見つけたので、備忘録的に書いておきます。

目的と構成

目的

「Oculusゲームをリアルタイムでプレイしながらプレゼンしたい」
「プレイ画面をプロジェクタのスクリーンで見せたい」
などのため、unityでビルドされたゲームをOculusで表示しながら且つスクリーンなどの大型ディスプレイに表示する。

構成
  • PC: G-tune i990 (ノートPC)
  • OS: Windows8.1 with Update
  • GPU: GTX 870M
  • メモリ: 16GB
  • Unity version: 4.6
  • Oculus: Developer Kit 1

下図の様な接続構成をとって「PC画面を見ながら、プロジェクタでPCディスプレイの複製を表示し、Oculus DK1でもゲームをプレイする」という構成を取りたい。
f:id:i-hako:20141201031438p:plain

Fig.1 構成図
(接続ポートが上図のようになっているのは、今回この構成のみでしか検証していないため。)

問題点

Fig.1のように3画面出力で構成しようとすると、何故かOculusのRuntimeがDK1を認識しなくなり、DK1のヘッドトラッキング機能が使用出来なかった。*2
結局、PCディスプレイとプロジェクタにはミラーリングが反映されているが、Oculus側の入力が全く得られないという問題点が発生した。

解決策

結論

先に結論から述べると、Fig.1の様に3画面同時出力はどうやら無理っぽいです。
そこで、PCディスプレイの画面表示を諦めて、Fig.2の様にプロジェクタとDK1のみに画面表示(複製モード)すると良い。
f:id:i-hako:20141201032327p:plain

Fig.2 成功した構成図
このようにすると、プロジェクタでプレイ画面を表示しながら、Oculusも使う事ができた。

手順

では、Fig.2の様にする構成について説明する。

  1. まずは接続
    PCの各ポートにプロジェクタとOculusを接続し、DK1のUSBケーブルを接続する。(Oculusは電源入れ忘れないように!)
  2. プロジェクタへミラーリング
    デスクトップで右クリックすると「画面の解像度」という項目があるはずです。これを使ってPCの画面をプロジェクタへミラーリングしましょう。
    これは「windowsキー+P」でも出来たと思います。この状態ではOculusは恐らく何も表示されていない筈です。
  3. 表示する画面をプロジェクタとOculusに変更
    ここでノートPCとプロジェクタのミラーリングから、プロジェクタとOculusのミラーリングへ切り替えて、PCに画面表示が出来ない様にしましょう。
    「画面の解像度」の項目で「複数ディスプレイ」というのの中に、「デスクトップを2と3のみに表示」というものがあると思いますので、それを選択し、
    PCディスプレイに画面が表示されない様にします。これで漸くプロジェクタとOculusのみにデスクトップが表示されているはずです。
  4. Oculus Runtimeの確認
    ここで、一度Oculus Runtimeを起動し、DK1が認識されているかどうか確認して下さい。僕の環境では必ずと言っていいほど認識されていない状態になっていました。
    Oculus Runtimeで認識されていなかった場合、一度DK1のUSBケーブルを抜き差しし、Oculus Runtimeで認識される事を確認して下さい。
  5. いざゲーム起動
    ここまで来たらあとはプレイするゲームを起動するだけです。恐らくプロジェクタにPCでのプレイ画面が表示され、DK1側にもちゃんと表示されているはずです。
    この状態ならば、DK1からの入力などをちゃんと得ることができ、ヘッドトラッキングなども問題なく作動しました
(画像などがなく、ちょっと分かり辛いかと思われますので、後日補完します。)

まとめ

あまり問題の切り分けとか他のパターンの検証とかちゃんとやっていないので、多分他にもいろんな問題あると思いますし、根本的な解決方法では無い気もする。
(なにせDK2持ってないので試せなかったし、DK2は他にも色々障壁があるらしいのでDK2勢はこれで上手くいかなくてもご容赦願います><)*3
もしかすると、ディスプレイとか関係無しに、単純にRuntimeの問題だったりするかも…
あるいは、GPU側の問題で接続するポートが物理的にこういうことが出来ない様な接続になっているのかも…
…と、まぁこんな感じで「なんとなく試行錯誤したら上手くいった」程度の解決策なので、試してみて上手く行けば儲けモンぐらいの軽い気持ちで参考にしていただけると助かります。
(すでに他の方法も沢山あると思うけど、僕は知らないのでご存知の方いたらコメントで教えていただけるとすごく嬉しいです。)

なにはともあれ、とりあえずこれで表示は出来ると思うので、困っている方がいらしたら一度試してみてください。

*1:全員の共通点として、「Oculus + PCディスプレイ + プロジェクタ」の構成で3画面出力しようとして上手く表示されなかったという感じ。

*2:僕らの場合、ヘッドトラッキングが要だったのでこれは大問題だった

*3:どなたかDK2僕に買ってください!!!!!!!!!