manahiyoの気まぐれ

備忘録を兼ねたブログです。

QUEST3でリモートデスクトップ

はじめに

QUESTやPC-VRリモートデスクトップをやる方法はいろいろあります。ただ、自作ソフトの中でリモートデスクトップをやろうとすると、話は別でだいぶ苦戦しました。、リモート操作はまだできませんが、ストリーミング表示はできるようになったのでこれまでの道のりを記録しておきます。

やってみたいこと

QUEST3のパススルーの中で、PC画面を見ながら基板のデバッグができたら便利そうだなというのがきっかけです。先日のPoikitとリモートデスクトップで資料を見ながら機器をデバッグしているような様子が将来のエンジニアの形になりそうでやってみたかったのです。

下記にアセットもあったのですが、何しろ高価でお試しで買える値段ではありませんでした。それもこれはアドオンで、ベースを別途購入必要とのこと。日本円だと5万近くになります。

assetstore.unity.com

ちょうどよいものを探してみる

まず検索すると下記が出てきます。おぉ、簡単にできそうじゃないかと思ったのですが、想像していなかった問題がありました。

github.com

こちらのソフト、確かに動作して、機能もOKなのですが、ARMv7用なのです。今時はARM64が当たり前ですし、何よりQUEST3のパススルー機能はARM64でないと使えないという致命的な壁がありました。

そこで、ネイティブライブラリをARM64用にビルドできないかと挑戦しました。

WebRTCをビルドしてみる

まず、WSLにDOCKERを入れます。

www.kagoya.jp

次にコンパイル環境を作ります。

hammmm.hatenablog.com

ビルドファイルのARMをARM64にすればできるはず・・・・とやってみたのですが、何せこのビルド、1回やるのに数時間かかります。

おまけに、ライブラリが足りなくて途中でエラーが出たりして、その都度やり直しをしたりした結果、数日これにかかってしまいました。

ようやくビルドが完了し、これで64bit化ができると喜びもつかの間・・・まだ動かない。

LOGCATでエラーLOGを確認

31448 Error Unity NotSupportedException: IL2CPP does not support marshaling delegates that point to instance methods to native code. The method we're attempting to marshal is:

とのエラーメッセージ。もともと動いていた時はARMv7のmonoでコンパイルされていて、ARM64にするにはmonoをIL2CPPにする必要がありました。ここにまた壁が・・・

調べるとこんな記事が

discussions.unity.com

要はIL2CPPはインスタンスではなく、static関数からネイティブプラグインにアクセスしないとだめらしい。勉強しながらなんとかネイティブインタフェースをstaticにして、エラーも出なくなったのですが・・・・

とどめはネイティブブラグインがクラッシュしました。

これはさすがにどうにもならないなと、あきらめモード・・・・

救いの神

改めてwebRTCを調べていったところ、次のようにunity用のライブラリが存在していました。

docs.unity3d.com

UNITYのサイトなので、公式なのかはわかりませんが、信頼はおけそうです。

ただ、上記のものとはだいぶインタフェースが違い、入れ替えるというわけにはいきそうにありませんが、やってみる価値はありそうです。

ちょっとサンプルを動かしてみたのですが、確かに画像のストリーミングが簡単にできます。下記がサンプルで、左側がストリーミング側、右側が受信側で動作しています。

これならリモートで画面表示くらいなら比較的簡単にできるかもと考えたのですが、そもそもこれどうやって別のPCに分離できるんだろう…IPの設定とかしている気配もないし・・・という感じでこの辺の知識0の私にとって厳しそうです。

そんな中、上記のwebサイトをよく読むと、「Unity Render Streaming パッケージは、このパッケージを利用して、より高レイヤーの API を提供しています。」とあるではないですか。これなら私でも使えるかもと、試してみました。

docs.unity3d.com

experimentという状況ではあるようですが、チュートリアルに従ってサンプルを試したところunity内で実行して簡単に別PCでストリーミングができました。おまけにリモート操作もサンプルに含まれています。素晴らしい、初めからこれを知っていれば・・・まぁ何事も勉強です。

ここまでわかれば、あとは先日作ったPokitのプロジェクトにこれを追加すればいいだけです。

QUEST3で動いた!!

こちらが実際にPCに基板CADを立ち上げてQUEST3内で表示した画像です。右の丸の部分はつかめるようになっていて、空中でもどこでも自由に置くことができます。

Pokitの測定画面を含めたのが下記です。将来はこんな感じでデバッグしているかもしれません。

まだQUEST3から操作はできませんが、PC画面を表示するところまでは動作できました。タッチパネル風に操作もできるようにしたいところです。