メインコンテンツまでスキップ

BifrostUSD基本編

今回は、MayaBifrost を使用した USD 編集について、基本的な手順や構造などを理解していきたいと思います。

起動する​

まず、Bifrost を起動してみます。
起動するには、Window から BifrostGraphEditor を開きます。

開いたら、CreateGraph で新しく Graph を作ります。

作成すると、このような bifrostGraphShape がシーン内に作成されます。

この状態からスタートします。

Bifrost と Maya と USD の関係性を理解する​

まず、操作していくうえで「Bifrost」「Maya」「USD」のそれぞれが
どのような関係性になっているのか見ていきます。

Bifrost は、Houdini の HDA や Subnet のように Graph 内で何かしらの処理をノードを使用して
記述することができます。
今回は USD の処理を中心に試しますが、USD 以外のことももちろんできます。

USD を操作したい場合は、USD に必要なノードが揃っています。

つまり、3 つの中で「処理の記述」をするのが Bifrost の役割になります。

Bifrost から USD を出力する​

前回の記事で、Maya での USD には「Maya の世界」と「USD の世界」が存在すると書きました。
この考え方は Bifrost を使用した場合にも非常に重要になる概念です。

まずは Maya を忘れて Bifrost と USD で考えます。

add_to_stage ノードを Output に接続します。

結果、UsdProxyShape が作成され、bifrost.usd が自動的に作成されます。
この UsdProxyShape とは「USD の世界」です。
つまり、Bifrost で編集した情報が USD の世界として出力され「bifrost.usd」という形で
レイヤーに出力されているわけです。

さらに DefineMesh ノードを使用して、MeshPrim を追加します。
AddToStage ノードは、指定の Input の PrimDefinition(定義)を Stage に追加する効果なので

USDMesh 内に MeshPrim が生成されました。

Maya から Bifrost に読み込む​

以上の手順だと、Bifrost 起点で USD にデータを出力できましたが
当然それだけではなく Maya から Bifrost に Mesh やその他いろいろなノードを
読み込むことができます。

試しに、Maya 側で Sphere を作成し、これを GraphEditor の UI にドラッグ&ドロップします。

これで、Bifrost に Maya の Mesh を持ち込むことができました。

この Shape を、Define Mesh ノード > Add to Stage ノードとつないで Output すると、

UsdProxyShape 内に Mesh を読み込むことができます。

このように Bifrost を経由すると、 Maya の世界と USD の世界をリアルタイムに接続することができて
この状態で Maya 側の Mesh を操作すると、自動的に USD 側の Mesh も変形できます。

USD から MayaMesh へ​

同じように、USD から Bifrost 経由で Maya の世界に Prim を持ってきます。

OpenStage で Kitchen_set を開き、ReadUsdMeshes ノードを使用して、特定の Path の Prim を
Mesh に変換します。
この時の「Mesh」とは「BifrostMesh」を指します。MayaMesh ではないことに注意が必要です。
この Mesh を、Output で出力すると

BifrostGraph ノードに出力メッシュが表示されます。
ここからさらに MayaMesh に変換します。

Maya のノードエディタで、 BifrostGraph ノードの Mesh→BifrostGeoToMaya ノード →Mesh の InMesh へ
つなぐことで

Maya 側に Mesh を持ち込むことができました。
できるけど、とてつもなくめんどくさいことがわかりました。

以上のことから、自分なりの解釈でまとめるとこのような関係性になります。
Bifrost 内では、USD の Stage と BifrostMesh の両方があるので
どちらで扱っているかは注意しないと混乱しそうです。

雑な理解だと、

アイコンが USD の場合は、USD を扱っているというルールになっています。
しかし、Output はそのノードの処理に応じて USD か BifrostMesh かは変わります。 ReadUsdMeshes の場合「Mesh」は BifrostMesh のことを指すので
Stage を入力で BifrostMesh を出力します。

input は、Maya の Mesh を BifrostMesh として読み込むものなので
Input はなく、Output が BifrostMesh になります。

DefineMesh と AddToStage も両方 USD アイコンで、USD を扱います。
DefineMesh は、BifrostMesh を USD に変換するノードなので、入力して BifrostMesh を受け取りますが、後の処理は USD です。

まとめ​

何となく操作方法や考え方はわかってきたので
アトリビュートの追加をするネットワークを作ってみましたが、
1ノード=USDのコマンド1つとほぼほぼ対応していて、APIをわかってさえいればまぁ直感で
理解できるかな?と思います。
しかし、アトリビュート追加してセットするだけでも結構な長さになるので
使いどころはなかなか難しいです。

利点としては、MayaのMeshをリアルタイムでUSDに持ち込むことができるので
プロシージャルな配置をしつつモデルを作成する等の使い方はできるのかな?と思います。