この記事はHoudiniアドベントカレンダー2022 9日目の記事です。
前提条件
Houdiniに搭載されているSolarisはLookdevを行うコンテキストです。
これまでは、Houdiniで動作するビルトインレンダーのMantraRendererが提供され、それを使用しレンダリングを行っていました。(もちろんサードパーティーレンダラも使用できますが)
SideFXはMantraを新しいRendererに置き換えることを考え、さらに発展させてルックデブ、レイアウト、ライティングのコンテキストを作成し、そこにKarmaと呼ばれる新しいRendererを供給しました。
この新しいプロセスで特別なのは、SolarisがUSDで動作することです。
Solarisに取り込んだものは、基本的にすべてUSDになります。
このUSDは、同じくPixarのHydraという技術に送られ、USDをビューポートやRendererでレンダリングすることができます。
また、Hydra に接続できるサードパーティのレンダーもたくさんあります。
Solarisの中ではKarmaだけではなく、下記のRendererを使用することができます。
Solarisを使用した流れの一つして以下のような図式が考えられます。
OBJは、SOPネットワークを内部に持ち、そこでジオメトリを構築することができます。①
それをLopnetを使用し、USDとして読み込んだジオメトリに対し、コンポーネントビルダーを使用してマテリアル作成、マテリアルの割り当て②、そしてマテリアルとジオメトリが一緒になったUSDアセットをエクスポートします。③
その後、出力されたUSDをアセットを元にレイアウト④、ライティング⑤、カメラの設定とレンダリング⑤が実行することができます。
この時、使用するレンダラはKarmaかもしれないですし、サードパーティーのRendererかもしれません。
ジオメトリとマテリアルをセットにしたUSDアセットとして管理したい場合、使用するRendererによって異なるマテリアルを設定する必要があると大変です。Rendererを変えるたびに②の工程をやり直す必要がありますし、これがRendererを変えることができない理由にもなりますね。
Mantraを使用する時のマテリアルはVEXのマテリアルであり、/matのコンテキストで作成されていました。このマテリアルは基本Mantra/Karmaで使用することができますが、他のRendererに対応したものではありません。また、Karma XPUは実はVEXシェーダーを直接読み込んでいるわけではありません。中ではUSDプレビューノードを作成し、USDプレビューノードが、VEXからKarma XPUで使えるように変換してくれるのです。ただし、すべてを変換できるわけではなく、ここで新しい言語が必要になり、採用されたのがオープンソースのソリューションであるMaterialXです。
MaterialXはオープンソースですので、言ってしまえばどのRendererでも採用されれば使用することができるものです。
せっかく新しいマテリアルを新しいKarma Rendererで使用できるし、今後、マテリアル付きジオメトリのアセットをどんなRendererでも使用できるようになるかもしれない!と夢は膨らみます。
Solarisでは非常に多くのMaterialXノードを利用することができます。
※ここから先のデータはSideFXより提供されているKARMA | A BEAUTIFUL GAMEのデータを使用しました。
こちらのサンプルでは下記のようにマテリアルにテクスチャを使用しています。
他のシーンでもこのマテリアルを使えるようにしたいと思い、これをSave>MaterialXで保存します。
出力したファイルをテキストエディタでみても一見ちゃんと出力できてそうですが・・・
Assign Materialを行ってもテクスチャなどが表示されません。
そこで、どうするのかというとmtlximageをSubnetにまとめます。
これだけです。
選択して出力します。
先ほど出力したものと
今回出力されたもの
MaterialXファイルをして正しく読み込めるようになりました。
マテリアル情報をUSDで保存することもできますが、素材ごとにMaterialXとして保存しておくこともできるので便利ですよね。
ご参考になれば幸いです。