AssetResolution(1) - usdResolverExample
Universal Scene Description AdventCalendar2021 15 日目は、 USD の Asset Resolution (アセットパスの解決)についてです。
AssetResolution とは
AssetResolution とは、その名の通りアセットの実際のリソースまでのパスを 解決するためのプロセスのことを指します。
Stage Layer Spec の記事に書いた通り、USD は1つのファイルではなくて複数の(それは多くの)レイヤーによって 1つのステージが構成されています。 つまり、あるレイヤーの中には別のレイヤーへのパスが記述されているはずです。
例えば、Kitchen_set.usd を見ると、中で Reference されているモデルは ./assets/~ といった 現在開いているファイルからの相対パスで記述されていて、 子の相対パスで記述されたアセットのパスを「現在のファイルから見た相対パス」として 探し出し、その結果をロードしています。 あるいは、 PXR_AR_DEFAULT_SEARCH_PATH という環境変数が指定されている場合は Windows の PATH と同じように、DEFAULT_SEARCH_PATH で指定されたパス以下を検索して 見つかった場合は、そのフォルダ以下にあるファイルを使用するようになっています。
図に表すと、このようになります。
デフォルトの場合はその名の通り「ArDefaultResolver」と呼ばれるアセットのパス解決のための 機能が実装されています。 この ArDefaultResolver は、相対パスで記述されたアセットのパスを検索し 実際のリソースまでのフルパスを返します。 これによって、相対パスで記述されて いてもフルパスで表示ができるようになっています。
このように、ある入力のパス(相対パス)からリソースまでのフルパスを検索して その結果を返す機構のことを「Asset Resolution」と呼び、 そのためのインターフェースを AssetResolver と呼びます。 デフォルトの ArDefaultResolver も ArAssetResolver から継承され 実装されたプラグインです。
このパスを解決するためのプロセスは、独自にカスタマイズすることが可能です。
具体的な使い方を見る
といっても、これだけでは使用イメージがつかみにくいと思いますので 今回は、USD リポジトリ以下にあるサンプルプラグイン usdResolverExample をみながら どのようなものか、そしてどう使うのかを説明していこうとおもいます。
ビルドする
まずは USD をビルドします。
git clone https://github.com/PixarAnimationStudios/USD.git
どこか適当なフォルダにクローンしておきます。 そして、
環境変数の PATH に、Python の Path を通しておきます。 Python のバージョンは、3.7.9あたりを入れておきます。 なお私は、3.7.7 ですが多分それでも大丈夫でしょう。
VisualStudio2017 を事前にインストールしておいて、開発者コマンドプロンプト for VS 2017 をクリックします。
pip install PyOpenGL PySide2
忘れずに pip で PyOpenGL と PySide2 を入れておきましょう。
python build_scripts/build_usd.py <インストールするフォルダ>
あとは、これを実行して30分ほど待ちます。 Python は、環境変数で指定されている PATH の Python でビルドされるので 今回なら 3.7.7 で使用できる USD ができあがります。
はじまって
無事終 わると、このような表示になります。
ビルドが完了したら、インストール先のパスを環境変数に指定します。 しかし困ったことに、この環境変数を指定してしまうと Houdini がいろいろおかしなことになってしまうので
set PATH=C:\USD\lib;C:\USD\bin;%PATH%
SET PYTHONPATH=C:\USD\lib\python;%PYTHONPATH%
cmd /k
私はこのような Bat を用意してそこから起動するようにしています。 (あるいは VSCode の環境変数で指定)