東京ゲームショウ 2015, 2016 から見る VR 業界の急速な成長

東京ゲームショウ 2016 に行ってきた。東京ゲームショウ 2015 と 2016 の VR 業界の差分を自分が感じた範囲で紹介しようと思う。

東京ゲームショウ 2015 の VR

2015 年も VR 系の展示はあったものの、ハコスコなどで 3D 空間を表示してジャイロセンサーで頭の動きをトラッキングしてカメラの回転を反映させている程度だった。 Oculus も展示していたようだが自分が見ていなかったのでここの部分は不明。

2015 年の VR は 3D の CG をどのように表示するかという部分にフォーカスされていたように思う。また、2015 年は個別のゲームで VR 対応しているものを展示しており、展示場所が点在していた印象。

東京ゲームショウ 2016 の VR

今年のゲームショウではまず、初日の基調講演が “VRマーケットの展望” から始まり、 VR 専用の展示ゾーン (9-11) が大きく設けられていた。また PSVR や HTC Vive, FOVE などのメジャーどころが出展しており、それぞれの整理券がすぐに完売していた。展示エリアに占める VR の割合が大幅に増えた。

展示の中身も大きく変わり、今年は VR 空間内で 3D 空間を表示するのに加え、ユーザーのインプット、フィードバック方法を変えるアプローチが多くされていた。以下に自分が試せたものを紹介していく。

Rez Infinite VR

電気刺激を様々箇所に受ける独自のスーツ (Synesthesia Suit) を着て体験するアプリケーション “Rez Infinite VR” が出展しており、運良く体験することができた。

Synesthesia Suit

音楽に合わせて微弱な電気刺激が与えられ、ダメージを受けた時に全身に電気刺激が与えれるなど、非現実的な空間だが非常にリアルに感じた。二人がかりで装着が非常に大変そうで申し訳ない気持ちになったが、ゲームショウで体験した中で一番面白いアプリケーションだった。

HTC Vive

既にご存知の方も多いと思うが、空間内移動を可能にする HMD である HTC Vive が出た。移動できる範囲は最大で 5m 四方程度。 5m 内で移動が完結できるパターンは少ないので、それぞれのアプリケーションでは The Lab のように空間内でワープできる実装が施されている。

3DRudder

ルンバのような形の足で操作するタイプのコントローラー 3DRudder が出展されていた。足の力のかけ方で移動方法をコントロールできる。

FUTURETOWN

FUTURETOWN では馬乗り型、バイク型、足で操作するタイプのコントローラーを展示していた。コントローラーでありながらフィードバックも同時に受けることができる。VR 空間内でカメラを勝手に移動するのは VR 酔いにつながって良くないとされているが、ユーザーのインプットとフィードバックを両方得られるコントローラーなので、移動時にも自然な映像に見えた。

馬乗り型のアプリケーションは試さなかったが鳥に乗って空を飛ぶシーンがあり、それが実際どれくらい自然に感じるのか試してみたかった。

FOVE

視線をトラッキングするタイプの HMD。 目の動きで VR 空間内のモノを操作するアプリケーションが可能になる。最近 FOVE 以外でも Oculus などに装着できるタイプの視線トラッキングカメラが販売されており、非常に楽しみな領域。

他にも

他にも非常に面白そうな展示があったが、展示エリアに置いてある HMD の台数と人の数のバランスが合わないよくある問題で、どこも行列になっていて半分も試せなかった。

まとめ

ゲームショウ 2015, 2016 の一年間で、ゲームにおける VR が非常に大きく成長していると感じた。見る、聞くだけでなく、動くや感じるなどの感覚が加わり、見ることに対してもそれに対するフィードバックが得られるようになった。

Oculus Remote が認識されない時の対処法(Oculus コントローラーのペアリング)

Oculus をインストールして Xbox コントローラーで操作できるようになったが、Oculus Remote のペアリングのフローを飛ばしてしまったのか、Oculus Remote が認識されなかったので別途設定した。

同じように困っている方のために記事を残しておく。

Oculus Remote のペアリング方法

必要な作業を以下に記述していく。
公式のサポートはこちら:Oculus 公式サポート

Oculus アプリを起動
Oculus アプリを起動。ギアマーク > Settings を選択

Settings から Devices を選択
Settings から Devices タブを選択(自分はペアリング完了しているので、ここで既に ON になっていることはお気になさらず)

Configure Rift から Add Remote を選択
Configure Rift > Add Remote を選択

ペアリングの設定画面
ペアリングの設定画面が開くので、指示の通り Remote のボタンを押す

Remote pairing
こうなって

Remote pairing 2
こうなるのでまたボタンを押して

ペアリング完了
ペアリング完了。

Devices Remote
Devices タブで Remote が ON になっていることが確認できれば OK。

Unity で VR モード時にカメラの位置を固定する

Unity で VR モードにして Oculus Rift, HTC Vive などのヘッドマウントディスプレイでプレイすると、自動的に hmd とセンサーとの距離からカメラの位置が動く。

これは、 Unity 公式ドキュメント:VR 概要 の “カメラを理解する” のセクションに記載されている。

カメラの Transform は、ヘッドトラッキングされた姿勢で上書きされます。

カメラの位置 (position) は固定して回転 (rotation) のみ有効にしたい場合がある。そのためには、カメラの親となるゲームオブジェクトにカメラの動きを無効化するための処理を加える必要がある。

もしもカメラを動かしたい場合は、別のゲームオブジェクトの子としてアタッチし、そのゲームオブジェクトのルートを動かしてください。

Unity の VR モードでカメラの位置を固定してみる

Unity VR モードのカメラを固定

今回は CameraController という空のゲームオブジェクトを配置し、その中に Main Camera を挿入した。CameraController にスクリプト CameraController.cs を Add Component した状態。

スクリプトの中身は以下のようにする。

CameraController.cs

using UnityEngine;
using UnityEngine.VR;
using System.Collections;

public class CameraController : MonoBehaviour {

void Update () {
    // TODO: ここで固定したい位置があれば指定しておく
    Vector3 basePos = Vector3.zero;

    // VR.InputTracking から hmd の位置を取得
    Vector3 trackingPos =
            InputTracking.GetLocalPosition(VRNode.CenterEye);

    // CameraController 自体の rotation が
    // zero でなければ rotation を掛ける
    // trackingPosition = trackingPos * transform.rotation;

    // 固定したい位置から hmd の位置を
    // 差し引いて実質 hmd の移動を無効化する
    transform.position = basePos - trackingPos;
}

}

CameraController の position に、固定したい位置から VR.InputTracking のポジションを引いた値を代入している。 Update メソッドに処理を書くことで常に hmd の動きを無効化するようにしているが、初期位置のみ固定したい場合は Start メソッド内に処理を移動すればオッケー。

また、ローテーションを無効化したい場合も同じように固定したい rotaiton との減算を行えば大丈夫。

補足

位置固定はできるが、実際にこれで Oculus, Vive などでプレイすると実際の動きとの差で VR 酔いを起こしてしまうかもしれない。自分の場合は少し気持ち悪さを感じたので、本番のプロジェクトでは導入しない予定。

特定のケースに限定して、同しようもない場合にこのような実装にしたほうが良いと思う。また、 Unity で位置やローテーションの無効化をサポートしそうな気もするので最新情報をキャッチしてから組み込んだほうが良いかも。既にあったりしたら教えてください。