VRコントローラーによるVR空間内での行動の実装

目次

1.はじめに

 VR(Virtual Reality)とは仮想現実とも呼ばれ、人間の感覚器官に働きかけることで、人工的に構成された環境を現実のように感じさせる技術である。今日のVRは、unityといったゲームエンジンや、HTC社が販売するHTC ViveやOculus社が販売するOculus Riftといった市販されているヘッドマウンドディスプレイを用いることで、VRコンテンツを開発することができるようになった。VRコンテンツでは、使用者がVR空間内を自由に行動し、VR空間を感覚的に体験することによって成立している。そのため、VRコンテンツで得る体験の本質によって、使用者に提供するVR空間の形態や、フィードバックされる感覚を変化させ、体験の質を高めることが重要である。また、体験の質を向上させる最も簡易的な方法として、臨場感や現実感を向上させることが挙げられる。[1] [2]  また、ソーシャルVRコンテンツ内でのアバタの継続的な体験は、自身の身体イメージを変化させることができ、VR空間内で使用するアバタは使用を続けるとアバタを通じた臨場感や自身の身体であると感じる身体所有感が向上する。[3]

 本実験ではVR空間の生成環境及び手法を確立させるための調査と、3DCGソフトウェアであるBlenderで作成した3Dモデルを使用したVR空間をUnityで生成し、VR空間内を自由に移動することができる、VR空間のサンプルを作成することを目的とする。

2.関連技術

2.1.VR(virtual reality)

2.1.1.VRの構成

 VRは主に出力システム、シミュレーションシステム、入力システムの3つによって構成される。出力システムとは視覚や触覚、聴覚といった感覚情報をシミュレーションシステムから使用者に提示するための要素である。VRにおいて重要である、あたかも自分がVR空間内に存在しているかのように感じさせる感覚を作り出すために重要となる要素である。入力システムとは使用者の動作を介してシミュレーションシステムに入力するための要素である。使用者に提示されたVR空間を、使用者の行動によってリアルタイムで操作するための要素である。シミュレーションシステムはVR空間を構成するために存在する要素である。シミュレーションシステムでは、VR空間を構成し、VR空間内に存在する物体の物理現象、使用者によって操作されたVR空間内に存在する物体の物理的挙動をシミュレートする。  これら3つの要素が組み合わさり、出力システムから提示される感覚と入力システムによるVR空間への操作が構成された時、現実感及び臨場感が生まれる。

 図1に示したVRの構成図は、使用者が入力システムを通じて、シミュレーションシステムで構成されているVR世界を操作し、シミュレーションシステムが出力システムを通じてVR空間を、使用者の感覚に提示されている様子を表したものである。また、代表的な入力システムの例としてコントローラー、出力システムの例としてディスプレイが、それぞれ挙げられる。

図1 VRの構成

図1 VRの構成

2.1.2.VR空間の定義

 使用者に提供されるVR空間は、使用者にとって自然な3次元空間であり、使用者がその空間の中でリアルタイムに自由に行動ができ、VR空間を使用している使用者の感覚が矛盾なく3次元空間に入り込んだ状態となっている必要がある。これらはVRの3要素であり、それぞれ、3次元空間、相互作用性、自己投射性とも呼ばれている。理想的なVRとは、この3要素全てを兼ね備えたものである。

2.1.3.VR空間の構成

 VR空間内では、使用者の操作に応じて、予め構成されているVR空間が変化し、変化した後のVR空間を映像や音などによって使用者に提示する事によってVR空間を体感することができる。構成されるVR空間や、VR空間内に存在する物体の物理的挙動、使用者の操作によるVR空間の変化度合いはプログラムされた範囲でのシミュレーションによって決定される。つまり、VR空間を構築することによって、 不要とされる要因を排除しつつ、実世界での体験と同質の体験を得ることが可能となる。  VR空間を構成するためには、使用者の操作を入力システムからシミュレーションシステムへ入力し、シミュレーションシステムが自然な3次元空間と、VR空間内に存在する物体の物理的挙動、受け取った入力を反映させたシミュレーションを行うことでVR空間を生成し、映像や音などの感覚情報を出力システムから使用者に提示するまでをプログラムとして記述することによって成立する。[4]

2.2.Unity

 Unityはゲームを開発する上での統合開発環境であり、一般的にはゲームエンジンと呼ばれている。Unityの特徴として、C#やJavaScriptを利用してスプリクトを記述することによって、独自のShaderや挙動を記述することができる他、物理演算の付与、3Dキャラクターのアニメーションを制御するシステム、炎や竜巻といった粒子(パーティクル)を使用したエフェクトをエディタ上でパラメータを調整するだけで作成できる。ボタンやリスト、スライドバーなどのUI(ユーザーインターフェース)の機能など、ゲームを開発する上で有用な機能が多く存在する。Assetと呼ばれるゲームを開発するための様々な素材を購入できるAseetStoreが用意されており、購入したAssetを自分のゲーム開発で利用したり、自分で作成したAssetをAssetStoreで販売することもできる。Blenderなどのモデリングツールとも相性が良く、iPhoneやAndroid、VR・AR、家庭用ゲーム機等の多くのプラットフォームに対応しており、設定を変更することによって他のプラットフォーム用の開発を行うことができる。[5]

2.3.Blender

 Blenderは無料のオープンソースの統合型3DCGソフトウェアであり、インストールやインターネット接続が不要の独立したアプリケーションである。モデリングやテクスチャペイント、レンダリング、Pythonを用いたスプリクト編集等の様々な機能を有している。Blender Foundationが開発を担っており、WindowsやmacOS、Linuxなどの主要なOS上での動作が可能。[6]

3.研究環境の構築

3.1.研究環境

 本実験でのVR空間の構築及びヘッドマウントディスプレイとコントローラーは以下を使用する。

3.2.VR空間の構築

 Unityで新規プロジェクトを作成した後、AssetStoreより以下をダウンロード及びインポートする。

 本実験では『outpost on desert.unity』のシーンを使用する。『outpost on desert.unity』は『Sci-Fi Styled Modular Pack』の『Example scenes』フォルダの中に存在する。

 Blenderで作成したサイコロの3DモデルをUnityに移動させる。その後、UnityのSceneに配置する。初期状態では持ち上げるなどの動作を行うことはできないため、VR内でコントローラーを使用して、サイコロの3Dモデルを持ち上げる、投げるなどの動作を行うため、Rigidbody、Box Collider、Throwable(Script)、Interactable(Script)を配置したサイコロの3DモデルのInspectorウィンドウに追加する。Throwable(Script)及びInteractable(Script)は『SteamVR plugin』内に存在するものを使用する。

 図2は、UnityのSceneに配置したサイコロの3DモデルのInspectorウィンドウにRigidbody、Box Collider、Throwable(Script)、Interactable(Script)を追加した後のサイコロの3Dモデル及びInspectorウィンドウである。

完成したサイコロの3Dモデル

図2 完成したサイコロの3Dモデル

完成したVR空間全体の様子を図3に示す。完成したVR空間全体の様子を図10に示す。『Sci-Fi Styled Modular Pack』内に存在するSceneである『outpost on desert.unity』をVR空間として使用し、Blenderにて作成したサイコロの3DモデルをVR空間内で持ち上げ、移動させることができる物体としている。

VR空間の全体像

図3 VR空間全体の様子

4.VR空間内での行動の実装

4.1.Playerの作成

 実際にVR空間内を移動するオブジェクトをPlayerと称する。このPlayerをコントローラーからの入力によって移動させることで、VR空間内での行動を実装する。『SteamVR Plugin』に存在するPlayerのプレハブをSceneに配置する。また、playerのInspectorウィンドウにCharacter Controller、作成したPlayer移動用のScriptを追加する。完成したPlayerのSceneビューとInspectorウィンドウを図4に示す。 また、作成したPlayer移動用のScriptの全文は9.付録 [9.付録] に存在する。

プレイヤー

図4 PlayerのSceneビューとInspectorウィンドウ

4.2.コントローラーの設定

 画面上部のWindow>SteamVR Inputと移動すると図5の画面が表示される。図5の画面では、コントローラーの設定を行う前に、 VR空間を操作するために必要となる、ジョイスティックを動かしている、ボタンを押しているといったコントローラーの状態を 変数として作成することができる。ActionのInの中にScript内で必要となる変数と戻り値を作成した上で、図6及び図7の コントローラーの設定画面で変数を設定することによってコントローラーの入力を設定することができる。 図6では、ジョイスティックが操作された時の位置を『direction』という変数で所得し、ジョイスティックでの入力を所得 できるようにしている。図7では左コントローラーのグリップをボタンを押すと『dash』という変数の戻り値を所得できるように 設定し、右コントローラーのグリップをボタンを押すと、『switching』という変数の戻り値を所得できるように設定している。 [13]

インプット画面

図5 SteamVR Inputの画面

コントローラーの設定画面上部

図6 コントローラーの設定画面の上部

コントローラーの設定画面下部

図7 コントローラーの設定画面の下部

5.研究結果

 Secneを実行する時は、椅子に腰かけたうえで、視線の回転及びPlayerの移動は全てコントローラーに入力するのみで行っている。 ヘッドマウントディスプレイより表示される画面はPlayerのCameraPreviewにて写されたものである。画面下部に表示されている グローブをVR空間に存在するサイコロの3Dモデルに近づけたうえで、コントローラーのトリガーボタンを押すことによってVR空間 に存在するサイコロの3Dモデルを持つ動作が可能である。

 Sceneを実行し、ヘッドマウントディスプレイ及びコントローラーを着用した後の開始時画面を図8に示す。

実行開始画面

図8 開始時画面

 左右への視線回転は右コントローラーのジョイステックを左右に傾けることで行っている。 開始時画面より右に視線を回転させた画面を図9、開始時画面より左に視線を回転させた画面を図10に示す。また、 開始時画面より後方に視線を回転させた画面を図11に示す。右コントローラーのジョイスティックを右へと移動させることで、 図8から図9まで視線を移動させることができる。また、右コントローラーのジョイスティックを左へと移動させることで、 図8から図10まで視線を移動させることができる。右コントローラーのジョイスティックを、Playerが後ろを向くまで左右 のどちらかに移動させ続けることで、図8から図11まで視線を移動させることができる。

開始時画面より右

図9 開始時画面より右に視線を回転させた画面

開始時画面より左

図10 開始時画面より左に視線を回転させた画面

開始時画面より後方

図11 開始時画面より後方に視線を回転させた画面

 Playerの移動は左コントローラージョイスティックを前後左右に傾けることで行っている。 また、視線の先を前方としているが、地面より下方へ移動すること及び、上方へ移動することはできない。 図11から前方へ移動した後の画面を図12に示す。Playerの移動は左コントローラーのジョイスティックを上下へ移動させる ことによって行っている。左のコントローラーのジョイスティックを上側に移動させることによって、 図11から図12までPlayerの位置を移動させることができる。Playerを移動させることによって、PlayerのCameraPreviewが 変化し、VR空間内での移動を行うことができる。

実行開始時から後ろに視線移動した後、移動した画面

図12 実行開始時から後ろに視線移動した後、移動した画面

 サイコロの3Dモデルを持ち上げる前の画像を図13に示す。この画面はSceneの実行開始時の画面である図8から、 右側に視線を移動させ、サイコロの3Dモデルの側までPlayerを移動させた画面である。また、サイコロの3Dモデルを 持ち上げている途中の画像を図14に示す。サイコロの3Dモデルを持ち上げるには、画面下部に表示されているグローブ をサイコロの3Dモデルの近くまで右コントローラーを持つ手を移動させ、右コントローラーのトリガーボタンを押し続けた うえで、右コントローラーを持つ手を上方向に移動させることで行うことができる。また、サイコロの3Dモデルを持ち上げ、 投げた後の画面を図15に示す。サイコロの3Dモデルを持ち上げたうえで、右コントローラーを持つ手で投げるように動かし、 押し続けている右コントローラーのトリガーボタンを離すことによってサイコロの3Dモデルを投げる動作を行うことができる。

 

サイコロの3Dモデルを持ち上げる前

図13 サイコロの3Dモデルを持ち上げる前の画面

サイコロの3Dモデルを持ち上げている途中

図14 サイコロの3Dモデルを持ち上げている最中の画面

サイコロの3Dモデルを持ち上げ、投げた後

図15 サイコロの3Dモデルを投げた後の画面

 Playerに追従するFollowlightを点灯、Sceneを俯瞰するoverlightを消灯させた状態の画面を図16に示す。また、 Followlightを消灯、overlightを点灯させた状態の画面を図17に示す。ライトの切り替えの操作は右コントローラーの グリップボタンを押すことによって行う。図16はSceneの実行開始時の画面から右に視線を移動させた画面である。 Playerに追従するFollowlightはSceneの実行開始時には点灯した状態であり、Sceneを俯瞰するoverlightはSceneの 実行開始時には消灯した状態である。図16から、右コントローラーのグリップボタンを押すことによって図17へと移り変わる。 図17では、Playerに追従するFollowlightは消灯した状態となり、Sceneを俯瞰するoverlightが点灯した状態に変化する。

 

Playerに追従するFollowlightを点灯、Sceneを俯瞰するFollowlightを消灯させた状態

図16 Followlightを点灯、overlightを消灯させた画面

Followlightを消灯、overlightを点灯させた状態の画面

図17 Followlightを消灯、overlightを点灯させた画面

6.考察

 実行したSceneの結果より、コントローラーを操作することによってPlayerのCameraPreviewの向きを変化させることで、 ヘッドマウントディスプレイを通じてSceneを実行した時に視線の回転として表された。また、 CameraPreviewの向きを前方として、コントローラーの操作によってPlayerの位置を変化させることで、 PlayerのCameraPreviewの位置が変化し、ヘッドマウントディスプレイを通してPlayerのCameraPreviewを見ることでVR空間 を移動を表現することができた。また、コントローラーを自らの手のように扱い、VR空間に配置したサイコロの3Dモデルを 持ち上げる、移動させる、離すという動作を行うことができた。これらによって、VR空間の定義である、 VR空間の使用者がVR空間の中をリアルタイムで自由に行動ができるということを満たしていると考える。また、 ライトを切り替えることによりVR空間内に存在する物体の見え方が変化し、PlayerがVR空間内を移動しても、 VR空間内に存在する物体を通り抜けない、持ち上げたサイコロの3Dモデルを投げる動作を行った時、 放物線を描くといった物理的挙動を再現することができた。よって、VR空間の定義である、 使用しているVR空間が使用者によって自然な3次元空間であり、自然な3次元空間であるVR空間内をリアルタイムで自由に行動 することによって、VR空間を使用している使用者の感覚が矛盾なくVR空間に入り込んだ状態となっていると考える。 以上によって、作成したVR空間はVR空間の定義を満たしたものであると考える。

7.まとめ

 本実験ではUnityで作成した3次元空間に、Blenderで作成した3Dモデルを配置したVR空間を作成することができた。また、VR空間内を自由に移動し、VR空間内に存在する物体を持ち上げ、 投げるといった動作を行うことができるPlayerを作成することができた。作成されたVR空間及びPlayerには重力が表現され、VR空間に存在する物体とPlayerは互いに通り抜けない、Playerによって投げられた物体は放物線を描くといった物理的挙動を表現することができた。 また、考察より、作成されたVR空間はVR空間の定義を満たしたものであると考える。 以上よりUnity及びBlenderを利用したVRコンテンツの開発に必要である知識及び操作法を取得できたと考える。今後はより一層の技術の研鑽とともに、より高度なVRコンテンツの開発に取り組んで行くことを課題とする。

8.参考文献

9.付録

9.1.Playerの移動用スプリクト