見出し画像

Houdini19.0 Solaris(USD) 変更点紹介 Part2

はじめに

Youtubeにて動画を公開しておりますので、併せてご覧ください。

動画内と同じシーンファイルを配布いたします。
URLは下記になります。
https://drive.google.com/file/d/1jWkO9yq9nPH96k8MBVlU0xMUgr43ArTV/view

スライド2

-------------------------------------------------------

Component Builder

「Component Builder」とはHoudini19.0より新しく追加された
USDアセットを出力することができる機能です。

こちらを使用する際には、4つのステップでUSDアセットを出力することができます。手順としては、
1.モデルの読み込みと調整
2.マテリアルの作成(読み込み)
3.マテリアルのアサイン
4.USDアセットの書き出し

という手順でアセットを出力することができます。

その際に出力されるUSDアセットはレンダリング用のハイポリゴンの
モデル
、表示用のProxyモデル、シミュレーションの際に使用される
コリジョンを設定したコリジョンモデルを同時に出力することができ、
さらに、Houdini19.0より追加されたLayoutノードを使用する際に用いる
アセットを読み込み表示するAsset Galleryタブに表示するための
サムネイルを出力することができるようになります。

また、Asset Galleryタブに読み込むためのUSDアセットを出力する際に、USDアセットがVariantを持っている場合には、各バリアントごとに、
サムネイルと、USDアセットを出力
することができます。

実際の使用方法の解説:基本的な使用方法

まず初めに、基本的なComponent Builderの使用方法を解説します。

LOPの階層内でtabキーを押し、Component Builderを呼び出します。
すると、以下の画像のように、4つのノードが接続された状態で呼び出されます。

画像2

こちらで作成されるノードは、
モデルの読み込みや作成が可能な「Component Geometry LOP」
マテリアルの読み込みや作成が可能な「Material Library LOP」
モデルに対してマテリアルをアサインすることが可能な
「Component Material LOP」
上流で作成したモデルをUSDアセットとして出力可能な
「Component Output LOP」
になります。

画像3

これらの4つのノードを使用してUSDアセットを作成します。
まず初めに、モデルを作成します。
Component Geometry LOPをダブルクリックして中に入ります。
すると、以下の画像のようにGeometry階層(SOP階層)になり、
ここでモデルを作成することができます。

画像4

このノードの中では最初から3つのノードが作成されており、各それぞれの
ノードに接続されているノードを出力するようになっています。
一番左の「default」のノードは、レンダリングに使用するためのハイポリゴンモデルを接続します。
そして、2番目の「proxy」は画面にシーンビュー上に表示するためのローポリゴンのモデルを作成します。
一番右の「simproxy」はシミュレーションなどに使用するためのコリジョンジオメトリを出力し、各それぞれに接続されたものを上の階層(LOP階層)に出力します。

今回は、例として、Platonic Solids SOPを使用し、ティーポットを作成、
ポリゴンモデルに変換します。

そして、ここで作成したモデルを一番左の「default」と接続します。

画像5

これにより、シーンビューには、レンダリングに使用するモデルが表示されます。
これで、レンダリング用のモデルの準備は完了です。

次に、シーンビューに表示するためのProxyジオメトリを作成し、接続します。そのために、新しくPolyReduce SOPを作成しモデルの下流に分岐させて接続、「Percent To Keep」の数値を調整してポリゴン数を減らします。

画像6

そして、モデルの準備ができたら、「proxy」のノードに接続します。すると、シーンビューの表示が切り替わります。

シーンビューに表示される優先度は「proxy」が最も優先度が高いため、「proxy」にノードが接続されている場合はシーンビューには「proxy」に接続されているモデルが表示されます。

最後に一番右側にある「simproxy」に対してコリジョン用のモデルを接続します。
ここには、コリジョンモデルを接続するために、「Convex Hull」と入力し、「Shrinkweap SOP」を作成し、分岐させて接続、出力を「simproxy」と接続します。

画像7

これによりコリジョンモデルを出力できるようになります。
以上の工程で、レンダリング用のモデル、画面に表示するためのモデル、
コリジョンモデルを出力できるようになります。

モデルの準備ができたので、上の階層(LOP階層)に戻ります。
すると、画面には、「proxy」に接続されているモデルが表示されます。

画像8

これでモデルの準備は終了です。

次に、マテリアルの準備を行います。
「Material Library LOP」をダブルクリックし、中に入り新しく
シェーダーを作成します。
今回はHoudini内でデフォルトで設定可能な「Gold」のシェーダを作成します。

すると、以下の画像のように、作成してシェーダーが自動的にモデルに
対してアサインされます。

画像9

こちらは、Component Builderを作成した際に、自動的に作成された「Component Material」の機能によるものです。

上の階層に戻り、「Component Material」のノードのパラメータを確認してみます。
「Component Material」のノードは指定されたモデルに対してマテリアルをアサインする機能を持つノードです。

このノードはデフォルトで、「Primitives」「Material Path」に対して、第1入力と、第2入力に接続されているシーングラフを指定するための
エクスプレッションが入力されています。

そのため、第1入力に接続されているモデルに対して第2入力に接続されているマテリアルを自動的にアサインするようになっています。

画像10

こちらのパラメータに入力されているエクスプレッションは、パラメータ上で中ボタンをクリックするころでどこに対してパス指定されているかを確認することができるようになります。

画像11

これでマテリアルの作成とアサインが完了です。

この状態でシーンビューに表示されているモデルは、
「Component Geometry」内で「proxy」に対して接続されているモデルが
表示されています。しかし、シーンビューレンダリングを有効にする(Karmaに変更する)ことで表示されるモデルを「default」に接続されているハイポリゴンのモデルに切り替えることができます。

画像12

画像13

レンダリング時にハイポリゴンのモデルに切り替わることが確認出来たら、ここで作成したモデルをUSDアセットとして出力していきます。

USDアセットの出力方法

出力は「Component Output LOP」より可能です。
このノードでは、USDアセットの出力だけではなく、Houdini19.0より新しく追加されたAsset Galleryタブに対してUSDアセットを読み込む際に使用するサムネイルを出力することができます。
ノードのパラメータは以下のようになっており、USDアセットを出力するための設定が可能です。

画像14

今回の演習では以下の2つのパラメータを主に操作しています。

画像15

上側の枠内で、USDアセットの出力と、それに関する設定が可能で、
下側の枠内で、サムネイル撮影と、出力の設定が可能です。

「Component Output LOP」の具体的な使用方法を説明していきます。
初めに、USDアセットの出力方法を解説します。
USDデータを出力する方法は非常に簡単でパラメータ内の
「Save to Disk」をクリックするだけです。

画像16

すると、デフォルトで設定されているパスに対して新しくUSDアセットが
出力されます。

デフォルトでは、出力先のパスが「$HIP/usd/assets/`chs("name")`/`chs("filename")`」
となっているため、
「〇〇 > usd > assets > componentoutput1(ノード名)」
のファイルに対して、出力されます。

以下が実際に出力されるデータです。

画像17

出力されたデータを確認してみると、1つの「.usd」データ
3つの「.usdc」のデータが出力されます。

こちらはComponent Outputのデフォルトの機能で、モデルデータや
マテリアルのデータを「.usdc」のデータで出力し、すべて含んだデータを「.usd」として出力するように設定してあるためです。

補足:ここで出力される「.usdc」の名前などは、パラメータ内の
「Expoirt Options」より設定が可能です。


出力されたデータをそれぞれHoudini内に読み込んだものが
次のようになります。

・geo.usdc(作成されたオブジェクトのみ)

画像18

・mtl.usdc(作成されたマテリアルのみ)

画像19

・payload.usdc(作成されたオブジェクトとマテリアル)

画像20

・componentoutput1.usd(作成されたすべて)

画像21

以上の様になっており読み込まれているシーングラフに差が出ています。
このように、USDアセットを出力することができます。

こちらのUSDデータは、Component Geometryにて設定している
レンダリング時のモデルと表示用のモデル、コリジョンモデルのデータを
内包しているため、シーンビューレンダリングを無効にした際には、
ローポリゴンのモデルが表示され、シーンビューレンダリングを
有効にした際にはハイポリゴンのモデルが表示されるようになります。
以上が、USDアセットの出力方法です。

サムネイルの出力方法

次に、サムネイルの出力方法をご説明します。

このサムネイルの出力の機能は、シーンビューに表示されているシーンの
指定した範囲を画像として出力する機能です。

サムネイル出力用のパラメータ内にある「Camera」の項目の
「View Thumbnail Camera」のトグルを有効にすると、シーンビューの
表示が切り替わります。

画像22

こちらの画像では少しわかりづらいですが、シーンビューがパラメータで
デフォルトで指定されている512×512の範囲の正方形の領域にクロップされます。
※Houdini19.0.455(プロダクションビルド)では、クロップされる領域のサイズが128×128に変更されています。

さらに、有効にした際にシーンビューに表示されていたモデルの角度が変わります。

これは、サムネイルとして画像を出力する際の範囲にモデルが収まるように、自動的にサムネイル撮影用のカメラが内部で作成されるためです。

このカメラは「View Thumbnail Camera」のトグルの下側のパラメータより、調整が可能です。

画像23

通常のカメラと異なり、設定可能な項目が非常に少なくなっていますが、このカメラは、対象のモデルが常に中心をになるようになっているため、細かな設定を行う必要がそこまであまりません。そのため、このようにパラメータが少なくなっています。

このパラメータを調整し、カメラの設定が完了したら、サムネイルを出力します。出力する際にはパラメータ上部にある「Generate Thumbnail」のボタンをクリックすることで出力可能です。

画像24

ここで出力されるサムネイルの出力先は、先ほど説明したUSDアセットの出力場所のパスに依存し、同じディレクトリ内に作成されます。
そのため、「〇〇 > usd > assets > componentoutput1(ノード名)」内に新しく「thumbnail.png」というファイルが作成されます。

画像25

ここで出力された画像は以下の画像で、シーンビューに表示されていた絵がそのまま出力されます。

画像26

このように、USDアセットとサムネイルを出力できるのがこのComponent Builderの基本的な機能です。

Component Geometry LOPを用いてSOP階層のオブジェクトを読み込む


先ほどの説明では「Component Geometry LOP」を使用してモデルを作成していましたが、「Component Geometry LOP」を使用してSOP階層からモデルを読み込むことも可能です。

モデルをSOP階層から読み込むことができるようにするためには、「Component Geometry LOP」のパラメータの「Input Source」のパラメータを「Extemal SOP」に変更する必要があります。

画像27

「Input Source」のパラメータを「Extemal SOP」に変更すると下の画像のように、パラメータが変更され、新しく、「Default/Render」「Proxy」
「SimProxy」
というパラメータが表示されます。
こちらは、先ほど説明した際に「Component Geometry LOP」内で設定した3種類のモデルと同じ機能になります。
先ほどはノードを接続しましたが、今回はノードを接続する代わりに、SOP階層から、各それぞれに対応するノードを指定します。

画像28

そのため、SOPの階層で、この3種類に対応するモデルを作成しておく必要があります。
今回は、先ほど作成したものと同じ形状のモデルをSOP階層で準備しました。

画像29

そして、各パラメータに対して指定するノードをNullにて作成し、名前をそれぞれ「Rend」「Ploxy」「Sim」に変更しています。

ここで作成されているモデルを「Component Geometry LOP」にて読み込んでいきます。
「Component Geometry LOP」のパラメータの「Default/Render」「Proxy」「SimProxy」に対してSOP階層で作成してあるNullを指定します。

指定する際にはパラメータ右側にある「Open Floating Operator Chooser」ボタンをクリックし、対象のノードを選択します。

画像30

以下のように、すべて選択するとモデルが読み込まれます。

画像31

そして、ここでは、Proxyモデルが読み込まれているため、シーンビューレンダリングを無効にすると、SOP階層で作成しているローポリゴンのモデルがビュー上に表示されます。

このように、SOP階層からモデルを読み込むことができます。

それ以外のマテリアルのアサイン等は先ほどの工程と同じになります。
同様の工程にてマテリアルをアサインした物が以下になります。
(地面とライトを追加しています)

画像32

このように、SOP階層から読み込んだモデルも同様に操作することができます。


(マテリアル)Component Builderを使用してVariantを作成

次に、モデルに対してマテリアルのVariantを設定する方法を説明します。

まずは、先ほど同様に、モデルを準備します。
各モデルに対して対応するモデルを接続します。

画像33

こちらが準備できたら、「Material Library LOP」にて、Variantに設定する分のシェーダーを作成します。
今回は、「Gold」「Iron」「Silver」「Glass」「Blue Cloth」の5種類のシェーダーを準備しています。

画像34

ここで作成した各シェーダーをLOPの階層で適用していきます。

LOPの階層に戻り、Variantに設定するシェーダーの数の
「Component Material LOP」を作成します。
今回は5つのシェーダーを作成しているので、5つの「Component Material LOP」を作成、もともとある「Component Material LOP」の下流にすべて接続します。

画像35

このように5つの「Component Material LOP」が接続できたら、
各ノードで、別々のマテリアルがアサインされるようにマテリアルのパスの指定を行います。

各ノードのパラメータの「Primitive」に対して、モデルを表すシーングラフの「/ASSET/geo」を指定し、「Material Path」に対して、シーングラフに読み込まれている各マテリアルを適用します。
適用する場合にはパスを入力することも可能ですし、シーングラフからドラッグアンドドロップすることも可能です。

以下の画像のように、各シェーダーをモデルに対してアサインします。
・Glass

画像36

・Gold

画像37

・Iron

画像38

・Blue Cloth

画像39

・Silver

画像40

マテリアルがアサインできたら、このモデルを書き出します。

Variant付きのモデルの書き出しは、通常の出力方法と変わらず、出力可能です。
先ほどと同様に、「Component Output LOP」の「Save to Disk」
クリックすることでVariantのついたUSDアセットを出力可能です。

画像41

ここで実際に、書き出されたUSDデータをLOPに読み込み、Variantを一覧で確認可能な「Explore Variants LOP」を使用し、保持しているVariantを確認してみると、以下の画像のように、先ほど設定した5種類のシェーダーが適用された5つのモデルが一覧で表示され、モデルに対して5つのVariantが設定されていることが確認できます。

画像42

(オブジェクト)Component Builderを使用してVariantを作成


次に、複数のオブジェクトをVariantとして持つUSDアセットの出力方法を
説明します。

先ほどは複数のマテリアルを持つVariantの出力を行いましたが、次は複数のモデルを持つVariantの設定です。
マテリアルに対いてVariantを設定する場合は「Component Material LOP」を複数個作成しましたが、モデルに対してVariantを設定する場合は、「Component Geometry LOP」を複数個作成する必要があります。

今回は「Box」「Sphere」「Tours」「Cone」「Tube」の5種類のモデルを用意しています。

画像43

画像44

こちらの5つのモデルに対して、同じマテリアルをアサインし、Variantを設定します。

その際に、先ほどのMaterialを設定した際には追加しなかった「Component Geometry Varinat LOP」が新しく必要になります。

すでに上の画像でも表示されているように、
「Component Geometry Varinat LOP」を作成し、
すべての「Component Geometry LOP」を入力します。

画像45

この状態で、「Component Geometry Varinat LOP」の出力を「Component Material LOP」の第1入力にノードを接続することでVariantを設定できます。

そして、「Material Library LOP」内でシェーダーを作成します。
今回は、「Gold」のシェーダーを1つだけ作成します。

画像46

これでモデルの準備と、シェーダーの準備は完了です。

モデルとマテリアルの準備ができたら、マテリアルをアサインしますが、
その際に、「Component Material LOP」のパラメータには変更を加える必要はありません
デフォルトの設定のままでマテリアルをアサインすることが可能です。

そのためこちらには今回は変更は加えません。

この状態で先ほどと同様に、「Component Output LOP」を使用してUSDアセットを出力することで、モデルのVariantを持ったUSDアセットを出力することが可能です。

出力されたUSDアセットを先ほどと同様の方法で「Explore Variants LOP」を使用して、USDアセットが保持しているVariantを確認すると、以下の画像のように、5種類のモデルに対して「Gold」のテクスチャが適用されたモデルが一覧として表示され、各モデルに対してマテリアルが適用された状態のVariantが作成されているのがわかると思います。

画像47

また、今回のノードの接続方法では、「Component Material LOP」を連続して接続していないため、USDアセットをサムネイル付きで各VariantごとにUSDアセットとして書き出すことが可能です。

これらのVariantをすべて別々のサムネイル付きのUSDアセットとして書き出すには、「Component Output LOP」内の「Variant Layers」のトグルを有効にしておく必要があります。

画像48

この状態で、「Save to Disk」の項目の右側にある「Add to Asset Gallery」のボタンをクリックすることで、Asset Galleryに対してVariantごとのUSDアセットが追加されるとともに、サムネイルの情報を内包した各VariantのUSDアセットを出力することができます。

画像49

こちらをクリックすることで、以下のように、
「〇〇 > usd > assets > Model_Variants > variants」
に対して各VariantごとのUSDアセットを出力することができます。
ここで、設定されている各USDアセットの名前は、
「Component Output LOP」のノード名の後ろに、Variant用の各モデルを作成している「Component Geometry LOP」の名前が追加される形になります。

画像50

こちらのUSDアセットをそれぞれ読み込むと、以下の画像のように、Variantを別々に読み込むことができます。

※ここにはサムネイル用の画像が入っていませんが、このUSDデータをAsset Galleryに読み込むことでサムネイル付きで読み込むことが可能にあります。
こちらの設定は後日Layoutノードに関して説明する際に詳しく解説します。

画像51

画像52

このように、各Variantのモデルを別々のUSDアセットとして出力が可能です。
以上が、モデルに対してVariantを設定したUSDアセットの出力方法です。

(合成)Component Builderを使用してVariantを作成

最後に、モデルと、マテリアルのそれぞれにVariantを持たせた状態で
USDアセットを出力する方法を解説します。

基本的には前項の2つを組み合わせるだけで各Variantを持ったUSDアセットを書き出すことが可能です。
その具体的な方法を説明していきます。

今回は、先ほどと5つのモデルの対して各それぞれに、先ほどと同じ5つのマテリアルをVariantとして持たせることで、合計で25個のVariantを持つUSDアセットを出力します。

まずは、先ほどと同じ5つのモデル準備し、すべてを「Component Geometry Variant LOP」に接続します。

画像53

こちらの準備ができたら、シェーダーに関しても先ほどと同様に5つ分準備をします。

画像54

これで、5種類のモデルと5種類のマテリアルが準備できたので、モデルに対してマテリアルをアサインします。

画像55

こちらのアサイン方法は、先ほどのマテリアルに対してVariantを設定する際と同じで、各「Component Material LOP」に対して、各マテリアルを割り当てるのみとなっています。

これによって、各モデルに対して、各マテリアルがアサインされます。

この状態でほかの工程と同様にUSDアセットを出力することで以下のように、5種類のモデル×5種類のマテリアル=25種類のVariantを設定することができます。

画像56

ここで作成されたVariantのデータは、従来のVarainat作成方法によって作成された物と同様に、「Explore Variants LOP」と「Instancer LOP」を組み合わせることで、インスタンスコピーを実行できます。

画像57

このように、Component Builderを使用することで、USDアセットの作成が可能になったり、Variantの作成よ容易にかつ柔軟に行えるようになりました。

----------------------------------------------------------------

今回の記事はここまでとなります。
閲覧していただきありがとうございました。

この記事が気に入ったらサポートをしてみませんか?