Snapdragon 845 の Kryo 385 (Cortex-A75) は ARMv8.2 の拡張命令である半精度浮動小数点演算に対応しています。半精度浮動小数点数は HDR テクスチャなど GPU ではおなじみで、符号 1bit 指数部 5bit 仮数部 10bit の合計 16bit で表現されます。
CPU でもこれまで単精度と半精度 (fp32 と fp16) の相互変換が可能でした。X86/X64 では F16C 命令 (vcvtph2ps/vcvtps2ph) がありますし、ARM では以前試したように Cortex-A9 以降で変換命令が追加されています。変換だけなのでメモリアクセスは速くなるものの演算速度は特に変わりません。
ARMv8.2 ではオプションの拡張命令 FPHP, SIMDHP が新設され、対応していれば 16bit 半精度のまま演算ができるようになりました。128bit の SIMD(NEON) なら同時に 8個の積和演算を行うので、ピークの演算速度は単精度の倍になる計算です。
新しい vfpbench で対応したので実際に計測してみたのがこちらです。8 core で 8 thread 並列時の値です。
・GFLOPS の値が大きい方が高速
予想通りほぼ fp32 の倍の値になっています。なお big/little core を個別計測した結果の合計なので、全 core 同時に走らせた場合はもう少し数値は下がるものと思われます。big, little それぞれの値を表にすると下記の通り。
Cortex-A75 の FP/SIMD pipe は 2本ありますが、命令単位で調べると 64bit (4h) 時は IPC=2、128bit (8h) 時は IPC=1 なのでそれぞれの pipe は 64bit であることがわかります。
Deep Learning 用の命令としては他にも 8bit 積和演算である Dot Product (dotprod) 拡張命令があります。これも ARMv8.2A のオプションで、下記ような整数 Int8 の 4乗算と 4加算を 4並列で行うことができます。AVX512VNNI や GeForce RTX (Turing) などの Int8 命令によく似ています。
fp16 の倍なので計算上は 500 GOPS を超えるのですが、残念ながら Snapdragon 845 の Kryo 385 では対応していませんでした。
詳細なログはこちら
・Pixel 3 Snapdragon 845 Kryo 385 2.8GHz x4 + 1.77GHz x4 ARM64 (AArch64) Android 9.0
vfpbench のログ(一部)
関連ページ
・VFP Benchmark Log 計測結果まとめ
関連エントリ
・Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
・Snapdragon 845 の浮動小数点演算速度
・ARM CPU の浮動小数点演算能力まとめ
・HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
・iPhone SE, Apple A9 の浮動小数点演算速度
・ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
・iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・ARM cpu vfp の種類と fp16 命令を使ってみる
CPU でもこれまで単精度と半精度 (fp32 と fp16) の相互変換が可能でした。X86/X64 では F16C 命令 (vcvtph2ps/vcvtps2ph) がありますし、ARM では以前試したように Cortex-A9 以降で変換命令が追加されています。変換だけなのでメモリアクセスは速くなるものの演算速度は特に変わりません。
ARMv8.2 ではオプションの拡張命令 FPHP, SIMDHP が新設され、対応していれば 16bit 半精度のまま演算ができるようになりました。128bit の SIMD(NEON) なら同時に 8個の積和演算を行うので、ピークの演算速度は単精度の倍になる計算です。
fmla v0.2d, v1.2d, v2.2d ; 倍精度 64bit x2 fmla v0.4s, v1.4s, v2.4s ; 単精度 32bit x4 fmla v0.8h, v1.8h, v2.8h ; 半精度 16bit x8
新しい vfpbench で対応したので実際に計測してみたのがこちらです。8 core で 8 thread 並列時の値です。
half fp16 | single fp32 | double fp64 | |
---|---|---|---|
Snapdragon 845 ARMv8.2A | 277.7 GFLOPS | 138.4 GFLOPS | 68.7 GFLOPS |
Snapdragon 835 ARMv8.0A | -- GFLOPS | 129.5 GFLOPS | 67.3 GFLOPS |
・GFLOPS の値が大きい方が高速
予想通りほぼ fp32 の倍の値になっています。なお big/little core を個別計測した結果の合計なので、全 core 同時に走らせた場合はもう少し数値は下がるものと思われます。big, little それぞれの値を表にすると下記の通り。
half fp16 | singlel fp32 | double fp64 | ||||
---|---|---|---|---|---|---|
little | big | little | big | little | big | |
Snapdragon 845 (1.77GHz + 2.80GHz) | 108.9 | 168.8 | 54.0 | 84.4 | 27.3 | 41.5 |
Snapdragon 835 (1.90GHz + 2.45GHz) | -- | -- | 59.3 | 70.2 | 29.6 | 37.7 |
Cortex-A75 の FP/SIMD pipe は 2本ありますが、命令単位で調べると 64bit (4h) 時は IPC=2、128bit (8h) 時は IPC=1 なのでそれぞれの pipe は 64bit であることがわかります。
Deep Learning 用の命令としては他にも 8bit 積和演算である Dot Product (dotprod) 拡張命令があります。これも ARMv8.2A のオプションで、下記ような整数 Int8 の 4乗算と 4加算を 4並列で行うことができます。AVX512VNNI や GeForce RTX (Turing) などの Int8 命令によく似ています。
udot v0.4s, v1.16b, v2.16b sdot v0.4s, v1.16b, v2.16b 32bit += 8bit * 8bit + 8bit * 8bit + 8bit * 8bit + 8bit * 8bit 32bit += 8bit * 8bit + 8bit * 8bit + 8bit * 8bit + 8bit * 8bit 32bit += 8bit * 8bit + 8bit * 8bit + 8bit * 8bit + 8bit * 8bit 32bit += 8bit * 8bit + 8bit * 8bit + 8bit * 8bit + 8bit * 8bit
fp16 の倍なので計算上は 500 GOPS を超えるのですが、残念ながら Snapdragon 845 の Kryo 385 では対応していませんでした。
詳細なログはこちら
・Pixel 3 Snapdragon 845 Kryo 385 2.8GHz x4 + 1.77GHz x4 ARM64 (AArch64) Android 9.0
vfpbench のログ(一部)
ARCH: ARMv8.2A FPU : ASIMD(AArch64 NEON) FPHP ASIMDHP Name: Qualcomm Technologies, Inc SDM845 CPU Thread: 8 CPU Core : 8 CPU Group : 2 Group 0: Thread= 4 Clock=1.766400 GHz (mask:f) Group 1: Thread= 4 Clock=2.803200 GHz (mask:f0) NEON : yes FMA : yes FPHP : yes SIMDHP: yes Total: SingleThread HP max: 71.675 GFLOPS SingleThread SP max: 35.892 GFLOPS SingleThread DP max: 17.940 GFLOPS MultiThread HP max: 277.711 GFLOPS MultiThread SP max: 138.445 GFLOPS MultiThread DP max: 68.745 GFLOPS Group 0: Thread=4 Clock=1.766400 GHz (mask:f) SingleThread HP max: 27.426 GFLOPS SingleThread SP max: 13.683 GFLOPS SingleThread DP max: 6.851 GFLOPS MultiThread HP max: 108.928 GFLOPS MultiThread SP max: 54.046 GFLOPS MultiThread DP max: 27.273 GFLOPS Group 1: Thread=4 Clock=2.803200 GHz (mask:f0) SingleThread HP max: 44.248 GFLOPS SingleThread SP max: 22.209 GFLOPS SingleThread DP max: 11.090 GFLOPS MultiThread HP max: 168.783 GFLOPS MultiThread SP max: 84.400 GFLOPS MultiThread DP max: 41.472 GFLOPS
関連ページ
・VFP Benchmark Log 計測結果まとめ
関連エントリ
・Snapdragon 835 と 845 のコンパイル時間の比較&浮動小数点演算能力
・Snapdragon 845 の浮動小数点演算速度
・ARM CPU の浮動小数点演算能力まとめ
・HTC 10 Snapdragon 820 Kyro の浮動小数点演算能力
・iPhone SE, Apple A9 の浮動小数点演算速度
・ARM Cortex-A53 の浮動小数点演算速度とコンパイル時間の比較
・iPod touch 6 の浮動小数点演算速度は Core 2 Duo ライン超え
・iPad Air 2 (Apple A8X) の浮動小数点演算能力
・ARM cpu vfp の種類と fp16 命令を使ってみる
2019/06/08
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 ソフトが動きそうですが、今のところは対応していないようです。
ちなみに Daydream と Vive の場合は下記の通り。
より詳しいスペックはこちらに載せています。
・HMD VR / AR Device spec 一覧
関連エントリ
・Oculus Quest も文章書き&開発マシンにする
・Android/Oculus Go/Daydream の画面をミラーリングするツールを作ってみた
・Oculus Go で一般 Android アプリを起動できるランチャーを作ってみた
・Oculus Go を文章書き&開発マシンにする
・VR で物が大きく見えたり小さく見えたりするわけ
・Oculus Go は VR ができる新しい携帯ゲーム機
要するに、これまで 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 ができる新しい携帯ゲーム機
2019/06/07
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 を入れて起動する
(5) Android の Chrome ブラウザから "http://localhost:6080/vnc.html" を開く
(6) noVNC の画面になるので "Connect" を押して VNC password を入れると Desktop が表示される。
(7) Menu の設定から Scaling Mode を "Local Scaling" に変更するとデスクトップ全体になります。
noVNC を開いたところ

Android の Chrome 内で UserLAnd で Linux (Ubuntu)

●VR 上での接続
Daydream View を使います。
(1) VR 上でライブラリのアプリ一覧から Chrome ブラウザを選びます。
(2) あとは同じように "http://localhost:6080/vnc.html" を開くだけです。
Daydream の Chrome でも UserLAnd で Linux (Ubuntu)

●速度面
前回 も載せましたが、さらに VR なしの noVNC のデータを追加しました。UserLAnd 上から Termux に ssh localhost -p 8022 で繋いでビルドを行っています。
・Time はビルドにかかった時間で単位は秒。Time の値が小さい方が高速。
●画面など
デスクトップウィンドウのような細かい文字だと Pixel 3 の解像度 (2180x1080) ではかなり厳しいことがわかりました。携帯できる大画面モニタとして使えると便利かと思いましたが、全体的にぼやけており逆に画面が狭くなったように感じます。
ZenFone AR は解像度 (2560x1440) が高い反面、ビルドのような高負荷な状態が続くと処理落ちが発生します。リプロジェクションも追従できなくなっており、酔いやすいので注意です。
どちらもレンズの端に歪みが生じていたり、何らかのタイミングで 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 ができる新しい携帯ゲーム機
●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 を開いたところ

Android の Chrome 内で UserLAnd で Linux (Ubuntu)

●VR 上での接続
Daydream View を使います。
(1) VR 上でライブラリのアプリ一覧から Chrome ブラウザを選びます。
(2) あとは同じように "http://localhost:6080/vnc.html" を開くだけです。
Daydream の Chrome でも UserLAnd で Linux (Ubuntu)

●速度面
前回 も載せましたが、さらに 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 の解像度 (2180x1080) ではかなり厳しいことがわかりました。携帯できる大画面モニタとして使えると便利かと思いましたが、全体的にぼやけており逆に画面が狭くなったように感じます。
ZenFone AR は解像度 (2560x1440) が高い反面、ビルドのような高負荷な状態が続くと処理落ちが発生します。リプロジェクションも追従できなくなっており、酔いやすいので注意です。
どちらもレンズの端に歪みが生じていたり、何らかのタイミングで 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 ができる新しい携帯ゲーム機
2019/06/06
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 を持ち歩けばどこでも大画面で作業に没頭できるようになるわけです。

ちなみに開発環境には Termux も併用しています。Termux 自体は TVLauncherGo がなくても動きます。(併用する理由はこちら)
● Oculus Quest の速度
Oculus Go よりも性能が上がってだいぶ快適になりました。下記の表は Termux 上でのコンパイル速度の比較です。Quest は Go よりも 2.6 倍速くなっています。
・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 のように折り畳めなくなっています。また場所が変わると毎回ガーディアン設定が出てくるので、使うまでにひと手間かかります。

●ポジショントラッキング
ポジショントラッキングのおかげで 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 を書き換えて調節してください。1280x720 推奨。
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 ができる新しい携帯ゲーム機
Oculus Quest にも Oculus TV が入っており、以前作成した TVLauncherGo がそのまま使えるようです。Oculus Go と同じように Oculus TV 上で Android アプリが動きました。
・設定アイコンから Bluetooth Keyboard の接続
・同じく設定から物理キーボードのキーレイアウト変更
・UserLAnd を使って Linux をインストール
・VNC アプリの起動 (制限あり)
などなど一通りうまくいっています。UserLAnd が動けば、開発環境や日本語入力環境の構築ができます。
つまり Oculus Quest と Bluetooth Keyboard を持ち歩けばどこでも大画面で作業に没頭できるようになるわけです。

ちなみに開発環境には 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 のように折り畳めなくなっています。また場所が変わると毎回ガーディアン設定が出てくるので、使うまでにひと手間かかります。

●ポジショントラッキング
ポジショントラッキングのおかげで 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 を書き換えて調節してください。1280x720 推奨。
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 ができる新しい携帯ゲーム機