Dans le cadre d'une enquête liée aux USD
Pour le moment, il semble bon de pouvoir gérer USD en Python. Nous utiliserons la pré-construction de NVIDIA.
https://developer.nvidia.com/usd
ʻUSD 20.08, utilisez Python 3.6`.
Je l'ai mis dans C: / Python36
Développé en C: / Python36 / usd-20-08
et définissez la variable d'environnement ʻUSDROOT` ici.
usd-20-08-win64_py36_release.zip README.extrait txt
== 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
Il est nécessaire de définir PYTHONPATH et PATH. Je vais le définir localement dans le projet avec vscode.
vscode project
Créez un dossier hello_usd. Ouvrez le dossier avec vscode. Comme il s'agit généralement de python3.8, utilisez python3.6 uniquement pour ce projet et définissez les variables d'environnement pour python localement.
.vscode/settings.json
{
"python.pythonPath": "C:\\Python36\\python.exe",
"python.envFile": "${workspaceFolder}/.env",
}
Le développement de variable de .env
est le même que settings.json
, et la variable d'environnement est$ {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)
D'une manière ou d'une autre, cela a fonctionné. Pour ce que vous faites avec Python,
La combinaison de est relativement facile.
Toolset
https://graphics.pixar.com/usd/docs/USD-Toolset.html
usdview
Le package usd bin / usdview
est la commande de démarrage de la visionneuse.
https://github.com/PixarAnimationStudios/USD/blob/release/pxr/usdImaging/bin/usdview/usdview.py
Je vais modifier un peu usdview.cmd pour préparer les variables d'environnement.
usdview.cmd
set PYTHONPATH=%USDROOT%\lib\python
set PATH=%USDROOT%\bin;%USDROOT%\lib;%PATH%
@py -3.6 "%~dp0usdview" %*
J'ai essayé d'associer ʻusda, ʻusdc
et ʻusdz` avec bin / usdview.cmd.
Fonctionnement du point de vue avec alt + glisser (l, r, m)
Il était facile d'obtenir la source USD et de construire avec build_usd.py
.
build_usd.py
Construisez automatiquement avec build_scripts / build_usd.py
fourni avec la source USD.
Tout d'abord, ouvrez la fenêtre DOS à partir de l'invite de commande des outils natifs x64 pour VS2019, ce qui peut être fait en installant vc.
# cl.L'exe est sur le chemin.
> 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... ]
Accédez au dossier source usd. Exécuter après avoir passé python à 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
Il existe de nombreuses options, alors choisissez en fonction de vos besoins. Cette fois, j'ai fait ce qui suit parce que je veux faire une version de débogage liée à 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
J'ai pu le construire en 10 minutes environ.
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 #Je l'ai construit avec monolithique, donc tf, gf, sdf, usd,usdGeom etc. sont rassemblés
C:/usd_debug/lib/tbb_debug.lib
)
Cela fonctionnait si je mettais le PATH dans C: / usd_debug / bin
et C: / usd_debug / lib
au moment de l'exécution.
vcpkg
Pas d'ALEMBIC ni de Python.
./vcpkg install usd
l'a fait.
https://fereria.github.io/reincarnation_tech/11_Pipeline/30_USD_Programming/00_CPP/00_start_cpp/
Je vais essayer. J'ai pu le construire.
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 est#Puisqu'il est spécifié par pragma, pour le moment
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 #Puisque tbb provoquera une erreur de compilation, pour le moment
)
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
)
Mais ça va.
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 peut également créer des versions de débogage, j'ai donc attaché et suivi le débogueur.
La variable d'environnement PXR_PLUGINPATH_NAME
doit pointer vers l'emplacement de 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
Cela ne semble pas fonctionner si la structure des dossiers change
Cela ne marche pas encore. Erreur suivante
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:Le module spécifié est introuvable.
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:Le module spécifié est introuvable.
Pas c: / vcpkg / installed / x64-windows / lib / usd.dll
, mais c: / vcpkg / installed / x64-windows / bin / usd.dll
.
Correction du contenu de pluginfo.json
.
lib/usd/**/plulgInfo.json
"LibraryPath": "../../ndr.dll",
//Réparer
"LibraryPath": "../../../bin/ndr.dll",
Cela a finalement fonctionné.
https://github.com/microsoft/vcpkg/pull/13687
lib
usd.dll
sdf.dll
usd
plugInfo.json # PXR_PLUGINPATH_Peut être spécifié avec la variable d'environnement NAME
usd/resources/plugInfo.json
sdf/resources/plugInfo.json
plugin
usd
plugInfo.json # PXR_PLUGINPATH_Peut être spécifié avec la variable d'environnement NAME
usdShaders.dll
usdShaders/resources/plugInfo.json
Si vous voulez changer la structure des dossiers comme ceci, faites attention au contenu de la variable d'environnement PXR_PLUGINPATH_NAME
et de plugInfo.json.
Si vous faites une erreur
auto stage = pxr::UsdStage::CreateInMemory(); //le chargement du plugin échoue et devient nul
Quelque chose comme ça arrive.
// plug.dll
Plug_InitConfig
// "C:\\vcpkg\\installed\\x64-windows\\debug\\bin\\plug.dll" <= GetModule
// sharedLibPath = "C:\\vcpkg\\installed\\x64-windows\\debug\\Répertoire de référence bin
Plug_SetPaths
PXR_PLUGINPATH_NAME
sharedLibPath + PXR_BUILD_LOCATION=usd
sharedLibPath + PXR_PLUGIN_BUILD_LOCATION=../plugin/usd
Source
extras
imaging
examples
hdTiny #échantillon d'hydre
usd
examples
tutorials
Blender-2.83
Il semble que le support UsdSkel ne soit pas encore disponible, donc j'ai l'impression de ne pas pouvoir sortir un modèle avec des os.
USD Import / Export est une implémentation C ++ plutôt qu'un addon python. La liaison USD Python ne semble pas être activée. Boost-Python est ennuyeux. Reconnaître.
Unity
Il semble qu'il existe déjà des endroits susceptibles d'être utilisés jusqu'à "Skinning Mesh".
Enveloppez usd avec swig
afin qu'il puisse être utilisé à partir de C #
Inconnue
Puisque usd est une DLL C ++, il est déroutant que les fonctions ne puissent pas être facilement appelées à partir d'autres langages.
J'espère qu'il existe une interface pour C
.
Ce pourrait être une bonne idée de créer une version python
à partir de la version unitaire de swig
.
Recommended Posts