PanotreeをWindows+WSLで実行して、Unityの3Dシーンの静止画カメラアングルを自動生成する
 Dolphiiiin
Dolphiiiinこのスクラップは何?
クラスタ―メタバース研究所2024年5月31日に発表した、PanoTreeをWindows+WSL環境で実行した記録です。
PanoTree
 Dolphiiiin
Dolphiiiin実行環境
- Windows11 Pro 23H2
- Unity 2021.3.2f1
- WSL2 (Ubuntu)
- Python 3.10.12 (推奨はPython 3.10.13らしい) (wsl上で実行)
- poetry 1.8.3 (wsl上で実行)
- Nvidia RTX 4070
WSLの環境構築はの詳細は割愛しますが、PowerShellでwsl --installと打ってインストールできます。
WSLを使用しないで、Windows環境のみでの実行は可能?
PoweShellを使用してPythonの環境高構築を試しましたが、できませんでした。後のpoetry installでこけます。
 Dolphiiiin
Dolphiiiinサンプルプロジェクトの用意
UnityのサンプルプロジェクトがgithubにあるのでWindows上でcloneします。
> git clone https://github.com/cluster-lab/panotree.git
 Dolphiiiin
Dolphiiiin初期セットアップのためのWSL内での環境構築
WSLを開いて、poetryをインストール
$ curl -sSL https://install.python-poetry.org | python3 -
インストールしてもPATHは通ってないので、インストールのログの最後当たりに書いてあるコマンドを実行する
Add `export PATH="/home/user/.local/bin:$PATH"` to your shell configuration file.
この場合はexport PATH="/home/user/.local/bin:$PATH"を実行
PATHを通したのでとりあえず↓を実行しておく。
$ source ~/.bashrc
$ source ~/.bash_profile
poetry --versionを叩いて、バージョンが返ってくれば成功。
参考
 Dolphiiiin
Dolphiiiin
 poetry install
cloneしたフォルダにcdする。
今回は、Windows環境の、D:/panotreeなので、WSLでは/mnt/d/panotreeにcd
$ cd /mnt/d/panotree
poetry installを実行する。
$ poetry install
 Dolphiiiin
DolphiiiinUnityプロジェクトの読み込み
クローンしたフォルダの、panotree/unityprojectをUnityHubから開く。
 UniRxが導入できないエラーが発生する
manifest.jsonでUniRxのソースとして、github.com/ClusterVR/UniRx.gitが指定されているが、どうやらプライベートリポジトリのようで、エラーになる。
いったんSafeModeに入って、エラーになっているUniRXをパッケージマネージャーからRemoveして、UniRxをアセットストアからインポートする。
 Dolphiiiin
Dolphiiiinサンプルシーンを開く
Assets/ClusterLab/Scenes/Main.unityを開いて、Play
panotree_explorerを実行する
IPアドレスを調べる
WindowsとWSLの間のネットワークのIPアドレスが必要。
コマンドプロンプトで、ipconfigを実行して、イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):のIPv4を調べる。
> ipconfig
WSLでpanotree_explorerを開く
クローンしたフォルダの、panotreeフォルダで、以下のコマンドを実行する。<Address>は、さっき調べたIPアドレスを入れる。
poetry shell
python panotree_explorer.py --device cuda --api_host <Address>

実行できるとこういう画面になる
 Dolphiiiin
Dolphiiiin
 エラーUnityのコンソールに、SocketException: 要求したアドレスのコンテキストが無効です。と出る PR#2で修正済み
SocketException: 要求したアドレスのコンテキストが無効です。と出る自分の環境に依存した問題ではない可能性? 要検証
これは、自分のイーサネット環境が複雑だから出てるエラーなのかもしれない。vpnクライアントとか入ってるから、そこでこけているのかも。
今回は、スクリプトを修正して、WSLとWindows間の通信には、vEthernetではなく、tailscaleというvpnトンネルを使いました。
スクリプトの修正
Assets/ClusterLab/Scripts/Infrastructure/Server/AgentServer.csの64行目を変更します。
@@ -61,7 +61,7 @@
         {
             listener = new HttpListener();
             listener.Prefixes.Add("http://" + domain + ":" + port + "/");
-            var localIPs = GetLocalIPs().ToList();
+            var localIPs = new List<string> { "100.***.***.**" };
             localIPs.ForEach(ip => listener.Prefixes.Add("http://" + ip + ":" + port + "/"));
             localIPs.ForEach(ip => Debug.Log(ip));
             listener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
@@ -200,4 +200,4 @@
今回はTailscale上でのローカルマシンのIPを明示的に指定しました。
panotree_explorerを実行するときには、スクリプトで指定したアドレスを使用しました。
 Dolphiiiin
Dolphiiiin実行する
panotree_explorerを実行して、Unityがプレイモードになっていることを確認したら、panotree_explorerの画面上でEを押して処理を開始します。

 Dolphiiiin
Dolphiiiinpanotree_explorerのログに、Doneと表示されたら、処理は終了です。
プレイモードのまま、ヒエラルキーのTreeRootの中のオブジェクトを選択して、撮影した写真をプレビューする画面になります。

 Dolphiiiin
Dolphiiiinシーンをカスタマイズする
Worldオブジェクト以下にオブジェクトを配置して、BoxColliderを使って、カメラの設置範囲を指定します。(サンプルのオブジェクトを参考にする)
アセットを使って実行してみた
使用アセット





