LoginSignup
4
2

More than 5 years have passed since last update.

ViveFocus+Unity

Last updated at Posted at 2018-11-03

ViveFocusとは

ViveFocusはスタンドアロンで動作するVRHMDです。
PC等の機器を必要とせず単体で動かす事が可能になっています。

中国では先行して販売されていたのですが、先日国内でも販売されました。
ViveFocus
公式では法人向けにしか販売していないのですがこちらから個人でも購入出来るようです。

特徴

既にOculusGoやMirageSoloなどのスタンドアロン型のHMDが出ており、性能や機能も大体似たような物になっています。
スタンドアロン機種ごとの特徴をまとめてみました。

トラッキング モーションコントローラ シースルー(カメラ画像の表示) 値段(税込み) CPU
ViveFocus 6DoF 3DoF 白黒 72090円 Snapdragon 835
ViveFocusPlus 6DoF 6DoF*2(超音波) 白黒 Snapdragon 835
MirageSolor 6DoF 3DoF o(白黒?) 48,660円 Snapdragon 835
OculusGo 3DoF 3DoF x 23,800円(送料込み) Snapdragon 821
OculusQuest 6DoF 6DoF*2 輪郭 399ドル Snapdragon 835?

OculusQuestは最後発というのもあり全ての機能が揃っているようです。
またOculusGoは機能を絞ることで廉価に抑えられています。
MirageSoloがアップデートでシースルーが使えるようになったようです。動画を見ている限りリフレッシュレートもそれなりに出ています。

セットアップ

https://qiita.com/Hirai0827/items/8cf92ea9ea42b62e178e
上記の記事ではUnity5.6.3かUnity2017でしか動かないとの事ですが、現在のWaveSDK-2.1.0ではUnity2018.1までサポートされているようです。
ですのでAndroidSDKだけ必要なバージョンを入れれば通常のAndroidのアプリとしてビルドするだけでも動作しました。

具体的にどのバージョンを入れたら良いのか分かってませんが、自分が動作確認した時に追加したのはAPIレベル28と26でした。

Unity2018.2.x対応

2018年10月末までには2018.2にも対応するとの事なのですが、今の所更新はありません。
現在のWaveSDK-2.1.0でもUnity2018.2.xでも動作はしますが、アプリ起動時に画面が真っ黒になります。
一旦HMDを外してスリープさせてHMDを被るとアプリが正常に動作します。

黒い画面が出る

上記の症状ですが、WaveVR_Render.csのOnApplicationPauseメソッドの中身をPause()としてくくり出してpublicにしてアプリケーションの起動時に無理やりPause(true)/Pause(false)を呼び出すことで解決出来るようです。
https://community.viveport.com/t5/Vive-Wave-SDK/Getting-around-the-black-screen-on-WaveSDK-2-1-0-on-Unity-2018-2/td-p/25092?__woopraid=QWlga5oMnXrt

外から呼び出さなくても
WaveVR_Render.Start内部でPause(true)/Pause(false)と呼べば解決しました。
Pause(true)とPause(false)を同一フレームで呼び出すと問題があるようなので以下のようにすることで解決しました。

WaveVR_Render.cs
    IEnumerator Start()
    {
        Log.d(LOG_TAG, "Start()+");
        var camera = GetComponent<Camera>();
        camera.cullingMask = CameraGaze ? camera.cullingMask : 0;
        camera.backgroundColor = Color.black;
        camera.clearFlags = CameraClearFlags.Nothing;
        // Camera.main need this camera to enabled
        camera.enabled = true;
        camera.rect = new Rect (0.5f - 0.01f, 0.5f - 0.01f, 0.02f, 0.02f);
        camera.tag = "MainCamera";

        WaveVR_Render.Expand(this);
        configurationChanged = false;
        Log.d(LOG_TAG, "Start()-");
        yield return null;
        Pause(true);
        yield return null;
        Pause(false);
        yield return null;
    }

これでOculusQuestが出るまではFocusで我慢出来るようになりますね。良かった。

カメラの画像も白黒かつ20fpsくらいでよければWaveVR_CameraTextureで取れるようですし、頑張って深度値を計算すればARも実現可能です(めちゃくちゃ重たいですが)。

Let's ViveFocus!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2