/Documents_USD

USDについての学習メモ

USDについて

Pixar社のUSD ( Universal Scene Description ) の覚書きです。
USD 21.11 段階の記載です。

USDとは ?

公式サイト : https://graphics.pixar.com/usd/release/index.html

USD ( Universal Scene Description )は、3Dのシーンデータを受け渡しをする際の3Dモデルやシーンのファイルフォーマットになります。
USDフォーマットを軸にしていますが、
大規模シーンを管理する際のDCCツールに依存しない中間的な環境を提供する、というほうが適切かもしれません。
ファイルフォーマット以外にも、USDを制御するためのコマンドラインツールやビュワー、C++/PythonからアクセスするためのAPIなど、
環境の基盤やパイプラインになる存在です。

USDが使われるところ

  • DCCツール間のシーンデータの受け渡しと管理
  • Mac環境、iPhoneのスマートフォンやiPadのタブレットのAR(AR Quick Look)の形状ファイルとしての使用
  • NVIDIA Omniverse ( https://www.nvidia.com/ja-jp/omniverse/ )でのデータ構造

USDのビルド環境/使える機能

USDはオープンソースプロジェクト ( Modified Apache 2.0 License ) のため、誰でも無料で使用できます。
GitHub : https://github.com/PixarAnimationStudios/USD

以下の特徴があります。

  • Linux/MacOS/Windowsに対応
  • USDファイルを入出力するC++ライブラリが存在
  • USDファイルを入出力するPythonラッパーが存在
  • コマンドラインの「USDツールセット」 (Python必要)
    以下、一部抜粋です。
    • usdcat : コマンドラインでUSDファイルをバイナリ/テキスト形式で相互変換
    • usdview : USDファイルの3Dビュワー
    • usdzip : USDファイルとテクスチャリソースを1つのusdz形式に変換

デフォルトではPython経由でUSDのツール類にアクセスしたり、独自アプリに組み込めます。
別途、C++ライブラリのみでの使用でPythonに依存しないようにもできます。
その場合は、一部のUSDツールは使用できません(ライブラリを使ってアプリに組み込む機能はすべて使えます)。

USDの特徴

これはUSDフォーマットとしての仕様の一部になります。
usdviewでのビュワー表示、iOS/iPadOSでのAR、など環境によって対応されている内容が異なります。

  • 3Dシーン/3DモデルをUSDファイルとして管理
  • シーンを構成するUSDファイルは、バイナリ形式のusdcと人が理解できるテキスト形式のusdaがあり、相互変換できる
  • 複数のUSDファイル、テクスチャファイル、Audioファイルを1つのファイルにパックしたUSDZ形式
  • シーン構造を持つことができる
  • Audio情報を保持できる (usdzで使用する場合は、M4A, MP3, WAV) *1
  • テクスチャイメージを保持できる (usdzで使用する場合は、png/jpeg)
  • Meshの場合、三角形でなく多角形を保持できる
  • Meshの面の表裏を表示するためのdoubleSidedオプション (Offにする、または指定しないデフォルトだと片面表示)
  • Meshの面の法線/UV指定は、頂点ごと(vertex)か面の頂点ごと(faceVarying)かを選べる
  • 1Meshに対して複数UVの保持
  • PBRマテリアルを指定
  • Subdivision(catmullClark)指定でメッシュを動的に滑らかに再分割
  • 複数のUSDファイルに3Dモデルを分離し、ファイル参照する構造を作ることができる
  • Displacementマップの対応
  • 個々の形状ごとのTransform animation、ボーン+スキンを使用したSkeletal animationの対応

*1 : AudioについてはUSDに仕様が存在することは確認しましたが、usdviewやiOS13で再生を確認できてません。

USDとスケーラブル

ビルド情報

USDツールセット

USDの付属のコマンドラインツールです。
これはPython経由で実行されます。
以下に使用できるツールの説明があります。
https://graphics.pixar.com/usd/release/toolset.html

なお、実行前に Pythonを使用するパスを通しておく(Win) 必要があります。
ツールの一部を説明します。

USD情報

概要

再生環境による比較

C++での実装/usdaでの記述など

  • MeshやXformの移動/回転/スケールを指定
  • Meshを作成
  • Materialを作成
  • MaterialのMetallic workflow/Specular workflow
  • テクスチャの繰り返し(wrap)
  • すでに存在するパスからUsdPrimを探す
  • ノード(Xform)のアニメーション (Transform animation)
  • ボーン+スキンのアニメーション (Skeletal animation)
  • Subdivision対応
  • Displacement対応
  • テクスチャUVを移動/回転/スケールする (UsdTransform2d)
  • テクスチャのピクセル色の変換 (Shader : UsdUVTextureのbias/scale)
  • USDファイルを分離して管理
  • 複数のusdファイルとリソースを、usdzファイルに変換