Houdini 18.0 Solaris

LOPsチュートリアル 1 アセット部署編: ビルド

おめでとうございます!最初のUSDアセットを構築し、次のチュートリアルに進む準備ができました!

On this page

このチュートリアルについて

前提条件

必要なサポートファイル$HIP/LOPS_DEMO_FILESにダウンロードしてください。

あなたが学習する内容

  • アセットのバリアントセットを作成します。

  • USDのアセットを用意します。

  • アセットをUSDとしてエクスポートします。

はじめに

普段のプロダクションパイプラインでは、アセット部署は複数のサブ部署(モデリング部署やテクスチャ部署)で構成されていることが多いです。 従来からアセット構築は複雑であり、通常ではアセットは、たくさんの異なるファイルフォーマットで複数の異なるソースから構成されます。

このチュートリアルでは、プロダクションパイプラインの初期ステージの1つである-アセット作成-簡略化した 内容を学んで、アセット部署の役を演じましょう。 objファイルとして渡された樽を取り込んで、いくつかのちょっとした問題を修正し、樽のpngテクスチャを取り込んで、樽にシェーダを割り当てて、樽のバリアントを作成し、USD用の樽を用意し、そして、その樽をUSDファイルにエクスポートします。

Note

  • このチュートリアルでは、アセット部署が 1部署 であることを想定しています。

  • Houdini Apprenticeライセンス所有者は、.usdncファイルに しか 書き出すことができません。このファイルは非商用バージョンのUSDで、Houdiniでしか読み込むことができません(USDに対応している他のパッケージでは読み込むことが できません )。その制限以外は、.usdncは完全に通常の.usdファイルと同じです。

Tip

作業の度にlops_tutorial_1.1.hipのような名前でファイルを頻繁に保存するようにしてください。


開始

アセットをHoudiniに取り込む

最初にする事は、アセットをHoudiniに取り込むことです。

  1. 新しくHoudiniセッションを開始します。

  2. Solaris デスクトップに切り替えます。

    • Solaris デスクトップが見つからない場合は、各自で作成してください。

    • パネルのどれかで Scene Graph Tree パネルを表示してください。

  3. ネットワークエディタ で、/objに移動します。

  4. tab ▸ File を選択します。

    これは、 File SOPを含んだジオメトリオブジェクトを作成します。

  5. このジオメトリオブジェクトの名前を Source に変更します。

    このオブジェクトの中で、樽を取り込んでUSDの準備をします。

    Note

    一部のパイプラインでは、USDを直接取り込む場合があり、その場合には、この手順をスキップします。

  6. Source の中に入ります。

    ノードをダブルクリック、またはノードを選択してEnterを押します。

  7. このチュートリアル用にダウンロードしたLOPsサポートアーカイブからファイルを読み込むように File SOP を編集します:

    Geometry File

    $HIP/LOPS_DEMO_FILES/BaseGeo/repacked_BarrelWithLid_UV.obj

  8. プロップをワールド空間の中心に配置するために、 Match Size SOPを追加します:

    Translateチェックボックス

    On

    Alignment Position

    0, 0, 0

    Justify Y

    Min

  9. File SOP の出力を Match Size SOP1番目 の入力に接続します。

  10. Null SOPを追加し、名前をOUT_BARRELに変更します。

  11. Match Size SOP の出力を OUT_BARREL の入力に接続します。

  12. OUT_BARREL 上でを押したままにすると、その樽には既にBarrel(樽)Lids(蓋)MetalStraps(帯金)のグループが設定されていることがわかります。

アセットをLOPsに取り込む

それでは、アセットをLOPsに取り込んで行きます。

  1. ネットワークエディタ で、/stageに移動します。

    Note

    Houdini内のどのレベルでもLOPネットワークを作成することができます。 しかし、このチュートリアルでは、/stage内で作業しましょう。

  2. SOP Import LOPを追加します:

    SOP Path

    /obj/Source/OUT_BARREL

    ジオメトリをLOPに取り込んだら、そのジオメトリのことをプリミティブ(または Prim )と呼びます。 USDでのプリミティブという定義は、Houdiniのネイティブのプリミティブの定義とは異なります。

    Load As Reference

    On

    Reference(リファレンス)とは、よく使用するコンポジションアークの1つで、通常ではこれを使ってアセットとプロップをステージ内に合成します(例えば、セットにアセットを組むとき)。 リファレンスは、見た目はインスタンスかもしれませんが、( Make Instanceable オプションを有効にして、これをインスタンスにすることを明示しない限り)実際はインスタンス化 されていません

    リファレンスは、シーン記述をコンパクトに再利用するための1種の マクロ と考えてください。 リファレンスは、例えば本棚に本をしまう際に使用します。 本棚と本は、それぞれ本棚アセットと本アセットを参照します。

    Primitive Path

    /Barrel/BarrelGeo

    ここには、USD内部ファイル構造に呼応したこのPrimのリファレンスの格納先となるLOPシーングラフ内の位置を指定します。

    Layer Save Path

    $HIP/tutorial1/Geo/BarrelBase.usd

    ここには、このPrimを含んだ 実際の ディスク上の.usdファイルの保存場所をUSDに伝えます。 詳細は、このチュートリアルの後半のUSD ROPで説明します。

  3. Scene Graph Tree ペインを見てください。

    • ここでは、USDステージのレイアウトを見ることができます。

    • USDステージが論理的に構成されているかどうかを確認するために、定期的に Scene Graph Tree を参照することになります。

      Note

      Scene Graph Tree 内でKind(種類)表示されていない 場合は、ギアメニューをクリックしてKindにチェックを付けてください。

    • BarrelのKindが group になっていて、その入れ子になっているBarrelGeoのKindが component になっていることがわかります。

      これらの体系的な構造( アセンブリ, グループ, コンポーネント, サブコンポーネント )に関する情報は、用語集を参照してください。

  4. ネットワークエディタ で、 SOP Importクリックして、 LOP Actions ▸ Inspect Active Layer を選択します。

    • 作成されたUSDコードを見てみましょう。USDコードには、合成ステージ(Houdiniで言う"シーン")が含まれています。

    • Barrelgroup で、その下のBarrelGeocomponent になっています。

    • このBarrelGeoPayload(ペイロード)として追加されています。

マテリアルライブラリをネットワークに追加する

では、樽アセットに割り当てるマテリアルのライブラリを構築して行きましょう。

  1. /stage内で、 Material Library LOPを追加します。

    このLOPをまだどこにも接続 しないでください

  2. Material Library LOP の中に入ります。

    ノードをダブルクリック、またはノードを選択してEnterを押します。

  3. Principled Shader VOPを追加して、名前を Barrel に変更します:

    Base Color

    1,1,1

    Roughness

    1

    Metallic

    1

  4. Texture タブで、 Base ColorRoughnessMetallicUse Texture を有効にします:

    Base Color Texture

    $HIP/LOPS_DEMO_FILES/Library/Assets/Barrels/Textures/repacked_BarrelWithLid/repacked_BarrelWithLid_UV_<UDIM>_BaseColor.png

    Roughness Texture

    $HIP/LOPS_DEMO_FILES/Library/Assets/Barrels/Textures/repacked_BarrelWithLid/repacked_BarrelWithLid_UV_<UDIM>_Roughness.png

    Metallic Texture

    $HIP/LOPS_DEMO_FILES/Library/Assets/Barrels/Textures/repacked_BarrelWithLid/repacked_BarrelWithLid_UV_<UDIM>_Metallic.png

    Warning

    上記で記述しているような適切なUDIM構文を使用するように注意してください。 UDIM構文を適切に挿入できるようにするためにファイル選択ダイアログのオプションは必ずUDIMを選択してください。

  5. /stageに戻ります。

    Tip

    ネットワークの上位階層に移動するにはUキーを押します。

  6. Material Library LOP のパラメータで、 Auto-fill Materials をクリックします。

    これによって、 Principled Shader のインターフェースが追加されます。

    Note

    Material Library LOPの中の任意のマテリアルに対応できるようにしたいのであれば、 Material VOP パラメータに*(アスタリクス)を入力して、"Include Only VOPs with Material Flag Set"を有効にすると良いでしょう。

  7. Configure Layer LOPを追加します:

    Save Path

    $HIP/tutorial1/Materials/BarrelMaterials.usd

    これは、マテリアルの保存場所をUSDに伝えます。

  8. Material Library LOP の出力を Configure Layer LOP の入力に接続します。


これで、アセット用のマテリアルライブラリが用意できました。

アセットにマテリアルを適用する

では、Primsにマテリアルを割り当てて行きましょう。

  1. SOP Import を選択します。

  2. Reference LOPを追加します:

    Primitive Path

    /Barrel/materials

    これは、樽アセット用のマテリアルの格納先です。

    Reference Type

    Reference From Multi-input

    Note

    Reference(リファレンス)は、シーン記述をコンパクトに再利用するための1種の マクロ と考えてください。

  3. SOP Import の出力を Reference LOP1番目 の入力に接続します。

  4. Configure Layer LOP の出力を Reference LOP2番目 の入力に接続します。

  5. Reference LOPPrimitive Path/materialsだけに変更した場合、 Scene Graph Tree でどのように変化するのかを見てください。

    確認したら、 Primitive Path/Barrel/materialsに戻してください。

  6. Assign Material LOPを追加します。

  7. Reference LOP の出力を Assign Material LOP の入力に接続します。

  8. Scene Graph Tree から以下のパスを Assign Material LOP のそれぞれのパラメータフィールド上にドラッグアンドドロップして割り当てます:

    Primitives

    /Barrel/BarrelGeo

    Material Path

    /Barrel/materials/Barrel


おめでとう。これで、シェーディングとテクスチャが付いた樽アセットができました。

アセットのバリアントを作成する

では、樽とマテリアルが用意されたので、単純なバリアントを作成しましょう。

蓋を隠して、蓋付きの樽と蓋なしの樽の 2個 の樽を利用できるようにしたいと思います。 さらに、SOPsでは可視なグループをLOPsで利用できるようにする必要があります。 これをするには、既存のLOPチェーンを修正する必要があります。

  1. 既存の SOP Import LOPを選択します:

    Primitive Path

    /Barrel/BarrelGeo/Body

    これは、USD内部構造に保存されるアセットバリアントのパスです。 このパスは、 Scene Graph Tree で確認することができます。

    Parent Primitive Kind

    Component

    これは、樽の別々の部位を component にします。 これによって、アセットを整理することができます。

    このような体系化構造の詳細は、用語集を参照してください。

    Layer Save Path

    $HIP/tutorial1/Geo/BarrelBase.usd

    これは、ファイルの保存先のディスク上の場所です。

    Note

    このパスは、前述のチュートリアルで設定した時と変わっていません。

    Import Group

    Barrel MetalStraps

    右側にあるドロップダウンメニューを使って、これらのグループを選択することができます。

  2. 既存の SOP Import LOPをAltドラッグしてコピーを作成してから、そのコピーを 最初SOP Import LOPの下のワイヤー上に乗せます:

    Primitive Path

    /Barrel/BarrelGeo/Lids

    Layer Save Path

    $HIP/tutorial1/Geo/BarrelLids.usd

    Import Group

    Lids

    Warning

    必ず上記のとおりに Import Group パラメータにはLids のみ を指定してください。 不意に既存選択にLidsを追加してしまいがちです。

  3. Assign Material LOPに Null LOPを接続して、名前をBarrel_W_Lidに変更します。

  4. では、 Scene Graph Tree を見てみましょう。BarrelGeo下にBodyLidsがコンポーネントとして存在しているのがわかります。

  5. BodyLidsBarrelGeoサブコンポーネントにした方が理にかなっていたように思います。

    2つ目SOP Import LOPに Configure Primitives LOPを接続します:

    Primitives

    /Barrel/BarrelGeo/*

    Note

    このアスタリスクは、 すべてに合致 を意味します。

    Kind

    Subcomponent

  6. 再度 Scene Graph Tree を見てください。

    これで、階層を グループ から コンポーネント に、 コンポーネント から サブコンポーネント に変更する方法を学びました。 (グループを サブコンポーネント からコンポーネントへといったように)この階層を崩すことは できません 。 そうしても、USDは失敗するでしょう。

    Tip

    荷台の上に10本の樽を置きたいとなった場合、その荷台を アセンブリ にすることになります。

    アセンブリの詳細は、用語集を参照してください。


単純なバリアントを作成する

では、単純な樽のバリアントを作成しましょう。

  1. Assign Material LOPPrune LOPを接続します。

    Primitive Pattern

    Scene Graph Tree ペインからLidsをこのパラメータのフィールド内にドラッグアンドドロップします。

  2. この Prune LOP のディスプレイフラグを有効にします。

    ビューポートで蓋が消えたのがわかります。

  3. この Prune LOP Null LOPを接続して、名前をBarrel_No_Lidに変更します。

  4. (⇥ Tabメニューから Add Variants to New Primitive を選択して) Add Variant LOPを追加し、その 1番目 の入力にBarrel_W_Lidの出力を接続、その 2番目 の入力にBarrel_No_Lidの出力を接続します。

  5. この Add Variant LOPクリックして、 LOP Actions ▸ Inspect Active Layer を選択します。

  6. 表示されたUSDコードを見てください。LOPsが新しく樽をまるごと構築してから、その蓋を隠しているだけであることに気づくと思います。

    これは、あまり 効率的ではありません 。 この単純なオブジェクトに関しては、さほど重大ではないですが、もっと複雑なオブジェクトだったり、アセットがたくさんあった場合のことを想像してください。

    これをもっと効率的にしたいです。

Context Option Blockを使ってバリアントを作成する

では、樽のバリアントをもっと効率的にしましょう。

  1. (⇥ Tabメニューから Add Variants to Existing Primitive を選択して) Add Variants to Existing Primitive ブロックを作成します。

  2. 作成したこのブロックの中にあるvariantblock_endノードを選択します。

    Note

    Variant Block End LOPVariant Name Default パラメータ内の`opinput(".", $IIDX)`のエクスプレッションが何を意味しているのか気になっていることでしょう。 パラメータのラベルをクリックすれば、通常であれば、そのエクスプレッションの評価内容が表示されるはずです。 今回の場合では、このLOPはすべての入力をループさせる度にエクスプレッションを評価するので 何も表示しません (一度に複数の結果を表示することはできません)。 opinputエクスプレッションは、現在の 入力インデックス ($IIDX)を照会して、そのインデックスに呼応したLOPの名前を取得します。 (これをテストするために、一時的に$IIDX0(この入力に接続されている1番目のノード)に置換し、ラベルをクリックすると、Barrel_W_Lidと表示されるはずです)

  3. Scene Graph Tree から BarrelGeoPrimitive Path パラメータのフィールドにドラッグアンドドロップします。

    Tip

    Scene Graph Tree のフォーカスが変わらないようにするには、Barrel_W_Lidノードを選択してから、その Scene Graph Tree ペインをピン留めします。

    Tip

    ペインをピン留めしてドラッグアンドドロップするのが面倒くさいのであれば、 Scene Graph Tree ペイン内で、あなたが欲しいパスを選択してから、 ▸ Copy Path でコピーして、 Primitive Path パラメータのフィールドにそのパスをペーストすることができます。

    プリミティブパターンを指定する方法に関しては、プリミティブマッチングパターンのページを参照してください。

  4. ブロック内に Null LOPを追加して、名前をLidに変更します。

  5. ブロック内に Null LOPを追加して、名前をNo_Lidに変更します。

  6. ブロック内にPrune LOPを追加します。

  7. この Prune LOP を選択してから、 Scene Graph Tree から LidsPrimitive Path パラメータのフィールドにドラッグアンドドロップします。

  8. これらのノードを以下のように接続します:

    • variantblock_beginの出力を、Lidの入力と Prune LOP の入力の両方に接続します。

    • この Prune LOP の出力をNo_Lidの入力に接続します。

    • Lidの出力をvariantblock_endの2番目の入力に接続します。

    • No_Lidの出力をvariantblock_endの2番目の入力に接続します。

    • Barrel_W_Lidの出力をvariantblock_beginの入力に接続します。

    • Barrel_W_Lidの出力をvariantblock_endの1番目の入力に接続します。

    /stageネットワークが下図のようになっているはずです。

    variantblock_end1番目の入力 には、変更なしのノードを接続します。ここではBarrel_W_Lidを接続します。 このBarrel_W_Lidが変更を加えたいノードです。他の入力にはバリアントを接続します。

    variantblock_end2番目の入力 では、 Prune LOP を使って樽の蓋を非アクティブにして樽から蓋を除去したバリアントを接続します。

  9. variantblock_endノードをクリックして、 LOP Actions ▸ Inspect Active Layer を選択して、アクティブレイヤーを検査しましょう。

    このUSDコードと前に作成したUSDコードを比較してください。 USDコードがもっとコンパクトに収まったことに注目してください。

    前のコードでは樽をまるごと再び追加して蓋を非表示にしていたわけですが、このコードでは、数行の追加で蓋を隠してバリアントを生成しています。

デフォルトのバリアントを選択して、USDを保存する

では、樽アセットのデフォルトのバリアントを指定して、そのUSDを保存しましょう。

Note

LOP ノードや USD ROP では、まだ 存在していない ディスク上のファイルのパスを指定することができ、ROPが実行されると、見つからないディレクトリが自動的に作成されます。

  1. デフォルトのバリアントを選択するために、 Set Variant LOPを追加します。

  2. variantblock_endの出力をこの Set Variant LOP の入力に接続します。

  3. Set Variant LOP を選択して、以下のようにパラメータを設定します:

    Variant Set

    model

    Variant Name

    右側のドロップダウンメニューからLidまたはNo_Lidを選択します。

    これがデフォルトのバリアントになります。

  4. Null LOPを追加して、名前を BarrelSets に変更します。

  5. Set Variant LOP の出力をBarrelSetsの入力に接続します。

  6. Configure Layer LOPを追加します。

  7. BarrelSetsの出力を Configure Layer LOP の入力に接続します。

  8. Configure Layer LOP を選択して、この樽セットの書き出し先のUSDファイルを定義します:

    Default Primitive

    右側のドロップダウンメニューから/Barrelを選択します。

    Save Path

    $HIP/tutorial1/Geo/Barrels.usd

  9. USD ROP LOPを追加します。

  10. Configure Layer LOP の出力を USD ROP LOP の入力に接続します。

    /stageネットワークが下図のようになっているはずです。

  11. USD ROP LOP を選択して、Output Fileパラメータを例えば$HIP/tutorial1/BarrelsAsset.usdに設定します。

  12. Output Processing セクションの Use Relative Paths有効 にしてください。

    これを有効にすることで、このLOPネットワーク内のどこの場所でも$HIPを使用することができます。 USD ROPは、USDファイルに書き出す際に、このLOPネットワークから$HIPの参照先を調べて、相対参照に置換します。 相対パス は実際にUSDで非常に複雑な部分で、初心者には本当に混乱を招いてしまいます。 このコントロールを使用することで、馴染みのあるファイル構造で作業して、LOPsに内部でUSD用のパスを作成させることができます。

  13. Extra Files セクションには、 Error Saving Layers with Implicit Paths オプションがあります。

    このオプションは、レイヤーの設定を間違えてLOPsがデータの保存先を 知らない 時にROPにエラーを出させます。

    これを試したいのであれば、このUSD ROP LOPのちょうど上にある Configure Layer LOP をバイパスにしてみてください。ファイルの保存をしてみると、エラーが出ます。

  14. USD ROP LOP パラメータリストの上部にある Save to Disk ボタンを押して、USDファイルをディスクに保存します。

変更内容を確認する

では、さきほど保存したUSDファイルをチェックして、すべてが動作したかどうかを確認します。

USDをHoudiniに読み戻す

  1. さきほど保存したUSDファイルを読み込みます。

  2. Reference LOPを作成します。このLOPをどこにも 接続しないでください :

    Primitive Path

    /Barrel

    Reference Fileパラメータの右側のファイル選択ダイアログボタンをクリックしてUSDファイル($HIP/tutorial1/BarrelsAsset.usd)を選択して、そのUSDを読み込みます。ノードチェーン内の最後のROPと同じ結果が得られるはずです。

    Reference File

    $HIP/tutorial1/BarrelsAsset.usd

  3. Set Variant LOPを接続して、表示させたいバリアントを選択します:

    Primitives

    Scene Graph Tree からBarrelGeoをこのパラメータのフィールドにドラッグします。

    Variant Set

    model

    Variant Name

    右側のドロップダウンメニューからバリアントを選択します。

USDファイル構造を検査する

USDファイルを保存した場所に移動します。

この場所には5個のファイルがあるはずです:

├── BarrelsAsset1.usd
├── Geo
│   ├── BarrelBase.usd
│   ├── BarrelLids.usd
│   └── Barrels.usd
└── Materials
    └── BarrelMaterials.usd

終了

トラブルシューティング

Reference LOPを使ってUSDをHoudiniに読み込んでみると、LOPチェーン内の最終ノードと同じルックにならない

(上記のとおりに)ファイル構造内に5個のファイルが存在していますか? 存在していないのであれば、2個以上のLOPで同じファイルパスが指定されている可能性があります。 こうしてしまうと、ファイルがお互いに上書き保存してしまいます。

樽に何もマテリアルが表示されない

シェーダのTextureパラメータに正しいUDIM構文が使用されていますか? マテリアルライブラリのセクションと特に警告を確認してください。

Solaris

USD

チュートリアル

Karma