Commençant par USD sur Windows

Dans le cadre d'une enquête liée aux USD

Édition Python

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

installation de python3.6

Je l'ai mis dans C: / Python36

Développer l'archive USD

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

Expérience

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.

usdview.jpg

Fonctionnement du point de vue avec alt + glisser (l, r, m)

Édition C ++

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.

Utilisez la bibliothèque intégrée

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.

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

Détails USD

Structure post-construction

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.

initialisation de la prise

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

Édition C ++ (hydra)

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 #

Note

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

Commençant par USD sur Windows
Premiers pas avec Python 3.8 sous Windows
Premiers pas avec Android!
1.1 Premiers pas avec Python
Premiers pas avec apache2
Premiers pas avec Python
Premiers pas avec Django 1
Introduction à l'optimisation
Premiers pas avec Numpy
Premiers pas avec Spark
Premiers pas avec Python
Premiers pas avec Pydantic
Premiers pas avec Jython
Premiers pas avec Django 2
Démarrer avec Python avec 100 coups sur le traitement du langage
Traduire Premiers pas avec TensorFlow
Introduction aux fonctions Python
Introduction à Tkinter 2: Button
Premiers pas avec PKI avec Golang ―― 4
Premiers pas avec Python Django (1)
Premiers pas avec Python Django (3)
Introduction à Python Django (6)
Premiers pas avec Django avec PyCharm
Premiers pas avec Python Django (5)
Bloguer avec Pelican sur Windows
Premiers pas avec Python responder v2
Introduction à Git (1) Stockage d'historique
Premiers pas avec MicroPython (sur macOS)
Premiers pas avec Sphinx. Générer docstring avec Sphinx
Premiers pas avec les applications Web Python
Premiers pas avec Python pour les classes PHPer
Premiers pas avec Sparse Matrix avec scipy.sparse
Premiers pas avec Julia pour Pythonista
Premiers pas avec Python Bases de Python
Exécutez SwitchBot avec Bleak sur Windows 10
Utilisez Tensorflow 2.1.0 avec Anaconda sur Windows 10!
Premiers pas avec Cisco Spark REST-API
Premiers pas avec les algorithmes génétiques Python
Premiers pas avec Python pour les fonctions PHPer
Premiers pas avec CPU Steal Time
Création d'un environnement Windows 7 pour une introduction à l'apprentissage automatique avec Python
Comment résoudre les problèmes de planification linéaire avec PuLP
Premiers pas avec python3 # 1 Apprenez les connaissances de base
Premiers pas avec Python Web Scraping Practice
Django + Apache avec mod_wsgi sur Windows Server 2016
Premiers pas avec Python pour PHPer-Super Basics
Premiers pas avec Python Web Scraping Practice
Premiers pas avec Dynamo de Python boto
Premiers pas avec Lisp pour Pythonista: Supplément
Premiers pas avec Heroku, déploiement de l'application Flask
Premiers pas avec TDD avec Cyber-dojo chez MobPro
Python sur Windows
Grails pour commencer
Principes de base de MongoDB: Premiers pas avec CRUD avec JAVA