Pixar社のUSD ( Universal Scene Description ) の覚書きです。
USD 21.11 段階の記載です。
公式サイト : https://graphics.pixar.com/usd/release/index.html
USD ( Universal Scene Description )は、3Dのシーンデータを受け渡しをする際の3Dモデルやシーンのファイルフォーマットになります。
USDフォーマットを軸にしていますが、
大規模シーンを管理する際のDCCツールに依存しない中間的な環境を提供する、というほうが適切かもしれません。
ファイルフォーマット以外にも、USDを制御するためのコマンドラインツールやビュワー、C++/PythonからアクセスするためのAPIなど、
環境の基盤やパイプラインになる存在です。
- DCCツール間のシーンデータの受け渡しと管理
- Mac環境、iPhoneのスマートフォンやiPadのタブレットのAR(AR Quick Look)の形状ファイルとしての使用
- NVIDIA Omniverse ( https://www.nvidia.com/ja-jp/omniverse/ )でのデータ構造
USDはオープンソースプロジェクト ( Modified Apache 2.0 License ) のため、誰でも無料で使用できます。
GitHub : https://github.com/PixarAnimationStudios/USD
以下の特徴があります。
- Linux/MacOS/Windowsに対応
- USDファイルを入出力するC++ライブラリが存在
- USDファイルを入出力するPythonラッパーが存在
- コマンドラインの「USDツールセット」 (Python必要)
以下、一部抜粋です。
デフォルトではPython経由でUSDのツール類にアクセスしたり、独自アプリに組み込めます。
別途、C++ライブラリのみでの使用でPythonに依存しないようにもできます。
その場合は、一部の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のビルド (Win)
- USDのビルド (Mac)
- NVIDIAのビルドされたライブラリを使う
- USDのライブラリを使ったC++プログラムを書く (Win)
- USDのライブラリを使ったプログラムを実行 (Win)
USDの付属のコマンドラインツールです。
これはPython経由で実行されます。
以下に使用できるツールの説明があります。
https://graphics.pixar.com/usd/release/toolset.html
なお、実行前に Pythonを使用するパスを通しておく(Win) 必要があります。
ツールの一部を説明します。
- usdcat : usdファイルの中身を見る、usdc/usdaの相互変換
- usdview : usdの構造と3D形状を見るビュワー
- usdzip : usdc/usdaやテクスチャイメージをusdz形式に変換
- USDファイルの構成
- シーン単位
- 座標系
- USDの内部構成(usda)
- usdaでのコメントの記述
- 使用できるジオメトリの種類
- ノード(Prim)の種類
- マテリアル(UsdPreviewSurface)とShader
- 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ファイルに変換