Im Rahmen einer USD-bezogenen Untersuchung
Derzeit scheint es gut zu sein, USD in Python verarbeiten zu können. Wir werden NVIDIAs Pre-Build verwenden.
https://developer.nvidia.com/usd
Verwenden Sie "USD 20.08, Python 3.6".
Ich habe es in C: / Python36
eingefügt
Erweitert auf C: / Python36 / usd-20-08
und setzen Sie hier die Umgebungsvariable USDROOT
.
usd-20-08-win64_py36_release.zip README.txt Auszug
== 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
Es ist notwendig, PYTHONPATH und PATH einzustellen. Ich werde es lokal im Projekt mit vscode einstellen.
vscode project
Erstellen Sie einen hallo_usd-Ordner. Öffnen Sie den Ordner mit vscode. Da es sich normalerweise um Python3.8 handelt, verwenden Sie Python3.6 nur für dieses Projekt und legen Sie die Umgebungsvariablen für Python lokal fest.
.vscode/settings.json
{
"python.pythonPath": "C:\\Python36\\python.exe",
"python.envFile": "${workspaceFolder}/.env",
}
Die Variablenerweiterung von ".env" entspricht "settings.json", und die Umgebungsvariable lautet "$ {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)
Irgendwie hat es funktioniert. Für das, was Sie mit Python machen,
Die Kombination von ist relativ einfach.
Toolset
https://graphics.pixar.com/usd/docs/USD-Toolset.html
usdview
Das usd-Paket bin / usdview
ist der Viewer-Startbefehl.
https://github.com/PixarAnimationStudios/USD/blob/release/pxr/usdImaging/bin/usdview/usdview.py
Ich werde usdview.cmd ein wenig ändern, um Umgebungsvariablen vorzubereiten.
usdview.cmd
set PYTHONPATH=%USDROOT%\lib\python
set PATH=%USDROOT%\bin;%USDROOT%\lib;%PATH%
@py -3.6 "%~dp0usdview" %*
Ich habe versucht, "usda", "usdc" und "usdz" mit bin / usdview.cmd zu verknüpfen.
Ansichtspunktoperation mit Alt + Ziehen (l, r, m)
Es war einfach, die USD-Quelle zu erhalten und mit build_usd.py
zu erstellen.
build_usd.py
Automatisch mit build_scripts / build_usd.py
erstellen, das mit der USD-Quelle geliefert wird.
Öffnen Sie zunächst das Dos-Fenster über die Eingabeaufforderung "x64 Native Tools" für VS2019. Dies kann durch Installieren von vc erfolgen.
# cl.Die Exe ist im Weg.
> 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... ]
> 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
> 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
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 #Ausführen, nachdem Python an PATH übergeben wurde. Es gibt viele Optionen, wählen Sie also entsprechend Ihren Anforderungen. Dieses Mal habe ich Folgendes getan, weil ich einen Debug-Build für Hydra durchführen möchte. Ich konnte es in ca. 10 Minuten bauen. Da ich es mit Monolithic gebaut habe, das die gebaute Bibliothek verwendet, tf, gf, sdf, usd,usdGeom etc. sind versammelt
C:/usd_debug/lib/tbb_debug.lib
)
Es hat funktioniert, wenn ich den PATH zur Laufzeit in C: / usd_debug / bin
und C: / usd_debug / lib
eingefügt habe.
vcpkg
Kein ALEMBIC oder Python.
./vcpkg install usd
erledigt.
https://fereria.github.io/reincarnation_tech/11_Pipeline/30_USD_Programming/00_CPP/00_start_cpp/
Ich werde versuchen. Ich konnte es bauen.
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 ist#Da es vorerst durch Pragma spezifiziert ist
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 #Da tbb vorerst einen Kompilierungsfehler verursacht
)
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
)
Aber es passt.
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 kann auch Debug-Builds erstellen, daher habe ich den Debugger angehängt und verfolgt. Die Umgebungsvariable "PXR_PLUGINPATH_NAME" sollte auf die Position von "plugInfo.json" verweisen.
${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
Es scheint nicht zu funktionieren, wenn sich die Ordnerstruktur ändert
Es funktioniert noch nicht. Nächster Fehler
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:Das angegebene Modul wurde nicht gefunden.
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:Das angegebene Modul wurde nicht gefunden.
Nicht c: / vcpkg / installiert / x64-windows / lib / usd.dll
, sondern c: / vcpkg / installiert / x64-windows / bin / usd.dll
.
Der Inhalt von pluginfo.json
wurde korrigiert.
lib/usd/**/plulgInfo.json
"LibraryPath": "../../ndr.dll",
//Fix
"LibraryPath": "../../../bin/ndr.dll",
Es hat endlich funktioniert.
https://github.com/microsoft/vcpkg/pull/13687
lib
usd.dll
sdf.dll
usd
plugInfo.json # PXR_PLUGINPATH_Kann mit der Umgebungsvariablen NAME angegeben werden
usd/resources/plugInfo.json
sdf/resources/plugInfo.json
plugin
usd
plugInfo.json # PXR_PLUGINPATH_Kann mit der Umgebungsvariablen NAME angegeben werden
usdShaders.dll
usdShaders/resources/plugInfo.json
Wenn Sie die Ordnerstruktur wie folgt ändern möchten, achten Sie auf den Inhalt der Umgebungsvariablen PXR_PLUGINPATH_NAME
und plugInfo.json.
Wenn Sie einen Fehler machen
auto stage = pxr::UsdStage::CreateInMemory(); //Das Laden des Plugins schlägt fehl und wird null
So etwas passiert.
// plug.dll
Plug_InitConfig
// "C:\\vcpkg\\installed\\x64-windows\\debug\\bin\\plug.dll" <= GetModule
// sharedLibPath = "C:\\vcpkg\\installed\\x64-windows\\debug\\bin Referenzverzeichnis
Plug_SetPaths
PXR_PLUGINPATH_NAME
sharedLibPath + PXR_BUILD_LOCATION=usd
sharedLibPath + PXR_PLUGIN_BUILD_LOCATION=../plugin/usd
Source
extras
imaging
examples
hdTiny #Hydra Probe
usd
examples
tutorials
Blender-2.83
Es scheint, dass die UsdSkel-Unterstützung noch nicht verfügbar ist, daher habe ich das Gefühl, dass ich kein Modell mit Knochen herausbringen kann.
USD Import / Export ist eher eine C ++ - Implementierung als ein Python-Addon. Die USD Python-Bindung scheint nicht aktiviert zu sein. Boost-Python ist nervig. Verstehen.
Unity
Es scheint, dass es bereits einige Orte gibt, die wahrscheinlich bis zu "Skinning Mesh" genutzt werden.
Wickeln Sie usd mit swig
ein, damit es von C # aus verwendet werden kann
Unbekannt
Da usd eine c ++ - DLL ist, ist es verwirrend, dass Funktionen nicht einfach aus anderen Sprachen aufgerufen werden können.
Ich hoffe es gibt eine Schnittstelle für C
.
Es könnte eine gute Idee sein, eine "Python" -Version aus der Unity-Version von "swig" zu erstellen.
Recommended Posts