[PYTHON] Beginnend mit USD unter Windows

Im Rahmen einer USD-bezogenen Untersuchung

Python Edition

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".

python3.6 Installation

Ich habe es in C: / Python36 eingefügt

Erweitern Sie das USD-Archiv

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

Experiment

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.

usdview.jpg

Ansichtspunktoperation mit Alt + Ziehen (l, r, m)

C ++ Edition

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.

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

USD Details

Post-Build-Struktur

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-Initialisierung

// 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

C ++ Edition (Hydra)

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

Memo

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

Beginnend mit USD unter Windows
Erste Schritte mit Python 3.8 unter Windows
Erste Schritte mit Android!
1.1 Erste Schritte mit Python
Erste Schritte mit apache2
Erste Schritte mit Python
Erste Schritte mit Django 1
Einführung in die Optimierung
Erste Schritte mit Numpy
Erste Schritte mit Spark
Erste Schritte mit Python
Erste Schritte mit Pydantic
Erste Schritte mit Jython
Erste Schritte mit Django 2
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Übersetzen Erste Schritte mit TensorFlow
Einführung in Python-Funktionen
Einführung in Tkinter 2: Button
Erste Schritte mit PKI mit Golang ―― 4
Erste Schritte mit Python Django (1)
Erste Schritte mit Python Django (3)
Einführung in Python Django (6)
Erste Schritte mit Django mit PyCharm
Erste Schritte mit Python Django (5)
Bloggen mit Pelican unter Windows
Erste Schritte mit Python Responder v2
Einführung in Git (1) History-Speicher
Erste Schritte mit MicroPython (unter macOS)
Erste Schritte mit Sphinx. Generieren Sie Docstring mit Sphinx
Erste Schritte mit Python-Webanwendungen
Erste Schritte mit Python für PHPer-Klassen
Erste Schritte mit Sparse Matrix mit scipy.sparse
Erste Schritte mit Julia für Pythonista
Erste Schritte mit Python Grundlagen von Python
Führen Sie SwitchBot mit Bleak unter Windows 10 aus
Verwenden Sie Tensorflow 2.1.0 mit Anaconda unter Windows 10!
Erste Schritte mit der Cisco Spark REST-API
Erste Schritte mit genetischen Python-Algorithmen
Erste Schritte mit Python für PHPer-Funktionen
Erste Schritte mit der CPU-Diebstahlzeit
Erstellen einer Windows 7-Umgebung für eine Einführung in das maschinelle Lernen mit Python
Erste Schritte zur Lösung linearer Planungsprobleme mit PuLP
Erste Schritte mit Python3 # 1 Grundkenntnisse erlernen
Erste Schritte mit Python Web Scraping Practice
Django + Apache mit mod_wsgi unter Windows Server 2016
Erste Schritte mit Python für PHPer-Super Basics
Erste Schritte mit Python Web Scraping Practice
Erste Schritte mit Dynamo von Python Boto
Erste Schritte mit Lisp für Pythonista: Ergänzung
Erste Schritte mit Heroku, Bereitstellen der Flaschen-App
Erste Schritte mit TDD mit Cyber-dojo bei MobPro
Python unter Windows
Grale fangen an
MongoDB-Grundlagen: Erste Schritte mit CRUD mit JAVA