Omniverse を体験する(3): コネクタによるデータ変換

Omniverse を体験する(3): コネクタによるデータ変換

こんにちは、技術統括部 技術第3部(グラフィックス)の成(Seong)です。
前回に引き続き、Omniverseを深堀していきます。今回は、コネクタを用いたデータ変換についてです。

データの変換に踏み込む前に、Omniverse Connectorを振り返ります。少し遠回りにはなりますが、概要を把握することで、データ変換がわかりやすくなるかと思います。

Omniverse Connector(以降、コネクタ)は、OmniverseのアプリケーションやNucleusに、文字通りDCCツールを接続するためのプラグイン/アプリケーションです。コネクタは、Omniverseを複数のDCCツールとのコラボレーションプラットフォームたらしめる構成要素の一つと言えます。

コネクタはDCCツール毎に提供する機能が異なります。公式ドキュメントによると、コネクタが提供する機能(種類)は大きく5つに分けることができます。今回は、その中でも利用頻度が高いであろう2種類について説明を行います。

※これ以降の内容は、2022年12時点でのドキュメントの内容に基づいて説明を行います。Omniverseのドキュメントは頻繁に更新されているので、注意してください。

双方向コネクタ

まずは双方向コネクタです。誤解を恐れずに言うと、最も多機能かつコラボレーションがしやすい機能を提供するコネクタと言えるでしょう。双方向コネクタはDCCツールに以下の機能を提供します。

・DCCツールからOmniverseのアプリケーションへのリアルタイム編集
・Omniverse とDCCツールとの編集が共有される
・USD/MDLへの変換機能

機能の面では、DCCツールで作成したアセットをコネクタを経由してOmniverseへエクスポートとすることができ、さらに、Omniverse上のファイルをコネクタを通じてDCCツール上で編集できます。DCC ツールで加えた編集はOmniverseのアプリケーションにもすぐに反映され、同じくOmniverseで加えた編集もDCCツール上に直ちに反映されます。

双方向コネクタを用いることによって、前回のブログのような共同作業のワークフローを実現することができます。

2022/12月現在では、Maya, Unreal EngineなどといったDCCツールに双方向コネクタが提供されています。

単方向コネクタ

単方向コネクタは、DCCツールに以下の機能を提供します。
・DCCツールからOmniverseのアプリケーションへのリアルタイムでの編集
・USD/MDLへの変換機能

単方向コネクタと双方向コネクタの相違点は、Omniverseのアプリケーションで加えた編集は、DCCツール上のファイルには反映されない点です。


例えば、Omniverse Create, Unreal Engine, Revit(単方向コネクタ)のアプリケーションの3つで共同編集の環境を構築した場合を考えましょう。この時、Revitからの編集はCreate, Unreal Engine上のビュワーにも反映されますが、Unreal Engineで加えた編集がRevitのビュワーに反映されることはありません。

双方向コネクタに比べるとできることが限定的ですが、Omniverseをリアルタイムのビュワーとして用いる場合や、コラボレーションの対象のアプリケーションが特定の用途でのみ用いられる場合(例えば、マテリアルのルックデブでのみ用いる場合など)は、単方向コネクタでも十分なメリットを享受することができます。

2022/12月現在では、 Revit, Houdiniなどのアプリケーションが対応しています。

コネクタのデータ変換

それでは、コネクタによるデータ変換を見ていきます。

DCCツールから既存のアセットをOmniverseに持ち込む(Export)する際に、コネクタは何らかの変換を行います。残念ながら、RevitやUnreal Engineのコネクタのソースコードは公開されておらず(参考リンク)、具体的にどのような変換が行われているのかはわかりません。

今回は、簡単なケースをUnreal Engineコネクタ(双方向コネクタ)とRevitコネクタ(単方向コネクタ)の二つを用いて、データの変換前後を比較してみます。

Unreal Engineのコネクタ

コネクタのソースコードは公開されていませんが、コネクタによってサポートされている機能/されていない機能はドキュメントによって公開されてます。変換できる大まか機能を知りたい場合は、上記のドキュメントを参照するのが最も良いでしょう。

簡単なケースを用いて、どのように変換されるかを確認します。
今回はマテリアルアニメーションを用います。Unreal Engine上でCubeがゆっくりと動き、経過時間とともにマテリアルのBaseColorとMetalicが変化するようなブループリントクラスを作成し、コネクタを用いてエクスポートしてみます。

マテリアルはBaseColorとMetalicをパラメータ化しておきます
時間経過でパラメータの値を変更します

さて、実際にエクスポートして確認してみましょう。

Omniverse Create 上でエクスポートしたUSD/MDL

エクスポートした結果は上の用になります。Unreal Engineではゲームの開始とともにCubeが移動し色とマテリアルのMetalicが変化しますが、Omniverseでは変化しません。一方で、マテリアルにはUnrela Engine上で設定したMyBaseColorParamMyMetalicParamの二つは正しく反映されているようです。

もう少し踏み込んでみましょ。コネクタによってエクスポートされたUSD/MDLのファイルを確認し、比較してみます。下記の画像は、Cubeに割り当てられているMDLファイルの一部です。

 Unreal Engine のコネクタによって出力されたMDLの一部

MDLについては、今回の記事の内容を大きく超えてしまうので扱いません。スクリーンショットの35行目に着目して下さい。

この部分は、マテリアルのパラメータ(MyMetalicParam)に対して、Clampの処理が行われているように見えます。マテリアル内の処理は、コネクタによって正しく反映されているようです。

一方で、Unreal Engine上のブループリントの中で記述されていた、BaseColorに関連する一連の手続きは、MDLのファイルの中に記述されていませんでした。

今回のケースでは、コネクタによってUnreal Engine上でのすべての機能を100%の精度でエクスポートすることはできませんでした。しかし、マテリアルのパラメータや、マテリアルのノードの一部は適切に変換されていました。


実は、Unreal Engine上で作成したケースは、コネクタによって出力されたUSD/MDLに加えて、Action Graphなどを用いて、追加の編集を加えることでOmniverse上でも再現することができます。

コネクタは、すべての機能を変換するまでには至っていませんが、手作業によって、Omniverseが提供する機能(OmniGraph)などの独自の機能を補完することで、目的の変換を達成することができると言えそうです。

Revitのコネクタ

続いてRevitのコネクタです。結論から言うと、変換方法は先ほどの例にあったUnreal Engineのコネクタとは大きく異なります。最も異なる点は、マテリアルの変換がルールベースで行われるという点です。

ルールベースの変換を、Revitのデモシーンを用いて試してみましょう。
今回はリンク先のデモシーンを利用します。

csv編集前のコネクタでエクスポート

変換するルールを独自で設定してみましょう。コネクタによる変換のルールは、csvファイルによって管理されています。今回は、変換のルールを書き換えることで、手前の木を置き換えてみます。

木の変換のルールが記述されたcsvは次のパスににあります。
$/HOME/Documents/Omniverse/Revit/omniversePlantTable.csv

csvを開き、Lombardy_Polarという文字列をJapanese_Maple_Fallという文字列に置換して再度エクスポートしてみます。

csv編集後のコネクタでエクスポート

上記の画像がエクスポート後のデモシーンになります。
元のファイルを一切変更することなく、赤色の木(Japanese_Maple_Fall)に置換することができました。

CSVを用いたデータの変換は、Omniverse上の標準のアセットや、あらかじめ用意した高品質なアセットを用いることが可能です。また、ルールがcsvによって管理されていることから、変換できるかどうかが簡単に把握できます。

一方で、CSVに存在しないアセットは変換されません。独自のファミリアなどが複数含まれている場合は、注意が必要です。また、変換先のアセットがOmniverse上に存在しなければなりません。(Japanese_Maple_Fallは、Omniverse上に標準で存在するアセット名です)

今回は、コネクタによるデータの変換の説明を行いました。
コネクタはデータの変換にかかる作業を大幅に軽減してくれるものの、完全ではなく、コネクタの種類によって追加の作業が生じることもあります。コネクタによってサポートされている機能/サポートされていない機能を把握することが、効率的なワークフローの構築に役立ちそうです。

この記事をシェアする

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です