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に取り込むことです。
-
新しくHoudiniセッションを開始します。
-
Solaris デスクトップに切り替えます。
-
Solaris デスクトップが見つからない場合は、各自で作成してください。
-
パネルのどれかで Scene Graph Tree パネルを表示してください。
-
-
ネットワークエディタ で、
/obj
に移動します。 -
tab ▸ File を選択します。
これは、
File SOPを含んだ
ジオメトリオブジェクトを作成します。
-
このジオメトリオブジェクトの名前を Source に変更します。
このオブジェクトの中で、樽を取り込んでUSDの準備をします。
Note
一部のパイプラインでは、USDを直接取り込む場合があり、その場合には、この手順をスキップします。
-
Source の中に入ります。
ノードをダブルクリック、またはノードを選択してEnterを押します。
-
このチュートリアル用にダウンロードしたLOPsサポートアーカイブからファイルを読み込むように File SOP を編集します:
Geometry File
$HIP/LOPS_DEMO_FILES/BaseGeo/repacked_BarrelWithLid_UV.obj
-
プロップをワールド空間の中心に配置するために、
Match Size SOPを追加します:
Translateチェックボックス
On
Alignment Position
0, 0, 0
Justify Y
Min
-
File SOP の出力を Match Size SOP の 1番目 の入力に接続します。
-
Null SOPを追加し、名前をOUT_BARRELに変更します。
-
Match Size SOP の出力を OUT_BARREL の入力に接続します。
-
OUT_BARREL 上で
を押したままにすると、その樽には既に
Barrel(樽)
、Lids(蓋)
、MetalStraps(帯金)
のグループが設定されていることがわかります。
アセットをLOPsに取り込む
それでは、アセットをLOPsに取り込んで行きます。
-
ネットワークエディタ で、
/stage
に移動します。Note
Houdini内のどのレベルでもLOPネットワークを作成することができます。 しかし、このチュートリアルでは、
/stage
内で作業しましょう。 -
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で説明します。
-
Scene Graph Tree ペインを見てください。
-
ここでは、USDステージのレイアウトを見ることができます。
-
USDステージが論理的に構成されているかどうかを確認するために、定期的に Scene Graph Tree を参照することになります。
Note
Scene Graph Tree 内でKind(種類)が 表示されていない 場合は、ギアメニューをクリックしてKindにチェックを付けてください。
-
Barrel
のKindが group になっていて、その入れ子になっているBarrelGeo
のKindが component になっていることがわかります。これらの体系的な構造( アセンブリ, グループ, コンポーネント, サブコンポーネント )に関する情報は、用語集を参照してください。
-
-
ネットワークエディタ で、 SOP Import を
クリックして、 LOP Actions ▸ Inspect Active Layer を選択します。
-
作成されたUSDコードを見てみましょう。USDコードには、合成ステージ(Houdiniで言う"シーン")が含まれています。
-
Barrel
が group で、その下のBarrelGeo
が component になっています。 -
この
BarrelGeo
がPayload(ペイロード)として追加されています。
-
マテリアルライブラリをネットワークに追加する
では、樽アセットに割り当てるマテリアルのライブラリを構築して行きましょう。
-
/stage
内で、Material Library LOPを追加します。
このLOPをまだどこにも接続 しないでください 。
-
Material Library LOP の中に入ります。
ノードをダブルクリック、またはノードを選択してEnterを押します。
-
Principled Shader VOPを追加して、名前を Barrel に変更します:
Base Color
1,1,1
Roughness
1
Metallic
1
-
Texture タブで、 Base Color 、 Roughness 、 Metallic の Use 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
を選択してください。 -
/stage
に戻ります。Tip
ネットワークの上位階層に移動するにはUキーを押します。
-
Material Library LOP のパラメータで、 Auto-fill Materials をクリックします。
これによって、 Principled Shader のインターフェースが追加されます。
Note
Material Library LOPの中の任意のマテリアルに対応できるようにしたいのであれば、 Material VOP パラメータに
*
(アスタリクス)を入力して、"Include Only VOPs with Material Flag Set"を有効にすると良いでしょう。 -
Configure Layer LOPを追加します:
Save Path
$HIP/tutorial1/Materials/BarrelMaterials.usd
これは、マテリアルの保存場所をUSDに伝えます。
-
Material Library LOP の出力を Configure Layer LOP の入力に接続します。
これで、アセット用のマテリアルライブラリが用意できました。
アセットにマテリアルを適用する
では、Primsにマテリアルを割り当てて行きましょう。
-
SOP Import を選択します。
-
Reference LOPを追加します:
Primitive Path
/Barrel/materials
これは、樽アセット用のマテリアルの格納先です。
Reference Type
Reference From Multi-input
Note
Reference(リファレンス)は、シーン記述をコンパクトに再利用するための1種の マクロ と考えてください。
-
SOP Import の出力を Reference LOP の 1番目 の入力に接続します。
-
Configure Layer LOP の出力を Reference LOP の 2番目 の入力に接続します。
-
Reference LOP の Primitive Path を
/materials
だけに変更した場合、 Scene Graph Tree でどのように変化するのかを見てください。確認したら、 Primitive Path を
/Barrel/materials
に戻してください。 -
Assign Material LOPを追加します。
-
Reference LOP の出力を Assign Material LOP の入力に接続します。
-
Scene Graph Tree から以下のパスを Assign Material LOP のそれぞれのパラメータフィールド上にドラッグアンドドロップして割り当てます:
Primitives
/Barrel/BarrelGeo
Material Path
/Barrel/materials/Barrel
おめでとう。これで、シェーディングとテクスチャが付いた樽アセットができました。
![](../images/solaris/tutorial/tutorial1_4.png)
アセットのバリアントを作成する
では、樽とマテリアルが用意されたので、単純なバリアントを作成しましょう。
蓋を隠して、蓋付きの樽と蓋なしの樽の 2個 の樽を利用できるようにしたいと思います。 さらに、SOPsでは可視なグループをLOPsで利用できるようにする必要があります。 これをするには、既存のLOPチェーンを修正する必要があります。
![](../images/solaris/tutorial/tutorial1_5.png)
-
既存の SOP Import LOPを選択します:
Primitive Path
/Barrel/BarrelGeo/Body
これは、USD内部構造に保存されるアセットバリアントのパスです。 このパスは、 Scene Graph Tree で確認することができます。
Parent Primitive Kind
Layer Save Path
$HIP/tutorial1/Geo/BarrelBase.usd
これは、ファイルの保存先のディスク上の場所です。
Note
このパスは、前述のチュートリアルで設定した時と変わっていません。
Import Group
Barrel MetalStraps
右側にあるドロップダウンメニューを使って、これらのグループを選択することができます。
-
既存の 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
を追加してしまいがちです。 -
Assign Material LOPに
Null LOPを接続して、名前を
Barrel_W_Lid
に変更します。 -
では、 Scene Graph Tree を見てみましょう。
BarrelGeo
下にBody
とLids
がコンポーネントとして存在しているのがわかります。 -
Body
とLids
をBarrelGeo
のサブコンポーネントにした方が理にかなっていたように思います。2つ目 の SOP Import LOPに
Configure Primitives LOPを接続します:
Primitives
/Barrel/BarrelGeo/*
Note
このアスタリスクは、 すべてに合致 を意味します。
Kind
Subcomponent
-
再度 Scene Graph Tree を見てください。
これで、階層を グループ から コンポーネント に、 コンポーネント から サブコンポーネント に変更する方法を学びました。 (グループを サブコンポーネント からコンポーネントへといったように)この階層を崩すことは できません 。 そうしても、USDは失敗するでしょう。
Tip
荷台の上に10本の樽を置きたいとなった場合、その荷台を アセンブリ にすることになります。
アセンブリの詳細は、用語集を参照してください。
単純なバリアントを作成する
では、単純な樽のバリアントを作成しましょう。
-
Assign Material LOP に
Prune LOPを接続します。
Primitive Pattern
Scene Graph Tree ペインから
Lids
をこのパラメータのフィールド内にドラッグアンドドロップします。 -
この Prune LOP のディスプレイフラグを有効にします。
ビューポートで蓋が消えたのがわかります。
-
この Prune LOP に
Null LOPを接続して、名前を
Barrel_No_Lid
に変更します。 -
(⇥ Tabメニューから Add Variants to New Primitive を選択して)
Add Variant LOPを追加し、その 1番目 の入力に
Barrel_W_Lid
の出力を接続、その 2番目 の入力にBarrel_No_Lid
の出力を接続します。 -
この Add Variant LOP を
クリックして、 LOP Actions ▸ Inspect Active Layer を選択します。
-
表示されたUSDコードを見てください。LOPsが新しく樽をまるごと構築してから、その蓋を隠しているだけであることに気づくと思います。
これは、あまり 効率的ではありません 。 この単純なオブジェクトに関しては、さほど重大ではないですが、もっと複雑なオブジェクトだったり、アセットがたくさんあった場合のことを想像してください。
これをもっと効率的にしたいです。
Context Option Blockを使ってバリアントを作成する
では、樽のバリアントをもっと効率的にしましょう。
-
(⇥ Tabメニューから Add Variants to Existing Primitive を選択して) Add Variants to Existing Primitive ブロックを作成します。
-
作成したこのブロックの中にある
variantblock_end
ノードを選択します。Note
Variant Block End LOP の Variant Name Default パラメータ内の
`opinput(".", $IIDX)`
のエクスプレッションが何を意味しているのか気になっていることでしょう。 パラメータのラベルをクリックすれば、通常であれば、そのエクスプレッションの評価内容が表示されるはずです。 今回の場合では、このLOPはすべての入力をループさせる度にエクスプレッションを評価するので 何も表示しません (一度に複数の結果を表示することはできません)。
opinput
エクスプレッションは、現在の 入力インデックス ($IIDX
)を照会して、そのインデックスに呼応したLOPの名前を取得します。 (これをテストするために、一時的に$IIDX
を0
(この入力に接続されている1番目のノード)に置換し、ラベルをクリックすると、
Barrel_W_Lid
と表示されるはずです) -
Scene Graph Tree から BarrelGeo を Primitive Path パラメータのフィールドにドラッグアンドドロップします。
Tip
Scene Graph Tree のフォーカスが変わらないようにするには、
Barrel_W_Lid
ノードを選択してから、その Scene Graph Tree ペインをピン留めします。Tip
ペインをピン留めしてドラッグアンドドロップするのが面倒くさいのであれば、 Scene Graph Tree ペイン内で、あなたが欲しいパスを選択してから、
▸ Copy Path でコピーして、 Primitive Path パラメータのフィールドにそのパスをペーストすることができます。
プリミティブパターンを指定する方法に関しては、プリミティブマッチングパターンのページを参照してください。
-
ブロック内に
Null LOPを追加して、名前を
Lid
に変更します。 -
ブロック内に
Null LOPを追加して、名前を
No_Lid
に変更します。 -
ブロック内に
Prune LOPを追加します。
-
この Prune LOP を選択してから、 Scene Graph Tree から Lids を Primitive Path パラメータのフィールドにドラッグアンドドロップします。
-
これらのノードを以下のように接続します:
-
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_end
の 1番目の入力 には、変更なしのノードを接続します。ここではBarrel_W_Lid
を接続します。 このBarrel_W_Lid
が変更を加えたいノードです。他の入力にはバリアントを接続します。variantblock_end
の 2番目の入力 では、 Prune LOP を使って樽の蓋を非アクティブにして樽から蓋を除去したバリアントを接続します。 -
-
variantblock_end
ノードをクリックして、 LOP Actions ▸ Inspect Active Layer を選択して、アクティブレイヤーを検査しましょう。
このUSDコードと前に作成したUSDコードを比較してください。 USDコードがもっとコンパクトに収まったことに注目してください。
前のコードでは樽をまるごと再び追加して蓋を非表示にしていたわけですが、このコードでは、数行の追加で蓋を隠してバリアントを生成しています。
デフォルトのバリアントを選択して、USDを保存する
では、樽アセットのデフォルトのバリアントを指定して、そのUSDを保存しましょう。
Note
LOP ノードや USD ROP では、まだ 存在していない ディスク上のファイルのパスを指定することができ、ROPが実行されると、見つからないディレクトリが自動的に作成されます。
-
デフォルトのバリアントを選択するために、
Set Variant LOPを追加します。
-
variantblock_end
の出力をこの Set Variant LOP の入力に接続します。 -
Set Variant LOP を選択して、以下のようにパラメータを設定します:
Variant Set
model
Variant Name
右側のドロップダウンメニューから
Lid
またはNo_Lid
を選択します。これがデフォルトのバリアントになります。
-
Null LOPを追加して、名前を BarrelSets に変更します。
-
Set Variant LOP の出力を
BarrelSets
の入力に接続します。 -
Configure Layer LOPを追加します。
-
BarrelSets
の出力を Configure Layer LOP の入力に接続します。 -
Configure Layer LOP を選択して、この樽セットの書き出し先のUSDファイルを定義します:
Default Primitive
右側のドロップダウンメニューから
/Barrel
を選択します。Save Path
$HIP/tutorial1/Geo/Barrels.usd
-
USD ROP LOPを追加します。
-
Configure Layer LOP の出力を USD ROP LOP の入力に接続します。
/stage
ネットワークが下図のようになっているはずです。 -
USD ROP LOP を選択して、Output Fileパラメータを例えば
$HIP/tutorial1/BarrelsAsset.usd
に設定します。 -
Output Processing セクションの Use Relative Paths を 有効 にしてください。
これを有効にすることで、このLOPネットワーク内のどこの場所でも
$HIP
を使用することができます。 USD ROPは、USDファイルに書き出す際に、このLOPネットワークから$HIP
の参照先を調べて、相対参照に置換します。 相対パス は実際にUSDで非常に複雑な部分で、初心者には本当に混乱を招いてしまいます。 このコントロールを使用することで、馴染みのあるファイル構造で作業して、LOPsに内部でUSD用のパスを作成させることができます。 -
Extra Files セクションには、 Error Saving Layers with Implicit Paths オプションがあります。
このオプションは、レイヤーの設定を間違えてLOPsがデータの保存先を 知らない 時にROPにエラーを出させます。
これを試したいのであれば、このUSD ROP LOPのちょうど上にある Configure Layer LOP をバイパスにしてみてください。ファイルの保存をしてみると、エラーが出ます。
-
USD ROP LOP パラメータリストの上部にある Save to Disk ボタンを押して、USDファイルをディスクに保存します。
変更内容を確認する
では、さきほど保存したUSDファイルをチェックして、すべてが動作したかどうかを確認します。
USDをHoudiniに読み戻す
-
さきほど保存したUSDファイルを読み込みます。
-
Reference LOPを作成します。このLOPをどこにも 接続しないでください :
Primitive Path
/Barrel
Reference Fileパラメータの右側のファイル選択ダイアログボタンをクリックしてUSDファイル(
$HIP/tutorial1/BarrelsAsset.usd
)を選択して、そのUSDを読み込みます。ノードチェーン内の最後のROPと同じ結果が得られるはずです。Reference File
$HIP/tutorial1/BarrelsAsset.usd
-
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
構文が使用されていますか?
マテリアルライブラリのセクションと特に警告を確認してください。