【Unity】Pico Neo 3 VRアプリ開発 (3) ～ Pico Neo 3の独自機能紹介 ～

# はじめに
前回はデバイス共通のアプリ開発方法について書きました。
今回はPico Neo 3の独自機能を紹介します。

[【Unity】Pico Neo 3 VRアプリ開発 (1)](https://qiita.com/afjk/items/d524148be70211510d75)
[【Unity】Pico Neo 3 VRアプリ開発 (2) ～ XR Interactions Toolkitを動かす ～](https://qiita.com/afjk/items/4b805c17aed9958d19ba)

**注意：Picoサイトのドメインが変更されたようです**
旧ドメイン
https://pico-interactive.com
新ドメイン
https://picoxr.com/jp/
> 現在のウェブサイトは2022年5月20日（または2022年5月20日）よりwww.picoxr.comに更新されます。

との記載があります。
* ホストアドレスへのアクセスは新ドメインにリダイレクトされますが、すべてのURLが新ドメインにリダイレクトされる訳ではないようです。
現時点(2022/05/23)では他サイトからのリンクは修正されていないケースが多いようなのでPico関連の情報を検索する場合は注意が必要です。
# ビデオパススルー
![Screenshot_com.afjk.PicoDemo_2022.05.23-00.27.23.579_011.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/d4a5db1a-1e44-6625-1096-83fedac889ec.jpeg)

https://developer.pico-interactive.com/docs/en/12058/seethrough_camera_related/

* 周囲確認のカメラ映像をコンテンツの背景として表示できます。
現実空間(白黒)に3Dオブジェクトを重ねるコンテンツを作れます。
以下のAPIを任意のタイミングでスクリプトから呼び出してください。
    * 実行中に有効/無効を切り替えることも出来ます。
```
PXR_Boundary.EnableSeeThroughManual(true);
```
* カメラのClear FlugはSolid Color、Background 0x0000000にして下さい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/6d243141-639b-d0a0-11dc-3cd2fd3c4603.png)

* また、これとは別にカメラをRawImageとして取り込むAPIも提供されています。

https://developer.pico-interactive.com/docs/en/12058/unity-xr-sdk-passthrough-/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/88c2bc91-be5e-00fa-4452-8b14a0755d22.png)
# Foveated Rendering(中心窩レンダリング)
中心から周辺に離れるほど解像度を下げる事で描画負荷を下げパフォーマンスを改善します。

https://developer.pico-interactive.com/docs/en/12058/unity-xr-sdk-FoveatedRendering/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/538a74c9-7781-7692-0a3d-f0dbe42a0197.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/1bc97c39-34e8-696b-0ad5-997295de2047.png)

* 外側ほどジャギジャギしていて解像度が落ちている事が分かります。
設定により強弱を変更できます。画像はTop Heigh。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/f941cb74-af42-9c09-04cd-ea0aa360bed1.png)

Pico Neo 3 Eyeなら目の動きに合わせた動的中心窩レンダリングにも対応しているようです。
(手元に端末が無いため未確認)

# Metorics Tool
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/96dc9e41-36ee-460c-e33c-016ca175950d.png)
* アプリをインストールする事でオーバレイ表示でFPS、GPU/CPU使用率をグラフ表示できます。
その他設定により表示出来る項目があります。
    * 詳細はドキュメントを参照してください。

https://developer.pico-interactive.com/docs/en/12058/235457/

* 導入方法
    * 上記サイトよりDownload
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/daca1f79-8e7f-5a6c-7ba0-9da359ce3cd1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/494d9aca-0939-24e6-02e4-1e7bec5db478.png)
* MetricsTool xxx.apk をPico Neo 3 Proにインストールしてください。
    * アプリ一覧に Pico Metrics Tool が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/1bb1685a-1975-4f68-ad25-2c8fcd37bed9.png)
    * 起動し、設定を行うとアプリ起動中に画像のようにGPU FPS CPUの状況がオーバレイ表示されます。

# Preview Tool
スタンドアローンVR端末の開発でネックになるのが、動作確認のために毎回ビルドする必要がある点です。
PicoではPreview ToolによりUnityEditorから直接HMDに映像を映してデバッグするPreview Toolが提供されています。

https://twitter.com/afjk01/status/1528021155038502912?s=20&t=T-Fql4_UBTWiTl0XxPRgSA

* PCとPico Neo 3端末にそれぞれPreview Toolアプリがあり、接続して実行します。

https://developer.pico-interactive.com/docs/en/12058/235458/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/30f3e221-90e8-bb90-3359-aa52de99ab8a.png)

## Unityプロジェクトの設定
* Project Settings>XR Plugin Managementの
Androidではなく"<B>PC</B>"のPlug-in ProviderをPicoXRにしてください。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/f8a9d131-705d-2e93-5273-014d4148c512.png)
Platformは切り替え不要。Androidのままで大丈夫です。
## PC、Pico両方にそれぞれPreview Toolをインストールする
* PC側
    * PreviewTool.exeを実行
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/bf2f6953-2c92-3461-ef91-c73856ff3a2f.png)
    * 以下のウィンドウが立ち上がります。
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/fa5220e0-a99c-8a88-d287-38cc2235dc3e.png)
* Pico Neo 3側
    * PreviewTool_XXXX.apk をインストール 
    * ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/5e2a84dd-019c-8ab9-5bc6-c547bc4e7675.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/6d0996db-e49a-f924-f387-6f20b122c9b1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/c5e00287-e62e-74fd-2f7d-8f310c3ebe5f.png)
* Wireless Connection またはWired connectionを選びましょう。
    * 私の環境ではUSB接続(Wired Connection)では接続できず、Wireless Connectionを使用しました。
* 接続されるとHMD内の表示は真っ暗になりますが問題ありません。PC側はConnectedと表示されているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43734/5d91c7e0-97fc-9a57-70c6-7b4c12244ad3.png)
* この状態でUnityEditorでPlayするとHMD側に表示されます。

両眼立体視ではない、Grabが出来ないなど、気になる点はありますが、ちょっとした確認には十分な印象です。

# おわりに
Pico Neo 3 独自の機能について紹介しました。
今回調べてみて、開発向けの周辺機能も充実している事が分かりました。
一つ一つのトピックについてはあまり掘り下げていませんので、公式ドキュメントをご覧いただければと思います。