VR」カテゴリーアーカイブ

VR

Oculus Quest 5万円ちょうどで買えるフルスペック VR

Oculus Go が登場してからちょうど一年。新しい VR デバイス Oculus Quest が発売されました。最大の特徴はポジショントラッキングにフル対応したスタンドアロン型になっていることです。

要するに、これまで PS4 かデスクトップ PC でしか遊べなかった両手モーションコントローラやルームスケール対応ゲームが、部屋へのベースステーション設置作業とかケーブルの配線とか一切の準備不要で、完全ワイヤレスで楽しむことができるようになるわけです。

・ケーブルなし
・外部センサーやベースステーションの設置なし
・両手モーションコントローラでポジショントラッキング対応
・ルームスケール対応

例えると最初のマルチタッチ対応スマートフォンが出たようなもの。手軽に VR を楽しむために欲しかったものが一通り実現されたことになるので、後はスマートフォンのように年々プロセッサの性能を上げていけばいいだけです。

もちろんモバイルプラットフォームなので、ハイエンド PC と比べると CPU/GPU 性能には大きな隔たりがあります。特に描画性能は落ちるため、決して従来型のコンソールやデスクトップ向け VR HMD が不要になるわけではありません。またアーキテクチャも違うので、Steam などの既存のゲームがそのまま動くわけでもなく、対応ソフトの登場を待つ必要があります。

対応ソフトはまだまだ少ないですが、VR 機能が統一されたので Quest 向けゲームはだいぶ開発しやすくなります。今まではコントローラやトラッキングの仕様が違いすぎて、PC の本格的な VR ゲームをモバイルやスタンドアロン機へ移植するのが困難でした。

またケーブルやベースステーションがないことで、ルームスケール範囲の自由度はむしろ従来のデスクトップ型 VR よりも高くなります。

なお Oculus Quest と同等のデバイスとしては HTC Vive Focus Plus があります。Quest より値段は高いものの、こちらもスタンドアロンかつ両手のモーションコントローラ込みでポジショントラッキングに対応しています。Daydream も HMD のポジショントラッキングに対応した Mirage Solo が出ていますが、6DoF 対応のモーションコントローラがまだありません。ただし Daydream も 6DoF 対応コントローラの開発は行われているようです。

Google VR: Experimental Daydream 6DoF controllers

今後はモバイル系のスタンドアロン機も 6.6DoF 対応が標準になっていくものと思われます。

Oculus の場合アーキテクチャ面でのプラットフォームは2種類ですが、ソフトウエアの対応は Rift, Quest, Go それぞれ異なっています。Oculus Quest の OS やアーキテクチャはモバイル系に属しますが、トラッキング性能やコントローラは PC 系の Rift (S) と同じです。アーキテクチャ上は Quest でも Go/GearVR ソフトが動きそうですが、今のところは対応していないようです。

Oculus HMD Controller Host OS Arch
Oculus Rift / Rift S 6DoF 6DoF Touch x2 外部 PC Windows x64
Oculus Quest 6DoF 6DoF Tocuh x2 Standalone Android 7.1 arm64
Oculus Go (Gear VR) 3DoF 3DoF x1 Standalone Android 7.1 arm64

ちなみに Daydream と Vive の場合は下記の通り。

Daydream HMD Controller Host OS Arch
Daydream 3DoF 3DoF x1 Smartphone Android 7.1+ arm64
Daydream Standalone 6DoF 3DoF x1 Standalone Android 7.1+ arm64

HTC Vive HMD Controller Host OS Arch
HTC Vive/Pro/Eye 6DoF 6DoF x2 +α 外部 PC Windows 他 x64
HTC Cosmos 6DoF 6DoF x2 外部 PC? Windows 他? x64?
HTC Focus Plus 6DoF 6DoF x2 Standalone Android arm64
HTC Focus 6DoF 3DoF x1 Standalone Android arm64

より詳しいスペックはこちらに載せています。

HMD VR / AR Device spec 一覧

関連エントリ
Oculus Quest も文章書き&開発マシンにする
Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
Oculus Go を文章書き&開発マシンにする
VR で物が大きく見えたり小さく見えたりするわけ
Oculus Go は VR ができる新しい携帯ゲーム機

VR Daydream 上で UserLAnd / Termux を使う

前回 Daydream 上でのテストに使用した方法です。通常のスマートフォンなら Oculus TV のような仕組みが不要なので、VR 上で動く VNC か SSH client があれば OK です。ブラウザ上で動く noVNC を使ってみました。

●noVNC での接続

事前に Bluetooth キーボードを接続しておくことをおすすめします。まずはスマートフォン単体で。

(1) UserLAnd の Install

(2) UserLAnd を立ち上げ、任意の Linux Distribution を選んで VNC を選択

(3) Termux の Install

(4) Termux に noVNC を入れて起動する

$ pkg install git
$ git clone https://github.com/novnc/noVNC.git
$ ./noVNC/utils/launch.sh --vnc localhost:5951

(5) Android の Chrome ブラウザから “http://localhost:6080/vnc.html” を開く

(6) noVNC の画面になるので “Connect” を押して VNC password を入れると Desktop が表示される。

(7) Menu の設定から Scaling Mode を “Local Scaling” に変更するとデスクトップ全体になります。

noVNC を開いたところ
noVNC

Android の Chrome 内で UserLAnd で Linux (Ubuntu)
UserLAnd で Linux Desktop

●VR 上での接続

Daydream View を使います。

(1) VR 上でライブラリのアプリ一覧から Chrome ブラウザを選びます。

(2) あとは同じように “http://localhost:6080/vnc.html” を開くだけです。

Daydream の Chrome でも UserLAnd で Linux (Ubuntu)
Daydream Chrome で UserLAnd の Linux Desktop

●速度面

前回 も載せましたが、さらに VR なしの noVNC のデータを追加しました。UserLAnd 上から Termux に ssh localhost -p 8022 で繋いでビルドを行っています。

VR あり VR利用 SoC RAM Thread Time
Daydream + Pixel 3 (noVNC) あり Snapdragon 845 4GB 8 72
Oculus Quest あり Snapdragon 835 4GB 8 105 秒
Oculus Go あり Snapdragon 821 3GB 4 275 秒
Daydream + ZenFone AR (noVNC) あり Snapdragon 821 8GB 4 349
VR なし VR利用 SoC RAM Thread Time
Pixel 3 (Termux Console) 無し Snapdragon 845 4GB 8 32
Pixel 3 (noVNC) 無し Snapdragon 845 4GB 8 38
Essential Phone 無し Snapdragon 835 4GB 8 38 秒
ZenFone 3 Max ZC553KL 無し Snapdragon 430 3GB 8 100 秒
ZenFone AR (Termux Console) 無し Snapdragon 821 8GB 4 111
ZenFone AR (noVNC) 無し Snapdragon 821 8GB 4 135
Nexus 5X 無し Snapdragon 808 2GB 6 135 秒

・Time はビルドにかかった時間で単位は秒。Time の値が小さい方が高速。

●画面など

デスクトップウィンドウのような細かい文字だと Pixel 3 の解像度 (2180×1080) ではかなり厳しいことがわかりました。携帯できる大画面モニタとして使えると便利かと思いましたが、全体的にぼやけており逆に画面が狭くなったように感じます。

ZenFone AR は解像度 (2560×1440) が高い反面、ビルドのような高負荷な状態が続くと処理落ちが発生します。リプロジェクションも追従できなくなっており、酔いやすいので注意です。

どちらもレンズの端に歪みが生じていたり、何らかのタイミングで 2D アプリのウィンドウが表示されたりと専用機と比べるとどうしてもあらが目立つ印象です。今回テストした範囲では UserLAnd/termux で VR を使うメリットはありませんでした。Pixel 3 XL や Galaxy S9、Mirage Solo ではまた違った結果になるかもしれません。

関連ページ
Android の上の開発環境
HMD VR / AR Device spec 一覧

関連エントリ
Oculus Quest も文章書き&開発マシンにする
Android UserLAnd の更新と VNC 画面設定
UserLAnd : Android 9.0 で Ctrl + SPACE を使えるようにする
Android Termux で日本語入力を行う / UserLAnd との併用
Android 9.0 と Bluetooth Keyboard による日本語入力
Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Oculus Go は VR ができる新しい携帯ゲーム機

Oculus Quest も文章書き&開発マシンにする

Oculus Go に続いて上位機種 Oculus Quest が登場しました。両手のモーションコントローラ含めてポジショントラッキングに対応しており、スタンドアロンながら 6.6DoF のフルスペック VR になっています。

Oculus Quest にも Oculus TV が入っており、以前作成した TVLauncherGo がそのまま使えるようです。Oculus Go と同じように Oculus TV 上で Android アプリが動きました。

・設定アイコンから Bluetooth Keyboard の接続
・同じく設定から物理キーボードのキーレイアウト変更
・UserLAnd を使って Linux をインストール
・VNC アプリの起動 (制限あり)

などなど一通りうまくいっています。UserLAnd が動けば、開発環境や日本語入力環境の構築ができます。

つまり Oculus Quest と Bluetooth Keyboard を持ち歩けばどこでも大画面で作業に没頭できるようになるわけです。

Oculus Quest + UserLAnd + Ubuntu + bVNC

ちなみに開発環境には Termux も併用しています。Termux 自体は TVLauncherGo がなくても動きます。(併用する理由はこちら)

● Oculus Quest の速度

Oculus Go よりも性能が上がってだいぶ快適になりました。下記の表は Termux 上でのコンパイル速度の比較です。Quest は Go よりも 2.6 倍速くなっています。

VR あり VR利用 SoC RAM Thread Time
Daydream + Pixel 3 あり Snapdragon 845 4GB 8 72
Oculus Quest あり Snapdragon 835 4GB 8 105
Oculus Go あり Snapdragon 821 3GB 4 275
Daydream + ZenFone AR あり Snapdragon 821 8GB 4 349
VR なし VR利用 SoC RAM Thread Time
Pixel 3 無し Snapdragon 845 4GB 8 32
Essential Phone 無し Snapdragon 835 4GB 8 38
ZenFone 3 Max ZC553KL 無し Snapdragon 430 3GB 8 100
ZenFone AR ZS571KL 無し Snapdragon 821 8GB 4 111
Nexus 5X 無し Snapdragon 808 2GB 6 135

・Time の単位は秒。値が小さい方が高速。

当然ながら VR を使わない状態だともっと高速です。同じ SoC を搭載した機種同士で比べると、VR 空間上でのコンパイルは通常の状態より 2.5 倍前後遅くなっています。それだけ VR の描画は負荷が高いわけです。

Quest の結果は VR 無しの ZenFone AR (Snapdragon 821) や ZenFone 3 Max (Snapdragon 430) とほぼ同じくらいになっています。VR 上で素の Snapdragon 821 や Snapdragon 430 が動いていると思えば速度のイメージが掴めるのではないでしょうか。

比較用に Daydream も試しましたが、Snapdragon 845 の Pixel 3 は速いものの画面解像度が低く実用には厳しいものがありました。XL ならちょうど良いのかもしれません。Zenfone AR はビルド中、発熱のためか処理落ちが多く不安定でした。やはり専用機である Oculus Go や Quest は解像度が高く画面端の歪みもなく安定しています。

●持ち歩きやすさ

可搬性に関しては Go の方が上です。性能が上がりサイズと重量が若干増えたのもありますが、バンドがしっかりした作りになったため Go のように折り畳めなくなっています。また場所が変わると毎回ガーディアン設定が出てくるので、使うまでにひと手間かかります。

Oculus Go と Oculus Quest

●ポジショントラッキング

ポジショントラッキングのおかげで VR 内での見え方はかなり自然になりました。スクリーンに近づいたり離れたりできるので、文字が小さくて見えにくい場合も近寄れば読むことができます。ただしガーディアン範囲を抜けると外部カメラ映像に切り替わってしまうので、大きく動く場合はルームスケールの範囲設定が必要。

●環境設定など

Go とはコントローラが違いますが使うボタンは限られています。Oculus TV で前の画面に戻るには (B) ボタンを使います。

Oculus TV で前の画面に戻る操作
・Oculus Go : メニューボタン
・Oculus Quest : 右コントローラの (B) ボタン

(1) TVLauncherGo の apk を install

(2) Oculus TV → TVLauncherGo → 設定アイコン → Bluetooth
 ・ Bluetooth キーボードを接続
 ・ 必要に応じてレイアウト選択
  ・ 設定の言語→キーボードレイアウト
  ・ (「106/109106/109ハードウェアキーボード配列変更 (+親指Ctrl) [日本語配列]」が使えます。

(3) UserLAnd の apk を install

(3) Oculus TV → TVLauncherGo → UserLAnd
 ・Linux install (SSH を選択)

下記の記事も参考にしてください。
Oculus Go を文章書き&開発マシンにする
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた

● VNC を使う場合

UserLAnd が bVNC Free 以外の client にも対応したため手順が若干変わりました。Real VNC Viewer を使う場合でも UserLAnd が直接呼び出してしまうため、一旦停止させてから Oculus TV 経由で起動する必要があります。そのかわり複数の VNC client を入れることで起動をキャンセルできます。

以下は「環境設定など」の続きです。

(1) Real VNC Viewer の apk を install

(2) Oculus TV → TVLauncherGo → UserLAnd
 ・ Linux Distribution 名長押しで VNC に変更

(3) Linux を起動すると画面真っ黒でロード待ちになるので、右コントローラの Oculus Button で戻る
 ・Real VNC Viewer は大丈夫ですが、bVNC だとここで戻れないので再起動になります。

(4) 右コントローラの (B) ボタンで TVLauncerGo に戻り強制停止する
 ・VNC Viewer アイコン長押しで「アプリ情報」の画面を開く (設定→アプリ→VNC Viewer でも構わない)
 ・VNC Viewer アプリを強制停止する (起動した状態を一旦クリアするため)

(5) TVLauncerGo に戻る

(6) あらためて VNC Viewer を起動し、下記の設定で接続する
  ・ HOST: 127.0.0.1
  ・ PORT: 5951

(7) VNC 接続時にパスワードを聞かれるので、UserLAnd の Linux アカウント作成時に設定した VNC Password を入れる

最初は画面が Native 解像度になっているので ~/.vncrc を書き換えて調節してください。1280×720 推奨。

UserLAnd の日本語環境設定についてはこちらを参考にしてください。

なお Real VNC Viewer は比較的安全に起動できますが、モーションコントローラでのマウス操作には難があります。ウィンドウなどドラッグ移動できないのと、ちょっとしたブレでタスクバーのメニューが開かないなど制限があります。少々手間がかかりますが bVNC を使う方法があります。

● VNC を使う場合 (bVNC)

UserLAnd からの呼び出しをキャンセルするために、Real VNC Viewer と bVNC の両方を install しておく必要があります。必ず Bluetooth Keyboard を接続しておいてください。

(1) Real VNC Viewer の apk を install

(2) bVNC の apk を install

(3) Oculus TV → TVLauncherGo → UserLAnd
 ・ Linux Distribution 名長押しで VNC に変更

(4) Linux を起動すると VNC client 選択画面になるので、Bluetooth Keyboard の [ESC] を押してキャンセル

(5) 右コントローラの (B) ボタンで TVLauncerGo に戻る

(6) TVLauncerGo から bVNC を起動

(7) 下記の設定で接続する。右上の [CONNECT] を押す
  ・ HOST: 127.0.0.1
  ・ PORT: 5951
  ・ Linux アカウント作成時に入力したユーザー名とパスワード

(8) つながったら bVNC の設定メニューから 「Input Mode」 → 「Direct, Hold Pan」 を選択する

これでモーションコントローラだけでウィンドウ操作もできるようになります。タスクバーのメニューも簡単に開きます。

Oculus TV を経由せずに UserLAnd が直接 bVNC を起動してしまうと操作できなくなるので注意してください。

関連ページ
Android の上の開発環境
HMD VR / AR Device spec 一覧

関連エントリ
Android UserLAnd の更新と VNC 画面設定
UserLAnd : Android 9.0 で Ctrl + SPACE を使えるようにする
Android Termux で日本語入力を行う / UserLAnd との併用
Android 9.0 と Bluetooth Keyboard による日本語入力
Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
Oculus Go を文章書き&開発マシンにする
UserLAnd とブラウザ
Android 上の開発環境と UserLAnd
OS の中の Linux (WSL/Chrome OS/Android UserLAnd)
ARM CPU 上の開発環境とコンパイル時間の比較 (2) Pixel 3/UserLAnd
Oculus Go は VR ができる新しい携帯ゲーム機

VR HMD の分類表

VR 機器の種類が増えたのでわかっている範囲で大まかに分類してみました。

(1) 頭 ポジショントラッキングあり 回転のみ
(2) 手 ポジショントラッキングあり 回転のみ
(3) 外部に PC (PS4) が必要 スタンドアロン (Mobile SoC)
(4) 外部センサーあり 外部にセンサーを設置する必要なし
Oculus Rift Quest Go
HTC Vive Vive/Pro (*1) Cosmos Focus Plus Focus
Sony PSVR
Samsung Odyssey GearVR
MS Windows MR
Google Mirage Solo Daydream

(1)/(2) ポジショントラッキングがあるかどうか

VR 空間を自由に歩く Room Scale に対応するにはポジショントラッキングが必要です。外部にトラッキング用のセンサー設置が必要なタイプと、内蔵のカメラだけでトラッキングできるインサイドアウト方式の 2種類があります。

(3) PC が必要かどうか

外部に PC が必要なタイプはモニタ相当です。ケーブルで Host PC (PS4) に接続する必要があります。性能が高く画質も良いですがプレイ中はケーブルがじゃまになりがち。

スタンドアロンタイプはケーブルが不要で PC と繋がなくても単体で使うことができます。手軽に使える半面、描画などの処理能力はスマートフォン相当になります。

(4) 外部にセンサーの設置が必要かどうか

「外部センサーあり」の場合は、トラッキングためにカメラなどのセンサーを部屋に設置しておく必要があります。HMD だけでなくセンサーのためのケーブルも必要で、事前の準備に少々手間がかかります。

(*1) HTC Vive / HTC Vive Pro は同じグループの中でも少々別格です。部屋にベースステーションの設置が必要ですが厳密にはセンサーではなく、どちらかといえばマーカーに近いものです。そのため PC とのケーブル接続が不要で、バックパック型 PC を使うとスタンドアロンタイプのようにも使えます。またポジショントラッキング対応のコントローラを 10個以上同時に利用することができます。手だけでなく足など全身のトラッキングも実現できます。

関連ページ
HMD VR / AR Device spec 一覧

関連エントリ
Gear VR のヘッドセットの種類のまとめ
各種 VR HMD と Volume 調節の仕方まとめ
VR で物が大きく見えたり小さく見えたりするわけ
Oculus Go は VR ができる新しい携帯ゲーム機
Oculus Go と VR デバイスの種類
Windows MR で Fallout 4 VR (Dell Visor)
Google Daydream View (2017) 新型
Windows Mixed Reality Dell Visor (VR HMD)
ASUS ZenFone AR (Daydream/Tango)
Gear VR Controller
HTC Vive のセットアップと PC スペック、遅い PC で動くかどうか
HTC Vive (VR ヘッドマウントディスプレイ) の接続

Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた

HTC Vive や Oculus Rift など、PC 向け VR HMD ではモニタ画面にもゲームの映像が出ます。周囲からも VR 内部がどんな状態なのかある程度は見えるようになっています。モバイルやスタンドアロンタイプの VR HMD だと本人にしかわからないので、デモなど人に見せたい場合は何らかの手段が必要です。

Android に標準で用意されている Chromecast や Miracast を使うのが簡単です。Oculus Go の場合もシェアボタンからリンクされているスマートフォンや Chromecast に出力できるようです。

下記は Daydream を Miracast で出力したものです。モニタ直撮り。使用した Miracast アダプタは Microsft Wireless Display Adapter

Miracast

また Windows 10 には Miracast 機能があるので、アダプタがなくても Wi-Fi があれば直接 PC に表示することができます。

(1) 設定→システム→この PC へプロジェクション

 「セキュリティで保護されたネットワーク上のどこでも利用可能」

(2) スタートメニューから「接続」というアプリを起動。

この状態で HDMI の Miracast アダプタと同じように繋がります。なおこの PC は Wi-Fi を内蔵していますが LAN には有線接続しました。(Wi-Fi は Miracast 専用)

↓実際に ZenFone AR + Daydream でつないだところ。(Pixel 3 は Miracast 非対応でした)

Windows10 Miracast

他にもアプリを使う方法があります。様々なサイトで Vysor というソフトが紹介されていました。このソフトは画面のミラーリングだけでなく PC から操作もできるようです。

ただし接続に adb を使っており開発者モードを有効にする必要があります。ワイヤレス接続も adb の tcp 接続を使っているようです。

VR では PC からの操作は不要なのと、adb を使うなら python で作れそうな気がしたので作ってみました。

GitHub: android_mirrortool

下記は android_mirrortool を使って Oculus Go を Windows PC にミラーリングしたところです。

android_mirrortool

Android には画面を録画する機能があります。それを adb 経由でストリーミングしているだけです。python の opencv を使っています。音は出ません。Windows と Linux で動きます。

● Windows の場合

(1) Android SDK を install し adb.exe にパスを張っておく

  AndroidStudio をそのまま install した場合はこの辺です。
  C:/Users/<USERNAME>/AppData/Local/Android/sdk/platform-tools

(2) python 3.x を install

(3) パッケージ pywin32 と opencv-python を install する

pip をを使ってインストールする場合

pip3 install pywin32
pip3 install opencv-python

●使い方

(1) 開発者モードにして adb でつないでおきます。

(2) 「 python android_mirror.py 」を実行します。

画面に動きがないと Mirror Window が表示されないので最初はいろいろ操作して画面を動かしてみてください。終了は ESC キーです。

デフォルトで Full HD になります。VR が処理落ちする場合、または Wi-Fi で adb 接続する場合はレートやサイズを落としてください。

python android_mirror.py --bitrate 4m --size 1280x720

●Linux の場合

下記の操作は Debian 系

$ sudo apt install python3 python3-pip
$ pip3 install opencv-python
$ sudo apt install adb

開発者モードにして adb でつながったら

$ python3 android_mirror.py

●スクリーンキャプチャ

-c をつけるとスクリーンキャプチャになります。png で保存します。

python android_mirror.py -c

関連エントリ
Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
Oculus Go を文章書き&開発マシンにする
Gear VR のヘッドセットの種類のまとめ
Oculus Go は VR ができる新しい携帯ゲーム機