USD とは (2022 年改定版)
リニューアルに際して
USD AdventCalendar2022 1 日目は、USD についての改訂版です。
USD の記事を最初に公開したのが 2019 年の秋ごろでした。 この年の SIGGRAPH で USD を知り、学習を始めた当時に書いたものなので 今から見ると、だいぶ情報が足りてなかったり 正確でない箇所もちょいちょいあるようになってきましたので
学習から 3 年が経過した今の知識で、改めて USD とは何か?という記事を リニューアルすることにしました。
USD とは
USD とは、Universal Scene Description の略で、
シーングラフを扱うことのできる Pixar 社が GitHub 上で公開している
オープンソースプロジェクトのライブラリになります。
シーングラフ とは
「シーングラフ」という言葉になじみがない方も多いかもしれませんが これは、コンピュータグラフィックスで一般的に使用されている ツリー構造のノードやディペンデンシーグラフといった 描画に必要な要素を管理するためのデータ構造 のことです。
DCC ツールと呼ばれる 3DCG を扱うソフトウェアは、 そのソフトウェアが扱うのに最適なデータ構造を内部的に持っています。 たとえば、Maya ならば DG・DAG ノード、そしてアトリビュートとそのコネクションのよ うに それぞれ固有の構造を持っていて ツールは、これらのデータ構造を編集します。
上にも書いた通り、このシーングラフは 個々の DCC ツールが扱いやすいように設計されており、 ツールによってその構造は異なります。
そのため、たとえば Maya と Blender でデータを移動しようとすると Maya から保存した mb や ma といったデータは Maya 固有のデータ構造なので Blender で読もうとしても、当然ですが Blender はデータを解釈できず開くことができません。
もし、別の DCC ツールのデータを読めるようにしようとすると、 開きたい DCC ツール側は、保存した DCC ツールの API を使用して 1 つずつ自分自身の構造と照らし合わせて データの変換をしつつ、インポートしなければいけません。 世の中にある DCC ツールが 2 つだけならばこれでも問題ないですが、 DCC ツールにしても、ゲームエンジンにしても、無数に存在しているわけです。 ので、それぞれが都度別のシーングラフを解釈する機能を追加しようとしたら、容易に破綻してしまいます。
これを解決するには、お互いのツールが読んだり書いたりすることができる 汎用的なシーングラフ(データ構造)と、それを扱う API が必要になります。
Universal Scene Description ユニバーサル(すべてに共通の、普遍的な)なシーン記述 とある通り、USD は、ソフトウェア固有のシーングラフではなく ある程度お互いの DCC ツールが共有可能な形のシーングラフの構造を提供し 相互互換を可能にする仕組みです。
USD を導入していない場合
とはいえ、ソフトウェアを行き来するという状況は、USD が同情する以前からありました。
その場合は、お互いのシーングラフを行き来するには「FBX」や「Alembic」と呼ばれる フォーマットを使用することが多いかと思います。
現状の FBX を使用した場合を図で表すと、このようになります。 お互いの DCC ツールがFBX という、ある程度同じルールで解釈することができる状態 に 変換・解釈することで、データの行き来を可能にしています。
つまり、 相互にデータを行き来するだけ であれば、FBX でも似たようなことは実現されています。
ここまで聞くと、
すでにそういうフォーマットがあるなら、 わざわざ新しいものを使う必要なんてないじゃないか。
と思う人もいるかもしれません。 私も 3 年ぐらい前はそう思っていました。 ですが、FBX ではなく USD が一般化するのには大きな理由がありました。