アニメーションを含むUSDZを生成する


アニメーションを含まない場合は
https://qiita.com/noppefoxwolf/items/2a410ebe2db919fe236d
の記事を参考にobjからusdzへ変換するのが手っ取り早いです。

アニメーションを含む場合(今回はキーフレームの補間アニメーションを指します)、gltfからusdzへ変換する方法でうまくいきました。

Blenderでgltf形式でexportする

デフォルトではgltf形式でエクスポートする事が出来ないのでaddonを追加する

scripts/addons/io_scene_gltf2フォルダをblenderのscripts/addons/へコピー
[Blenderユーザー設定]>[アドオン]からImport-Export glTF 2.0 formatにチェックを入れて有効化する

exportからglTF2.0 (.gltf)を選択して適当な名前で保存する。
この際に、テクスチャなどの関連するファイル名に2バイト文字が含まれないように注意する。

gltfをusda形式へ変換する

を使って変換します。
以下うまくいった環境

python - macOSに入っているsystemのPython
USD - USDPythonではなく自前で後述のパッチをあててビルドしたもの

ビルドスクリプトへパッチをあてる

py_initializeで突然死んだりするのでパッチをあてる。

build_scrips/build_usd.py
def InstallUSD(context, force, buildArgs):
    with CurrentWorkingDirectory(context.usdSrcDir):
        extraArgs = []

        if context.buildPython:
            extraArgs.append('-DPXR_ENABLE_PYTHON_SUPPORT=ON')
+            if MacOS():
+                import distutils.sysconfig
+                pyLibPath = distutils.sysconfig.get_config_var('LIBDIR')
+                pyIncPath = distutils.sysconfig.get_config_var('INCLUDEPY')
+                extraArgs.append('-DPYTHON_LIBRARY=' + pyLibPath + '/libpython2.7.dylib')
+                extraArgs.append('-DPYTHON_INCLUDE_DIR=' + pyIncPath)

ビルド。適宜sudoで

python USD/build_scripts/build_usd.py /opt/local/USD

少し時間がかかる。
終わったら

set -x PYTHONPATH /opt/local/USD/lib/python
set -x PATH $PATH /opt/local/USD/bin

とかにパス通しておく

usdaへの変換

直接usdzへ変換することは出来ないようなので、一度usdaへ変換する

python gltf2usd.py -g file.gltf -o file.usda --arkit

--arkitを付けると多分最適化される。

usdzへの変換

xcrun usdz_converter file.usda file.usdz -color_map uv.png -v -a -l

適当にオプションを付けてusdz_converterでusdzへ変換する