Houdini 20.0 Solaris

LOPs入門チュートリアル 2 アセット部署編: アセンブリ

前回のチュートリアルに続いて、いくつかアセットをもっと大きなアセットにアセンブル(組み立て)していきます。これは、プロダクションパイプラインの初期ステージの1つである アセット作成 の小規模版です。

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 Primitives

    On

    Destination Primitives

    /BookShelves/

    Duplicate Name

    RightShelf

    Modify Source Primitive

    Source primitives are first duplicates

    Translate

    1.5,0,0

  • このDuplicate LOPにSet Variant LOPを追加します。

    Primitives

    /BookShelves/RightShelf

    Variant Set

    model

    Variant Name

    BookShelf2

    Note

    BookShelvesという名前には キャメルケース(各単語の頭の文字は大文字、それ以外は小文字) を使用しています。 これは、あなたの規則で整合性を取ってください。Houdini(Linuxでも同様)では、bookshelvesBookShelvesは同じワードではありません。

  • 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.usdHerbJarsAsset.usd⌃ Ctrlクリックで複数選択した状態でそれらをStage Manger内のPotsフォルダ下にドラッグアンドドロップします。

  • 次に、これらのオブジェクトを複製して、オブジェクト毎に固有のバリエーションを選択していきます。最終的に7杯の固有の瓶を作ります。

    • 一番簡単な複製の方法は、Stage Manger内のPrim上で ▸ Duplicate することです。

    • Primを複製したら、それぞれの複製に対して固有のバリアントを選択します。この一番簡単な方法は、Stage Manager内のVariants項目からバリアントを選択することです。

    完了するとStage Managerが下図のようになっているはずです:

    これで棚の上にインスタンス化したい瓶/鉢を用意することができましたので、コレクションを作成しましょう。

  • Stage Manager LOPにCollection LOPを接続します。

    Collection Name

    StuffToBeInstanced

    Primitive Pattern

    /Pots/*

  • Instancer LOPを追加して、その1番目の入力をSHELVES Null LOPに接続します。

    Primitive Path

    /BookShelves/Contents

    Prototype Source

    Second Inputs

    Primitive Kind

    Group

    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 Type

    Polygons

    これから、瓶/鉢をインスタンス化したい領域上に何点かポイントをばら撒くことができるようにするために、その領域だけを保存したいです。 それにはグループを作成する必要があり、ここではその方法の1つを説明します。

  • ビューポート内でSpace + 2を押して Top ビューに切り替えます。Wを押してワイヤーフレーム表示に切り替えます。

  • ビューポート内で⇥ Tabを押してタブメニューを開きます。groupと入力してEnterを押すと、Groupツールが起動します。

    • プリミティブ選択モードにするために、4キーを押します。

    • 下図のようにプリミティブを矩形ドラッグします。

      1回の操作ですべてのプリミティブを取得するのではなくて、⇧ Shiftを押しながら再び矩形ドラッグして、複数のプリミティブを選択します。

    • ▸ Accept Selection で選択を完了します。

  • このGroup SOPにBlast SOPを接続します。 Group パラメータには、さきほど作成したグループを選択し、 Delete Non Selected パラメータのチェックを有効にします。

    棚の上面と下面の両方が表示されました。下面を取り除きましょう。

  • Blast SOPDelete SOPを接続します。法線を基準にして削除します。

    Tab ▸ Normal

    Enable

    Direction

    0,-1,0

    Spread

    50

  • Delete SOPにScatter SOPを接続します。

    Force Total Count

    300

    Relax Iterations

    100

    Scale Radii by

    2

    Max Relax Radius

    14

Primvarsを作成する

これから、ランダム値を生成して、瓶/鉢のベースカラー、スペキュラーの粗さ、アルベドをオーバーライドさせて、瓶/鉢にもっとランダムな特性を入れていきます。 Houdiniで言うと、これはジオメトリアトリビュートで行ないますが、USDで言うと、それがPrimvarsです。

  • Scatter SOPAttribute 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

    Dimensions

    1

  • basecolorのコピーをもう1個作成し、roughに接続します。名前をalbedomultに変更します。

    Min Value

    .2

    Dimensions

    1

    Dimensionsパラメータの値を1にすると、その値は 単一浮動小数点 になります。 これをデフォルト値(3)のままにすると、その値は ベクトル になります。 この時点では、問題になりませんが、シェーダではroughtalbedomultには 単一浮動小数点 が必要です(まだ単一浮動小数点でない場合には、ベクトルを単一浮動小数点に変換してください)。

  • albedomultOutput SOPを接続します。名前をOUTに変更します。

    Tip

    シェーダのパラメータのラベル上にマウスカーソルを置くことで、上記のシェーダアトリビュートの名前を調べることができます。

  • このOutputノード上でを押したままにします。basecolorroughalbedomultのPointアトリビュートが表示されているはずです。ノードチェーン内の最後のSOP上でクリックして Spreadsheet を選択して、basecolorroughalbedomultのランダム値(上記で選択した範囲内になっているかどうか)を確認してください。

  • Uを押して、再度/stageに戻ります。

  • Instancer LOPの2番目の入力にCollection LOPを接続します。

仕上げとUSDへの保存

棚の上にいくつもの瓶/鉢が表示されるようになったはずです。 Instancer LOPの Seed パラメータをいじって、それらの瓶/鉢が色々と変化するのがわかります。

  • Instancer LOPで以下の設定をします:

    Point Attributes to Copy

    basecolor albedomult rough

    Prototype Source

    Second Input

    Note

    USDでは、ポイント上にインスタンス化された各モデルのことをプロトタイプと呼びます。

    Tip

    現在のところ、すべての瓶/鉢が同じ方向を向いています。 Nアトリビュートとupアトリビュート(またはorientアトリビュートだけ)を修正することで、これを変更することができます。

    アセットとしてこれを保存する前に、いくつかしておかなければならない事があります。 Scene Graph Treeを見ると、“Contents”グループ内の“Prototypes”のKindが未定義のままです。 これを放置するのは良くない習慣なので、直しましょう。

  • Configure Primitive LOPを接続します。

    Primitives

    /BookShelves/Contents/Prototypes /BookShelves/Contents/Prototypes/*

    Kind

    Group

    “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だけを使用している人には関係ないでしょう。

Solaris

USD

ジオメトリ

  • SOP Geometry I/O

    HoudiniがSOPジオメトリをUSDに変換する方法、その工程を制御する方法の詳細。

  • Component Builder

    Component Builderツールは、マテリアル、バリアント、ペイロード、レイヤーをサポートし、SOPからUSDモデルを作成するためのネットワークスニペットを配置します。

レイアウト

  • Editノード

    ビューア内でインタラクティブにPrimsをトランスフォームさせます。物理衝突を使用して、プロップを現実的に配置することができます。

  • Layoutノード

    インスタンス化されたUSDアセットをシーンに取り込むツールが備わっています。個々にコンポーネントを配置したり、カスタマイズ可能なブラシを使って色々な方法でコンポーネントをペイント/スキャッターしたり、既存のインスタンスを編集することができます。

  • カスタムレイアウトブラシ

    Layout LOPの挙動をカスタマイズして利用可能なレイアウトブラシデジタルアセットの作成方法。

ルック開発

  • MaterialX

    HoudiniにはMaterialXシェーダノードに呼応させたVOPノードが用意されています。これらのノードを使用してシェーダネットワークを構築したり、既存のMaterialXベースのシェーダをインポートすることで、(HoudiniのUSDレンダラーの)KarmaでMaterialXシェーダノードを利用することができます。

  • UDIMパス

    テクスチャ空間の異なるタイルを、それぞれ別の解像度で、異なるテクスチャファイルにエンコードすることができます。その後、kaiju.exrといったテクスチャファイル名を指定すると、Houdiniがロード時にそのトークンを特定のタイルアドレスに置き換えてくれます。

  • シェーダ変換フレームワーク

    シェーダノードのUSDプリミティブへの変換を含む、Solarisシェーディングフレームについて説明しています。

Karmaレンダリング

チュートリアル