Skip to main content

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 も更新されるのがわかります。

def "sample"
{
string path = "`opname(".")`"
}

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

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

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 のフォーマットわからん!!

という方向けに

よく使う記述のまとめ記事を過去書いたので参考にしてください。

まとめ

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

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