On this page |
はじめに ¶
まだ準備ができていない方は、必要なサポートファイルをダウンロードしてください。
このチュートリアルでは、再び“アセット”部署の役を演じましょう。 今回は、アセットをアセンブル(組み立て)して、棚に瓶/鉢をいっぱい配置します。 このような作業は、スタジオによってアセット部署でやるのかレイアウト部署でやるのか分かれますが、このチュートリアルでは、“アセット”扱いにします。
このレッスンでは、Stage Manager LOPを手短に学習します。 Stage Manager LOPの詳細は、次のレッスンで触れます。
ポイントインスタンサーとインスタンス化の用語も参照してください。
作業の度にlops_tutorial_2.1.hip
のような名前でファイルを頻繁に保存するようにしてください。
Tip
作業する時はシーンファイルを頻繁に保存するようにしてください。例えば、lopsintro_tutorial_2.hip
のような名前でファイルを保存するようにしてください。
アセンブリ ¶
-
新規でHoudiniを起動します。
-
Solaris デスクトップに切り替えます。
パネルのどれかで Scene Graph Tree パネルを表示してください。
-
/stage
に移動します。Note
Houdini内のどのレベルでもLOPネットワークを作成することができますが、わかりやすくするために、
/stage
内で作業しましょう。
これから、HoudiniのネイティブのSOPベースのツールを使って、インスタンス化の処理をしていきます。 接続しなければならないノードがたくさんあるので、このページの最後の画像を参考に、そのネットワークの作り方を確認してください。
-
Reference LOPを作成します。名前を
BookShelves
に変更します。Primitive Path/$OS/LeftShelf
Reference File$HIP/LOPS_DEMO_FILES/Library/Assets/BookShelves/BookShelfAsset.usd
Reference(リファレンス)は、PrimsをLOPネットワークに読み込むのによく使用する方法の1つです。
-
このReference LOPにDuplicate LOPを追加します(このノードは、以下の内容を完全に入力しないとエラーを出すことに注意してください)。
Separate Source and Destination PrimitivesOn
Destination Primitives/BookShelves/
Duplicate NameRightShelf
Modify Source PrimitiveSource primitives are first duplicates
Translate1.5,0,0
-
このDuplicate LOPにSet Variant LOPを追加します。
Primitives/BookShelves/RightShelf
Variant Setmodel
Variant NameBookShelf2
Note
BookShelves
という名前には キャメルケース(各単語の頭の文字は大文字、それ以外は小文字) を使用しています。 これは、あなたの規則で整合性を取ってください。Houdini(Linuxでも同様)では、bookshelves
とBookShelves
は同じワードではありません。 -
Set Variant LOP にNull LOPを追加して、名前を“SHELVES”に変更します。 このページの最後の画像を見て、ここまですべて正しく接続されているかどうかを確認してください。
これから、Stage Manager LOPを使って何かを取り込んで、それを棚の上にインスタンス化していきます。
-
Stage Manager LOPを作成します。このLOPをまだどこにも接続しないでください。
-
Stage Manager LOPのパラメータエディタ内で、緑色の“+”記号をクリックしてフォルダを追加します。この名前を
Pots
にします。 -
Stage Manager LOPでファイルブラウザを開いて、
LOPS_DEMO_FILES/Library/Assets/
でClayJars
フォルダとHerbs
フォルダを展開して、各フォルダの中のClaysJarsAsset.usd
とHerbJarsAsset.usd
を⌃ Ctrlクリックで複数選択した状態でそれらをStage Manger内のPots
フォルダ下にドラッグアンドドロップします。
-
-
次に、これらのオブジェクトを複製して、オブジェクト毎に固有のバリエーションを選択していきます。最終的に7杯の固有の瓶を作ります。
-
Stage Manager LOPにCollection LOPを接続します。
Collection NameStuffToBeInstanced
Primitive Pattern/Pots/*
-
Instancer LOPを追加して、その1番目の入力を
SHELVES
Null LOPに接続します。Primitive Path/BookShelves/Contents
Prototype SourceSecond Inputs
Primitive KindGroup
Prototype Primitives%StuffToBeInstanced
-
このInstancer LOPを選択してENTERを押して、その中に入ります。
Note
次の手順を実行するまでは Instancer LOP はエラーになっています。
-
Instancer LOPの中 ¶
では、瓶/鉢をインスタンス化するポイントクラウドを作成したいです。この作成方法はたくさんありますが、ここでは、その内の1つの方法で行ないます。 接続しなければならないノードがたくさんあります。
-
LOP Import LOPを作成します。
LOP Path/stage/SHELVES
Primitives*
-
このLOP Import LOPにUnpack USDを追加します。
Geometry TypePolygons
これから、瓶/鉢をインスタンス化したい領域上に何点かポイントをばら撒くことができるようにするために、その領域だけを保存したいです。 それにはグループを作成する必要があり、ここではその方法の1つを説明します。
-
ビューポート内でSpace + 2を押して Top ビューに切り替えます。Wを押してワイヤーフレーム表示に切り替えます。
-
ビューポート内で⇥ Tabを押してタブメニューを開きます。
group
と入力してEnterを押すと、Groupツールが起動します。-
プリミティブ選択モードにするために、4キーを押します。
-
下図のようにプリミティブを矩形ドラッグします。
1回の操作ですべてのプリミティブを取得するのではなくて、⇧ Shiftを押しながら再び矩形ドラッグして、複数のプリミティブを選択します。
-
▸ Accept Selection で選択を完了します。
-
-
このGroup SOPにBlast SOPを接続します。 Group パラメータには、さきほど作成したグループを選択し、 Delete Non Selected パラメータのチェックを有効にします。
棚の上面と下面の両方が表示されました。下面を取り除きましょう。
-
Blast SOP にDelete SOPを接続します。法線を基準にして削除します。
Tab ▸ NormalEnable
Direction0,-1,0
Spread50
-
Delete SOPにScatter SOPを接続します。
Force Total Count300
Relax Iterations100
Scale Radii by2
Max Relax Radius14
Primvarsを作成する ¶
これから、ランダム値を生成して、瓶/鉢のベースカラー、スペキュラーの粗さ、アルベドをオーバーライドさせて、瓶/鉢にもっとランダムな特性を入れていきます。 Houdiniで言うと、これはジオメトリアトリビュートで行ないますが、USDで言うと、それがPrimvarsです。
-
Scatter SOP にAttribute Randomize SOPを接続します。名前を
basecolor
に変更します。Attribute Name$OS
これは、X,Y,Zコンポーネントが0から1のランダム値が入った“basecolor”という名前のアトリビュートを作成します。 これが意味する事は、これらのプリミティブにシェーダを割り当て、そのシェーダに“basecolor”という名前のパラメータが存在すれば、そのパラメータ値がこの値でオーバーライドされます。 Attribute Nameパラメータにノード名を意味する
$OS
を使用することで、このSOPをコピーアンドペーストして、そのSOPの名前を変更するだけで、正しい名前のアトリビュートを作成することができます。 -
basecolor
SOPをコピーアンドペースト(またはノードをAltドラッグ)して、コピーを作成します。この新しいコピーをbasecolor
SOPに接続します。名前をrough
に変更します。Min Value.5
Dimensions1
-
basecolor
のコピーをもう1個作成し、rough
に接続します。名前をalbedomult
に変更します。Min Value.2
Dimensions1
Dimensions
パラメータの値を1
にすると、その値は 単一浮動小数点 になります。 これをデフォルト値(3
)のままにすると、その値は ベクトル になります。 この時点では、問題になりませんが、シェーダではrought
とalbedomult
には 単一浮動小数点 が必要です(まだ単一浮動小数点でない場合には、ベクトルを単一浮動小数点に変換してください)。 -
albedomult
にOutput SOPを接続します。名前をOUT
に変更します。Tip
シェーダのパラメータのラベル上にマウスカーソルを置くことで、上記のシェーダアトリビュートの名前を調べることができます。
-
このOutputノード上でを押したままにします。
basecolor
、rough
、albedomult
のPointアトリビュートが表示されているはずです。ノードチェーン内の最後のSOP上でクリックして Spreadsheet を選択して、basecolor
、rough
、albedomult
のランダム値(上記で選択した範囲内になっているかどうか)を確認してください。 -
Uを押して、再度
/stage
に戻ります。 -
Instancer LOPの2番目の入力にCollection LOPを接続します。
仕上げとUSDへの保存 ¶
棚の上にいくつもの瓶/鉢が表示されるようになったはずです。 Instancer LOPの Seed パラメータをいじって、それらの瓶/鉢が色々と変化するのがわかります。
-
Instancer LOPで以下の設定をします:
Point Attributes to Copybasecolor albedomult rough
Prototype SourceSecond Input
Note
USDでは、ポイント上にインスタンス化された各モデルのことをプロトタイプと呼びます。
Tip
現在のところ、すべての瓶/鉢が同じ方向を向いています。
N
アトリビュートとup
アトリビュート(またはorient
アトリビュートだけ)を修正することで、これを変更することができます。アセットとしてこれを保存する前に、いくつかしておかなければならない事があります。 Scene Graph Treeを見ると、“Contents”グループ内の“Prototypes”のKindが未定義のままです。 これを放置するのは良くない習慣なので、直しましょう。
-
Configure Primitive LOPを接続します。
Primitives/BookShelves/Contents/Prototypes /BookShelves/Contents/Prototypes/*
KindGroup
“Prototypes”が
group
になったことがわかるはずです。 -
USD ROP LOPを接続します。
Layer Metadata ▸ Default Primitive/BookShelves
Output File$HIP/tutorials/PackedShelves.usd
-
Save to Disk
をクリックして保存します。
-
Note
LOPチェーンにいくつかライトを追加して、このレンダリングのルックをプレビューすることもできます。 Karmaレンダーで表示させるには、ビューポートドロップダウン(デフォルトでは“Persp”になっているメニュー)から“Karma”を選択します。
これで、次のチュートリアルに進む準備ができました!
ここで構築した棚の結果を確認したいのであれば、Reference LOPを使って、保存したUSD($HIP/tutorials/PackedShelves.usd
)とデモファイル($HIP/LOPS_DEMO_FILES/Library/Assets/InstancedShelves/PackedShelves.usd
)を読み込んでください。
LOPS_DEMO_FILES/BookShelfInstancing.hip
を見ることで、このチュートリアルで説明した最終ノードネットワークを確認することもできます。
おめでとうございます!いくつかのアセットから大きなアセットを組み立て、次のチュートリアルに進む準備ができました!
トラブルシューティング ¶
USD ROPからUSD
ファイルを保存しようとすると、このエラー(または似たエラー)が出ます:Warning: Upgrading crate file </path/to/file/PackedShelves.usd> from version 0.7.0 to 0.8.0: A SdfPayloadListOp value was detected which requires crate version 0.8.0.
(警告: Crateファイル</path/to/file/PackedShelves.usd>をバージョン0.7.0から0.8.0にアップグレード:Crateバージョン0.8.0を必要とするSdfPayloadListOp値が検知されました。)
(たいていの場合)この警告は無視して構わないです。 “Crate”は、USDバイナリファイル形式の名前です。 このファイルがいくつものバージョンで構成されています。 デフォルトでは、新しいファイルは特定のバージョン(この書き出しの時点では“0.7”形式)で書き出されます。 しかし、特定のUSD構造が“0.7”形式では表現できないために、この警告では、実際には特定のファイルを“0.8”形式で書き出すことを伝えています。 つまり、“0.7”形式しか理解できない古いバージョンのUSDを使用しているアプリケーションは、このファイルを読み込むことができません。 これは、Houdiniだけを使用している人には関係ないでしょう。