VirtualExperience 解説

背景

2016年のVR元年から4年が経過した2020年、VRの普及率はまだ高くない。

HMDの価格やセットアップの難解さが、未経験者がVRに接するハードルを上げていると思われる。

2019年にOculus Questが発売され VRの敷居がさらに下がったが、それは主にVR経験者にとってであり、

VR未経験者はOculus Questの名前すら聞いたことのない人が多い。このような背景があるVRを、より気軽に体験できるコンテンツを目指す。

コンセプト

VRを通して、家にいながら、綺麗な森、マグマ、海底、街、蝶の飛ぶ幻想的な風景などを体験できる

 

ターゲットユーザー

体が弱く外出するのが難しい人々 や VR未経験者でも気軽にVRを体験でき、安らぐことができるコンテンツ

 制作期間:平日1時間、休日:3〜4時間で2ヶ月

体験人数: 1人

対象:一般 、企業

使用機材:Oculus Quest

Unity Version:2019.2.9f1

※イメージ

制作予定

各ワールドを作成し、プレイヤーの操作によって別のシーンに遷移することで

色々な世界、風景を体験できるようにする。

 

必要な要素は以下

・各ワールド(3Dモデル、テクスチャ、BGMなど)

・UI操作

UI操作

誰にでも気軽に体験できるコンテンツとして、2019年12月にOculus Questで実装されたHand Trackingを使用する。Hand Trackingはコントローラーの代わりにプレイヤー自身の手を使用し操作することができるシステムだ。

Oculusが配信しているAsset Oculus Integration Ver 12.0

を使用することでHandTrackingが簡単に実装することができるので使っていく。※Oculus Questのバージョンを更新しておく必要あり。

①新規プロジェクトを作成しOVRCameraRig Prefabを配置、元からあったCameraは削除する。

②OVRCameraRig Prefabの中にRight/Left Anchorがあるのでその中にOVRHandPrefabを配置 (右手/左手を選択する項目があるので各手に合わせる)

③OVRCameraRig OVR Managerスクリプトがついているので

Hand Tracking Supportを Hands Onlyに設定

これでHand Trackingを使用することが可能となる。

その他設定をすることでHand Trackingでは以下のようなことが行える

  • Objectを押す(手にColliderが付いている)
  • 指でつまむ動作(物を掴むことはできない為、手からUI操作用のレーザーなどを出して、つまむ動作で選択等が主な使用方法のようだ)

コントローラーに比べ、Hand Trackingの操作性はあまり高くない。

Hand TrackingOculus Questの機体前面に付いている4つのカメラから手の位置をトラッキングしている為、カメラに手が映らなくなると手のトラッキングができなくなるからだ。

日常生活において指でつまむといった動作は若齢、高齢にはわかりづらく、上記の理由からハンドトラッキングの認識精度は高くない為、

誰でも簡単にできる手のグー、パーの動作を基本操作とすることにした。


OVR Hand PrefabにはOVRHandスクリプトがついている。

上述したつまむ動作はこのスクリプト内の

GetFingerIsPinching()GetFingerPinchStrength() 関数を使用することで検知可能だ。調べたところ、この関数は各指の伸ばしや曲げ具合を取得できるようなので、グーやパーも実装できる。値を調整することで微調整も可能。


public bool Grab
{
get
{
//人差し指と中指の曲げ検知
return (GetFingerPinchStrength(OVRHand.HandFinger.Middle) >= 0.5f && GetFingerPinchStrength(OVRHand.HandFinger.Index) >= 0.1f);
}
}

public bool TwoFinger
{
get
{
return ((GetFingerPinchStrength(OVRHand.HandFinger.Pinky) >= 0.05f) && (GetFingerPinchStrength(OVRHand.HandFinger.Ring) >= 0.2f));
}
}

public bool Release
{
get
{
return (GetFingerPinchStrength(OVRHand.HandFinger.Thumb) <= 0.01f);
}
}


上記の3つの関数を主に使用する。加えて以下の設定を行う。

  • OVRHand Prefabの配下にSphere(名前をHandに設定)を配置。
  • Mesh Rendererのチェックを外す。
  • Hand Tagを付ける。
  • Sphere Collider isTriggerにチェック

Grabを検知した際にHand ObjectをActiveにすることでUIとHandが接触し操作する。

UI自体は簡単に操作できるようにSphere Objectを使用する。

Sphere Objectに以下のスクリプトをつけることで別のシーンに遷移する


void OnTriggerEnter(Collider other)
{
//接触したオブジェクトのタグが”Player”のとき
if (other.CompareTag(“Hand”))
{
//シーン遷移処理

}
}


メニューの呼び出し

OVRHand PrefabにはOVRSkeletonスクリプトがついており、OVRHandの各指のボーン情報が入っている。これを使用し、指先の位置にSphereを配置する。各Sphereには対応する指のTagを付ける。

以下のSphere5つはSpheresというからオブジェクトで括り、上記記載のTwoFinger関数(手がチョキになったら)が呼ばれたらActiveにする。

左手にもHandPrefab配下にSphereを配置し、Activeになった指先の中指(Middle)と触れたらメニューを呼び出す。


public class handobj : MonoBehaviour
{
// Start is called before the first frame update
public GameObject HandR;
OVRSkeleton script;
public GameObject Sphere;
public GameObject Sphere2;
public GameObject Sphere3;
public GameObject Sphere4;
public GameObject Sphere5;

void Start()
{
script = HandR.GetComponent<OVRSkeleton>();

}

// Update is called once per frame

void Update()
{
Sphere.transform.position = script.Bones[(int)OVRSkeleton.BoneId.Hand_ThumbTip].Transform.position;
Sphere2.transform.position = script.Bones[(int)OVRSkeleton.BoneId.Hand_IndexTip].Transform.position;
Sphere3.transform.position = script.Bones[(int)OVRSkeleton.BoneId.Hand_MiddleTip].Transform.position;
Sphere4.transform.position = script.Bones[(int)OVRSkeleton.BoneId.Hand_RingTip].Transform.position;
Sphere5.transform.position = script.Bones[(int)OVRSkeleton.BoneId.Hand_PinkyTip].Transform.position;

}
}


 

World①紅葉舞う日本庭園

まず、紅葉の木を作成していく。

紅葉の木のモデリングにはフリーの3Dソフト、Blenderを使用する。

Blenderのアドオン、Sapling Tree Genを使用することで簡単に木を作成することができる。

木のモデルは初め以下のようになっているが、設定を行うことで紅葉の木となる。

Photoshop Elementsでテクスチャを作成

 

上記テクスチャを葉として使用すると以下のようになる

 

Oculus Questは中身がAndroidで出来ている為、描画処理能力があまり高くない。現時点で約8万ポリゴンとなっている紅葉の木を大量に配置するとカクツキの原因になる。

そこで以下の紅葉の木は4本までとし、周りの景色は竹柵や360度写真を配置することで描画を軽減することに成功した。

石や石灯篭、鯉なども配置したことでより日本庭園感を増すことができた。

以下画像だと少しみづらいが餌を投げ入れると鯉が寄ってくるようになっている。

配置したものが以下となる。

World②宇宙ステーション

このワールドでは仮想空間でしか味わえない、無重力を体験できるコンテンツとした。ハンドトラッキング と合わせることでより無重力感を味わえる。

宇宙にすることで、物が浮いていても不自然にならず、ハンドトラッキング での操作も自然に行うことができた。今回は基本的なオブジェクトは自作してみた。

基本的には空中のオブジェクトを指先で押したり手で掴んだりといった無重力体験をした後、赤いスイッチを押すことで地球に向かってミサイルが飛び出し破壊する事でオチとしている。

 

自作したオブジェクト

・宇宙ステーション

・ヘルメット

・ペットボトル

・発射スイッチ

など

World③コムローイ祭り

Blenderでモデルを作成し、Standard Assetの火のエフェクトを組み合わせて灯篭を作成、イチョウ同様多数を配置できないので多数の灯篭はテクスチャを貼ったパーティクルで代用しました。

指先で灯篭を押すか掴むかしてうまい具合に灯篭を飛ばす体験が可能となっている。周りの景色は360度写真を使用した。