今回は、KarmaとMaterialXの基礎について紹介します。

記事の目次

    Information

    「HOUDINI COOK BOOK +」


    CGWORLD Online Tutorialsは、これからHoudiniを学習しようとしている方に向けて「Houdini COOKBOOK +Academy」を改訂しHoudini 19.5をベースとしたオンライン講座「HOUDINI COOK BOOK +」をリリースしました。

    第1回を無料公開中!

    KarmaとMaterialX

    今回は、KarmaとMaterialXの基礎について言及していきます。そもそもUSDベースのワークフローであるSolaris(TOP)を本連載で本格的に紹介するのは初めてですが、Houdiniにはしばらく前から搭載されている注目機能のひとつでもあります。

    なぜこのタイミングになったかと言うと、他に紹介したいものが盛りだくさんと言うのが正直なところですが、もうひとつ挙げるとすれば、筆者自身がプロジェクトでも本格使用する機会が少ないことと、USDについて解説するためには、ある程度基礎からUSDを解説する必要があると思い込んでいたからです。

    ただ、それではいつまでも紹介することが難しいと考え、今回は簡易的に使用するアプローチを解説すると共に、新たなレンダラであるKarmaとオープンソースであるMaterialXをメインに紹介することにしました。Houdiniでは年々新機能が増え、それも適当なものではなく、ワールドスタンダードなものばかりです。そう言った分野も採り入れつつ、日本の制作環境にマッチしたスマートなフローへ落とし込んでいくきっかけになればと思います。

    今回のHoudiniプロジェクトデータはこちら

    01 All Flow / 全体のながれ

    今回、作業のほとんどをStage(TOP)の中で構築していくスタイルを取りたいと思います。

    USDを構築する方法はいくつかあります。従来のHoudiniのObjectをそのままKarmaを通してレンダリングしてしまう簡易的なものもあります。今回は、基本的なジオメトリはHoudiniのSOPで準備したものをStageに読み込んでシーンを構築し、レンダリングの設定まで一連で行うアプローチです。大規模なシーン構築やルックデベロップメントであれば、もう少しシステマチックにUSDを構築する方法が理想ですが、今回はあくまでも従来のHoudiniのアプローチに似せて考えていきます【1】

    STEP 01

    まず、SOPからジオメトリを読み込みます。SOP Import LOP【A】を使って、メインのモチーフと背景をインポートします。SOP Import LOPの他にも、Scene ImportやSOP Createなどのオブジェクトやジオメトリを読み込んだり、Subnetで構築する方法もありますが、今回は別途作成したSOPから読み込んでいます。

    STEP 02

    メインのモチーフのレンダリング時にプロシージャルなセッティングを加えていく例です。今回は、レンダリング時にSubdhivisionを行うため、Edit Properties LOP【B】を使ってsubdhivisionSchemeをcatmulClarkへ変更しています。これは、従来のGeometry ObjectにあったようなMantra向けのPropertyになります。

    mergeも従来とは異なり、USDのLayer等をコンポジットするために使用します。ただ、これも最初は難しく考えすぎなくても良く、フローを合成するようなニュアンスで問題ないと思います。USDへの造詣が深くなってきたところで、細かな機能を確認すると良いでしょう。似た機能をもつオペレータにOverrayやSubLayer、Referenceなども存在します。

    STEP 03

    Material Library LOP【D】内でMaterialを作成します。このオペレータでは、外部のMaterialを読み込んでくることも可能です。また、作成したMaterialをMaterial Linker LOP【E】でPrimitiveにアサインします。

    STEP 04

    シーン構築の次点として、Camera【F】とLight【G】をセッティングします。これらもまとめてMergeします。Lightのセッティングは特にルックデベロップメントに関わるもので、なるべくインタラクティブに調整したいので、Light Mixier LOP【H】を使って、セッティングを簡単に行えるようにします。

    STEP 05

    Karma Render Settings LOP【I】を使って、Karmaを使ったレンダリングの設定を追加します。ここまでのシーンは、USD Render ROP【J】を使って、簡単に出力することが可能です。

    02 Each Flow / 各STEPの詳細

    STEP 01

    SOP Import LOPに読み込むジオメトリは、別途SOPを用意してそこで構築するフローを選択しています。これが正しいというわけではなく、こういうアプローチもあり、従来のHoudini的考えに近いことから、USDの構築に入りやすいと考えています。USD自体は非常に汎用性が高く、それだけ覚えることも膨大です。むしろ、HoudiniはUSDに非常に入りやすい設計になっていると言えます。

    本来なら、もう少しUSDのセッティングに向けたAttributeの設定等もした方が良い部分もありますが、なるべく簡素に考えたかったので、そこは省略しています。今回のようなケースではあまり必要としませんが、複雑なジオメトリであれば、構造を後で選択できたり切り分けたりできるようなしくみが必要です(他のソフトウェアへ出力するようなイメージが近いです)。

    STEP 02

    PrimitiveのPropertyを変更します。Scene Graphから変更したいPrimitiveを選択すると、Primitive TypeがMeshの場合、subdivisionSchemeがあります【1】

    これを右クリックすると、メニューが表示され、Edit Propertyから自動的にPrimitiveのMeshが選択されたEdit Properties LOPが作成されます【2】。パラメータから該当するValueを変更して完了です【3】

    STEP 03

    Material Library内部では、Karma MaterialX Subnet【4】を作成し、その内部(後述)にMaterialを構築していきます。

    作成したMaterialは、それぞれを対応するMeshにLinkしますが、その際には、Material Linker LOPを使ってLinkを作成するとドラッグ&ドロップを用いて視覚的に設定できます【5】

    膨大な量のMaterialでも視覚的に把握しやすいですが、どうしてもヒューマンエラーが発生しますので、そういった場合では、もう少しルールを作成して自動アサインが可能なしくみを検討すべきですが、今回のようなケースの場合はこの方法で十分です。

    今回作成したMaterialの例を簡単に紹介します。今回のMaterialはシンプルなものではなく、簡易的にプロシージャルなシェーディングをしたものを作成しています。これまでのVOPと同様なアプローチで、MaterialXを構築していますが、ノードの種類は変われど、考え方は同様なので、そこまで迷いもないと思います。

    今回は、Karma Curvature【6】を用いて凹凸をマスク化し【7】【8】、Fractal3DやWorley Noise 3Dなどを用いてDiffuseのColorマップを作成しています【9】【10】

    こう言ったフローの中で、MateriaX用にRampなども用意されており、ある程度従来のVOPのように組んでいくことが可能になっています。Color Correctなどを用いて簡易的にReflectionマップ【11】やDisplacementマップ【12】などを用いてDisplacementによる変位も作成しています【13】

    大本の質感はMtlX Standerd Surfece【14】を用いてセッティングしています。このシェーダ自体は、ほとんど他のレンダラのシェーダと同様なので、こちらも迷いはないかと思います。

    STEP 04

    Cameraの配置や被写界深度のセッティングなども従来とほとんど変わらないアプローチで行えます【15】。Lightも同様です【16】。むしろそれぞれをレンダリングしながら行える上、操作性も向上しているため、従来よりもやりやすいはずです。

    また、Light Mixierを用いることで、実際のミキサーのようなアプローチでLightを調整することも可能なため、ルックデベロップメントのスピード感は圧倒的に向上しています【17】

    STEP 05

    最後にレンダリングのセッティングをします。今回はKarmaを用いてレンダリングを行うため、Karma Render Settings LOPを追加します、それによって、Scene GraphにRender Settingも自動的に追加されていることが確認できます【18】

    KarmaのRendering EngineはCPUを使用します【19】。XPUは非常に高速ですが、あくまでもBeta版で対応していない部分もまだあるため、今回はCPUで行なっています。

    USD Render ROP【20】を使用することで、ここまで構築されたUSDを簡単に画像として出力可能です。これも従来のアプローチとほとんど変わらないため、ストレスなくレンダリング出力できるはずです。

    03 Operator / 今月のオペレータ

    ●LOP Network

    今回は、USDをベースにKarmaとMateriaXを用いたシーン構築の導入を紹介しました。HoudiniではSolarisと呼んだり、StageやLOPなど色々と呼び名がありますが、それらはLOPnetの中で行われます。

    Houdiniはいち早くUSDへ対応し、膨大なシーンを構築するためのしくみをアーティストへ届けてくれました。その恩恵は、規模感によっては中々享受しにくい、もしくは浸透するまで時間がかかるものと予測されます。 ただ、今回は敢えて削ぎ落とした内容でしたが、導入を紹介することで、導入してみる、使ってみるという点において実はそこまで高いハードルがあるわけではないことはご覧いただけたと思います。

    少なくとも、Karmaに関しては非常に有効なツールになることは間違いなく、USDベースのシーン構築のさわりさえ理解してしまえば、そのフローの恩恵も受けられると考えています。まずは使い込んでみるしかないのも事実なので、これを機に本格的に学んでみてはいかがでしょうか。また本連載でも、時折織り交ぜていければと考えていますので、ぜひご期待ください。

    秋元純一 / Junichi Akimoto

    株式会社トランジスタ・スタジオ/取締役副社長

    2006年に株式会社トランジスタ・スタジオ入社。日本でも指折りのHoudiniアーティスト。手がけてきた作品は数々の賞を受賞している

    www.transistorstudio.co.jp

    TEXT_秋元純一 / Junichi Akimoto
    EDIT_小村仁美 / Hitomi Komura(CGWORLD)