コンテンツにスキップ

InlineUSDを使おう

Advent Calendar 2021 Houdini Apprentice 2日目は、InlineUSDを使おうです。

これとは別に開催中のUSDアドカレ 曰く、USDは手書きするものらしいので
今回は最強のUSD手書きエディタHoudini の InlineUSDを紹介しよとうと思います。

InlineUSDとは

InlineUSDとは、HoudiniのLOPで使用できるノードの1つで
その名の通りUSDAsciiを直接書いてStageをOutputしてくれるノードです。

USDA

USDは usda というアスキー形式で手書きすることができます。

https://marketplace.visualstudio.com/items?itemName=AnimalLogic.vscode-usda-syntax

VSCodeでは Animal Logic製のアドオンが公開されていて、
これを使用してVSCodeで SyntaxHighlightされた状態で書く+usdviewでプレビューといったこともできますが、
やはりTypoしたり、フォーマットを間違えたりすることが多くて
なかなか大変です。

そんな、USDを手書きする人におすすめなのがHoudiniの Inline USDです。

つかってみる

まず、Houdiniを起動してLOP(Stage)を開きます。

そして、 Inline USDノードを作成します。

作成したら、USD Source が出てくるのでこれで準備完了です。

このUSD Sourceに USD Asciiを書くと

その USD Ascii のシーングラフを Scene Graph Tree に表示することができます。

Asciiで書けることはなんでもできるので、このようにリファレンスをしたりアトリビュートを記述したりした場合も
Houdini上ですぐにプレビューが可能で

リファレンス(コンポジション)した結果を確認することができます。

SyntaxErrorがあった場合も、

エラー表示で、どこかまずいのかを表示してくれるので
心置きなくUSDを手書きすることができます。

Houdiniのプロパティを埋め込む

USDAsciiエディタとして使用するだけでもとても便利なInlineUSDですが、
この USD Source のなかに、Houdiniのエクスプレッション関数を埋め込む事が可能です。

例えば InlineUSDノードに Sample プロパティを追加します。

それをInlineUSDのUSD Sourceに chs(~~) のように書くと、この部分は
Houdiniのプロパティが展開された状態でUSDに反映されます。

HoudiniのsampleParamを変更すると、USDのAttributeも更新されるのがわかります。

1
2
3
4
def "sample"
{
    string path = "`opname(".")`"
}

ほかにも、現在のノード名をプロパティとして仕込んだりといったことが可能になります。
一応、このような操作はEditProperties でも可能なのですが、
例えば、各種MetaDataを出力できるようにしたい時などに、決まったフォーマットを準備するとかであれば、

どこかにAssetInfoを指定するノードを用意しておいて

1
2
3
4
5
6
7
8
over "`opinput(".",0)`" (
    assetInfo = {
        asset identifier = @@
        string name = "`chs("/obj/geo1/SETUP/assetName")`"
        string version = "`chs("/obj/geo1/SETUP/version")`"
    }
){
}

InlineUSDで、指定のノード以下のプロパティを埋め込みます。
USDSource内のどの部分であっても置換可能なので
入力Primに対してAssetInfoを埋め込むといったことが簡単に書くことができますので
使いまわし用としてはPythonを使用したり専用ノードを使用するより楽でシンプルにできると思います。

そのほか

InlineUSDの Allow Following Nodes to Edit New Layer は、ONの場合新しいサブレイヤーとして作成され
最も強いアクティブなレイヤーとなります。
OFFの場合は、サブレイヤーは作成されず、入力のレイヤーを編集する形になりますので、アクティブレイヤーは作成されません。

なので Inspect ActiveLayerした場合、OFFの場合

現在のノードにはレイヤーが作成されていないので、 Node has no active layer となり InspectActiveLayerは機能しません。
(おそらく、多くの場合はこのオプションを変更する必要はないはず)

usdaのフォーマットわからん!!

という方向けに
https://fereria.github.io/reincarnation_tech/11_Pipeline/10_USDTips/03_usd_format_cheatsheets/
よく使う記述のまとめ記事を過去書いたので参考にしてください。

まとめ

そんなかんじで、自分以外喜ぶ人がいるんだろうか...?と思っていたInlineUSDですが
USDAsciiEditorとして使ったり、各種PropertyをUSDの入れるためのテンプレートとして使うなど
いろいろな使い方ができることがわかったかと思います。

慣れてくると、USDAsciiはスラスラ書けて結構便利なので
VSCode等を活用しつつぜひとも使ってみてください。


最終更新日: 2021-12-11 14:57:32