はじめに
フリーランスのエンジニア 佐藤です。
95年頃からCG業界に携わってきましたが、現在はUnityやUnrealEngineなどのゲームエンジンを使用したリアルタイムグラフィックスとARをはじめとしたXRコンテンツ、AWS/GCPなどクラウドインフラを中心に活動しています。
MoARではemocのテクニカルディレクターとして参加させて頂き、KASSENを中心としたCGチームの制作したアセットやアニメーションデータと実装側エンジニアの橋渡しとして、仕様を確認したり検証を担当させて頂きました。
今回は前編としてMayaとUSDZ作業環境の構築についてまとめており、次回の後編MayaとUSDZでSceneKit(2)ではトラブルシューティング(Tips) をまとめています。
作業環境
MoARのARコンテンツはiOSネイティブアプリ(App Clip対応)でAppleのSceneKitで描画することになったので、Xcodeとのやりとりが多くなることが予想されるためMacbook Pro 14(2021)を使用することにしました。
Maya
モデルやアニメーションなどCGデータを制作するDCCツールはいつものMayaですが、納品形式がUSDZ形式になったのでUSD関連機能が比較的最近搭載されている事を考慮して作業時の最新版だったMaya 2023.1とUSD for Maya 0.19.0プラグインを使用してUSDZファイルをエキスポートしています。
Autodesk MayaUSD GitHub repository
USD for Maya 0.19.0を使用していましたが、現在は0.20.0までリリースされています
エキスポートのオプションについての補足
.usd File Format
テクスチャーも含めて1つのファイルにまとめたUSDZファイルを使用しています。
エキスポートするファイル名の拡張子は手動でファイルネーム.usdzと記入する必要があります。
Blend Shapes
ブレンドシェイプアニメーションが必要だった場合はチェック
Visibility
チェックするとMaya上で設定した表示/非表示はusdviewでは確認出来ますが、Xcode上では再現出来ません。
Merge Transform and Shape Nodes
TransformノードとShapeノードのDAG階層をまとめて1つのノードにする場合はチェック
今回はブレンドシェイプの扱いに注意が必要だったのでチェックを外してます。
Include Namespaces
Mayaのネームスペースを出力するとノード名が長くなるのと、Xcode側の対応状況が怪しかったのでチェックを外してます。
ネームスペースを使用した場合はemoc_S:foot_Lといった命名規則になりますが、このままネームスペースを外すとfoot_Lとノード名が他のキャラと被ってしまうので、emoc_S_foot_Lのようにプレフィックスを使用してユニークなノード名となるようにしています。
大量にある場合はコマンドラインからバッチ処理で出力することも出来ますが、今回は1つのファイルにまとめるのでGUIからエキスポートしています。
USD Toolset
USDのリポジトリにはusdviewをはじめUSD関連の便利なツールが含まれています。
22.08を使用していましたが、現在は22.11までリリースされています
次の2つの理由でusdviewで事前にプレビューするようになりました。
● Xcodeでは再生と停止だけで途中から再生したり出来ないのでシーン制作が進むとアニメーションの再生確認が辛くなった
● USDZファイルをMayaからエキスポートした時か、Xcodeにインポートした時の問題か切り分けが必要になった
Python環境の構築とM1 Macにインストールするのに特殊なオプションが必要だったので、USD Toolsetのセットアップ(M1 Mac用)として下記にまとめてあります。
Xcode 14
最終的にXcode上にインポートされたUSDZファイルをSceneKit Scene Editorで確認します。
特にコードを書かなくても描画やアニメーションを確認出来ますが、前述の問題により後半からはusdviewで事前にプレビューしています。
USD Toolsetのセットアップ(M1 Mac用)
USD ToolsetはWindowsやLinuxだけでなくMacにも対応していますが、今回使用したMacbook Pro 14(2021)はApple SiliconのM1プロセッサーを搭載しているため一工夫必要でした。
参考にしたインストール方法はこちらになります。
https://rhonabwy.com/2022/08/16/native-support-for-usd-tools-on-an-m1-mac/
まずPython環境についてはMac OS 12.3 Montereyからpython2.7が削除されたりと色々と面倒なことになっています。
Python2.x系と3.x系の互換性問題とライブラリの依存関係を考慮しないpipコマンドの組み合わせはカオスな上に、各ソフト毎に必要なPythonとライブラリのバージョンが異なる場合が多く、ローカルインストールしたPython環境で対応するのが難しくなっています。
という事で今回は目的別にPython環境を切り替えて使い分けられるようにMiniconda(Anacondaの軽量版)を使ってPython仮想環境を用意しています。
MinicondaのGitHubからarm64 (Apple Silicon) 用のインストーラー(Shell Script)をダウンロード
ブラウザでhttps://github.com/conda-forge/miniforge から Miniforge3-MacOSX-arm64.sh をダウンロード
もしくはターミナルからwgetやcurlでダウンロードしても構いません
$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh
ターミナルを開きMinicondaをセットアップ
$ sh ~/Downloads/Miniforge3-MacOSX-arm64.sh #ダウンロードフォルダーにダウンロードした場合
インストーラーを実行すると、enterの入力とライセンスの承諾、Minicondaのインストール先の入力が求められますので適時対応します。
Minicondaのインストール完了後、condaコマンドでPython仮想環境を作成
$ source /opt/miniforge3/bin/activate #condaを有効にして動作確認します
(base)$ conda deactivate #プロンプトに(base)と出ればOK、condaを終了して元に戻ります
$ conda update conda -y #conda自体をアップデートする
$ conda update --all #パッケージをアップデートする
$ conda create -n USD #今回の作業用のPython仮想環境を作成する
$ conda activate USD #作成したPython仮想環境を有効にする
(USD)$ #プロンプトが切替わればOK
(補足)作業当時に使用していたOSとPythonのバージョン
● MacOS 12.6
● Python 3.10.6.final.0
USD Toolsetに必要なライブラリを追加
(USD)$ conda install pyopengl
(USD)$ pip install pyside6
PixarのGitHubからcloneしてビルドする
(USD)$ git clone https://github.com/PixarAnimationStudios/USD
(USD)$ cd USD
(USD)$ git checkout release
(USD)$ git pull
(USD)$ python build_scripts/build_usd.py /opt/USD --build-args USD,"-DPXR_PY_UNDEFINED_DYNAMIC_LOOKUP=ON"
Building with settings:
USD source directory /Users/satoy11/build/USD
USD install directory /opt/USD
3rd-party source directory /Users/satoy11/USD/src
3rd-party install directory /opt/USD
Build directory /Users/satoy11/USD/build
CMake generator Default
CMake toolset Default
Downloader curl
Building Shared libraries
Variant Release
Imaging On
Ptex support: Off
OpenVDB support: Off
OpenImageIO support: Off
OpenColorIO support: Off
PRMan support: Off
UsdImaging On
usdview: On
Python support On
Python Debug: Off
Python 3: On
Documentation Off
Tests Off
Examples On
Tutorials On
Tools On
Alembic Plugin Off
HDF5 support: Off
Draco Plugin Off
MaterialX Plugin Off
Dependencies zlib, boost, TBB, OpenSubdiv
Build arguments USD: -DPXR_PY_UNDEFINED_DYNAMIC_LOOKUP=ON
STATUS: Installing zlib...
STATUS: Installing boost...
STATUS: Installing TBB...
STATUS: Installing OpenSubdiv...
STATUS: Installing USD...
Success! To use USD, please ensure that you have:
The following in your PYTHONPATH environment variable:
/opt/USD/lib/python
The following in your PATH environment variable:
/opt/USD/bin
最後の行で--build-args USD,"-DPXR_PY_UNDEFINED_DYNAMIC_LOOKUP=ON"
とあるのがM1 Macにインストールする場合の注意点となります。
環境変数を登録する
# .zshrc
source /opt/miniforge3/bin/activate
export PATH=/opt/USD/bin:$PATH
export PYTHONPATH=$PYTHONPATH:/opt/USD/lib/python
ここではzshを使用した場合の例となりますが、シェルの設定ファイルに環境変数を登録します。
usdviewの実行
(USD)$ usdview <File Name>.usdz
souceするか、シェルを立ち上げなおしてからUSD Toolsetのコマンドが起動すれば完了です。
USD Toolsetにはusdviewの他にもusdcatやusdzip、usdcheckerなどの便利なコマンドが揃っています。
次回は…
次回はMayaとUSDZでSceneKit(2)でトラブルシューティング(Tips)などまとめています。