見出し画像

PanoTree で仮想空間の映えスポットを探してみた

クラスターメタバース研究所が公開した、VR 空間内の写真撮影スポットを自動探索するソフトウェア PanoTree を動かしてみた記録


はじめに

こんにちは。日頃メタバースで遊んでいるやまちゃんです。
いつもいるメタバースプラットフォーム cluster の運営元、クラスター株式会社のメタバース研究所が「PanoTree」という研究成果のソフトウェアとペーパーを公開しました。

このソフトは Unity の 3D シーン内から人が撮りそうな写真構図を自動推定してくれる、つまり「映えスポットを見つけてくれる」ものらしいです。
cluster で色々なワールドを作ったり他の人のワールドを巡ったりしつつ、撮る写真の構図にいつも悩んでいる私としては興味深い内容だったので、さっそく動かしてみました。

動かしてみる

私の環境で、2024/06/03 時点にて成功した内容をそのまま記載しています。
ひょっとしたら不要なステップなどもあるかもしれませんがご容赦ください…。

使用した PC 環境は以下の通りです。
Python 3 と GPU ドライバは予め入っているものになります。Python のバージョンがドキュメントで指定されてるものと合ってないけど動いているので気にしない。

$$
\begin{array}{|c|l|} \hline
\text{CPU} & \text{AMD Ryzen 9 3900X} \\ \hline
\text{GPU} & \text{NVIDIA GeForce RTX 4070 Ti SUPER} \\ \hline
\text{RAM} & \text{32 GB} \\ \hline
\text{OS} & \text{Microsoft Windows 10 Pro 22H2} \\ \hline
\text{GPU ドライバ} & \text{551.61} \\ \hline
\text{Python} & \text{3.11.2} \\ \hline
\end{array}
$$

事前準備:必要条件を整える

PanoTree の成果物ページの README、PrerequisitesSetup の項目を見ると Unity と Python が要ることが示されています。
また、明示的には書いていませんが Poetry と Git も必要です。

  • Unity 2021.3.2f1 を入れる

    • Unity Hub を起動する。

    • 以下のページを開いて「INSTALL」をクリックする。Unity Hub 側でインストール画面が立ち上がるので実行する。
      https://unity.com/releases/editor/whats-new/2021.3.2

      • CCK と異なり、Android Build Support は不要なのでチェックを消した。

      • 自環境には既に Visual Studio 2022 が入っているため、Visual Studio 2019 にチェックがついていると古いバージョンのインストール警告が表示されたのでチェックを消した。

    • 一旦 Unity Hub を終了する。

  • Git を入れる

    • 構成管理ツール。ザックリ言うとソフトウェアをインターネットから取ってくるのに使う道具

      • 入れておかないと、次のステップで Unity プロジェクトを開こうとしたときにエラーになる

    • PortableGit を導入した
      https://www.git-scm.com/download/win

      • C:\usr\local\Git に入れた

    • インストールディレクトリの直下に cmd というディレクトリがある。ここに必要なコマンド類があるので、パスを通す

      • ユーザー環境変数 PATH に C:\usr\local\Git\cmd を追加した

  • PanoTree の成果物を取得する

    • 成果物ページの右上の方にある緑色の「Code」というボタンの右側の▼をクリックして「Download ZIP」から落とした

    • せっかく Git 入れたので git clone https://github.com/cluster-lab/panotree.git してもいいし、本来はそうすべきだと思う…。

  • Poetry を入れる

    • Python のライブラリを管理するツール

    • 下記の「Manually (advanced)」の手順を Windows 向けに改変して実行
      https://python-poetry.org/docs/#installing-manually

      • コマンドプロンプトを開いて、以下のコマンドを実行した

> cd (ZIP を展開して出てきた panotree-main ディレクトリがある場所)
> python -m venv venv
> venv\Scripts\python -m pip install -U pip setuptools
> venv\Scripts\python -m pip install poetry
  • Poetry で依存関係ライブラリを入れる

    • 引き続き、コマンドプロンプトで以下のコマンドを実行した

> venv\Scripts\activate
(venv) > cd panotree-main
(venv) > poetry install
  • Unity でサンプルシーンを開く
    (README の Prepare the Scene に相当)

    • 「プロジェクト」タブで、上の方の「追加」ボタンの右にある「▼」→「ディスクからプロジェクトを加える」を選択する

    • panotree-main/unityproject を選んで追加する

      • ディレクトリ名がそのままプロジェクト名になるので、手元ではプロジェクト追加の前にディレクトリを PanoTree だと分かるようにリネームした。

    • Assets/ClusterLab/Scenes にある、Main というシーンを開く

ここまでで、Unity Editor の画面と、コマンドプロンプトの画面がそれぞれ以下のようになると思います。
(下図はビューの配置などをカスタマイズしているので、多少異なる見た目だと思います)

Unity Editir の画面
コマンドプロンプトの画面

サンプルシーンで実行してみる

ここまで出来たら、以下の手順で撮影ポイントの自動探索を実行できます。
(README の Explore に相当)

  • Unity Editor をプレイ状態にする

    • この時、Game ビューが常に表示されている状態にする必要があるとのこと。探索状況は Scene ビューに出るので 2 つを並べて表示しておくとよい

  • コマンドプロンプトで、python panotree_explorer.py --device cuda --api_host localhost を実行する

    • 以下のような画面が出る

panotree_explorer.py を起動した状態
  • E キーを押す

    • 探索が始まる。コマンドプロンプトに Exploring NNN/300… と表示され、Unity Editor 側では Scene ビューに黄色い箱や矢印が描画されていく

実行中の様子
  • しばらく待って、コマンドプロンプトの画面右側に Done. と表示されたら終了

    • 私の環境では、300 step の実行に 1 分程度掛かる

  • 結果を見る
    (README の Node Visualization に相当)

    • Play モードのまま、Hierarchy から Main → TreeRoot → 0000-00000001 を選ぶ

    • Game ビューの左上にカメラ構図の一覧がスコアが高い順に表示される。マウスオーバーすることで拡大表示される

左上の構図一覧から、スコア 2 位(Index: 1)にマウスオーバーして拡大表示している様子

VRAM 使用量は Unity Editor と Python が起動している状態でのタスクマネージャー読みで 2.5 GB 程度なので、cluster が動作する程度の NVIDIA 製 GPU なら何でも動くと思われます。

なお一応 CPU でも実行してみましたが、12 コア・24 スレッドの Ryzen 9 3900X で 300 step の処理に 20 分以上掛かったので、GPU はあった方がいいです…。

自作ワールドに適用してみる

手順の概要を箇条書きで記載します。

なお前提としてワールドのデータを Unity シーンの形で持っている必要があるので、自分で作ったワールドや、販売されているワールド丸ごとのアセットなどが対象となります。
「こないだ見掛けたあのワールド、綺麗だから撮影ポイントを探索させてみたい!」といったことは少なくとも 2024/06 時点ではできません。

作業手順

  • CCK 側の Unity Editor で、自作ワールドのシーンを右クリックして「パッケージをエクスポート」する

  • PanoTree 側の Unity Editor で、

    • エクスポートした .unitypackage を Unity Editor にドラッグ&ドロップしてインポートする

    • インポートした自作ワールドのシーンを開いて、

      • CCK 固有のスクリプトが含まれるオブジェクトが破損状態になっているので、コンポーネントを消すかオブジェクトごと削除する

      • ワールド全体を単一の prefab にする

        • 破損状態のオブジェクトが残ったままだとここでエラーになる

          • このとき破損しているオブジェクトの名前が出るので、怒られた場所を一個ずつ直していくのもアリ

    • シーン ClusterLab/Scenes/Main を開き、別名で保存する

    • 別名保存したシーンを開いて、

      • Hierarchy から、World の中にあるサンプルオブジェクトを削除する

      • さきほど作成した prefab を World 以下に配置する

      • prefab の Inspector で、撮影したい範囲を示すような Box Collider を付ける

      • prefab の子要素の Inspector で、不要なコライダを削除する

        • 子要素のコライダも撮影範囲に含まれてしまうみたいなので

        • 特に Terrain Collider は悪さするので外した方がいい

      • Skybox や Baked Lightmap、Fog などの設定が消えてしまっているので設定し直す。ベイクは再度行う

    • あとはサンプルシーンでの実行と同様

以上の手順で、こんな感じの結果を得られます。

『青の洞窟 - The Blue Cave』での実行結果。やっぱりゴッドレイが射してるとこ撮るよね

未解決の課題

  • 一部のシェーダがエラーを起こしており質感が再現されない

    • 水面、岩石の表面のツヤなどが多少変化している

    • 構図を決定するだけならそこまで影響ない?

  • 一部のワールドで極端に広い範囲を探索してしまい、まともな結果が出ない

    • 地下・海底はせいぜい y = -5 m 程度までしかなく、探索範囲コライダは y = 0 m より上にしか設定していないのに、y = -1000 m まで探索してしまうケースがあった

  • アスレチックゲームワールドなど、一部のワールドだと変な結果が出る

    • 何もない床を真上から撮った構図ばっかりになったり

    • たぶん PanoTree の特性がそういうものだと思われる

      • ペーパーの 3. Dataset を見ると分かるが、教師データからアバターが写っている写真は除外されている

      • ゲームワールドで撮られる写真の大半はゴール地点だが、ゴールしたことの証明でもあるため写真には大抵アバターが含まれる

      • そういった画像は学習データから除外されるため、比較的ゲームワールドに弱い可能性がある

    • (2024-06-05 09:33) 上記を訂正。
      下記引用箇所の直後に、アバターの影響を除外するために改めてアバター無しの状態で写真を再撮影している旨の記載がある(引用 2 つめ)。
      なので「誰もいないゴールの写真」が学習データに入っているはず。

In VR scenes, photos taken by humans often include avatars that can affect the evaluation of photography spots. When creating VR worlds and identifying photography spots, it is crucial to evaluate these spots without the influence of avatars. Therefore, images used for training the scoring function of photography spots need to exclude avatars.

PanoTree: Autonomous Photo-Spot Explorer in Virtual Reality Scenes
arXiv:2405.17136

To achieve this, we utilize the accumulated photography metadata on the VR platform Cluster to recreate the shooting conditions and retake the photos without the avatars

PanoTree: Autonomous Photo-Spot Explorer in Virtual Reality Scenes
arXiv:2405.17136

まとめ

仮想空間上の写真撮影ポイント自動探索器 PanoTree を Windows 10 の PC で動かしてみました。
Cluster Creator Kit に組み込まれて映えスポットを提示してくれるとか、ワールドクラフトでのサムネイル設定時に候補画像の選択肢が出てくるとか、そういう感じで気軽に使えるようになると体験が大きく変わりそうですね!

この記事が気に入ったらサポートをしてみませんか?