アーティスト視点の主観的USDの価値

この記事は[Universal Scene Description Advent Calendar 2021](https://qiita.com/advent-calendar/2021/usd) 22日目の記事~命知らずのUSDアドカレ体験記~です。

巷で話題のUSDについて、USDなんもわからん勢の一人がアーティスト寄りかつ主観的な視点からUSDの価値を感じるところを見ていきます。

あんどうさんが初日にDCCツールにあまり触れずと断っているにも関わらず、Houdini（Solaris）寄りの視点からUSDについて触れています。
他のUSDアドカレ投稿とは趣が異なり、コードは登場しません。

Karma XPU作例（Entagma Tutorialより）
泥の中をアメノヌボコでコオロコオロとかき回し「光あれ」と唱えると生まれた豚
![スクリーンショット 2021-12-21 235757.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/4205cbb4-4d42-2625-9453-b39a026de143.jpeg)

## USDとは何か
はじめに「USDとはなんぞや」「使う必要があるのか」「使わなくてもよくない？」という素朴な疑問について。

ファイルフォーマットとして見ると、形状の座標や質感情報などを格納し、他のソフトと受け渡しが可能という点では、FBX,OBJ,ABC等と同じと言え、形状データのやり取りのみであれば、既存フォーマットとできることは変わらないと思います。


### 受け渡す要素の例

- ジオメトリ（Geom）
- マテリアル（Materialx）
- ライト（Lux）
- カメラ（Camera）

これらはFBXなどでもシーンとして扱うではないか、ではなぜ既存フォーマットではなくUSDなのか？

## 何が強みか
USDの特徴として次のようなものが強みだと思っています。

#### 差替え（派生、バリアント） 
ベースモデルから派生した類似形状モデルを複数作成する場合、特定の箇所だけ変更することでモデル全体をコピーすることなく大量のオブジェクトを効率よく作成、管理できる。

#### 読み込み（速度、効率）
変更箇所のみ読み込むことで計算結果が早く得られる。
データの内容によってフォーマット（usda（アスキー）,usdc（バイナリ））を変更することで読み込み方法を変え効率を高めることが可能。
[USDアドカレ2日目の記事「USD は手書きするもの」参照](https://qiita.com/takahito-tejima/items/ee0332bfb5c9baed3b09)

#### 柔軟性（独自アトリビュート追加）
既定のアトリビュートの他、必要に応じて独自アトリビュートを追加でき、用途に応じたカスタマイズが可能。

#### 信頼性、普及性、公開性
Pixar謹製の規格であり、長年の実戦を経て作られた信頼性がある。
Open subdivide等と同様オープンソースであることから今後も多くのDCCツールに普及していく（に違いない）。


## 何が弱みか
弱みと言える弱みは今のところないように思えます。
あえて言えば、弱みが無い程に万能である故に、

- どう使えばよいかわかりにくい点
- どれだけ効果を発揮するか使う者に依存する点

が弱みと言えるのかなと思います。

例えば先のアスキー/バイナリ読み込みの効率化についても、逐次読み込みか、全体読み込み後に必要箇所のみ変更読み込みか、場合によって適する手法が異なると思われ、あるシーンに対してどのようなアプローチをとるべきか使用する者の能力が問われます。
故にUSDのメリットはそのまま使用者に求めるハードルになっているように感じます。


## USDと仲良くお付き合いするために

メリットがわからないものを新たに学んでまで使おうという動機は起こりにくいもの。
そこで便利さを享受できるツール、Houdini(Solaris)を介してUSDに触れてみるのはどうでしょう。

SVGファイルをIllustratorで編集するような
CSVファイルをExcelで開くような
そんなイメージでUSDを扱えます。

### Solarisでコードを意識せずUSDのメリットを得る
Solarisを使うことでメリットに感じる機能をいくつか紹介します。

#### リアルタイムプレビュー

Hydraと呼ばれるレンダーデリゲートを通して各種のレンダラでプレビューができ、レンダリング後のイメージがしやすくなります。
Solaris用レンダラであるKarmaはGPU対応が始まっており、高速なプレビューがサードパーティ製レンダラなしで可能です。

##### 対応レンダラの例

Karma XPU
Redshift
ProRender
RenderMan etc.
![スクリーンショット 2021-07-14 081458 (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/2641a483-13a2-d18d-9b3c-13eefeeceaa4.jpeg)


#### Snap shot

撮影時の設定が記録され復元される
ライティングなどの反復試行が効率化できます
![スクリーンショット 2021-12-22 134511.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/250de4c8-f7e3-c32d-1bda-e4872101b6e8.jpeg)

#### Physical layout

オブジェクトの配置を物理シムのように衝突判定を用いて行える

https://twitter.com/MasterWhet/status/1250440108928405504?s=20

インスタンスのランダム生成＆配置も可能

https://twitter.com/MasterWhet/status/1510222116100063234?s=20&t=MqF0hmh08TBXWBXcVlx1jQ

#### 他にもいろいろ

ビューポート内でのインタラクティブなライティング・フォーカス調整、ショット切り替えを含むカメラ制御、派生したバリエーションの管理、インスタンスなどUSDと関連しながら便利機能があります。

https://twitter.com/MasterWhet/status/1251165856496676867?s=20

光源の位置ではなく、影になる位置からの調整も可能

https://twitter.com/MasterWhet/status/1268796183318687744?s=20&t=MqF0hmh08TBXWBXcVlx1jQ

MaterialXにアトリビュートからパラメータを取得して設定したり、Houdini的な感覚でも使えます。
![スクリーンショット 2021-12-22 114708.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/47e082b1-9a25-0209-2b8e-18953734eec5.jpeg)

![スクリーンショット 2021-12-22 114549.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233336/2bfada74-bdd1-0f96-85b8-975efd1118cf.jpeg)


## 例えるならCG業務の万能共通言語
ファイルフォーマットにはFBX,OBJ,ABC等、各地方の言語・方言があり、マテリアルについてもツールによって規格が異なるところ、USDを共通規格として使うことで変換が不要になり、パイプライン内の各工程でのデータ変更、管理も効率化されます。

"Universal Scene Description"の名の通り共通言語としてUSDが普及していくのではないでしょうか。

極めて情緒的な内容でしたが、まだ触れたことがない方に「試してみようかな」と思ってもらえたら嬉しいです。