Pixar USD

How to install Pixar’s USD on Windows

ChatGPT는 USD와 API에 대해서 다음과 같이 설명합니다.

Pixar USD(Universal Scene Description)는 3D 애니메이션 및 VFX(시각 특수 효과) 작업을 위한 개방형 플랫폼입니다. Pixar Animation Studios에서 개발한 이 기술은 여러 프로그램에서 작업을 쉽게 공유하고 관리할 수 있도록 도와줍니다.

Pixar USD는 새로운 방식으로 3D 애니메이션 및 VFX 작업을 구성하고 처리합니다. 이를 위해 일반적으로 다른 프로그램에서 구현되는 여러 기능, 예를 들면 모델링, 애니메이션, 조명, 머티리얼, 렌더링 등의 기능을 하나의 통합 플랫폼으로 제공합니다. 이로 인해 다양한 소프트웨어 간의 작업 흐름이 훨씬 더 원활해집니다.

Pixar USD는 오픈소스이며 무료로 사용할 수 있습니다. 다양한 크기와 유형의 회사에서 사용되며, 많은 애니메이션 및 VFX 작업을 위한 산업 표준으로 자리 잡았습니다.

Pixar USD API는 Pixar USD의 프로그래밍 인터페이스입니다. 이 API를 사용하면 C++과 Python을 포함한 다양한 프로그래밍 언어를 사용하여 Pixar USD를 프로그래밍적으로 조작할 수 있습니다.

Pixar USD API는 크게 두 가지 유형의 클래스로 구성됩니다. 첫째, 스키마(Schema) 클래스는 USD에서 사용되는 모든 데이터 유형을 정의합니다. 둘째, 스테이지(Stage) 클래스는 3D 장면을 나타내는 USD 파일을 로드하고 편집하는 데 사용됩니다.

스키마 클래스는 USD에서 사용되는 모든 데이터 유형을 나타내며, 새로운 데이터 유형을 정의할 수도 있습니다. 예를 들어, “폴리곤 메쉬(Polygon Mesh)”라는 USD 데이터 유형이 있습니다. 이 유형은 포인트, 에지, 면을 사용하여 폴리곤 메쉬의 기하학 정보를 정의합니다.

스테이지 클래스는 USD 파일에서 장면을 로드하고, 수정하고, 저장하는 데 사용됩니다. 스테이지 클래스를 사용하면 장면의 계층 구조를 검색하고, 머티리얼 및 조명 정보를 변경하며, 다양한 파일 형식(예: .usd, .usda, .usdc)으로 장면을 내보낼 수 있습니다.

Pixar USD API는 Pixar Animation Studios에서 개발되었으며, 오픈소스로 제공됩니다. 이 API를 사용하면 재사용 가능한 코드를 작성하고, 다양한 3D 그래픽 응용 프로그램을 개발할 수 있습니다.


이 포스트에서는 윈도우즈(Windows) 운영체제에서 Pixar USD를 설치하고 개발환경을 구축하는 방법에 대해서 설명합니다.

Python USD 패키지는 다음과 같이 pip을 이용하여 간단하게 설치할 수 있습니다.

pip install usd-core


참고로 다음과 같이 USD의 버전(version)을 명시하여 설치할 수도 있습니다.

pip install usd-core==22.8


Python for USD 공식 튜토리얼은 다음 link에서 볼 수 있습니다.

다음은 구(sphere) 하나를 만드는 간단한 파이썬 코드입니다. 공식 튜토리얼에서 나오는 첫 번째 예제입니다.

from pxr import Usd, UsdGeom
stage = Usd.Stage.CreateNew('HelloWorld.usda')
xformPrim = UsdGeom.Xform.Define(stage, '/hello')
spherePrim = UsdGeom.Sphere.Define(stage, '/hello/world')
stage.GetRootLayer().Save()

위의 소스코드를 test.py라는 이름으로 저장하고 다음과 같이 실행하면 HelloWorld.usda 파일이 생성됩니다.

python test.py


그리고 명령 프롬프트(Command Prompt)에서 다음과 같이 실행하면 뷰어(viewer)를 통해 이 파일의 내용을 눈으로 확인할 수 있습니다.

usdview HelloWorld.usda


하지만 아마 에러(error)가 발생하면서 실행이 되지 않을 겁니다. 필요한 라이브러리 및 실행파일들이 설치되지 않았기 때문입니다. “pip install usd-core”로 USD를 설치하면 USD Python API를 사용할 수는 있지만 usdcat, usdview와 같은 부가적인 프로그램들(USD Toolset)을 사용할 수는 없습니다. 이러한 프로그램을 사용하려면 해당 실행파일 및 관련 라이브러리들이 필요한데, 이것들은 파이썬 패키지가 아니기 때문에 별도로 설치를 해주어야 합니다.


이제 USD 라이브러리 및 실행파일들을 설치하는 방법에 대해서 설명하겠습니다.

USD는 기본적으로 github를 통해 소스코드의 형태로 배포됩니다.

따라서 소스코드를 받아서 직접 빌드해야 사용할 수 있습니다. 일반적인 빌드 방식을 채택하고 있기 때문에 cmake를 이용해서 프로젝트 파일을 만들고, 이 프로젝트 파일을 빌드하면 됩니다. 그런데 USD는 3차원 데이터를 다루는 최상위 라이브러리이기 때문에 다른 라이브러리들과 연관된 복잡한 의존성(dependency)을 가지고 있습니다. 이러한 의존성을 모두 문제 없이 해결하여 빌드하는 것은 생각보다 쉽지 않습니다.

그런데 다행스럽게도 nVIDIA에서 이미 바이너리로 빌드된 형태의 USD를 배포하고 있습니다. 이곳에서 다운받을 수 있습니다.


해당 파일을 받으면 .zip 파일 형태로 묶여 있는데 적당한 위치에 압축을 풀어줍니다. 압축을 푸는 위치는 어디여도 상관 없습니다. 여기서는 “C:\work\Pixar\USD” 위치에 압축을 풀었다고 가정하고 설명하겠습니다.



nVIDIA 덕택에 설치는 간단하게 끝났지만 추가적으로 해주어야 하는 일이 있습니다.

바로 환경변수(environment variable) 설정입니다.

우선 USD가 설치된 위치를 가리키는 환경변수를 다음과 같이 생성하겠습니다. 이 경로는 자주 사용되기 때문에 환경변수로 정의해 놓는 편이 좋습니다. 그리고 이렇게 하면 USD의 설치 위치를 바꿀 때에도 USD_INSTALL_DIR의 내용만 바꿔주면 되기 때문에 관리가 쉽습니다.


이제 다음 두 구문은 완전히 동일한 경로를 가리킵니다.

USD에서 제공하는 라이브러리 및 실행파일들을 사용하기 위해서 어떠한 환경변수들을 추가해야 하는지는 다음의 두 파일을 참고하면 알 수 있습니다.

이 파일을 열어보면 다음과 같은 내용으로 작성된 것을 확인할 수 있습니다.

  1. PYTHONPATH에 다음 2개 경로를 추가합니다.
    • %USD_INSTALL_DIR%\lib\python
    • %USD_INSTALL_DIR%\pip-packages
  2. PATH에 다음 5개 경로를 추가합니다.
    • %USD_INSTALL_DIR%\python
    • %USD_INSTALL_DIR%\pip-packages\bin
    • %USD_INSTALL_DIR%\lib
    • %USD_INSTALL_DIR%\plugin\usd
    • %USD_INSTALL_DIR%\bin
  3. PXR_MTLX_STDLIB_SEARCH_PATHS에 다음 경로를 추가합니다.
    • %USD_INSTALL_DIR%\libraries

명령 프롬프트(Command Prompt)를 열어서 %USD_INSTALL_DIR%\scripts로 이동한 다음 set_usd_env.bat를 실행하면 필요한 환경변수 설정이 적용됩니다. (set_usd_env.bat 안에서 set_usd_python_env.bat을 실행시키는 구조로 되어 있기 때문에 set_usd_env.bat 파일만 실행하면 됩니다.)

이제 다음의 명령어를 실행하면 원점에 위치한 구(sphere)를 눈으로 확인할 수 있습니다.

usdview.cmd HelloWorld.usda




그런데 이렇게 했을 때 몇 가지 치명적인 문제가 있습니다.

  1. set_usd_env.bat을 이용하여 환경변수를 설정하면 python을 실행할 때 원래 사용하던 python.exe가 아닌 nVIDIA USD가 자체적으로 가지고 있는 python.exe가 실행됩니다. (어떤 python.exe가 실행되는지는 “where python”으로 확인할 수 있습니다.)

  2. set_usd_env.bat을 실행할 때 마다 두 환경변수 PATH와 PYTHONPATH에 필요한 경로가 계속적으로 추가되어 이 두 변수의 길이가 점점 더 길어집니다.

  3. 명령 프롬프트(Command Prompt) 창을 닫으면 set_usd_env.bat을 이용하여 설정한 환경변수 내용이 모두 사라집니다.

이러한 문제를 해결하려면 set_usd_env.bat와 함께 usdview.cmd를 사용하는 대신 %USD_INSTALL_DIR%\scripts에 있는 usdview.bat 또는 usdview_gui.bat를 사용해야 합니다. 이 파일들을 열어보면 내부적으로 set_usd_env.bat를 실행하여 필요한 환경변수를 설정한 후에 usdview.cmd를 실행하는 것을 확인할 수 있습니다. 다음은 usdview_gui.bat의 내용입니다.

@echo off
setlocal

call "%~dp0set_usd_env.bat"

pushd %~dp0

if "%~1"=="" (
    call "%USD_INSTALL_DIR%\bin\usdview.cmd" "%USD_INSTALL_DIR%\share\usd\tutorials\traversingStage\HelloWorld.usda"
) else (
    call "%USD_INSTALL_DIR%\bin\usdview.cmd" %*
)

popd

exit /b

참고로 usdview.bat과 usdview_gui.bat의 차이는 다음과 같습니다.

시스템(또는 계정)의 환경변수 PATH에 %USD_INSTALL_DIR%\scripts를 추가하면 어느 경로에서나 usdview.bat와 usdview_gui.bat를 실행할 수 있습니다.

이제 어느 경로에서나 usdview.bat를 사용하여 USD 파일을 열어볼 수 있습니다.

usdview.bat HelloWorld.usda


단, USD 파일을 절대경로로 지정해 주어야 합니다.