Oculus Quest2開発環境構築の基本について

1. Oculusアプリの設定

OculusQuest2の開発環境を構築していきます。

まず初めにOculusのアカウントを作成する必要があります、すでに持っている場合は飛ばしても問題ありません。

アカウント作成において必要なものは以下の2つのみです

face book アカウント

Oculusアプリ(スマホ, PC)  

pc版は下記からダウンロードできます。

https://www.oculus.com/setup/

準備ができたらPCでOculusアプリを開きface book アカウントでログインします。

ログインができたらOculusとPCをケーブルでつなぎ、デバイスの設定からヘッドセットの

登録を行います。登録が終了したら設定を開き一般から提供元不明の項目を有効にします。

2. 開発者アカウントの作成

次にOculusの開発者アカウントを作成します。

下記のURLからOculus開発者ダッシュボードに飛び、新しい団体を作成します。

https://developer.oculus.com/manage/organizations/create

団体名は他とかぶらない名前で作成し、送信ボタンを押します。

問題なければ開発者アカウントの作成は完了です。

※ Face book の設定が足りない場合、設定を更新する必要があります。

3. 開発者モードの有効化

次はスマホのOculusアプリで開発者モードを有効にします。

最初にスマホとOculusをペアリングする必要があるので、「ヘッドセットをペアリング」を押しQuest2を選択しヘッドセットを探します。

※ スマホのBluetoothを有効にする必要があります。

※ 万が一ヘッドセットが見つからない場合は、
Oculus側のミラーリングを有効にすれば解決する場合があります。

ペアリングが終わると下図のような画面になるので、項目の中から 「その他の設定」を開きます。

項目の中から開発者モードを開き有効にします。

これで開発者設定は完了です。

4. Oculus Developre Hubのインストール

最後に下記リンクからOculus Developer Hubをインストールします。

https://developer.oculus.com/downloads/package/oculus-developer-hub-win/

インストールが完了したら exe ファイルを開きセットアップします。

ここまでできたらOculus Developer Hubを開きface book アカウントでログインします。

ログインができたら画面左上のOrg Managerを確認します、

先ほど作成した団体名になっていれば環境構築は終了です。

拡張子insvがInsta360 Playerでスムーズに再生できない

コンテンツを制作する際に資料映像として360°動画ファイルで頂くケースが最近増えてきました。下記にInsta360で撮影した動画がそれほど高スペックでないPCのInsta360 Player上でシークがうまく行かなかったケースでのTipsをシェアしたいとおもいます。

拡張子insvはInsta360のファイルフォーマットです。Insta360 Playerを利用してこれらの拡張子のプレビューすることができます。
公式サイトで無料でダウンロード可能ですが、サイトの構成変更でダウンロードリンクが若干わりづらくなっているようです。

下記のプロダクトのページにリンクがあります。
https://www.insta360.com/download/insta360-4k

ダウウンロードしたらアプリを起動して、360°動画ファイルをInsta360 Playerにドラッグアンドドロップして読み込んだのですが、弊社で遭遇したケースでは再生バーをシークすると、該当箇所(フレーム)の映像は表示されますが、シーク中の映像が停止した状態となりました。

どうやら撮影した映像が高解像度かつ高ビットレートだったため、再生バーをシークしても早送りや巻き戻しが見た目に反映されていないようです。

そこで、公式ページにあるInsta360 Studioを使って、映像を解像度とビットレートを圧縮することにしました。
(※先程のPlayerをダウンロードしたページの中部あたりにあります。)

Insta360 Studioを起動して、ファイルをドラッグアンドドロップして読み込みます
その後アプリケーションのタイトルバー付近の上部の黄色いボタン(➀)を押して、圧縮設定ウィンドウを表示します。

setting_window_capture

解像度を設定した後、「Bitrate」の項目のプルダウンリストからCustomizeを選択して(②)、横の文字入力ウィンドウに任意の数字を入力します。今回の場合は”18”にしました。
OKを押すとキューに追加されて、圧縮が開始されます。

今回のケースでは下記のように設定しました。
元ファイルの設定:

  • 3840px × 1920px
  • ビットレート 50Mbps

圧縮後のファイルの設定:

  • 1920px × 960px
  • ビットレート 18Mbps(カスタムを選択して手動入力)

圧縮が終わったファイルをInsta360 Playerにドラッグアンドドロップすると、シークが効くようになりました。

なお、insvフォーマットのままの圧縮はできないようです。残念です。
“Spherical pictures and videos can be played and edited by Insta360 Studio, which would export the original insv video and insp picture to MP4 and JPG format “

http://faq.insta360.com/documents/Guide_to_Play_and_Edit_Spherical_Videos/#export

以上となります。

Unity HubでインストールしたUnityのVuforiaプラグインをアップデートする方法

Unity Hubはとても便利で新しい機能ですが、Vuforiaをアップデートする場合、少し面倒な手順が必要になります。

最新のUnityのバージョンを既にインストールしていて、そのUnityと共にインストールされたVuforiaのバージョンよりも更に最新のVuforiaがリリースされている場合、下記の手順でVuforiaをアップデートできます。

Unityを起動するときにVuforiaは無効の状態になっています。(Image1)。

とりあえず、Vuforiaを使用するため、
File>Build Settings>Player Settigsボタン
または
Edit>Project Settings>PlayerからPlayer Settingsを開き、
(Image2)
Player settingsのVuforia Augmented Realityオプションをチェックする必要があります。

(Image3)
Vuforia Configurration Pannelの出し方
すると Vuforia Configuration Panel Vuforia Update のリンクをクリックできるようになります。(Image4)。

Image1

Image2

Image3

Image4

ここで一旦Unityを閉じてください。

ダウンロードが終わったら、

VuforiaSupportInstaller-Windowsの圧縮ファイルを解凍し、UnitySetup-Vuforia-AR-Support-for-Editorのイントラーをダブルクリックします。

UnitySetupアイコンを選択してください(Image5)。

インストールを続いて、Destination Folderのページを見えたらBrowseボタンをクリックしてください(Image6)。
ここで、Vuforiaの最新を適用したいUnityのバージョンの実行ファイルが置かれているパスを指定します。

Image5

Image6

 

Program FilesフォルダーにあるUnityフォルダーを選択してください(Image7)。(注意:Unity Hubのフォルダーではありません。Unity自体の実行ファイルがあるフォルダを指定する必要があります。

Image7

それでUnityをアップデートするバージョンを選択し、OKボタンを選択してください(Image8)。
Image8

次のウインドで選んだフォルダーを確認できます(Image9)。それでインストールを最後まで続けてください。

Image9

 

Unityを起動するとVuforiaがアップデートされていることが確認できます(Image10)。

Image10

Unity+Myo(ジェスチャーを活用して牛乳を搾るゲームを作りました)

Blogをいつもご覧いただきありがとうございます。先日「Myo」のジェスチャーでゲームを作ってみましたので今回はここでジェスチャーの使い方を紹介しようと思います。

下記のURLはゲームの映像です。
https://www.youtube.com/watch?v=4Jz7y1n3Iec

· Myoってどんなもの?

Myoアームバンドは、腕、手首、指のジェスチャーで、デバイスをワイヤレス操作することができます。

下記のURLはMyoの公式サイトです。
https://www.myo.com

· Myoのジェスチャーの紹介

デフォルトで認識するプリセットジェスチャーは下記のとおりです。

· グー(Fist)
· パー(FingersSpread)
· ダブルタップ(DoubleTap)
· 手首で手を左に仰ぐ動作(WaveIn)
· 手首で手を右に仰ぐ動作(WaveOut)
· リラックス(Rest)

「グー」と「パー」を合わせて、モミモミすることができそうなので、私はこの二つのジェスチャーを利用して牛乳を搾るゲームを作りました。それでは、ジェスチャーの部分に入りましょう。

· sdkの導入

環境状況:
Unity2018.1.0f2
SDKバージョン:Windows SDK 0.9.0
Firmware: 1.5.1970
https://developer.thalmic.com/downloads
SDKを持っていない人は上記のサイトからダウンロードできます。

SDKをダウンロードして、Unityにインポートしましたが、エラーが三つ出ました。

エラーが発生しているスクリプト(ColorBoxByPose)をチェックしたら、レンダリングの設定の書き方が古すぎますのでUnity2018.1.0f2(恐らくUnity2017以降のバージョン)では、書き方を変える必要がありますね。

では、そこの書き方を変えましょう!

上記のように修正してエラーが消えるはずです。

次はMyoをコントロールするために、SDKが用意してくれたプリハブをシーンに入れます。

サンプルシーンの中で「Joint」というGameObjectがあります。このGameObjectに存在するスクリプト(JointOrientation)がMyoデバイスの方向を管理しています。これをプリハブにして、自分のシーンに適用します。

方向を制御するスクリプトできたので、次はジェスチャー検出のコードですね。

それでは、ジェスチャー検出用のスクリプトを作りましょう。

そのオブジェクトに自分が作った「gManager」を入れて、ジェスチャー検出のコードを全部このスクリプト内に記述することにします。

これで、SDKのプラグインの導入が完了しました。

· ジェスチャー検出

例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Pose = Thalmic.Myo.Pose;
public class GestureManager : MonoBehaviour {
Public GameObject myo;
ThalmicMyo thalmicMyo;
void Start () {
  thalmicMyo = myo.GetComponent<ThalmicMyo>();
 }
void Update () {
  Fist();
  Stroke()
}
//ジェスチャーは「グー」の時
void Fist()
 {
   if(thalmicMyo.pose == Pose.Fist)
   {
   /*この部分は「グー」の処理の内容
   (牛乳を搾る機能を埋め込みました)
   */
   }
 }
//ジェスチャーは「パー」の時
void Stroke()
 {
  if(thalmicMyo.pose != Pose.Fist || thalmicMyo.pose == Pose.FingersSpread || thalmicMyo.pose == Pose.Rest)
  {
  /*この部分は「パー」の処理の内容
  (ここで手を離す機能と牛を撫でる機能を埋め込みました)
  */
  }
 }
}

「撫でる」機能は正確に言うと「パー」かリラックスの状態で手首や腕を振るという動作です。
上記のコードの通りにvoid Stroke()関数の中にMyoのジャイロの処理を埋め込めば「撫でる」ができます。

例:

void Stroke()
{
  if (thalmicMyo.pose != Pose.Fist || thalmicMyo.pose == Pose.FingersSpread || thalmicMyo.pose ==Pose.Rest)
  {
   if (thalmicMyo.gyroscope.magnitude > 120f)
     {
       //gyroscopeのmagnitudeは120より大きい場合
      //(速く腕を振ると簡単に120を超えます。)
     }
    else if (thalmicMyo.gyroscope.magnitude < 10f)
     {
      //gyroscopeのmagnitudeは10より小さい場合
     //(腕が静止に近い場合)
     }
  }
}

ここまではもう方向変更と簡単な「グー」と「パー」の処理が実現できるようになりました。でもMyoのもう一つのスクリプト(ThalmicMyo)の内容をみていきましょう。

· ThalmicMyo

ThalmicMyoはMyoのSDKの中でコアの部分です。

下記に主要な変数名を説明します。
· ArmSynced:boolタイプの変数で、trueになったらMyoデバイスが検出できます。
·arm:左の腕と右の腕どちらかと設定できます。
·pose:Myoが検出したジェスチャを保存します。UnKnowは今のジェスチャーです。
·accelerometer:加速度の計算用のVector3タイプの変数です。約9.8 m/s^2です。
·gyroscope:今のジャイロの軸のスピードを検出できます。単位は「度/秒」
·isPaired:trueの時にMyoのデータが読み込めます。
·Vibrate:Myoが提供しているバイブレーションタイプです。三つの種類があります。

public enum VibrationType { Short, Medium, Long }

バイブレーションの書き方は下記の通りです。

例:

using VibrationType = Thalmic.Myo.VibrationType;
if(thalmicMyo.pose == Pose.Fist)
{
  thalmicMyo.Vibrate(Vibrate.Short);
}

上記の「撫でる」機能はThalmicMyoの変数を利用して実装してみました。

· 実装して気づいたこと

1.実装してみて素早いジェスチャでは認識までに若干のディレイをかんじました。デバイスの特性上仕方がない点かとおもいますが、頻繫にジェスチャーを素早くおこない操作するゲームはわりと不向きかもしれません。

2.Myo Connect(Mac/Windows上のデフォルトマネージャー)をつかってキャリブレーションを行ったほうがやはり操作感が向上します。(PC用にビルドしたアプリのみで利用可能)

3.キャリブレーションをする時にゲームをする際と同じ腕のポジションでキャリブレーションするとジェスチャの認識向上におすすめです。

4.UnityでAndoroid用のビルドをためすために、有志の方が開発したandroid+UnityのSDKのGitHubにアップされたパッケージを利用してためしました。

ただ、Myo Connectのような、マネージャーソフトがない為キャリブレーション、個人のプロファイルの設定ができないの理由で、腕の方向やコントロール精度は満足いくものにはなりませんでした。