XR-1開発備忘録

#概要
研究室に5台のXR-1が到着したので，開発メモを残す．
以前購入したときは，セットアップまでもたくさんの苦労があったが，今回は業者がやってくれたので割愛する．
（主にThunderboltの互換のせい）
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">XR-1が子供を産んで5匹になりました <a href="https://t.co/652mpxn7h7">pic.twitter.com/652mpxn7h7</a></p>&mdash; さいんす(signs) (@signs0302) <a href="https://twitter.com/signs0302/status/1280739373902782465?ref_src=twsrc%5Etfw">July 8, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##VR機能テスト
- High Definition RP projectでプロジェクトを作成
- PackageManagerを使ってGithubからVarjo XR Pluginを導入(https://github.com/varjocom/VarjoUnityXRPlugin.git)
- Project Settingsを編集
- Main CameraにTracked Pose DriverをComponentとして追加
- Unityを実行，XR-1でサンプルシーンを視認可能なことを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454308/3b938089-f897-0f6f-d429-7e5e30b534cf.png)

##MR機能テスト(VST機能)
###AR表示
- 簡単なスクリプトを作成し，空のオブジェクトにアタッチ．オブジェクトは何でも良い．

```cs:StartMR.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StartMR : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        Varjo.XR.VarjoMixedReality.StartRender();
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

```

- MainCameraのBackground TypeをColorに変更
- MainCameraのBackground Colorを黒(0,0,0,0)に変更
でVST表示ができる．(SampleSceneではSky and Fog Volumeオブジェクトを非表示にするとわかりやすい)

###とある物体だけVST表示
-以下のシェーダを作成し，適当なMaterial(例えばUnlit)にアタッチ

```shader:MR.shader
Shader "Custom/MR"
{
    SubShader {
        Pass {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            struct appdata {
                float4 vertex : POSITION;
            };
            struct v2f {
                float4 pos : SV_POSITION;
            };
            v2f vert(appdata v) {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                return o;
            }
            half4 frag(v2f i) : SV_Target {
                return half4(0,0,0,0);
            }
            ENDCG
        }
    }
}
```
シェーダの参考サイト
(https://blog.applibot.co.jp/2017/09/01/tutorial-for-unity-3d-4/)
- Materialを適当なオブジェクトにアタッチ
例えばCubeにアタッチすると以下のようになります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454308/7c5f7236-65f8-b13e-d4cb-9168340f5cf4.png)
(左：Unity画面，右：XR-1で見えている映像)

##カメラ映像取得
- カメラの映像を取得できれば色々できる．（というか，できないと自分の研究で使えない...）
- 公式リファレンスに何も書いていないので，色々試してみる
- デバイスマネージャには「USB Camera-OV580」と「USB Camera-VarjoOV580」表示される（VIVEフロントカメラとは異なる）
- XR-1起動中にカメラを叩くと以下のようになる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454308/58872b9f-978e-2bc1-3c04-f8da71fc5347.png)
- カメラ映像は取得できなさそう...？
- XR-1の電源ケーブル抜くとカメラも停止

##おまけ
- 新規プロジェクトでSteamVRをAssetStoreからimportして実行すると以下のようになってHMDが認識されない
- VRChatは動作したので，何か方法があるのかも

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454308/63996d83-192a-ac74-7393-db60c29369d2.png)

##メモ
- Unity2019.3以降推奨っぽい．Unity XR SDKを使用したいらしい．
- Unity2019.4.2f1を使ってみる．ちなみに業者がインストールしてったのは2019.4.1f1
- またなにかわかったら更新します．

##動いている様子
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">XR-1を触ってみた様子<br>色々と設定は必要だけど，動かすだけならそこまで難しくなさそう<br>ただし，Webカメラの映像を取得するためには色々苦労しそうな感じ<br>詳しくはさっき書いたQiita記事を見てください<a href="https://t.co/juFqnj8Oze">https://t.co/juFqnj8Oze</a> <a href="https://t.co/KHCDvltCLG">pic.twitter.com/KHCDvltCLG</a></p>&mdash; さいんす(signs) (@signs0302) <a href="https://twitter.com/signs0302/status/1280843732774838272?ref_src=twsrc%5Etfw">July 8, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##追記(2020/07/09)
- HDRPではなく3Dでは動作しませんでした
- Unityちゃんを出現させてみた
- HDRP用にシェーダを新しく設定しないといけないみたい
    - このサイトを参考にした（https://www.frenchdrop.com/detail?id=3798）
- できたのはいいけど，左目表示がおかしい？安定してない？
- カメラにアクセスするために，Thunderboltケーブルを抜き差しして見る
    - カメラが動かなくなる...デバイスマネージャで1つのカメラしか認識されていない？

##参考リンクまとめ
- 公式サイト(https://varjo.com/use-center/getting-started/)
- 開発用サイト(https://developer.varjo.com/)
- SDK ダウンロード(https://developer.varjo.com/downloads)
- Unity SDK(https://developer.varjo.com/docs/unity-xr-sdk/unity-xr-sdk)
- Unity Github(https://github.com/varjocom/VarjoUnityXRPlugin)
- MR関連の機能(https://varjo.com/use-center/get-to-know-your-headset/mixed-reality/)
- FAQ(https://varjo.com/use-center/troubleshooting_faq/)
- デモ用ソフト(https://varjo.com/downloads/)