USDをビルドしusdzツールのUSDを最新にする
今回最終的に利用した usdPyhon
は以下に格納しています。
はじめに
- Appleが提供している usdPythonのpythonのバージョンが3.7.9で止まっているのでOpenUSDで利用可能な最新のpythonのバージョンでUSDをビルドして利用する
利用可能なPythonのバージョンはここから確認できます。
Step1 ビルド前準備
- 3.7.9のpythonを利用していたので、
pyenv
でOpenUSDがサポートしているバージョンをインストールする
pyenv install 3.9.13
pyenv local 3.9.13
python
で、python3
を実行できるようにもしておきたいので、以下も実行
alias python="python3"
- USDの中にある、
usdView
コマンドで、pyside6
を利用しているのでインストールする -
python -m pip install pyside6
Step2 ビルドする
- 不要なものはoptionでのぞく
(ビルドに時間がかかるので辛抱する)
python USD/build_scripts/build_usd.py /path/to/my_usd_install_dir --no-examples --no-tests --no-docs --no-ptex --no-openvdb --no-draco --no-materialx --no-examples
ビルドエラー対処
- 以下のエラーが出る為、
pyOpenGL
をインストールする
PyOpenGL is not installed. If you have pip installed, run "pip install PyOpenGL" to install it, then re-run this script.
If PyOpenGL is already installed, you may need to update your PYTHONPATH to indicate where it is located.
pip install PyOpenGL
成功時のビルドログ
Building with settings:
USD source directory /Users/xxxxxx/projects/OpenUSD
USD install directory /Users/xxxxxx/projects/OpenUSD/dist
3rd-party source directory /Users/xxxxxx/projects/OpenUSD/dist/src
3rd-party install directory /Users/xxxxxx/projects/OpenUSD/dist
Build directory /Users/xxxxxx/projects/OpenUSD/dist/build
CMake generator Default
CMake toolset Default
Downloader curl
Building Shared libraries
Variant Release
Target native
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 docs: Off
Documentation Off
Tests Off
Examples On
Tutorials On
Tools On
Alembic Plugin Off
HDF5 support: Off
Draco Plugin Off
MaterialX Plugin On
Dependencies zlib, boost, TBB, MaterialX, OpenSubdiv
STATUS: Installing zlib...
STATUS: Installing boost...
STATUS: Installing TBB...
STATUS: Installing MaterialX...
STATUS: Installing OpenSubdiv...
STATUS: Installing USD...
Success! To use USD, please ensure that you have.
The following in your PYTHONPATH environment variable:
/Users/xxxxxx/projects/OpenUSD/dist/lib/python
The following in your PATH environment variable:
/Users/xxxxxx/projects/OpenUSD/dist/bin
Step3 置換
- USD/ 配下を置き換える
置き換えたあとはこちらを参照
Setp4 usdzconvertを実行
usdzconvert ./cube.glb ~/cube.usdz
エラーが出る
Input file: /Users/xxxxxx/Documents/cube.glb
Traceback (most recent call last):
File "/Users/xxxxxx/projects/USDPython/./usdzconvert/usdzconvert", line 860, in <module>
errorValue = main()
File "/Users/xxxxxx/projects/USDPython/./usdzconvert/usdzconvert", line 855, in main
return tryProcess(sys.argv[1:])
File "/Users/xxxxxx/projects/USDPython/./usdzconvert/usdzconvert", line 810, in tryProcess
ret = process(argumentList)
File "/Users/xxxxxx/projects/USDPython/./usdzconvert/usdzconvert", line 650, in process
usdStage = usdStageWithGlTF_module.usdStageWithGlTF(srcPath, tmpPath, legacyModifier, openParameters)
File "/Users/xxxxxx/projects/USDPython/usdzconvert/usdStageWithGlTF.py", line 1529, in usdStageWithGlTF
return converter.makeUsdStage()
File "/Users/xxxxxx/projects/USDPython/usdzconvert/usdStageWithGlTF.py", line 1512, in makeUsdStage
self.processNodeChildren(self.gltf['scenes'][0]['nodes'], self.asset.getGeomPath(), None)
File "/Users/xxxxxx/projects/USDPython/usdzconvert/usdStageWithGlTF.py", line 1399, in processNodeChildren
self.processNode(nodeIdx, path, underSkeleton, indent)
File "/Users/xxxxxx/projects/USDPython/usdzconvert/usdStageWithGlTF.py", line 1366, in processNode
usdGeom = self.processMesh(nodeIdx, newPath, underSkeleton)
File "/Users/xxxxxx/projects/USDPython/usdzconvert/usdStageWithGlTF.py", line 1316, in processMesh
usdGeom = self.processPrimitive(nodeIdx, gltfPrimitives[0], path, skinIdx, underSkeleton)
File "/Users/xxxxxx/projects/USDPython/usdzconvert/usdStageWithGlTF.py", line 1142, in processPrimitive
normalPrimvar = usdGeom.CreatePrimvar('normals', Sdf.ValueTypeNames.Normal3fArray, UsdGeom.Tokens.vertex)
AttributeError: 'Mesh' object has no attribute 'CreatePrimvar'
issueを確認して usdzconvert/usdStageWithGlTF.py
を修正
elif key == 'NORMAL':
- normalPrimvar = usdGeom.CreatePrimvar('normals', Sdf.ValueTypeNames.Normal3fArray, UsdGeom.Tokens.vertex)
+ primvar_api = UsdGeom.PrimvarsAPI(usdGeom.GetPrim())
+ normalPrimvar = primvar_api.CreatePrimvar("normals", Sdf.ValueTypeNames.Normal3fArray, UsdGeom.Tokens.vertex)
normalPrimvar.Set(accessor.data)
primvarName = 'st' if texCoordSet == '0' else 'st' + texCoordSet
- uvs = usdGeom.CreatePrimvar(primvarName, + Sdf.ValueTypeNames.TexCoord2fArray, UsdGeom.Tokens.vertex)
+ primvar_api = UsdGeom.PrimvarsAPI(usdGeom.GetPrim())
+ uvs = primvar_api.CreatePrimvar(primvarName, Sdf.ValueTypeNames.TexCoord2fArray, UsdGeom.Tokens.vertex)
uvs.Set(newData)
上記修正で、 usdzconverter
が正常に終了することを確認。
- ただ以下のエラーが出てる(そもそもglbファイルの作りが良くありませんでした。)
Input file: /Users/xxxxxx/Documents/cube.glb
Output file: /Users/xxxxxx/Documents/cube.usdz
MaterialBindingAPIAppliedChecker
usdARKitChecker: [Fail] /Users/xxxxxx/Documents/cube.usdz
Discussion