On this page |
|
このチュートリアルについて ¶
前提条件 ¶
必要なサポートファイルを$HIP/LOPS_DEMO_FILES
にダウンロードして解凍してください。
あなたが学習する内容 ¶
-
アセットのバリアントセットの作成方法。
-
USDのアセットを用意する方法。
-
アセットをUSDとしてエクスポートする方法。
はじめに ¶
普段のプロダクションパイプラインでは、アセット部署は複数のサブ部署(モデリング部署やテクスチャ部署)で構成されていることが多いです。 従来からアセット構築は複雑であり、通常ではアセットは、たくさんの異なるファイルフォーマットで複数の異なるソースから構成されます。
このチュートリアルでは、プロダクションパイプラインの初期ステージの1つである- アセット作成 -を 簡略化した 内容を学んで、アセット部署の役を演じましょう。
.obj
ファイルとして渡された樽を取り込んで、いくつかのちょっとした問題を修正し、樽の.png
テクスチャを取り込んで、樽にシェーダを割り当てて、樽のバリアントを作成し、USD用の樽を用意し、そして、その樽をUSDファイルにエクスポートします。
注
-
このチュートリアルでは、アセット部署が 1部署 であることを想定しています。
-
Houdini Apprenticeライセンス所有者は、
.usdnc
ファイルに しか 書き出すことができません。このファイルは非商用バージョンのUSDで、Houdiniでしか読み込むことができません(USDに対応している他のパッケージでは読み込むことが できません )。その制限以外は、.usdnc
は完全に通常の.usd
ファイルと同じです。
Tips
-
作業する時はシーンファイルを頻繁に保存するようにしてください。例えば、
lops_tutorial_1.1.hip
のような名前でファイルを保存するようにしてください。 -
このチュートリアルの途中で何か問題に遭遇した場合、トラブルシューティングのセクションが役に立つので参照してください。
ステップ 1 - アセットをHoudiniに取り込む ¶
最初のステップでは、 File SOPノードを使用してアセットをHoudiniに取り込みます。
-
新しくHoudiniセッションを開始します。
-
Solaris デスクトップに切り替えます。
-
Solaris デスクトップが 見つからない 場合は、各自で作成してください。
-
パネルのどれかでScene Graph Treeパネルを表示してください。
-
-
ネットワークエディタ で、
/obj
コンテキストに切り替えます。 -
⇥ Tabメニューから File を選択します。
これは、 File SOPを含んだGeometry Objectノードを作成します。
-
この Geometry Object ノードの名前を Source に変更します。
このオブジェクトの中で、樽を取り込んでUSDの準備をします。
Note
一部のパイプラインでは、USDを直接取り込む場合があり、その場合には、この手順をスキップします。
-
Source ノードの中に入ります。
ノードをダブルクリック、または、ノードを選択してEnterを押します。
-
このチュートリアル用にダウンロードしたLOPsサポートアーカイブからファイルを読み込むように File SOP ノードを編集します。
Geometry File パラメータフィールドに以下のファイルパス文字列を入力します:
$HIP/LOPS_DEMO_FILES/BaseGeo/repacked_BarrelWithLid_UV.obj
-
プロップをワールド空間の中心に配置するために、 Match Size SOPノードを追加して、 パラメータエディタ で以下の設定をします:
-
Translate を オン にします。
-
Target 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(帯金)
のグループが設定されていることがわかります。
ステップ 2 - アセットをLOPsに取り込む ¶
このステップでは、 SOP Import LOPノードを使用してアセットをLOPsに取り込みます。
-
ネットワークエディタ で、
/stage
コンテキストに切り替えます。Note
Houdini内のどのレベルでもLOPネットワークを作成することができます。 しかし、このチュートリアルでは、
/stage
コンテキスト内で作業しましょう。 -
SOP Import LOPノードを追加して、 パラメータエディタ で以下の設定をします:
-
SOP Path パラメータフィールドに以下を入力します:
/obj/Source/OUT_BARREL
ジオメトリをLOPに取り込んだら、そのジオメトリのことをプリミティブ(または Prim )と呼びます。 USDでのプリミティブという定義は、Houdiniのネイティブのプリミティブの定義とは異なります。
-
Load As Reference を オン にします。
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ペインを見てください。
-
Scene Graph Tree 内ではUSDステージのレイアウトを確認することができます。
-
USDステージが論理的に構成されているかどうかを確認するために、定期的に Scene Graph Tree を参照することになります。
Note
Scene Graph Tree 内でKind(種類)が 表示されていない 場合は、ギアメニューをクリックしてKindにチェックを付けてください。
-
Barrel
のKindが group になっていて、その入れ子になっているBarrelGeo
のKindが component になっていることがわかります。これらの体系的な構造の種類( アセンブリ 、 グループ 、 コンポーネント 、 サブコンポーネント など)に関する情報は、Solaris用語集を参照してください。
-
-
ネットワークエディタ で、 SOP Import LOP ノードをクリックして表示されるコンテキストメニューから LOP Actions ▸ Inspect Active Layer を選択します。
-
作成されたUSDコードを見てみましょう。USDコードには、合成ステージ(Houdiniで言う シーン )が含まれています。
-
Barrel
が group で、その下のBarrelGeo
が component になっています。 -
この
BarrelGeo
がPayload(ペイロード)として追加されています。
-
ステップ 3 - マテリアルライブラリをネットワークに追加する ¶
このステップでは、 Material Library LOPノードを使用して、ステップ 4の樽アセットに割り当てるマテリアルのライブラリを構築します。
-
/stage
コンテキスト内で、 Material Library LOPノードを追加します。このノードをまだどこにも接続 しないでください 。
-
Material Library LOP ノードの中に入ります。
ノードをダブルクリック、またはノードを選択してEnterを押します。
-
Principled Shader VOPノードを追加して、名前を Barrel に変更し、 パラメータエディタ ▸ Surface タブで以下の設定をします:
-
Basic ▸ Base Color を
1,1,1
に設定します。 -
Specular ▸ Roughness を
1
に設定します。 -
Reflection ▸ Metallic を
1
に設定します。
-
-
Textures タブで、 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
警告
-
上記で記述しているような適切なUDIM構文を使用するように注意してください。
-
ファイル選択ダイアログを使用してテクスチャを選択する場合、必ずファイル選択ダイアログオプションで
UDIM
を選択してください。これによって、適切なUDIM
構文が使用されます。
-
-
/stage
に戻ります。Tip
ネットワークの上位階層に移動するにはUキーを押します。
-
Material Library LOP ノードのパラメータエディタで、 Auto-fill Materials をクリックします。
さきほど作成したPrincipled Shaderがこのパラメータインターフェースに収集されます。
Note
別の方法としては、 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 ノードの入力に接続します。
これで、アセット用のマテリアルライブラリが用意できました。
ステップ 4 - アセットにマテリアルを適用する ¶
では、Primsにマテリアルを割り当てて行きましょう。
-
SOP Import LOP ノードを選択します。
-
Reference LOPノードを追加して、 パラメータエディタ で以下の設定をします:
-
References タブの Multi-input セクションのチェックボックスをオンにします。
-
References タブの Multi-input セクション下の Primitive Path パラメータフィールドで、以下を入力します:
/Barrel/materials
これは、樽アセット用のマテリアルの格納先です。
Note
Reference(リファレンス)は、シーン記述をコンパクトに再利用するための1種の マクロ と考えてください。
-
-
SOP Import LOP ノードの出力を 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 ノードのそれぞれのパラメータフィールド上にドラッグアンドドロップして割り当てます:
-
BarrelGeo
を Primitives パラメータフィールドまでドラッグします。以下のパスがそのパラメータフィールドに入ったはずです:/Barrel/BarrelGeo
-
Barrel
を Material Path パラメータフィールドまでドラッグします。以下のパスがそのパラメータフィールドに入ったはずです:/Barrel/materials/Barrel
-
これで、シェーディングとテクスチャが付いた樽アセットができました。
ステップ 5 - アセットのバリアントを作成する ¶
では、樽とマテリアルが用意されたので、アセットから単純なバリアントを作成しましょう。
このステップでは、蓋を隠して、蓋付きの樽と蓋なしの樽の 2個 の樽を利用できるようにしたいと思います。 さらに、SOPsでは可視なグループをLOPsで利用できるようにする必要があります。 これをするには、既存のLOPチェーンを修正する必要があります。
-
既存の SOP Import LOP ノードを選択して、パラメータエディタで以下の設定をします:
-
Primitive Path パラメータフィールドに、以下を入力します:
/Barrel/BarrelGeo/Body
これは、USD内部構造に保存されるアセットバリアントのディレクトリ場所です。 この場所は、 Scene Graph Tree で確認することができます。
-
Parent Primitive Kind パラメータドロップダウンメニューで、 Component オプションを選択します。
これは、樽バリアントの別々の部位を コンポーネント にします。 これによって、アセットを整理することができます。
このような体系化構造の詳細は、Solarisの用語集を参照してください。
-
Layer Save Path パラメータフィールドのパスは、前回のチュートリアルで設定した時と変わっていないので変更する必要はありません。
-
Import Group パラメータフィールドに、以下を入力します:
Barrel MetalStraps
右側にあるドロップダウンメニューを使って、これらのグループを選択することができます。
-
-
既存の SOP Import LOP ノードをAltドラッグしてそのノードのコピーを作成してから、そのコピーを 最初 (オリジナル)の SOP Import LOP ノードの下のワイヤー上に乗せます。
-
2つ目 (コピー)の SOP Import LOP ノードを選択して、 パラメータエディタ で以下の設定をします:
-
Primitive Path パラメータフィールドに、以下を入力します:
/Barrel/BarrelGeo/Lids
-
Layer Save Path パラメータフィールドに、以下を入力します:
$HIP/tutorial1/Geo/BarrelLids.usd
-
Import Group パラメータフィールドに、以下を入力します:
Lids
Warning
Import Group パラメータフィールドには
Lids
のみ を指定してください。 -
-
Null LOPノードを追加し、名前をBarrel_w_Lidに変更してから、 Assign Material LOP ノードの 出力 をその Barrel_w_Lid ノードの 入力 に接続します。
-
Scene Graph Tree を見てみましょう。
BarrelGeo
下にBody
とLids
がコンポーネントとして存在しているのがわかります。 -
Body
とLids
をBarrelGeo
のサブコンポーネントにした方が理にかなっていたように思います。Configure Primitives LOPノードを追加してから、 2つ目 の SOP Import LOP ノードの 出力 を Configure Primitives LOP ノードの 入力 に接続します。
-
Configure Primitives LOP ノードを選択して、 パラメータエディタ で以下の設定をします:
-
Primitives パラメータフィールドに、以下を入力します:
/Barrel/BarrelGeo/*
Note
このパスの最後にある
*
(アスタリスク)は、 すべてに合致 を意味します。 -
Kind パラメータドロップダウンメニューから、 Subcomponent オプションを選択します。
-
-
再度 Scene Graph Tree を見てください。
これで、階層を グループ から コンポーネント に、 コンポーネント から サブコンポーネント に変更する方法を学びました。 (グループを サブコンポーネント からコンポーネントへといったように)この階層を崩すことは できません 。 そうしても、USDは失敗するでしょう。
Tip
荷台の上に10本の樽を置きたいとなった場合、階層内に アセンブリ を配置しても良いでしょう。
アセンブリの詳細は、Solarisの用語集を参照してください。
単純なバリアントを作成する ¶
このステップでは、単純な樽のバリアントを作成します。
-
Prune LOPノードを追加して、 Assign Material LOPノードの 出力 をその Prune LOP ノードの 入力 に接続します。
-
Prune LOP ノードを選択します。
-
Scene Graph Tree ペインから
Lids
をそのPrune LOPノードの パラメータエディタ 内の Primitive Pattern パラメータフィールドにドラッグします。 -
Prune LOP を選択して、ディスプレイフラグを 有効 にします。
ビューポートで
Lids
が消えたのがわかります。 -
Null LOPノードを追加して、名前をBarrel_No_Lidに変更します。
-
Prune LOP ノードの 出力 を Barrel_No_Lid ノードの 入力 に接続します。
-
⇥ Tabメニューから Add Variants to New Primitive を選択して、 Add Variant LOPを追加します。
-
Barrel_w_Lid ノードの 出力 を Add Variant LOP ノードの 1番目の入力 に接続し、 Barrel_No_Lid ノードの 出力 を Add Variant LOP ノードの 2番目の入力 に接続します。
-
Add Variant LOP ノードをクリックして表示されるコンテキストメニューから LOP Actions ▸ Inspect Active Layer を選択します。
-
表示されたUSDコードを見てください。そのLOPが新しく樽をまるごと構築してから、その蓋を隠しているだけであることに気づくと思います。これは、あまり 効率的ではありません 。
この 単純なオブジェクト に関しては、さほど重大ではないですが、もっと複雑なオブジェクトだったり、アセットがたくさんあった場合のことを想像してください。 そのような場合だと、アセットをもっと効率化したいです。
Context Option Blockを使ってバリアントを作成する ¶
このステップでは、樽のバリアントをもっと効率化します。
-
⇥ Tabメニューから Add Variants to Existing Primitive を選択して バリアントブロック を作成します。
Begin Context Options Block LOPノード(
variantblock_begin
)と Add Variant LOPノード(variantblock_end
)の間にLOPノードを接続するためのブロックが ネットワークエディタ に表示されます。 -
作成したこのブロックの中にある variantblock_end ノードを選択します。
Note
Variant Block End LOP の Variant Name Default パラメータ内の
`opinput(“.”, $IIDX)`
のエクスプレッションが何を意味しているのか気になっていることでしょう。 -
Scene Graph Tree から
BarrelGeo
をパラメータエディタの Primitive Path パラメータフィールドまでドラッグします。Tips
-
Scene Graph Tree のフォーカスが変わらないようにするには、
Barrel_w_Lid
ノードを選択してから、その Scene Graph Tree ペインをピン留めします。 -
ペインをピン留めしてドラッグアンドドロップするのが面倒くさいのであれば、 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コードがもっとコンパクトに収まったことに注目してください。
前のコードでは樽をまるごと再び追加して蓋を非表示にしていたわけですが、このコードでは、数行の追加で蓋を隠してバリアントを生成しています。
-
ステップ 6 - デフォルトのバリアントを選択して、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 パラメータフィールドにUSDファイルの出力パスを入力します。例えば、
$HIP/tutorial1/BarrelsAsset.usd
。 -
Output Processing セクションの Use Relative Paths オプションを 有効 にしてください。
これを有効にすることで、このLOPネットワーク内のどこの場所でも
$HIP
を使用することができます。 USD ROP LOP ノードは、USDファイルに書き出す際に、このLOPネットワークから$HIP
の参照先を調べて、相対参照に置換します。相対パス は実際にUSDで非常に複雑な部分で、初心者には本当に混乱を招いてしまいます。 このコントロールを使用することで、馴染みのあるファイル構造で作業して、LOPsに内部でUSD用のパスを作成させることができます。
-
Extra Files セクションには、 Error Saving Layers with Implicit Paths オプションがあります。
このオプションは、レイヤーの設定を間違えてLOPsがデータの保存先を分からなくなった時に USD ROP LOP ノードにエラーを出させます。
これを試したいのであれば、この USD ROP LOP ノードのちょうど上にある Configure Layer LOP ノードをバイパスにしてみてください。 ファイルの保存をしてみると、 USD ROP LOP ノードでエラーが出ます。
-
USD ROP LOP ノードのパラメータリストの上部にある Save to Disk ボタンを押して、USDファイルをディスクに保存します。
ステップ 7 - 変更内容を確認する ¶
このステップでは、さきほど保存したUSDファイルをチェックして、すべてが動作したかどうかを確認します。
USDをHoudiniに読み戻す ¶
-
さきほど保存したUSDファイルを読み込みます。
-
Reference LOPを追加します。このLOPはどこにも 接続しないでください 。
-
パラメータエディタ で、以下の設定をします:
-
File and Internal References セクションの Primitive Path パラメータフィールドに、以下を入力します:
/Barrel
-
File and Internal References セクションの File Pattern パラメータの右側のファイル選択ダイアログボタンをクリックしてUSDファイルを選択して、そのUSDを読み込みます:
$HIP/tutorial1/BarrelsAsset.usd
LOPネットワーク内の最後のROPと同じ結果が得られるはずです。
-
-
Set Variant LOPノードを追加して接続し、 パラメータエディタ で以下の設定をします:
-
Scene Graph Tree から
BarrelGeo
を Primitives パラメータフィールドまでドラッグします。 -
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
構文が使用されていますか?
マテリアルライブラリのセクションと特に警告を確認してください。
おめでとうございます!最初のUSDアセットを構築し、次のチュートリアルに進む準備ができました。