Under USD related investigation
For the time being, it seems good to be able to handle USD in Python. We will use NVIDIA pre-build.
https://developer.nvidia.com/usd
ʻUSD 20.08, use Python 3.6`.
I put it in C: / Python36
Expanded to C: / Python36 / usd-20-08
and set the environment variable ʻUSDROOT` here.
usd-20-08-win64_py36_release.zip README.txt excerpt
== Python 3.6 ==
(Tested on python 3.6.7)
- Add %USDROOT%\bin and %USDROOT%\lib to the front of %PATH%
- Add %USDROOT%\lib\python to the front of %PYTHONPATH%
- Install PySide2 and PyOpenGL to python, e.g., python -m pip install PySide2 PyOpenGL
It is necessary to set PYTHONPATH and PATH. I will set it locally in the project with vscode.
vscode project
Create a hello_usd folder. Open the folder with vscode. Since it is usually python3.8, use python3.6 only for this project and set the environment variables for python locally.
.vscode/settings.json
{
"python.pythonPath": "C:\\Python36\\python.exe",
"python.envFile": "${workspaceFolder}/.env",
}
Variable expansion of .env
is similar to settings.json
, and environment variables are $ {env: XXX}
.
.env
PYTHONPATH=${env:USDROOT}\\lib\\python
PATH=${env:USDROOT}\\bin;${env:USDROOT}\\lib;$PATH
import sys
import os
import pathlib
USDROOT = pathlib.Path(os.environ['USDROOT'])
def main(teapot: pathlib.Path):
from pxr import Usd
stage_ref = Usd.Stage.Open(str(teapot))
prim = stage_ref.GetDefaultPrim()
print(f'{prim.GetPath()}')
print(f'type: {prim.GetTypeName()}')
for child in prim.GetChildren():
print(f'{child.GetPath()}, type: {child.GetTypeName()}')
# if child.GetTypeName() == 'Mesh':
for attr in child.GetAttributes():
print(f' {attr}')
if __name__ == "__main__":
teapot = USDROOT / "tests/ctest/testUsdLuxListAPI/teapot.usda"
main(teapot)
Somehow it worked. For what you do with Python,
The combination of is relatively easy.
Toolset
https://graphics.pixar.com/usd/docs/USD-Toolset.html
usdview
The usd package bin / usdview
is the command to start the viewer.
https://github.com/PixarAnimationStudios/USD/blob/release/pxr/usdImaging/bin/usdview/usdview.py
We will modify usdview.cmd a little to prepare environment variables.
usdview.cmd
set PYTHONPATH=%USDROOT%\lib\python
set PATH=%USDROOT%\bin;%USDROOT%\lib;%PATH%
@py -3.6 "%~dp0usdview" %*
I tried to associate ʻusda, ʻusdc
, ʻusdz` with bin / usdview.cmd.
Viewpoint operation with alt + drag (l, r, m)
It was easy to get the USD source and build with build_usd.py
.
build_usd.py
Automatically build with build_scripts / build_usd.py
that comes with the USD source.
First, open the dos window from x64 Native Tools Command Prompt for VS2019
which can be done by installing vc.
# cl.The exe is in the path.
> cl.exe
Microsoft (R) C/C++ Optimizing Compiler Version 19.27.29111 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Go to the usd source folder. Execute after passing python to PATH.
> set PATH=C:\Python36;%PATH%
> C:\Python36\python.exe build_scripts\build_usd.py
usage: build_usd.py [-h] [-n] [-v | -q] [-j JOBS] [--build BUILD]
[--build-args [BUILD_ARGS [BUILD_ARGS ...]]]
[--force FORCE_BUILD] [--force-all]
[--generator GENERATOR] [--src SRC] [--inst INST]
[--build-shared | --build-monolithic] [--debug]
[--tests | --no-tests] [--examples | --no-examples]
[--tutorials | --no-tutorials] [--tools | --no-tools]
[--docs | --no-docs] [--python | --no-python]
[--imaging | --usd-imaging | --no-imaging]
[--ptex | --no-ptex] [--openvdb | --no-openvdb]
[--usdview | --no-usdview] [--embree | --no-embree]
[--prman | --no-prman] [--prman-location PRMAN_LOCATION]
[--openimageio | --no-openimageio]
[--opencolorio | --no-opencolorio]
[--alembic | --no-alembic] [--hdf5 | --no-hdf5]
[--draco | --no-draco] [--draco-location DRACO_LOCATION]
[--materialx | --no-materialx]
install_dir
build_usd.py: error: the following arguments are required: install_dir
There are many options, so choose according to your needs. This time, I did the following because I want to do a debug build related to hydra.
> C:\Python36\python.exe build_scripts\build_usd.py --debug --build-monolithic --no-tests --no-examples --no-tutorials --no-docs --no-python --usd-imaging C:\usd_debug
Building with settings:
USD source directory C:\USD
USD install directory C:\usd_debug
3rd-party source directory C:\usd_debug\src
3rd-party install directory C:\usd_debug
Build directory C:\usd_debug\build
CMake generator Default
Downloader curl
Building Shared libraries
Config Debug
Imaging On
Ptex support: Off
OpenVDB support: Off
OpenImageIO support: Off
OpenColorIO support: Off
PRMan support: Off
UsdImaging On
usdview: Off
Python support Off
Python 3: On
Documentation Off
Tests Off
Examples Off
Tutorials Off
Tools On
Alembic Plugin Off
HDF5 support: Off
Draco Plugin Off
MaterialX Plugin Off
Dependencies zlib, boost, TBB, GLEW, OpenSubdiv
STATUS: Installing zlib...
STATUS: Installing boost...
STATUS: Installing TBB...
STATUS: Installing GLEW...
STATUS: Installing OpenSubdiv...
STATUS: Installing USD...
Success! To use USD, please ensure that you have:
The following in your PATH environment variable:
C:\usd_debug\bin
C:\usd_debug\lib
I was able to build in about 10 minutes.
https://github.com/ousttrue/usd_cpp_samples
project(cpp_usd)
cmake_minimum_required(VERSION 3.0.0)
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug/lib)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug/lib)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/Debug/bin)
set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release/lib)
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release/lib)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/Release/bin)
find_package(pxr CONFIG REQUIRED)
link_directories(
$ENV{VCPKG_DIR}/installed/x64-windows/lib
)
add_executable(cpp_usd
main.cpp
)
target_include_directories(cpp_usd
PRIVATE
C:/usd_debug/include
C:/usd_debug/include/boost-1_70
)
target_compile_options(cpp_usd
PRIVATE
/wd4244
/wd4305
)
target_link_libraries(cpp_usd
PRIVATE
C:/usd_debug/lib/usd_ms.lib #I built it with monolithic, so tf, gf, sdf, usd,usdGeom etc. are gathered together
C:/usd_debug/lib/tbb_debug.lib
)
It worked if I put the PATH in C: / usd_debug / bin
and C: / usd_debug / lib
at runtime.
vcpkg
No ALEMBIC or Python.
./vcpkg install usd
did it.
https://fereria.github.io/reincarnation_tech/11_Pipeline/30_USD_Programming/00_CPP/00_start_cpp/
I will try. I was able to build.
CMakeLists.txt
project(cpp_usd)
cmake_minimum_required(VERSION 3.0.0)
set(USD_DIR $ENV{VCPKG_DIR}/installed/x64-windows)
set(BOOST_INCLUDE_DIR $ENV{VCPKG_DIR}/installed/x64-winddows/include)
# tbb_debug.lib is#Since it is specified by pragma, for the time being
link_directories(
${USD_DIR}/lib
${USD_DIR}/debug/lib
)
add_executable(cpp_usd
main.cpp
)
target_include_directories(cpp_usd
PRIVATE
${USD_DIR}/include
${BOOST_INCLUDE_DIR}
)
target_compile_definitions(cpp_usd
PRIVATE
TBB_USE_DEBUG=0 #Since tbb causes a compile error, for the time being
)
target_compile_options(cpp_usd
PRIVATE
/wd4244
/wd4305
)
target_link_libraries(cpp_usd
PRIVATE
${USD_DIR}/lib/tf.lib
${USD_DIR}/lib/sdf.lib
${USD_DIR}/lib/usd.lib
${USD_DIR}/lib/usdgeom.lib
${USD_DIR}/lib/trace.lib
)
But it fits.
Coding Error: in CreateAnonymous at line 313 of C:\vcpkg\buildtrees\usd\src\2cd10d91c8-241e05f4dd.clean\pxr\usd\sdf\layer.cpp -- Cannot determine file format for anonymous SdfLayer
Coding Error: in Open at line 994 of C:\vcpkg\buildtrees\usd\src\2cd10d91c8-241e05f4dd.clean\pxr\usd\usd\stage.cpp -- Invalid root layer
vcpkg can also make debug builds, so I attached and tracked the debugger.
The environment variable PXR_PLUGINPATH_NAME
should point to the location of plugInfo.json
.
${env:VCPKG_DIR}\\installed\\x64-windows\\lib\\usd
${env:VCPKG_DIR}\\installed\\x64-windows\\plugin\\usd
cmake/macros/Private.cmake
PXR_BUILD_LOCATION=usd
PXR_PLUGIN_BUILD_LOCATION=../plugin/usd
It doesn't seem to work if the folder structure changes
It doesn't work yet. Next error
Coding Error: in _Load at line 248 of C:\vcpkg\buildtrees\usd\src\2cd10d91c8-241e05f4dd.clean\pxr\base\plug\plugin.cpp -- Load of 'c:/vcpkg/installed/x64-windows/lib/usd.dll' for 'usd' failed:The specified module cannot be found.
Coding Error: in _Load at line 248 of C:\vcpkg\buildtrees\usd\src\2cd10d91c8-241e05f4dd.clean\pxr\base\plug\plugin.cpp -- Load of 'c:/vcpkg/installed/x64-windows/lib/usd.dll' for 'usd' failed:The specified module cannot be found.
Not c: /vcpkg/installed/x64-windows/lib/usd.dll
, but c: /vcpkg/installed/x64-windows/bin/usd.dll
.
Fixed the contents of pluginfo.json
.
lib/usd/**/plulgInfo.json
"LibraryPath": "../../ndr.dll",
//Fix
"LibraryPath": "../../../bin/ndr.dll",
It finally worked.
https://github.com/microsoft/vcpkg/pull/13687
lib
usd.dll
sdf.dll
usd
plugInfo.json # PXR_PLUGINPATH_Can be specified with the NAME environment variable
usd/resources/plugInfo.json
sdf/resources/plugInfo.json
plugin
usd
plugInfo.json # PXR_PLUGINPATH_Can be specified with the NAME environment variable
usdShaders.dll
usdShaders/resources/plugInfo.json
If you change the folder structure like this, you need to pay attention to the contents of the PXR_PLUGINPATH_NAME
environment variable and plugInfo.json.
If you make a mistake
auto stage = pxr::UsdStage::CreateInMemory(); //plugin fails to load and becomes null
Something like that happens.
// plug.dll
Plug_InitConfig
// "C:\\vcpkg\\installed\\x64-windows\\debug\\bin\\plug.dll" <= GetModule
// sharedLibPath = "C:\\vcpkg\\installed\\x64-windows\\debug\\bin reference directory
Plug_SetPaths
PXR_PLUGINPATH_NAME
sharedLibPath + PXR_BUILD_LOCATION=usd
sharedLibPath + PXR_PLUGIN_BUILD_LOCATION=../plugin/usd
Source
extras
imaging
examples
hdTiny #hydra sample
usd
examples
tutorials
Blender-2.83
It seems that UsdSkel support is not yet available, so I feel like I can't put out a model with bones.
The USD Import / Export is a c ++ implementation rather than a python addon. The USD Python binding doesn't seem to be enabled. Boost-Python is annoying. Recognize.
Unity
It seems that there are already some places that are likely to be used up to Skinning Mesh
.
Wrap usd with swig
so that it can be used from C #
Unknown
Since usd is a c ++ dll, it is confusing that functions cannot be easily called from other languages.
I hope there is an interface for C
.
It might be a good idea to make a python
version from the unity version of swig
.
Recommended Posts